export enum CommandType { unk = "unk", G01 = "G01", G00 = "G00", } export interface GenericCommand { type: CommandType; } export interface G01Command extends GenericCommand { type: CommandType.G01; X?: number; Y?: number; Z?: number; F?: number; } export interface G00Command extends GenericCommand { type: CommandType.G00; X?: number; Y?: number; Z?: number; F?: number; } export interface UnkCommand extends GenericCommand { type: CommandType.unk; } export type Command = G01Command | G00Command | UnkCommand; function getCommandType(type: string): CommandType { if (type.toUpperCase() === "G01") { return CommandType.G01; } if (type.toUpperCase() === "G00") { return CommandType.G00; } return CommandType.unk; } export function parseCommand(cmd: string): Command { const words = cmd.toUpperCase().split(" "); let command: Command = { type: getCommandType(words.shift()) }; const args = words.map(word => { const arg = word.slice(0, 1); const val = word.slice(1); (command as any)[arg] = parseFloat(val); }); return command; }