From bef239227d57238b9496888b7bd8316d6045796b Mon Sep 17 00:00:00 2001 From: Pierpaolo Follia Date: Wed, 1 Jul 2020 20:33:24 +0200 Subject: [PATCH] [Fix] fix thermo and dehumidifier update (#21) --- package.json | 13 +-- src/accessories/__tests__/thermostat.test.ts | 3 + src/accessories/comelit.ts | 12 ++- src/accessories/dehumidifier.ts | 53 +++++----- src/accessories/thermostat.ts | 78 +++++++------- src/comelit-platform.ts | 18 ++-- yarn.lock | 104 +++++++++++++++++-- 7 files changed, 186 insertions(+), 95 deletions(-) create mode 100644 src/accessories/__tests__/thermostat.test.ts diff --git a/package.json b/package.json index bd322d0..352ab94 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homebridge-comelit-platform", - "version": "2.1.0", + "version": "2.2.0", "author": "Pierpaolo Follia", "repository": { "type": "git", @@ -38,13 +38,13 @@ }, "dependencies": { "@sentry/node": "5.12.2", - "async-mqtt": "^2.4.2", - "comelit-client": "1.6.2", + "async-mqtt": "^2.6.1", + "comelit-client": "1.7.2", "express": "^4.17.1", "lodash": "^4.17.15", - "mqtt": "^3.0.0", - "mqtt-packet": "^6.3.0", - "prom-client": "^11.5.3", + "mqtt": "^4.1.0", + "mqtt-packet": "^6.3.2", + "prom-client": "^12.0.0", "typescript": "^3.7.4" }, "devDependencies": { @@ -52,6 +52,7 @@ "@types/lodash": "^4.14.149", "@types/mqtt": "^2.5.0", "@types/node": "^11.15.3", + "@types/jest": "^25.2.3", "@typescript-eslint/eslint-plugin": "^2.14.0", "@typescript-eslint/parser": "^2.14.0", "hap-nodejs": "^0.7.3", diff --git a/src/accessories/__tests__/thermostat.test.ts b/src/accessories/__tests__/thermostat.test.ts new file mode 100644 index 0000000..9d5cc58 --- /dev/null +++ b/src/accessories/__tests__/thermostat.test.ts @@ -0,0 +1,3 @@ +describe('Thermostat', () => { + it('should update thermostat status', async () => {}); +}); diff --git a/src/accessories/comelit.ts b/src/accessories/comelit.ts index 746d8f4..99558bd 100644 --- a/src/accessories/comelit.ts +++ b/src/accessories/comelit.ts @@ -1,8 +1,15 @@ import { ComelitClient, DeviceData } from 'comelit-client'; -import { AccessoryPlugin, Controller, Logger, PlatformAccessory, Service } from 'homebridge'; +import { + AccessoryPlugin, + Controller, + Logger, + PlatformAccessory, + PlatformAccessoryEvent, + Service, +} from 'homebridge'; import { ComelitPlatform } from '../comelit-platform'; -export abstract class ComelitAccessory implements AccessoryPlugin { +export abstract class ComelitAccessory { readonly platform: ComelitPlatform; readonly accessory: PlatformAccessory; readonly log: Logger; @@ -24,6 +31,7 @@ export abstract class ComelitAccessory implements Accessor this.client = client; this.services = this.initServices(); this.reachable = true; + this.accessory.on(PlatformAccessoryEvent.IDENTIFY, () => this.identify()); } getServices(): Service[] { diff --git a/src/accessories/dehumidifier.ts b/src/accessories/dehumidifier.ts index 1882c5c..8a73b0a 100644 --- a/src/accessories/dehumidifier.ts +++ b/src/accessories/dehumidifier.ts @@ -1,5 +1,12 @@ import { ComelitAccessory } from './comelit'; -import { ClimaMode, ClimaOnOff, ComelitClient, ThermostatDeviceData } from 'comelit-client'; +import { + ClimaMode, + ClimaOnOff, + ComelitClient, + STATUS_ON, + ThermoSeason, + ThermostatDeviceData, +} from 'comelit-client'; import client from 'prom-client'; import { ComelitPlatform } from '../comelit-platform'; import { CharacteristicEventTypes, PlatformAccessory, Service, VoidCallback } from 'homebridge'; @@ -105,10 +112,18 @@ export class Dehumidifier extends ComelitAccessory { public update(data: ThermostatDeviceData): void { const Characteristic = this.platform.Characteristic; - const isOff = this.isOff(data); - const isAuto = this.isAuto(data); - this.log.info( - `Dehumidifier ${this.accessory.displayName} auto mode is ${isAuto}, off ${isOff}` + const auto_man = data.auto_man_umi; + const isOff = auto_man === ClimaMode.OFF_AUTO || auto_man === ClimaMode.OFF_MANUAL; + const isOn = auto_man === ClimaMode.AUTO || auto_man === ClimaMode.MANUAL; + const isAuto = auto_man === ClimaMode.OFF_AUTO || auto_man === ClimaMode.AUTO; + const isWorking = isOn && data.status === STATUS_ON; + + console.log( + `Dehumidifier status is ${isOff ? 'OFF' : 'ON'}, ${ + isAuto ? 'auto mode' : 'manual mode' + }, Humidity level ${parseInt(data.umidita)}%, threshold ${ + data.soglia_attiva_umi + }%\nGeneral status is ${data.status === '1' ? 'ON' : 'OFF'}` ); this.dehumidifierService @@ -125,34 +140,18 @@ export class Dehumidifier extends ComelitAccessory { .updateValue( isOff ? CurrentHumidifierDehumidifierState.INACTIVE - : isAuto - ? CurrentHumidifierDehumidifierState.IDLE - : CurrentHumidifierDehumidifierState.DEHUMIDIFYING + : isWorking + ? CurrentHumidifierDehumidifierState.DEHUMIDIFYING + : CurrentHumidifierDehumidifierState.IDLE ); this.dehumidifierService .getCharacteristic(Characteristic.TargetHumidifierDehumidifierState) - .updateValue( - isAuto - ? TargetHumidifierDehumidifierState.HUMIDIFIER_OR_DEHUMIDIFIER - : TargetHumidifierDehumidifierState.DEHUMIDIFIER - ); + .updateValue(TargetHumidifierDehumidifierState.DEHUMIDIFIER); this.dehumidifierService .getCharacteristic(Characteristic.Active) - .updateValue(isOff ? Active.INACTIVE : Active.ACTIVE); + .updateValue(isWorking ? Active.INACTIVE : Active.ACTIVE); - dehumidifierStatus.set({ dehumidifier_name: data.descrizione }, isOff ? 0 : 1); + dehumidifierStatus.set({ dehumidifier_name: data.descrizione }, isWorking ? 0 : 1); dehumidifierHumidity.set({ dehumidifier_name: data.descrizione }, parseInt(data.umidita)); } - - private isAuto(data: ThermostatDeviceData) { - return data.auto_man_umi === ClimaMode.AUTO; - } - - private isOff(data: ThermostatDeviceData) { - return ( - data.auto_man_umi === ClimaMode.OFF_MANUAL || - data.auto_man_umi === ClimaMode.NONE || - data.auto_man_umi === ClimaMode.OFF_AUTO - ); - } } diff --git a/src/accessories/thermostat.ts b/src/accessories/thermostat.ts index 59a231b..192c99b 100644 --- a/src/accessories/thermostat.ts +++ b/src/accessories/thermostat.ts @@ -10,7 +10,7 @@ import { import { TargetHeatingCoolingState, TemperatureDisplayUnits } from './hap'; import client from 'prom-client'; import { ComelitPlatform } from '../comelit-platform'; -import { PlatformAccessory, CharacteristicEventTypes, Service, VoidCallback } from 'homebridge'; +import { CharacteristicEventTypes, PlatformAccessory, Service, VoidCallback } from 'homebridge'; const thermostatStatus = new client.Gauge({ name: 'comelit_thermostat_status', @@ -43,14 +43,7 @@ export class Thermostat extends ComelitAccessory { .getCharacteristic(Characteristic.TargetTemperature) .on(CharacteristicEventTypes.SET, async (temperature: number, callback: VoidCallback) => { try { - const currentTemperature = this.thermostatService.getCharacteristic( - Characteristic.TargetTemperature - ).value; - const normalizedTemp = temperature * 10; - if (currentTemperature !== temperature) { - await this.client.setTemperature(this.device.id, normalizedTemp); - this.device.temperatura = `${normalizedTemp}`; - } + await this.setTargetTemperature(temperature); callback(); } catch (e) { callback(e); @@ -103,24 +96,44 @@ export class Thermostat extends ComelitAccessory { return [accessoryInformation, this.thermostatService]; } + private async setTargetTemperature(temperature: number) { + const Characteristic = this.platform.Characteristic; + const currentTemperature = this.thermostatService.getCharacteristic( + Characteristic.TargetTemperature + ).value; + const normalizedTemp = temperature * 10; + if (currentTemperature !== temperature) { + await this.client.setTemperature(this.device.id, normalizedTemp); + this.device.temperatura = `${normalizedTemp}`; + } + } + public update(data: ThermostatDeviceData): void { const Characteristic = this.platform.Characteristic; - const currentCoolingState = this.isOff() + + const auto_man = data.auto_man; + const isOff = auto_man === ClimaMode.OFF_AUTO || auto_man === ClimaMode.OFF_MANUAL; + const isWinter = data.est_inv === ThermoSeason.WINTER; + const isAuto = auto_man === ClimaMode.OFF_AUTO || auto_man === ClimaMode.AUTO; + const isOn = auto_man === ClimaMode.AUTO || auto_man === ClimaMode.MANUAL; + const isWorking = isOn && data.status === STATUS_ON; + + const currentCoolingState = isOff ? TargetHeatingCoolingState.OFF - : this.isWinter() + : isWinter ? TargetHeatingCoolingState.HEAT : TargetHeatingCoolingState.COOL; this.thermostatService .getCharacteristic(Characteristic.CurrentHeatingCoolingState) .updateValue(currentCoolingState); - let targetState; - if (this.isOff()) { + let targetState: TargetHeatingCoolingState; + if (isOff || !isWorking) { targetState = TargetHeatingCoolingState.OFF; - } else if (this.isAuto()) { + } else if (isAuto) { targetState = TargetHeatingCoolingState.AUTO; } else { - if (this.isWinter()) { + if (isWinter) { targetState = TargetHeatingCoolingState.HEAT; } else { targetState = TargetHeatingCoolingState.COOL; @@ -130,18 +143,19 @@ export class Thermostat extends ComelitAccessory { .getCharacteristic(Characteristic.TargetHeatingCoolingState) .updateValue(targetState); - console.log( - `Current cooling state is now ${currentCoolingState}, target state is ${targetState}` - ); const temperature = data.temperatura ? parseFloat(data.temperatura) / 10 : 0; - this.log.info(`Temperature for ${this.accessory.displayName} is ${temperature}`); + const targetTemperature = data.soglia_attiva ? parseFloat(data.soglia_attiva) / 10 : 0; + this.log.info( + `${data.objectId} - ${this.accessory.displayName}:\nThermostat status ${ + isOff ? 'OFF' : 'ON' + }, ${isAuto ? 'auto mode' : 'manual mode'}, ${ + data.est_inv === ThermoSeason.WINTER ? 'winter' : 'summer' + }, Temperature ${temperature}°, threshold ${targetTemperature}°` + ); this.thermostatService .getCharacteristic(Characteristic.CurrentTemperature) .updateValue(temperature); - const activeThreshold = data.soglia_attiva; - const targetTemperature = activeThreshold ? parseFloat(activeThreshold) / 10 : 0; - this.log.info(`Threshold for ${this.accessory.displayName} is ${targetTemperature}`); this.thermostatService .getCharacteristic(Characteristic.TargetTemperature) .updateValue(targetTemperature); @@ -149,25 +163,7 @@ export class Thermostat extends ComelitAccessory { .getCharacteristic(Characteristic.TemperatureDisplayUnits) .updateValue(TemperatureDisplayUnits.CELSIUS); - thermostatStatus.set({ thermostat_name: data.descrizione }, parseInt(this.device.status)); + thermostatStatus.set({ thermostat_name: data.descrizione }, isWorking ? 0 : 1); thermostatTemperature.set({ thermostat_name: data.descrizione }, temperature); } - - isOff(): boolean { - return ( - this.device.auto_man === ClimaMode.OFF_AUTO || this.device.auto_man === ClimaMode.OFF_MANUAL - ); - } - - isRunning(): boolean { - return this.device.status === STATUS_ON; - } - - isAuto(): boolean { - return this.device.auto_man === ClimaMode.OFF_AUTO || this.device.auto_man === ClimaMode.AUTO; - } - - isWinter(): boolean { - return this.device.est_inv === ThermoSeason.WINTER; - } } diff --git a/src/comelit-platform.ts b/src/comelit-platform.ts index f177004..39fbfbd 100644 --- a/src/comelit-platform.ts +++ b/src/comelit-platform.ts @@ -109,7 +109,7 @@ export class ComelitPlatform implements DynamicPlatformPlugin { this.mappedNames = {}; await this.login(); this.log.info('Building accessories list...'); - const homeIndex = await this.client.fecthHomeIndex(); + const homeIndex = await this.client.fetchHomeIndex(); if (this.config.hide_lights !== true) { this.mapLights(homeIndex); } @@ -290,14 +290,14 @@ export class ComelitPlatform implements DynamicPlatformPlugin { await this.shutdown(); this.log.info('Creating MQTT client and logging in...'); this.client = this.client || new ComelitClient(this.updateAccessory.bind(this), this.log); - await this.client.init( - this.config.broker_url, - this.config.username, - this.config.password, - this.config.hub_username, - this.config.hub_password, - this.config.client_id - ); + await this.client.init({ + host: this.config.broker_url, + username: this.config.username, + password: this.config.password, + hub_username: this.config.hub_username, + hub_password: this.config.hub_password, + clientId: this.config.client_id, + }); if (!this.server && this.config.export_prometheus_metrics) { this.server = expr.listen(this.config.exporter_http_port || DEFAULT_HTTP_PORT); } diff --git a/yarn.lock b/yarn.lock index 4f10df3..2b1ef54 100644 --- a/yarn.lock +++ b/yarn.lock @@ -352,6 +352,16 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + "@sentry/apm@5.12.2": version "5.12.2" resolved "https://registry.yarnpkg.com/@sentry/apm/-/apm-5.12.2.tgz#6e1de4fb012bbfcaa053ae598ccd7e7fbc036b01" @@ -527,6 +537,14 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" +"@types/jest@^25.2.3": + version "25.2.3" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf" + integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw== + dependencies: + jest-diff "^25.2.1" + pretty-format "^25.2.1" + "@types/json-schema@^7.0.3": version "7.0.4" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" @@ -604,6 +622,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^15.0.0": + version "15.0.5" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" + integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== + dependencies: + "@types/yargs-parser" "*" + "@typescript-eslint/eslint-plugin@^2.14.0": version "2.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.27.0.tgz#e479cdc4c9cf46f96b4c287755733311b0d0ba4b" @@ -854,6 +879,13 @@ async-mqtt@^2.4.2: dependencies: mqtt "^2.3.1" +async-mqtt@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/async-mqtt/-/async-mqtt-2.6.1.tgz#7cca37b0c766e00d7b0b33c9eb236e216ed06248" + integrity sha512-EkXAwRzwMaPC6ji0EvNeM5OMe6VjMhEKVJJUN7gu/hGzkcDpZtaI34nUwdwCMbjQB3pnuSOHqQMFKsUpg+D8kA== + dependencies: + mqtt "^4.1.0" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1212,10 +1244,10 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -comelit-client@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/comelit-client/-/comelit-client-1.6.2.tgz#8026e25418f207d6b633f572b5c9c61116fabf67" - integrity sha512-4WiwdaE+bVQg+RpEOV7Y5ycbJ40m8xw6BuTPy3RoR0CNFuaGsVIYZ3xkpF0i6G0VryQVJe/H+tQazE65jIr+jA== +comelit-client@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/comelit-client/-/comelit-client-1.7.2.tgz#73c260dee63f6df48bda6221a33f190b76084eb7" + integrity sha512-2LWz7mcPG8yccx4HlYIABd8adCsOyRJSbHhJljudDX15Ertyvecr/F4cvNA0CHLXFkTn1+yU2DpqJcmaGeyyFg== dependencies: "@sentry/node" "5.12.2" async-mqtt "^2.4.2" @@ -1492,6 +1524,11 @@ diff-sequences@^24.9.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== +diff-sequences@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" + integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== + dns-packet@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-4.2.0.tgz#3fd6f5ff5a4ec3194ed0b15312693ffe8776b343" @@ -2939,6 +2976,16 @@ jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" +jest-diff@^25.2.1: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" + integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + jest-docblock@^24.3.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" @@ -2985,6 +3032,11 @@ jest-get-type@^24.9.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== +jest-get-type@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" + integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== + jest-haste-map@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" @@ -3558,7 +3610,7 @@ mqtt-packet@^5.6.0: process-nextick-args "^2.0.0" safe-buffer "^5.1.0" -mqtt-packet@^6.0.0, mqtt-packet@^6.3.0: +mqtt-packet@^6.0.0, mqtt-packet@^6.3.0, mqtt-packet@^6.3.2: version "6.3.2" resolved "https://registry.yarnpkg.com/mqtt-packet/-/mqtt-packet-6.3.2.tgz#a737734a9a64e8cffbad7ad9e116d35b912f2e00" integrity sha512-i56+2kN6F57KInGtjjfUXSl4xG8u/zOvfaXFLKFAbBXzWkXOmwcmjaSCBPayf2IQCkQU0+h+S2DizCo3CF6gQA== @@ -3610,6 +3662,28 @@ mqtt@^2.3.1: websocket-stream "^5.1.2" xtend "^4.0.1" +mqtt@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mqtt/-/mqtt-4.1.0.tgz#efcfa4acb8789265b951452142054a5b158bef0f" + integrity sha512-dBihVZzaB8p9G/2ktSfamiaHmMnpCpP2du08317ZuEX1kBAbZOG9aMJQ11EChXnOX3GKUeiZYaSITueceQKT2A== + dependencies: + base64-js "^1.3.0" + commist "^1.0.0" + concat-stream "^1.6.2" + debug "^4.1.1" + end-of-stream "^1.4.1" + es6-map "^0.1.5" + help-me "^1.0.1" + inherits "^2.0.3" + minimist "^1.2.0" + mqtt-packet "^6.0.0" + pump "^3.0.0" + readable-stream "^2.3.6" + reinterval "^1.1.0" + split2 "^3.1.0" + websocket-stream "^5.1.2" + xtend "^4.0.1" + mri@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.5.tgz#ce21dba2c69f74a9b7cf8a1ec62307e089e223e0" @@ -4110,6 +4184,16 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" +pretty-format@^25.2.1, pretty-format@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" + integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== + dependencies: + "@jest/types" "^25.5.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + pretty-quick@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-2.0.1.tgz#417ee605ade98ecc686e72f63b5d28a2c35b43e9" @@ -4132,10 +4216,10 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -prom-client@^11.5.3: - version "11.5.3" - resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-11.5.3.tgz#5fedfce1083bac6c2b223738e966d0e1643756f8" - integrity sha512-iz22FmTbtkyL2vt0MdDFY+kWof+S9UB/NACxSn2aJcewtw+EERsen0urSkZ2WrHseNdydsvcxCTAnPcSMZZv4Q== +prom-client@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-12.0.0.tgz#9689379b19bd3f6ab88a9866124db9da3d76c6ed" + integrity sha512-JbzzHnw0VDwCvoqf8y1WDtq4wSBAbthMB1pcVI/0lzdqHGJI3KBJDXle70XK+c7Iv93Gihqo0a5LlOn+g8+DrQ== dependencies: tdigest "^0.1.1" @@ -4235,7 +4319,7 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -react-is@^16.8.4: +react-is@^16.12.0, react-is@^16.8.4: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==