homey-lib 2.50.1 → 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/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(minVersion, '4.2.0')) {
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
- const minVersion = semver.minVersion(appJson.compatibility);
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(semver.minVersion(appJson.compatibility), allowedClasses[driver.class].minCompatibility)) {
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(semver.minVersion(appJson.compatibility), allowedCapabilities[capabilityId].minCompatibility)) {
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,6 +1,6 @@
1
1
  {
2
2
  "name": "homey-lib",
3
- "version": "2.50.1",
3
+ "version": "2.50.2",
4
4
  "description": "Shared Library for Homey",
5
5
  "types": "types/index.d.ts",
6
6
  "main": "index.js",
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/App/index.js"],"names":[],"mappings":";AA8EA;IACE,2CAAqD;IACrD,2CAAmD;IA21BnD;;;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;IAzyCD;;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,CAi0BzB;IA3zBC,gBAAmB;IAw0BrB;;;;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;;;;mBA31Ca,OAAO,yBAAyB,EAAE,GAAG"}
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"}