From 997299f2716a6e044cfb4fdf28e3f9569c4c9300 Mon Sep 17 00:00:00 2001
From: Fatpandac <1779196284@qq.com>
Date: Fri, 1 Apr 2022 18:39:08 +0800
Subject: [PATCH] feat(route): npm (#9437)
---
docs/en/program-update.md | 6 +++++
docs/program-update.md | 6 +++++
lib/v2/npm/maintainer.js | 3 +++
lib/v2/npm/package.js | 45 ++++++++++++++++++++++++++++++++
lib/v2/npm/radar.js | 13 +++++++++
lib/v2/npm/router.js | 3 +++
lib/v2/npm/templates/package.art | 10 +++++++
7 files changed, 86 insertions(+)
create mode 100644 lib/v2/npm/maintainer.js
create mode 100644 lib/v2/npm/package.js
create mode 100644 lib/v2/npm/radar.js
create mode 100644 lib/v2/npm/router.js
create mode 100644 lib/v2/npm/templates/package.art
diff --git a/docs/en/program-update.md b/docs/en/program-update.md
index 88a60b886aa2c7..feb4b429dbee8d 100644
--- a/docs/en/program-update.md
+++ b/docs/en/program-update.md
@@ -269,6 +269,12 @@ Refer to [#minecraft](/en/game.html#minecraft)
见 [#nintendo](/game.html#nintendo)
+## NPM
+
+### Package
+
+
+
## Nvidia Web Driver
### Changelog
diff --git a/docs/program-update.md b/docs/program-update.md
index b3ce8e2b337884..5e796f71f32077 100644
--- a/docs/program-update.md
+++ b/docs/program-update.md
@@ -318,6 +318,12 @@ pageClass: routes
见 [#nintendo](/game.html#nintendo)
+## NPM
+
+### 包
+
+
+
## Nvidia Web Driver
### 更新日志
diff --git a/lib/v2/npm/maintainer.js b/lib/v2/npm/maintainer.js
new file mode 100644
index 00000000000000..c1ee34952e2625
--- /dev/null
+++ b/lib/v2/npm/maintainer.js
@@ -0,0 +1,3 @@
+module.exports = {
+ '/package/:name': ['Fatpandac'],
+};
diff --git a/lib/v2/npm/package.js b/lib/v2/npm/package.js
new file mode 100644
index 00000000000000..698f45fd559354
--- /dev/null
+++ b/lib/v2/npm/package.js
@@ -0,0 +1,45 @@
+const got = require('@/utils/got');
+const { art } = require('@/utils/render');
+const path = require('path');
+
+module.exports = async (ctx) => {
+ const name = ctx.params.name;
+ const packageDownloadLastMonthAPI = `https://api.npmjs.org/downloads/point/last-month/${name}`; // 按月统计
+ const packageDownloadLastWeekAPI = `https://api.npmjs.org/downloads/point/last-week/${name}`; // 按周统计
+ const packageDownloadLastDayAPI = `https://api.npmjs.org/downloads/point/last-day/${name}`; // 按天统计
+ const packageVersionAPI = `https://registry.npmjs.org/${name}`; // 包基本信息
+
+ const downloadCountLastMonthRes = await got(packageDownloadLastMonthAPI).json();
+ const downloadCountLastWeekRes = await got(packageDownloadLastWeekAPI).json();
+ const downloadCountLastDayRes = await got(packageDownloadLastDayAPI).json();
+ const packageVersionRes = await got(packageVersionAPI).json();
+
+ const packageVersion = packageVersionRes.time;
+ const packageVersionList = [];
+ for (const key in packageVersion) {
+ packageVersionList.push({
+ version: key,
+ time: packageVersion[key],
+ });
+ }
+ packageVersionList.reverse();
+
+ ctx.state.data = {
+ title: `${name} - npm`,
+ link: `https://www.npmjs.com/package/${name}`,
+ description: `${name} - npm`,
+ item: [
+ {
+ title: `${name} - npm`,
+ description: art(path.join(__dirname, 'templates/package.art'), {
+ packageDownloadCountLastMonth: downloadCountLastMonthRes.downloads,
+ packageDownloadCountLastWeek: downloadCountLastWeekRes.downloads,
+ packageDownloadCountLastDay: downloadCountLastDayRes.downloads,
+ packageVersion: packageVersionList,
+ }),
+ link: `https://www.npmjs.com/package/${name}`,
+ guid: `https://www.npmjs.com/package/${name}${packageVersion.modified}`,
+ },
+ ],
+ };
+};
diff --git a/lib/v2/npm/radar.js b/lib/v2/npm/radar.js
new file mode 100644
index 00000000000000..b02f83dbdcadf1
--- /dev/null
+++ b/lib/v2/npm/radar.js
@@ -0,0 +1,13 @@
+module.exports = {
+ 'npmjs.com': {
+ _name: 'npm',
+ '.': [
+ {
+ title: '包',
+ docs: 'https://docs.rsshub.app/program-update.html#npm',
+ source: ['/package/:name'],
+ target: '/npm/package/:name',
+ },
+ ],
+ },
+};
diff --git a/lib/v2/npm/router.js b/lib/v2/npm/router.js
new file mode 100644
index 00000000000000..89fd149fb5003d
--- /dev/null
+++ b/lib/v2/npm/router.js
@@ -0,0 +1,3 @@
+module.exports = function (router) {
+ router.get('/package/:name', require('./package'));
+};
diff --git a/lib/v2/npm/templates/package.art b/lib/v2/npm/templates/package.art
new file mode 100644
index 00000000000000..db7b75a365e739
--- /dev/null
+++ b/lib/v2/npm/templates/package.art
@@ -0,0 +1,10 @@
+
Download
+Last Day: {{packageDownloadCountLastDay}}
+Last week: {{packageDownloadCountLastWeek}}
+Last month: {{packageDownloadCountLastMonth}}
+
+Version
+{{ each packageVersion}}
+{{$value.version}}: {{$value.time}}
+{{/each}}
+