Re-organize package URL parsing

This commit is contained in:
MICHAEL JACKSON 2017-08-19 11:44:01 -07:00
parent 17f6a6bbe9
commit 066729f17c
7 changed files with 29 additions and 31 deletions

View File

@ -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) {

View File

@ -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

View File

@ -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}`)
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,4 +1,4 @@
const parsePackageURL = require('./PackageURL').parse
const parsePackageURL = require('./parsePackageURL')
describe('parsePackageURL', () => {
it('parses plain packages', () => {