poku
Version:
🐷 Poku makes testing easy for Node.js, Bun, Deno, and you at the same time.
147 lines (140 loc) • 6.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const poku_js_1 = require("../configs/poku.js");
const poku_js_2 = require("../modules/essentials/poku.js");
const env_js_1 = require("../modules/helpers/env.js");
const kill_js_1 = require("../modules/helpers/kill.js");
const list_files_js_1 = require("../modules/helpers/list-files.js");
const get_arg_js_1 = require("../parsers/get-arg.js");
const options_js_1 = require("../parsers/options.js");
const format_js_1 = require("../services/format.js");
const write_js_1 = require("../services/write.js");
(async () => {
if ((0, get_arg_js_1.hasArg)('version') || (0, get_arg_js_1.hasArg)('v', '-')) {
(0, write_js_1.log)(poku_js_1.VERSION);
return;
}
if ((0, get_arg_js_1.hasArg)('help') || (0, get_arg_js_1.hasArg)('h', '-')) {
require('./help.js').help();
return;
}
const enforce = (0, get_arg_js_1.hasArg)('enforce') || (0, get_arg_js_1.hasArg)('x', '-');
const configFile = (0, get_arg_js_1.getArg)('config') || (0, get_arg_js_1.getArg)('c', '-');
poku_js_1.GLOBAL.configsFromFile = await (0, options_js_1.getConfigs)(configFile);
const { configsFromFile } = poku_js_1.GLOBAL;
const dirs = (0, get_arg_js_1.getPaths)('-') ??
(configsFromFile?.include
? Array.prototype.concat(configsFromFile?.include)
: ['.']);
const filter = (0, get_arg_js_1.getArg)('filter') ?? configsFromFile?.filter;
const exclude = (0, get_arg_js_1.getArg)('exclude') ?? configsFromFile?.exclude;
const killPort = (0, get_arg_js_1.getArg)('killPort');
const killRange = (0, get_arg_js_1.getArg)('killRange');
const killPID = (0, get_arg_js_1.getArg)('killPid');
const reporter = (0, get_arg_js_1.getArg)('reporter') ??
(0, get_arg_js_1.getArg)('r', '-') ??
poku_js_1.GLOBAL.configsFromFile.reporter ??
'poku';
const denoAllow = (0, get_arg_js_1.argToArray)('denoAllow') ?? configsFromFile?.deno?.allow;
const denoDeny = (0, get_arg_js_1.argToArray)('denoDeny') ?? configsFromFile?.deno?.deny;
const denoCJS = (0, get_arg_js_1.getArg)('denoCjs')
?.split(',')
.map((a) => a.trim())
.filter((a) => a) ||
(0, get_arg_js_1.hasArg)('denoCjs') ||
configsFromFile?.deno?.cjs;
const quiet = (0, get_arg_js_1.hasArg)('quiet') || (0, get_arg_js_1.hasArg)('q', '-') || configsFromFile?.quiet;
const debug = (0, get_arg_js_1.hasArg)('debug') || (0, get_arg_js_1.hasArg)('d', '-') || configsFromFile?.debug;
const failFast = (0, get_arg_js_1.hasArg)('failFast') || configsFromFile?.failFast;
const watchMode = (0, get_arg_js_1.hasArg)('watch') || (0, get_arg_js_1.hasArg)('w', '-');
const hasEnvFile = (0, get_arg_js_1.hasArg)('envFile');
const concurrency = (() => {
const value = Number((0, get_arg_js_1.getArg)('concurrency'));
return Number.isNaN(value) ? configsFromFile?.concurrency : value;
})();
const sequential = (0, get_arg_js_1.hasArg)('sequential');
if (dirs.length === 1)
poku_js_1.states.isSinglePath = true;
if ((0, get_arg_js_1.hasArg)('listFiles')) {
const { listFiles } = require('../modules/helpers/list-files.js');
const files = [];
(0, write_js_1.hr)();
for (const dir of dirs)
files.push(...(await listFiles(dir, {
filter: typeof filter === 'string'
? new RegExp((0, list_files_js_1.escapeRegExp)(filter))
: filter,
exclude: typeof exclude === 'string'
? new RegExp((0, list_files_js_1.escapeRegExp)(exclude))
: exclude,
})));
(0, write_js_1.log)(files
.sort()
.map((file) => `${(0, format_js_1.format)('-').dim()} ${file}`)
.join('\n'));
(0, write_js_1.hr)();
(0, write_js_1.log)(`Total test files: ${(0, format_js_1.format)(String(files.length)).bold()}`);
(0, write_js_1.hr)();
return;
}
poku_js_1.GLOBAL.configFile = configFile;
poku_js_1.GLOBAL.configs = {
filter: typeof filter === 'string' ? new RegExp((0, list_files_js_1.escapeRegExp)(filter)) : filter,
exclude: typeof exclude === 'string' ? new RegExp((0, list_files_js_1.escapeRegExp)(exclude)) : exclude,
concurrency,
sequential,
quiet,
debug,
failFast,
deno: {
allow: denoAllow,
deny: denoDeny,
cjs: denoCJS,
},
noExit: watchMode,
reporter,
beforeEach: 'beforeEach' in configsFromFile ? configsFromFile.beforeEach : undefined,
afterEach: 'afterEach' in configsFromFile ? configsFromFile.afterEach : undefined,
};
const tasks = [];
if (hasEnvFile || configsFromFile?.envFile) {
poku_js_1.GLOBAL.envFile = (0, get_arg_js_1.getArg)('envFile') ?? configsFromFile?.envFile ?? '.env';
}
if (enforce)
require('../services/enforce.js').enforce();
if (killPort || configsFromFile?.kill?.port) {
const ports = killPort?.split(',').map(Number) || configsFromFile?.kill?.port || [];
tasks.push(kill_js_1.kill.port(ports));
}
if (killRange || configsFromFile?.kill?.range) {
const ranges = killRange?.split(',') ||
configsFromFile?.kill?.range?.map((range) => `${range[0]}-${range[1]}`) ||
[];
for (const range of ranges) {
const ports = range.split('-').map(Number);
const startsAt = ports[0];
const endsAt = ports[1];
tasks.push(kill_js_1.kill.range(startsAt, endsAt));
}
}
if (killPID || configsFromFile?.kill?.pid) {
const PIDs = killPID?.split(',').map(Number) || configsFromFile?.kill?.pid || [];
tasks.push(kill_js_1.kill.pid(PIDs));
}
poku_js_1.GLOBAL.envFile && tasks.push((0, env_js_1.envFile)(poku_js_1.GLOBAL.envFile));
if (debug || configsFromFile?.debug) {
(0, write_js_1.hr)();
(0, write_js_1.log)(`${(0, format_js_1.format)(' Debug Enabled ').bg('brightBlue')}\n`);
(0, write_js_1.log)(`${(0, format_js_1.format)('…').info().italic()} ${(0, format_js_1.format)('Options').bold()}`);
console.dir(poku_js_1.GLOBAL.configs, {
depth: Number.POSITIVE_INFINITY,
colors: true,
});
(0, write_js_1.log)(`\n${(0, format_js_1.format)('💡')} To list all test files, run: ${(0, format_js_1.format)('poku --listFiles').bold()}`);
}
await Promise.all(tasks);
await (0, poku_js_2.poku)(dirs);
if (watchMode)
await require('./watch.js').startWatch(dirs);
})();