Skip to content

Commit 4288f22

Browse files
committed
feat(parse): return requires boolean;
- whether or not `--require` defined
1 parent 2762c1c commit 4288f22

File tree

4 files changed

+18
-9
lines changed

4 files changed

+18
-9
lines changed

bin.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ sade('uvu [dir] [pattern]')
2020
.action(async (dir, pattern, opts) => {
2121
try {
2222
if (opts.color) process.env.FORCE_COLOR = '1';
23-
let { suites } = await parse(dir, pattern, opts);
23+
let ctx = await parse(dir, pattern, opts);
2424

25-
if (hasImport) {
26-
await dimport('uvu/run').then(m => m.run(suites, opts));
25+
if (!ctx.requires && hasImport) {
26+
await dimport('uvu/run').then(m => m.run(ctx.suites, opts));
2727
} else {
28-
await require('uvu/run').run(suites, opts);
28+
await require('uvu/run').run(ctx.suites, opts);
2929
}
3030
} catch (err) {
3131
console.error(err.stack || err.message);

src/parse.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export interface Options {
1616
export interface Argv {
1717
dir: string;
1818
suites: Suite[];
19+
requires: boolean;
1920
}
2021

2122
export function parse(dir?: string, pattern?: string|RegExp, opts?: Partial<Options>): Promise<Argv>;

src/parse.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,17 @@ export async function parse(dir, pattern, opts = {}) {
1414
else pattern = /((\/|^)(tests?|__tests?__)\/.*|\.(tests?|spec)|^\/?tests?)\.([mc]js|[jt]sx?)$/i;
1515
dir = resolve(opts.cwd || '.', dir || '.');
1616

17-
[].concat(opts.require || []).filter(Boolean).forEach(name => {
17+
let suites = [];
18+
let requires = [].concat(opts.require || []).filter(Boolean);
19+
let ignores = ['node_modules'].concat(opts.ignore || []).map(toRegex);
20+
21+
requires.forEach(name => {
1822
let tmp = exists(name);
1923
if (tmp) return require(tmp);
2024
if (tmp = exists(resolve(name))) return require(tmp);
2125
throw new Error(`Cannot find module '${name}'`);
2226
});
2327

24-
let suites = [];
25-
let ignores = ['node_modules'].concat(opts.ignore || []).map(toRegex);
26-
2728
await totalist(dir, (rel, abs) => {
2829
if (pattern.test(rel) && !ignores.some(x => x.test(rel))) {
2930
suites.push({ name: rel, file: abs });
@@ -32,5 +33,5 @@ export async function parse(dir, pattern, opts = {}) {
3233

3334
suites.sort((a, b) => a.name.localeCompare(b.name));
3435

35-
return { dir, suites };
36+
return { dir, suites, requires: requires.length > 0 };
3637
}

test/parse.js

+7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ parse('should rely on defaults', async () => {
1818

1919
assert.type(output, 'object');
2020
assert.is(output.dir, __dirname);
21+
assert.is(output.requires, false);
2122

2223
assert.instance(output.suites, Array);
2324
assert.is(output.suites.length, FILES.length);
@@ -40,6 +41,7 @@ dir('should accept relative `dir` input', async () => {
4041

4142
assert.type(output, 'object');
4243
assert.is(output.dir, __dirname);
44+
assert.is(output.requires, false);
4345

4446
assert.instance(output.suites, Array);
4547
assert.is(output.suites.length, FILES.length);
@@ -134,4 +136,9 @@ requires('should throw on invalid value(s)', async () => {
134136
}
135137
});
136138

139+
requires('should `require` valid value(s)', async () => {
140+
let foo = await $.parse(__dirname, '', { require: ['esm'] });
141+
assert.is(foo.requires, true);
142+
});
143+
137144
requires.run();

0 commit comments

Comments
 (0)