direct check of regex lookbehind capability

This commit is contained in:
Matt Walsh
2025-09-11 08:47:16 -05:00
parent f17f69f60e
commit 14b1891efd
2 changed files with 21 additions and 17 deletions

View File

@@ -5,21 +5,22 @@ import en from '../../vendor/auto/locale/en.js';
// metar-taf-parser requires regex lookbehind // metar-taf-parser requires regex lookbehind
// this does not work in iOS < 16.4 // this does not work in iOS < 16.4
// this is a detection algorithm for iOS versions // this is a detection algorithm for missing lookbehind support
const isIos = /iP(ad|od|hone)/i.test(window.navigator.userAgent); const supportsRegexLookAheadLookBehindCheck = () => {
let iosVersionOk = false; try {
if (isIos) { return (
// regex match the version string // deliberately using RegExp for broader browser support during check
const iosVersionRaw = /OS (\d+)_(\d+)/.exec(window.navigator.userAgent); /* eslint-disable prefer-regex-literals */
// check for match 'hibyehihi'
if (iosVersionRaw) { .replace(new RegExp('(?<=hi)hi', 'g'), 'hello')
// break into parts .replace(new RegExp('hi(?!bye)', 'g'), 'hey') === 'hibyeheyhello'
const iosVersionMajor = parseInt(iosVersionRaw[1], 10); /* eslint-enable prefer-regex-literals */
const iosVersionMinor = parseInt(iosVersionRaw[2], 10); );
if (iosVersionMajor > 16) iosVersionOk = true; } catch {
if (iosVersionMajor === 16 && iosVersionMinor >= 4) iosVersionOk = true; return false;
} }
} };
const supportsRegexLookAheadLookBehind = supportsRegexLookAheadLookBehindCheck();
/** /**
* Augment observation data by parsing METAR when API fields are missing * Augment observation data by parsing METAR when API fields are missing
@@ -27,8 +28,8 @@ if (isIos) {
* @returns {Object} - Augmented observation with parsed METAR data filled in * @returns {Object} - Augmented observation with parsed METAR data filled in
*/ */
const augmentObservationWithMetar = (observation) => { const augmentObservationWithMetar = (observation) => {
// check for a metar message and for unusable ios versions // check for a metar message and for regex lookbehind support
if (!observation?.rawMessage || (isIos && !iosVersionOk)) { if (!observation?.rawMessage || (!supportsRegexLookAheadLookBehind)) {
return observation; return observation;
} }

View File

@@ -73,7 +73,10 @@
"editor.formatOnSave": true, "editor.formatOnSave": true,
"editor.codeActionsOnSave": { "editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit" "source.fixAll.eslint": "explicit"
} },
"cSpell.words": [
"hibyehihi"
]
}, },
"extensions": { "extensions": {
"recommendations": [ "recommendations": [