Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

adding typing to decoders #28

Merged
merged 2 commits into from
Feb 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 9 additions & 38 deletions lib/DecoderPlugin.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
import { DecoderPluginInterface } from './DecoderPluginInterface';
import { DecodeResult, DecoderPluginInterface, Message, Options } from './DecoderPluginInterface';

export abstract class DecoderPlugin implements DecoderPluginInterface {
decoder!: any;

name: string = 'unknown';

defaultResult: any = {
defaultResult: DecodeResult = {
decoded: false,
decoder: <any>{
decoder: {
name: 'unknown',
type: 'pattern-match',
decodeLevel: 'none',
},
formatted: <any>{
formatted: {
description: 'Unknown',
items: <any>[],
items: [],
},
raw: <any>{},
remaining: <any>{},
raw: {},
remaining: {},
};

options: Object;

constructor(decoder : any, options : any = {}) {
constructor(decoder : any, options : Options = {}) {
this.decoder = decoder;
this.options = options;
}
Expand All @@ -48,40 +48,11 @@ export abstract class DecoderPlugin implements DecoderPluginInterface {
};
}

decode(message: any) : any { // eslint-disable-line class-methods-use-this
decode(message: Message) : DecodeResult { // eslint-disable-line class-methods-use-this
const decodeResult: any = this.defaultResult;
decodeResult.remaining.text = message.text;
return decodeResult;
}

// Utilities
// TODO: Move these to a utilities class and instanciate here for use in subclasses

decodeStringCoordinates(stringCoords: String) : any { // eslint-disable-line class-methods-use-this
var results : any = {};
// format: N12345W123456 or N12345 W123456
const firstChar = stringCoords.substring(0, 1);
let middleChar = stringCoords.substring(6, 7);
let longitudeChars = stringCoords.substring(7, 13);
if (middleChar ==' ') {
middleChar = stringCoords.substring(7, 8);
longitudeChars = stringCoords.substring(8, 14);
}
if ((firstChar === 'N' || firstChar === 'S') && (middleChar === 'W' || middleChar === 'E')) {
results.latitudeDirection = firstChar;
results.latitude = (Number(stringCoords.substring(1, 6)) / 1000) * (firstChar === 'S' ? -1 : 1);
results.longitudeDirection = middleChar;
results.longitude = (Number(longitudeChars) / 1000) * (middleChar === 'W' ? -1 : 1);
} else {
return;
}

return results;
}

coordinateString(coords: any) : String {
return `${Math.abs(coords.latitude)} ${coords.latitudeDirection}, ${Math.abs(coords.longitude)} ${coords.longitudeDirection}`
}
}

export default {};
45 changes: 44 additions & 1 deletion lib/DecoderPluginInterface.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,48 @@
/**
* Representation of a Message
*/
export interface Message {
label?: string,
sublabel?: string,
text: string,
}

/**
* Decoder Options
*/
export interface Options {
debug?:boolean,
}

/**
* Results from decoding a message
*/
export interface DecodeResult {
decoded: boolean;
decoder: {
name: string,
type: 'pattern-match' | 'none',
decodeLevel: 'none' | 'partial' | 'full',
},
error?: string,
formatted: {
description: string,
items: {
type: string,
code: string,
label: string,
value: string,
}[]
},
message?: any,
raw: any,
remaining: {
text?: string
}
}

export interface DecoderPluginInterface {
decode(message: any) : any;
decode(message: Message) : DecodeResult;
meetsStateRequirements() : boolean;
// onRegister(store: Store<any>) : void;
qualifiers() : any;
Expand Down
28 changes: 14 additions & 14 deletions lib/MessageDecoder.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { DecoderPluginInterface } from './DecoderPluginInterface'; // eslint-disable-line import/no-cycle
import { DecodeResult, DecoderPluginInterface, Message, Options } from './DecoderPluginInterface'; // eslint-disable-line import/no-cycle

import * as Plugins from './plugins/official';
import { MIAMCoreUtils } from './utils/miam';
Expand Down Expand Up @@ -47,7 +47,7 @@ export class MessageDecoder {
return true;
}

decode(message: any, options: any = {}) {
decode(message: Message, options: Options = {}): DecodeResult {
if (message.label === 'MA') {
const decodeResult = MIAMCoreUtils.parse(message.text);

Expand Down Expand Up @@ -94,34 +94,34 @@ export class MessageDecoder {
console.log(usablePlugins);
}

let result;
let result : DecodeResult;
if (usablePlugins.length > 0) {
const plugin: DecoderPluginInterface = usablePlugins[0];
result = plugin.decode(message);
} else {
result = {
decoded: false,
decodeLevel: 'none',
error: 'No known decoder plugin for this message',
decoder: {
name: 'none',
type: 'none',
decodeLevel: 'none',
},
message: message,
remaining: {
text: message.text,
},
raw: {},
formatted: {},
formatted: {
description: 'Not Decoded',
items: [],
},
};
}

if (options.debug) {
let performDebug = true;
if (options.debug.only_decoded) {
performDebug = result.decoded;
}

if (performDebug) {
console.log('Result');
console.log(result);
}
console.log('Result');
console.log(result);
}

return result;
Expand Down
3 changes: 2 additions & 1 deletion lib/bin/acars-decoder-test.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
#!/usr/bin/env node

import { DecodeResult, Message } from '../DecoderPluginInterface';
import { MessageDecoder } from '../MessageDecoder';

function debugMessage(message: any, decoding: any) {
function debugMessage(message: Message, decoding: DecodeResult) {
console.log("ORIGINAL MESSAGE");
console.log("Label:", message.label);
console.log("Text:", message.text);
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/Label_12_N_Space.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DecoderPlugin } from '../DecoderPlugin';
import { DecodeResult, Message, Options } from '../DecoderPluginInterface';

export class Label_12_N_Space extends DecoderPlugin {
name = 'label-12-n-space';
Expand All @@ -10,7 +11,7 @@ export class Label_12_N_Space extends DecoderPlugin {
};
}

decode(message: any, options: any = {}) : any {
decode(message: Message, options: Options = {}) : DecodeResult {
const decodeResult: any = this.defaultResult;
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'Position Report';
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/Label_15.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DecoderPlugin } from '../DecoderPlugin';
import { DecodeResult, Message, Options } from '../DecoderPluginInterface';
import { CoordinateUtils } from '../utils/coordinate_utils';

// General Aviation Position Report
Expand All @@ -12,7 +13,7 @@ export class Label_15 extends DecoderPlugin {
};
}

decode(message: any, options: any = {}) : any {
decode(message: Message, options: Options = {}) : DecodeResult {
const decodeResult: any = this.defaultResult;
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'Position Report';
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/Label_15_FST.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DecoderPlugin } from '../DecoderPlugin';
import { DecodeResult, Message, Options } from '../DecoderPluginInterface';
import { CoordinateUtils } from '../utils/coordinate_utils';

// Position Report
Expand All @@ -12,7 +13,7 @@ export class Label_15_FST extends DecoderPlugin {
};
}

decode(message: any, options: any = {}) : any {
decode(message: Message, options: Options = {}) : DecodeResult {
const decodeResult: any = this.defaultResult;
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'Position Report';
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/Label_16_N_Space.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DecoderPlugin } from '../DecoderPlugin';
import { DecodeResult, Message, Options } from '../DecoderPluginInterface';

export class Label_16_N_Space extends DecoderPlugin {
name = 'label-16-n-space';
Expand All @@ -10,7 +11,7 @@ export class Label_16_N_Space extends DecoderPlugin {
};
}

decode(message: any, options: any = {}) : any {
decode(message: Message, options: Options = {}) : DecodeResult {
const decodeResult: any = this.defaultResult;
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'Position Report';
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/Label_1M_Slash.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { DateTimeUtils } from '../DateTimeUtils';
import { DecoderPlugin } from '../DecoderPlugin';
import { DecodeResult, Message, Options } from '../DecoderPluginInterface';

export class Label_1M_Slash extends DecoderPlugin {
name = 'label-1m-slash';
Expand All @@ -11,7 +12,7 @@ export class Label_1M_Slash extends DecoderPlugin {
};
}

decode(message: any, options: any = {}) : any {
decode(message: Message, options: Options = {}) : DecodeResult {
const decodeResult: any = this.defaultResult;
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'ETA Report';
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/Label_20_CFB.01.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DecoderPlugin } from '../DecoderPlugin';
import { DecodeResult, Message, Options } from '../DecoderPluginInterface';
import { CoordinateUtils } from '../utils/coordinate_utils';

// In Air Report
Expand All @@ -12,7 +13,7 @@ export class Label_20_CFB01 extends DecoderPlugin {
};
}

decode(message: any, options: any = {}) : any {
decode(message: Message, options: Options = {}) : DecodeResult {
const decodeResult: any = this.defaultResult;
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'Crew Flight Bag Message';
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/Label_20_POS.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DecoderPlugin } from '../DecoderPlugin';
import { DecodeResult, Message, Options } from '../DecoderPluginInterface';
import { CoordinateUtils } from '../utils/coordinate_utils';

// Position Report
Expand All @@ -12,7 +13,7 @@ export class Label_20_POS extends DecoderPlugin {
};
}

decode(message: any, options: any = {}) : any {
decode(message: Message, options: Options = {}) : DecodeResult {
const decodeResult: any = this.defaultResult;
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'Position Report';
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/Label_30_Slash_EA.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { DateTimeUtils } from '../DateTimeUtils';
import { DecoderPlugin } from '../DecoderPlugin';
import { DecodeResult, Message, Options } from '../DecoderPluginInterface';

export class Label_30_Slash_EA extends DecoderPlugin {
name = 'label-30-slash-ea';
Expand All @@ -11,7 +12,7 @@ export class Label_30_Slash_EA extends DecoderPlugin {
};
}

decode(message: any, options: any = {}) : any {
decode(message: Message, options: Options = {}) : DecodeResult {
const decodeResult: any = this.defaultResult;
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'ETA Report';
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/Label_44_ETA.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DecoderPlugin } from '../DecoderPlugin';
import { DecodeResult, Message, Options } from '../DecoderPluginInterface';
import { CoordinateUtils } from '../utils/coordinate_utils';

// In Air Report
Expand All @@ -12,7 +13,7 @@ export class Label_44_ETA extends DecoderPlugin {
};
}

decode(message: any, options: any = {}) : any {
decode(message: Message, options: Options = {}) : DecodeResult {
const decodeResult: any = this.defaultResult;
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'ETA Report';
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/Label_44_IN.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DecoderPlugin } from '../DecoderPlugin';
import { DecodeResult, Message, Options } from '../DecoderPluginInterface';
import { CoordinateUtils } from '../utils/coordinate_utils';

// In Air Report
Expand All @@ -12,7 +13,7 @@ export class Label_44_IN extends DecoderPlugin {
};
}

decode(message: any, options: any = {}) : any {
decode(message: Message, options: Options = {}) : DecodeResult {
const decodeResult: any = this.defaultResult;
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'In Air Report';
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/Label_44_OFF.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DecoderPlugin } from '../DecoderPlugin';
import { DecodeResult, Message, Options } from '../DecoderPluginInterface';
import { CoordinateUtils } from '../utils/coordinate_utils';

// Off Runway Report
Expand All @@ -12,7 +13,7 @@ export class Label_44_OFF extends DecoderPlugin {
};
}

decode(message: any, options: any = {}) : any {
decode(message: Message, options: Options = {}) : DecodeResult {
const decodeResult: any = this.defaultResult;
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'Off Runway Report';
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/Label_44_ON.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DecoderPlugin } from '../DecoderPlugin';
import { DecodeResult, Message, Options } from '../DecoderPluginInterface';
import { CoordinateUtils } from '../utils/coordinate_utils';

// On Runway Report
Expand All @@ -12,7 +13,7 @@ export class Label_44_ON extends DecoderPlugin {
};
}

decode(message: any, options: any = {}) : any {
decode(message: Message, options: Options = {}) : DecodeResult {
const decodeResult: any = this.defaultResult;
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'On Runway Report';
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/Label_44_POS.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DecoderPlugin } from '../DecoderPlugin';
import { DecodeResult, Message, Options } from '../DecoderPluginInterface';
import { CoordinateUtils } from '../utils/coordinate_utils';

// General Aviation Position Report
Expand All @@ -12,7 +13,7 @@ export class Label_44_POS extends DecoderPlugin {
};
}

decode(message: any, options: any = {}) : any {
decode(message: Message, options: Options = {}) : DecodeResult {
const decodeResult: any = this.defaultResult;
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'Position Report';
Expand Down
Loading
Loading