From 44a9a2f1dfcf9415907f1d7e18e8fda9dca63fcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dario=20Vladovi=C4=87?= Date: Mon, 15 Feb 2021 04:32:23 +0100 Subject: [PATCH] refactor: style tweaks (#499) * style: use owner/repo instead of user/repo * feat(maven): support `metadata-url` shorthand * style(badgesize): use `file-url` to mark an external URL * style(https): rename `path` to `pathname` Co-authored-by: Amio Jin --- api/badgesize.ts | 37 ++++++++++++++++++++----------------- api/david.ts | 6 +++--- api/https.ts | 6 +++--- api/maven.ts | 8 +++++--- api/snyk.ts | 10 +++++++--- api/travis.ts | 6 +++--- 6 files changed, 41 insertions(+), 32 deletions(-) diff --git a/api/badgesize.ts b/api/badgesize.ts index fab7d7d..40de40d 100644 --- a/api/badgesize.ts +++ b/api/badgesize.ts @@ -7,29 +7,32 @@ export default createBadgenHandler({ '/badgesize/normal/amio/emoji.json/master/emoji-compact.json': 'normal size', '/badgesize/brotli/amio/emoji.json/master/emoji-compact.json': 'brotli size', '/badgesize/gzip/amio/emoji.json/master/emoji-compact.json': 'gzip size', - '/badgesize/normal/https/unpkg.com/snarkdown/dist/snarkdown.js': 'arbitrary url', + '/badgesize/normal/file-url/https/unpkg.com/snarkdown/dist/snarkdown.js': 'arbitrary url', + '/badgesize/normal/file-url/unpkg.com/snarkdown/dist/snarkdown.js': 'arbitrary url', }, handlers: { - '/badgesize/:topic/:path+': handler + '/badgesize/:topic/file-url/:protocol/:hostname/:pathname+': urlHandler, + '/badgesize/:topic/file-url/:hostname/:pathname+': urlHandler, + '/badgesize/:topic/:protocol/:hostname/:pathname+': urlHandler, + '/badgesize/:topic/:owner/:repo/:path+': githubHandler } }) -async function handler ({ topic, path }: PathArgs) { - if (path.startsWith('http/')) { - path = path.slice(0, 4) + ':/' + path.slice(4) - } else if (path.startsWith('https/')) { - path = path.slice(0, 5) + ':/' + path.slice(5) - } else if (path.startsWith('http:/')) { - path = path.slice(0, 5) + '/' + path.slice(5) - } else if (path.startsWith('https:/')) { - path = path.slice(0, 6) + '/' + path.slice(6) - } +function githubHandler ({ topic, owner, repo, path }: PathArgs) { + path = [owner, repo, path].join('/') + return badgesize({ path, topic }) +} + +function urlHandler ({ topic, protocol = 'https:', hostname, pathname }: PathArgs) { + const url = protocol.replace(/:?$/, `://${hostname}/${pathname}`) + return badgesize({ path: url, topic }) +} + +async function badgesize ({ path, topic }) { const endpoint = `https://img.badgesize.io/${path}.json` - const { prettySize, color } = await got(endpoint, { - searchParams: { - compression: topic === 'normal' ? '' : topic - } - }).json() + const searchParams = new URLSearchParams() + if (topic !== 'normal') searchParams.set('topic', topic) + const { prettySize, color } = await got(endpoint, { searchParams }).json() return { subject: topic === 'normal' ? 'size' : `${topic} size`, diff --git a/api/david.ts b/api/david.ts index c7911f3..0f04cee 100644 --- a/api/david.ts +++ b/api/david.ts @@ -11,7 +11,7 @@ export default createBadgenHandler({ '/david/dep/babel/babel/packages/babel-cli': 'dependencies (sub path)', }, handlers: { - '/david/:topic/:user/:repo/:path*': handler + '/david/:topic/:owner/:repo/:path*': handler } }) @@ -23,7 +23,7 @@ const statusInfo = { none: ['none', 'green'] } -async function handler ({ topic, user, repo, path = '' }: PathArgs) { +async function handler ({ topic, owner, repo, path = '' }: PathArgs) { const prefix = { dep: '', dev: 'dev-', @@ -31,7 +31,7 @@ async function handler ({ topic, user, repo, path = '' }: PathArgs) { optional: 'optional-' }[topic] - const endpoint = `https://david-dm.org/${user}/${repo}/${prefix}info.json` + const endpoint = `https://david-dm.org/${owner}/${repo}/${prefix}info.json` const { status } = await got(endpoint, { searchParams: { path } }).json() diff --git a/api/https.ts b/api/https.ts index 3daa141..49c9a71 100644 --- a/api/https.ts +++ b/api/https.ts @@ -54,11 +54,11 @@ export default createBadgenHandler({ '/https/cal-badge-icd0onfvrxx6.runkit.sh/America/Los_Angeles': 'https endpoint (with path args)', }, handlers: { - '/https/:hostname/:path*': handler + '/https/:hostname/:pathname*': handler } }) -async function handler ({ hostname, path }: PathArgs) { - const endpoint = `https://${hostname}/${path || ''}` +async function handler ({ hostname, pathname }: PathArgs) { + const endpoint = `https://${hostname}/${pathname || ''}` return await got(endpoint).json() } diff --git a/api/maven.ts b/api/maven.ts index f0edcfe..2318ac9 100644 --- a/api/maven.ts +++ b/api/maven.ts @@ -11,10 +11,12 @@ export default createBadgenHandler({ '/maven/v/maven-central/com.google.code.gson/gson': 'version (maven-central)', '/maven/v/jcenter/com.squareup.okhttp3/okhttp': 'version (jcenter)', '/maven/v/metadata-url/https/repo1.maven.org/maven2/com/google/code/gson/gson/maven-metadata.xml': 'version (maven metadata url)', + '/maven/v/metadata-url/repo1.maven.org/maven2/com/google/code/gson/gson/maven-metadata.xml': 'version (maven metadata url)', }, handlers: { '/maven/v/:repo/:group/:artifact': mavenRepoHandler, - '/maven/v/metadata-url/:path+': mavenUrlHandler, + '/maven/v/metadata-url/:protocol/:hostname/:pathname+': mavenUrlHandler, + '/maven/v/metadata-url/:hostname/:pathname+': mavenUrlHandler, } }) @@ -36,8 +38,8 @@ async function mavenRepoHandler ({ repo, group, artifact }: PathArgs) { } } -async function mavenUrlHandler ({ path }: PathArgs) { - const url = path.replace(/^(https?):?\//, (_, scheme) => `${scheme}://`) +async function mavenUrlHandler ({ protocol = 'https:', hostname, pathname }: PathArgs) { + const url = protocol.replace(/:?$/, `://${hostname}/${pathname}`) const xml = await got(url).text() const version = xml.match(/([^<]+)<\//i)?.[1].trim() ?? 'unknown' return { diff --git a/api/snyk.ts b/api/snyk.ts index 39c13e9..41fcd3d 100644 --- a/api/snyk.ts +++ b/api/snyk.ts @@ -10,17 +10,21 @@ export default createBadgenHandler({ '/snyk/rollup/plugins/master/packages%2Falias%2Fpackage.json': 'vulnerability scan (custom path)' }, handlers: { - '/snyk/:user/:repo/:branch?/:targetFile?': handler + '/snyk/:owner/:repo/:branch?/:targetFile?': handler } }) -async function handler ({ user, repo, branch, targetFile }: PathArgs) { - const path = [user, repo, branch].filter(Boolean).join('/') +async function handler ({ owner, repo, branch, targetFile }: PathArgs) { + const path = [owner, repo, branch].filter(Boolean).join('/') + const badgeUrl = `https://snyk.io/test/github/${path}/badge.svg` + const searchParams = new URLSearchParams() if (targetFile) searchParams.set('targetFile', targetFile) + const resp = await got(badgeUrl, { searchParams, timeout: 3500 }) const params = isBadge(resp) && parseBadge(resp.body) + return params || { subject: 'snyk', status: 'unknown', diff --git a/api/travis.ts b/api/travis.ts index 9343d3b..eb00b98 100644 --- a/api/travis.ts +++ b/api/travis.ts @@ -8,12 +8,12 @@ export default createBadgenHandler({ '/travis/babel/babel/6.x': 'build (branch)', }, handlers: { - '/travis/:user/:repo/:branch?': handler + '/travis/:owner/:repo/:branch?': handler } }) -async function handler ({ user, repo, branch }: PathArgs) { - const badgePath = `${user}/${repo}.svg` +async function handler ({ owner, repo, branch }: PathArgs) { + const badgePath = `${owner}/${repo}.svg` const searchParams = new URLSearchParams() if (branch) searchParams.set('branch', branch) const [svg1, svg2] = await Promise.all([