|
#!/usr/bin/env node |
|
const sade = require('sade'); |
|
const pkg = require('./package'); |
|
const { parse } = require('./parse'); |
|
|
|
const dimport = x => new Function(`return import(${ JSON.stringify(x) })`).call(0); |
|
|
|
const hasImport = (() => { |
|
try { new Function('import').call(0) } |
|
catch (err) { return !/unexpected/i.test(err.message) } |
|
})(); |
|
|
|
sade('uvu [dir] [pattern]') |
|
.version(pkg.version) |
|
.option('-b, --bail', 'Exit on first failure') |
|
.option('-i, --ignore', 'Any file patterns to ignore') |
|
.option('-r, --require', 'Additional module(s) to preload') |
|
.option('-C, --cwd', 'The current directory to resolve from', '.') |
|
.option('-c, --color', 'Print colorized output', true) |
|
.action(async (dir, pattern, opts) => { |
|
try { |
|
if (opts.color) process.env.FORCE_COLOR = '1'; |
|
let ctx = await parse(dir, pattern, opts); |
|
|
|
if (!ctx.requires && hasImport) { |
|
await dimport('uvu/run').then(m => m.run(ctx.suites, opts)); |
|
} else { |
|
await require('uvu/run').run(ctx.suites, opts); |
|
} |
|
} catch (err) { |
|
console.error(err.stack || err.message); |
|
process.exit(1); |
|
} |
|
}) |
|
.parse(process.argv); |
|
|