@airframes/acars-decoder 1.4.7 → 1.6.0

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 (131) hide show
  1. package/.github/FUNDING.yml +1 -1
  2. package/.github/workflows/yarn-test.yml +11 -4
  3. package/README.md +32 -0
  4. package/index.d.ts +17 -0
  5. package/index.ts +2 -0
  6. package/package.json +7 -15
  7. package/tsconfig.json +3 -3
  8. package/yarn-error.log +3354 -0
  9. package/coverage/clover.xml +0 -1799
  10. package/coverage/coverage-final.json +0 -24
  11. package/coverage/lcov-report/base.css +0 -224
  12. package/coverage/lcov-report/block-navigation.js +0 -87
  13. package/coverage/lcov-report/favicon.png +0 -0
  14. package/coverage/lcov-report/index.html +0 -131
  15. package/coverage/lcov-report/prettify.css +0 -1
  16. package/coverage/lcov-report/prettify.js +0 -2
  17. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  18. package/coverage/lcov-report/sorter.js +0 -196
  19. package/coverage/lcov.info +0 -2278
  20. package/dist/DateTimeUtils.d.ts +0 -8
  21. package/dist/DateTimeUtils.js +0 -27
  22. package/dist/DecoderPlugin.d.ts +0 -18
  23. package/dist/DecoderPlugin.js +0 -71
  24. package/dist/DecoderPluginInterface.d.ts +0 -7
  25. package/dist/DecoderPluginInterface.js +0 -3
  26. package/dist/IcaoDecoder.d.ts +0 -10
  27. package/dist/IcaoDecoder.js +0 -111
  28. package/dist/MessageDecoder.d.ts +0 -14
  29. package/dist/MessageDecoder.js +0 -129
  30. package/dist/bin/acars-decoder-test.d.ts +0 -2
  31. package/dist/bin/acars-decoder-test.js +0 -53
  32. package/dist/bin/acars-decoder.d.ts +0 -2
  33. package/dist/bin/acars-decoder.js +0 -20
  34. package/dist/index.d.ts +0 -4
  35. package/dist/index.js +0 -20
  36. package/dist/plugins/Label_15.d.ts +0 -11
  37. package/dist/plugins/Label_15.js +0 -40
  38. package/dist/plugins/Label_16_N_Space.d.ts +0 -11
  39. package/dist/plugins/Label_16_N_Space.js +0 -80
  40. package/dist/plugins/Label_16_N_Space.test.d.ts +0 -1
  41. package/dist/plugins/Label_16_N_Space.test.js +0 -84
  42. package/dist/plugins/Label_1M_Slash.d.ts +0 -11
  43. package/dist/plugins/Label_1M_Slash.js +0 -61
  44. package/dist/plugins/Label_1M_Slash.test.d.ts +0 -1
  45. package/dist/plugins/Label_1M_Slash.test.js +0 -43
  46. package/dist/plugins/Label_20_CFB.01.d.ts +0 -11
  47. package/dist/plugins/Label_20_CFB.01.js +0 -69
  48. package/dist/plugins/Label_20_POS.d.ts +0 -11
  49. package/dist/plugins/Label_20_POS.js +0 -62
  50. package/dist/plugins/Label_30_Slash_EA.d.ts +0 -11
  51. package/dist/plugins/Label_30_Slash_EA.js +0 -54
  52. package/dist/plugins/Label_30_Slash_EA.test.d.ts +0 -1
  53. package/dist/plugins/Label_30_Slash_EA.test.js +0 -35
  54. package/dist/plugins/Label_44_ETA.d.ts +0 -11
  55. package/dist/plugins/Label_44_ETA.js +0 -69
  56. package/dist/plugins/Label_44_IN.d.ts +0 -11
  57. package/dist/plugins/Label_44_IN.js +0 -69
  58. package/dist/plugins/Label_44_OFF.d.ts +0 -11
  59. package/dist/plugins/Label_44_OFF.js +0 -74
  60. package/dist/plugins/Label_44_ON.d.ts +0 -11
  61. package/dist/plugins/Label_44_ON.js +0 -69
  62. package/dist/plugins/Label_44_POS.d.ts +0 -11
  63. package/dist/plugins/Label_44_POS.js +0 -81
  64. package/dist/plugins/Label_5Z.d.ts +0 -11
  65. package/dist/plugins/Label_5Z.js +0 -120
  66. package/dist/plugins/Label_80.d.ts +0 -12
  67. package/dist/plugins/Label_80.js +0 -203
  68. package/dist/plugins/Label_8E.d.ts +0 -10
  69. package/dist/plugins/Label_8E.js +0 -48
  70. package/dist/plugins/Label_8E.test.d.ts +0 -1
  71. package/dist/plugins/Label_8E.test.js +0 -32
  72. package/dist/plugins/Label_B6.d.ts +0 -11
  73. package/dist/plugins/Label_B6.js +0 -26
  74. package/dist/plugins/Label_ColonComma.d.ts +0 -10
  75. package/dist/plugins/Label_ColonComma.js +0 -28
  76. package/dist/plugins/Label_H1.d.ts +0 -9
  77. package/dist/plugins/Label_H1.js +0 -18
  78. package/dist/plugins/Label_H1_M1BPOS.d.ts +0 -11
  79. package/dist/plugins/Label_H1_M1BPOS.js +0 -54
  80. package/dist/plugins/Label_H1_M1BPRG.d.ts +0 -11
  81. package/dist/plugins/Label_H1_M1BPRG.js +0 -36
  82. package/dist/plugins/Label_QP.d.ts +0 -10
  83. package/dist/plugins/Label_QP.js +0 -49
  84. package/dist/plugins/Label_QQ.d.ts +0 -10
  85. package/dist/plugins/Label_QQ.js +0 -49
  86. package/dist/plugins/Label_QR.d.ts +0 -10
  87. package/dist/plugins/Label_QR.js +0 -49
  88. package/dist/plugins/Label_QS.d.ts +0 -10
  89. package/dist/plugins/Label_QS.js +0 -49
  90. package/dist/plugins/Label_SQ.d.ts +0 -10
  91. package/dist/plugins/Label_SQ.js +0 -104
  92. package/dist/plugins/official.d.ts +0 -22
  93. package/dist/plugins/official.js +0 -38
  94. package/src/DateTimeUtils.ts +0 -26
  95. package/src/DecoderPlugin.ts +0 -83
  96. package/src/DecoderPluginInterface.ts +0 -9
  97. package/src/IcaoDecoder.ts +0 -137
  98. package/src/MessageDecoder.ts +0 -117
  99. package/src/bin/acars-decoder-test.ts +0 -67
  100. package/src/bin/acars-decoder.ts +0 -23
  101. package/src/index.d.ts +0 -15
  102. package/src/index.ts +0 -4
  103. package/src/plugins/Label_15.ts +0 -45
  104. package/src/plugins/Label_16_N_Space.test.ts +0 -94
  105. package/src/plugins/Label_16_N_Space.ts +0 -91
  106. package/src/plugins/Label_1M_Slash.test.ts +0 -45
  107. package/src/plugins/Label_1M_Slash.ts +0 -69
  108. package/src/plugins/Label_20_CFB.01.ts +0 -81
  109. package/src/plugins/Label_20_POS.ts +0 -68
  110. package/src/plugins/Label_30_Slash_EA.test.ts +0 -37
  111. package/src/plugins/Label_30_Slash_EA.ts +0 -60
  112. package/src/plugins/Label_44_ETA.ts +0 -81
  113. package/src/plugins/Label_44_IN.ts +0 -81
  114. package/src/plugins/Label_44_OFF.ts +0 -88
  115. package/src/plugins/Label_44_ON.ts +0 -81
  116. package/src/plugins/Label_44_POS.ts +0 -96
  117. package/src/plugins/Label_5Z.ts +0 -125
  118. package/src/plugins/Label_80.ts +0 -215
  119. package/src/plugins/Label_8E.test.ts +0 -34
  120. package/src/plugins/Label_8E.ts +0 -55
  121. package/src/plugins/Label_B6.ts +0 -28
  122. package/src/plugins/Label_ColonComma.ts +0 -32
  123. package/src/plugins/Label_H1.ts +0 -18
  124. package/src/plugins/Label_H1_M1BPOS.ts +0 -60
  125. package/src/plugins/Label_H1_M1BPRG.ts +0 -40
  126. package/src/plugins/Label_QP.ts +0 -54
  127. package/src/plugins/Label_QQ.ts +0 -54
  128. package/src/plugins/Label_QR.ts +0 -54
  129. package/src/plugins/Label_QS.ts +0 -54
  130. package/src/plugins/Label_SQ.ts +0 -111
  131. package/src/plugins/official.ts +0 -22
