16 changed files with 89 additions and 71 deletions
@ -1,4 +0,0 @@
|
||||
// TODO: Mock out the registry so tests don't actually hit
|
||||
// the real registry so they don't take so long. Then we can
|
||||
// remove this.
|
||||
jest.setTimeout(10000); |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,33 @@
|
||||
import fs from 'fs'; |
||||
import path from 'path'; |
||||
|
||||
function getPackageInfo(packageName) { |
||||
const file = path.resolve(__dirname, `./metadata/${packageName}.json`); |
||||
|
||||
try { |
||||
return JSON.parse(fs.readFileSync(file, 'utf-8')); |
||||
} catch (error) { |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
export function getVersionsAndTags(packageName) { |
||||
const info = getPackageInfo(packageName); |
||||
return info |
||||
? { versions: Object.keys(info.versions), tags: info['dist-tags'] } |
||||
: []; |
||||
} |
||||
|
||||
export function getPackageConfig(packageName, version) { |
||||
const info = getPackageInfo(packageName); |
||||
return info ? info.versions[version] : null; |
||||
} |
||||
|
||||
export function getPackage(packageName, version) { |
||||
const file = path.resolve( |
||||
__dirname, |
||||
`./packages/${packageName}-${version}.tgz` |
||||
); |
||||
|
||||
return fs.existsSync(file) ? fs.createReadStream(file) : null; |
||||
} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -10,7 +10,7 @@ describe('A request for a JavaScript file', () => {
|
||||
|
||||
it('returns 200', done => { |
||||
request(server) |
||||
.get('/[email protected]6/index.js') |
||||
.get('/[email protected]0/index.js') |
||||
.end((err, res) => { |
||||
expect(res.statusCode).toBe(200); |
||||
expect(res.headers['content-type']).toMatch( |
||||
|
@ -10,7 +10,7 @@ describe('A request for metadata', () => {
|
||||
|
||||
it('returns 200', done => { |
||||
request(server) |
||||
.get('/[email protected]6/?meta') |
||||
.get('/[email protected]0/?meta') |
||||
.end((err, res) => { |
||||
expect(res.statusCode).toBe(200); |
||||
expect(res.headers['content-type']).toMatch(/\bapplication\/json\b/); |
||||
|
@ -1,11 +1,12 @@
|
||||
import { renderToString, renderToStaticMarkup } from 'react-dom/server'; |
||||
import semver from 'semver'; |
||||
|
||||
import BrowseApp from '../client/browse/App.js'; |
||||
import MainTemplate from '../templates/MainTemplate.js'; |
||||
import asyncHandler from '../utils/asyncHandler.js'; |
||||
import getScripts from '../utils/getScripts.js'; |
||||
import { createElement, createHTML } from '../utils/markup.js'; |
||||
import { getAvailableVersions } from '../utils/npm.js'; |
||||
import { getVersionsAndTags } from '../utils/npm.js'; |
||||
|
||||
const doctype = '<!DOCTYPE html>'; |
||||
const globalURLs = |
||||
@ -21,6 +22,15 @@ const globalURLs =
|
||||
'react-dom': '/[email protected]/umd/react-dom.development.js' |
||||
}; |
||||
|
||||
function byVersion(a, b) { |
||||
return semver.lt(a, b) ? -1 : semver.gt(a, b) ? 1 : 0; |
||||
} |
||||
|
||||
async function getAvailableVersions(packageName) { |
||||
const versionsAndTags = await getVersionsAndTags(packageName); |
||||
return versionsAndTags ? versionsAndTags.versions.sort(byVersion) : []; |
||||
} |
||||
|
||||
async function serveBrowsePage(req, res) { |
||||
const availableVersions = await getAvailableVersions(req.packageName); |
||||
const data = { |
||||
|
Loading…
Reference in new issue