UNPKG

revit-cli

Version:

A scalable CLI tool for Revit communication and data manipulation

171 lines 5.52 kB
"use strict"; /** * Utility functions for room operations * Extracted from room-commands.ts for better maintainability */ Object.defineProperty(exports, "__esModule", { value: true }); exports.collectParameters = collectParameters; exports.filterRooms = filterRooms; exports.validateUpdateParameters = validateUpdateParameters; exports.formatRoomForDisplay = formatRoomForDisplay; exports.parseFilterString = parseFilterString; /** * Collects and formats room parameters for display * @param room - The room data object * @param extractParams - Whether to extract additional parameters * @returns Formatted parameter string */ function collectParameters(room, extractParams = false) { const params = []; if (room.level) params.push(`Level=${room.level}`); if (room.area) params.push(`Area=${room.area}`); if (room.volume) params.push(`Volume=${room.volume}`); if (room.comments) params.push(`Comments=${room.comments}`); if (room.department) params.push(`Department=${room.department}`); if (room.occupancy) params.push(`Occupancy=${room.occupancy}`); if (extractParams && room.parameters) { Object.entries(room.parameters).forEach(([key, value]) => { if (value !== null && value !== undefined && value !== '') { params.push(`${key}=${value}`); } }); } return params.join(', '); } /** * Filters rooms based on provided criteria * @param rooms - Array of room data * @param filter - Filter options * @returns Filtered array of rooms */ function filterRooms(rooms, filter) { return rooms.filter(room => { // Level filter if (filter.level && room.level !== filter.level) { return false; } // Department filter if (filter.department && room.department !== filter.department) { return false; } // Occupancy filter if (filter.occupancy && room.occupancy !== filter.occupancy) { return false; } // Name pattern filter if (filter.namePattern) { const regex = new RegExp(filter.namePattern, 'i'); if (!regex.test(room.name)) { return false; } } // Number pattern filter if (filter.numberPattern) { const regex = new RegExp(filter.numberPattern, 'i'); if (!regex.test(room.number)) { return false; } } // Area filters if (filter.minArea !== undefined && room.area < filter.minArea) { return false; } if (filter.maxArea !== undefined && room.area > filter.maxArea) { return false; } return true; }); } /** * Validates room update parameters * @param parameters - Parameters to validate * @returns Validation result with errors if any */ function validateUpdateParameters(parameters) { const errors = []; if (!parameters || Object.keys(parameters).length === 0) { errors.push('At least one parameter must be provided for update'); } // Validate specific parameter types if (parameters.area !== undefined) { const area = Number(parameters.area); if (isNaN(area) || area < 0) { errors.push('Area must be a positive number'); } } if (parameters.volume !== undefined) { const volume = Number(parameters.volume); if (isNaN(volume) || volume < 0) { errors.push('Volume must be a positive number'); } } return { isValid: errors.length === 0, errors }; } /** * Formats room data for console display * @param room - Room data to format * @param includeParameters - Whether to include additional parameters * @returns Formatted string for display */ function formatRoomForDisplay(room, includeParameters = false) { const basicInfo = `${room.name} (${room.number}) - ${room.level}`; if (!includeParameters) { return basicInfo; } const parameters = collectParameters(room, true); return parameters ? `${basicInfo} | ${parameters}` : basicInfo; } /** * Parses filter string into RoomFilterOptions * @param filterString - Filter string in format "key=value,key2=value2" * @returns Parsed filter options */ function parseFilterString(filterString) { const filter = {}; if (!filterString) { return filter; } const pairs = filterString.split(','); for (const pair of pairs) { const [key, value] = pair.split('=').map(s => s.trim()); if (!key || !value) { continue; } switch (key.toLowerCase()) { case 'level': filter.level = value; break; case 'department': filter.department = value; break; case 'occupancy': filter.occupancy = value; break; case 'name': case 'namepattern': filter.namePattern = value; break; case 'number': case 'numberpattern': filter.numberPattern = value; break; case 'minarea': filter.minArea = Number(value); break; case 'maxarea': filter.maxArea = Number(value); break; } } return filter; } //# sourceMappingURL=room-utils.js.map