"use strict"; // One entry per interface that is described in full: the page its examples were saved from (test/helpers/fixtures.js) // and declarations that give capability objects of Amazon's discovery examples. // // namespace the interface // page the page of the interface; test/fixtures/alexa-docs// has its examples // declared [{ options, example, page, n }]: device.add(descriptor, options) gives the n-th capability object of // the interface in that discovery example. n counts from 0 and defaults to it, page defaults to the // page of the interface. The pages of RangeController and ModeController fold their discovery // examples away, so they were not saved: the range is taken from an example of the ToggleController // page, and ModeController has none. // // test/registry/descriptors.test.js and test/device/discovery.test.js run the entries. The first one fails for a // descriptor of tier 1 or 2 that has no entry. const { asset, semantics, text } = require("alex2node"); const reported = { retrievable: true, proactivelyReported: true }; const inThreeLanguages = (english, spanish, french) => [text(english, "en-US"), text(spanish, "es-MX"), text(french, "fr-CA")]; module.exports = [ { namespace: "Alexa", page: "alexa-interface", declared: [{ options: {}, example: "discovery" }] }, { namespace: "Alexa.BrightnessController", page: "alexa-brightnesscontroller", declared: [{ options: reported, example: "discovery" }] }, { namespace: "Alexa.EndpointHealth", page: "alexa-endpointhealth", declared: [{ options: reported, example: "discovery" }] }, { namespace: "Alexa.ModeController", page: "alexa-modecontroller", declared: [] }, { namespace: "Alexa.PowerController", page: "alexa-powercontroller", declared: [{ options: reported, example: "discovery" }] }, { namespace: "Alexa.RangeController", page: "alexa-rangecontroller", declared: [{ page: "alexa-togglecontroller", example: "discovery-range-and-toggle", options: { ...reported, instance: "SampleManufacturer.Fan.Speed", friendlyNames: [asset("Alexa.Setting.FanSpeed"), ...inThreeLanguages("Speed", "Velocidad", "Vitesse")], range: { min: 1, max: 10, precision: 1 }, presets: [ { value: 10, friendlyNames: [ asset("Alexa.Value.Maximum"), asset("Alexa.Value.High"), text("Highest"), text("Fast"), text("Alta", "es-MX"), text("Élevée", "fr-CA"), ], }, { value: 1, friendlyNames: [ asset("Alexa.Value.Minimum"), asset("Alexa.Value.Low"), text("Lowest"), text("Slow"), text("Baja", "es-MX"), text("Faible", "fr-CA"), ], }, ], }, }], }, { namespace: "Alexa.TemperatureSensor", page: "alexa-temperaturesensor", declared: [{ options: reported, example: "discovery" }] }, { namespace: "Alexa.ToggleController", page: "alexa-togglecontroller", declared: [ { example: "discovery-oven", options: { ...reported, nonControllable: false, instance: "Oven.OvenLight", friendlyNames: inThreeLanguages("Oven light", "Luz del horno", "Lumière du four"), }, }, { example: "discovery-oven", n: 1, options: { ...reported, nonControllable: true, instance: "Stovetop.ResidualHeat", friendlyNames: inThreeLanguages("Stovetop is still hot", "Todavía está caliente", "Encore chaude"), }, }, { example: "discovery-semantics", options: { ...reported, instance: "GarbageCan.Lid", friendlyNames: inThreeLanguages("Garbage can lid", "Tapa del bote de basura", "Couvercle de poubelle"), semantics: semantics().action("Close", "TurnOff", {}).action("Open", "TurnOn", {}).state("Closed", "OFF").state("Open", "ON"), }, }, { example: "discovery-range-and-toggle", options: { ...reported, instance: "SampleManufacturer.Fan.Oscillate", friendlyNames: [ asset("Alexa.Setting.Oscillate"), text("Rotate"), text("Rotation"), text("Girar", "es-MX"), text("Rotation", "fr-CA"), ], }, }, ], }, ];