kopia lustrzana https://github.com/badgen/badgen.net
Simplify badgen-serve params
rodzic
cddc56ff27
commit
b35a002880
|
@ -1,6 +1,6 @@
|
||||||
import got from '../libs/got'
|
import got from '../libs/got'
|
||||||
import { millify, stars, version, versionColor } from '../libs/utils'
|
import { millify, stars, version, versionColor } from '../libs/utils'
|
||||||
import { badgenServe, BadgenServeHandlers, BadgenServeHandlerArgs } from '../libs/badgen-serve'
|
import { badgenServe } from '../libs/badgen-serve'
|
||||||
|
|
||||||
export const help = ``
|
export const help = ``
|
||||||
|
|
||||||
|
@ -12,11 +12,12 @@ export const examples = [
|
||||||
'/amo/reviews/markdown-viewer-chrome',
|
'/amo/reviews/markdown-viewer-chrome',
|
||||||
]
|
]
|
||||||
|
|
||||||
const handlers = {
|
export const handlers = {
|
||||||
'/amo/:topic/:name': handler
|
'/amo/:topic/:name': handler
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handler ({ topic, name }: BadgenServeHandlerArgs) {
|
async function handler (args) {
|
||||||
|
const { topic, name } = args
|
||||||
const endpoint = `https://addons.mozilla.org/api/v3/addons/addon/${name}/`
|
const endpoint = `https://addons.mozilla.org/api/v3/addons/addon/${name}/`
|
||||||
const addon = await got(endpoint).then(res => res.body)
|
const addon = await got(endpoint).then(res => res.body)
|
||||||
|
|
||||||
|
@ -60,4 +61,4 @@ async function handler ({ topic, name }: BadgenServeHandlerArgs) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default badgenServe(handlers, { examples })
|
export default badgenServe(handlers)
|
||||||
|
|
|
@ -26,4 +26,4 @@ async function handler (args) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default badgenServe(handlers, { examples })
|
export default badgenServe(handlers)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import serve404 from '../libs/serve-404'
|
import serve404 from '../libs/serve-404'
|
||||||
|
import serveHelp from '../libs/serve-help'
|
||||||
|
|
||||||
// Handles `/docs/:name`
|
// Handles `/docs/:name`
|
||||||
export default async function (req, res) {
|
export default async function (req, res) {
|
||||||
|
@ -11,27 +12,14 @@ export default async function (req, res) {
|
||||||
const { help, examples, handlers } = await import(handlerModulePath)
|
const { help, examples, handlers } = await import(handlerModulePath)
|
||||||
if (help || examples) {
|
if (help || examples) {
|
||||||
return serveHelp(req, res, name, { help, examples, handlers })
|
return serveHelp(req, res, name, { help, examples, handlers })
|
||||||
} else {
|
|
||||||
return serve404(req, res)
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error.code === 'MODULE_NOT_FOUND') {
|
if (error.code !== 'MODULE_NOT_FOUND') {
|
||||||
return serve404(req, res)
|
|
||||||
} else {
|
|
||||||
console.error(error)
|
console.error(error)
|
||||||
return serve404(req, res)
|
throw error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
serve404(req, res)
|
serve404(req, res)
|
||||||
}
|
}
|
||||||
|
|
||||||
function serveHelp (req, res, id, { help, examples, handlers }) {
|
|
||||||
const Docs = help ? help : `# ${id}`
|
|
||||||
const Schemes = `## Schemes\n\n${Object.keys(handlers).join('\n')}`
|
|
||||||
const Examples = `## Examples\n\n${examples.join('\n')}`
|
|
||||||
|
|
||||||
const md = [Docs, Schemes, Examples].join('\n\n')
|
|
||||||
res.end(md)
|
|
||||||
}
|
|
||||||
|
|
|
@ -24,4 +24,4 @@ async function handler (args) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default badgenServe(handlers, { examples })
|
export default badgenServe(handlers)
|
||||||
|
|
|
@ -2,29 +2,19 @@ import url from 'url'
|
||||||
import PathParser from 'path-parser'
|
import PathParser from 'path-parser'
|
||||||
|
|
||||||
import serve404 from './serve-404.js'
|
import serve404 from './serve-404.js'
|
||||||
import serveHelp from './serve-help.js'
|
|
||||||
import serveBadge from './serve-badge.js'
|
import serveBadge from './serve-badge.js'
|
||||||
|
|
||||||
type BadgenParams = {
|
export type BadgenParams = {
|
||||||
subject: string
|
subject: string
|
||||||
status: string
|
status: string
|
||||||
color: string
|
color: string
|
||||||
}
|
}
|
||||||
|
|
||||||
type BadgenServeOptions = {
|
|
||||||
help?: string
|
|
||||||
examples?: string[]
|
|
||||||
}
|
|
||||||
|
|
||||||
export type BadgenServeHandlerArgs = { [key: string]: string }
|
export type BadgenServeHandlerArgs = { [key: string]: string }
|
||||||
export type BadgenServeHandler = (args: BadgenServeHandlerArgs) => Promise<BadgenParams>
|
export type BadgenServeHandler = (args: BadgenServeHandlerArgs) => Promise<BadgenParams>
|
||||||
export type BadgenServeHandlers = { [key: string]: BadgenServeHandler }
|
export type BadgenServeHandlers = { [key: string]: BadgenServeHandler }
|
||||||
|
|
||||||
export function badgenServe (
|
export function badgenServe (handlers: BadgenServeHandlers): Function {
|
||||||
handlers: BadgenServeHandlers,
|
|
||||||
options: BadgenServeOptions
|
|
||||||
): Function {
|
|
||||||
const { help = '', examples = [] } = options
|
|
||||||
return async function httpHandler (req, res) {
|
return async function httpHandler (req, res) {
|
||||||
const { pathname = '/', query } = url.parse(req.url, true)
|
const { pathname = '/', query } = url.parse(req.url, true)
|
||||||
|
|
||||||
|
@ -33,11 +23,6 @@ export function badgenServe (
|
||||||
return res.end()
|
return res.end()
|
||||||
}
|
}
|
||||||
|
|
||||||
// serve help message
|
|
||||||
if (pathname.startsWith('/help')) {
|
|
||||||
return serveHelp(req, res, help, examples)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lookup handler
|
// Lookup handler
|
||||||
let matchedArgs
|
let matchedArgs
|
||||||
const matchedScheme = Object.keys(handlers).find(scheme => {
|
const matchedScheme = Object.keys(handlers).find(scheme => {
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
module.exports = async function (req, res, help, examples) {
|
|
||||||
res.end(help)
|
|
||||||
}
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
export default function serveHelp (req, res, id, { help, examples, handlers }) {
|
||||||
|
const Docs = help ? help : `# ${id}`
|
||||||
|
const Schemes = `## Schemes\n\n${Object.keys(handlers).join('\n')}`
|
||||||
|
const Examples = `## Examples\n\n${examples.join('\n')}`
|
||||||
|
|
||||||
|
const md = [Docs, Schemes, Examples].join('\n\n')
|
||||||
|
res.end(md)
|
||||||
|
}
|
|
@ -12,7 +12,8 @@
|
||||||
"lib": ["esnext"]
|
"lib": ["esnext"]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"./endpoints",
|
"index.ts",
|
||||||
"./types"
|
"endpoints",
|
||||||
|
"types"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue