#!/usr/bin/env node 'use strict'; var parseOpts = require('minimist'); var opts = parseOpts(process.argv.slice(2), { alias: { r: 'require', i: 'ignore' }, string: ['require', 'ignore'], boolean: ['only'], default: { r: [], i: null, only: null } }); if (typeof opts.only === 'boolean') { process.env.NODE_TAPE_NO_ONLY_TEST = !opts.only; } var cwd = process.cwd(); if (typeof opts.require === 'string') { opts.require = [opts.require]; } var resolveModule; opts.require.forEach(function (module) { if (module) { if (!resolveModule) { resolveModule = require('resolve').sync; } // This check ensures we ignore `-r ""`, trailing `-r`, or other silly things the user might (inadvertently) be doing. require(resolveModule(module, { basedir: cwd })); } }); var resolvePath = require('path').resolve; var matcher; if (typeof opts.ignore === 'string') { var readFileSync = require('fs').readFileSync; try { var ignoreStr = readFileSync(resolvePath(cwd, opts.ignore || '.gitignore'), 'utf-8'); } catch (e) { console.error(e.message); process.exit(2); } var ignore = require('dotignore'); matcher = ignore.createMatcher(ignoreStr); } var glob = require('glob'); opts._.forEach(function (arg) { // If glob does not match, `files` will be an empty array. Note: `glob.sync` may throw an error and crash the node process. var files = glob.sync(arg); if (!Array.isArray(files)) { throw new TypeError('unknown error: glob.sync did not return an array or throw. Please report this.'); } files.filter(function (file) { return !matcher || !matcher.shouldIgnore(file); }).forEach(function (file) { require(resolvePath(cwd, file)); }); }); // vim: ft=javascript