kopia lustrzana https://github.com/badgen/badgen.net
50 wiersze
1.3 KiB
TypeScript
50 wiersze
1.3 KiB
TypeScript
import got from '../libs/got'
|
|
import { basename, extname } from 'path'
|
|
import { createBadgenHandler, PathArgs } from '../libs/create-badgen-handler'
|
|
|
|
const TIDELIFT_BADGE_URL = 'https://tidelift.com/badges/package/'
|
|
|
|
const client = got.extend({ prefixUrl: TIDELIFT_BADGE_URL })
|
|
|
|
export default createBadgenHandler({
|
|
title: 'Tidelift',
|
|
examples: {
|
|
'/tidelift/npm/minimist': 'subscription',
|
|
'/tidelift/npm/got': 'subscription'
|
|
},
|
|
handlers: {
|
|
'/tidelift/:platform/:name': handler
|
|
}
|
|
})
|
|
|
|
async function handler ({ platform, name }: PathArgs) {
|
|
const resp = await client.get(`${platform}/${name}`, { followRedirect: false })
|
|
const params = parseRedirectUrl(resp.headers.location)
|
|
return params || {
|
|
subject: 'tidelift',
|
|
status: 'unknown',
|
|
color: 'grey'
|
|
}
|
|
}
|
|
|
|
function parseRedirectUrl(input?: string) {
|
|
const redirectUrl = safeURL(input)
|
|
if (!redirectUrl) return
|
|
const path = decodeURIComponent(redirectUrl.pathname)
|
|
const route = basename(path, extname(path))
|
|
const [status, color] = route.split('-').filter(Boolean)
|
|
if (!status || !color) return
|
|
return {
|
|
subject: 'tidelift',
|
|
status: status?.replace(/!$/, ''),
|
|
color
|
|
}
|
|
}
|
|
|
|
function safeURL(input?: string) {
|
|
if (!input) return
|
|
try {
|
|
return new URL(input)
|
|
} catch { /* ignore */ }
|
|
}
|