iobroker.jetframe 1.0.0
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/LICENSE +21 -0
- package/README.md +357 -0
- package/admin/SF-Pro.ttf +0 -0
- package/admin/admin.d.ts +65 -0
- package/admin/frame.html +982 -0
- package/admin/frame.html.bak-aircraft-card-real-row-20260518-1608 +1236 -0
- package/admin/frame.html.bak-aircraft-card-structure-20260518-1517 +1236 -0
- package/admin/frame.html.bak-aircraft-logo-id-fix-20260518-1639 +1239 -0
- package/admin/frame.html.bak-shortcut-test +1236 -0
- package/admin/frame.html.bak-tablet-class-20260518-1729 +1239 -0
- package/admin/heatmap.html +216 -0
- package/admin/index.html +268 -0
- package/admin/index_m.html +1749 -0
- package/admin/jetframe.css +1260 -0
- package/admin/jetframe.css.bak-airbus-landscape-fix +4630 -0
- package/admin/jetframe.css.bak-aircraft-card-clean-equal-20260518-1438 +4899 -0
- package/admin/jetframe.css.bak-aircraft-card-real-row-20260518-1608 +4814 -0
- package/admin/jetframe.css.bak-aircraft-card-row-left-20260518-1525 +4604 -0
- package/admin/jetframe.css.bak-aircraft-card-slim-equal-20260518-1446 +4647 -0
- package/admin/jetframe.css.bak-aircraft-card-structure-20260518-1517 +4646 -0
- package/admin/jetframe.css.bak-aircraft-inline-final-20260518-1527 +4654 -0
- package/admin/jetframe.css.bak-aircraft-row-compact-fix-20260518-1639 +4763 -0
- package/admin/jetframe.css.bak-before-aircrafttype-purge +4818 -0
- package/admin/jetframe.css.bak-before-cleanup +4670 -0
- package/admin/jetframe.css.bak-before-remove-tablet-only-20260518-1711 +4896 -0
- package/admin/jetframe.css.bak-before-tablet-layout-rework-20260518-1650 +4914 -0
- package/admin/jetframe.css.bak-clean-duplicate-fonts-20260518-1340 +4975 -0
- package/admin/jetframe.css.bak-clean-old-index-fix-20260518-1937 +5167 -0
- package/admin/jetframe.css.bak-hardleft-airbus +4751 -0
- package/admin/jetframe.css.bak-index-iphone-landscape-20260518-1931 +5030 -0
- package/admin/jetframe.css.bak-index-landscape-final-20260518-1941 +5167 -0
- package/admin/jetframe.css.bak-index-landscape-real-20260518-1936 +5186 -0
- package/admin/jetframe.css.bak-landscape-compact-jumbo-bold-20260518-1343 +4802 -0
- package/admin/jetframe.css.bak-logo-align-final +4551 -0
- package/admin/jetframe.css.bak-logo-final2 +4551 -0
- package/admin/jetframe.css.bak-narrowbody-font-fix +4992 -0
- package/admin/jetframe.css.bak-nuke-airbus-align +4790 -0
- package/admin/jetframe.css.bak-pill-balance-20260518-1603 +4773 -0
- package/admin/jetframe.css.bak-pill-balance-fix +4910 -0
- package/admin/jetframe.css.bak-radar-fix-fonts +4710 -0
- package/admin/jetframe.css.bak-shortcut-test +4899 -0
- package/admin/jetframe.css.bak-smaller-aircraft-card-fonts-20260518-1345 +4897 -0
- package/admin/jetframe.css.bak-tablet-fix-real-20260518-1748 +4945 -0
- package/admin/jetframe.css.bak-tablet-fullscreen-fix-20260518-1804 +4972 -0
- package/admin/jetframe.css.bak-tablet-landscape-layout-20260518-1645 +4802 -0
- package/admin/jetframe.css.bak-tablet-layout-final-20260518-1839 +4802 -0
- package/admin/jetframe.css.bak-tablet-layout-v3-20260518-1729 +4802 -0
- package/admin/jetframe.css.bak-tablet-layout-v4-20260518-1801 +4957 -0
- package/admin/jetframe.css.bak-tablet-layout-v5-20260518-1843 +4970 -0
- package/admin/jetframe.css.bak-tablet-layout-v6-20260518-1848 +4958 -0
- package/admin/jetframe.css.bak-tablet-layout-v7-20260518-1909 +4985 -0
- package/admin/jetframe.css.bak-tablet-only-landscape-v2-20260518-1707 +4802 -0
- package/admin/jetframe.css.bak-tablet-pages-final-20260519-1857 +5188 -0
- package/admin/jetframe.css.bak-tablet-pages-final-20260519-1859 +5347 -0
- package/admin/jetframe.css.bak-tablet-pages-v2-20260519-190807 +5349 -0
- package/admin/jetframe.css.bak-typography-align-final +4818 -0
- package/admin/jetframe.png +0 -0
- package/admin/manifest.webmanifest +15 -0
- package/admin/src/app.tsx +58 -0
- package/admin/src/components/settings.tsx +97 -0
- package/admin/src/i18n/de.json +11 -0
- package/admin/src/i18n/en.json +11 -0
- package/admin/src/i18n/es.json +11 -0
- package/admin/src/i18n/fr.json +11 -0
- package/admin/src/i18n/i18n.d.ts +28 -0
- package/admin/src/i18n/it.json +11 -0
- package/admin/src/i18n/nl.json +11 -0
- package/admin/src/i18n/pl.json +11 -0
- package/admin/src/i18n/pt.json +11 -0
- package/admin/src/i18n/ru.json +11 -0
- package/admin/src/i18n/uk.json +11 -0
- package/admin/src/i18n/zh-cn.json +11 -0
- package/admin/src/index.tsx +25 -0
- package/admin/stats.html +228 -0
- package/admin/style.css +32 -0
- package/admin/tsconfig.json +11 -0
- package/admin/words.js +46 -0
- package/build/lib/adsb.js +218 -0
- package/build/lib/adsb.js.map +7 -0
- package/build/lib/airportNamesDe.js +131 -0
- package/build/lib/airportNamesDe.js.map +7 -0
- package/build/lib/airports.js +281 -0
- package/build/lib/airports.js.map +7 -0
- package/build/lib/classify.js +339 -0
- package/build/lib/classify.js.map +7 -0
- package/build/lib/config.js +103 -0
- package/build/lib/config.js.map +7 -0
- package/build/lib/flightInfo.js +1409 -0
- package/build/lib/flightInfo.js.map +7 -0
- package/build/lib/geo.js +84 -0
- package/build/lib/geo.js.map +7 -0
- package/build/lib/images.js +422 -0
- package/build/lib/images.js.map +7 -0
- package/build/lib/specialLiveries.js +342 -0
- package/build/lib/specialLiveries.js.map +7 -0
- package/build/lib/states.js +971 -0
- package/build/lib/states.js.map +7 -0
- package/build/lib/staticFiles.js +73 -0
- package/build/lib/staticFiles.js.map +7 -0
- package/build/lib/types.js +17 -0
- package/build/lib/types.js.map +7 -0
- package/build/lib/visConfig.js +52 -0
- package/build/lib/visConfig.js.map +7 -0
- package/build/main.js +1454 -0
- package/build/main.js.map +7 -0
- package/io-package.json +169 -0
- package/package.json +82 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/lib/classify.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Aircraft, JetFrameConfig, AdapterLike } from './types';\nimport { bearingDeg, distanceNm, smallestAngleDiff, signedAngleDiff } from './geo';\n\n/**\n *\n */\nexport function enrichAircraft(config: JetFrameConfig, a: Aircraft): Aircraft {\n\tconst bearingHomeDeg = bearingDeg(config.homeLat, config.homeLon, a.lat, a.lon);\n\n\tconst distHomeNm = distanceNm(config.homeLat, config.homeLon, a.lat, a.lon);\n\n\tconst distAirportNm = distanceNm(config.airport.lat, config.airport.lon, a.lat, a.lon);\n\n\tconst bearingAircraftToAirportDeg = bearingDeg(a.lat, a.lon, config.airport.lat, config.airport.lon);\n\n\tconst bearingAirportToAircraftDeg = bearingDeg(config.airport.lat, config.airport.lon, a.lat, a.lon);\n\n\tconst landingTrackDiffDeg = smallestAngleDiff(a.trackDeg, bearingAircraftToAirportDeg);\n\n\tconst takeoffTrackDiffDeg = smallestAngleDiff(a.trackDeg, bearingAirportToAircraftDeg);\n\n\tconst airportTrackDiffDeg = Math.min(landingTrackDiffDeg, takeoffTrackDiffDeg);\n\n\t/**\n\t * SIGNED DIFFERENCE\n\t *\n\t * < 0 = links vom Fenster\n\t * > 0 = rechts vom Fenster\n\t */\n\tconst windowDiffDeg = signedAngleDiff(bearingHomeDeg, config.windowBearingDeg);\n\n\tconst windowDiffAbsDeg = Math.abs(windowDiffDeg);\n\n\treturn {\n\t\t...a,\n\n\t\tbearingHomeDeg,\n\t\tdistHomeNm,\n\t\tdistAirportNm,\n\n\t\tbearingAircraftToAirportDeg,\n\t\tbearingAirportToAircraftDeg,\n\n\t\tlandingTrackDiffDeg,\n\t\ttakeoffTrackDiffDeg,\n\t\tairportTrackDiffDeg,\n\n\t\twindowDiffDeg,\n\t\twindowDiffAbsDeg,\n\n\t\tinWindow: windowDiffAbsDeg <= config.windowFovDeg / 2,\n\t};\n}\n\n/**\n *\n */\nexport function classifyAircraft(config: JetFrameConfig, a: Aircraft): Aircraft {\n\tconst isLanding =\n\t\t(a.verticalRate || 0) <= config.minSinkRate &&\n\t\t(a.landingTrackDiffDeg || 999) <= config.autoRunwayTrackToleranceDeg;\n\n\tconst isTakeoff =\n\t\t(a.verticalRate || 0) >= config.minClimbRate &&\n\t\t(a.takeoffTrackDiffDeg || 999) <= config.autoRunwayTrackToleranceDeg;\n\n\tif (isLanding) {\n\t\treturn {\n\t\t\t...a,\n\t\t\tmode: 'LANDING',\n\t\t\ticon: '\uD83D\uDEEC',\n\t\t\tdirectionText: `nach ${config.airport.iata}`,\n\t\t\trelevant: true,\n\t\t\tpriority: 1,\n\t\t};\n\t}\n\n\tif (isTakeoff) {\n\t\treturn {\n\t\t\t...a,\n\t\t\tmode: 'TAKEOFF',\n\t\t\ticon: '\uD83D\uDEEB',\n\t\t\tdirectionText: `von ${config.airport.iata}`,\n\t\t\trelevant: true,\n\t\t\tpriority: 2,\n\t\t};\n\t}\n\n\tconst isOverflight =\n\t\t(config.overflightOnly || config.overflightEnabled) &&\n\t\t(a.distHomeNm || 999) <= config.overflightMaxDistanceNm &&\n\t\ta.altFt >= config.overflightMinAltitudeFt &&\n\t\ta.altFt <= config.overflightMaxAltitudeFt &&\n\t\t(!config.overflightRequiresWindow || !!a.inWindow);\n\n\tif (isOverflight) {\n\t\treturn {\n\t\t\t...a,\n\t\t\tmode: 'OVERFLIGHT',\n\t\t\ticon: '\uD83D\uDEE9\uFE0F',\n\t\t\tdirectionText: '\u00DCberflug',\n\t\t\trelevant: true,\n\t\t\tpriority: 3,\n\t\t};\n\t}\n\n\treturn {\n\t\t...a,\n\t\trelevant: false,\n\t};\n}\n\n/**\n *\n */\nexport function getMatches(config: JetFrameConfig, aircraft: Aircraft[]): Aircraft[] {\n\tconst enriched = aircraft.map(a => enrichEmergency(config, enrichAircraft(config, a)));\n\n\t// Overflight-Only:\n\t// rein geografisch um Zuhause.\n\t// Keine Start-/Landungslogik.\n\t// Keine Flughafen-/Routenlogik.\n\tif (config.overflightOnly) {\n\t\treturn enriched\n\t\t\t.filter(\n\t\t\t\ta =>\n\t\t\t\t\t(a.distHomeNm || 999) <= config.overflightMaxDistanceNm &&\n\t\t\t\t\ta.altFt >= config.overflightMinAltitudeFt &&\n\t\t\t\t\ta.altFt <= config.overflightMaxAltitudeFt &&\n\t\t\t\t\t(!config.overflightRequiresWindow || !!a.inWindow),\n\t\t\t)\n\t\t\t.map(a => ({\n\t\t\t\t...a,\n\t\t\t\tmode: 'OVERFLIGHT' as const,\n\t\t\t\ticon: '\uD83D\uDEE9\uFE0F',\n\t\t\t\tdirectionText: '\u00DCberflug',\n\t\t\t\trelevant: true,\n\t\t\t\tpriority: 1,\n\t\t\t}))\n\t\t\t.sort((a, b) => sortOverflightAircraft(config, a, b));\n\t}\n\n\treturn enriched\n\t\t.filter(a => {\n\t\t\tconst isAllowedOverflight =\n\t\t\t\tconfig.overflightEnabled &&\n\t\t\t\t!config.overflightRequiresWindow &&\n\t\t\t\t(a.distHomeNm || 999) <= config.overflightMaxDistanceNm &&\n\t\t\t\ta.altFt >= config.overflightMinAltitudeFt &&\n\t\t\t\ta.altFt <= config.overflightMaxAltitudeFt;\n\n\t\t\tif (isAllowedOverflight) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (!a.inWindow) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ((a.distHomeNm || 999) > config.maxHomeDistanceNm) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (a.altFt < config.minAltitudeFt || a.altFt > config.maxAltitudeFt) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t})\n\t\t.map(a => classifyAircraft(config, a))\n\t\t.filter(a => {\n\t\t\tif (!a.relevant) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (a.mode === 'OVERFLIGHT' && !config.overflightEnabled) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t})\n\t\t.sort((a, b) => sortAircraft(config, a, b));\n}\n\nfunction enrichEmergency(config: JetFrameConfig, a: Aircraft): Aircraft {\n\tconst squawk = String(a.squawk || '').trim();\n\tconst emergency = String(a.emergency || '')\n\t\t.trim()\n\t\t.toLowerCase();\n\n\tlet emergencyType = '';\n\tlet emergencyText = '';\n\n\tif (squawk === '7500' && config.emergencySquawk7500) {\n\t\temergencyType = 'HIJACK';\n\t\temergencyText = 'Besonderer Notfall-Code 7500';\n\t} else if (squawk === '7600' && config.emergencySquawk7600) {\n\t\temergencyType = 'RADIO';\n\t\temergencyText = 'Funkausfall Squawk 7600';\n\t} else if (squawk === '7700' && config.emergencySquawk7700) {\n\t\temergencyType = 'EMERGENCY';\n\t\temergencyText = 'Allgemeiner Notfall Squawk 7700';\n\t} else if (emergency && emergency !== 'none') {\n\t\temergencyType = emergency.toUpperCase();\n\t\temergencyText = `Emergency: ${emergency}`;\n\t}\n\n\treturn {\n\t\t...a,\n\t\tisEmergency: !!emergencyType,\n\t\temergencyType,\n\t\temergencyText,\n\t};\n}\n\nfunction emergencyBonus(config: JetFrameConfig, a: Aircraft): number {\n\tif (!config.emergencyPriorityEnabled || !a.isEmergency) {\n\t\treturn 0;\n\t}\n\n\tconst squawk = String(a.squawk || '').trim();\n\n\tif (squawk === '7500') {\n\t\treturn 100000;\n\t}\n\tif (squawk === '7700') {\n\t\treturn 90000;\n\t}\n\tif (squawk === '7600') {\n\t\treturn 80000;\n\t}\n\n\treturn 70000;\n}\n\nfunction sortOverflightAircraft(config: JetFrameConfig, a: Aircraft, b: Aircraft): number {\n\treturn candidateScore(config, b) - candidateScore(config, a);\n}\n\nfunction sortAircraft(config: JetFrameConfig, a: Aircraft, b: Aircraft): number {\n\treturn candidateScore(config, b) - candidateScore(config, a);\n}\n\nfunction candidateScore(config: JetFrameConfig, a: Aircraft): number {\n\tlet score = 0;\n\n\t// 1) Absolute Priorit\u00E4t: Emergency / Special / Government / gro\u00DFe Flugzeuge\n\tscore += priorityBonus(config, a);\n\n\t// 2) Modus-Basis\n\tif (a.mode === 'LANDING') {\n\t\tscore += 9000;\n\t}\n\tif (a.mode === 'TAKEOFF') {\n\t\tscore += 7500;\n\t}\n\tif (a.mode === 'OVERFLIGHT') {\n\t\tscore += 5500;\n\t}\n\n\t// 3) Center Window Priority\n\t// Nur relevant, wenn kein Special/Emergency den Score ohnehin dominiert.\n\tscore += centerWindowBonus(config, a);\n\n\t// 4) Gute Fluglogik\n\tif (a.mode === 'LANDING') {\n\t\tscore += Math.max(0, 2500 - Math.abs(a.verticalRate || 0) / 2);\n\t\tscore += Math.max(0, 2200 - (a.landingTrackDiffDeg || 999) * 35);\n\t\tscore += Math.max(0, 1800 - (a.altFt || 0) / 4);\n\t}\n\n\tif (a.mode === 'TAKEOFF') {\n\t\tscore += Math.max(0, 2500 - Math.abs(a.verticalRate || 0) / 2);\n\t\tscore += Math.max(0, 2200 - (a.takeoffTrackDiffDeg || 999) * 35);\n\t}\n\n\t// 5) N\u00E4he zu Zuhause\n\tscore += Math.max(0, 2600 - (a.distHomeNm || 999) * 260);\n\n\t// 6) Frische ADS-B-Daten\n\tscore -= (a.seenSec || 0) * 40;\n\n\treturn score;\n}\n\nfunction centerWindowBonus(config: JetFrameConfig, a: Aircraft): number {\n\tif (!a.inWindow) {\n\t\treturn -5000;\n\t}\n\n\tconst half = Math.max(1, config.windowFovDeg / 2);\n\tconst diff = Math.abs(a.windowDiffDeg || 0);\n\tconst normalized = Math.max(0, 1 - diff / half);\n\n\t// Direkt Mitte = +12000, Rand = fast 0\n\treturn Math.round(normalized * 12000);\n}\n\nfunction priorityBonus(config: JetFrameConfig, a: Aircraft): number {\n\tif (!config.priorityEnabled) {\n\t\treturn 0;\n\t}\n\n\tlet bonus = 0;\n\n\t// Notfall schl\u00E4gt alles\n\tbonus += emergencyBonus(config, a);\n\n\t// Special soll Center deutlich schlagen\n\tif (config.prioritySpecialLivery && hasSpecialLivery(a)) {\n\t\tbonus += 60000;\n\t}\n\n\tif (config.priorityMilitaryGov && isMilitaryOrGovernment(a)) {\n\t\tbonus += 45000;\n\t}\n\n\tif (config.priorityAircraftSize) {\n\t\tbonus += aircraftSizeBonus(a);\n\t}\n\n\treturn bonus;\n}\n\nfunction hasSpecialLivery(a: Aircraft): boolean {\n\treturn !!String(\n\t\ta.specialLiveryVisText ||\n\t\t\ta.specialLiveryFull ||\n\t\t\ta.specialLiveryTitle ||\n\t\t\ta.specialLiveryDescription ||\n\t\t\ta.specialText ||\n\t\t\t'',\n\t).trim();\n}\n\nfunction aircraftSizeBonus(a: Aircraft): number {\n\tconst text = String(a.aircraftSize || a.aircraftType || a.type || a.aircraftModel || '').toUpperCase();\n\n\tif (/SUPERJUMBO|A388|A380/.test(text)) {\n\t\treturn 650;\n\t}\n\tif (/JUMBO|B748|B744|B742|B741|B747|B74/.test(text)) {\n\t\treturn 600;\n\t}\n\tif (\n\t\t/WIDEBODY|A300|A310|A330|A332|A333|A339|A340|A343|A346|A350|A359|A35K|A380|A388|B767|B763|B764|B777|B772|B77W|B77L|B787|B788|B789|B78X|MD11|DC10/.test(\n\t\t\ttext,\n\t\t)\n\t) {\n\t\treturn 450;\n\t}\n\tif (\n\t\t/NARROWBODY|A318|A319|A320|A321|A20N|A21N|B737|B738|B739|B38M|B39M|B3XM|A220|BCS|E190|E195|E290|E295/.test(text)\n\t) {\n\t\treturn 200;\n\t}\n\n\treturn 0;\n}\n\nfunction isMilitaryOrGovernment(a: Aircraft): boolean {\n\tconst text = [\n\t\ta.callsign,\n\t\ta.routeCallsign,\n\t\ta.operationalCallsign,\n\t\ta.airlineName,\n\t\ta.airlineIcao,\n\t\ta.airlineIata,\n\t\ta.registration,\n\t\ta.aircraftModel,\n\t\ta.aircraftType,\n\t\ta.type,\n\t]\n\t\t.map(v => String(v || '').toUpperCase())\n\t\t.join(' ');\n\n\treturn /(GAF|GOV|MIL|NATO|NAF|USAF|RCH|CNV|IAM|BAF|FAF|RAF|RRR|DUKE|ASY|CFC|CTM|AME|FMY|BUNDESWEHR|LUFTWAFFE|AIR FORCE|ARMY|NAVY|GOVERNMENT|REGIERUNG|POLICE|POLIZEI)/.test(\n\t\ttext,\n\t);\n}\n\n/**\n *\n */\nexport function findCurrentLive(matches: Aircraft[], target: Aircraft | null): Aircraft | null {\n\tif (!matches.length || !target) {\n\t\treturn null;\n\t}\n\n\tconst targetHex = clean(target.hex).toLowerCase();\n\tconst targetCall = clean(target.callsign).toUpperCase();\n\n\treturn (\n\t\tmatches.find(a => {\n\t\t\tconst aHex = clean(a.hex).toLowerCase();\n\t\t\tconst aCall = clean(a.callsign).toUpperCase();\n\n\t\t\tif (aHex && targetHex && aHex === targetHex) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (aCall && targetCall && aCall === targetCall) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}) || null\n\t);\n}\n\n/**\n *\n */\nexport function isDifferentAircraft(a: Aircraft | null, target: Aircraft | null): boolean {\n\tif (!a || !target) {\n\t\treturn false;\n\t}\n\n\tconst aHex = clean(a.hex).toLowerCase();\n\tconst tHex = clean(target.hex).toLowerCase();\n\n\tconst aCall = clean(a.callsign).toUpperCase();\n\tconst tCall = clean(target.callsign).toUpperCase();\n\n\tif (aCall && tCall && aCall === tCall) {\n\t\treturn false;\n\t}\n\tif (aHex && tHex && aHex === tHex) {\n\t\treturn false;\n\t}\n\n\tif (aCall && tCall) {\n\t\treturn aCall !== tCall;\n\t}\n\tif (aHex && tHex) {\n\t\treturn aHex !== tHex;\n\t}\n\n\treturn false;\n}\n\n/**\n *\n */\nexport function flightKey(a: Aircraft | null): string {\n\tif (!a) {\n\t\treturn '';\n\t}\n\n\tconst hex = clean(a.hex).toLowerCase();\n\tconst cs = clean(a.callsign).toUpperCase();\n\n\tif (cs) {\n\t\treturn `CS:${cs}`;\n\t}\n\tif (hex) {\n\t\treturn `HEX:${hex}`;\n\t}\n\n\treturn '';\n}\n\nfunction clean(v: unknown): string {\n\treturn String(v || '').trim();\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var config_exports = {};
|
|
20
|
+
__export(config_exports, {
|
|
21
|
+
readConfig: () => readConfig
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(config_exports);
|
|
24
|
+
function cfgStr(native, key, def) {
|
|
25
|
+
const v = native[key];
|
|
26
|
+
return v !== void 0 && v !== null && String(v).trim() !== "" ? String(v).trim() : def;
|
|
27
|
+
}
|
|
28
|
+
function cfgNum(native, key, def) {
|
|
29
|
+
const n = Number(native[key]);
|
|
30
|
+
return Number.isFinite(n) ? n : def;
|
|
31
|
+
}
|
|
32
|
+
function cfgBool(native, key, def) {
|
|
33
|
+
const v = native[key];
|
|
34
|
+
if (v === true || v === "true") {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
if (v === false || v === "false") {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return def;
|
|
41
|
+
}
|
|
42
|
+
function readConfig(adapter) {
|
|
43
|
+
const native = adapter.config;
|
|
44
|
+
return {
|
|
45
|
+
enabled: cfgBool(native, "enabled", true),
|
|
46
|
+
homeLat: cfgNum(native, "homeLat", 50.08637),
|
|
47
|
+
homeLon: cfgNum(native, "homeLon", 8.69163),
|
|
48
|
+
airport: {
|
|
49
|
+
iata: cfgStr(native, "airportIata", "FRA").toUpperCase(),
|
|
50
|
+
icao: cfgStr(native, "airportIcao", "EDDF").toUpperCase(),
|
|
51
|
+
name: cfgStr(native, "airportName", "Frankfurt"),
|
|
52
|
+
lat: cfgNum(native, "airportLat", 50.035686),
|
|
53
|
+
lon: cfgNum(native, "airportLon", 8.562813)
|
|
54
|
+
},
|
|
55
|
+
radiusNm: cfgNum(native, "radiusNm", 15),
|
|
56
|
+
adsbCustomUrl: cfgStr(native, "adsbCustomUrl", ""),
|
|
57
|
+
maxHomeDistanceNm: cfgNum(native, "maxHomeDistanceNm", 3.5),
|
|
58
|
+
searchPollSeconds: cfgNum(native, "searchPollSeconds", 20),
|
|
59
|
+
livePollSeconds: cfgNum(native, "livePollSeconds", 5),
|
|
60
|
+
liveMaxSeconds: cfgNum(native, "liveMaxSeconds", 120),
|
|
61
|
+
windowBearingDeg: cfgNum(native, "windowBearingDeg", 184),
|
|
62
|
+
windowFovDeg: cfgNum(native, "windowFovDeg", 120),
|
|
63
|
+
minAltitudeFt: cfgNum(native, "minAltitudeFt", 1e3),
|
|
64
|
+
maxAltitudeFt: cfgNum(native, "maxAltitudeFt", 5e3),
|
|
65
|
+
autoRunwayTrackToleranceDeg: cfgNum(native, "autoRunwayTrackToleranceDeg", 65),
|
|
66
|
+
minClimbRate: cfgNum(native, "minClimbRate", 60),
|
|
67
|
+
minSinkRate: cfgNum(native, "minSinkRate", -60),
|
|
68
|
+
overflightEnabled: cfgBool(native, "overflightEnabled", false),
|
|
69
|
+
overflightOnly: cfgBool(native, "overflightOnly", false),
|
|
70
|
+
priorityEnabled: cfgBool(native, "priorityEnabled", true),
|
|
71
|
+
prioritySpecialLivery: cfgBool(native, "prioritySpecialLivery", true),
|
|
72
|
+
priorityAircraftSize: cfgBool(native, "priorityAircraftSize", true),
|
|
73
|
+
priorityMilitaryGov: cfgBool(native, "priorityMilitaryGov", true),
|
|
74
|
+
emergencyPriorityEnabled: cfgBool(native, "emergencyPriorityEnabled", true),
|
|
75
|
+
emergencySpeechEnabled: cfgBool(native, "emergencySpeechEnabled", true),
|
|
76
|
+
emergencySquawk7500: cfgBool(native, "emergencySquawk7500", true),
|
|
77
|
+
emergencySquawk7600: cfgBool(native, "emergencySquawk7600", true),
|
|
78
|
+
emergencySquawk7700: cfgBool(native, "emergencySquawk7700", true),
|
|
79
|
+
externalManufacturerLogos: cfgBool(native, "externalManufacturerLogos", false),
|
|
80
|
+
manufacturerLogoUrls: cfgStr(native, "manufacturerLogoUrls", ""),
|
|
81
|
+
externalAirlineLogos: cfgBool(native, "externalAirlineLogos", false),
|
|
82
|
+
airlineLogoBaseUrl: cfgStr(native, "airlineLogoBaseUrl", ""),
|
|
83
|
+
cacheExternalImages: cfgBool(native, "cacheExternalImages", false),
|
|
84
|
+
overflightMaxDistanceNm: cfgNum(native, "overflightMaxDistanceNm", 1.2),
|
|
85
|
+
overflightMinAltitudeFt: cfgNum(native, "overflightMinAltitudeFt", 4e3),
|
|
86
|
+
overflightMaxAltitudeFt: cfgNum(native, "overflightMaxAltitudeFt", 45e3),
|
|
87
|
+
overflightRequiresWindow: cfgBool(native, "overflightRequiresWindow", false),
|
|
88
|
+
speechEnabled: cfgBool(native, "speechEnabled", true),
|
|
89
|
+
speechMode: cfgStr(native, "speechMode", "browser"),
|
|
90
|
+
speechTemplate: cfgStr(
|
|
91
|
+
native,
|
|
92
|
+
"speechTemplate",
|
|
93
|
+
"{modeSpeechText}: {airlineName} {bestCallsign} {routeDirectionText} {routeOtherAirport} in {altitudeFt} Fuss. {windowPositionSpeechText}."
|
|
94
|
+
),
|
|
95
|
+
dpRoot: adapter.namespace,
|
|
96
|
+
airportJsonDp: `${adapter.namespace}.airportjson`
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
100
|
+
0 && (module.exports = {
|
|
101
|
+
readConfig
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/lib/config.ts"],
|
|
4
|
+
"sourcesContent": ["import type { JetFrameConfig, AdapterLike } from './types';\n\ntype NativeConfig = Record<string, any>;\n\nfunction cfgStr(native: NativeConfig, key: string, def: string): string {\n\tconst v = native[key];\n\n\treturn v !== undefined && v !== null && String(v).trim() !== '' ? String(v).trim() : def;\n}\n\nfunction cfgNum(native: NativeConfig, key: string, def: number): number {\n\tconst n = Number(native[key]);\n\treturn Number.isFinite(n) ? n : def;\n}\n\nfunction cfgBool(native: NativeConfig, key: string, def: boolean): boolean {\n\tconst v = native[key];\n\n\tif (v === true || v === 'true') {\n\t\treturn true;\n\t}\n\tif (v === false || v === 'false') {\n\t\treturn false;\n\t}\n\n\treturn def;\n}\n\n/**\n *\n */\nexport function readConfig(adapter: AdapterLike): JetFrameConfig {\n\tconst native = adapter.config as NativeConfig;\n\n\treturn {\n\t\tenabled: cfgBool(native, 'enabled', true),\n\n\t\thomeLat: cfgNum(native, 'homeLat', 50.08637),\n\t\thomeLon: cfgNum(native, 'homeLon', 8.69163),\n\n\t\tairport: {\n\t\t\tiata: cfgStr(native, 'airportIata', 'FRA').toUpperCase(),\n\t\t\ticao: cfgStr(native, 'airportIcao', 'EDDF').toUpperCase(),\n\t\t\tname: cfgStr(native, 'airportName', 'Frankfurt'),\n\t\t\tlat: cfgNum(native, 'airportLat', 50.035686),\n\t\t\tlon: cfgNum(native, 'airportLon', 8.562813),\n\t\t},\n\n\t\tradiusNm: cfgNum(native, 'radiusNm', 15),\n\t\tadsbCustomUrl: cfgStr(native, 'adsbCustomUrl', ''),\n\t\tmaxHomeDistanceNm: cfgNum(native, 'maxHomeDistanceNm', 3.5),\n\n\t\tsearchPollSeconds: cfgNum(native, 'searchPollSeconds', 20),\n\t\tlivePollSeconds: cfgNum(native, 'livePollSeconds', 5),\n\t\tliveMaxSeconds: cfgNum(native, 'liveMaxSeconds', 120),\n\n\t\twindowBearingDeg: cfgNum(native, 'windowBearingDeg', 184),\n\t\twindowFovDeg: cfgNum(native, 'windowFovDeg', 120),\n\n\t\tminAltitudeFt: cfgNum(native, 'minAltitudeFt', 1000),\n\t\tmaxAltitudeFt: cfgNum(native, 'maxAltitudeFt', 5000),\n\n\t\tautoRunwayTrackToleranceDeg: cfgNum(native, 'autoRunwayTrackToleranceDeg', 65),\n\t\tminClimbRate: cfgNum(native, 'minClimbRate', 60),\n\t\tminSinkRate: cfgNum(native, 'minSinkRate', -60),\n\n\t\toverflightEnabled: cfgBool(native, 'overflightEnabled', false),\n\t\toverflightOnly: cfgBool(native, 'overflightOnly', false),\n\t\tpriorityEnabled: cfgBool(native, 'priorityEnabled', true),\n\t\tprioritySpecialLivery: cfgBool(native, 'prioritySpecialLivery', true),\n\t\tpriorityAircraftSize: cfgBool(native, 'priorityAircraftSize', true),\n\t\tpriorityMilitaryGov: cfgBool(native, 'priorityMilitaryGov', true),\n\t\temergencyPriorityEnabled: cfgBool(native, 'emergencyPriorityEnabled', true),\n\t\temergencySpeechEnabled: cfgBool(native, 'emergencySpeechEnabled', true),\n\t\temergencySquawk7500: cfgBool(native, 'emergencySquawk7500', true),\n\t\temergencySquawk7600: cfgBool(native, 'emergencySquawk7600', true),\n\t\temergencySquawk7700: cfgBool(native, 'emergencySquawk7700', true),\n\n\t\texternalManufacturerLogos: cfgBool(native, 'externalManufacturerLogos', false),\n\t\tmanufacturerLogoUrls: cfgStr(native, 'manufacturerLogoUrls', ''),\n\t\texternalAirlineLogos: cfgBool(native, 'externalAirlineLogos', false),\n\t\tairlineLogoBaseUrl: cfgStr(native, 'airlineLogoBaseUrl', ''),\n\t\tcacheExternalImages: cfgBool(native, 'cacheExternalImages', false),\n\n\t\toverflightMaxDistanceNm: cfgNum(native, 'overflightMaxDistanceNm', 1.2),\n\t\toverflightMinAltitudeFt: cfgNum(native, 'overflightMinAltitudeFt', 4000),\n\t\toverflightMaxAltitudeFt: cfgNum(native, 'overflightMaxAltitudeFt', 45000),\n\t\toverflightRequiresWindow: cfgBool(native, 'overflightRequiresWindow', false),\n\n\t\tspeechEnabled: cfgBool(native, 'speechEnabled', true),\n\n\t\tspeechMode: cfgStr(native, 'speechMode', 'browser') as 'browser' | 'external' | 'both' | 'off',\n\t\tspeechTemplate: cfgStr(\n\t\t\tnative,\n\t\t\t'speechTemplate',\n\t\t\t'{modeSpeechText}: {airlineName} {bestCallsign} {routeDirectionText} {routeOtherAirport} in {altitudeFt} Fuss. {windowPositionSpeechText}.',\n\t\t),\n\n\t\tdpRoot: adapter.namespace,\n\t\tairportJsonDp: `${adapter.namespace}.airportjson`,\n\t};\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,SAAS,OAAO,QAAsB,KAAa,KAAqB;AACvE,QAAM,IAAI,OAAO,GAAG;AAEpB,SAAO,MAAM,UAAa,MAAM,QAAQ,OAAO,CAAC,EAAE,KAAK,MAAM,KAAK,OAAO,CAAC,EAAE,KAAK,IAAI;AACtF;AAEA,SAAS,OAAO,QAAsB,KAAa,KAAqB;AACvE,QAAM,IAAI,OAAO,OAAO,GAAG,CAAC;AAC5B,SAAO,OAAO,SAAS,CAAC,IAAI,IAAI;AACjC;AAEA,SAAS,QAAQ,QAAsB,KAAa,KAAuB;AAC1E,QAAM,IAAI,OAAO,GAAG;AAEpB,MAAI,MAAM,QAAQ,MAAM,QAAQ;AAC/B,WAAO;AAAA,EACR;AACA,MAAI,MAAM,SAAS,MAAM,SAAS;AACjC,WAAO;AAAA,EACR;AAEA,SAAO;AACR;AAKO,SAAS,WAAW,SAAsC;AAChE,QAAM,SAAS,QAAQ;AAEvB,SAAO;AAAA,IACN,SAAS,QAAQ,QAAQ,WAAW,IAAI;AAAA,IAExC,SAAS,OAAO,QAAQ,WAAW,QAAQ;AAAA,IAC3C,SAAS,OAAO,QAAQ,WAAW,OAAO;AAAA,IAE1C,SAAS;AAAA,MACR,MAAM,OAAO,QAAQ,eAAe,KAAK,EAAE,YAAY;AAAA,MACvD,MAAM,OAAO,QAAQ,eAAe,MAAM,EAAE,YAAY;AAAA,MACxD,MAAM,OAAO,QAAQ,eAAe,WAAW;AAAA,MAC/C,KAAK,OAAO,QAAQ,cAAc,SAAS;AAAA,MAC3C,KAAK,OAAO,QAAQ,cAAc,QAAQ;AAAA,IAC3C;AAAA,IAEA,UAAU,OAAO,QAAQ,YAAY,EAAE;AAAA,IACvC,eAAe,OAAO,QAAQ,iBAAiB,EAAE;AAAA,IACjD,mBAAmB,OAAO,QAAQ,qBAAqB,GAAG;AAAA,IAE1D,mBAAmB,OAAO,QAAQ,qBAAqB,EAAE;AAAA,IACzD,iBAAiB,OAAO,QAAQ,mBAAmB,CAAC;AAAA,IACpD,gBAAgB,OAAO,QAAQ,kBAAkB,GAAG;AAAA,IAEpD,kBAAkB,OAAO,QAAQ,oBAAoB,GAAG;AAAA,IACxD,cAAc,OAAO,QAAQ,gBAAgB,GAAG;AAAA,IAEhD,eAAe,OAAO,QAAQ,iBAAiB,GAAI;AAAA,IACnD,eAAe,OAAO,QAAQ,iBAAiB,GAAI;AAAA,IAEnD,6BAA6B,OAAO,QAAQ,+BAA+B,EAAE;AAAA,IAC7E,cAAc,OAAO,QAAQ,gBAAgB,EAAE;AAAA,IAC/C,aAAa,OAAO,QAAQ,eAAe,GAAG;AAAA,IAE9C,mBAAmB,QAAQ,QAAQ,qBAAqB,KAAK;AAAA,IAC7D,gBAAgB,QAAQ,QAAQ,kBAAkB,KAAK;AAAA,IACvD,iBAAiB,QAAQ,QAAQ,mBAAmB,IAAI;AAAA,IACxD,uBAAuB,QAAQ,QAAQ,yBAAyB,IAAI;AAAA,IACpE,sBAAsB,QAAQ,QAAQ,wBAAwB,IAAI;AAAA,IAClE,qBAAqB,QAAQ,QAAQ,uBAAuB,IAAI;AAAA,IAChE,0BAA0B,QAAQ,QAAQ,4BAA4B,IAAI;AAAA,IAC1E,wBAAwB,QAAQ,QAAQ,0BAA0B,IAAI;AAAA,IACtE,qBAAqB,QAAQ,QAAQ,uBAAuB,IAAI;AAAA,IAChE,qBAAqB,QAAQ,QAAQ,uBAAuB,IAAI;AAAA,IAChE,qBAAqB,QAAQ,QAAQ,uBAAuB,IAAI;AAAA,IAEhE,2BAA2B,QAAQ,QAAQ,6BAA6B,KAAK;AAAA,IAC7E,sBAAsB,OAAO,QAAQ,wBAAwB,EAAE;AAAA,IAC/D,sBAAsB,QAAQ,QAAQ,wBAAwB,KAAK;AAAA,IACnE,oBAAoB,OAAO,QAAQ,sBAAsB,EAAE;AAAA,IAC3D,qBAAqB,QAAQ,QAAQ,uBAAuB,KAAK;AAAA,IAEjE,yBAAyB,OAAO,QAAQ,2BAA2B,GAAG;AAAA,IACtE,yBAAyB,OAAO,QAAQ,2BAA2B,GAAI;AAAA,IACvE,yBAAyB,OAAO,QAAQ,2BAA2B,IAAK;AAAA,IACxE,0BAA0B,QAAQ,QAAQ,4BAA4B,KAAK;AAAA,IAE3E,eAAe,QAAQ,QAAQ,iBAAiB,IAAI;AAAA,IAEpD,YAAY,OAAO,QAAQ,cAAc,SAAS;AAAA,IAClD,gBAAgB;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IAEA,QAAQ,QAAQ;AAAA,IAChB,eAAe,GAAG,QAAQ,SAAS;AAAA,EACpC;AACD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|