11import { Suspense } from "react" ;
2- import { type LoaderFunctionArgs } from "react-router" ;
3- import { useLoaderData , Await } from "react-router" ;
4- import { DapperTs } from "@thunderstore/dapper-ts" ;
5- import { SkeletonBox } from "@thunderstore/cyberstorm" ;
2+ import { Await , type LoaderFunctionArgs } from "react-router" ;
3+ import { useLoaderData } from "react-router" ;
64import { PaginatedDependencies } from "~/commonComponents/PaginatedDependencies/PaginatedDependencies" ;
7- import {
8- getPublicEnvVariables ,
9- getSessionTools ,
10- } from "cyberstorm/security/publicEnvVariables" ;
5+ import { throwUserFacingPayloadResponse } from "cyberstorm/utils/errors/userFacingErrorResponse" ;
6+ import { handleLoaderError } from "cyberstorm/utils/errors/handleLoaderError" ;
7+ import { packageDependenciesErrorMappings } from "./Required" ;
8+ import { NimbusDefaultRouteErrorBoundary } from "cyberstorm/utils/errors/NimbusErrorBoundary" ;
9+ import { getLoaderTools } from "cyberstorm/utils/getLoaderTools" ;
10+ import { SkeletonBox } from "@thunderstore/cyberstorm" ;
11+ import { parseIntegerSearchParam } from "cyberstorm/utils/searchParamsUtils" ;
1112
1213export async function loader ( { params, request } : LoaderFunctionArgs ) {
1314 if ( params . namespaceId && params . packageId && params . packageVersion ) {
14- const publicEnvVariables = getPublicEnvVariables ( [ "VITE_API_URL" ] ) ;
15- const dapper = new DapperTs ( ( ) => {
16- return {
17- apiHost : publicEnvVariables . VITE_API_URL ,
18- sessionId : undefined ,
19- } ;
20- } ) ;
15+ const { dapper } = getLoaderTools ( ) ;
2116 const searchParams = new URL ( request . url ) . searchParams ;
22- const page = searchParams . get ( "page" ) ;
17+ const page = parseIntegerSearchParam ( searchParams . get ( "page" ) ) ;
2318
24- return {
25- version : await dapper . getPackageVersionDetails (
19+ try {
20+ const version = await dapper . getPackageVersionDetails (
2621 params . namespaceId ,
2722 params . packageId ,
2823 params . packageVersion
29- ) ,
30- dependencies : await dapper . getPackageVersionDependencies (
24+ ) ;
25+ const dependencies = await dapper . getPackageVersionDependencies (
3126 params . namespaceId ,
3227 params . packageId ,
3328 params . packageVersion ,
34- page === null ? undefined : Number ( page )
35- ) ,
36- } ;
29+ page
30+ ) ;
31+
32+ return {
33+ version,
34+ dependencies,
35+ } ;
36+ } catch ( error ) {
37+ handleLoaderError ( error , { mappings : packageDependenciesErrorMappings } ) ;
38+ }
3739 }
38- throw new Response ( "Package version dependencies not found" , { status : 404 } ) ;
40+ throwUserFacingPayloadResponse ( {
41+ headline : "Dependencies not found." ,
42+ description : "We could not find the requested version dependencies." ,
43+ category : "not_found" ,
44+ status : 404 ,
45+ } ) ;
3946}
4047
41- export async function clientLoader ( { params, request } : LoaderFunctionArgs ) {
48+ export function clientLoader ( { params, request } : LoaderFunctionArgs ) {
4249 if ( params . namespaceId && params . packageId && params . packageVersion ) {
43- const tools = getSessionTools ( ) ;
44- const dapper = new DapperTs ( ( ) => {
45- return {
46- apiHost : tools ?. getConfig ( ) . apiHost ,
47- sessionId : tools ?. getConfig ( ) . sessionId ,
48- } ;
49- } ) ;
50+ const { dapper } = getLoaderTools ( ) ;
5051 const searchParams = new URL ( request . url ) . searchParams ;
51- const page = searchParams . get ( "page" ) ;
52+ const page = parseIntegerSearchParam ( searchParams . get ( "page" ) ) ;
5253
53- return {
54- version : dapper . getPackageVersionDetails (
54+ const version = dapper
55+ . getPackageVersionDetails (
5556 params . namespaceId ,
5657 params . packageId ,
5758 params . packageVersion
58- ) ,
59- dependencies : dapper . getPackageVersionDependencies (
59+ )
60+ . catch ( ( error ) =>
61+ handleLoaderError ( error , { mappings : packageDependenciesErrorMappings } )
62+ ) ;
63+ const dependencies = dapper
64+ . getPackageVersionDependencies (
6065 params . namespaceId ,
6166 params . packageId ,
6267 params . packageVersion ,
63- page === null ? undefined : Number ( page )
64- ) ,
68+ page
69+ )
70+ . catch ( ( error ) =>
71+ handleLoaderError ( error , { mappings : packageDependenciesErrorMappings } )
72+ ) ;
73+
74+ return {
75+ version,
76+ dependencies,
6577 } ;
6678 }
67- throw new Response ( "Package version dependencies not found" , { status : 404 } ) ;
79+ throwUserFacingPayloadResponse ( {
80+ headline : "Dependencies not found." ,
81+ description : "We could not find the requested version dependencies." ,
82+ category : "not_found" ,
83+ status : 404 ,
84+ } ) ;
6885}
6986
7087export default function PackageVersionWithoutCommunityRequired ( ) {
@@ -87,3 +104,7 @@ export default function PackageVersionWithoutCommunityRequired() {
87104 </ Suspense >
88105 ) ;
89106}
107+
108+ export function ErrorBoundary ( ) {
109+ return < NimbusDefaultRouteErrorBoundary /> ;
110+ }
0 commit comments