uvu-jest
Version:
Run the existing jest code with uvu
73 lines (72 loc) • 3.2 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parse = void 0;
const fs_1 = require("fs");
const path_1 = require("path");
const util_1 = require("util");
const ls = (0, util_1.promisify)(fs_1.readdir);
const toStat = (0, util_1.promisify)(fs_1.stat);
const toRegex = x => new RegExp(x, 'i');
function exists(dep) {
try {
return require.resolve(dep);
}
catch (err) {
return false;
}
}
function parse(dir, pattern, opts = {}) {
return __awaiter(this, void 0, void 0, function* () {
if (pattern)
pattern = toRegex(pattern);
else if (dir)
pattern = /(((?:[^\/]*(?:\/|$))*)[\\\/])?\w+\.([mc]js|[jt]sx?)$/;
else
pattern = /((\/|^)(tests?|__tests?__)\/.*|\.(tests?|spec)|^\/?tests?)\.([mc]js|[jt]sx?)$/i;
dir = (0, path_1.resolve)(opts.cwd || '.', dir || '.');
let suites = [];
let requires = [].concat(opts.require || []).filter(Boolean);
let ignores = ['^.git', 'node_modules'].concat(opts.ignore || []).map(toRegex);
requires.forEach(name => {
let tmp = exists(name);
if (tmp)
return require(tmp);
if (tmp = exists((0, path_1.resolve)(name)))
return require(tmp);
throw new Error(`Cannot find module '${name}'`);
});
// NOTE: Node 8.x support
// @modified lukeed/totalist
yield (function collect(d, p) {
return __awaiter(this, void 0, void 0, function* () {
yield ls(d).then(files => {
return Promise.all(files.map((str) => __awaiter(this, void 0, void 0, function* () {
let name = (0, path_1.join)(p, str);
for (let i = ignores.length; i--;) {
if (ignores[i].test(name))
return;
}
let file = (0, path_1.join)(d, str);
let stats = yield toStat(file);
if (stats.isDirectory())
return collect(file, name);
else if (pattern.test(name))
suites.push({ name, file });
})));
});
});
})(dir, '');
suites.sort((a, b) => a.name.localeCompare(b.name));
return { dir, suites, requires: requires.length > 0 };
});
}
exports.parse = parse;
;