UNPKG

typerinth

Version:

A TypeScript library for interacting with the Modrinth API.

152 lines (151 loc) 6.68 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const FacetOperation_1 = require("../../enums/facets/FacetOperation"); const FacetType_1 = require("../../enums/facets/FacetType"); const Facet_1 = __importDefault(require("./Facet")); const FacetGroup_1 = __importDefault(require("./FacetGroup")); /** * Represents an array of {@link FacetGroup}s for searching * * You can use multiple {@link FacetGroup}s to combine them with an **AND** operation. * Inside a {@link FacetGroup}, you can use multiple {@link Facet}s to combine them with an **OR** operation. * @example * // Search for projects with the category "forge" and the version "1.16.5" or "1.17.1" * const searchFacets = new SearchFacets( * // Combined with AND * new FacetGroup( * new Facet(FacetType.Categories, FacetOperation.EQUALS, "forge") * ), * new FacetGroup( * // Combined with OR * new Facet(FacetType.Versions, FacetOperation.EQUALS, "1.16.5"), * new Facet(FacetType.Versions, FacetOperation.EQUALS, "1.17.1") * ) * ); */ class SearchFacets { facetGroups; /** * Creates an array of FacetGroups for searching * * You can use multiple {@link FacetGroup}s to combine them with an **AND** operation. * Inside a {@link FacetGroup}, you can use multiple {@link Facet}s to combine them with an **OR** operation. * * @param facetGroups The facet groups * * @example * // Search for projects with the category "forge" and the version "1.16.5" or "1.17.1" * const searchFacets = new SearchFacets( * // Combined with AND * new FacetGroup( * new Facet(FacetType.Categories, FacetOperation.EQUALS, "forge") * ), * new FacetGroup( * // Combined with OR * new Facet(FacetType.Versions, FacetOperation.EQUALS, "1.16.5"), * new Facet(FacetType.Versions, FacetOperation.EQUALS, "1.17.1") * ) * ); */ constructor(...facetGroups) { this.facetGroups = facetGroups; } /** * Gets the facet groups * @returns The facet groups */ getFacetGroups() { return this.facetGroups; } /** * Adds a facet group to the search * @param facetGroup The facet group to add * @returns The search facets */ addFacetGroup(facetGroup) { this.facetGroups.push(facetGroup); return this; } /** * Stringifies the search facets * @returns The stringified search facets (e.g. [["categories:forge"], ["versions:1.16.5", "versions:1.17.1"]]) */ stringify() { if (this.facetGroups.length === 0) return ''; return ('[' + this.facetGroups .map((facetGroup) => facetGroup.stringify()) .join(', ') + ']'); } /** * Creates SearchFacets from SearchFilters * @param filters The search filters * @returns The search facets */ static fromFilters(filters) { const searchFacets = new SearchFacets(); if (filters.projectType) { const facets = Array.isArray(filters.projectType) ? filters.projectType.map((type) => new Facet_1.default(FacetType_1.FacetType.ProjectType, FacetOperation_1.FacetOperation.Equals, type)) : [ new Facet_1.default(FacetType_1.FacetType.ProjectType, FacetOperation_1.FacetOperation.Equals, filters.projectType), ]; const facetGroup = new FacetGroup_1.default(); facets.forEach((facet) => facetGroup.addFacet(facet)); searchFacets.addFacetGroup(facetGroup); } if (filters.categories) { const facets = Array.isArray(filters.categories) ? filters.categories.map((cat) => new Facet_1.default(FacetType_1.FacetType.Categories, FacetOperation_1.FacetOperation.Equals, cat)) : [ new Facet_1.default(FacetType_1.FacetType.Categories, FacetOperation_1.FacetOperation.Equals, filters.categories), ]; const facetGroup = new FacetGroup_1.default(); facets.forEach((facet) => facetGroup.addFacet(facet)); searchFacets.addFacetGroup(facetGroup); } if (filters.versions) { const facets = Array.isArray(filters.versions) ? filters.versions.map((ver) => new Facet_1.default(FacetType_1.FacetType.Versions, FacetOperation_1.FacetOperation.Equals, ver)) : [ new Facet_1.default(FacetType_1.FacetType.Versions, FacetOperation_1.FacetOperation.Equals, filters.versions), ]; const facetGroup = new FacetGroup_1.default(); facets.forEach((facet) => facetGroup.addFacet(facet)); searchFacets.addFacetGroup(facetGroup); } if (filters.clientSide) { const facets = Array.isArray(filters.clientSide) ? filters.clientSide.map((side) => new Facet_1.default(FacetType_1.FacetType.ClientSide, FacetOperation_1.FacetOperation.Equals, side)) : [ new Facet_1.default(FacetType_1.FacetType.ClientSide, FacetOperation_1.FacetOperation.Equals, filters.clientSide), ]; const facetGroup = new FacetGroup_1.default(); facets.forEach((facet) => facetGroup.addFacet(facet)); searchFacets.addFacetGroup(facetGroup); } if (filters.serverSide) { const facets = Array.isArray(filters.serverSide) ? filters.serverSide.map((side) => new Facet_1.default(FacetType_1.FacetType.ServerSide, FacetOperation_1.FacetOperation.Equals, side)) : [ new Facet_1.default(FacetType_1.FacetType.ServerSide, FacetOperation_1.FacetOperation.Equals, filters.serverSide), ]; const facetGroup = new FacetGroup_1.default(); facets.forEach((facet) => facetGroup.addFacet(facet)); searchFacets.addFacetGroup(facetGroup); } if (filters.openSource !== undefined) { const facet = new Facet_1.default(FacetType_1.FacetType.OpenSource, FacetOperation_1.FacetOperation.Equals, filters.openSource.toString()); const facetGroup = new FacetGroup_1.default(); facetGroup.addFacet(facet); searchFacets.addFacetGroup(facetGroup); } return searchFacets; } } exports.default = SearchFacets;