UNPKG

mqtt-discovery-types

Version:
65 lines (60 loc) 3.4 kB
import type { AlarmPanelDiscovery } from "./AlarmPanelDiscovery.ts"; import type { BinarySensorDiscovery } from "./BinarySensorDiscovery.ts"; import type { ButtonDiscovery } from "./ButtonDiscovery.ts"; import type { CameraDiscovery } from "./CameraDiscovery.ts"; import type { CoverDiscovery } from "./CoverDiscovery.ts"; import type { DeviceTrackerDiscovery } from "./DeviceTrackerDiscovery.ts"; import type { DeviceTriggerDiscovery } from "./DeviceTriggerDiscovery.ts"; import type { EventDiscovery } from "./EventDiscovery.ts"; import type { FanDiscovery } from "./FanDiscovery.ts"; import type { HumidifierDiscovery } from "./HumidifierDiscovery.ts"; import type { HVACDiscovery } from "./HVACDiscovery.ts"; import type { ImageDiscovery } from "./ImageDiscovery.ts"; import type { LightDiscovery } from "./LightDiscovery.ts"; import type { LockDiscovery } from "./LockDiscovery.ts"; import type { NumberDiscovery } from "./NumberDiscovery.ts"; import type { SceneDiscovery } from "./SceneDiscovery.ts"; import type { SensorDiscovery } from "./SensorDiscovery.ts"; import type { SirenDiscovery } from "./SirenDiscovery.ts"; import type { SelectDiscovery } from "./SelectDiscovery.ts"; import type { SwitchDiscovery } from "./SwitchDiscovery.ts"; import type { TagScannerDiscovery } from "./TagScannerDiscovery.ts"; import type { TextDiscovery } from "./TextDiscovery.ts"; import type { UpdateDiscovery } from "./UpdateDiscovery.ts"; import type { VacuumDiscovery } from "./VacuumDiscovery.ts"; import type { WaterHeaterDiscovery } from "./WaterHeaterDiscovery.ts"; /** @see https://www.home-assistant.io/integrations/mqtt/#mqtt-discovery */ export type HAEntity = 'alarm_control_panel' | 'binary_sensor' | 'button' | 'camera' | 'climate' | 'cover' | 'device_tracker' | 'device_trigger' | 'event' | 'fan' | 'humidifier' | 'image' | 'light' | 'lock' | 'number' | 'scene' | 'select' | 'sensor' | 'siren' | 'switch' | 'update' | 'tag_scanner' | 'text' | 'vacuum' | 'water_heater'; export type DiscoveryTopic<T extends HAEntity> = `${string}/${T}/${string}/config`; /** * @example * const foo = <T extends HAEntity>(topic: DiscoveryTopic<T>, payload: InferDiscoveryPayload<T>) => ... */ export type InferDiscoveryPayload<T extends HAEntity> = T extends 'alarm_control_panel' ? AlarmPanelDiscovery : T extends 'binary_sensor' ? BinarySensorDiscovery : T extends 'button' ? ButtonDiscovery : T extends 'camera' ? CameraDiscovery : T extends 'climate' ? HVACDiscovery : T extends 'cover' ? CoverDiscovery : T extends 'device_tracker' ? DeviceTrackerDiscovery : T extends 'device_trigger' ? DeviceTriggerDiscovery : T extends 'event' ? EventDiscovery : T extends 'fan' ? FanDiscovery : T extends 'humidifier' ? HumidifierDiscovery : T extends 'image' ? ImageDiscovery : T extends 'light' ? LightDiscovery : T extends 'lock' ? LockDiscovery : T extends 'number' ? NumberDiscovery : T extends 'scene' ? SceneDiscovery : T extends 'select' ? SelectDiscovery : T extends 'sensor' ? SensorDiscovery : T extends 'siren' ? SirenDiscovery : T extends 'switch' ? SwitchDiscovery : T extends 'tag_scanner' ? TagScannerDiscovery : T extends 'text' ? TextDiscovery : T extends 'update' ? UpdateDiscovery : T extends 'vacuum' ? VacuumDiscovery : T extends 'water_heater' ? WaterHeaterDiscovery : never;