UNPKG

@prantlf/faucet

Version:

Human-readable TAP reporter/formatter.

71 lines (59 loc) 1.99 kB
#!/usr/bin/env node const faucet = require('../') const minimist = require('minimist') const defined = require('defined') const argv = minimist(process.argv.slice(2)) const tap = faucet({ verbose: defined(argv.v, argv.verbose, false), width: defined(argv.w, argv.width, process.stdout.isTTY ? process.stdout.columns - 5 : 0 ) }) process.on('exit', code => { if (code === 0 && tap.exitCode !== 0) { process.exit(tap.exitCode) } }) process.stdout.on('error', () => {}) if (!process.stdin.isTTY || argv._[0] === '-') { process.stdin.pipe(tap).pipe(process.stdout) return } const { dirname, join } = require('path') const tapeCmd = join(dirname(require.resolve('tape')), 'bin/tape') const { spawn } = require('child_process') const { existsSync, readdirSync, statSync } = require('fs') const files = argv._.reduce((acc, file) => { if (statSync(file).isDirectory()) { return acc.concat(readdirSync(file).map(x => join(file, x)).filter(jsFile)) } else return acc.concat(file) }, []) if (files.length === 0 && existsSync('test')) { files.push.apply(files, readdirSync('test').map(x => join('test', x)).filter(jsFile)) } if (files.length === 0 && existsSync('tests')) { files.push.apply(files, readdirSync('tests').map(x => join('tests', x)).filter(jsFile)) } if (files.length === 0) { console.error('usage: `faucet [-v|--verbose] [-w|--width=<number>] [FILES]`\n or `| faucet [-v|--verbose] [-w|--width=<number>]`\n') console.error( 'No test files or stdin provided and no files in test/ or tests/' + ' directories found.' ) process.exit(1) } const tape = spawn(tapeCmd, files) tape.stderr.pipe(process.stderr) tape.stdout.pipe(tap).pipe(process.stdout) let tapeCode tape.on('exit', code => tapeCode = code) process.on('exit', code => { if (code === 0 && tapeCode !== 0) { console.error('# non-zero exit from the `tape` command') process.exit(tapeCode) } }) function jsFile (x) { return /\.js$/i.test(x) }