osVersion: safeReturnVersion()

in packages/fxa-shared/lib/user-agent.ts [85:156]


      osVersion: safeReturnVersion(matches[5]),
      deviceType: marshallDeviceType(matches[4]),
      formFactor: safeReturnName(matches[4]),
    };
  }

  const parsed = parse(userAgentString);
  return {
    browser: safeReturnName(getFamily(parsed.ua)),
    browserVersion: safeReturnVersion(parsed.ua.toVersionString()),
    os: safeReturnName(getFamily(parsed.os)),
    osVersion: safeReturnVersion(parsed.os.toVersionString()),
    deviceType: getDeviceType(parsed) || null,
    formFactor: safeReturnName(getFormFactor(parsed)),
  };
};

export const isToVersionStringSupported = (
  result: ParsedUserAgentProperties
): boolean => {
  if (!result) {
    result = parse(
      'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:65.0) Gecko/20100101 Firefox/65.0'
    );
  }
  if (!result || !result.os || !result.ua) {
    return false;
  }
  if (typeof result.os.toVersionString !== 'function') {
    return false;
  }
  if (typeof result.ua.toVersionString !== 'function') {
    return false;
  }
  return true;
};

function safeReturnString(str: string, regex: RegExp): string | null {
  return regex.test(str) ? str : null;
}

function safeReturnName(str: string): string | null {
  return safeReturnString(str, VALID_FAMILY_OR_NAME);
}

function safeReturnVersion(str: string): string | null {
  return safeReturnString(str, VALID_VERSION);
}

function safeFamily(parent: ParsedUa) {
  if (!VALID_FAMILY_OR_NAME.test(parent.family as string)) {
    parent.family = null;
  }
}

function safeVersion(parent: ParsedOs) {
  if (
    parent &&
    parent.toVersionString &&
    !VALID_VERSION.test(parent.toVersionString())
  ) {
    parent.major = parent.minor = parent.patch = parent.patchMinor = null;
  }
}

function getFamily(data: ParsedUa | ParsedOs | ParsedDevice) {
  return data.family && data.family !== 'Other' ? data.family : '';
}

function getDeviceType(data: ParsedUserAgentProperties) {
  if (getFamily(data.device) || isMobileOS(data)) {
    if (isTablet(data)) {