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) => {
+