@@ -1,84 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const MessageDecoder_1 = require("../MessageDecoder");
4
- const Label_16_N_Space_1 = require("./Label_16_N_Space");
5
- test('decodes Label 16 variant 1', () => {
6
- const decoder = new MessageDecoder_1.MessageDecoder();
7
- const decoderPlugin = new Label_16_N_Space_1.Label_16_N_Space(decoder);
8
- expect(decoderPlugin.decode).toBeDefined();
9
- expect(decoderPlugin.name).toBe('label-16-n-space');
10
- expect(decoderPlugin.qualifiers).toBeDefined();
11
- expect(decoderPlugin.qualifiers()).toEqual({
12
- labels: ['16'],
13
- preambles: ['N '],
14
- });
15
- const text = 'N 44.203,W 86.546,31965,6, 290';
16
- const decodeResult = decoderPlugin.decode({ text: text });
17
- console.log(JSON.stringify(decodeResult, null, 2));
18
- expect(decodeResult.decoded).toBe(true);
19
- expect(decodeResult.decoder.decodeLevel).toBe('partial');
20
- expect(decodeResult.decoder.name).toBe('label-16-n-space');
21
- expect(decodeResult.formatted.description).toBe('Position Report');
22
- expect(decodeResult.message.text).toBe(text);
23
- expect(decodeResult.raw.latitude_direction).toBe('N');
24
- expect(decodeResult.raw.latitude).toBe(44.203);
25
- expect(decodeResult.raw.longitude_direction).toBe('W');
26
- expect(decodeResult.raw.longitude).toBe(86.546);
27
- expect(decodeResult.raw.flight_level).toBe(31965);
28
- expect(decodeResult.formatted.items.length).toBe(2);
29
- expect(decodeResult.formatted.items[0].type).toBe('aircraft_position');
30
- expect(decodeResult.formatted.items[0].code).toBe('POS');
31
- expect(decodeResult.formatted.items[0].label).toBe('Aircraft Position');
32
- expect(decodeResult.formatted.items[0].value).toBe('44.203 N, 86.546 W');
33
- expect(decodeResult.formatted.items[1].type).toBe('flight_level');
34
- expect(decodeResult.formatted.items[1].code).toBe('FL');
35
- expect(decodeResult.formatted.items[1].label).toBe('Flight Level');
36
- expect(decodeResult.formatted.items[1].value).toBe(31965);
37
- });
38
- test('decodes Label 16 variant 2', () => {
39
- const decoder = new MessageDecoder_1.MessageDecoder();
40
- const decoderPlugin = new Label_16_N_Space_1.Label_16_N_Space(decoder);
41
- expect(decoderPlugin.decode).toBeDefined();
42
- expect(decoderPlugin.name).toBe('label-16-n-space');
43
- expect(decoderPlugin.qualifiers).toBeDefined();
44
- expect(decoderPlugin.qualifiers()).toEqual({
45
- labels: ['16'],
46
- preambles: ['N '],
47
- });
48
- const text = 'N 28.177/W 96.055';
49
- const decodeResult = decoderPlugin.decode({ text: text });
50
- console.log(JSON.stringify(decodeResult, null, 2));
51
- expect(decodeResult.decoded).toBe(true);
52
- expect(decodeResult.decoder.decodeLevel).toBe('full');
53
- expect(decodeResult.decoder.name).toBe('label-16-n-space');
54
- expect(decodeResult.formatted.description).toBe('Position Report');
55
- expect(decodeResult.message.text).toBe(text);
56
- expect(decodeResult.raw.latitude_direction).toBe('N');
57
- expect(decodeResult.raw.latitude).toBe(28.177);
58
- expect(decodeResult.raw.longitude_direction).toBe('W');
59
- expect(decodeResult.raw.longitude).toBe(96.055);
60
- expect(decodeResult.formatted.items.length).toBe(1);
61
- expect(decodeResult.formatted.items[0].type).toBe('aircraft_position');
62
- expect(decodeResult.formatted.items[0].code).toBe('POS');
63
- expect(decodeResult.formatted.items[0].label).toBe('Aircraft Position');
64
- expect(decodeResult.formatted.items[0].value).toBe('28.177 N, 96.055 W');
65
- });
66
- test('decodes Label 16 variant <invalid>', () => {
67
- const decoder = new MessageDecoder_1.MessageDecoder();
68
- const decoderPlugin = new Label_16_N_Space_1.Label_16_N_Space(decoder);
69
- expect(decoderPlugin.decode).toBeDefined();
70
- expect(decoderPlugin.name).toBe('label-16-n-space');
71
- expect(decoderPlugin.qualifiers).toBeDefined();
72
- expect(decoderPlugin.qualifiers()).toEqual({
73
- labels: ['16'],
74
- preambles: ['N '],
75
- });
76
- const text = 'N Bogus message';
77
- const decodeResult = decoderPlugin.decode({ text: text });
78
- console.log(JSON.stringify(decodeResult, null, 2));
79
- expect(decodeResult.decoded).toBe(false);
80
- expect(decodeResult.decoder.decodeLevel).toBe('none');
81
- expect(decodeResult.decoder.name).toBe('label-16-n-space');
82
- expect(decodeResult.formatted.description).toBe('Position Report');
83
- expect(decodeResult.message.text).toBe(text);
84
- });
@@ -1,11 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
- export declare class Label_1M_Slash 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,61 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Label_1M_Slash = void 0;
4
- const DateTimeUtils_1 = require("../DateTimeUtils");
5
- const DecoderPlugin_1 = require("../DecoderPlugin");
6
- class Label_1M_Slash extends DecoderPlugin_1.DecoderPlugin {
7
- name = 'label-1m-slash';
8
- qualifiers() {
9
- return {
10
- labels: ["1M"],
11
- preambles: ['/'],
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: /BA0843/ETA01/230822/LDSP/EGLL/EGSS/2JK0(NEW LINE)1940/EGLL27L/10
20
- const results = message.text.split(/\n|\//).slice(1); // Split by / and new line
21
- if (results) {
22
- if (options.debug) {
23
- console.log(`Label 1M ETA: results`);
24
- console.log(results);
25
- }
26
- decodeResult.raw.flight_number = results[0];
27
- // results[1]: ETA01 (???)
28
- // results[2]: 230822 - UTC date of eta
29
- decodeResult.raw.departure_icao = results[3];
30
- decodeResult.raw.arrival_icao = results[4];
31
- decodeResult.raw.alternate_icao = results[5];
32
- // results[6]: 2JK0 (???)
33
- // results[7] 1940 - UTC eta
34
- decodeResult.raw.arrival_runway = results[8].replace(decodeResult.raw.arrival_icao, ""); // results[8] EGLL27L
35
- // results[9]: 10(space) (???)
36
- decodeResult.formatted.items.push({
37
- type: 'eta',
38
- code: 'ETA',
39
- label: 'Estimated Time of Arrival',
40
- value: DateTimeUtils_1.DateTimeUtils.UTCDateTimeToString(results[2], results[7]),
41
- });
42
- decodeResult.formatted.items.push({
43
- type: 'destination',
44
- code: 'DST',
45
- label: 'Destination',
46
- value: decodeResult.raw.arrival_icao,
47
- });
48
- decodeResult.formatted.items.push({
49
- type: 'origin',
50
- code: 'ORG',
51
- label: 'Origin',
52
- value: decodeResult.raw.departure_icao,
53
- });
54
- }
55
- decodeResult.decoded = true;
56
- decodeResult.decoder.decodeLevel = 'partial';
57
- return decodeResult;
58
- }
59
- }
60
- exports.Label_1M_Slash = Label_1M_Slash;
61
- exports.default = {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const MessageDecoder_1 = require("../MessageDecoder");
4
- const Label_1M_Slash_1 = require("./Label_1M_Slash");
5
- test('decodes Label 8E sample 1', () => {
6
- const decoder = new MessageDecoder_1.MessageDecoder();
7
- const decoderPlugin = new Label_1M_Slash_1.Label_1M_Slash(decoder);
8
- expect(decoderPlugin.decode).toBeDefined();
9
- expect(decoderPlugin.name).toBe('label-1m-slash');
10
- expect(decoderPlugin.qualifiers).toBeDefined();
11
- expect(decoderPlugin.qualifiers()).toEqual({
12
- labels: ['1M'],
13
- preambles: ['/'],
14
- });
15
- const text = '/BA0843/ETA01/230822/LDSP/EGLL/EGSS/2JK0\n1940/EGLL27L/10';
16
- const decodeResult = decoderPlugin.decode({ text: text });
17
- console.log(JSON.stringify(decodeResult, null, 2));
18
- expect(decodeResult.decoded).toBe(true);
19
- expect(decodeResult.decoder.decodeLevel).toBe('partial');
20
- expect(decodeResult.decoder.name).toBe('label-1m-slash');
21
- expect(decodeResult.formatted.description).toBe('ETA Report');
22
- expect(decodeResult.message.text).toBe(text);
23
- expect(decodeResult.raw.alternate_icao).toBe('EGSS');
24
- expect(decodeResult.raw.arrival_icao).toBe('EGLL');
25
- expect(decodeResult.raw.arrival_runway).toBe('27L');
26
- expect(decodeResult.raw.departure_icao).toBe('LDSP');
27
- expect(decodeResult.raw.flight_number).toBe('BA0843');
28
- expect(decodeResult.formatted.items.length).toBe(3);
29
- expect(decodeResult.formatted.items[0].type).toBe('eta');
30
- expect(decodeResult.formatted.items[0].code).toBe('ETA');
31
- expect(decodeResult.formatted.items[0].label).toBe('Estimated Time of Arrival');
32
- // Check for the minutes as typescript doesn't have a UTC time string method
33
- // so the hour will depend on the test host timezone.
34
- expect(decodeResult.formatted.items[0].value.includes('40')).toBe(true);
35
- expect(decodeResult.formatted.items[1].type).toBe('destination');
36
- expect(decodeResult.formatted.items[1].code).toBe('DST');
37
- expect(decodeResult.formatted.items[1].label).toBe('Destination');
38
- expect(decodeResult.formatted.items[1].value).toBe('EGLL');
39
- expect(decodeResult.formatted.items[2].type).toBe('origin');
40
- expect(decodeResult.formatted.items[2].code).toBe('ORG');
41
- expect(decodeResult.formatted.items[2].label).toBe('Origin');
42
- expect(decodeResult.formatted.items[2].value).toBe('LDSP');
43
- });
@@ -1,11 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
- export declare class Label_20_CFB01 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_20_CFB01 = void 0;
4
- const DecoderPlugin_1 = require("../DecoderPlugin");
5
- // In Air Report
6
- class Label_20_CFB01 extends DecoderPlugin_1.DecoderPlugin {
7
- name = 'label-20-cfb01';
8
- qualifiers() {
9
- return {
10
- labels: ['20'],
11
- preambles: ['#CFB.01'],
12
- };
13
- }
14
- decode(message, options = {}) {
15
- const decodeResult = this.defaultResult;
16
- decodeResult.decoder.name = this.name;
17
- decodeResult.formatted.description = 'Crew Flight Bag Message';
18
- decodeResult.message = message;
19
- // Style: IN02,N38338W121179,KMHR,KPDX,0806,2355,005.1
20
- // Match: IN02,coords,departure_icao,arrival_icao,current_date,current_time,fuel_in_tons
21
- const regex = /^IN02,(?<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 ETA 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_20_CFB01 = Label_20_CFB01;
69
- exports.default = {};
@@ -1,11 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
- export declare class Label_20_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,62 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Label_20_POS = void 0;
4
- const DecoderPlugin_1 = require("../DecoderPlugin");
5
- // Position Report
6
- class Label_20_POS extends DecoderPlugin_1.DecoderPlugin {
7
- name = 'label-20-pos';
8
- qualifiers() {
9
- return {
10
- labels: ['20'],
11
- preambles: ['POS'],
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
- decodeResult.raw.preamble = message.text.substring(0, 3);
20
- const content = message.text.substring(3);
21
- console.log('Content: ' + content);
22
- const fields = content.split(',');
23
- console.log('Field Count: ' + fields.length);
24
- if (fields.length == 11) {
25
- // N38160W077075,,211733,360,OTT,212041,,N42,19689,40,544
26
- console.log(`DEBUG: ${this.name}: Variation 1 detected`);
27
- // Field 1: Coordinates
28
- const rawCoords = fields[0];
29
- decodeResult.raw.position = this.decodeStringCoordinates(rawCoords);
30
- decodeResult.formatted.items.push({
31
- type: 'position',
32
- label: 'Position',
33
- value: this.coordinateString(decodeResult.raw.position),
34
- });
35
- decodeResult.decoded = true;
36
- decodeResult.decoder.decodeLevel = 'full';
37
- }
38
- else if (fields.length == 5) {
39
- // N38160W077075,,211733,360,OTT
40
- console.log(`DEBUG: ${this.name}: Variation 2 detected`);
41
- // Field 1: Coordinates
42
- const rawCoords = fields[0];
43
- decodeResult.raw.position = this.decodeStringCoordinates(rawCoords);
44
- decodeResult.formatted.items.push({
45
- type: 'position',
46
- label: 'Position',
47
- value: this.coordinateString(decodeResult.raw.position),
48
- });
49
- decodeResult.decoded = true;
50
- decodeResult.decoder.decodeLevel = 'full';
51
- }
52
- else {
53
- // Unknown!
54
- console.log(`DEBUG: ${this.name}: Unknown variation. Field count: ${fields.length}, content: ${content}`);
55
- decodeResult.decoded = false;
56
- decodeResult.decoder.decodeLevel = 'none';
57
- }
58
- return decodeResult;
59
- }
60
- }
61
- exports.Label_20_POS = Label_20_POS;
62
- exports.default = {};
@@ -1,11 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
- export declare class Label_30_Slash_EA 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,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Label_30_Slash_EA = void 0;
4
- const DateTimeUtils_1 = require("../DateTimeUtils");
5
- const DecoderPlugin_1 = require("../DecoderPlugin");
6
- class Label_30_Slash_EA extends DecoderPlugin_1.DecoderPlugin {
7
- name = 'label-30-slash-ea';
8
- qualifiers() {
9
- return {
10
- labels: ["30"],
11
- preambles: ['/EA'],
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: /EA1830/DSKSFO/SK24
20
- const results = message.text.split(/\n|\//).slice(1); // Split by / and new line
21
- if (results) {
22
- if (options.debug) {
23
- console.log(`Label 30 EA: results`);
24
- console.log(results);
25
- }
26
- }
27
- decodeResult.formatted.items.push({
28
- type: 'eta',
29
- code: 'ETA',
30
- label: 'Estimated Time of Arrival',
31
- value: DateTimeUtils_1.DateTimeUtils.UTCToString(results[0].substr(2, 4)),
32
- });
33
- if (results[1].substr(0, 2) === "DS") {
34
- decodeResult.raw.arrival_icao = results[1].substr(2, 4);
35
- decodeResult.formatted.items.push({
36
- type: 'destination',
37
- code: 'DST',
38
- label: 'Destination',
39
- value: decodeResult.raw.arrival_icao,
40
- });
41
- // We don't know what the /SK section means. We have seen various numbers
42
- // after the /SK.
43
- decodeResult.remaining.text = "/".concat(results[2]);
44
- }
45
- else {
46
- decodeResult.remaining.text = "/".concat(results[1], "/", results[2]);
47
- }
48
- decodeResult.decoded = true;
49
- decodeResult.decoder.decodeLevel = 'partial';
50
- return decodeResult;
51
- }
52
- }
53
- exports.Label_30_Slash_EA = Label_30_Slash_EA;
54
- exports.default = {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const MessageDecoder_1 = require("../MessageDecoder");
4
- const Label_30_Slash_EA_1 = require("./Label_30_Slash_EA");
5
- test('decodes Label 30 sample 1', () => {
6
- const decoder = new MessageDecoder_1.MessageDecoder();
7
- const decoderPlugin = new Label_30_Slash_EA_1.Label_30_Slash_EA(decoder);
8
- expect(decoderPlugin.decode).toBeDefined();
9
- expect(decoderPlugin.name).toBe('label-30-slash-ea');
10
- expect(decoderPlugin.qualifiers).toBeDefined();
11
- expect(decoderPlugin.qualifiers()).toEqual({
12
- labels: ['30'],
13
- preambles: ['/EA'],
14
- });
15
- const text = '/EA1719/DSKSFO/SK23';
16
- const decodeResult = decoderPlugin.decode({ text: text });
17
- console.log(JSON.stringify(decodeResult, null, 2));
18
- expect(decodeResult.decoded).toBe(true);
19
- expect(decodeResult.decoder.decodeLevel).toBe('partial');
20
- expect(decodeResult.decoder.name).toBe('label-30-slash-ea');
21
- expect(decodeResult.formatted.description).toBe('ETA Report');
22
- expect(decodeResult.message.text).toBe(text);
23
- expect(decodeResult.raw.arrival_icao).toBe('KSFO');
24
- expect(decodeResult.formatted.items.length).toBe(2);
25
- expect(decodeResult.formatted.items[0].type).toBe('eta');
26
- expect(decodeResult.formatted.items[0].code).toBe('ETA');
27
- expect(decodeResult.formatted.items[0].label).toBe('Estimated Time of Arrival');
28
- // This test is a bit rough as typescript doesn't have a UTC time string
29
- // method so the hour will be depend on the test host timezone.
30
- expect(decodeResult.formatted.items[0].value.includes('19')).toBe(true);
31
- expect(decodeResult.formatted.items[1].type).toBe('destination');
32
- expect(decodeResult.formatted.items[1].code).toBe('DST');
33
- expect(decodeResult.formatted.items[1].label).toBe('Destination');
34
- expect(decodeResult.formatted.items[1].value).toBe('KSFO');
35
- });
@@ -1,11 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
- export declare class Label_44_ETA 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_ETA = void 0;
4
- const DecoderPlugin_1 = require("../DecoderPlugin");
5
- // In Air Report
6
- class Label_44_ETA extends DecoderPlugin_1.DecoderPlugin {
7
- name = 'label-44-eta';
8
- qualifiers() {
9
- return {
10
- labels: ['44'],
11
- preambles: ['00ETA01', '00ETA02', '00ETA03', 'ETA01', 'ETA02', 'ETA03'],
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: IN02,N38338W121179,KMHR,KPDX,0806,2355,005.1
20
- // Match: IN02,coords,departure_icao,arrival_icao,current_date,current_time,fuel_in_tons
21
- const regex = /^IN02,(?<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 ETA 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_ETA = Label_44_ETA;
69
- exports.default = {};
@@ -1,11 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
- export declare class Label_44_IN 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_IN = void 0;
4
- const DecoderPlugin_1 = require("../DecoderPlugin");
5
- // In Air Report
6
- class Label_44_IN extends DecoderPlugin_1.DecoderPlugin {
7
- name = 'label-44-in';
8
- qualifiers() {
9
- return {
10
- labels: ['44'],
11
- preambles: ['00IN01', '00IN02', '00IN03', 'IN01', 'IN02', 'IN03'],
12
- };
13
- }
14
- decode(message, options = {}) {
15
- const decodeResult = this.defaultResult;
16
- decodeResult.decoder.name = this.name;
17
- decodeResult.formatted.description = 'In Air Report';
18
- decodeResult.message = message;
19
- // Style: IN02,N38338W121179,KMHR,KPDX,0806,2355,005.1
20
- // Match: IN02,coords,departure_icao,arrival_icao,current_date,current_time,fuel_in_tons
21
- const regex = /^IN02,(?<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 In Air 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_IN = Label_44_IN;
69
- exports.default = {};
@@ -1,11 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
- export declare class Label_44_OFF 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;