Re-organize package URL parsing
This commit is contained in:
parent
17f6a6bbe9
commit
066729f17c
|
@ -2,7 +2,7 @@ const parseURL = require('url').parse
|
|||
const startOfDay = require('date-fns/start_of_day')
|
||||
const addDays = require('date-fns/add_days')
|
||||
const validateNPMPackageName = require('validate-npm-package-name')
|
||||
const PackageURL = require('./PackageURL')
|
||||
const parsePackageURL = require('./utils/parsePackageURL')
|
||||
const cf = require('./CloudflareAPI')
|
||||
const db = require('./RedisClient')
|
||||
const {
|
||||
|
@ -66,7 +66,7 @@ function computeCounters(stream) {
|
|||
if (edgeResponse.status === 200) {
|
||||
// Q: How many requests do we serve for a package per day?
|
||||
// Q: How many bytes do we serve for a package per day?
|
||||
const url = PackageURL.parse(parseURL(clientRequest.uri).pathname)
|
||||
const url = parsePackageURL(parseURL(clientRequest.uri).pathname)
|
||||
const packageName = url && url.packageName
|
||||
|
||||
if (packageName && validateNPMPackageName(packageName).errors == null) {
|
||||
|
|
|
@ -7,7 +7,7 @@ const morgan = require('morgan')
|
|||
const { fetchStats } = require('./cloudflare')
|
||||
|
||||
const checkBlacklist = require('./middleware/checkBlacklist')
|
||||
const parsePackageURL = require('./middleware/parsePackageURL')
|
||||
const packageURL = require('./middleware/packageURL')
|
||||
const fetchFile = require('./middleware/fetchFile')
|
||||
const serveFile = require('./middleware/serveFile')
|
||||
|
||||
|
@ -75,7 +75,7 @@ function createApp() {
|
|||
}))
|
||||
|
||||
app.use('/',
|
||||
parsePackageURL,
|
||||
packageURL,
|
||||
checkBlacklist(PackageBlacklist),
|
||||
fetchFile,
|
||||
serveFile
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const semver = require('semver')
|
||||
const createPackageURL = require('../utils/createPackageURL')
|
||||
const getPackage = require('./utils/getPackage')
|
||||
const getPackageInfo = require('./utils/getPackageInfo')
|
||||
const PackageURL = require('../PackageURL')
|
||||
|
||||
const FindExtensions = [ '', '.js', '.json' ]
|
||||
|
||||
|
@ -137,7 +137,7 @@ function fetchFile(req, res, next) {
|
|||
res.set({
|
||||
'Cache-Control': 'public, max-age=60',
|
||||
'Cache-Tag': 'redirect'
|
||||
}).redirect(PackageURL.create(req.packageName, tags[req.packageVersion], req.filename, req.search))
|
||||
}).redirect(createPackageURL(req.packageName, tags[req.packageVersion], req.filename, req.search))
|
||||
} else {
|
||||
const maxVersion = semver.maxSatisfying(Object.keys(versions), req.packageVersion)
|
||||
|
||||
|
@ -146,7 +146,7 @@ function fetchFile(req, res, next) {
|
|||
res.set({
|
||||
'Cache-Control': 'public, max-age=60',
|
||||
'Cache-Tag': 'redirect'
|
||||
}).redirect(PackageURL.create(req.packageName, maxVersion, req.filename, req.search))
|
||||
}).redirect(createPackageURL(req.packageName, maxVersion, req.filename, req.search))
|
||||
} else {
|
||||
res.status(404).type('text').send(`Cannot find package ${req.packageSpec}`)
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const validateNPMPackageName = require('validate-npm-package-name')
|
||||
const PackageURL = require('../PackageURL')
|
||||
const parsePackageURL = require('../utils/parsePackageURL')
|
||||
|
||||
const KnownQueryParams = {
|
||||
expand: true,
|
||||
|
@ -45,7 +45,7 @@ function createSearch(query) {
|
|||
/**
|
||||
* Parse and validate the URL.
|
||||
*/
|
||||
function parsePackageURL(req, res, next) {
|
||||
function packageURL(req, res, next) {
|
||||
// Redirect /_meta/pkg to /pkg?meta.
|
||||
if (req.path.match(/^\/_meta\//)) {
|
||||
delete req.query.json
|
||||
|
@ -53,7 +53,7 @@ function parsePackageURL(req, res, next) {
|
|||
return res.redirect(req.path.substr(6) + createSearch(req.query))
|
||||
}
|
||||
|
||||
const url = PackageURL.parse(req.url)
|
||||
const url = parsePackageURL(req.url)
|
||||
|
||||
// Do not allow invalid URLs.
|
||||
if (url == null)
|
||||
|
@ -82,4 +82,4 @@ function parsePackageURL(req, res, next) {
|
|||
next()
|
||||
}
|
||||
|
||||
module.exports = parsePackageURL
|
||||
module.exports = packageURL
|
|
@ -0,0 +1,16 @@
|
|||
function createPackageURL(packageName, version, filename, search) {
|
||||
let pathname = `/${packageName}`
|
||||
|
||||
if (version != null)
|
||||
pathname += `@${version}`
|
||||
|
||||
if (filename)
|
||||
pathname += filename
|
||||
|
||||
if (search)
|
||||
pathname += search
|
||||
|
||||
return pathname
|
||||
}
|
||||
|
||||
module.exports = createPackageURL
|
|
@ -36,22 +36,4 @@ function parsePackageURL(packageURL) {
|
|||
}
|
||||
}
|
||||
|
||||
function createPackageURL(packageName, version, filename, search) {
|
||||
let pathname = `/${packageName}`
|
||||
|
||||
if (version != null)
|
||||
pathname += `@${version}`
|
||||
|
||||
if (filename)
|
||||
pathname += filename
|
||||
|
||||
if (search)
|
||||
pathname += search
|
||||
|
||||
return pathname
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
parse: parsePackageURL,
|
||||
create: createPackageURL
|
||||
}
|
||||
module.exports = parsePackageURL
|
|
@ -1,4 +1,4 @@
|
|||
const parsePackageURL = require('./PackageURL').parse
|
||||
const parsePackageURL = require('./parsePackageURL')
|
||||
|
||||
describe('parsePackageURL', () => {
|
||||
it('parses plain packages', () => {
|
Loading…
Reference in New Issue