homey-lib 2.50.0 → 2.50.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/capability/capabilities/alarm_battery.json +15 -0
- package/assets/capability/capabilities/alarm_bin_full.json +15 -0
- package/assets/capability/capabilities/alarm_bin_missing.json +15 -0
- package/assets/capability/capabilities/alarm_cleaning_pad_missing.json +15 -0
- package/assets/capability/capabilities/alarm_co.json +15 -0
- package/assets/capability/capabilities/alarm_co2.json +15 -0
- package/assets/capability/capabilities/alarm_cold.json +15 -0
- package/assets/capability/capabilities/alarm_connectivity.json +15 -0
- package/assets/capability/capabilities/alarm_contact.json +15 -0
- package/assets/capability/capabilities/alarm_door_fault.json +15 -0
- package/assets/capability/capabilities/alarm_fire.json +15 -0
- package/assets/capability/capabilities/alarm_freeze_risk.json +15 -0
- package/assets/capability/capabilities/alarm_gas.json +15 -0
- package/assets/capability/capabilities/alarm_generic.json +15 -0
- package/assets/capability/capabilities/alarm_heat.json +15 -0
- package/assets/capability/capabilities/alarm_light.json +15 -0
- package/assets/capability/capabilities/alarm_lost.json +15 -0
- package/assets/capability/capabilities/alarm_moisture.json +15 -0
- package/assets/capability/capabilities/alarm_motion.json +15 -0
- package/assets/capability/capabilities/alarm_night.json +15 -0
- package/assets/capability/capabilities/alarm_noise.json +15 -0
- package/assets/capability/capabilities/alarm_occupancy.json +15 -0
- package/assets/capability/capabilities/alarm_open.json +15 -0
- package/assets/capability/capabilities/alarm_pm01.json +15 -0
- package/assets/capability/capabilities/alarm_pm1.json +15 -0
- package/assets/capability/capabilities/alarm_pm10.json +15 -0
- package/assets/capability/capabilities/alarm_pm25.json +15 -0
- package/assets/capability/capabilities/alarm_power.json +15 -0
- package/assets/capability/capabilities/alarm_presence.json +15 -0
- package/assets/capability/capabilities/alarm_problem.json +15 -0
- package/assets/capability/capabilities/alarm_pump_device.json +15 -0
- package/assets/capability/capabilities/alarm_pump_supply.json +15 -0
- package/assets/capability/capabilities/alarm_rain.json +15 -0
- package/assets/capability/capabilities/alarm_running.json +15 -0
- package/assets/capability/capabilities/alarm_safety.json +15 -0
- package/assets/capability/capabilities/alarm_smoke.json +15 -0
- package/assets/capability/capabilities/alarm_stuck.json +15 -0
- package/assets/capability/capabilities/alarm_tamper.json +15 -0
- package/assets/capability/capabilities/alarm_tank_empty.json +15 -0
- package/assets/capability/capabilities/alarm_tank_missing.json +15 -0
- package/assets/capability/capabilities/alarm_tank_open.json +15 -0
- package/assets/capability/capabilities/alarm_vibration.json +15 -0
- package/assets/capability/capabilities/alarm_water.json +15 -0
- package/assets/capability/schema.d.ts +1 -0
- package/assets/capability/schema.json +3 -0
- package/lib/App/index.js +22 -8
- package/package.json +1 -1
- package/types/assets/capability/schema.d.ts +1 -0
- package/types/lib/App/index.d.ts.map +1 -1
- package/webpack/index.js +1 -1
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ar": "إنذار وجود مشكلة",
|
|
16
16
|
"de": "Problem-Alarm"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Problem",
|
|
20
|
+
"nl": "Probleem",
|
|
21
|
+
"da": "Problem",
|
|
22
|
+
"it": "Problema",
|
|
23
|
+
"ko": "이상",
|
|
24
|
+
"no": "Problem",
|
|
25
|
+
"pl": "Problem",
|
|
26
|
+
"ru": "Проблема",
|
|
27
|
+
"sv": "Problem",
|
|
28
|
+
"es": "Problema",
|
|
29
|
+
"fr": "Problème",
|
|
30
|
+
"ar": "وجود مشكلة",
|
|
31
|
+
"de": "Problem"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when a problem is detected.",
|
|
20
35
|
"nl": "Wordt geactiveerd wanneer een probleem wordt gedetecteerd.",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ar": "إنذار عطل جهاز المضخة",
|
|
16
16
|
"de": "Fehleralarm der Pumpvorrichtung"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Pump Device Fault",
|
|
20
|
+
"nl": "Fout bij pompapparaat",
|
|
21
|
+
"da": "Fejl i pumpeenhed",
|
|
22
|
+
"it": "Guasto del dispositivo di pompaggio",
|
|
23
|
+
"ko": "펌프 기기 결함",
|
|
24
|
+
"no": "Feil for pumpeenhet",
|
|
25
|
+
"pl": "Usterka pompy",
|
|
26
|
+
"ru": "Неисправность насосного устройства",
|
|
27
|
+
"sv": "Fel på pumpenhet",
|
|
28
|
+
"es": "Fallo en el dispositivo de bombeo",
|
|
29
|
+
"fr": "Défaillance du dispositif de pompage",
|
|
30
|
+
"ar": "عطل جهاز المضخة",
|
|
31
|
+
"de": "Fehler der Pumpvorrichtung"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when a fault is detected in the pump device.",
|
|
20
35
|
"nl": "Wordt geactiveerd wanneer een fout wordt gedetecteerd in het pompapparaat.",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ar": "إنذار عطل إمداد المضخة",
|
|
16
16
|
"de": "Fehleralarm der Pumpenversorgung"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Pump Supply Fault",
|
|
20
|
+
"nl": "Fout bij pomptoevoer",
|
|
21
|
+
"da": "Fejl i pumpeforsyningen",
|
|
22
|
+
"it": "Guasto alimentazione pompa",
|
|
23
|
+
"ko": "펌프 공급 결함",
|
|
24
|
+
"pl": "Usterka zasilania pompy",
|
|
25
|
+
"ru": "Неисправность в питании насоса",
|
|
26
|
+
"sv": "Fel i pumptillförseln",
|
|
27
|
+
"es": "Fallo en el suministro eléctrico del bombeo",
|
|
28
|
+
"fr": "Défaut d'alimentation de la pompe",
|
|
29
|
+
"no": "Feil for pumpeforsyning",
|
|
30
|
+
"ar": "عطل إمداد المضخة",
|
|
31
|
+
"de": "Fehler der Pumpenversorgung"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when a fault is detected in the pump supply.",
|
|
20
35
|
"nl": "Wordt geactiveerd wanneer een fout wordt gedetecteerd in de pomptoevoer.",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ru": "Сигнализация дождя",
|
|
16
16
|
"sv": "Regnlarm"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Rain",
|
|
20
|
+
"ar": "المطر",
|
|
21
|
+
"da": "Regn",
|
|
22
|
+
"de": "Regen",
|
|
23
|
+
"es": "Lluvia",
|
|
24
|
+
"fr": "Pluie",
|
|
25
|
+
"it": "Pioggia",
|
|
26
|
+
"ko": "강우",
|
|
27
|
+
"nl": "Regen",
|
|
28
|
+
"no": "Regn",
|
|
29
|
+
"pl": "Deszcz",
|
|
30
|
+
"ru": "Дождь",
|
|
31
|
+
"sv": "Regn"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when rain is detected.",
|
|
20
35
|
"ar": "صحيح عند اكتشاف هطول الأمطار.",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ar": "إنذار التشغيل",
|
|
16
16
|
"de": "Laufender Alarm"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Running",
|
|
20
|
+
"nl": "Werkzaamheid",
|
|
21
|
+
"da": "Løbende",
|
|
22
|
+
"it": "In esecuzione",
|
|
23
|
+
"ko": "작동",
|
|
24
|
+
"no": "Kjøring",
|
|
25
|
+
"pl": "Praca urządzenia",
|
|
26
|
+
"ru": "Процесс",
|
|
27
|
+
"sv": "Körs",
|
|
28
|
+
"es": "Funcionamiento",
|
|
29
|
+
"fr": "Fonctionnement",
|
|
30
|
+
"ar": "التشغيل",
|
|
31
|
+
"de": "Läuft"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when the device is busy (e.g., printer is printing).",
|
|
20
35
|
"nl": "Waar wanneer het apparaat bezig is (bijv. printer is aan het printen).",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ar": "إنذار الأمان",
|
|
16
16
|
"de": "Sicherheitsalarm"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Safety",
|
|
20
|
+
"nl": "Veiligheid",
|
|
21
|
+
"da": "Sikkerhed",
|
|
22
|
+
"it": "Sicurezza",
|
|
23
|
+
"ko": "위험",
|
|
24
|
+
"no": "Trygghet",
|
|
25
|
+
"pl": "Bezpieczeństwo",
|
|
26
|
+
"ru": "Тревога",
|
|
27
|
+
"sv": "Säkerhet",
|
|
28
|
+
"es": "Seguridad",
|
|
29
|
+
"fr": "Sécurité",
|
|
30
|
+
"ar": "الأمان",
|
|
31
|
+
"de": "Sicherheit"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when unsafe.",
|
|
20
35
|
"nl": "Wordt geactiveerd wanneer het onveilig is.",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ko": "연기 감지",
|
|
16
16
|
"ar": "إنذار الدخان"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Smoke",
|
|
20
|
+
"nl": "Rook",
|
|
21
|
+
"de": "Rauch",
|
|
22
|
+
"fr": "Fumée",
|
|
23
|
+
"it": "Fumo",
|
|
24
|
+
"sv": "Rök",
|
|
25
|
+
"no": "Røyk",
|
|
26
|
+
"es": "Humo",
|
|
27
|
+
"da": "Røg",
|
|
28
|
+
"ru": "Дым",
|
|
29
|
+
"pl": "Dym",
|
|
30
|
+
"ko": "연기",
|
|
31
|
+
"ar": "الدخان"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when smoke has been detected",
|
|
20
35
|
"nl": "Gaat af als er rook gedetecteerd wordt",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ar": "إنذار التعلق",
|
|
16
16
|
"de": "„Blockiert“-Alarm"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Stuck",
|
|
20
|
+
"nl": "Vastgelopen",
|
|
21
|
+
"da": "Fastlåst",
|
|
22
|
+
"it": "Dispositivo bloccato",
|
|
23
|
+
"ko": "기기 막힘",
|
|
24
|
+
"no": "Fastkjøring",
|
|
25
|
+
"pl": "Zablokowanie",
|
|
26
|
+
"ru": "Заклинивание",
|
|
27
|
+
"sv": "Något fastnat",
|
|
28
|
+
"es": "Atasco",
|
|
29
|
+
"fr": "Appareil bloqué",
|
|
30
|
+
"ar": "التعلق",
|
|
31
|
+
"de": "Blockiert"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when the device is stuck.",
|
|
20
35
|
"nl": "Gaat af als het apparaat is vastgelopen.",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ko": "변화 감지",
|
|
16
16
|
"ar": "إنذار التلاعب"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Tamper",
|
|
20
|
+
"nl": "Sabotage",
|
|
21
|
+
"de": "Manipulation",
|
|
22
|
+
"fr": "Sabotage",
|
|
23
|
+
"it": "Manomissione",
|
|
24
|
+
"sv": "Sabotage",
|
|
25
|
+
"no": "Sabotasje",
|
|
26
|
+
"es": "Manipulación",
|
|
27
|
+
"da": "Sabotage",
|
|
28
|
+
"ru": "Несанкционированный доступ",
|
|
29
|
+
"pl": "Antyingerencja",
|
|
30
|
+
"ko": "변화",
|
|
31
|
+
"ar": "التلاعب"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when tampering has been detected",
|
|
20
35
|
"nl": "Gaat af als sabotage gedetecteerd wordt",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ar": "إنذار الخزان الفارغ",
|
|
16
16
|
"de": "Alarm Tank leer"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Tank Empty",
|
|
20
|
+
"nl": "Lege tank",
|
|
21
|
+
"da": "Tom tank",
|
|
22
|
+
"it": "Serbatoio vuoto",
|
|
23
|
+
"ko": "물통 물 부족",
|
|
24
|
+
"no": "Tom tank",
|
|
25
|
+
"pl": "Pusty zbiornik",
|
|
26
|
+
"ru": "Пустой резервуар",
|
|
27
|
+
"sv": "Tom tank",
|
|
28
|
+
"es": "Depósito vacío",
|
|
29
|
+
"fr": "Réservoir vide",
|
|
30
|
+
"ar": "الخزان الفارغ",
|
|
31
|
+
"de": "Tank leer"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when the tank is empty.",
|
|
20
35
|
"nl": "Wordt geactiveerd wanneer de tank leeg is.",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ar": "إنذار فقد الخزان",
|
|
16
16
|
"de": "Alarm bei fehlendem Tank"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Tank Missing",
|
|
20
|
+
"nl": "Ontbrekende tank",
|
|
21
|
+
"da": "Manglende tank",
|
|
22
|
+
"it": "Serbatoio mancante",
|
|
23
|
+
"ko": "물통 분리",
|
|
24
|
+
"no": "Manglende tank",
|
|
25
|
+
"pl": "Brak zbiornika",
|
|
26
|
+
"ru": "Отсутствие резервуара",
|
|
27
|
+
"sv": "Saknad tank",
|
|
28
|
+
"es": "Depósito no instalado",
|
|
29
|
+
"fr": "Réservoir manquant",
|
|
30
|
+
"ar": "فقد الخزان",
|
|
31
|
+
"de": "Fehlender Tank"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when the tank is missing.",
|
|
20
35
|
"nl": "Wordt geactiveerd wanneer de tank ontbreekt.",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ar": "إنذار فتح الخزان",
|
|
16
16
|
"de": "Alarm Tank offen"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Tank Open",
|
|
20
|
+
"nl": "Open tank",
|
|
21
|
+
"da": "Åben tank",
|
|
22
|
+
"it": "Serbatoio aperto",
|
|
23
|
+
"ko": "물통 열림",
|
|
24
|
+
"no": "Åpen tank",
|
|
25
|
+
"pl": "Otwarty zbiornik",
|
|
26
|
+
"ru": "Открытие резервуара",
|
|
27
|
+
"sv": "Öppen tank",
|
|
28
|
+
"es": "Depósito abierto",
|
|
29
|
+
"fr": "Réservoir ouvert",
|
|
30
|
+
"ar": "فتح الخزان",
|
|
31
|
+
"de": "Tank offen"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when the tank is open.",
|
|
20
35
|
"nl": "Wordt geactiveerd wanneer de tank open is.",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ar": "إنذار الاهتزاز",
|
|
16
16
|
"de": "Vibrationsalarm"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Vibration",
|
|
20
|
+
"nl": "Trilling",
|
|
21
|
+
"da": "Vibration",
|
|
22
|
+
"it": "Vibrazione",
|
|
23
|
+
"ko": "진동",
|
|
24
|
+
"no": "Vibrasjon",
|
|
25
|
+
"pl": "Wibracje",
|
|
26
|
+
"ru": "Вибрация",
|
|
27
|
+
"sv": "Vibration",
|
|
28
|
+
"es": "Vibración",
|
|
29
|
+
"fr": "Vibration",
|
|
30
|
+
"ar": "الاهتزاز",
|
|
31
|
+
"de": "Vibration"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when vibration is detected.",
|
|
20
35
|
"nl": "Wordt geactiveerd wanneer trilling wordt gedetecteerd.",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"ko": "누수 감지",
|
|
16
16
|
"ar": "إنذار المياه"
|
|
17
17
|
},
|
|
18
|
+
"titleShort": {
|
|
19
|
+
"en": "Water",
|
|
20
|
+
"nl": "Water",
|
|
21
|
+
"de": "Wasser",
|
|
22
|
+
"fr": "Eau",
|
|
23
|
+
"it": "Acqua",
|
|
24
|
+
"sv": "Vatten",
|
|
25
|
+
"no": "Vann",
|
|
26
|
+
"es": "Agua",
|
|
27
|
+
"da": "Vand",
|
|
28
|
+
"ru": "Вода",
|
|
29
|
+
"pl": "Zalanie wodą",
|
|
30
|
+
"ko": "누수",
|
|
31
|
+
"ar": "المياه"
|
|
32
|
+
},
|
|
18
33
|
"desc": {
|
|
19
34
|
"en": "True when water has been detected",
|
|
20
35
|
"nl": "Gaat af als er water gedetecteerd wordt",
|
package/lib/App/index.js
CHANGED
|
@@ -149,6 +149,8 @@ class App {
|
|
|
149
149
|
throw new Error('Invalid compatibility');
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
+
const appCompatibilityMinVersion = semver.minVersion(appJson.compatibility);
|
|
153
|
+
|
|
152
154
|
if (appJson.esm === true && semver.lt(semver.coerce(appJson.compatibility), '12.0.1')) {
|
|
153
155
|
throw new Error('ESM apps require a compatibility of at least >=12.0.1');
|
|
154
156
|
}
|
|
@@ -220,19 +222,15 @@ class App {
|
|
|
220
222
|
|
|
221
223
|
// validate sdk v3 apps have compatibility of at least >=5.0.0
|
|
222
224
|
if (appJson.sdk === 3) {
|
|
223
|
-
// lowest version that satisfies the compatibility
|
|
224
|
-
const minVersion = semver.minVersion(appJson.compatibility);
|
|
225
|
-
|
|
226
225
|
// lowest version must be greater than or equal to 5.0.0 for sdk v3 apps
|
|
227
|
-
if (!semver.gt(
|
|
226
|
+
if (!semver.gt(appCompatibilityMinVersion, '4.2.0')) {
|
|
228
227
|
throw new Error(`Invalid compatibility (${appJson.compatibility}), SDK version 3 apps must have a compatibility of at least >=5.0.0`);
|
|
229
228
|
}
|
|
230
229
|
}
|
|
231
230
|
|
|
232
231
|
// validate that Python apps target compatibility of at least >=13.0.0
|
|
233
232
|
if (appJson.runtime === 'python') {
|
|
234
|
-
|
|
235
|
-
if (!semver.gte(minVersion, '13.0.0')) {
|
|
233
|
+
if (!semver.gte(appCompatibilityMinVersion, '13.0.0')) {
|
|
236
234
|
throw new Error(`Invalid compatibility (${appJson.compatibility}), Python apps must have a compatibility of at least >=13.0.0`);
|
|
237
235
|
}
|
|
238
236
|
}
|
|
@@ -242,6 +240,14 @@ class App {
|
|
|
242
240
|
throw new Error(`Invalid sdk (${appJson.sdk}), Python apps must use sdk version 3`);
|
|
243
241
|
}
|
|
244
242
|
|
|
243
|
+
if (appJson.capabilities) {
|
|
244
|
+
for (const [capabilityId, capability] of Object.entries(appJson.capabilities)) {
|
|
245
|
+
if (capability.titleShort !== undefined && semver.lt(appCompatibilityMinVersion, '13.2.1')) {
|
|
246
|
+
throw new Error(`capabilities.${capabilityId}.titleShort requires a compatibility of at least >=13.2.1`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
245
251
|
App.validatePythonVersion(appJson);
|
|
246
252
|
|
|
247
253
|
// Validate that Python apps have cross-platform venvs
|
|
@@ -353,7 +359,7 @@ class App {
|
|
|
353
359
|
throw new Error(`drivers.${driver.id} invalid driver class: ${driver.class}`);
|
|
354
360
|
}
|
|
355
361
|
|
|
356
|
-
if (allowedClasses[driver.class].minCompatibility && semver.lt(
|
|
362
|
+
if (allowedClasses[driver.class].minCompatibility && semver.lt(appCompatibilityMinVersion, allowedClasses[driver.class].minCompatibility)) {
|
|
357
363
|
// Compatibility must be greater than or equal to the minimum required compatibility
|
|
358
364
|
throw new Error(`drivers.${driver.id} driver class: ${driver.class} is not available for compatibility ${appJson.compatibility}, requires minimum: ${allowedClasses[driver.class].minCompatibility}`);
|
|
359
365
|
}
|
|
@@ -368,7 +374,7 @@ class App {
|
|
|
368
374
|
throw new Error(`drivers.${driver.id} invalid capability: ${capability}`);
|
|
369
375
|
}
|
|
370
376
|
|
|
371
|
-
if (isSystemCapability && !isAppCapability && allowedCapabilities[capabilityId].minCompatibility && semver.lt(
|
|
377
|
+
if (isSystemCapability && !isAppCapability && allowedCapabilities[capabilityId].minCompatibility && semver.lt(appCompatibilityMinVersion, allowedCapabilities[capabilityId].minCompatibility)) {
|
|
372
378
|
// Compatibility must be greater than or equal to the minimum required compatibility
|
|
373
379
|
throw new Error(`drivers.${driver.id} capability: ${capabilityId} is not available for compatibility ${appJson.compatibility}, requires minimum: ${allowedCapabilities[capabilityId].minCompatibility}`);
|
|
374
380
|
}
|
|
@@ -386,6 +392,14 @@ class App {
|
|
|
386
392
|
// validate `appJson.drivers[].capabilitiesOptions`
|
|
387
393
|
if (driver.capabilitiesOptions) {
|
|
388
394
|
for (const [capabilityId, capabilityOptions] of Object.entries(driver.capabilitiesOptions)) {
|
|
395
|
+
if (capabilityOptions === null || typeof capabilityOptions !== 'object' || Array.isArray(capabilityOptions)) {
|
|
396
|
+
throw new Error(`drivers.${driver.id}.capabilitiesOptions.${capabilityId} must be an object`);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
if (capabilityOptions.titleShort !== undefined && semver.lt(appCompatibilityMinVersion, '13.2.1')) {
|
|
400
|
+
throw new Error(`drivers.${driver.id}.capabilitiesOptions.${capabilityId}.titleShort requires a compatibility of at least >=13.2.1`);
|
|
401
|
+
}
|
|
402
|
+
|
|
389
403
|
// Validate target_power_mode values - require homey, at least one non-homey, no reserved prefixes
|
|
390
404
|
if (Capability.isInstanceOfId(capabilityId, 'target_power_mode') && Array.isArray(capabilityOptions.values)) {
|
|
391
405
|
const hasHomey = capabilityOptions.values.some(v => v && typeof v === 'object' && v.id === 'homey');
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/App/index.js"],"names":[],"mappings":";AA8EA;IACE,2CAAqD;IACrD,2CAAmD;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/App/index.js"],"names":[],"mappings":";AA8EA;IACE,2CAAqD;IACrD,2CAAmD;IAy2BnD;;;OAGG;IACH,sCAHW,WAAW,GACT,IAAI,CAOhB;IA4PD;;;;;OAKG;IACH,4CALW,MAAM,QACN;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,aAClB,MAAM,GACJ,IAAI,CAkChB;IAiBD;;;OAGG;IACH,wBAHW,MAAM,GACJ,OAAO,CAQnB;IAED;;;OAGG;IACH,gCAHW,MAAM,GACJ,OAAO,CAInB;IAED;;OAEG;IACH,wBAFa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMnC;IAED;;OAEG;IACH,yBAFa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAcnD;IAED;;OAEG;IACH,wBAFa,MAAM,EAAE,CAIpB;IAED;;OAEG;IACH,qBAFa,MAAM,EAAE,CAKpB;IAED;;;OAGG;IACH,4BAHW,MAAM,GACJ,MAAM,CAuBlB;IAED;;;;OAIG;IACH,0BAJW,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,WAC1C,WAAW,GACT,MAAM,GAAG,IAAI,CAyDzB;IAvzCD;;OAEG;IACH,kBAFW,MAAM,EAQhB;IALC,cAAiB;IAOnB;;;OAGG;IACH,eAHc,OAAO,EAAA,GACR,IAAI,CAKhB;IAED;;;OAGG;IACH,6BAHW;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3D,OAAO,CAAC,IAAI,CAAC,CA+0BzB;IAz0BC,gBAAmB;IAs1BrB;;;;OAIG;IACH,uCAJW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UACvB;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GACZ,IAAI,CAwBhB;IAED;;;;OAIG;IACH,8BAJW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,WAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GACxC,IAAI,CAuBhB;IAED;;;OAGG;IACH,gCAHW,MAAM,GACJ,OAAO,CAAC,MAAM,EAAE,CAAC,CAY7B;IAED;;;OAGG;IACH,yCAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAOzB;IAED;;;OAGG;IACH,mCAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAe5B;IAED;;;;;OAKG;IACH,2BALW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,QAChC,KAAK,GAAG,QAAQ,cAChB,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CA6BzB;IAED;;OAEG;IACH,oBAFa,OAAO,CAAC,IAAI,CAAC,CAuBzB;IAED;;;;;;OAMG;IACH,wBANW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,aACvB,MAAM,WACN,WAAW,mCACX;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,GAC/C,IAAI,CA+EhB;IA0CD;;;;OAIG;IACH,qBAJW,MAAM,YACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAU3B;CAwJF;;;;mBAz2Ca,OAAO,yBAAyB,EAAE,GAAG"}
|