Skip to content

Commit b133488

Browse files
committed
Add fetchPackageVersionDependencies function to thunderstore-api
And the related object schemas Additionally the existing PackageDependency type needs to be renamed to be more accurate. As it's a package dependency returned with the package listing
1 parent 5c6383b commit b133488

File tree

9 files changed

+115
-7
lines changed

9 files changed

+115
-7
lines changed

apps/cyberstorm-remix/app/commonComponents/ListingDependency/ListingDependency.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import type { packageDependencySchema } from "@thunderstore/thunderstore-api";
1+
import type { packageListingDependencySchema } from "@thunderstore/thunderstore-api";
22
import "./ListingDependency.css";
33
import { formatToDisplayName, Image, NewLink } from "@thunderstore/cyberstorm";
44

55
export interface ListingDependencyProps {
6-
dependency: typeof packageDependencySchema._type;
6+
dependency: typeof packageListingDependencySchema._type;
77
// TODO: Remove when package versiond detail is available
88
domain: string;
99
}

packages/dapper/src/types/package.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export interface PackageListingDetails extends PackageListing {
2323
community_name: string;
2424
datetime_created: string;
2525
dependant_count: number;
26-
dependencies: PackageDependency[];
26+
dependencies: PackageListingDependency[];
2727
dependency_count: number;
2828
download_url: string;
2929
full_version_name: string;
@@ -34,7 +34,7 @@ export interface PackageListingDetails extends PackageListing {
3434
website_url: string | null;
3535
}
3636

37-
export interface PackageDependency {
37+
export interface PackageListingDependency {
3838
community_identifier: string;
3939
description: string;
4040
icon_url: string | null;

packages/thunderstore-api/src/__tests__/defaultConfig.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ export const testData = {
1212
communityId: "test-community-1",
1313
namespaceId: "Test_Team_0",
1414
packageName: "Test_Package_0",
15+
versionNumber: "1.0.0",
1516
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { expect, test } from "vitest";
2+
import { config, testData } from "../../__tests__/defaultConfig";
3+
import { fetchPackageVersionDependencies } from "../packageVersionDependencies";
4+
import { packageVersionDependenciesResponseDataSchema } from "../..";
5+
6+
// TODO: Disabled temporarily until we decide on a testing strategy/policy regarding e2e tests
7+
test.skip("ensures package version dependencies can be fetched", async () => {
8+
const { namespaceId, packageName, versionNumber } = testData;
9+
const response = await fetchPackageVersionDependencies({
10+
config,
11+
params: {
12+
namespace_id: namespaceId,
13+
package_name: packageName,
14+
version_number: versionNumber,
15+
},
16+
data: {},
17+
queryParams: [{ key: "page", value: 1, impotent: 1 }],
18+
});
19+
20+
expect(response.count).toBe(3);
21+
expect(response.results.length).toBe(3);
22+
expect(packageVersionDependenciesResponseDataSchema.parse(response)).toEqual(
23+
response
24+
);
25+
});
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import {
2+
ApiEndpointProps,
3+
packageVersionDependenciesRequestQueryParamsSchema,
4+
PackageVersionDependenciesRequestQueryParams,
5+
PackageVersionDependenciesRequestParams,
6+
packageVersionDependenciesResponseDataSchema,
7+
PackageVersionDependenciesResponseData,
8+
} from "../index";
9+
import { apiFetch } from "../apiFetch";
10+
11+
export async function fetchPackageVersionDependencies(
12+
props: ApiEndpointProps<
13+
PackageVersionDependenciesRequestParams,
14+
PackageVersionDependenciesRequestQueryParams,
15+
object
16+
>
17+
): Promise<PackageVersionDependenciesResponseData> {
18+
const {
19+
config,
20+
params,
21+
queryParams = [{ key: "page", value: 1, impotent: 1 }],
22+
} = props;
23+
const path = `api/cyberstorm/package/${params.namespace_id}/${params.package_name}/v/${params.version_number}/dependencies/`;
24+
25+
return await apiFetch({
26+
args: {
27+
config,
28+
path,
29+
queryParams,
30+
},
31+
requestSchema: undefined,
32+
queryParamsSchema: packageVersionDependenciesRequestQueryParamsSchema,
33+
responseSchema: packageVersionDependenciesResponseDataSchema,
34+
});
35+
}

packages/thunderstore-api/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export * from "./get/packageDependantsListings";
3333
export * from "./get/packageListingDetails";
3434
export * from "./get/packageReadme";
3535
export * from "./get/packageSubmission";
36+
export * from "./get/packageVersionDependencies";
3637
export * from "./get/packageVersions";
3738
export * from "./get/packageWiki";
3839
export * from "./get/ratedPackages";

packages/thunderstore-api/src/schemas/objectSchemas.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ const packageTeamSchema = z.object({
142142

143143
export type PackageTeam = z.infer<typeof packageTeamSchema>;
144144

145-
export const packageDependencySchema = z.object({
145+
export const packageListingDependencySchema = z.object({
146146
community_identifier: z.string().min(1),
147147
description: z.string(),
148148
icon_url: z.string().nullable(),
@@ -152,13 +152,15 @@ export const packageDependencySchema = z.object({
152152
version_number: z.string().min(1),
153153
});
154154

155-
export type PackageDependency = z.infer<typeof packageDependencySchema>;
155+
export type PackageListingDependency = z.infer<
156+
typeof packageListingDependencySchema
157+
>;
156158

157159
export const packageListingDetailsSchema = packageListingSchema.extend({
158160
community_name: z.string().min(1),
159161
datetime_created: z.string().datetime(),
160162
dependant_count: z.number().int(),
161-
dependencies: z.array(packageDependencySchema),
163+
dependencies: z.array(packageListingDependencySchema),
162164
dependency_count: z.number().int(),
163165
download_url: z.string(),
164166
full_version_name: z.string().min(1),
@@ -244,6 +246,20 @@ export const packageVersionExperimentalSchema = z.object({
244246
is_active: z.boolean(),
245247
});
246248

249+
export const packageVersionDependencySchema = z.object({
250+
description: z.string(),
251+
icon_url: z.string(),
252+
is_active: z.boolean(),
253+
name: z.string().min(1),
254+
namespace: z.string().min(1),
255+
version_number: z.string().min(1),
256+
is_removed: z.boolean(),
257+
});
258+
259+
export type PackageVersionDependency = z.infer<
260+
typeof packageVersionDependencySchema
261+
>;
262+
247263
export type PackageVersionExperimental = z.infer<
248264
typeof packageVersionExperimentalSchema
249265
>;

packages/thunderstore-api/src/schemas/requestSchemas.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,24 @@ export type PackageVersionsRequestParams = z.infer<
188188
typeof packageVersionsRequestParamsSchema
189189
>;
190190

191+
// PackageVersionDependenciesRequest
192+
export const packageVersionDependenciesRequestParamsSchema = z.object({
193+
namespace_id: z.string(),
194+
package_name: z.string(),
195+
version_number: z.string(),
196+
});
197+
198+
export type PackageVersionDependenciesRequestParams = z.infer<
199+
typeof packageVersionDependenciesRequestParamsSchema
200+
>;
201+
202+
export const packageVersionDependenciesRequestQueryParamsSchema =
203+
z.array(pageQueryParam);
204+
205+
export type PackageVersionDependenciesRequestQueryParams = z.infer<
206+
typeof packageVersionDependenciesRequestQueryParamsSchema
207+
>;
208+
191209
// PackageWikiRequest
192210
export const packageWikiRequestParamsSchema = z.object({
193211
namespace_id: z.string(),

packages/thunderstore-api/src/schemas/responseSchemas.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
packageWikiPageSchema,
1919
packagePermissionsSchema,
2020
packageSourceSchema,
21+
packageVersionDependencySchema,
2122
} from "../schemas/objectSchemas";
2223
import { paginatedResults } from "../schemas/objectSchemas";
2324

@@ -139,6 +140,17 @@ export type PackageVersionsResponseData = z.infer<
139140
typeof packageVersionsResponseDataSchema
140141
>;
141142

143+
export const packageVersionDependenciesResponseDataSchema = z.object({
144+
count: z.number(),
145+
next: z.string().url().nullable(),
146+
previous: z.string().url().nullable(),
147+
results: z.array(packageVersionDependencySchema),
148+
});
149+
150+
export type PackageVersionDependenciesResponseData = z.infer<
151+
typeof packageVersionDependenciesResponseDataSchema
152+
>;
153+
142154
// PackageWikiResponse
143155
export const packageWikiResponseDataSchema = z.object({
144156
id: z.string().min(1),

0 commit comments

Comments
 (0)