async function getYouTrackServices()

in packages/documents-list-widget/src/widgets/documents-list-widget/hub-widget-ui/service-resources/service-resources.js [7:46]


async function getYouTrackServices(dashboardApi, optionalMinYouTrackVersion) {
  const getServices = async () => {
    if (dashboardApi.loadServices) {
      return (await dashboardApi.loadServices('YouTrack')) || [];
    }

    const data = await dashboardApi.fetchHub(`api/rest/services?fields=${SERVICE_FIELDS}&query=applicationName:YouTrack`);
    return data && data.services || [];
  };

  return (await getServices()).filter(
    service => !!service.homeUrl && (!optionalMinYouTrackVersion ||
      satisfyingVersion(service.version, optionalMinYouTrackVersion))
  ).map(
    ({homeUrl, ...restServiceProperties}) => ({
      homeUrl: normalizedHomeUrl(homeUrl),
      ...restServiceProperties
    })
  );

  // eslint-disable-next-line complexity
  function satisfyingVersion(currentVersion, minVersion) {
    const currentVersionTokens = currentVersion.split('.').map(Number);
    const requestedVersionTokens = minVersion.
      split('.').map(Number);
    for (let i = 0; i < requestedVersionTokens.length; ++i) {
      if ((currentVersionTokens[i] > requestedVersionTokens[i]) ||
        (!isNaN(currentVersionTokens[i]) && isNaN(requestedVersionTokens[i]))
      ) {
        return true;
      }
      if (requestedVersionTokens[i] > currentVersionTokens[i] ||
        (isNaN(currentVersionTokens[i]) && !isNaN(requestedVersionTokens[i]))
      ) {
        return false;
      }
    }
    return true;
  }
}