UNPKG

@switchbot/homebridge-switchbot

Version:

The SwitchBot plugin allows you to access your SwitchBot device(s) from HomeKit.

111 lines 3.95 kB
import { DEVICE_TYPES, isValidDeviceType, normalizeDeviceType } from '../../device-types.js'; /** * Validate and optionally correct a device's configDeviceType * @param device Device object from config * @param autoCorrect Whether to auto-correct invalid types * @returns Migration result with details */ export function validateAndMigrateDeviceType(device, autoCorrect = false) { const originalType = device.configDeviceType; const deviceId = device.deviceId || device.id || 'unknown'; // Check if type is valid if (isValidDeviceType(originalType)) { return { migrated: false, originalType, correctedType: originalType, message: `Device "${device.configDeviceName || deviceId}" type is valid`, }; } // Try to find a valid mapping const correctedType = normalizeDeviceType(originalType); if (!correctedType) { return { migrated: false, originalType, correctedType: null, message: `Device "${device.configDeviceName || deviceId}" has invalid type "${originalType}" with no valid mapping`, }; } // Found a valid mapping if (autoCorrect) { device.configDeviceType = correctedType; return { migrated: true, originalType, correctedType, message: `Device "${device.configDeviceName || deviceId}" type auto-corrected: "${originalType}""${correctedType}"`, }; } else { return { migrated: false, originalType, correctedType, message: `Device "${device.configDeviceName || deviceId}" requires migration: "${originalType}""${correctedType}"`, }; } } /** * Validate all devices in config and optionally auto-correct invalid types * @param config Configuration object containing devices array * @param autoCorrect Whether to auto-correct invalid types * @returns Array of migration results with statistics */ export function validateAndMigrateConfig(config, autoCorrect = false) { const results = []; const warnings = []; let validCount = 0; let correctedCount = 0; let invalidCount = 0; if (!config?.devices || !Array.isArray(config.devices)) { return { results, statistics: { total: 0, valid: 0, corrected: 0, invalid: 0, }, warnings: ['No devices found in config'], }; } for (const device of config.devices) { const result = validateAndMigrateDeviceType(device, autoCorrect); results.push(result); if (!result.originalType || isValidDeviceType(result.originalType)) { validCount++; } else if (result.migrated) { correctedCount++; } else if (result.correctedType) { warnings.push(`Device "${device.configDeviceName || device.deviceId}" needs correction: "${result.originalType}""${result.correctedType}"`); invalidCount++; } else { invalidCount++; warnings.push(`Device "${device.configDeviceName || device.deviceId}" has INVALID type "${result.originalType}" with no mapping`); } } // Validation complete - results and warnings are returned via return value // Caller (config endpoint) will handle logging/reporting return { results, statistics: { total: config.devices.length, valid: validCount, corrected: correctedCount, invalid: invalidCount, }, warnings, }; } /** * Get list of all valid device types for error messages * @returns Array of valid device types grouped by category */ export function getValidDeviceTypesList() { return DEVICE_TYPES; } //# sourceMappingURL=device-migration.js.map