diff --git a/README.md b/README.md index b07cca4..50a354e 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@ Fast badge generating service. ``` https://badgen.now.sh/badge/:subject/:status/:color - ──┬── ───┬─── ───┬── ──┬── - │ │ │ └ RGB / Color Name - │ TEXT TEXT + ──┬── ───┬─── ──┬─── ──┬── + │ │ │ └ RGB / Color Name + │ TEXT TEXT ( optional ) │ badge - Default badge generator list - Auto replace ',' with ' | ' in {status} diff --git a/assets/css/style.scss b/assets/css/style.scss deleted file mode 100644 index 57993ba..0000000 --- a/assets/css/style.scss +++ /dev/null @@ -1,47 +0,0 @@ ---- ---- - -@import "{{ site.theme }}"; - -.container-lg { - max-width: 46rem; -} - -.markdown-body { - font-family: Merriweather,-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; - line-height: 1.8em; - color: #444; - - h1:not([id]) { - font-size: 1rem; - padding-top: 4px; - line-height: 1.4rem; - text-align: center; - position: absolute; - width: 100vw; - left: 0; - top: 0; - } - - h1, h2, h3, h4, h5, h6 { - margin: 2em 0; - } - - p { - text-align: justify; - font-weight: 300; - } - - blockquote { - margin-left: 2em; - } -} - -/* latin */ -@font-face { - font-family: 'Merriweather'; - font-style: normal; - font-weight: 300; - src: local('Merriweather Light'), local('Merriweather-Light'), url(data:font/woff2;base64,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) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} diff --git a/service.js b/service.js index efe7f69..f2c11f6 100644 --- a/service.js +++ b/service.js @@ -9,19 +9,15 @@ const LRU = require('lru-cache') const cache = new LRU({ max: 1000 }) function serveBadge (req, res, params) { + const result = cache.get(req.url) || badgen(params) res.writeHead(200, { 'Content-Type': 'image/svg+xml;charset=utf-8', - 'Cache-Control': 'public, max-age=60' + 'Cache-Control': 'public, max-age=360' }) + res.end(result) - const cached = cache.get(req.url) - if (cached) { - res.end(cached) - } else { - const created = badgen(params) - cache.set(req.url, created) - res.end(created) - } + // Cache if not + cache.has(req.url) || cache.set(req.url, result) } function serveListBadge (req, res, params) { @@ -38,6 +34,11 @@ function cleanCache (req, res) { res.end(`Cleaned ${count}\n${keys}`) } +function listCache (req, res) { + res.writeHead(200) + res.end(`Total ${cache.length}\n${cache.keys().join('\n')}`) +} + function serveMarkdown (file) { let content = fs.readFileSync(file, 'utf-8') r2.post('https://md.now.sh', { @@ -46,9 +47,9 @@ function serveMarkdown (file) { title: 'Badgen - fast badge generator', linkCSS: 'https://unpkg.com/github-markdown-css', inlineCSS: ` - body { width: 760px; margin: 0 auto; font: 16px/1.8em Merriweather, sans-serif } - h1, h2, h3, h4, h5 { margin: 1.8em 0 } - h1 { font-size: 3rem; text-align: center; margin-bottom: 1em } + body { max-width: 760px; padding: 0 1rem; margin: 0 auto; font: 16px Merriweather, sans-serif } + h1, h2, h3, h4, h5 { margin: 1.6em 0 } + h1 { font-size: 3rem; text-align: center; margin-bottom: 0.6em } h1 + p { text-align: center; color: #AAA } thead { display: none } td { line-height: 18px } @@ -76,7 +77,20 @@ router.get('/list/:subject/:status', serveListBadge) router.get('/list/:subject/:status/:color', serveListBadge) router.get('/', serveMarkdown('README.md')) router.get('/clean-cache', cleanCache) +router.get('/list-cache', listCache) +router.all('/*', (req, res) => { + res.statusCode = 404 + res.end() +}) -const handler = cors((req, res) => router.lookup(req, res)) +const handler = cors((req, res) => { + try { + router.lookup(req, res) + } catch (ex) { + console.error(ex) + res.statusCode = 500 + res.end() + } +}) const server = http.createServer(handler) server.listen(3000)