UNPKG

revit-cli

Version:

A scalable CLI tool for Revit communication and data manipulation

103 lines 4.31 kB
"use strict"; /** * Select rooms command implementation * Handles room selection and filtering operations */ Object.defineProperty(exports, "__esModule", { value: true }); exports.createSelectRoomsCommand = createSelectRoomsCommand; const commander_1 = require("commander"); const room_service_js_1 = require("../../services/room-service.js"); const room_utils_js_1 = require("../../utils/room-utils.js"); /** * Creates the select-rooms command * @param getState - Function to get CLI state * @returns Commander command instance */ function createSelectRoomsCommand(getState) { const command = new commander_1.Command('select-rooms') .description('Select and filter rooms from Revit') .option('-l, --level <level>', 'Filter by level') .option('-d, --department <department>', 'Filter by department') .option('-o, --occupancy <occupancy>', 'Filter by occupancy') .option('-n, --name <pattern>', 'Filter by name pattern (regex)') .option('-r, --number <pattern>', 'Filter by room number pattern (regex)') .option('--min-area <area>', 'Minimum area filter', parseFloat) .option('--max-area <area>', 'Maximum area filter', parseFloat) .option('-f, --filter <filter>', 'Filter string in format "key=value,key2=value2"') .option('-p, --extract-params', 'Extract additional parameters') .option('--limit <count>', 'Limit number of results', parseInt) .action(async (options) => { try { const state = await getState(); await executeSelectRooms(state.revitConnector, state.logger, options); } catch (error) { const state = await getState(); state.logger.error('Select rooms command failed:', error); process.exit(1); } }); return command; } /** * Executes the select rooms operation * @param revitConnector - Revit API connector instance * @param logger - Logger instance * @param options - Command options */ async function executeSelectRooms(revitConnector, logger, options) { const roomService = new room_service_js_1.RoomService(revitConnector, logger); // Build filter options const filter = {}; // Parse individual filter options if (options.level) filter.level = options.level; if (options.department) filter.department = options.department; if (options.occupancy) filter.occupancy = options.occupancy; if (options.name) filter.namePattern = options.name; if (options.number) filter.numberPattern = options.number; if (options.minArea !== undefined) filter.minArea = options.minArea; if (options.maxArea !== undefined) filter.maxArea = options.maxArea; // Parse filter string if provided if (options.filter) { const parsedFilter = (0, room_utils_js_1.parseFilterString)(options.filter); Object.assign(filter, parsedFilter); } // Get all rooms const allRooms = await roomService.getAllRooms(); logger.info(`Retrieved ${allRooms.length} total rooms`); // Apply filters let filteredRooms = (0, room_utils_js_1.filterRooms)(allRooms, filter); logger.info(`${filteredRooms.length} rooms match filter criteria`); // Apply limit if specified if (options.limit && options.limit > 0) { filteredRooms = filteredRooms.slice(0, options.limit); logger.info(`Limited results to ${filteredRooms.length} rooms`); } // Display results if (filteredRooms.length === 0) { console.log('No rooms found matching the specified criteria.'); return; } console.log(`\nFound ${filteredRooms.length} rooms:\n`); filteredRooms.forEach((room, index) => { const displayText = (0, room_utils_js_1.formatRoomForDisplay)(room, options.extractParams); console.log(`${index + 1}. ${displayText}`); }); // Display filter summary const activeFilters = Object.entries(filter) .filter(([_, value]) => value !== undefined) .map(([key, value]) => `${key}=${value}`) .join(', '); if (activeFilters) { console.log(`\nActive filters: ${activeFilters}`); } console.log(`\nTotal: ${filteredRooms.length} rooms selected`); } //# sourceMappingURL=select-rooms.js.map