#!/usr/bin/env node 'use strict' const { PDFKitTextMeasurer } = require('./text-measurer') const { makeBadge } = require('./make-badge') const svg2img = require('./svg-to-img') const colorscheme = require('./colorscheme.json') const defaults = require('./defaults') if (process.argv.length < 4) { console.log('Usage: badge subject status [:colorscheme] [.output] [@style]') console.log( 'Or: badge subject status right-color [left-color] [.output] [@style]' ) console.log() console.log( ' colorscheme: one of ' + Object.keys(colorscheme).join(', ') + '.' ) console.log(' left-color, right-color:') console.log(' #xxx (three hex digits)') console.log(' #xxxxxx (six hex digits)') console.log(' color (CSS color)') console.log(' output:') console.log(' svg, png, jpg, or gif') console.log() console.log('Eg: badge cactus grown :green @flat') console.log() process.exit() } const fontPath = process.env.FONT_PATH || defaults.font.path // Find a format specifier. let format = 'svg' let style = '' for (let i = 4; i < process.argv.length; i++) { if (process.argv[i][0] === '.') { format = process.argv[i].slice(1) process.argv.splice(i, 1) continue } if (process.argv[i][0] === '@') { style = process.argv[i].slice(1) process.argv.splice(i, 1) continue } } const subject = process.argv[2] const status = process.argv[3] let color = process.argv[4] || ':green' const colorA = process.argv[5] const badgeData = { text: [subject, status], format: format } if (style) { badgeData.template = style } if (color[0] === ':') { color = color.slice(1) if (colorscheme[color] == null) { // Colorscheme not found. console.error('Invalid color scheme.') process.exit(1) } badgeData.colorscheme = color } else { badgeData.colorB = color if (colorA) { badgeData.colorA = colorA } } async function main() { // The widths are going to be off if Helvetica-Bold is used, though this // should print a warning. const measurer = new PDFKitTextMeasurer(fontPath, 'Helvetica-Bold') const svg = makeBadge(measurer, badgeData) if (/png|jpg|gif/.test(format)) { const data = await svg2img(svg, format) process.stdout.write(data) } else { console.log(svg) } } ;(async () => { try { await main() } catch (e) { console.error(e) process.exit(1) } })()