private filter()

in src/api/catalog-search/catalog-search.ts [249:280]


  private filter(
    results: CatalogSearchResults,
    filters: CatalogSearchFilters
  ): CatalogSearchResults {
    const { cdkType, cdkMajor, keywords, languages, tags } = filters;
    const copiedResults = new Map(results);

    const filterFunctions = [
      FILTER_FUNCTIONS.cdkType(cdkType),
      // Ignore major version filter if no CDK Type is defined
      FILTER_FUNCTIONS.cdkMajor(cdkType ? cdkMajor : undefined),
      FILTER_FUNCTIONS.keywords(keywords),
      FILTER_FUNCTIONS.languages(languages),
      FILTER_FUNCTIONS.tags(tags),
    ].filter(Boolean) as ((pkg: ExtendedCatalogPackage) => boolean)[];

    copiedResults.forEach((result) => {
      let isFiltered = false;

      filterFunctions.forEach((filterFn) => {
        if (!isFiltered && !filterFn(result)) {
          isFiltered = true;
        }
      });

      if (isFiltered) {
        copiedResults.delete(result.id);
      }
    });

    return copiedResults;
  }