diff --git a/CHANGELOG.md b/CHANGELOG.md index f3c3f503..d6f78a1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,21 @@ All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/) +## [Version 1.8.1](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.8.1) (2023-04-08) + +## What's Changed +- Use const keyword for immutable variables, Thanks [@dnicolson](https://github.com/dnicolson/). [#184](https://github.com/OpenWonderLabs/node-switchbot/pull/184) +- Use Error object for promise rejection, Thanks [@dnicolson](https://github.com/dnicolson/). [#181](https://github.com/OpenWonderLabs/node-switchbot/pull/181) +- Housekeeping and update dependencies + +**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.8.0...v1.8.1 + ## [Version 1.8.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.8.0) (2023-01-28) ## What's Changed - Add Support for BlindTilt (Read Only) -- Use Error object for promise rejection, Thanks [@dnicolson](https://github.com/dnicolson/). [#181](https://github.com/OpenWonderLabs/node-switchbot/pull/181) +- Use Error object for promise rejection, Thanks [@dnicolson](https://github.com/dnicolson/). [#181](https://github.com/OpenWonderLabs/node-switchbot/pull/181) - Housekeeping and update dependencies **Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.7.3...v1.8.0 @@ -16,7 +25,7 @@ All notable changes to this project will be documented in this file. This projec ## What's Changed -- Improve error handling, Thanks [@dnicolson](https://github.com/dnicolson/). [#175](https://github.com/OpenWonderLabs/node-switchbot/pull/175) +- Improve error handling, Thanks [@dnicolson](https://github.com/dnicolson/). [#175](https://github.com/OpenWonderLabs/node-switchbot/pull/175) - Housekeeping and update dependencies **Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.7.2...v1.7.3 diff --git a/README.md b/README.md index 757e4c58..67183f4d 100644 --- a/README.md +++ b/README.md @@ -110,9 +110,9 @@ Monitoring the advertising packets, you can find your devices and know the lates ```JavaScript // Load the node-switchbot and get a `Switchbot` constructor object -let Switchbot = require('node-switchbot'); +const Switchbot = require('node-switchbot'); // Create an `Switchbot` object -let switchbot = new Switchbot(); +const switchbot = new Switchbot(); (async () => { // Start to monitor advertisement packets @@ -137,9 +137,9 @@ The [`startScan()`](#startscan-method) and [`wait()`](#Switchbot-wait-method) me ```javascript // Load the node-switchbot and get a `Switchbot` constructor object -let Switchbot = require("node-switchbot"); +const Switchbot = require("node-switchbot"); // Create an `Switchbot` object -let switchbot = new Switchbot(); +const switchbot = new Switchbot(); // Start to monitor advertisement packets switchbot @@ -213,18 +213,18 @@ This sample discovers a Bot (WoHand), then put the Bot's arm down, finally put i ```javascript // Load the node-switchbot and get a `Switchbot` constructor object -let Switchbot = require("node-switchbot"); +const Switchbot = require("node-switchbot"); // Create an `Switchbot` object -let switchbot = new Switchbot(); +const switchbot = new Switchbot(); (async () => { // Find a Bot (WoHand) - let bot_list = await switchbot.discover({ model: "H", quick: true }); + const bot_list = await switchbot.discover({ model: "H", quick: true }); if (bot_list.length === 0) { throw new Error("No device was found."); } // The `SwitchbotDeviceWoHand` object representing the found Bot. - let device = bot_list[0]; + const device = bot_list[0]; // Put the Bot's arm down (stretch the arm) await device.down(); // Wait for 5 seconds @@ -246,13 +246,13 @@ In this code, you can get a [`SwitchbotDeviceWoHand`](#SwitchbotDeviceWoHand-obj In order to use the node-switchbot, you have to load the node-switchbot module as follows: ```JavaScript -let Switchbot = require('node-switchbot'); +const Switchbot = require('node-switchbot'); ``` You can get an `Switchbot` constructor from the code above. Then you have to create an `Switchbot` object from the `Switchbot` constructor as follows: ```javascript -let switchbot = new Switchbot(); +const switchbot = new Switchbot(); ``` The `Switchbot` constructor takes an argument optionally. It must be a hash object containing the properties as follows: @@ -263,15 +263,15 @@ The `Switchbot` constructor takes an argument optionally. It must be a hash obje The node-switchbot module uses the [`@abandonware/noble`](https://github.com/abandonware/noble) module in order to interact with BLE devices. If you want to interact other BLE devices using the `@abandonware/noble` module, you can create an `Noble` object by yourself, then pass it to this module. If you don't specify a `Noble` object to the `noble` property, this module automatically create a `Noble` object internally. -The sample code below shows how to pass a `Nobel` object to the `Switchbot` constructor. +The sample code below shows how to pass a `Noble` object to the `Switchbot` constructor. ```JavaScript // Create a Noble object -let noble = require('@abandonware/noble'); +const noble = require('@abandonware/noble'); // Create a Switchbot object -let Switchbot = require('node-switchbot'); -let switchbot = new Switchbot({'noble': noble}); +const Switchbot = require('node-switchbot'); +const switchbot = new Switchbot({'noble': noble}); ``` In the code snippet above, the variable `switchbot` is an `Switchbot` object. The `Switchbot` object has a lot of methods as described in sections below. @@ -565,7 +565,7 @@ The code below calls the [`press()`](#SwitchbotDeviceWoHand-press-method) method switchbot .discover({ model: "H", quick: true }) .then((device_list) => { - let device = device_list[0]; + const device = device_list[0]; if (!device) { console.log("No device was found."); process.exit(); diff --git a/lib/parameter-checker.js b/lib/parameter-checker.js index cbb3f2c6..39a2d5a7 100644 --- a/lib/parameter-checker.js +++ b/lib/parameter-checker.js @@ -37,7 +37,7 @@ class ParameterChecker { * an `Error` object will be set to `this._error`. * * [Usage] - * let valid = parameterChecker.check(params, { + * const valid = parameterChecker.check(params, { * level: { * required: false, * type: 'integer', @@ -50,7 +50,7 @@ class ParameterChecker { * } * }); * if(!valid) { - * let e = parameterChecker.error.message; + * const e = parameterChecker.error.message; * throw new Error(message); * } * ---------------------------------------------------------------- */ @@ -79,11 +79,11 @@ class ParameterChecker { } let result = true; - let name_list = Object.keys(rules); + const name_list = Object.keys(rules); for (let i = 0; i < name_list.length; i++) { - let name = name_list[i]; - let v = obj[name]; + const name = name_list[i]; + const v = obj[name]; let rule = rules[name]; if (!rule) { @@ -458,7 +458,7 @@ class ParameterChecker { } } if (typeof rule.minBytes === "number") { - let blen = Buffer.from(value, "utf8").length; + const blen = Buffer.from(value, "utf8").length; if (blen < rule.minBytes) { this._error = { code: "LENGTH_UNDERFLOW", @@ -475,7 +475,7 @@ class ParameterChecker { } } if (typeof rule.maxBytes === "number") { - let blen = Buffer.from(value, "utf8").length; + const blen = Buffer.from(value, "utf8").length; if (blen > rule.maxBytes) { this._error = { code: "LENGTH_OVERFLOW", diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index 9d7511ff..ca766ad4 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -61,16 +61,16 @@ class SwitchbotAdvertising { * device, this method will return `null`. * ---------------------------------------------------------------- */ parse(peripheral, onlog) { - let ad = peripheral.advertisement; + const ad = peripheral.advertisement; if (!ad || !ad.serviceData) { return null; } - let serviceData = ad.serviceData[0] || ad.serviceData; - let manufacturerData = ad.manufacturerData; - let buf = serviceData.data; + const serviceData = ad.serviceData[0] || ad.serviceData; + const manufacturerData = ad.manufacturerData; + const buf = serviceData.data; - let bufIsInvalid = !buf || !Buffer.isBuffer(buf) || buf.length < 3; - let manufacturerDataIsInvalid = + const bufIsInvalid = !buf || !Buffer.isBuffer(buf) || buf.length < 3; + const manufacturerDataIsInvalid = !manufacturerData || !Buffer.isBuffer(manufacturerData) || manufacturerData.length < 3; @@ -79,7 +79,7 @@ class SwitchbotAdvertising { return null; } - let model = buf.slice(0, 1).toString("utf8"); + const model = buf.slice(0, 1).toString("utf8"); let sd = null; if (model === "H") { @@ -129,7 +129,7 @@ class SwitchbotAdvertising { if (address === "") { address = peripheral.advertisement.manufacturerData || ""; if (address !== "") { - let str = peripheral.advertisement.manufacturerData + const str = peripheral.advertisement.manufacturerData .toString("hex") .slice(4, 16); address = str.substr(0, 2); @@ -141,7 +141,7 @@ class SwitchbotAdvertising { } else { address = address.replace(/-/g, ":"); } - let data = { + const data = { id: peripheral.id, address: address, rssi: peripheral.rssi, @@ -167,14 +167,14 @@ class SwitchbotAdvertising { } return null; } - let byte1 = buf.readUInt8(1); - let byte2 = buf.readUInt8(2); + const byte1 = buf.readUInt8(1); + const byte2 = buf.readUInt8(2); - let mode = byte1 & 0b10000000 ? true : false; // Whether the light switch Add-on is used or not - let state = byte1 & 0b01000000 ? true : false; // Whether the switch status is ON or OFF - let battery = byte2 & 0b01111111; // % + const mode = byte1 & 0b10000000 ? true : false; // Whether the light switch Add-on is used or not + const state = byte1 & 0b01000000 ? true : false; // Whether the switch status is ON or OFF + const battery = byte2 & 0b01111111; // % - let data = { + const data = { model: "H", modelName: "WoHand", mode: mode, @@ -194,17 +194,17 @@ class SwitchbotAdvertising { } return null; } - let byte2 = buf.readUInt8(2); - let byte3 = buf.readUInt8(3); - let byte4 = buf.readUInt8(4); - let byte5 = buf.readUInt8(5); - - let temp_sign = byte4 & 0b10000000 ? 1 : -1; - let temp_c = temp_sign * ((byte4 & 0b01111111) + (byte3 & 0b00001111) / 10); - let temp_f = (temp_c * 9 / 5) + 32; + const byte2 = buf.readUInt8(2); + const byte3 = buf.readUInt8(3); + const byte4 = buf.readUInt8(4); + const byte5 = buf.readUInt8(5); + + const temp_sign = byte4 & 0b10000000 ? 1 : -1; + const temp_c = temp_sign * ((byte4 & 0b01111111) + (byte3 & 0b00001111) / 10); + const temp_f = (temp_c * 9 / 5) + 32; temp_f = Math.round(temp_f * 10) / 10; - let data = { + const data = { model: "T", modelName: "WoSensorTH", temperature: { @@ -228,15 +228,15 @@ class SwitchbotAdvertising { } return null; } - let byte1 = buf.readUInt8(1); - let byte4 = buf.readUInt8(4); + const byte1 = buf.readUInt8(1); + const byte4 = buf.readUInt8(4); - let onState = byte1 & 0b10000000 ? true : false; // 1 - on - let autoMode = byte4 & 0b10000000 ? true : false; // 1 - auto - let percentage = byte4 & 0b01111111; // 0-100%, 101/102/103 - Quick gear 1/2/3 + const onState = byte1 & 0b10000000 ? true : false; // 1 - on + const autoMode = byte4 & 0b10000000 ? true : false; // 1 - auto + const percentage = byte4 & 0b01111111; // 0-100%, 101/102/103 - Quick gear 1/2/3 - let data = { + const data = { model: "e", modelName: "WoHumi", onState: onState, @@ -257,20 +257,20 @@ class SwitchbotAdvertising { return null; } - let byte1 = buf.readUInt8(1); - let byte2 = buf.readUInt8(2); - let byte5 = buf.readUInt8(5); + const byte1 = buf.readUInt8(1); + const byte2 = buf.readUInt8(2); + const byte5 = buf.readUInt8(5); - let tested = byte1 & 0b10000000 ? true : false; - let movement = byte1 & 0b01000000 ? true : false; - let battery = byte2 & 0b01111111; - let led = (byte5 & 0b00100000) >> 5; - let iot = (byte5 & 0b00010000) >> 4; - let sense_distance = (byte5 & 0b00001100) >> 2; - let lightLevel = byte5 & 0b00000011; - let is_light = byte5 & 0b00000010 ? true : false; + const tested = byte1 & 0b10000000 ? true : false; + const movement = byte1 & 0b01000000 ? true : false; + const battery = byte2 & 0b01111111; + const led = (byte5 & 0b00100000) >> 5; + const iot = (byte5 & 0b00010000) >> 4; + const sense_distance = (byte5 & 0b00001100) >> 2; + const lightLevel = byte5 & 0b00000011; + const is_light = byte5 & 0b00000010 ? true : false; - let data = { + const data = { model: "s", modelName: "WoMotion", tested: tested, @@ -297,21 +297,21 @@ class SwitchbotAdvertising { return null; } - let byte1 = buf.readUInt8(1); - let byte2 = buf.readUInt8(2); - let byte3 = buf.readUInt8(3); - let byte8 = buf.readUInt8(8); - - let hallState = (byte3 >> 1) & 0b00000011; - let tested = byte1 & 0b10000000; - let movement = byte1 & 0b01000000 ? true : false; // 1 - Movement detected - let battery = byte2 & 0b01111111; // % - let contact_open = byte3 & 0b00000010 == 0b00000010; - let contact_timeout = byte3 & 0b00000100 == 0b00000100; - let lightLevel = byte3 & 0b00000001; - let button_count = byte8 & 0b00001111; - - let data = { + const byte1 = buf.readUInt8(1); + const byte2 = buf.readUInt8(2); + const byte3 = buf.readUInt8(3); + const byte8 = buf.readUInt8(8); + + const hallState = (byte3 >> 1) & 0b00000011; + const tested = byte1 & 0b10000000; + const movement = byte1 & 0b01000000 ? true : false; // 1 - Movement detected + const battery = byte2 & 0b01111111; // % + const contact_open = byte3 & 0b00000010 == 0b00000010; + const contact_timeout = byte3 & 0b00000100 == 0b00000100; + const lightLevel = byte3 & 0b00000001; + const button_count = byte8 & 0b00001111; + + const data = { model: "d", modelName: "WoContact", movement: movement, @@ -341,19 +341,19 @@ class SwitchbotAdvertising { } return null; } - let byte1 = buf.readUInt8(1); - let byte2 = buf.readUInt8(2); - let byte3 = buf.readUInt8(3); - let byte4 = buf.readUInt8(4); - - let calibration = byte1 & 0b01000000 ? true : false; // Whether the calibration is completed - let battery = byte2 & 0b01111111; // % - let inMotion = byte3 & 0b10000000 ? true : false; - let currPosition = byte3 & 0b01111111; // current positon % - let lightLevel = (byte4 >> 4) & 0b00001111; // light sensor level (1-10) - let deviceChain = byte4 & 0b00000111; - - let data = { + const byte1 = buf.readUInt8(1); + const byte2 = buf.readUInt8(2); + const byte3 = buf.readUInt8(3); + const byte4 = buf.readUInt8(4); + + const calibration = byte1 & 0b01000000 ? true : false; // Whether the calibration is compconsted + const battery = byte2 & 0b01111111; // % + const inMotion = byte3 & 0b10000000 ? true : false; + const currPosition = byte3 & 0b01111111; // current positon % + const lightLevel = (byte4 >> 4) & 0b00001111; // light sensor level (1-10) + const deviceChain = byte4 & 0b00000111; + + const data = { model: "c", modelName: "WoCurtain", calibration: calibration, @@ -407,31 +407,31 @@ class SwitchbotAdvertising { } return null; } - let byte1 = manufacturerData.readUInt8(1);//power and light status - let byte2 = manufacturerData.readUInt8(2);//bulb brightness - let byte3 = manufacturerData.readUInt8(3);//bulb R - let byte4 = manufacturerData.readUInt8(4);//bulb G - let byte5 = manufacturerData.readUInt8(5);//bulb B - let byte6 = manufacturerData.readUInt8(6);//bulb temperature - let byte7 = manufacturerData.readUInt8(7); - let byte8 = manufacturerData.readUInt8(8); - let byte9 = manufacturerData.readUInt8(9); - let byte10 = manufacturerData.readUInt8(10);//bulb mode - - let power = byte1; - let red = byte3; - let green = byte4; - let blue = byte5; - let color_temperature = byte6; - let state = byte7 & 0b01111111 ? true : false; - let brightness = byte7 & 0b01111111; - let delay = byte8 & 0b10000000; - let preset = byte8 & 0b00001000; - let color_mode = byte8 & 0b00000111; - let speed = byte9 & 0b01111111; - let loop_index = byte10 & 0b11111110; - - let data = { + const byte1 = manufacturerData.readUInt8(1);//power and light status + const byte2 = manufacturerData.readUInt8(2);//bulb brightness + const byte3 = manufacturerData.readUInt8(3);//bulb R + const byte4 = manufacturerData.readUInt8(4);//bulb G + const byte5 = manufacturerData.readUInt8(5);//bulb B + const byte6 = manufacturerData.readUInt8(6);//bulb temperature + const byte7 = manufacturerData.readUInt8(7); + const byte8 = manufacturerData.readUInt8(8); + const byte9 = manufacturerData.readUInt8(9); + const byte10 = manufacturerData.readUInt8(10);//bulb mode + + const power = byte1; + const red = byte3; + const green = byte4; + const blue = byte5; + const color_temperature = byte6; + const state = byte7 & 0b01111111 ? true : false; + const brightness = byte7 & 0b01111111; + const delay = byte8 & 0b10000000; + const preset = byte8 & 0b00001000; + const color_mode = byte8 & 0b00000111; + const speed = byte9 & 0b01111111; + const loop_index = byte10 & 0b11111110; + + const data = { model: "u", modelName: "WoBulb", color_temperature: color_temperature, @@ -460,22 +460,22 @@ class SwitchbotAdvertising { } return null; } - let byte9 = manufacturerData.readUInt8(9); // byte9: plug mini state; 0x00=off, 0x80=on - let byte10 = manufacturerData.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time - let byte11 = manufacturerData.readUInt8(11); // byte11: wifi rssi - let byte12 = manufacturerData.readUInt8(12); // byte12: bit7: overload? - let byte13 = manufacturerData.readUInt8(13); // byte12[bit0~6] + byte13: current power value - - let state = byte9 === 0x00 ? "off" : byte9 === 0x80 ? "on" : null; - let delay = !!(byte10 & 0b00000001); - let timer = !!(byte10 & 0b00000010); - let syncUtcTime = !!(byte10 & 0b00000100); - let wifiRssi = byte11; - let overload = !!(byte12 & 0b10000000); - let currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt + const byte9 = manufacturerData.readUInt8(9); // byte9: plug mini state; 0x00=off, 0x80=on + const byte10 = manufacturerData.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time + const byte11 = manufacturerData.readUInt8(11); // byte11: wifi rssi + const byte12 = manufacturerData.readUInt8(12); // byte12: bit7: overload? + const byte13 = manufacturerData.readUInt8(13); // byte12[bit0~6] + byte13: current power value + + const state = byte9 === 0x00 ? "off" : byte9 === 0x80 ? "on" : null; + const delay = !!(byte10 & 0b00000001); + const timer = !!(byte10 & 0b00000010); + const syncUtcTime = !!(byte10 & 0b00000100); + const wifiRssi = byte11; + const overload = !!(byte12 & 0b10000000); + const currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt // TODO: voltage ??? - let data = { + const data = { model: "g", modelName: "WoPlugMini", state: state, @@ -499,22 +499,22 @@ class SwitchbotAdvertising { } return null; } - let byte9 = manufacturerData.readUInt8(9); // byte9: plug mini state; 0x00=off, 0x80=on - let byte10 = manufacturerData.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time - let byte11 = manufacturerData.readUInt8(11); // byte11: wifi rssi - let byte12 = manufacturerData.readUInt8(12); // byte12: bit7: overload? - let byte13 = manufacturerData.readUInt8(13); // byte12[bit0~6] + byte13: current power value - - let state = byte9 === 0x00 ? "off" : byte9 === 0x80 ? "on" : null; - let delay = !!(byte10 & 0b00000001); - let timer = !!(byte10 & 0b00000010); - let syncUtcTime = !!(byte10 & 0b00000100); - let wifiRssi = byte11; - let overload = !!(byte12 & 0b10000000); - let currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt + const byte9 = manufacturerData.readUInt8(9); // byte9: plug mini state; 0x00=off, 0x80=on + const byte10 = manufacturerData.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time + const byte11 = manufacturerData.readUInt8(11); // byte11: wifi rssi + const byte12 = manufacturerData.readUInt8(12); // byte12: bit7: overload? + const byte13 = manufacturerData.readUInt8(13); // byte12[bit0~6] + byte13: current power value + + const state = byte9 === 0x00 ? "off" : byte9 === 0x80 ? "on" : null; + const delay = !!(byte10 & 0b00000001); + const timer = !!(byte10 & 0b00000010); + const syncUtcTime = !!(byte10 & 0b00000100); + const wifiRssi = byte11; + const overload = !!(byte12 & 0b10000000); + const currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt // TODO: voltage ??? - let data = { + const data = { model: "j", modelName: "WoPlugMini", state: state, @@ -538,12 +538,12 @@ class SwitchbotAdvertising { } return null; } - let byte2 = manufacturerData.readUInt8(2); - let byte7 = manufacturerData.readUInt8(7); - let byte8 = manufacturerData.readUInt8(8); + const byte2 = manufacturerData.readUInt8(2); + const byte7 = manufacturerData.readUInt8(7); + const byte8 = manufacturerData.readUInt8(8); - let LockStatus = { + const LockStatus = { LOCKED: 0b0000000, UNLOCKED: 0b0010000, LOCKING: 0b0100000, @@ -553,17 +553,17 @@ class SwitchbotAdvertising { NOT_FULLY_LOCKED: 0b1100000, //Only EU lock type } - let battery = byte2 & 0b01111111; // % - let calibration = byte7 & 0b10000000 ? true : false; - let status = LockStatus(byte7 & 0b01110000); - let update_from_secondary_lock = byte7 & 0b00001000 ? true : false; - let door_open = byte7 & 0b00000100 ? true : false; - let double_lock_mode = byte8 & 0b10000000 ? true : false; - let unclosed_alarm = byte8 & 0b00100000 ? true : false; - let unlocked_alarm = byte8 & 0b00010000 ? true : false; - let auto_lock_paused = byte8 & 0b00000010 ? true : false; - - let data = { + const battery = byte2 & 0b01111111; // % + const calibration = byte7 & 0b10000000 ? true : false; + const status = LockStatus(byte7 & 0b01110000); + const update_from_secondary_lock = byte7 & 0b00001000 ? true : false; + const door_open = byte7 & 0b00000100 ? true : false; + const double_lock_mode = byte8 & 0b10000000 ? true : false; + const unclosed_alarm = byte8 & 0b00100000 ? true : false; + const unlocked_alarm = byte8 & 0b00010000 ? true : false; + const auto_lock_paused = byte8 & 0b00000010 ? true : false; + + const data = { model: "o", modelName: "WoSmartLock", battery: battery, @@ -589,17 +589,17 @@ class SwitchbotAdvertising { } return null; } - let byte2 = buf.readUInt8(2); - let byte3 = buf.readUInt8(3); - let byte4 = buf.readUInt8(4); - let byte5 = buf.readUInt8(5); - - let temp_sign = byte4 & 0b10000000 ? 1 : -1; - let temp_c = temp_sign * ((byte4 & 0b01111111) + (byte3 & 0b00001111) / 10); - let temp_f = (temp_c * 9 / 5) + 32; + const byte2 = buf.readUInt8(2); + const byte3 = buf.readUInt8(3); + const byte4 = buf.readUInt8(4); + const byte5 = buf.readUInt8(5); + + const temp_sign = byte4 & 0b10000000 ? 1 : -1; + const temp_c = temp_sign * ((byte4 & 0b01111111) + (byte3 & 0b00001111) / 10); + const temp_f = (temp_c * 9 / 5) + 32; temp_f = Math.round(temp_f * 10) / 10; - let data = { + const data = { model: "i", modelName: "WoSensorTHPlus", temperature: { @@ -624,28 +624,28 @@ class SwitchbotAdvertising { return null; } - let byte1 = buf.readUInt8(1);//power and light status - let byte2 = buf.readUInt8(2);//bulb brightness - let byte3 = buf.readUInt8(3);//bulb R - let byte4 = buf.readUInt8(4);//bulb G - let byte5 = buf.readUInt8(5);//bulb B - let byte7 = buf.readUInt8(7); - let byte8 = buf.readUInt8(8); - let byte9 = buf.readUInt8(9); - let byte10 = buf.readUInt8(10); - - let state = byte7 & 0b10000000 ? true : false; - let brightness = byte7 & 0b01111111; - let red = byte3; - let green = byte4; - let blue = byte5; - let delay = byte8 & 0b10000000; - let preset = byte8 & 0b00001000; - let color_mode = byte8 & 0b00000111; - let speed = byte9 & 0b01111111; - let loop_index = byte10 & 0b11111110; - - let data = { + const byte1 = buf.readUInt8(1);//power and light status + const byte2 = buf.readUInt8(2);//bulb brightness + const byte3 = buf.readUInt8(3);//bulb R + const byte4 = buf.readUInt8(4);//bulb G + const byte5 = buf.readUInt8(5);//bulb B + const byte7 = buf.readUInt8(7); + const byte8 = buf.readUInt8(8); + const byte9 = buf.readUInt8(9); + const byte10 = buf.readUInt8(10); + + const state = byte7 & 0b10000000 ? true : false; + const brightness = byte7 & 0b01111111; + const red = byte3; + const green = byte4; + const blue = byte5; + const delay = byte8 & 0b10000000; + const preset = byte8 & 0b00001000; + const color_mode = byte8 & 0b00000111; + const speed = byte9 & 0b01111111; + const loop_index = byte10 & 0b11111110; + + const data = { model: "r", modelName: "WoStrip", state: state, diff --git a/lib/switchbot-device-wobulb.js b/lib/switchbot-device-wobulb.js index 3146709c..cb0e2a7e 100644 --- a/lib/switchbot-device-wobulb.js +++ b/lib/switchbot-device-wobulb.js @@ -1,5 +1,5 @@ "use strict"; -let SwitchbotDevice = require("./switchbot-device.js"); +const SwitchbotDevice = require("./switchbot-device.js"); /** * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/colorbulb.md @@ -16,7 +16,7 @@ class SwitchbotDeviceWoBulb extends SwitchbotDevice { * @private */ _setState(reqByteArray) { - let base = [0x57, 0x0f, 0x47, 0x01]; + const base = [0x57, 0x0f, 0x47, 0x01]; return this._operateBot([].concat(base, reqByteArray)); } @@ -149,15 +149,15 @@ class SwitchbotDeviceWoBulb extends SwitchbotDevice { * @private */ _operateBot(bytes) { - let req_buf = Buffer.from(bytes); + const req_buf = Buffer.from(bytes); return new Promise((resolve, reject) => { this._command(req_buf) .then((res_bytes) => { - let res_buf = Buffer.from(res_bytes); + const res_buf = Buffer.from(res_bytes); if (res_buf.length === 2) { - let code = res_buf.readUInt8(1); + const code = res_buf.readUInt8(1); if (code === 0x00 || code === 0x80) { - let is_on = code === 0x80; + const is_on = code === 0x80; resolve(is_on); } else { reject( diff --git a/lib/switchbot-device-wocontact.js b/lib/switchbot-device-wocontact.js index 287959ae..63443786 100644 --- a/lib/switchbot-device-wocontact.js +++ b/lib/switchbot-device-wocontact.js @@ -1,5 +1,5 @@ "use strict"; -let SwitchbotDevice = require("./switchbot-device.js"); +const SwitchbotDevice = require("./switchbot-device.js"); class SwitchbotDeviceWoContact extends SwitchbotDevice {} diff --git a/lib/switchbot-device-wocurtain.js b/lib/switchbot-device-wocurtain.js index 84200a51..90da249d 100644 --- a/lib/switchbot-device-wocurtain.js +++ b/lib/switchbot-device-wocurtain.js @@ -1,5 +1,5 @@ "use strict"; -let SwitchbotDevice = require("./switchbot-device.js"); +const SwitchbotDevice = require("./switchbot-device.js"); class SwitchbotDeviceWoCurtain extends SwitchbotDevice { /* ------------------------------------------------------------------ @@ -93,10 +93,10 @@ class SwitchbotDeviceWoCurtain extends SwitchbotDevice { _operateCurtain(bytes) { return new Promise((resolve, reject) => { - let req_buf = Buffer.from(bytes); + const req_buf = Buffer.from(bytes); this._command(req_buf) .then((res_buf) => { - let code = res_buf.readUInt8(0); + const code = res_buf.readUInt8(0); if (res_buf.length === 3 && code === 0x01) { resolve(); } else { diff --git a/lib/switchbot-device-wohand.js b/lib/switchbot-device-wohand.js index 891da386..3cd9378f 100644 --- a/lib/switchbot-device-wohand.js +++ b/lib/switchbot-device-wohand.js @@ -1,5 +1,5 @@ "use strict"; -let SwitchbotDevice = require("./switchbot-device.js"); +const SwitchbotDevice = require("./switchbot-device.js"); class SwitchbotDeviceWoHand extends SwitchbotDevice { /* ------------------------------------------------------------------ @@ -79,10 +79,10 @@ class SwitchbotDeviceWoHand extends SwitchbotDevice { _operateBot(bytes) { return new Promise((resolve, reject) => { - let req_buf = Buffer.from(bytes); + const req_buf = Buffer.from(bytes); this._command(req_buf) .then((res_buf) => { - let code = res_buf.readUInt8(0); + const code = res_buf.readUInt8(0); if (res_buf.length === 3 && (code === 0x01 || code === 0x05)) { resolve(); } else { diff --git a/lib/switchbot-device-wohumi.js b/lib/switchbot-device-wohumi.js index 82c8d3e9..e7d055bd 100644 --- a/lib/switchbot-device-wohumi.js +++ b/lib/switchbot-device-wohumi.js @@ -1,5 +1,5 @@ "use strict"; -let SwitchbotDevice = require("./switchbot-device.js"); +const SwitchbotDevice = require("./switchbot-device.js"); class SwitchbotDeviceWoHumi extends SwitchbotDevice { /* ------------------------------------------------------------------ @@ -79,10 +79,10 @@ class SwitchbotDeviceWoHumi extends SwitchbotDevice { _operateBot(bytes) { return new Promise((resolve, reject) => { - let req_buf = Buffer.from(bytes); + const req_buf = Buffer.from(bytes); this._command(req_buf) .then((res_buf) => { - let code = res_buf.readUInt8(0); + const code = res_buf.readUInt8(0); if (res_buf.length === 3 && (code === 0x01 || code === 0x05)) { resolve(); } else { diff --git a/lib/switchbot-device-woplugmini.js b/lib/switchbot-device-woplugmini.js index f156c24a..0e91068d 100644 --- a/lib/switchbot-device-woplugmini.js +++ b/lib/switchbot-device-woplugmini.js @@ -1,5 +1,5 @@ "use strict"; -let SwitchbotDevice = require("./switchbot-device.js"); +const SwitchbotDevice = require("./switchbot-device.js"); /** * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/plugmini.md @@ -16,7 +16,7 @@ class SwitchbotDeviceWoPlugMini extends SwitchbotDevice { * @private */ _setState(reqByteArray) { - let base = [0x57, 0x0f, 0x50, 0x01]; + const base = [0x57, 0x0f, 0x50, 0x01]; return this._operateBot([].concat(base, reqByteArray)); } @@ -45,15 +45,15 @@ class SwitchbotDeviceWoPlugMini extends SwitchbotDevice { * @private */ _operateBot(bytes) { - let req_buf = Buffer.from(bytes); + const req_buf = Buffer.from(bytes); return new Promise((resolve, reject) => { this._command(req_buf) .then((res_bytes) => { - let res_buf = Buffer.from(res_bytes); + const res_buf = Buffer.from(res_bytes); if (res_buf.length === 2) { - let code = res_buf.readUInt8(1); + const code = res_buf.readUInt8(1); if (code === 0x00 || code === 0x80) { - let is_on = code === 0x80; + const is_on = code === 0x80; resolve(is_on); } else { reject( diff --git a/lib/switchbot-device-wopresence.js b/lib/switchbot-device-wopresence.js index f0cd5779..e5f28ca9 100644 --- a/lib/switchbot-device-wopresence.js +++ b/lib/switchbot-device-wopresence.js @@ -1,5 +1,5 @@ "use strict"; -let SwitchbotDevice = require("./switchbot-device.js"); +const SwitchbotDevice = require("./switchbot-device.js"); class SwitchbotDeviceWoPresence extends SwitchbotDevice {} diff --git a/lib/switchbot-device-wosensorth.js b/lib/switchbot-device-wosensorth.js index 340b42f5..8f0579a5 100644 --- a/lib/switchbot-device-wosensorth.js +++ b/lib/switchbot-device-wosensorth.js @@ -1,5 +1,5 @@ "use strict"; -let SwitchbotDevice = require("./switchbot-device.js"); +const SwitchbotDevice = require("./switchbot-device.js"); class SwitchbotDeviceWoSensorTH extends SwitchbotDevice {} diff --git a/lib/switchbot-device-wostrip.js b/lib/switchbot-device-wostrip.js index 37516788..db444e61 100644 --- a/lib/switchbot-device-wostrip.js +++ b/lib/switchbot-device-wostrip.js @@ -1,5 +1,5 @@ "use strict"; -let SwitchbotDevice = require("./switchbot-device.js"); +const SwitchbotDevice = require("./switchbot-device.js"); /** * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/colorbulb.md @@ -16,7 +16,7 @@ class SwitchbotDeviceWoStrip extends SwitchbotDevice { * @private */ _setState(reqByteArray) { - let base = [0x57, 0x0f, 0x49, 0x01]; + const base = [0x57, 0x0f, 0x49, 0x01]; return this._operateBot([].concat(base, reqByteArray)); } @@ -143,15 +143,15 @@ class SwitchbotDeviceWoStrip extends SwitchbotDevice { * @private */ _operateBot(bytes) { - let req_buf = Buffer.from(bytes); + const req_buf = Buffer.from(bytes); return new Promise((resolve, reject) => { this._command(req_buf) .then((res_bytes) => { - let res_buf = Buffer.from(res_bytes); + const res_buf = Buffer.from(res_bytes); if (res_buf.length === 2) { - let code = res_buf.readUInt8(1); + const code = res_buf.readUInt8(1); if (code === 0x00 || code === 0x80) { - let is_on = code === 0x80; + const is_on = code === 0x80; resolve(is_on); } else { reject( diff --git a/lib/switchbot-device.js b/lib/switchbot-device.js index afa185fa..b1ddaa8c 100644 --- a/lib/switchbot-device.js +++ b/lib/switchbot-device.js @@ -1,6 +1,6 @@ "use strict"; -let parameterChecker = require("./parameter-checker.js"); -let switchbotAdvertising = require("./switchbot-advertising.js"); +const parameterChecker = require("./parameter-checker.js"); +const switchbotAdvertising = require("./switchbot-advertising.js"); class SwitchbotDevice { /* ------------------------------------------------------------------ @@ -9,7 +9,7 @@ class SwitchbotDevice { * [Arguments] * - peripheral | Object | Required | The `peripheral` object of noble, * | | | which represents this device - * - noble | Noble | Required | The Nobel object created by the noble module. + * - noble | Noble | Required | The Noble object created by the noble module. * ---------------------------------------------------------------- */ constructor(peripheral, noble) { this._peripheral = peripheral; @@ -26,7 +26,7 @@ class SwitchbotDevice { this._COMMAND_TIMEOUT_MSEC = 3000; // Save the device information - let ad = switchbotAdvertising.parse(peripheral); + const ad = switchbotAdvertising.parse(peripheral); this._id = ad.id; this._address = ad.address; this._model = ad.serviceData.model; @@ -105,7 +105,7 @@ class SwitchbotDevice { } // Check the connection state - let state = this.connectionState; + const state = this.connectionState; if (state === "connected") { resolve(); return; @@ -179,19 +179,19 @@ class SwitchbotDevice { // Discover services and characteristics (async () => { - let service_list = await this._discoverServices(); + const service_list = await this._discoverServices(); if (!timer) { throw new Error(""); } - let chars = { + const chars = { write: null, notify: null, device: null, }; for (let service of service_list) { - let char_list = await this._discoverCharacteristics(service); + const char_list = await this._discoverCharacteristics(service); for (let char of char_list) { if (char.uuid === this._CHAR_UUID_WRITE) { chars.write = char; @@ -260,7 +260,7 @@ class SwitchbotDevice { _subscribe() { return new Promise((resolve, reject) => { - let char = this._chars.notify; + const char = this._chars.notify; if (!char) { reject(new Error("No notify characteristic was found.")); return; @@ -280,7 +280,7 @@ class SwitchbotDevice { _unsubscribe() { return new Promise((resolve) => { - let char = this._chars.notify; + const char = this._chars.notify; if (!char) { resolve(); return; @@ -307,7 +307,7 @@ class SwitchbotDevice { return new Promise((resolve, reject) => { this._was_connected_explicitly = false; // Check the connection state - let state = this._peripheral.state; + const state = this._peripheral.state; if (state === "disconnected") { resolve(); return; @@ -351,7 +351,7 @@ class SwitchbotDevice { * ---------------------------------------------------------------- */ getDeviceName() { return new Promise((resolve, reject) => { - let name = ""; + const name = ""; this._connect() .then(() => { if (!this._chars.device) { @@ -392,7 +392,7 @@ class SwitchbotDevice { setDeviceName(name) { return new Promise((resolve, reject) => { // Check the parameters - let valid = parameterChecker.check( + const valid = parameterChecker.check( { name: name }, { name: { required: true, type: "string", minBytes: 1, maxBytes: 100 }, @@ -404,7 +404,7 @@ class SwitchbotDevice { return; } - let buf = Buffer.from(name, "utf8"); + const buf = Buffer.from(name, "utf8"); this._connect() .then(() => { if (!this._chars.device) { diff --git a/lib/switchbot.js b/lib/switchbot.js index 7c277b2e..711bb760 100644 --- a/lib/switchbot.js +++ b/lib/switchbot.js @@ -1,18 +1,18 @@ "use strict"; -let parameterChecker = require("./parameter-checker.js"); -let switchbotAdvertising = require("./switchbot-advertising.js"); +const parameterChecker = require("./parameter-checker.js"); +const switchbotAdvertising = require("./switchbot-advertising.js"); -let SwitchbotDevice = require("./switchbot-device.js"); -let SwitchbotDeviceWoHand = require("./switchbot-device-wohand.js"); -let SwitchbotDeviceWoCurtain = require("./switchbot-device-wocurtain.js"); -let SwitchbotDeviceWoBlindTilt = require("./switchbot-device-woblindtilt.js"); -let SwitchbotDeviceWoPresence = require("./switchbot-device-wopresence.js"); -let SwitchbotDeviceWoContact = require("./switchbot-device-wocontact.js"); -let SwitchbotDeviceWoSensorTH = require("./switchbot-device-wosensorth.js"); -let SwitchbotDeviceWoHumi = require("./switchbot-device-wohumi.js"); -let SwitchbotDeviceWoPlugMini = require("./switchbot-device-woplugmini.js"); -let SwitchbotDeviceWoBulb = require("./switchbot-device-wobulb.js"); -let SwitchbotDeviceWoStrip = require("./switchbot-device-wostrip.js"); +const SwitchbotDevice = require("./switchbot-device.js"); +const SwitchbotDeviceWoHand = require("./switchbot-device-wohand.js"); +const SwitchbotDeviceWoCurtain = require("./switchbot-device-wocurtain.js"); +const SwitchbotDeviceWoBlindTilt = require("./switchbot-device-woblindtilt.js"); +const SwitchbotDeviceWoPresence = require("./switchbot-device-wopresence.js"); +const SwitchbotDeviceWoContact = require("./switchbot-device-wocontact.js"); +const SwitchbotDeviceWoSensorTH = require("./switchbot-device-wosensorth.js"); +const SwitchbotDeviceWoHumi = require("./switchbot-device-wohumi.js"); +const SwitchbotDeviceWoPlugMini = require("./switchbot-device-woplugmini.js"); +const SwitchbotDeviceWoBulb = require("./switchbot-device-wobulb.js"); +const SwitchbotDeviceWoStrip = require("./switchbot-device-wostrip.js"); class Switchbot { /* ------------------------------------------------------------------ @@ -20,7 +20,7 @@ class Switchbot { * * [Arguments] * - params | Object | Optional | - * - noble | Noble | Optional | The Nobel object created by the noble module. + * - noble | Noble | Optional | The Noble object created by the noble module. * | | | This parameter is optional. * | | | If you don't specify this parameter, this * | | | module automatically creates it. @@ -84,9 +84,9 @@ class Switchbot { * `SwitchbotDevice` objects representing the found devices. * ---------------------------------------------------------------- */ discover(params = {}) { - let promise = new Promise((resolve, reject) => { + const promise = new Promise((resolve, reject) => { // Check the parameters - let valid = parameterChecker.check( + const valid = parameterChecker.check( params, { duration: { required: false, type: "integer", min: 1, max: 60000 }, @@ -125,7 +125,7 @@ class Switchbot { } // Determine the values of the parameters - let p = { + const p = { duration: params.duration || this._DEFAULT_DISCOVERY_DURATION, model: params.model || "", id: params.id || "", @@ -137,7 +137,7 @@ class Switchbot { .then(() => { let peripherals = {}; let timer = null; - let finishDiscovery = () => { + const finishDiscovery = () => { if (timer) { clearTimeout(timer); } @@ -154,11 +154,11 @@ class Switchbot { // Set a handler for the 'discover' event this.noble.on("discover", (peripheral) => { - let device = this._getDeviceObject(peripheral, p.id, p.model); + const device = this._getDeviceObject(peripheral, p.id, p.model); if (!device) { return; } - let id = device.id; + const id = device.id; peripherals[id] = device; if (this.ondiscover && typeof this.ondiscover === "function") { @@ -194,13 +194,13 @@ class Switchbot { } _init() { - let promise = new Promise((resolve, reject) => { + const promise = new Promise((resolve, reject) => { switch (this.noble.state) { case "poweredOn": resolve(); return; case ("unsupported", "unauthorized", "poweredOff"): - let err = new Error( + const err = new Error( "Failed to initialize the Noble object: " + this.noble.state ); reject(err); @@ -210,7 +210,7 @@ class Switchbot { if (state === "poweredOn") { resolve(); } else { - let err = new Error( + const err = new Error( "Failed to initialize the Noble object: " + state ); reject(err); @@ -222,7 +222,7 @@ class Switchbot { } _getDeviceObject(peripheral, id, model) { - let ad = switchbotAdvertising.parse(peripheral, this.onlog); + const ad = switchbotAdvertising.parse(peripheral, this.onlog); if (this._filterAdvertising(ad, id, model)) { let device = null; switch (ad.serviceData.model) { @@ -278,7 +278,7 @@ class Switchbot { } if (id) { id = id.toLowerCase().replace(/\:/g, ""); - let ad_id = ad.address.toLowerCase().replace(/[^a-z0-9]/g, ""); + const ad_id = ad.address.toLowerCase().replace(/[^a-z0-9]/g, ""); if (ad_id !== id) { return false; } @@ -347,9 +347,9 @@ class Switchbot { * Nothing will be passed to the `resolve()`. * ---------------------------------------------------------------- */ startScan(params) { - let promise = new Promise((resolve, reject) => { + const promise = new Promise((resolve, reject) => { // Check the parameters - let valid = parameterChecker.check( + const valid = parameterChecker.check( params, { model: { @@ -375,7 +375,6 @@ class Switchbot { }, false ); - if (!valid) { reject(new Error(parameterChecker.error.message)); return; @@ -389,14 +388,14 @@ class Switchbot { this._init() .then(() => { // Determine the values of the parameters - let p = { + const p = { model: params.model || "", id: params.id || "", }; // Set a handler for the 'discover' event this.noble.on("discover", (peripheral) => { - let ad = switchbotAdvertising.parse(peripheral, this.onlog); + const ad = switchbotAdvertising.parse(peripheral, this.onlog); if (this._filterAdvertising(ad, p.id, p.model)) { if ( this.onadvertisement && @@ -456,7 +455,7 @@ class Switchbot { wait(msec) { return new Promise((resolve, reject) => { // Check the parameters - let valid = parameterChecker.check( + const valid = parameterChecker.check( { msec: msec }, { msec: { required: true, type: "integer", min: 0 }, diff --git a/package-lock.json b/package-lock.json index a7c4cba3..778ee305 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { "name": "node-switchbot", - "version": "1.8.0", + "version": "1.8.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "node-switchbot", - "version": "1.8.0", + "version": "1.8.1", "license": "MIT", "dependencies": { - "@abandonware/noble": "^1.9.2-19" + "@abandonware/noble": "1.9.2-20" }, "devDependencies": { - "npm-check-updates": "^16.6.3" + "npm-check-updates": "^16.10.7" } }, "node_modules/@abandonware/bluetooth-hci-socket": { @@ -37,9 +37,9 @@ } }, "node_modules/@abandonware/noble": { - "version": "1.9.2-19", - "resolved": "https://registry.npmjs.org/@abandonware/noble/-/noble-1.9.2-19.tgz", - "integrity": "sha512-gX2vcWqcHya9tBXvtkLuoaM1G7QljvydSIHkXf0BL5GRGaIIDWH8hQRb+x0Xbd9EiukhQcxvCZTxub+uv3wcQg==", + "version": "1.9.2-20", + "resolved": "https://registry.npmjs.org/@abandonware/noble/-/noble-1.9.2-20.tgz", + "integrity": "sha512-VQ7ykO46JGJJp/VzblD9hGzuRrC3XaDDgaz5JO+O0R4PP1jXgiuGG2ruZxg80E+oUy6mtUS4YAhrZifqITPaHQ==", "hasInstallScript": true, "os": [ "darwin", @@ -60,6 +60,16 @@ "@abandonware/bluetooth-hci-socket": "^0.5.3-10" } }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -134,14 +144,13 @@ } }, "node_modules/@npmcli/git": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.3.tgz", - "integrity": "sha512-8cXNkDIbnXPVbhXMmQ7/bklCAjtmPaXfI9aEM4iH+xSuEHINLMHhlfESvVwdqmHJRJkR48vNJTSUvoF6GRPSFA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.4.tgz", + "integrity": "sha512-5yZghx+u5M47LghaybLCkdSyFzV/w4OuH12d96HO389Ik9CDsLaDZJVynSGGVJOLn6gy/k7Dz5XYcplM3uxXRg==", "dev": true, "dependencies": { "@npmcli/promise-spawn": "^6.0.0", "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", "npm-pick-manifest": "^8.0.0", "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", @@ -154,9 +163,9 @@ } }, "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.1.tgz", - "integrity": "sha512-GIykAFdOVK31Q1/zAtT5MbxqQL2vyl9mvFJv+OGu01zxbhL3p0xc8gJjdNGX1mWmUT43aEKVO2L6V/2j4TOsAA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", "dev": true, "dependencies": { "npm-bundled": "^3.0.0", @@ -220,6 +229,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "engines": { + "node": ">=12.22.0" + } + }, "node_modules/@pnpm/network.ca-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", @@ -232,12 +250,19 @@ "node": ">=12.22.0" } }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, "node_modules/@pnpm/npm-conf": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz", - "integrity": "sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.1.1.tgz", + "integrity": "sha512-yfRcuupmxxeDOSxvw4g+wFCrGiPD0L32f5WMzqMXp7Rl93EOCdFiDcaSNnZ10Up9GdNqkj70UTa8hfhPFphaZA==", "dev": true, "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", "config-chain": "^1.1.11" }, @@ -245,6 +270,15 @@ "node": ">=12" } }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@sindresorhus/is": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", @@ -278,6 +312,33 @@ "node": ">= 10" } }, + "node_modules/@tufjs/models": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.1.tgz", + "integrity": "sha512-AY0VoG/AXdlSOocuREfPoEW4SNhOPp/7fw6mpAxfVIny1uZ+0fEtMoCi7NhELSlqQIRLMu7RgfKhkxT+AJ+EXg==", + "dev": true, + "dependencies": { + "minimatch": "^7.4.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.5.tgz", + "integrity": "sha512-OzOamaOmNBJZUv2qqY1OSWa+++4YPpOkLgkc0w30Oov5ufKlWWXnFUl0l4dgmSv5Shq/zRVkEOXAe2NaqO4l5Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@types/http-cache-semantics": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", @@ -303,13 +364,13 @@ } }, "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", "dev": true, "dependencies": { "debug": "^4.1.0", - "depd": "^1.1.2", + "depd": "^2.0.0", "humanize-ms": "^1.2.1" }, "engines": { @@ -400,9 +461,9 @@ "devOptional": true }, "node_modules/boxen": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.1.tgz", - "integrity": "sha512-8k2eH6SRAK00NDl1iX5q17RJ8rfl53TajdYxE3ssMLehbg487dEVgsad4pIsZb/QqBgYWIl6JOauMTLGX2Kpkw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.2.tgz", + "integrity": "sha512-1Z4UJabXUP1/R9rLpoU3O2lEMnG3pPLAs/ZD2lF3t2q7qD5lM8rqbtnvtvm4N0wEyNlE+9yZVTVAGmd1V5jabg==", "dev": true, "dependencies": { "ansi-align": "^3.0.1", @@ -508,14 +569,14 @@ } }, "node_modules/cacache": { - "version": "17.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz", - "integrity": "sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA==", + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.5.tgz", + "integrity": "sha512-Y/PRQevNSsjAPWykl9aeGz8Pr+OI6BYM9fYDNMvOkuUiG9IhG4LEmaYrZZZvioMUEQ+cBCxT0v8wrnCURccyKA==", "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", - "glob": "^8.0.1", + "glob": "^9.3.1", "lru-cache": "^7.7.1", "minipass": "^4.0.0", "minipass-collect": "^1.0.2", @@ -541,14 +602,14 @@ } }, "node_modules/cacheable-request": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.5.tgz", - "integrity": "sha512-5RwYYCfzjNPsyJxb/QpaM0bfzx+kw5/YpDhZPm9oMIDntHFQ9YXeyV47ZvzlTE0XrrrbyO2UITJH4GF9eRLdXQ==", + "version": "10.2.9", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.9.tgz", + "integrity": "sha512-CaAMr53AS1Tb9evO1BIWFnZjSr8A4pbXofpsNVWPMDZZj3ZQKHwsQG9BrTqQ4x5ZYJXz1T2b8LLtTZODxSpzbg==", "dev": true, "dependencies": { "@types/http-cache-semantics": "^4.0.1", "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.0", + "http-cache-semantics": "^4.1.1", "keyv": "^4.5.2", "mimic-response": "^4.0.0", "normalize-url": "^8.0.0", @@ -592,9 +653,9 @@ } }, "node_modules/ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true, "funding": [ { @@ -627,16 +688,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", - "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, "dependencies": { - "colors": "1.0.3" + "string-width": "^4.2.0" }, "engines": { - "node": ">= 0.2.0" + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, "node_modules/color-support": { @@ -648,22 +712,13 @@ "color-support": "bin.js" } }, - "node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", "dev": true, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=14" } }, "node_modules/concat-map": { @@ -837,12 +892,12 @@ "devOptional": true }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/detect-libc": { @@ -1007,9 +1062,9 @@ } }, "node_modules/fs-minipass": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.0.tgz", - "integrity": "sha512-EUojgQaSPy6sxcqcZgQv6TVF6jiKvurji3AxhAivs/Ep4O1UpS8TusaxpybfFHZ2skRhLqzk6WR8nqNYIMMDeA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.1.tgz", + "integrity": "sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw==", "dev": true, "dependencies": { "minipass": "^4.0.0" @@ -1075,19 +1130,18 @@ } }, "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.4.tgz", + "integrity": "sha512-qaSc49hojMOv1EPM4EuyITjDSgSKI0rthoHnvE81tcOi1SCVndHko7auqxdQ14eiQG2NDBJBE86+2xIrbIvrbA==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -1150,15 +1204,15 @@ } }, "node_modules/got": { - "version": "12.5.3", - "resolved": "https://registry.npmjs.org/got/-/got-12.5.3.tgz", - "integrity": "sha512-8wKnb9MGU8IPGRIo+/ukTy9XLJBwDiCpIf5TVzQ9Cpol50eMTpBq2GAuDsuDIz7hTYmZgMgC1e9ydr6kSDWs3w==", + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.0.tgz", + "integrity": "sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==", "dev": true, "dependencies": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.1", + "cacheable-request": "^10.2.8", "decompress-response": "^6.0.0", "form-data-encoder": "^2.1.2", "get-stream": "^6.0.1", @@ -1175,9 +1229,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "node_modules/has": { @@ -1299,17 +1353,32 @@ } }, "node_modules/ignore-walk": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.0.tgz", - "integrity": "sha512-bTf9UWe/UP1yxG3QUrj/KOvEhTAUWPcv+WvbFZ28LcqznXabp7Xu6o9y1JEC18+oqODuS7VhTpekV5XvFwsxJg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.2.tgz", + "integrity": "sha512-ezmQ1Dg2b3jVZh2Dh+ar6Eu2MqNSTkyb32HU2MAQQQX9tKM3q/UQ/9lf03lQ5hW+fOeoMnwxwkleZ0xcNp0/qg==", "dev": true, "dependencies": { - "minimatch": "^5.0.1" + "minimatch": "^7.4.2" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.5.tgz", + "integrity": "sha512-OzOamaOmNBJZUv2qqY1OSWa+++4YPpOkLgkc0w30Oov5ufKlWWXnFUl0l4dgmSv5Shq/zRVkEOXAe2NaqO4l5Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/import-lazy": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", @@ -1360,12 +1429,12 @@ "devOptional": true }, "node_modules/ini": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", - "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.0.0.tgz", + "integrity": "sha512-t0ikzf5qkSFqRl1e6ejKBe+Tk2bsQd8ivEkcisyGXsku2t8NvXZ1Y3RRz5vxrDgOrTBOi13CvGsVoI5wVpd7xg==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/ip": { @@ -1646,9 +1715,9 @@ } }, "node_modules/lru-cache": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { "node": ">=12" @@ -1759,6 +1828,37 @@ "node": ">= 8" } }, + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/make-fetch-happen/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", @@ -1842,34 +1942,34 @@ } }, "node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.3.tgz", + "integrity": "sha512-tEEvU9TkZgnFDCtpnrEYnPsjT7iUx42aXfs4bzmQ5sMA09/6hZY0jeZcGkXyDagiBOvkUjNo8Viom+Me6+2x7g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz", - "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", + "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==", "devOptional": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { "node": ">=8" } @@ -2089,9 +2189,9 @@ "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" }, "node_modules/node-fetch": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", - "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "optional": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -2328,40 +2428,41 @@ } }, "node_modules/npm-check-updates": { - "version": "16.6.3", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.6.3.tgz", - "integrity": "sha512-EKhsCbBcVrPlYKzaYQtRhGv9fxpexwROcvl5HebCUNpiCSlOWrzaJvrMlwi9i9GCyJCnH+YAeBPYdqnArA390A==", + "version": "16.10.7", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.10.7.tgz", + "integrity": "sha512-hVJCULf8AoVob9FDvoC7hrkQGuWhWctE9k3sNmR+M6hxZJnlb+03Ph4G1w/pHmI5BGHoo+ZPJtVEXkJsA+JwPQ==", "dev": true, "dependencies": { "chalk": "^5.2.0", - "cli-table": "^0.3.11", - "commander": "^9.4.1", + "cli-table3": "^0.6.3", + "commander": "^10.0.0", "fast-memoize": "^2.5.2", "find-up": "5.0.0", "fp-and-or": "^0.1.3", "get-stdin": "^8.0.0", "globby": "^11.0.4", "hosted-git-info": "^5.1.0", - "ini": "^3.0.1", + "ini": "^4.0.0", + "js-yaml": "^4.1.0", "json-parse-helpfulerror": "^1.0.3", "jsonlines": "^0.1.1", "lodash": "^4.17.21", - "minimatch": "^5.1.2", + "minimatch": "^8.0.3", "p-map": "^4.0.0", - "pacote": "15.0.8", + "pacote": "15.1.1", "parse-github-url": "^1.0.2", "progress": "^2.0.3", - "prompts-ncu": "^2.5.1", - "rc-config-loader": "^4.1.1", + "prompts-ncu": "^3.0.0", + "rc-config-loader": "^4.1.2", "remote-git-tags": "^3.0.0", - "rimraf": "^3.0.2", + "rimraf": "^4.4.1", "semver": "^7.3.8", "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", "spawn-please": "^2.0.1", + "strip-json-comments": "^5.0.0", "untildify": "^4.0.0", - "update-notifier": "^6.0.2", - "yaml": "^2.2.0" + "update-notifier": "^6.0.2" }, "bin": { "ncu": "build/src/bin/cli.js", @@ -2371,10 +2472,28 @@ "node": ">=14.14" } }, + "node_modules/npm-check-updates/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dev": true, + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/npm-install-checks": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.0.0.tgz", - "integrity": "sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.0.tgz", + "integrity": "sha512-udSGENih/5xKh3Ex+L0PtZcOt0Pa+6ppDLnpG5D49/EhMja3LupaY9E/DtJTxyFBwE09ot7Fc+H4DywnZNWTVA==", "dev": true, "dependencies": { "semver": "^7.1.1" @@ -2465,20 +2584,19 @@ } }, "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.2.tgz", - "integrity": "sha512-5n/Pq41w/uZghpdlXAY5kIM85RgJThtTH/NYBRAZ9VUOBWV90USaQjwGrw76fZP3Lj5hl/VZjpVvOaRBMoL/2w==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.0", + "http-cache-semantics": "^4.1.1", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", "minipass": "^4.0.0", - "minipass-collect": "^1.0.2", "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", @@ -2611,9 +2729,9 @@ } }, "node_modules/pacote": { - "version": "15.0.8", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.8.tgz", - "integrity": "sha512-UlcumB/XS6xyyIMwg/WwMAyUmga+RivB5KgkRwA1hZNtrx+0Bt41KxHCvg1kr0pZ/ZeD8qjhW4fph6VaYRCbLw==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.1.tgz", + "integrity": "sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ==", "dev": true, "dependencies": { "@npmcli/git": "^4.0.0", @@ -2631,6 +2749,7 @@ "promise-retry": "^2.0.1", "read-package-json": "^6.0.0", "read-package-json-fast": "^3.0.0", + "sigstore": "^1.0.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, @@ -2680,6 +2799,22 @@ "node": ">=8" } }, + "node_modules/path-scurry": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.3.tgz", + "integrity": "sha512-RAmB+n30SlN+HnNx6EbcpoDy9nwdpcGPnEKrJnu6GZoDWBdIjo1UQMVtW2ybtC7LC2oKLcMq8y5g8WnKLiod9g==", + "dev": true, + "dependencies": { + "lru-cache": "^7.14.1", + "minipass": "^4.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -2739,16 +2874,16 @@ } }, "node_modules/prompts-ncu": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prompts-ncu/-/prompts-ncu-2.5.1.tgz", - "integrity": "sha512-Hdd7GgV7b76Yh9FP9HL1D9xqtJCJdVPpiM2vDtuoc8W1KfweJe15gutFYmxkq83ViFaagFM8K0UcPCQ/tZq8bA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prompts-ncu/-/prompts-ncu-3.0.0.tgz", + "integrity": "sha512-qyz9UxZ5MlPKWVhWrCmSZ1ahm2GVYdjLb8og2sg0IPth1KRuhcggHGuijz0e41dkx35p1t1q3GRISGH7QGALFA==", "dev": true, "dependencies": { "kleur": "^4.0.1", "sisteransi": "^1.0.5" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/proto-list": { @@ -2837,13 +2972,22 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/read-package-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.0.tgz", - "integrity": "sha512-b/9jxWJ8EwogJPpv99ma+QwtqB7FSl3+V6UXS7Aaay8/5VwMY50oIFooY1UKXMWpfNCM6T/PoGqa5GD1g9xf9w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.1.tgz", + "integrity": "sha512-AaHqXxfAVa+fNL07x8iAghfKOds/XXsu7zoouIVsbm7PEbQ3nMWXlvjcbrNLjElnUHWQtAo4QEa0RXuvD4XlpA==", "dev": true, "dependencies": { - "glob": "^8.0.1", + "glob": "^9.3.0", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^5.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -2866,9 +3010,9 @@ } }, "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "devOptional": true, "dependencies": { "inherits": "^2.0.3", @@ -2880,12 +3024,12 @@ } }, "node_modules/registry-auth-token": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.1.tgz", - "integrity": "sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", "dev": true, "dependencies": { - "@pnpm/npm-conf": "^1.0.4" + "@pnpm/npm-conf": "^2.1.0" }, "engines": { "node": ">=14" @@ -3151,6 +3295,66 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "devOptional": true }, + "node_modules/sigstore": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.2.0.tgz", + "integrity": "sha512-Fr9+W1nkBSIZCkJQR7jDn/zI0UXNsVpp+7mDQkCnZOIxG9p6yNXBx9xntHsfUyYHE55XDkkVV3+rYbrkzAeesA==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.0.0" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/make-fetch-happen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "dev": true, + "dependencies": { + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -3236,9 +3440,9 @@ } }, "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", @@ -3262,15 +3466,15 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true }, "node_modules/ssri": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.1.tgz", - "integrity": "sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.2.tgz", + "integrity": "sha512-LWMXUSh7fEfCXNBq4UnRzC4Qc5Y1PPg5ogmb+6HX837i2cKzjB133aYmQ4lgO0shVTcTQHquKp3v5bn898q3Sw==", "dev": true, "dependencies": { "minipass": "^4.0.0" @@ -3315,12 +3519,15 @@ } }, "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz", + "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tar": { @@ -3382,6 +3589,62 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "optional": true }, + "node_modules/tuf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.2.tgz", + "integrity": "sha512-gBfbnS6khluxjvoFCpRV0fhWT265xNfpiNXOcBX0Ze6HGbPhe93UG5V5DdKcgm/aXsMadnY76l/h6j63GmJS5g==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.1", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "dev": true, + "dependencies": { + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, "node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", @@ -3729,15 +3992,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "devOptional": true }, - "node_modules/yaml": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", - "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index bfdf6bf2..5fc52add 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-switchbot", - "version": "1.8.0", + "version": "1.8.1", "description": "The node-switchbot is a Node.js module which allows you to control your Switchbot Devices through Bluetooth (BLE).", "main": "./lib/switchbot.js", "files": [ @@ -35,9 +35,9 @@ }, "readmeFilename": "README.md", "dependencies": { - "@abandonware/noble": "^1.9.2-19" + "@abandonware/noble": "1.9.2-20" }, "devDependencies": { - "npm-check-updates": "^16.6.3" + "npm-check-updates": "^16.10.7" } } \ No newline at end of file