@airframes/acars-decoder 1.4.3 → 1.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DateTimeUtils.d.ts +8 -0
- package/dist/DateTimeUtils.js +27 -0
- package/dist/DecoderPlugin.d.ts +3 -1
- package/dist/DecoderPlugin.js +3 -1
- package/dist/IcaoDecoder.d.ts +3 -1
- package/dist/IcaoDecoder.js +3 -1
- package/dist/MessageDecoder.d.ts +3 -1
- package/dist/MessageDecoder.js +5 -1
- package/dist/bin/acars-decoder-test.js +9 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +20 -0
- package/dist/plugins/Label_16_N_Space.d.ts +11 -0
- package/dist/plugins/Label_16_N_Space.js +80 -0
- package/dist/plugins/Label_16_N_Space.test.d.ts +1 -0
- package/dist/plugins/Label_16_N_Space.test.js +84 -0
- package/dist/plugins/Label_1M_Slash.js +2 -4
- package/dist/plugins/Label_1M_Slash.test.js +3 -3
- package/dist/plugins/Label_30_Slash_EA.d.ts +11 -0
- package/dist/plugins/Label_30_Slash_EA.js +54 -0
- package/dist/plugins/Label_30_Slash_EA.test.d.ts +1 -0
- package/dist/plugins/Label_30_Slash_EA.test.js +35 -0
- package/dist/plugins/Label_8E.js +2 -9
- package/dist/plugins/Label_8E.test.js +3 -3
- package/dist/plugins/official.d.ts +2 -0
- package/dist/plugins/official.js +2 -0
- package/package.json +12 -3
- package/src/DateTimeUtils.ts +26 -0
- package/src/DecoderPlugin.ts +83 -0
- package/src/DecoderPluginInterface.ts +9 -0
- package/src/IcaoDecoder.ts +137 -0
- package/src/MessageDecoder.ts +117 -0
- package/src/bin/acars-decoder-test.ts +67 -0
- package/src/bin/acars-decoder.ts +23 -0
- package/src/index.d.ts +15 -0
- package/src/index.ts +4 -0
- package/src/plugins/Label_15.ts +45 -0
- package/src/plugins/Label_16_N_Space.test.ts +94 -0
- package/src/plugins/Label_16_N_Space.ts +91 -0
- package/src/plugins/Label_1M_Slash.test.ts +45 -0
- package/src/plugins/Label_1M_Slash.ts +69 -0
- package/src/plugins/Label_20_CFB.01.ts +81 -0
- package/src/plugins/Label_20_POS.ts +68 -0
- package/src/plugins/Label_30_Slash_EA.test.ts +37 -0
- package/src/plugins/Label_30_Slash_EA.ts +60 -0
- package/src/plugins/Label_44_ETA.ts +81 -0
- package/src/plugins/Label_44_IN.ts +81 -0
- package/src/plugins/Label_44_OFF.ts +88 -0
- package/src/plugins/Label_44_ON.ts +81 -0
- package/src/plugins/Label_44_POS.ts +96 -0
- package/src/plugins/Label_5Z.ts +125 -0
- package/src/plugins/Label_80.ts +215 -0
- package/src/plugins/Label_8E.test.ts +34 -0
- package/src/plugins/Label_8E.ts +55 -0
- package/src/plugins/Label_B6.ts +28 -0
- package/src/plugins/Label_ColonComma.ts +32 -0
- package/src/plugins/Label_H1.ts +18 -0
- package/src/plugins/Label_H1_M1BPOS.ts +60 -0
- package/src/plugins/Label_H1_M1BPRG.ts +40 -0
- package/src/plugins/Label_QP.ts +54 -0
- package/src/plugins/Label_QQ.ts +54 -0
- package/src/plugins/Label_QR.ts +54 -0
- package/src/plugins/Label_QS.ts +54 -0
- package/src/plugins/Label_SQ.ts +111 -0
- package/src/plugins/official.ts +22 -0
- package/tsconfig.json +2 -3
- package/index.d.ts +0 -17
- package/index.ts +0 -4
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { DecoderPlugin } from '../DecoderPlugin';
|
|
2
|
+
|
|
3
|
+
export class Label_H1_M1BPOS extends DecoderPlugin { // eslint-disable-line camelcase
|
|
4
|
+
name = 'label-h1-m1bpos';
|
|
5
|
+
|
|
6
|
+
qualifiers() { // eslint-disable-line class-methods-use-this
|
|
7
|
+
return {
|
|
8
|
+
labels: ['H1'],
|
|
9
|
+
preambles: ['#M1BPOS'],
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
decode(message: any, options: any = {}) : any {
|
|
14
|
+
const decodeResult: any = this.defaultResult;
|
|
15
|
+
decodeResult.decoder.name = this.name;
|
|
16
|
+
|
|
17
|
+
if (options.debug) {
|
|
18
|
+
console.log('DECODER: #M1BPOS detected');
|
|
19
|
+
}
|
|
20
|
+
const parts = message.text.replace('#M1BPOS', '').split('/');
|
|
21
|
+
const firstHalf = parts[0];
|
|
22
|
+
const secondHalf = parts[1];
|
|
23
|
+
const items = firstHalf.split(',');
|
|
24
|
+
|
|
25
|
+
const coordsRegex = /(?<lac>[NS])(?<la>.+)\s*(?<lnc>[EW])(?<ln>.+)/;
|
|
26
|
+
const results = items[0].match(coordsRegex);
|
|
27
|
+
|
|
28
|
+
if (results && results.length >= 4) {
|
|
29
|
+
decodeResult.raw.position = {
|
|
30
|
+
latitudeDirection: results.groups.lac,
|
|
31
|
+
latitude: (results.groups.la / 1000) * (results.groups.lac === 'S' ? -1 : 1),
|
|
32
|
+
longitudeDirection: results.groups.lnc,
|
|
33
|
+
longitude: (results.groups.ln / 1000) * (results.groups.lnc === 'W' ? -1 : 1),
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
let route = items.slice(1).filter((part: any) => !/^\d(.+)$/.test(part));
|
|
37
|
+
route = route.map((hop: any) => hop || '?');
|
|
38
|
+
decodeResult.raw.route = route;
|
|
39
|
+
|
|
40
|
+
decodeResult.formatted.description = 'Position Report';
|
|
41
|
+
decodeResult.formatted.items = {
|
|
42
|
+
coordinates: {
|
|
43
|
+
label: 'Position',
|
|
44
|
+
value: this.coordinateString(decodeResult.raw.position),
|
|
45
|
+
},
|
|
46
|
+
route: {
|
|
47
|
+
label: 'Route',
|
|
48
|
+
value: `${route.join(' > ')}`,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
decodeResult.decoded = true;
|
|
52
|
+
decodeResult.decodeLevel = 'partial';
|
|
53
|
+
}
|
|
54
|
+
decodeResult.remaining.text = secondHalf;
|
|
55
|
+
|
|
56
|
+
return decodeResult;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export default {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { DecoderPlugin } from '../DecoderPlugin';
|
|
2
|
+
|
|
3
|
+
export class Label_H1_M1BPRG extends DecoderPlugin { // eslint-disable-line camelcase
|
|
4
|
+
name = 'label-h1-m1bprg';
|
|
5
|
+
|
|
6
|
+
qualifiers() { // eslint-disable-line class-methods-use-this
|
|
7
|
+
return {
|
|
8
|
+
labels: ['H1'],
|
|
9
|
+
preambles: ['#M1BPRG'],
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
decode(message: any, options: any = {}) : any {
|
|
14
|
+
const decodeResult: any = this.defaultResult;
|
|
15
|
+
decodeResult.decoder.name = this.name;
|
|
16
|
+
|
|
17
|
+
// console.log('DECODER: H1 #M1BPRG detected');
|
|
18
|
+
const parts = message.text.split('/');
|
|
19
|
+
for (const part of parts) { // eslint-disable-line no-restricted-syntax
|
|
20
|
+
if (part.includes('#M')) {
|
|
21
|
+
const regex = /#M(?<fms>\w+)PRG/;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (part.includes('DT')) {
|
|
25
|
+
const regex = /DT(?<dest>\w+),(?<rway>.+),(?<fuel>.+),(?<eta>.+),(?<rem>.+)/;
|
|
26
|
+
const result = message.text.match(regex);
|
|
27
|
+
// console.log('DT result');
|
|
28
|
+
// console.log(result);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (part.includes('FN')) {
|
|
32
|
+
const regex = /FN(?<flight>\w+)/;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return decodeResult;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { DecoderPlugin } from '../DecoderPlugin';
|
|
2
|
+
|
|
3
|
+
export class Label_QP extends DecoderPlugin {
|
|
4
|
+
name = 'label-qp';
|
|
5
|
+
|
|
6
|
+
qualifiers() { // eslint-disable-line class-methods-use-this
|
|
7
|
+
return {
|
|
8
|
+
labels: ['QP'],
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
decode(message: any, options: any = {}) : any {
|
|
13
|
+
const decodeResult: any = this.defaultResult;
|
|
14
|
+
decodeResult.decoder.name = this.name;
|
|
15
|
+
|
|
16
|
+
decodeResult.raw.origin = message.text.substring(0, 4);
|
|
17
|
+
decodeResult.raw.destination = message.text.substring(4, 8);
|
|
18
|
+
decodeResult.raw.gate_out = message.text.substring(8, 12);
|
|
19
|
+
decodeResult.remaining.text = message.text.substring(12);
|
|
20
|
+
|
|
21
|
+
decodeResult.formatted.description = 'OUT Report';
|
|
22
|
+
|
|
23
|
+
decodeResult.formatted.items = [
|
|
24
|
+
{
|
|
25
|
+
type: 'origin',
|
|
26
|
+
code: 'ORG',
|
|
27
|
+
label: 'Origin',
|
|
28
|
+
value: decodeResult.raw.origin,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: 'destination',
|
|
32
|
+
code: 'DST',
|
|
33
|
+
label: 'Destination',
|
|
34
|
+
value: decodeResult.raw.destination,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
type: 'gate_out',
|
|
38
|
+
code: 'GOUT',
|
|
39
|
+
label: 'Gate OUT',
|
|
40
|
+
value: decodeResult.raw.gate_out,
|
|
41
|
+
}
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
decodeResult.decoded = true;
|
|
45
|
+
if(decodeResult.remaining.text === "")
|
|
46
|
+
decodeResult.decoder.decodeLevel = 'full';
|
|
47
|
+
else
|
|
48
|
+
decodeResult.decoder.decodeLevel = 'partial';
|
|
49
|
+
|
|
50
|
+
return decodeResult;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export default {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { DecoderPlugin } from '../DecoderPlugin';
|
|
2
|
+
|
|
3
|
+
export class Label_QQ extends DecoderPlugin {
|
|
4
|
+
name = 'label-qq';
|
|
5
|
+
|
|
6
|
+
qualifiers() { // eslint-disable-line class-methods-use-this
|
|
7
|
+
return {
|
|
8
|
+
labels: ['QQ'],
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
decode(message: any, options: any = {}) : any {
|
|
13
|
+
const decodeResult: any = this.defaultResult;
|
|
14
|
+
decodeResult.decoder.name = this.name;
|
|
15
|
+
|
|
16
|
+
decodeResult.raw.origin = message.text.substring(0, 4);
|
|
17
|
+
decodeResult.raw.destination = message.text.substring(4, 8);
|
|
18
|
+
decodeResult.raw.wheels_off = message.text.substring(8, 12);
|
|
19
|
+
decodeResult.remaining.text = message.text.substring(12);
|
|
20
|
+
|
|
21
|
+
decodeResult.formatted.description = 'OFF Report';
|
|
22
|
+
|
|
23
|
+
decodeResult.formatted.items = [
|
|
24
|
+
{
|
|
25
|
+
type: 'origin',
|
|
26
|
+
code: 'ORG',
|
|
27
|
+
label: 'Origin',
|
|
28
|
+
value: decodeResult.raw.origin,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: 'destination',
|
|
32
|
+
code: 'DST',
|
|
33
|
+
label: 'Destination',
|
|
34
|
+
value: decodeResult.raw.destination,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
type: 'wheels_off',
|
|
38
|
+
code: 'WOFF',
|
|
39
|
+
label: 'Wheels OFF',
|
|
40
|
+
value: decodeResult.raw.wheels_off,
|
|
41
|
+
}
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
decodeResult.decoded = true;
|
|
45
|
+
if(decodeResult.remaining.text === "")
|
|
46
|
+
decodeResult.decoder.decodeLevel = 'full';
|
|
47
|
+
else
|
|
48
|
+
decodeResult.decoder.decodeLevel = 'partial';
|
|
49
|
+
|
|
50
|
+
return decodeResult;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export default {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { DecoderPlugin } from '../DecoderPlugin';
|
|
2
|
+
|
|
3
|
+
export class Label_QR extends DecoderPlugin {
|
|
4
|
+
name = 'label-qr';
|
|
5
|
+
|
|
6
|
+
qualifiers() { // eslint-disable-line class-methods-use-this
|
|
7
|
+
return {
|
|
8
|
+
labels: ['QR'],
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
decode(message: any, options: any = {}) : any {
|
|
13
|
+
const decodeResult: any = this.defaultResult;
|
|
14
|
+
decodeResult.decoder.name = this.name;
|
|
15
|
+
|
|
16
|
+
decodeResult.raw.origin = message.text.substring(0, 4);
|
|
17
|
+
decodeResult.raw.destination = message.text.substring(4, 8);
|
|
18
|
+
decodeResult.raw.wheels_on = message.text.substring(8, 12);
|
|
19
|
+
decodeResult.remaining.text = message.text.substring(12);
|
|
20
|
+
|
|
21
|
+
decodeResult.formatted.description = 'ON Report';
|
|
22
|
+
|
|
23
|
+
decodeResult.formatted.items = [
|
|
24
|
+
{
|
|
25
|
+
type: 'origin',
|
|
26
|
+
code: 'ORG',
|
|
27
|
+
label: 'Origin',
|
|
28
|
+
value: decodeResult.raw.origin,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: 'destination',
|
|
32
|
+
code: 'DST',
|
|
33
|
+
label: 'Destination',
|
|
34
|
+
value: decodeResult.raw.destination,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
type: 'wheels_on',
|
|
38
|
+
code: 'WON',
|
|
39
|
+
label: 'Wheels ON',
|
|
40
|
+
value: decodeResult.raw.wheels_on,
|
|
41
|
+
}
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
decodeResult.decoded = true;
|
|
45
|
+
if(decodeResult.remaining.text === "")
|
|
46
|
+
decodeResult.decoder.decodeLevel = 'full';
|
|
47
|
+
else
|
|
48
|
+
decodeResult.decoder.decodeLevel = 'partial';
|
|
49
|
+
|
|
50
|
+
return decodeResult;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export default {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { DecoderPlugin } from '../DecoderPlugin';
|
|
2
|
+
|
|
3
|
+
export class Label_QS extends DecoderPlugin {
|
|
4
|
+
name = 'label-qs';
|
|
5
|
+
|
|
6
|
+
qualifiers() { // eslint-disable-line class-methods-use-this
|
|
7
|
+
return {
|
|
8
|
+
labels: ['QS'],
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
decode(message: any, options: any = {}) : any {
|
|
13
|
+
const decodeResult: any = this.defaultResult;
|
|
14
|
+
decodeResult.decoder.name = this.name;
|
|
15
|
+
|
|
16
|
+
decodeResult.raw.origin = message.text.substring(0, 4);
|
|
17
|
+
decodeResult.raw.destination = message.text.substring(4, 8);
|
|
18
|
+
decodeResult.raw.gate_in = message.text.substring(8, 12);
|
|
19
|
+
decodeResult.remaining.text = message.text.substring(12);
|
|
20
|
+
|
|
21
|
+
decodeResult.formatted.description = 'IN Report';
|
|
22
|
+
|
|
23
|
+
decodeResult.formatted.items = [
|
|
24
|
+
{
|
|
25
|
+
type: 'origin',
|
|
26
|
+
code: 'ORG',
|
|
27
|
+
label: 'Origin',
|
|
28
|
+
value: decodeResult.raw.origin,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: 'destination',
|
|
32
|
+
code: 'DST',
|
|
33
|
+
label: 'Destination',
|
|
34
|
+
value: decodeResult.raw.destination,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
type: 'gate_in',
|
|
38
|
+
code: 'GIN',
|
|
39
|
+
label: 'Gate IN',
|
|
40
|
+
value: decodeResult.raw.gate_in,
|
|
41
|
+
}
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
decodeResult.decoded = true;
|
|
45
|
+
if(decodeResult.remaining.text === "")
|
|
46
|
+
decodeResult.decoder.decodeLevel = 'full';
|
|
47
|
+
else
|
|
48
|
+
decodeResult.decoder.decodeLevel = 'partial';
|
|
49
|
+
|
|
50
|
+
return decodeResult;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export default {};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { DecoderPlugin } from '../DecoderPlugin';
|
|
2
|
+
|
|
3
|
+
export class Label_SQ extends DecoderPlugin {
|
|
4
|
+
name = 'label-sq';
|
|
5
|
+
|
|
6
|
+
qualifiers() { // eslint-disable-line class-methods-use-this
|
|
7
|
+
return {
|
|
8
|
+
labels: ['SQ'],
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
decode(message: any, options: any = {}) : any {
|
|
13
|
+
const decodeResult: any = this.defaultResult;
|
|
14
|
+
decodeResult.decoder.name = this.name;
|
|
15
|
+
|
|
16
|
+
decodeResult.raw.preamble = message.text.substring(0, 4);
|
|
17
|
+
decodeResult.raw.version = message.text.substring(1, 2);
|
|
18
|
+
decodeResult.raw.network = message.text.substring(3, 4);
|
|
19
|
+
|
|
20
|
+
if (decodeResult.raw.version === '2') {
|
|
21
|
+
const regex = /0(\d)X(?<org>\w)(?<iata>\w\w\w)(?<icao>\w\w\w\w)(?<station>\d)(?<lat>\d+)(?<latd>[NS])(?<lng>\d+)(?<lngd>[EW])V(?<vfreq>\d+)\/.*/;
|
|
22
|
+
const result = message.text.match(regex);
|
|
23
|
+
|
|
24
|
+
if (result && result.length >= 8) {
|
|
25
|
+
decodeResult.raw.groundStation = {
|
|
26
|
+
number: result.groups.station,
|
|
27
|
+
iataCode: result.groups.iata,
|
|
28
|
+
icaoCode: result.groups.icao,
|
|
29
|
+
coordinates: {
|
|
30
|
+
latitude: (Number(result.groups.lat) / 100) * (result.groups.latd === 'S' ? -1 : 1),
|
|
31
|
+
longitude: (Number(result.groups.lng) / 100) * (result.groups.lngd === 'W' ? -1 : 1)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
decodeResult.raw.vdlFrequency = result.groups.vfreq / 1000.0;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
decodeResult.formatted.description = 'Ground Station Squitter';
|
|
39
|
+
|
|
40
|
+
var formattedNetwork = 'Unknown';
|
|
41
|
+
if (decodeResult.raw.network == 'A') {
|
|
42
|
+
formattedNetwork = 'ARINC';
|
|
43
|
+
} else if (decodeResult.raw.network == 'S') {
|
|
44
|
+
formattedNetwork = 'SITA';
|
|
45
|
+
}
|
|
46
|
+
decodeResult.formatted.items = [
|
|
47
|
+
{
|
|
48
|
+
type: 'network',
|
|
49
|
+
label: 'Network',
|
|
50
|
+
value: formattedNetwork,
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
type: 'version',
|
|
54
|
+
label: 'Version',
|
|
55
|
+
value: decodeResult.raw.version,
|
|
56
|
+
}
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
if (decodeResult.raw.groundStation) {
|
|
60
|
+
if (decodeResult.raw.groundStation.icaoCode && decodeResult.raw.groundStation.number) {
|
|
61
|
+
decodeResult.formatted.items.push({
|
|
62
|
+
type: 'ground_station',
|
|
63
|
+
label: 'Ground Station',
|
|
64
|
+
value: `${decodeResult.raw.groundStation.icaoCode}${decodeResult.raw.groundStation.number}`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (decodeResult.raw.groundStation.iataCode) {
|
|
68
|
+
decodeResult.formatted.items.push({
|
|
69
|
+
type: 'iataCode',
|
|
70
|
+
label: 'IATA',
|
|
71
|
+
value: decodeResult.raw.groundStation.iataCode,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (decodeResult.raw.groundStation.icaoCode) {
|
|
75
|
+
decodeResult.formatted.items.push({
|
|
76
|
+
type: 'icaoCode',
|
|
77
|
+
label: 'ICAO',
|
|
78
|
+
value: decodeResult.raw.groundStation.icaoCode,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (decodeResult.raw.groundStation.coordinates.latitude) {
|
|
82
|
+
decodeResult.formatted.items.push({
|
|
83
|
+
type: 'coordinates',
|
|
84
|
+
label: 'Ground Station Location',
|
|
85
|
+
value: `${decodeResult.raw.groundStation.coordinates.latitude}, ${decodeResult.raw.groundStation.coordinates.longitude}`,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
if (decodeResult.raw.groundStation.airport) {
|
|
89
|
+
decodeResult.formatted.items.push({
|
|
90
|
+
type: 'airport',
|
|
91
|
+
label: 'Airport',
|
|
92
|
+
value: `${decodeResult.raw.groundStation.airport.name} (${decodeResult.raw.groundStation.airport.icao}) in ${decodeResult.raw.groundStation.airport.location}`,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (decodeResult.raw.vdlFrequency) {
|
|
98
|
+
decodeResult.formatted.items.push({
|
|
99
|
+
type: 'vdlFrequency',
|
|
100
|
+
label: 'VDL Frequency',
|
|
101
|
+
value: `${decodeResult.raw.vdlFrequency} MHz`
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
decodeResult.decoded = true;
|
|
105
|
+
decodeResult.decoder.decodeLevel = 'full';
|
|
106
|
+
|
|
107
|
+
return decodeResult;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export default {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export * from './Label_5Z';
|
|
2
|
+
export * from './Label_15';
|
|
3
|
+
export * from './Label_16_N_Space';
|
|
4
|
+
export * from './Label_20_POS';
|
|
5
|
+
export * from './Label_30_Slash_EA';
|
|
6
|
+
export * from './Label_44_ETA';
|
|
7
|
+
export * from './Label_44_IN';
|
|
8
|
+
export * from './Label_44_OFF';
|
|
9
|
+
export * from './Label_44_ON';
|
|
10
|
+
export * from './Label_44_POS';
|
|
11
|
+
export * from './Label_80';
|
|
12
|
+
export * from './Label_8E';
|
|
13
|
+
export * from './Label_B6';
|
|
14
|
+
export * from './Label_ColonComma';
|
|
15
|
+
export * from './Label_H1_M1BPOS';
|
|
16
|
+
export * from './Label_H1_M1BPRG';
|
|
17
|
+
export * from './Label_1M_Slash';
|
|
18
|
+
export * from './Label_SQ';
|
|
19
|
+
export * from './Label_QR';
|
|
20
|
+
export * from './Label_QP';
|
|
21
|
+
export * from './Label_QS';
|
|
22
|
+
export * from './Label_QQ';
|
package/tsconfig.json
CHANGED
package/index.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { MessageDecoder } from './lib/MessageDecoder';
|
|
2
|
-
declare namespace AcarsDecoder {
|
|
3
|
-
interface DecoderPlugin {
|
|
4
|
-
decode: (data: string) => string;
|
|
5
|
-
coordinateString: (coords: any) => string;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
interface MessageDecoder {
|
|
9
|
-
constructor(): MessageDecoder;
|
|
10
|
-
registerPlugin(plugin: DecoderPlugin): boolean;
|
|
11
|
-
decode: (data: string, options: any) => string;
|
|
12
|
-
lookupAirportByIata: (iata: string) => string;
|
|
13
|
-
name: string;
|
|
14
|
-
plugins: Array<DecoderPlugin>;
|
|
15
|
-
debug: boolean;
|
|
16
|
-
}
|
|
17
|
-
}
|
package/index.ts
DELETED