Alex2Node/dist/esm/registry/index.js
David af1489696d registry: Lock, Color, ColorTemperature, Percentage, PowerLevel, Contact, Motion, Humidity
Eight descriptors written from their pages, each with its version, the value of its property and the payload of
every directive. Seven replace a stub; Alexa.HumiditySensor is new, as AlexaInterfaceType.HUMIDITY_SENSOR.
LockController is deferrable: defer() on a lock logs no warning.

A 1.x declaration of LockController, MotionSensor, PercentageController or PowerLevelController now lists its
property in discovery, where 1.5.2 listed none: the zoo's lock, motion sensor and heater come out as the JSON
Alexa accepted. A payload that does not fit (hue 361, 900 K) is answered with INVALID_VALUE.

48 examples of the eight pages are saved as fixtures. 191 tests pass, 168 before.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-28 20:29:04 +00:00

67 lines
3.1 KiB
JavaScript

// 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 { TemperatureSensor } from "./interfaces/TemperatureSensor.js";
import { ToggleController } from "./interfaces/ToggleController.js";
import { STUBS } from "./interfaces/stubs.js";
import { DeclarationError } from "./types.js";
const described = [
Alexa,
BrightnessController,
ColorController,
ColorTemperatureController,
ContactSensor,
EndpointHealth,
HumiditySensor,
LockController,
ModeController,
MotionSensor,
PercentageController,
PowerController,
PowerLevelController,
RangeController,
TemperatureSensor,
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) {
return descriptors.has(namespace);
},
/** The descriptor of "Alexa.RangeController" or of AlexaInterfaceType.RANGE_CONTROLLER, which is that string. */
get(namespace) {
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() {
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, TemperatureSensor, ToggleController, };
export { asset, text } from "./resources.js";
export { semantics, SemanticsBuilder } from "./semantics.js";
export { DeclarationError, defineInterface } from "./types.js";
export { s, SchemaError } from "./schema.js";
export * from "./catalog.js";