1- //Overview页面
1+ // Overview页面
22"use client" ;
33import React , { useEffect , useState } from 'react' ;
44import Link from 'next/link' ;
5- //import { useSearchParams } from 'next/navigation';
65import { cratesInfo } from '@/app/lib/all_interface' ;
76import { useParams } from 'next/navigation' ;
87
9-
10-
11-
12-
138const CratePage = ( ) => {
14-
159 const params = useParams ( ) ;
16-
17-
18-
19-
20-
21-
2210 const [ results , setResults ] = useState < cratesInfo | null > ( null ) ;
2311 const [ loading , setLoading ] = useState ( true ) ;
2412 const [ error , setError ] = useState < string | null > ( null ) ;
2513
26-
27-
2814 useEffect ( ( ) => {
2915 const fetchCrateData = async ( ) => {
3016 try {
3117 const response = await fetch ( `/api/crates/${ params . nsfront } /${ params . nsbehind } /${ params . name } /${ params . version } ` ) ;
32-
3318 if ( ! response . ok ) {
3419 throw new Error ( `HTTP error! status: ${ response . status } ` ) ;
3520 }
36-
3721 const data = await response . json ( ) ;
38- console . log ( 'overviewwwwwwwwwwwwww:' , data ) ;
39-
40- setResults ( data ) ; // 设置获取的数据
41-
22+ setResults ( data ) ;
4223 } catch ( error ) {
43- console . log ( 'Error fetching data:' , error ) ;
24+ console . error ( 'Error fetching data:' , error ) ;
4425 setError ( 'An error occurred' ) ;
4526 } finally {
46- setLoading ( false ) ; // 完成加载
27+ setLoading ( false ) ;
4728 }
4829 } ;
4930
31+ fetchCrateData ( ) ;
32+ } , [ params . name , params . version , params . nsfront , params . nsbehind ] ) ;
5033
51- fetchCrateData ( ) ; // 调用函数来获取数据
52- } , [ params . name , params . version , params . nsfront , params . nsbehind ] ) ; // 依赖项数组,确保在 name 或 version 改变时重新获取数据
53-
54- // 渲染部分
5534 if ( loading ) return < p > Loading...</ p > ;
5635 if ( error ) return < p > Error: { error } </ p > ;
5736
58-
59-
60-
6137 return (
6238 < div >
63- { /* cve */ }
6439 < div className = "container mx-auto my-8 grid grid-cols-1 lg:grid-cols-2 gap-6" >
6540 < div className = "space-y-6" >
6641 { /* Security Advisories */ }
6742 < div className = "bg-white shadow rounded-lg p-4" >
6843 < h2 className = "text-lg font-bold mb-2" > Security Advisories</ h2 >
69- < p > cve: { results ? JSON . stringify ( results . cves ) : 'No results available' } </ p >
44+ < p className = "text-gray-500 text-sm" >
45+ cve: { results && results . cves && results . cves . length > 0 && results . cves [ 0 ] !== '' ? JSON . stringify ( results . cves ) : 'No results available' }
46+ </ p >
7047 </ div >
7148 { /* Licenses */ }
7249 < div className = "bg-white shadow rounded-lg p-4" >
7350 < h2 className = "text-lg font-bold mb-2" > Licenses</ h2 >
7451 < div className = "mb-2" >
75- < span className = "font-bold" > LICENSES:</ span > MIT
52+ < span className = "font-bold" > LICENSES: { results ? results . license : 'No results available' } </ span >
7653 </ div >
7754 < div className = "mb-2" >
7855 < span className = "font-bold" > DEPENDENCY LICENSES:</ span >
7956 < ul className = "list-disc pl-6" >
8057 < li > Apache-2.0 OR MIT (116)</ li >
8158 < li > MIT (27)</ li >
8259 < li > MIT OR Uniclicense (7)</ li >
83- { /* Add more dependency licenses */ }
8460 </ ul >
8561 </ div >
8662 </ div >
8763 { /* Dependencies */ }
8864 < div className = "bg-white shadow rounded-lg p-4" >
8965 < h2 className = "text-lg font-bold mb-2" > Dependencies</ h2 >
9066 < div className = "mb-2" >
91- < span className = "font-bold" > Direct: { results ? JSON . stringify ( results . dependencies . direct ) : 'No results available ' } </ span >
67+ < span className = "font-bold" > Direct: { results ? JSON . stringify ( results . dependencies . direct ) : 'No cves detected. ' } </ span >
9268 </ div >
9369 < div className = "mb-2" >
9470 < span className = "font-bold" > Indirect: { results ? JSON . stringify ( results . dependencies . indirect ) : 'No results available' } </ span >
9571 </ div >
96- < Link
97- href = { `/homepage/${ params . nsfront } /${ params . nsbehind } /${ params . name } /${ params . version } /dependencies` }
98- >
99- < div className = "text-blue-500 hover:underline" >
100- View all dependencies
101- </ div >
72+ < Link href = { `/homepage/${ params . nsfront } /${ params . nsbehind } /${ params . name } /${ params . version } /dependencies` } >
73+ < div className = "text-blue-500 hover:underline" > View all dependencies</ div >
10274 </ Link >
10375 </ div >
10476 { /* Dependents */ }
@@ -110,66 +82,64 @@ const CratePage = () => {
11082 < div className = "mb-2" >
11183 < span className = "font-bold" > Indirect: { results ? JSON . stringify ( results . dependents . indirect ) : 'No results available' } </ span >
11284 </ div >
113- < Link
114- href = { `/homepage/${ params . nsfront } /${ params . nsbehind } /${ params . name } /${ params . version } /dependents` }
115- >
116- < div className = "text-blue-500 hover:underline" >
117- View all dependencies
118- </ div >
85+ < Link href = { `/homepage/${ params . nsfront } /${ params . nsbehind } /${ params . name } /${ params . version } /dependents` } >
86+ < div className = "text-blue-500 hover:underline" > View all dependents</ div >
11987 </ Link >
12088 </ div >
12189 </ div >
122- < div className = "bg-white shadow rounded-lg p-4" >
123- < h2 className = "text-lg font-bold mb-2" > OpenSSF scorecard</ h2 >
124- < p > The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.</ p >
125- < a href = "#" className = "text-blue-500 hover:underline" >
126- View information about checks and how to fix failures.
127- </ a >
128- < div className = "flex items-center justify-between mt-4" >
129- < div className = "text-3xl font-bold" > 8.3/10</ div >
130- < div className = "text-sm text-gray-500" > Scorecard as of November 11, 2024.</ div >
131- </ div >
132- < div className = "mt-4 space-y-2" >
133- < div className = "flex justify-between" >
134- < span > Code-Review</ span >
135- < span > 10/10</ span >
136- </ div >
137- < div className = "flex justify-between" >
138- < span > Maintained</ span >
139- < span > 10/10</ span >
140- </ div >
141- < div className = "flex justify-between" >
142- < span > CI/Best-Practices</ span >
143- < span > 0/10</ span >
144- </ div >
145- < div className = "flex justify-between" >
146- < span > License</ span >
147- < span > 10/10</ span >
148- </ div >
149- < div className = "flex justify-between" >
150- < span > Dangerous-Workflow</ span >
151- < span > 10/10</ span >
152- </ div >
153- < div className = "flex justify-between" >
154- < span > Security-Policy</ span >
155- < span > 10/10</ span >
90+
91+ { /* 新增的块: doc_url 和 github_url */ }
92+ < div className = "space-y-6" >
93+ < div className = "bg-white shadow rounded-lg p-4 mb-6" >
94+ < h2 className = "text-lg font-bold mb-2" > Documentation & GitHub Links </ h2 >
95+ < div className = "mb-2" >
96+ < span className = "font-bold" > Documentation URL: </ span >
97+ < a
98+ href = { results ? results . doc_url : 'No results available' }
99+ className = "text-blue-500 hover:underline"
100+ target = "_blank"
101+ rel = "noopener noreferrer"
102+ >
103+ { results ? results . doc_url : 'No results available' }
104+ </ a >
156105 </ div >
157- < div className = "flex justify-between" >
158- < span > Token-Permissions</ span >
159- < span > 10/10</ span >
106+ < div className = "mb-2" >
107+ < span className = "font-bold" > GitHub URL: </ span >
108+ < a
109+ href = { results ? results . github_url : 'No results available' }
110+ className = "text-blue-500 hover:underline"
111+ target = "_blank"
112+ rel = "noopener noreferrer"
113+ >
114+ { results ? results . github_url : 'No results available' }
115+ </ a >
160116 </ div >
161- < div className = "flex justify-between" >
162- < span > Binary-Artifacts</ span >
163- < span > 10/10</ span >
117+ </ div >
118+
119+ { /* OpenSSF scorecard */ }
120+ < div className = "bg-white shadow rounded-lg p-4" >
121+ < h2 className = "text-lg font-bold mb-2" > OpenSSF scorecard</ h2 >
122+ < p > The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.</ p >
123+ < a href = "#" className = "text-blue-500 hover:underline" > View information about checks and how to fix failures.</ a >
124+ < div className = "flex items-center justify-between mt-4" >
125+ < div className = "text-3xl font-bold" > 8.3/10</ div >
126+ < div className = "text-sm text-gray-500" > Scorecard as of November 11, 2024.</ div >
164127 </ div >
165- < div className = "flex justify-between" >
166- < span > Pinned-Dependencies</ span >
167- < span > 0/10</ span >
128+ < div className = "mt-4 space-y-2" >
129+ < div className = "flex justify-between" > < span > Code-Review</ span > < span > 10/10</ span > </ div >
130+ < div className = "flex justify-between" > < span > Maintained</ span > < span > 10/10</ span > </ div >
131+ < div className = "flex justify-between" > < span > CI/Best-Practices</ span > < span > 0/10</ span > </ div >
132+ < div className = "flex justify-between" > < span > License</ span > < span > 10/10</ span > </ div >
133+ < div className = "flex justify-between" > < span > Dangerous-Workflow</ span > < span > 10/10</ span > </ div >
134+ < div className = "flex justify-between" > < span > Security-Policy</ span > < span > 10/10</ span > </ div >
135+ < div className = "flex justify-between" > < span > Token-Permissions</ span > < span > 10/10</ span > </ div >
136+ < div className = "flex justify-between" > < span > Binary-Artifacts</ span > < span > 10/10</ span > </ div >
137+ < div className = "flex justify-between" > < span > Pinned-Dependencies</ span > < span > 0/10</ span > </ div >
168138 </ div >
169139 </ div >
170140 </ div >
171141 </ div >
172- </ div >
142+ </ div >
173143 ) ;
174144} ;
175145
0 commit comments