import http from 'http' import matchRoute from 'my-way' import { serveMarked } from 'serve-marked' import serve404 from './serve-404' import { BadgenServeConfig } from './create-badgen-handler-next' const { GA_MEASUREMENT_ID = 'G-PD7EFJDYFV' } = process.env export default function serveDoc (conf: BadgenServeConfig): http.RequestListener { return (req, res) => { const helpMarkdown = generateHelpMarkdown(conf) if (helpMarkdown) { res.setHeader('Cache-Control', 'public, max-age=86400, s-maxage=604800, stale-while-revalidate=86400') serveMarked(helpMarkdown, { title: `${conf.title} badge | Badgen`, inlineCSS, beforeHeadEnd: ` `, beforeBodyEnd: helpFooter, })(req, res) return } serve404(req, res) } } function generateHelpMarkdown ({ title, help, examples, handlers }: BadgenServeConfig): string { const mainTitle = `# ${title} Badge` const customHelp = help || '' const exampleTitle = `## Examples` const routes = Object.keys(handlers) const categorizedExamples = Object.entries(examples).reduce((accu, [url, desc]) => { const scheme = routes.find(route => matchRoute(route, url)) if (scheme) { accu[scheme] ? accu[scheme].push({ url, desc }) : accu[scheme] = [{ url, desc }] } return accu }, {}) const examplesSection = Object.entries(categorizedExamples).reduce((accu, [header, list]) => { const hash = hashify(header) const h4 = `
${header.replace(/