yargs-file-commands
Version:
A yargs helper function that lets you define your commands structure via directory and file naming conventions.
56 lines (46 loc) • 1.63 kB
text/typescript
import path from 'path';
import { test } from 'node:test';
import assert from 'node:assert';
import type { Command } from './Command.js';
import { fileCommands } from './fileCommands.js';
// get __dirname in ESM style
const __dirname = path.dirname(new URL(import.meta.url).pathname);
test('should load commands from directory structure', async () => {
const commands = await fileCommands({
commandDirs: [path.join(__dirname, 'fixtures', 'commands')],
logLevel: 'debug'
});
assert.ok(commands.length > 0);
});
test('should respect ignore patterns', async () => {
const commands = await fileCommands({
commandDirs: [path.join(__dirname, 'fixtures', 'commands')],
ignorePatterns: [/health/, /.d.ts/],
logLevel: 'debug'
});
assert.ok(commands.length > 0);
});
test('should handle explicit commands and default command', async () => {
const commands = await fileCommands({
commandDirs: [path.join(__dirname, 'fixtures', 'commands')],
logLevel: 'debug'
});
console.log(
'commands',
JSON.stringify(
commands.map((c) => c.command),
null,
2
)
);
// Find the explicit command
const explicitCommand = commands.find((cmd) =>
cmd.command?.toString().includes('create [name]')
);
assert.ok(explicitCommand, 'Should find explicit command');
assert.equal(explicitCommand?.describe, 'Create something with a name');
// Find the default command
const defaultCommand = commands.find((cmd) => cmd.command === '$0');
assert.ok(defaultCommand, 'Should find default command');
assert.equal(defaultCommand?.describe, 'Default command');
});