#!/usr/bin/env node var yargs = require('yargs') var qr = require('../lib') function save (file, text, options) { qr.toFile(file, text, options, function (err, data) { if (err) { console.error('Error:', err.message) process.exit(1) } console.log('saved qrcode to: ' + file + '\n') }) } function print (text, options) { options.type = 'terminal' qr.toString(text, options, function (err, text) { if (err) { console.error('Error:', err.message) process.exit(1) } console.log(text) }) } function parseOptions (args) { return { version: args.qversion, errorCorrectionLevel: args.error, type: args.type, small: !!args.small, inverse: !!args.inverse, maskPattern: args.mask, margin: args.qzone, width: args.width, scale: args.scale, color: { light: args.lightcolor, dark: args.darkcolor } } } function processInputs (text, opts) { if (!text.length) { yargs.showHelp() process.exit(1) } if (opts.output) { save(opts.output, text, parseOptions(opts)) } else { print(text, parseOptions(opts)) } } var argv = yargs .detectLocale(false) .usage('Usage: $0 [options] ') .option('v', { alias: 'qversion', description: 'QR Code symbol version (1 - 40)', group: 'QR Code options:', type: 'number' }) .option('e', { alias: 'error', description: 'Error correction level', choices: ['L', 'M', 'Q', 'H'], group: 'QR Code options:' }) .option('m', { alias: 'mask', description: 'Mask pattern (0 - 7)', group: 'QR Code options:', type: 'number' }) .option('t', { alias: 'type', description: 'Output type', choices: ['png', 'svg', 'utf8'], implies: 'output', group: 'Renderer options:' }) .option('i', { alias: 'inverse', type: 'boolean', description: 'Invert colors', group: 'Renderer options:' }) .option('w', { alias: 'width', description: 'Image width (px)', conflicts: 'scale', group: 'Renderer options:', type: 'number' }) .option('s', { alias: 'scale', description: 'Scale factor', conflicts: 'width', group: 'Renderer options:', type: 'number' }) .option('q', { alias: 'qzone', description: 'Quiet zone size', group: 'Renderer options:', type: 'number' }) .option('l', { alias: 'lightcolor', description: 'Light RGBA hex color', group: 'Renderer options:' }) .option('d', { alias: 'darkcolor', description: 'Dark RGBA hex color', group: 'Renderer options:' }) .option('small', { type: 'boolean', description: 'Output smaller QR code to terminal', conflicts: 'type', group: 'Renderer options:' }) .option('o', { alias: 'output', description: 'Output file' }) .help('h') .alias('h', 'help') .version() .example('$0 "some text"', 'Draw in terminal window') .example('$0 -o out.png "some text"', 'Save as png image') .example('$0 -d F00 -o out.png "some text"', 'Use red as foreground color') .parserConfiguration({'parse-numbers': false}) .argv if (process.stdin.isTTY) { processInputs(argv._.join(' '), argv) } else { var text = '' process.stdin.setEncoding('utf8') process.stdin.on('readable', function () { var chunk = process.stdin.read() if (chunk !== null) { text += chunk } }) process.stdin.on('end', function () { // this process can be run as a command outside of a tty so if there was no // data on stdin read from argv processInputs(text.length?text:argv._.join(' '), argv) }) }