// The interfaces the library knows, by namespace. import { Alexa } from "./interfaces/Alexa.js"; import { BrightnessController } from "./interfaces/BrightnessController.js"; import { ColorController } from "./interfaces/ColorController.js"; import { ColorTemperatureController } from "./interfaces/ColorTemperatureController.js"; import { ContactSensor } from "./interfaces/ContactSensor.js"; import { EndpointHealth } from "./interfaces/EndpointHealth.js"; import { HumiditySensor } from "./interfaces/HumiditySensor.js"; import { LockController } from "./interfaces/LockController.js"; import { ModeController } from "./interfaces/ModeController.js"; import { MotionSensor } from "./interfaces/MotionSensor.js"; import { PercentageController } from "./interfaces/PercentageController.js"; import { PowerController } from "./interfaces/PowerController.js"; import { PowerLevelController } from "./interfaces/PowerLevelController.js"; import { RangeController } from "./interfaces/RangeController.js"; import { SecurityPanelController } from "./interfaces/SecurityPanelController.js"; import { TemperatureSensor } from "./interfaces/TemperatureSensor.js"; import { ThermostatController } from "./interfaces/ThermostatController.js"; import { ThermostatControllerSchedule } from "./interfaces/ThermostatControllerSchedule.js"; import { ToggleController } from "./interfaces/ToggleController.js"; import { STUBS } from "./interfaces/stubs.js"; import { DeclarationError } from "./types.js"; import type { AnyDescriptor } from "./types.js"; const described: readonly AnyDescriptor[] = [ Alexa, BrightnessController, ColorController, ColorTemperatureController, ContactSensor, EndpointHealth, HumiditySensor, LockController, ModeController, MotionSensor, PercentageController, PowerController, PowerLevelController, RangeController, SecurityPanelController, TemperatureSensor, ThermostatController, ThermostatControllerSchedule, ToggleController, ]; const descriptors = new Map(); for (const descriptor of [...described, ...STUBS]) { // A stub left in the table next to the descriptor that replaces it would win or lose by the order of this list if (descriptors.has(descriptor.namespace)) throw new Error(`${descriptor.namespace} is described twice`); descriptors.set(descriptor.namespace, descriptor); } export const registry = { /** Whether an interface of this name is known. */ has(namespace: string): boolean { return descriptors.has(namespace); }, /** The descriptor of "Alexa.RangeController" or of AlexaInterfaceType.RANGE_CONTROLLER, which is that string. */ get(namespace: string): AnyDescriptor { const descriptor = descriptors.get(namespace); if (!descriptor) throw new DeclarationError({}, `${JSON.stringify(namespace)} is not an interface alex2node knows`); return descriptor; }, /** Every descriptor, ordered by namespace. */ list(): AnyDescriptor[] { return [...descriptors.values()].sort((a, b) => (a.namespace < b.namespace ? -1 : 1)); }, }; export { Alexa, BrightnessController, ColorController, ColorTemperatureController, ContactSensor, EndpointHealth, HumiditySensor, LockController, ModeController, MotionSensor, PercentageController, PowerController, PowerLevelController, RangeController, SecurityPanelController, TemperatureSensor, ThermostatController, ThermostatControllerSchedule, ToggleController, }; export type { Mode } from "./interfaces/ModeController.js"; export { THERMOSTAT_MODES } from "./interfaces/ThermostatController.js"; export type { ThermostatModeName } from "./interfaces/ThermostatController.js"; export { asset, text } from "./resources.js"; export { semantics, SemanticsBuilder } from "./semantics.js"; export type { ActionName, StateName } from "./semantics.js"; export { DeclarationError, defineInterface } from "./types.js"; export type { ActionsToDirective, AnyDescriptor, CapabilityExtras, Declared, DirectiveDescriptor, EndpointView, EventDescriptor, InterfaceDescriptor, Label, PropertyDescriptor, Semantics, StatesToRange, StatesToValue, } from "./types.js"; export { s, SchemaError } from "./schema.js"; export type { Infer, Schema, Temperature, TimeInterval } from "./schema.js"; export * from "./catalog.js";