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