typerinth
Version:
A TypeScript library for interacting with the Modrinth API.
152 lines (151 loc) • 6.68 kB
JavaScript
;
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;