Skip to content

Commit 6a1591e

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 37e7161 commit 6a1591e

File tree

9 files changed

+114
-7
lines changed

9 files changed

+114
-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: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { expect, it } from "vitest";
2+
import { config, testData } from "../../__tests__/defaultConfig";
3+
import { fetchPackageVersionDependencies } from "../packageVersionDependencies";
4+
import { packageVersionDependenciesResponseDataSchema } from "../..";
5+
6+
it("ensures package version dependencies can be fetched", async () => {
7+
const { namespaceId, packageName, versionNumber } = testData;
8+
const response = await fetchPackageVersionDependencies({
9+
config,
10+
params: {
11+
namespace_id: namespaceId,
12+
package_name: packageName,
13+
version_number: versionNumber,
14+
},
15+
data: {},
16+
queryParams: [{ key: "page", value: 1, impotent: 1 }],
17+
});
18+
19+
expect(response.count).toBe(3);
20+
expect(response.results.length).toBe(3);
21+
expect(packageVersionDependenciesResponseDataSchema.parse(response)).toEqual(
22+
response
23+
);
24+
});
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),
@@ -225,6 +227,20 @@ export const packageVersionExperimentalSchema = z.object({
225227
is_active: z.boolean(),
226228
});
227229

230+
export const packageVersionDependencySchema = z.object({
231+
description: z.string(),
232+
icon_url: z.string(),
233+
is_active: z.boolean(),
234+
name: z.string().min(1),
235+
namespace: z.string().min(1),
236+
version_number: z.string().min(1),
237+
is_removed: z.boolean(),
238+
});
239+
240+
export type PackageVersionDependency = z.infer<
241+
typeof packageVersionDependencySchema
242+
>;
243+
228244
export type PackageVersionExperimental = z.infer<
229245
typeof packageVersionExperimentalSchema
230246
>;

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
@@ -17,6 +17,7 @@ import {
1717
markdownRenderSchema,
1818
packageWikiPageSchema,
1919
packagePermissionsSchema,
20+
packageVersionDependencySchema,
2021
} from "../schemas/objectSchemas";
2122
import { paginatedResults } from "../schemas/objectSchemas";
2223

@@ -131,6 +132,17 @@ export type PackageVersionsResponseData = z.infer<
131132
typeof packageVersionsResponseDataSchema
132133
>;
133134

135+
export const packageVersionDependenciesResponseDataSchema = z.object({
136+
count: z.number(),
137+
next: z.string().url().nullable(),
138+
previous: z.string().url().nullable(),
139+
results: z.array(packageVersionDependencySchema),
140+
});
141+
142+
export type PackageVersionDependenciesResponseData = z.infer<
143+
typeof packageVersionDependenciesResponseDataSchema
144+
>;
145+
134146
// PackageWikiResponse
135147
export const packageWikiResponseDataSchema = z.object({
136148
id: z.string().min(1),

0 commit comments

Comments
 (0)