New "browse" UI
Also, separated out browse, ?meta, and ?module request handlers. Fixes #82
This commit is contained in:
49
modules/middleware/validateVersion.js
Normal file
49
modules/middleware/validateVersion.js
Normal file
@ -0,0 +1,49 @@
|
||||
import createPackageURL from '../utils/createPackageURL.js';
|
||||
import { getPackageConfig, resolveVersion } from '../utils/npm.js';
|
||||
|
||||
function semverRedirect(req, res, newVersion) {
|
||||
res
|
||||
.set({
|
||||
'Cache-Control': 'public, s-maxage=600, max-age=60', // 10 mins on CDN, 1 min on clients
|
||||
'Cache-Tag': 'redirect, semver-redirect'
|
||||
})
|
||||
.redirect(
|
||||
302,
|
||||
createPackageURL(req.packageName, newVersion, req.filename, req.search)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the package version/tag in the URL and make sure it's good. Also
|
||||
* fetch the package config and add it to req.packageConfig. Redirect to
|
||||
* the resolved version number if necessary.
|
||||
*/
|
||||
export default async function validateVersion(req, res, next) {
|
||||
const version = await resolveVersion(req.packageName, req.packageVersion);
|
||||
|
||||
if (!version) {
|
||||
return res
|
||||
.status(404)
|
||||
.type('text')
|
||||
.send(`Cannot find package ${req.packageSpec}`);
|
||||
}
|
||||
|
||||
if (version !== req.packageVersion) {
|
||||
return semverRedirect(req, res, version);
|
||||
}
|
||||
|
||||
req.packageConfig = await getPackageConfig(
|
||||
req.packageName,
|
||||
req.packageVersion
|
||||
);
|
||||
|
||||
if (!req.packageConfig) {
|
||||
// TODO: Log why.
|
||||
return res
|
||||
.status(500)
|
||||
.type('text')
|
||||
.send(`Cannot get config for package ${req.packageSpec}`);
|
||||
}
|
||||
|
||||
next();
|
||||
}
|
||||
Reference in New Issue
Block a user