This commit is contained in:
186526 2022-05-19 10:05:59 +08:00
parent 5a65aefca9
commit 08b2a2b52d
Signed by: 186526
GPG Key ID: C7EB1E6B8CC5E51D
3 changed files with 38 additions and 2 deletions

View File

@ -104,6 +104,7 @@ export async function getMetadataMoreEasier(req,res) {
const filename = req.filename.slice(0, -1) || '/'; const filename = req.filename.slice(0, -1) || '/';
const entries = await findMatchingEntries(stream, filename); const entries = await findMatchingEntries(stream, filename);
const metadata = getMetadata(entries[filename], entries); const metadata = getMetadata(entries[filename], entries);
return metadata; return metadata;

View File

@ -2,6 +2,7 @@ import cors from 'cors';
import express from 'express'; import express from 'express';
import ejs from 'ejs'; import ejs from 'ejs';
import os from "os"; import os from "os";
import semver from 'semver';
import serveDirectoryMetadata, { getMetadataMoreEasier } from './actions/serveDirectoryMetadata.js'; import serveDirectoryMetadata, { getMetadataMoreEasier } from './actions/serveDirectoryMetadata.js';
import serveFileMetadata from './actions/serveFileMetadata.js'; import serveFileMetadata from './actions/serveFileMetadata.js';
@ -18,13 +19,30 @@ import validatePackagePathname from './middleware/validatePackagePathname.js';
import validatePackageName from './middleware/validatePackageName.js'; import validatePackageName from './middleware/validatePackageName.js';
import validatePackageVersion from './middleware/validatePackageVersion.js'; import validatePackageVersion from './middleware/validatePackageVersion.js';
import { getVersionsAndTags } from './utils/npm.js';
const renderFolderBrowser = async (req, res, next) => { 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({ res.set({
'Cache-Control': 'public, max-age=14400', // 4 hours 'Cache-Control': 'public, max-age=14400', // 4 hours
'Cache-Tag': 'browse' 'Cache-Tag': 'browse'
}); });
const availableVersions = await getAvailableVersions(
req.packageName,
req.log
);
const html = await ejs.render(`<%if(path!=="/"){path+="/"}%> const html = await ejs.render(`<%if(path!=="/"){path+="/"}%>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
@ -75,6 +93,9 @@ const renderFolderBrowser = async (req, res, next) => {
</head> </head>
<body> <body>
<div class="version-wrapper"><select id="version"><% availableVersions.forEach(it=>{ %>
<option value="<%= it %>" <%= it === version ? "selected" : "" %> ><%= packageName+"@"+it %></option>
<% })%></select></div>
<h1>Index of <%= path %></h1> <h1>Index of <%= path %></h1>
<hr /> <hr />
<table> <table>
@ -121,11 +142,24 @@ const renderFolderBrowser = async (req, res, next) => {
</tbody> </tbody>
</table> </table>
<hr /> <hr />
<script>
var s = document.getElementById('version'), v = s.value
s.onchange = function () {
window.location.href = window.location.href.replace('@' + v, '@' + s.value)
}
</script>
<address><%= package %> </address> <address><%= package %> </address>
<address>186526 NPM Edge Network #d9e588d</address> <address>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) %></address>
</body> </body>
</html>`, Object.assign({ package: `${req.packageName}@${req.packageVersion}` }, await getMetadataMoreEasier(req, res)), { async: true }); </html>`, 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); res.send(html);
}; };
@ -161,6 +195,7 @@ export default function createServer() {
app.use(redirectLegacyURLs); app.use(redirectLegacyURLs);
app.all('/', (req, res) => { app.all('/', (req, res) => {
res.setHeader('Content-Type',"text/plain; charset=utf-8")
res.send("To infinity and beyond!"); res.send("To infinity and beyond!");
}) })

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 KiB

After

Width:  |  Height:  |  Size: 66 KiB