49 lines
1.3 KiB
JavaScript
49 lines
1.3 KiB
JavaScript
import React from 'react';
|
|
import ReactDOMServer from 'react-dom/server';
|
|
import semver from 'semver';
|
|
|
|
import MainTemplate from '../client/MainTemplate';
|
|
import AutoIndexApp from '../client/autoIndex/App';
|
|
import createHTML from '../client/utils/createHTML';
|
|
import getEntryPoints from '../utils/getEntryPoints';
|
|
import renderTemplate from '../utils/renderTemplate';
|
|
|
|
function byVersion(a, b) {
|
|
return semver.lt(a, b) ? -1 : semver.gt(a, b) ? 1 : 0;
|
|
}
|
|
|
|
export default function serveAutoIndexPage(req, res) {
|
|
const data = {
|
|
packageName: req.packageName,
|
|
packageVersion: req.packageVersion,
|
|
availableVersions: Object.keys(req.packageInfo.versions).sort(byVersion),
|
|
filename: req.filename,
|
|
entry: req.entry,
|
|
entries: req.entries
|
|
};
|
|
|
|
const content = createHTML(
|
|
ReactDOMServer.renderToString(React.createElement(AutoIndexApp, data))
|
|
);
|
|
|
|
const entryPoints = getEntryPoints('autoIndex', {
|
|
es: 'module',
|
|
system: 'nomodule'
|
|
});
|
|
|
|
const html = renderTemplate(MainTemplate, {
|
|
title: `UNPKG - ${req.packageName}`,
|
|
description: `The CDN for ${req.packageName}`,
|
|
data,
|
|
content,
|
|
entryPoints
|
|
});
|
|
|
|
res
|
|
.set({
|
|
'Cache-Control': 'no-cache, no-store, must-revalidate', // do not cache
|
|
'Cache-Tag': 'auto-index'
|
|
})
|
|
.send(html);
|
|
}
|