findstate-cli
Version:
A CLI for querying data optimized for Real Estate
86 lines (76 loc) • 3.1 kB
text/typescript
import { Command } from "commander";
import { queryCommand } from "./commands/query.js";
import { interactiveMode } from "./commands/interactive.js";
import { helpCommand } from "./commands/help.js";
import { exportCommand } from "./commands/export.js";
import { validateRequiredArray, validateOptionValues, validateFileName } from "../utils/validation-helpers.js";
import { handleError } from "../utils/handleError.js";
const program = new Command();
program
.name("findstate-cli")
.description("A CLI for querying data optimized for Real Estate")
.version("1.0.0");
program
.command("query")
.description("Run a query using filters")
.option("-q, --queries <queries...>", "Query filters in the format field:operation:value")
.option("-s, --source <source>", "Data source (default: mock)", "mock")
.option("-o, --output <output>", "Output format (table or json, default: table)", "table")
.action((options) => {
try {
validateRequiredArray(options.queries, "--queries is required for the query command.");
validateOptionValues(options.source, ["mock"], "Invalid data source.");
validateOptionValues(options.output, ["table", "json"], "Invalid output format.");
queryCommand(options.queries, options.source, options.output);
} catch (error) {
handleError(error);
}
});
program
.command("interactive")
.description("Start interactive mode to build queries step by step")
.option("-s, --source <source>", "Data source (default: mock)", "mock")
.option("-o, --output <output>", "Output format (table or json, default: table)", "table")
.action((options) => {
try {
validateOptionValues(options.source, ["mock"], "Invalid data source.");
validateOptionValues(options.output, ["table", "json"], "Invalid output format.");
interactiveMode(options.source, options.output);
} catch (error) {
handleError(error);
}
});
program
.command("help")
.description("Display detailed usage information")
.action(helpCommand);
program
.command("export")
.description("Export query results to a file")
.option("-q, --query <queries...>", "Queries to filter data")
.option("-s, --source <source>", "Data source (default: mock)", "mock")
.option("-f, --fileName <fileName>", "Output file name (default: results.json)", "results.json")
.action((options) => {
try {
validateRequiredArray(options.query, "--query is required for the export command.");
validateFileName(options.fileName);
validateOptionValues(options.source, ["mock"], "Invalid data source.");
exportCommand(options.query, options.source, options.fileName);
} catch (error) {
handleError(error);
}
});
program.on("command:*", (operands: string[]) => {
console.error(`\nError: Invalid command '${operands[0]}'.`);
console.info("See 'findstate-cli --help' for a list of available commands.\n");
process.exit(1);
});
if (!process.argv.slice(2).length) {
program.outputHelp();
}
try {
program.parse(process.argv);
} catch (error) {
handleError(error);
}