UNPKG

poku

Version:

🐷 Poku makes testing easy for Node.js, Bun, Deno, and you at the same time.

147 lines (140 loc) 6.78 kB
#! /usr/bin/env node "use strict"; 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); })();