diff --git a/packages/dapper-fake/src/fakers/package.ts b/packages/dapper-fake/src/fakers/package.ts index 8b47f0f1f..b388d094a 100644 --- a/packages/dapper-fake/src/fakers/package.ts +++ b/packages/dapper-fake/src/fakers/package.ts @@ -190,6 +190,49 @@ export const getFakePackageVersions = async ( }); }; +const fakePackageVersionDependencies = range(25).map(() => ({ + description: faker.company.buzzPhrase(), + icon_url: getFakeImg(256, 256), + is_active: faker.datatype.boolean(0.5), + name: faker.word.words(3).split(" ").join("_"), + namespace: faker.word.sample(), + version_number: getVersionNumber(), + is_removed: faker.datatype.boolean(0.5), +})); + +export const getFakePackageVersionDependencies = async ( + namespace: string, + name: string, + version: string, + page?: number +) => { + setSeed(`${namespace}-${name}-${version}`); + page = page ?? 1; + + // Split the fake data into pages of 10 items each. + + const start = (page - 1) * 10; + const end = start + 10; + const items = fakePackageVersionDependencies.slice(start, end); + + return { + count: fakePackageVersionDependencies.length, + next: + end < fakePackageVersionDependencies.length + ? `https://thunderstore.io/api/cyberstorm/package/${namespace}/${name}/v/${version}/dependencies/?page=${ + page + 1 + }` + : null, + previous: + page > 1 + ? `https://thunderstore.io/api/cyberstorm/package/${namespace}/${name}/v/${version}/dependencies/?page=${ + page - 1 + }` + : null, + results: items, + }; +}; + const getVersionNumber = (min = 0, max = 10) => { const major = faker.number.int({ min, max }); const minor = faker.number.int({ min, max }); diff --git a/packages/dapper-fake/src/index.ts b/packages/dapper-fake/src/index.ts index c01cbfd00..2daebf748 100644 --- a/packages/dapper-fake/src/index.ts +++ b/packages/dapper-fake/src/index.ts @@ -10,6 +10,7 @@ import { getFakePackageListingDetails, getFakePackageListings, getFakePackagePermissions, + getFakePackageVersionDependencies, getFakePackageVersions, getFakePackageSource, } from "./fakers/package"; @@ -35,6 +36,7 @@ export class DapperFake implements DapperInterface { public getPackageReadme = getFakeReadme; public getPackageVersions = getFakePackageVersions; public getPackageSource = getFakePackageSource; + public getPackageVersionDependencies = getFakePackageVersionDependencies; public getTeamDetails = getFakeTeamDetails; public getTeamMembers = getFakeTeamMembers; public getTeamServiceAccounts = getFakeServiceAccounts; diff --git a/packages/dapper-ts/src/__tests__/index.test.ts b/packages/dapper-ts/src/__tests__/index.test.ts index f82d07699..4378d3ad5 100644 --- a/packages/dapper-ts/src/__tests__/index.test.ts +++ b/packages/dapper-ts/src/__tests__/index.test.ts @@ -4,6 +4,7 @@ import { DapperTs } from "../index"; const communityId = "test-community-1"; const namespaceId = "Test_Team_0"; const packageName = "Test_Package_0"; +const packageVersion = "1.0.0"; let dapper: DapperTs; beforeAll(() => { @@ -37,6 +38,17 @@ it("executes getPackageChangelog without errors", async () => { ).resolves.not.toThrowError(); }); +// TODO: Disabled temporarily until we decide on a testing strategy/policy regarding e2e tests +test.skip("executes getPackageVersionDependencies without errors", async () => { + await expect( + dapper.getPackageVersionDependencies( + namespaceId, + packageName, + packageVersion + ) + ).resolves.not.toThrowError(); +}); + it("executes getPackageListingDetails without errors", async () => { await expect( dapper.getPackageListingDetails(communityId, namespaceId, packageName) diff --git a/packages/dapper-ts/src/index.ts b/packages/dapper-ts/src/index.ts index efea9c588..d66951b62 100644 --- a/packages/dapper-ts/src/index.ts +++ b/packages/dapper-ts/src/index.ts @@ -16,6 +16,7 @@ import { getPackageWikiPage, getPackagePermissions, getPackageSource, + getPackageVersionDependencies, } from "./methods/package"; import { getPackageListingDetails, @@ -51,6 +52,8 @@ export class DapperTs implements DapperTsInterface { this.getPackageListingDetails = this.getPackageListingDetails.bind(this); this.getPackageReadme = this.getPackageReadme.bind(this); this.getPackageVersions = this.getPackageVersions.bind(this); + this.getPackageVersionDependencies = + this.getPackageVersionDependencies.bind(this); this.getPackageWiki = this.getPackageWiki.bind(this); this.getPackageWikiPage = this.getPackageWikiPage.bind(this); this.getPackagePermissions = this.getPackagePermissions.bind(this); @@ -76,6 +79,7 @@ export class DapperTs implements DapperTsInterface { public getPackageListingDetails = getPackageListingDetails; public getPackageReadme = getPackageReadme; public getPackageVersions = getPackageVersions; + public getPackageVersionDependencies = getPackageVersionDependencies; public getPackageWiki = getPackageWiki; public getPackageWikiPage = getPackageWikiPage; public getPackagePermissions = getPackagePermissions; diff --git a/packages/dapper-ts/src/methods/package.ts b/packages/dapper-ts/src/methods/package.ts index 0eaa90d9c..d3e69bec5 100644 --- a/packages/dapper-ts/src/methods/package.ts +++ b/packages/dapper-ts/src/methods/package.ts @@ -9,6 +9,8 @@ import { fetchPackagePermissions, fetchPackageSource, ApiError, + fetchPackageVersionDependencies, + PackageVersionDependenciesRequestQueryParams, } from "@thunderstore/thunderstore-api"; import { z } from "zod"; @@ -101,6 +103,34 @@ export async function getPackageVersions( return data; } +export async function getPackageVersionDependencies( + this: DapperTsInterface, + namespaceId: string, + packageName: string, + versionNumber: string, + page?: number +) { + const options: PackageVersionDependenciesRequestQueryParams = [ + { + key: "page", + value: page, + impotent: 1, + }, + ]; + + const data = await fetchPackageVersionDependencies({ + config: this.config, + params: { + namespace_id: namespaceId, + package_name: packageName, + version_number: versionNumber, + }, + data: {}, + queryParams: options, + }); + + return data; +} export async function getPackageWiki( this: DapperTsInterface, diff --git a/packages/dapper/src/dapper.ts b/packages/dapper/src/dapper.ts index e2b980343..5a3c71d37 100644 --- a/packages/dapper/src/dapper.ts +++ b/packages/dapper/src/dapper.ts @@ -10,6 +10,7 @@ export interface DapperInterface { getPackageListings: methods.GetPackageListings; getPackageReadme: methods.GetPackageReadme; getPackageVersions: methods.GetPackageVersions; + getPackageVersionDependencies: methods.GetPackageVersionDependencies; getPackagePermissions: methods.GetPackagePermissions; getPackageSource: methods.GetPackageSource; getTeamDetails: methods.GetTeamDetails; diff --git a/packages/dapper/src/types/methods.ts b/packages/dapper/src/types/methods.ts index 5273ec26d..bc3162194 100644 --- a/packages/dapper/src/types/methods.ts +++ b/packages/dapper/src/types/methods.ts @@ -10,6 +10,7 @@ import { type PackageSource, type PackageSubmissionResponse, type PackageVersion, + type PackageVersionDependencies, } from "./package"; import { type PackageListingType } from "./props"; import { type HTMLContentResponse, type MarkdownResponse } from "./shared"; @@ -65,6 +66,13 @@ export type GetPackageVersions = ( name: string ) => Promise; +export type GetPackageVersionDependencies = ( + namespace: string, + name: string, + version: string, + page?: number +) => Promise; + export type GetPackagePermissions = ( namespaceId: string, communityId: string, diff --git a/packages/dapper/src/types/package.ts b/packages/dapper/src/types/package.ts index 467208e4a..a4d800978 100644 --- a/packages/dapper/src/types/package.ts +++ b/packages/dapper/src/types/package.ts @@ -57,6 +57,23 @@ export interface PackageVersion { install_url: string; } +export interface PackageVersionDependency { + description: string; + icon_url: string; + is_active: boolean; + name: string; + namespace: string; + version_number: string; + is_removed: boolean; +} + +export type PackageVersionDependencies = { + count: number; + previous: string | null; + next: string | null; + results: PackageVersionDependency[]; +}; + export interface PackagePermissions { package: { community_id: string;