Added filter for duplicate dependencies

Fixes #72
This commit is contained in:
Kir_Antipov 2024-01-02 12:45:39 +00:00
parent 69d94c54c3
commit 689f343a8c
2 changed files with 12 additions and 3 deletions

View file

@ -3,6 +3,7 @@ import { Dependency } from "@/dependencies";
import { PlatformType } from "@/platforms/platform-type"; import { PlatformType } from "@/platforms/platform-type";
import { GenericPlatformUploader, GenericPlatformUploaderOptions } from "@/platforms/generic-platform-uploader"; import { GenericPlatformUploader, GenericPlatformUploaderOptions } from "@/platforms/generic-platform-uploader";
import { ArgumentError } from "@/utils/errors"; import { ArgumentError } from "@/utils/errors";
import { stringEquals } from "@/utils/string-utils";
import { CurseForgeDependency } from "./curseforge-dependency"; import { CurseForgeDependency } from "./curseforge-dependency";
import { CurseForgeDependencyType } from "./curseforge-dependency-type"; import { CurseForgeDependencyType } from "./curseforge-dependency-type";
import { CurseForgeEternalApiClient } from "./curseforge-eternal-api-client"; import { CurseForgeEternalApiClient } from "./curseforge-eternal-api-client";
@ -136,13 +137,17 @@ export class CurseForgeUploader extends GenericPlatformUploader<CurseForgeUpload
*/ */
private async convertToCurseForgeDependencies(dependencies: Dependency[], eternalApi: CurseForgeEternalApiClient): Promise<CurseForgeDependency[]> { private async convertToCurseForgeDependencies(dependencies: Dependency[], eternalApi: CurseForgeEternalApiClient): Promise<CurseForgeDependency[]> {
const simpleDependencies = this.convertToSimpleDependencies(dependencies, CurseForgeDependencyType.fromDependencyType); const simpleDependencies = this.convertToSimpleDependencies(dependencies, CurseForgeDependencyType.fromDependencyType);
const curseforgeDependencies = await Promise.all(simpleDependencies.map(async ([id, type]) => ({ const curseForgeDependencies = await Promise.all(simpleDependencies.map(async ([id, type]) => ({
slug: isCurseForgeProjectId(id) slug: isCurseForgeProjectId(id)
? await eternalApi.getProject(id).catch(() => undefined as CurseForgeProject).then(x => x?.slug) ? await eternalApi.getProject(id).catch(() => undefined as CurseForgeProject).then(x => x?.slug)
: id, : id,
type, type,
}))); })));
return curseforgeDependencies.filter(x => x.slug && x.type); const uniqueCurseForgeDependencies = curseForgeDependencies
.filter(x => x.slug && x.type)
.filter((x, i, self) => i === self.findIndex(y => stringEquals(x.slug, y.slug, { ignoreCase: true })));
return uniqueCurseForgeDependencies;
} }
} }

View file

@ -127,7 +127,11 @@ export class ModrinthUploader extends GenericPlatformUploader<ModrinthUploaderOp
project_id: await api.getProjectId(id).catch(() => undefined as string), project_id: await api.getProjectId(id).catch(() => undefined as string),
dependency_type: type, dependency_type: type,
}))); })));
return modrinthDependencies.filter(x => x.project_id && x.dependency_type); const uniqueModrinthDependencies = modrinthDependencies
.filter(x => x.project_id && x.dependency_type)
.filter((x, i, self) => i === self.findIndex(y => x.project_id === y.project_id));
return uniqueModrinthDependencies;
} }
/** /**