Add more tests
This commit is contained in:
@ -7,6 +7,25 @@ import { fetchPackage as fetchNpmPackage } from '../utils/npm.js';
|
||||
import getIntegrity from '../utils/getIntegrity.js';
|
||||
import getContentType from '../utils/getContentType.js';
|
||||
|
||||
function fileRedirect(req, res, entry) {
|
||||
// Redirect to the file with the extension so it's more
|
||||
// clear which file is being served.
|
||||
res
|
||||
.set({
|
||||
'Cache-Control': 'public, max-age=31536000', // 1 year
|
||||
'Cache-Tag': 'redirect, file-redirect'
|
||||
})
|
||||
.redirect(
|
||||
302,
|
||||
createPackageURL(
|
||||
req.packageName,
|
||||
req.packageVersion,
|
||||
addLeadingSlash(entry.name),
|
||||
createSearch(req.query)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
function indexRedirect(req, res, entry) {
|
||||
// Redirect to the index file so relative imports
|
||||
// resolve correctly.
|
||||
@ -104,7 +123,9 @@ function searchEntries(tarballStream, entryName, wantsIndex) {
|
||||
const chunks = [];
|
||||
|
||||
stream
|
||||
.on('data', chunk => chunks.push(chunk))
|
||||
.on('data', chunk => {
|
||||
chunks.push(chunk);
|
||||
})
|
||||
.on('end', () => {
|
||||
const content = Buffer.concat(chunks);
|
||||
|
||||
@ -170,6 +191,10 @@ export default async function findFile(req, res, next) {
|
||||
.send(`Cannot find "${req.filename}" in ${req.packageSpec}`);
|
||||
}
|
||||
|
||||
if (foundEntry.type === 'file' && foundEntry.name !== entryName) {
|
||||
return fileRedirect(req, res, foundEntry);
|
||||
}
|
||||
|
||||
// If the foundEntry is a directory and there is no trailing slash
|
||||
// on the request path, we need to redirect to some "index" file
|
||||
// inside that directory. This is so our URLs work in a similar way
|
||||
@ -177,8 +202,7 @@ export default async function findFile(req, res, next) {
|
||||
// and `lib/index.json` when `lib` is a directory.
|
||||
if (foundEntry.type === 'directory' && !wantsIndex) {
|
||||
const indexEntry =
|
||||
entries[path.join(entryName, 'index.js')] ||
|
||||
entries[path.join(entryName, 'index.json')];
|
||||
entries[`${entryName}/index.js`] || entries[`${entryName}/index.json`];
|
||||
|
||||
if (indexEntry && indexEntry.type === 'file') {
|
||||
return indexRedirect(req, res, indexEntry);
|
||||
|
||||
Reference in New Issue
Block a user