kopia lustrzana https://github.com/badgen/badgen.net
				
				
				
			
							rodzic
							
								
									9e3fc91ba5
								
							
						
					
					
						commit
						9ee8d0214b
					
				| 
						 | 
				
			
			@ -4,6 +4,7 @@ import matchRoute from 'my-way'
 | 
			
		|||
 | 
			
		||||
import { serveBadgeNext } from './serve-badge-next'
 | 
			
		||||
import serveDoc from './serve-doc-next'
 | 
			
		||||
import fetchIcon from './fetch-icon'
 | 
			
		||||
import sentry from './sentry'
 | 
			
		||||
 | 
			
		||||
import type { NextApiRequest, NextApiResponse } from 'next'
 | 
			
		||||
| 
						 | 
				
			
			@ -19,7 +20,7 @@ export interface BadgenServeConfig {
 | 
			
		|||
    help?: string;
 | 
			
		||||
    examples: { [url: string]: string };
 | 
			
		||||
    handlers: { [pattern: string]: BadgenHandler };
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function createBadgenHandler (badgenServerConfig: BadgenServeConfig) {
 | 
			
		||||
  const { handlers, title, help, examples } = badgenServerConfig
 | 
			
		||||
| 
						 | 
				
			
			@ -35,6 +36,12 @@ export function createBadgenHandler (badgenServerConfig: BadgenServeConfig) {
 | 
			
		|||
      return serveDoc(badgenServerConfig)(req, res)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Fetch external icon early, before invoking badgen handler
 | 
			
		||||
    let externalIconPromise: Promise<string | undefined> = Promise.resolve(undefined)
 | 
			
		||||
    if (req.query.icon?.toString().startsWith('https://')) {
 | 
			
		||||
      externalIconPromise = fetchIcon(req.query.icon.toString())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Find matched badgen handler
 | 
			
		||||
    let matchedArgs: PathArgs | null = null
 | 
			
		||||
    const matchedScheme = Object.keys(handlers).find(scheme => {
 | 
			
		||||
| 
						 | 
				
			
			@ -56,6 +63,14 @@ export function createBadgenHandler (badgenServerConfig: BadgenServeConfig) {
 | 
			
		|||
      return
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Apply external icon if available
 | 
			
		||||
    const externalIcon = await externalIconPromise
 | 
			
		||||
    if (externalIcon) {
 | 
			
		||||
      req.query.icon = externalIcon
 | 
			
		||||
    } else if (req.query.icon === '') {
 | 
			
		||||
      req.query.icon = badgenResponse.subject
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    serveBadgeNext(req, res, { params: badgenResponse })
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
import got from 'got'
 | 
			
		||||
 | 
			
		||||
export default async function (iconUrl) {
 | 
			
		||||
export default async function (iconUrl: string) {
 | 
			
		||||
  return got(iconUrl).then(res => {
 | 
			
		||||
    const type = res.headers['content-type']
 | 
			
		||||
    if (!type!.startsWith('image')) { return }
 | 
			
		||||
| 
						 | 
				
			
			@ -8,5 +8,5 @@ export default async function (iconUrl) {
 | 
			
		|||
    const base64 = Buffer.from(res.body).toString('base64')
 | 
			
		||||
    const encoded = `data:${type};base64,${base64}`
 | 
			
		||||
    return encoded
 | 
			
		||||
  }).catch(err => undefined)
 | 
			
		||||
  }).catch(() => undefined)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue