UNPKG

aerofly-missions

Version:

The Aerofly Missionsgerät converts simulator flight plan files for Aerofly FS 4, Microsoft Flight Simulator, X-Plane, GeoFS, and Garmin / Infinite Flight flight plan files. It also imports SimBrief flight plans.

180 lines (176 loc) 7.16 kB
import { BashColors } from "./BashColors.js"; export const asciify = (string) => { return string .replace(/[äåæáàâãöøœóòôõüúùûëéèêïíìîÿýñß]/g, function (s) { return s .replace(/[äæ]/, "ae") .replace(/[åáàâã]/, "a") .replace(/[öøœ]/, "oe") .replace(/[óòôõ]/, "o") .replace(/[ü]/, "ue") .replace(/[úùû]/, "u") .replace(/[ëéèê]/, "e") .replace(/[ïíìî]/, "i") .replace(/[ÿý]/, "y") .replace(/[ñ]/, "n") .replace(/[ß]/, "ss"); }) .replace(/[ÄÅÆÁÀÂÃÖØŒÓÒÔÕÜÚÙÛËÉÈÊÏÍÌΟÝÑ]/g, function (s) { return s .replace(/[ÄÆ]/, "AE") .replace(/[ÅÁÀÂÃ]/, "A") .replace(/[ÖØŒ]/, "OE") .replace(/[ÓÒÔÕ]/, "O") .replace(/[Ü]/, "UE") .replace(/[ÚÙÛ]/, "U") .replace(/[ËÉÈÊ]/, "E") .replace(/[ÏÍÌÎ]/, "I") .replace(/[ŸÝ]/, "Y") .replace(/[Ñ]/, "N"); }) .replace(/[!?.,'":;]/g, "") .replace(/\s/g, "_") .replace(/[^a-zA-Z0-9-_]/g, "-") .replace(/(-)-+/g, "$1") .replace(/(_)_+/g, "$1"); }; export class Arguments { constructor(process) { this.help = false; this.missionOnly = false; this.geoJson = false; this.flightplan = false; this.useColors = BashColors.COLOR_BASH; this.skyVector = true; this.markdown = false; const args = process.argv.slice(2); //const cwd = process.cwd(); this.source = "./main.mcf"; this.title = "Custom missions"; this.description = ""; this.target = ""; this.garmin = ""; this.msfs = ""; this.xplane = ""; this.gpx = ""; this.tmc = ""; this.direction = -1; this.ils = 0; this.magneticDeclination = undefined; let pointer = "title"; args.forEach((a) => { const match = a.match(/^[-]+([a-z-]+)$/); if (match) { pointer = match[1].toLowerCase(); switch (pointer) { case "help": this.help = true; break; case "m": case "mission-only": this.missionOnly = true; break; case "geo-json": this.geoJson = true; break; case "flightplan": this.flightplan = true; break; case "skyvector": this.skyVector = true; break; case "no-color": this.useColors = BashColors.COLOR_NONE; break; case "markdown": this.markdown = true; break; } } else { switch (pointer) { case "source": case "s": this.source = a; break; case "target": case "t": this.target = a; break; case "import": const fileEnding = a.replace(/^.*(\.[^.]+)$/, "$1"); switch (fileEnding) { case ".pln": this.msfs = a; break; case ".fpl": this.garmin = a; break; case ".fms": this.xplane = a; break; case ".tmc": this.tmc = a; break; case ".gpx": this.gpx = a; break; default: throw new Error("Unknown file type: " + fileEnding); } break; case "title": this.title = a; break; case "description": this.description = a; break; case "direction": case "d": this.direction = Number(a); break; case "magnetic": this.magneticDeclination = Number(a); break; case "ils": case "i": this.ils = Number(a); break; } } }); if (!this.target) { this.target = "./" + this.getSafeFilename(this.title) + ".tmc"; } } getSafeFilename(filename) { return asciify(filename).substring(0, 32); } helpText(c) { return `\ ${c.lightBlue}Usage: nodejs index.js [PARAMETERS...]${c.reset} Convert Aerofly FS 4 main.mcf file into a custom_missions_user.tmc file. Parameters: ${c.lightBlue} -s, --source ${c.reset} Location of the main.mcf; defaults to \`${this.source}\` ${c.lightBlue} -t, --target ${c.reset} Location of your target file; defaults to \`${this.target}\` ${c.lightBlue} --title ${c.reset} Title of your mission; defaults to \`${this.title}\` ${c.lightBlue} --description ${c.reset} Description of your mission; line breaks allowed; defaults to \`${this.description}\` ${c.lightBlue} -i, --ils ${c.reset} ILS frequency like '123.45'; defaults to \`${this.ils}\` ${c.lightBlue} -d, --direction ${c.reset} True initial heading of aircraft; defaults to \`${this.direction}\` ${c.lightBlue} --magnetic ${c.reset} Magnetic declination used for waypoints; defaults to \`${this.magneticDeclination}\` ${c.lightBlue} --import ${c.reset} Location of an optional TMC, FPL, PLN, FMS or GPX file Switches: ${c.lightBlue} -m --mission-only${c.reset} Do not export mission list with a single mission, ${c.lightBlue} ${c.reset} but add mission to already existing file ${c.lightBlue} --flightplan ${c.reset} Output flightplan ${c.lightBlue} --skyvector ${c.reset} Output Sky Vector URL ${c.lightBlue} --geo-json ${c.reset} Save GeoJSON file ${c.lightBlue} --markdown ${c.reset} Save Markdown file ${c.lightBlue} --no-color ${c.reset} Disable colors in output ${c.lightBlue} --help ${c.reset} This help This tool will overwrite the target file without any further warning. Some information can not be inferred from the main.mcf, and needs to be added manually. `; } }