From fce18c837a345343f3553d2433dfc09d7ff66f1b Mon Sep 17 00:00:00 2001
From: mapan-nju <2246839805@qq.com>
Date: Fri, 17 Jan 2025 15:08:37 +0800
Subject: [PATCH] fixed some bugs
---
.../[version]/dependencies/graph/page.tsx | 5 +-
.../[nsbehind]/[name]/[version]/layout.tsx | 25 +++
.../[nsbehind]/[name]/[version]/page.tsx | 4 +-
.../[name]/[version]/versions/page.tsx | 19 ++-
.../dependencies/graphpage/route.tsx | 25 +++
.../[cratename]/[version]/versions/route.tsx | 22 +++
.../[name]/[version]/dependencies/page.tsx | 58 -------
.../[name]/[version]/dependents/page.tsx | 58 -------
.../[nsbehind]/[name]/[version]/page.tsx | 146 ------------------
app/homepage/[nsfront]/[nsbehind]/layout.tsx | 24 ---
app/homepage/layout.tsx | 23 ---
app/homepage/page.tsx | 110 -------------
app/homepage/search/page.tsx | 132 ----------------
app/homepage/styles.css | 5 -
app/programs/[name]/[version]/page.tsx | 140 -----------------
app/programs/[name]/page.tsx | 30 ----
app/programs/cves/[id]/page.tsx | 64 --------
app/programs/layout.tsx | 20 ---
app/programs/page.tsx | 97 ------------
components/CrateNav.tsx | 50 ++++++
components/DependencyGraph.tsx | 141 ++++++++---------
components/HeaderWithSearch.tsx | 59 +------
components/VersionsTable.tsx | 103 ++++++------
23 files changed, 249 insertions(+), 1111 deletions(-)
create mode 100644 app/[nsfront]/[nsbehind]/[name]/[version]/layout.tsx
create mode 100644 app/api/crates/[nsfront]/[nsbehind]/[cratename]/[version]/dependencies/graphpage/route.tsx
create mode 100644 app/api/crates/[nsfront]/[nsbehind]/[cratename]/[version]/versions/route.tsx
delete mode 100644 app/homepage/[nsfront]/[nsbehind]/[name]/[version]/dependencies/page.tsx
delete mode 100644 app/homepage/[nsfront]/[nsbehind]/[name]/[version]/dependents/page.tsx
delete mode 100644 app/homepage/[nsfront]/[nsbehind]/[name]/[version]/page.tsx
delete mode 100644 app/homepage/[nsfront]/[nsbehind]/layout.tsx
delete mode 100644 app/homepage/layout.tsx
delete mode 100644 app/homepage/page.tsx
delete mode 100644 app/homepage/search/page.tsx
delete mode 100644 app/homepage/styles.css
delete mode 100644 app/programs/[name]/[version]/page.tsx
delete mode 100644 app/programs/[name]/page.tsx
delete mode 100644 app/programs/cves/[id]/page.tsx
delete mode 100644 app/programs/layout.tsx
delete mode 100644 app/programs/page.tsx
create mode 100644 components/CrateNav.tsx
diff --git a/app/[nsfront]/[nsbehind]/[name]/[version]/dependencies/graph/page.tsx b/app/[nsfront]/[nsbehind]/[name]/[version]/dependencies/graph/page.tsx
index 4b9e5f2..68114dc 100644
--- a/app/[nsfront]/[nsbehind]/[name]/[version]/dependencies/graph/page.tsx
+++ b/app/[nsfront]/[nsbehind]/[name]/[version]/dependencies/graph/page.tsx
@@ -24,7 +24,7 @@ const CratePage = () => {
try {
setError(null);
const response = await fetch(
- `/api/crates/${params.nsfront}/${params.nsbehind}/${params.name}/${params.version}/dependencies`
+ `/api/crates/${params.nsfront}/${params.nsbehind}/${params.name}/${params.version}/dependencies/graphpage`
);
if (!response.ok) {
@@ -34,6 +34,7 @@ const CratePage = () => {
const data = await response.json();
setResults(data); // 设置获取的数据
+ console.log('resultssssssss', results);
} catch (error) {
console.log("Error fetching data:", error);
setError("Failed to fetch data.");
@@ -52,7 +53,7 @@ const CratePage = () => {
-
+
);
diff --git a/app/[nsfront]/[nsbehind]/[name]/[version]/layout.tsx b/app/[nsfront]/[nsbehind]/[name]/[version]/layout.tsx
new file mode 100644
index 0000000..7ad3735
--- /dev/null
+++ b/app/[nsfront]/[nsbehind]/[name]/[version]/layout.tsx
@@ -0,0 +1,25 @@
+'use client';
+
+import React from 'react';
+import { useParams } from 'next/navigation';
+import CrateNav from '@/components/CrateNav';
+
+export default function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const params = useParams();
+
+ return (
+
Loading...
;
if (error) return
- {results && results.cves && results.cves.length > 0 ? (
+ {results && results.dep_cves && results.dep_cves.length > 0 ? (
results.dep_cves.map((dep_cves, index) => (
<>
diff --git a/app/[nsfront]/[nsbehind]/[name]/[version]/versions/page.tsx b/app/[nsfront]/[nsbehind]/[name]/[version]/versions/page.tsx
index bfacd59..28bd868 100644
--- a/app/[nsfront]/[nsbehind]/[name]/[version]/versions/page.tsx
+++ b/app/[nsfront]/[nsbehind]/[name]/[version]/versions/page.tsx
@@ -3,13 +3,22 @@
import React, { useEffect, useState } from 'react';
import VersionsTable from '@/components/VersionsTable';
-import { cratesInfo } from '@/app/lib/all_interface';
+// import { VersionsInfo } from '@/app/lib/all_interface';
import { useParams } from 'next/navigation';
+interface VersionInfo {
+ version: string;
+ // publishDay: string;
+ dependents_number: number;
+}
+// interface VersionsTableProps {
+// data: VersionInfo[] | undefined;
+
+// }
const CratePage = () => {
- const [results, setResults] = useState(null);
+ const [results, setResults] = useState(undefined);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
@@ -20,7 +29,7 @@ const CratePage = () => {
useEffect(() => {
const fetchCrateData = async () => {
try {
- const response = await fetch(`/api/crates/${params.nsfront}/${params.nsbehind}/${params.name}/${params.version}`);
+ const response = await fetch(`/api/crates/${params.nsfront}/${params.nsbehind}/${params.name}/${params.version}/versions`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
@@ -40,7 +49,7 @@ const CratePage = () => {
};
fetchCrateData(); // 调用函数来获取数据
}, [params.name, params.version, params.nsfront, params.nsbehind]); // 依赖项数组,确保在 crateName 或 version 改变时重新获取数据
-
+ console.log('results in versionsssssss', results);
if (loading) return Loading...
;
if (error) return Error: {error}
;
@@ -49,7 +58,7 @@ const CratePage = () => {
return (
-
+
);
diff --git a/app/api/crates/[nsfront]/[nsbehind]/[cratename]/[version]/dependencies/graphpage/route.tsx b/app/api/crates/[nsfront]/[nsbehind]/[cratename]/[version]/dependencies/graphpage/route.tsx
new file mode 100644
index 0000000..6123492
--- /dev/null
+++ b/app/api/crates/[nsfront]/[nsbehind]/[cratename]/[version]/dependencies/graphpage/route.tsx
@@ -0,0 +1,25 @@
+
+import { NextRequest, NextResponse } from "next/server";
+type Params = Promise<{ nsfront: string, nsbehind: string, cratename: string, version: string }>
+export async function GET(req: NextRequest, props: { params: Params }) {
+ try {
+ const params = await props.params
+ const { nsfront, nsbehind, cratename, version } = params;
+
+ const endpoint = process.env.CRATES_PRO_INTERNAL_HOST;
+
+ const externalApiUrl = `${endpoint}/api/crates/${nsfront}/${nsbehind}/${cratename}/${version}/dependencies/graphpage`; // 替换为你的外部 API URL
+
+ const externalRes = await fetch(externalApiUrl);
+ if (!externalRes.ok) {
+ throw new Error('Failed to fetch external data');
+ }
+ const externalData = await externalRes.json();
+ console.log('graphhhhhhhhhh:', externalData);
+ return NextResponse.json(externalData);
+ } catch (error) {
+ console.error('Error:', error);
+ return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
+
+ }
+}
\ No newline at end of file
diff --git a/app/api/crates/[nsfront]/[nsbehind]/[cratename]/[version]/versions/route.tsx b/app/api/crates/[nsfront]/[nsbehind]/[cratename]/[version]/versions/route.tsx
new file mode 100644
index 0000000..9d07059
--- /dev/null
+++ b/app/api/crates/[nsfront]/[nsbehind]/[cratename]/[version]/versions/route.tsx
@@ -0,0 +1,22 @@
+import { NextRequest, NextResponse } from "next/server";
+type Params = Promise<{ nsfront: string, nsbehind: string, cratename: string, version: string }>
+export async function GET(req: NextRequest, props: { params: Params }) {
+ try {
+ const params = await props.params
+ const { nsfront, nsbehind, cratename, version } = params;
+ const endpoint = process.env.CRATES_PRO_INTERNAL_HOST;
+
+ const externalApiUrl = `${endpoint}/api/crates/${nsfront}/${nsbehind}/${cratename}/${version}/versions`; // 替换为你的外部 API URL
+ const externalRes = await fetch(externalApiUrl);
+ if (!externalRes.ok) {
+ throw new Error('Failed to fetch external data');
+ }
+ const externalData = await externalRes.json();
+ console.log('External API Response:', externalData);
+ return NextResponse.json(externalData);
+ } catch (error) {
+ console.error('Error:', error);
+ return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
+
+ }
+}
\ No newline at end of file
diff --git a/app/homepage/[nsfront]/[nsbehind]/[name]/[version]/dependencies/page.tsx b/app/homepage/[nsfront]/[nsbehind]/[name]/[version]/dependencies/page.tsx
deleted file mode 100644
index fc966f1..0000000
--- a/app/homepage/[nsfront]/[nsbehind]/[name]/[version]/dependencies/page.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-//Dependencies页面
-"use client";
-import React, { useEffect, useState } from 'react';
-import { useParams } from 'next/navigation'
-
-import DependencyTable from '../../../../../../../components/DependencyTable';
-import { dependenciesInfo } from '@/app/lib/all_interface';
-
-
-const CratePage = () => {
- const params = useParams();
-
- const [results, setResults] = useState(null);
-
-
- const [loading, setLoading] = useState(true);
- const [error, setError] = useState(null);
-
-
-
- useEffect(() => {
- const fetchCrateData = async () => {
- try {
- setError(null);
- const response = await fetch(`/api/crates/${params.nsfront}/${params.nsbehind}/${params.name}/${params.version}/dependencies`);
-
- if (!response.ok) {
- throw new Error(`HTTP error! status: ${response.status}`);
- }
-
- const data = await response.json();
-
-
- setResults(data); // 设置获取的数据
-
- } catch (error) {
- console.log('Error fetching data:', error);
- } finally {
- setLoading(false); // 完成加载
- }
- };
- fetchCrateData(); // 调用函数来获取数据
- }, [params.name, params.version, params.nsfront, params.nsbehind]); // 依赖项数组,确保在 crateName 或 version 改变时重新获取数据
-
- if (loading) return Loading...
;
- if (error) return Error: {error}
;
- // console.log('dependencyyyyyyyyyyyyyyy', results?.data);
- return (
- <>
- {/* Existing header and search */}
-
-
- >
-
- );
-};
-
-export default CratePage;
\ No newline at end of file
diff --git a/app/homepage/[nsfront]/[nsbehind]/[name]/[version]/dependents/page.tsx b/app/homepage/[nsfront]/[nsbehind]/[name]/[version]/dependents/page.tsx
deleted file mode 100644
index 84d0386..0000000
--- a/app/homepage/[nsfront]/[nsbehind]/[name]/[version]/dependents/page.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-//Dependents页面
-"use client";
-import React, { useEffect, useState } from 'react';
-
-import DependentTable from '../../../../../../../components/DependentTable';
-import { dependentsInfo } from '@/app/lib/all_interface';
-import { useParams } from 'next/navigation';
-
-
-
-const CratePage = () => {
- const [results, setResults] = useState(null);
- const [loading, setLoading] = useState(true);
- const [error, setError] = useState(null);
-
- const params = useParams();
-
-
-
- useEffect(() => {
- const fetchCrateData = async () => {
- try {
- const response = await fetch(`/api/crates/${params.nsfront}/${params.nsbehind}/${params.name}/${params.version}/dependents`);
-
- if (!response.ok) {
- throw new Error(`HTTP error! status: ${response.status}`);
- }
-
- const data = await response.json();
-
-
- setResults(data); // 设置获取的数据
-
- } catch (error) {
- setError(null);
- console.log('Error fetching data:', error);
- } finally {
- setLoading(false); // 完成加载
- }
- };
- fetchCrateData(); // 调用函数来获取数据
- }, [params.name, params.version, params.nsfront, params.nsbehind]); // 依赖项数组,确保在 crateName 或 version 改变时重新获取数据
-
- if (loading) return Loading...
;
- if (error) return Error: {error}
;
-
-
-
- return (
-
-
-
-
-
- );
-};
-
-export default CratePage;
\ No newline at end of file
diff --git a/app/homepage/[nsfront]/[nsbehind]/[name]/[version]/page.tsx b/app/homepage/[nsfront]/[nsbehind]/[name]/[version]/page.tsx
deleted file mode 100644
index c2c7df3..0000000
--- a/app/homepage/[nsfront]/[nsbehind]/[name]/[version]/page.tsx
+++ /dev/null
@@ -1,146 +0,0 @@
-// Overview页面
-"use client";
-import React, { useEffect, useState } from 'react';
-import Link from 'next/link';
-import { cratesInfo } from '@/app/lib/all_interface';
-import { useParams } from 'next/navigation';
-
-const CratePage = () => {
- const params = useParams();
- const [results, setResults] = useState(null);
- const [loading, setLoading] = useState(true);
- const [error, setError] = useState(null);
-
- useEffect(() => {
- const fetchCrateData = async () => {
- try {
- const response = await fetch(`/api/crates/${params.nsfront}/${params.nsbehind}/${params.name}/${params.version}`);
- if (!response.ok) {
- throw new Error(`HTTP error! status: ${response.status}`);
- }
- const data = await response.json();
- setResults(data);
- } catch (error) {
- console.error('Error fetching data:', error);
- setError('An error occurred');
- } finally {
- setLoading(false);
- }
- };
-
- fetchCrateData();
- }, [params.name, params.version, params.nsfront, params.nsbehind]);
-
- if (loading) return Loading...
;
- if (error) return Error: {error}
;
-
- return (
-
-
-
- {/* Security Advisories */}
-
-
Security Advisories
-
- cve: {results && results.cves && results.cves.length > 0 && true ? JSON.stringify(results.cves) : 'No results available'}
-
-
- {/* Licenses */}
-
-
Licenses
-
- LICENSES: {results ? results.license : 'No results available'}
-
-
-
DEPENDENCY LICENSES:
-
- Apache-2.0 OR MIT (116)
- MIT (27)
- MIT OR Uniclicense (7)
-
-
-
- {/* Dependencies */}
-
-
Dependencies
-
- Direct: {results ? JSON.stringify(results.dependencies.direct) : 'No cves detected.'}
-
-
- Indirect: {results ? JSON.stringify(results.dependencies.indirect) : 'No results available'}
-
-
-
View all dependencies
-
-
- {/* Dependents */}
-
-
Dependents
-
- Direct: {results ? JSON.stringify(results.dependents.direct) : 'No results available'}
-
-
- Indirect: {results ? JSON.stringify(results.dependents.indirect) : 'No results available'}
-
-
-
View all dependents
-
-
-
-
- {/* 新增的块: doc_url 和 github_url */}
-
-
-
Documentation & GitHub Links
-
-
-
-
- {/* OpenSSF scorecard */}
-
-
OpenSSF scorecard
-
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.
-
View information about checks and how to fix failures.
-
-
8.3/10
-
Scorecard as of November 11, 2024.
-
-
-
Code-Review 10/10
-
Maintained 10/10
-
CI/Best-Practices 0/10
-
License 10/10
-
Dangerous-Workflow 10/10
-
Security-Policy 10/10
-
Token-Permissions 10/10
-
Binary-Artifacts 10/10
-
Pinned-Dependencies 0/10
-
-
-
-
-
- );
-};
-
-export default CratePage;
\ No newline at end of file
diff --git a/app/homepage/[nsfront]/[nsbehind]/layout.tsx b/app/homepage/[nsfront]/[nsbehind]/layout.tsx
deleted file mode 100644
index 4b5052a..0000000
--- a/app/homepage/[nsfront]/[nsbehind]/layout.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import '@/app/ui/global.css';
-import { HeaderProvider } from '../../../context/CrateContext';
-import Header from '@/components/HeaderWithSearch';
-export const metadata = {
- title: 'cratespro',
- description: 'Generated by Next.js',
-}
-
-export default function layout({
- children,
-}: {
- children: React.ReactNode
-}) {
- return (
-
-
-
-
- {children}
-
-
-
- )
-}
diff --git a/app/homepage/layout.tsx b/app/homepage/layout.tsx
deleted file mode 100644
index d80a618..0000000
--- a/app/homepage/layout.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import '@/app/ui/global.css';
-import { HeaderProvider } from '../context/CrateContext';
-
-export const metadata = {
- title: 'cratespro',
- description: 'Generated by Next.js',
-}
-
-export default function RootLayout({
- children,
-}: {
- children: React.ReactNode
-}) {
- return (
-
-
-
- {children}
-
-
-
- )
-}
diff --git a/app/homepage/page.tsx b/app/homepage/page.tsx
deleted file mode 100644
index 90c562a..0000000
--- a/app/homepage/page.tsx
+++ /dev/null
@@ -1,110 +0,0 @@
-'use client';
-import React, { useState } from 'react';
-import '@/app/ui/global.css';
-import Link from 'next/link';
-import VulnerabilityList from '@/components/CveList';
-import { message } from 'antd';
-
-const HomePage: React.FC = () => {
- const [searchQuery, setSearchQuery] = useState('');
- const [messageApi, contextHolder] = message.useMessage();//antd-message的hooks调用
- const handleKeyPress = (e: { key: string; }) => {
- // 检查是否按下了回车键
- if (e.key === 'Enter') {
- // 如果是回车键,执行搜索
- performSearch();
- }
- };
-
- const performSearch = () => {
- if (!searchQuery || searchQuery.trim() === '') {
-
- messageApi.warning('请输入搜索内容');
- //alert("请输入搜索内容"); // 可选:提示用户输入内容
- }
- if (searchQuery.trim()) {
- // 使用 Link 跳转到搜索页面
- window.location.href = `/homepage/search?crate_name=${searchQuery}`;
- }
- };
-
-
-
- return (
- //绿色渐变
- <>
- {contextHolder}
- < div className=" min-h-screen bg-gray-900 text-white" >
-
-
- open/source/insights
-
-
-
-
-
-
- {/* 搜索部分 */}
-
-
Understand your dependencies
-
Your software and your users rely not only on the code you write, but also on the code your code depends on, the code that code depends on, and so on.
-
- setSearchQuery(e.target.value)} // 更新搜索内容
- onKeyDown={handleKeyPress}
- />
- {/* */}
-
- Search
- {/* */}
-
-
-
-
- {/* 分割线部分 */}
-
-
-
-
-
- {/* 一些介绍 */}
-
-
-
New features in the deps.dev API
-
The deps.dev API, which provides free access to the data that powers this website, now has experimental batch and pull support, as well as a new version that comes with a stability guarantee and deprecation policy.
-
Learn more about the new features on our blog, or get started with the API documentation, and code examples.
-
-
-
-
Seeing the big picture can be difficult—but it shouldn't be
-
The Open Source Insights page for each package shows the full dependency graph and updates it every day. The information provided can help you make informed decisions about using, building, and maintaining your software.
-
With Open Source Insights, you can actually see the dependency graph for a package, then isolate the paths to a particular dependency. Or see whether a vulnerability in a dependency might affect your code. Or compare two versions of a package to see how the dependencies have changed in a new release.
-
-
-
-
How it works
-
The service repeatedly examines sites such as github.com, npmjs.com, and pkg.go.dev to find up-to-date information about open source software packages. Using that information, it builds for each package the full dependency graph from scratch—not just from package lock files—connecting it to the packages it depends on and to those that depend on it. This transitive dependency graph allows problems in any package to be made visible to the owners and users of any software they affect.
-
-
-
- >
- );
-}
-
-export default HomePage;
diff --git a/app/homepage/search/page.tsx b/app/homepage/search/page.tsx
deleted file mode 100644
index 0696f43..0000000
--- a/app/homepage/search/page.tsx
+++ /dev/null
@@ -1,132 +0,0 @@
-"use client";
-import { useEffect, useState, Suspense } from 'react';
-import { useSearchParams } from 'next/navigation';
-import Link from 'next/link';
-import NewHeader from '@/components/NewHeader';
-import { searchResult } from '@/app/lib/all_interface';
-
-const Search = () => {
- const [results, setResults] = useState