From 08b2a2b52dbd09ba640dccd8f202e604715fee95 Mon Sep 17 00:00:00 2001 From: 186526 Date: Thu, 19 May 2022 10:05:59 +0800 Subject: [PATCH] Update --- modules/actions/serveDirectoryMetadata.js | 1 + modules/createServer.js | 39 ++++++++++++++++++++-- public/favicon.ico | Bin 370070 -> 67646 bytes 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/modules/actions/serveDirectoryMetadata.js b/modules/actions/serveDirectoryMetadata.js index 43af0f3..9f99b46 100644 --- a/modules/actions/serveDirectoryMetadata.js +++ b/modules/actions/serveDirectoryMetadata.js @@ -104,6 +104,7 @@ export async function getMetadataMoreEasier(req,res) { const filename = req.filename.slice(0, -1) || '/'; const entries = await findMatchingEntries(stream, filename); + const metadata = getMetadata(entries[filename], entries); return metadata; diff --git a/modules/createServer.js b/modules/createServer.js index 52ba170..cec99ae 100644 --- a/modules/createServer.js +++ b/modules/createServer.js @@ -2,6 +2,7 @@ import cors from 'cors'; import express from 'express'; import ejs from 'ejs'; import os from "os"; +import semver from 'semver'; import serveDirectoryMetadata, { getMetadataMoreEasier } from './actions/serveDirectoryMetadata.js'; import serveFileMetadata from './actions/serveFileMetadata.js'; @@ -18,13 +19,30 @@ import validatePackagePathname from './middleware/validatePackagePathname.js'; import validatePackageName from './middleware/validatePackageName.js'; import validatePackageVersion from './middleware/validatePackageVersion.js'; +import { getVersionsAndTags } from './utils/npm.js'; + + const renderFolderBrowser = async (req, res, next) => { + function byVersion(a, b) { + return semver.lt(a, b) ? -1 : semver.gt(a, b) ? 1 : 0; + } + + async function getAvailableVersions(packageName, log) { + const versionsAndTags = await getVersionsAndTags(packageName, log); + return versionsAndTags ? versionsAndTags.versions.sort(byVersion) : []; + } + res.set({ 'Cache-Control': 'public, max-age=14400', // 4 hours 'Cache-Tag': 'browse' }); + const availableVersions = await getAvailableVersions( + req.packageName, + req.log + ); + const html = await ejs.render(`<%if(path!=="/"){path+="/"}%> @@ -75,6 +93,9 @@ const renderFolderBrowser = async (req, res, next) => { +

Index of <%= path %>


@@ -121,11 +142,24 @@ const renderFolderBrowser = async (req, res, next) => {

+
<%= package %>
-
186526 NPM Edge Network #d9e588d
+
186526 UNPKG Network @sg-singapore-03 #<%= ((r=32)=>{ + let s = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678" + , n = s.length + , t = ""; + for (let o = 0; o < r; o++) + t += s.charAt(Math.floor(Math.random() * n)); + return t + })(8) %>
-`, Object.assign({ package: `${req.packageName}@${req.packageVersion}` }, await getMetadataMoreEasier(req, res)), { async: true }); +`, Object.assign({ package: `${req.packageName}@${req.packageVersion}`, packageName: req.packageName, version: req.packageVersion, availableVersions: await getAvailableVersions(req.packageName, req.log) }, await getMetadataMoreEasier(req, res)), { async: true }); res.send(html); }; @@ -161,6 +195,7 @@ export default function createServer() { app.use(redirectLegacyURLs); app.all('/', (req, res) => { + res.setHeader('Content-Type',"text/plain; charset=utf-8") res.send("To infinity and beyond!"); }) diff --git a/public/favicon.ico b/public/favicon.ico index 5686380482f30856507ef7bed435fae53f0e304d..bcce2e2436f9701366bd2c46f4693ca0176aaf29 100644 GIT binary patch literal 67646 zcmeI)!AcuZ6vpupLAp^$3thOfw1T+lW0WG~fdVZlZlr}kvn$QMri;9TPvF{Jc5YMA zW@1d*bA-rvv2f-vp)>dXN3JGeZswlfcZW&LOtNf4e!AUEe(z-m&o;7`S(Y70lZW)d z`^WX>Q_CL~1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009Ip;SyC-RX^yjmj(Iz++yiP z{;?$KtAqS~Zn5+#lYgG)%fVo9cX@evSEu?p{`=Fg=D)kUyOebw-Y4j7S@eCve_zPo zAAu$Ro12^P_4WNc*xK6iZ@9vqF|`>UxsD-_nx*bUJ-<|KHx; z_HVetp5*VxwB)bPet3Au@!!u}+n(0^wSd`dwmd#Q&Mz)5ZtGMK`@cVpGWq+rvfiHL z@AoBtzg-MH$v=h^{WXxk-!6upVg6@lXZqT%QJ??on5B;5|0enT-#9tNjq`tuRxz$7 z`RjSV#eFA++n-|0Y8^F6_ImDjOy~cOrJfh-u!{9L#p|uKuhN=){{Igd|3_)hW6g=W z5I_I{1Q0*~fvN=LHPgPduC#9rZy#j*ud8xN;d#XCl{CF(GKTm4TEj$ZN+G){Y7{HI zW;&MaS9Ngxr*U#f_NNi%e`+j0`PC%*N7sLLI-P4d&wt*erehA~FrWVzXLgvsoa5EF z>pykO(m1|F7%6c6N6B8?LY?`TH>~`+u+3n}z%S>b`%=)%7HQzojMr z$z*c3%Deb?b92+b;R<__zaP_*zdn1b)p~U7*Lkp5EI9uA>1)x`n!gTqJRaZbF~8gG z=5n_d+3UF2|5d@al*!+>h4uF$f4?#L`|V=rN&YdU=&ynN{dO_*4D%ljhrgw+MqU4@ zW0pFK?@##r-#9tL`~%0LX_Ib~zdip!B$*fI=fGHg@~cVqM-k?Klzgxy03`qS(!NV; z^7WrOcD;V#U5V0J6#)bgKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I`Ve T0r_q!76cGL009ILNKD`_P5!Z< literal 370070 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