simple-task-master
Version:
A simple command-line task management tool
82 lines • 2.89 kB
JavaScript
;
/**
* List tasks command
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.listCommand = void 0;
const commander_1 = require("commander");
const task_manager_1 = require("../lib/task-manager");
const output_1 = require("../lib/output");
const errors_1 = require("../lib/errors");
/**
* Parse tags filter from string
*/
function parseTagsFilter(tagsStr) {
return tagsStr
.split(',')
.map((tag) => tag.trim())
.filter((tag) => tag.length > 0);
}
/**
* List tasks with optional filtering
*/
async function listTasks(options) {
try {
const taskManager = await task_manager_1.TaskManager.create();
// Build filters
const filters = {};
if (options.status) {
if (!['pending', 'in-progress', 'done'].includes(options.status)) {
throw new errors_1.ValidationError('Status must be one of: pending, in-progress, done');
}
filters.status = options.status;
}
if (options.tags) {
filters.tags = parseTagsFilter(options.tags);
}
if (options.search) {
filters.search = options.search;
}
// Get tasks
const tasks = await taskManager.list(filters);
// Determine output format
let format = 'ndjson'; // default
if (options.pretty) {
format = 'table';
}
else if (options.format) {
const validFormats = ['ndjson', 'json', 'table', 'csv', 'yaml'];
if (!validFormats.includes(options.format)) {
throw new errors_1.ValidationError(`Invalid format: ${options.format}. Valid formats: ${validFormats.join(', ')}`);
}
format = options.format;
}
// Format and output
const output = (0, output_1.formatTasks)(tasks, format);
(0, output_1.printOutput)(output);
}
catch (error) {
if (error instanceof errors_1.ValidationError ||
error instanceof errors_1.FileSystemError ||
error instanceof errors_1.ConfigurationError ||
error instanceof Error) {
(0, output_1.printError)(error.message);
process.exit(1);
}
throw error;
}
}
/**
* Create the list command
*/
exports.listCommand = new commander_1.Command('list')
.description('List tasks with optional filtering')
.option('-s, --status <status>', 'Filter by status (pending, in-progress, done)')
.option('-t, --tags <tags>', 'Filter by tags (comma-separated)')
.option('--search <query>', 'Search in task titles and content')
.option('-p, --pretty', 'Pretty table output format')
.option('-f, --format <format>', 'Output format (ndjson, json, table, csv, yaml)')
.action(async (options) => {
await listTasks(options);
});
//# sourceMappingURL=list.js.map