findstate-cli
Version:
A CLI for querying data optimized for Real Estate
39 lines (31 loc) • 1.43 kB
text/typescript
import { loadData } from "../../core/data-loader.js";
import { formatAsJSON, formatAsTable } from "../../core/formatter.js";
import { queryData } from "../../core/query-engine.js";
import { validateQuery } from "../../core/validators.js";
export function queryCommand(queries: string[], source: string = "mock", output: string = "table"): void {
const data = loadData(source);
if (!queries || queries.length === 0) {
console.error("Error: No queries provided. Use the format field:operation:value.");
console.info("Example: price:greaterThan:300000 or rooms:lessThan:5");
process.exit(1);
}
const parsedQueries = queries.map((query) => {
const parts = query.split(":");
if (parts.length !== 3) {
console.error(`Error: Invalid query format '${query}'. Expected format is field:operation:value.`);
console.info("Example: price:greaterThan:300000 or rooms:lessThan:5");
process.exit(1);
}
const [field, operation, value] = parts;
const parsedValue = isNaN(Number(value)) ? value : Number(value);
const queryObject = { field, operation, value: parsedValue };
validateQuery(queryObject);
return queryObject;
});
const results = queryData(data, parsedQueries);
if (output === "json") {
console.info(formatAsJSON(results));
} else {
console.info(formatAsTable(results));
}
}