diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c25b1a5..fb4aa55c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,22 @@ All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/) -## [Version 1.5.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.5.0) (2022-08-27) +## [Version 1.6.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.5.0) (2022-10-18) ## What's Changed -- Added Color Bulb & Strip Light Support +- Added Support for Pushing Changes to Color Bulb & Strip Light +- Housekeeping and update dependencies + +**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.5.0...v1.6.0 + +## [Version 1.5.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.5.0) (2022-10-07) + +## What's Changed + +- Added Support for receiving status updates from Color Bulb & Strip Light - Fixed issue that caused excessive logging. +- Housekeeping and update dependencies **Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.4.1...v1.5.0 diff --git a/lib/parameter-checker.js b/lib/parameter-checker.js index cbb3f2c6..1f30ef72 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); * } * ---------------------------------------------------------------- */ @@ -78,13 +78,13 @@ class ParameterChecker { return false; } - let result = true; - let name_list = Object.keys(rules); + const result = true; + const name_list = Object.keys(rules); - for (let i = 0; i < name_list.length; i++) { - let name = name_list[i]; - let v = obj[name]; - let rule = rules[name]; + for (const i = 0; i < name_list.length; i++) { + const name = name_list[i]; + const v = obj[name]; + const rule = rules[name]; if (!rule) { 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 f4202854..56572a44 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -61,13 +61,13 @@ 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; const bufIsInvalid = !buf || !Buffer.isBuffer(buf) || buf.length < 3; const manufacturerDataIsInvalid = @@ -79,8 +79,8 @@ class SwitchbotAdvertising { return null; } - let model = buf.slice(0, 1).toString("utf8"); - let sd = null; + const model = buf.slice(0, 1).toString("utf8"); + const sd = null; if (model === "H") { sd = this._parseServiceDataForWoHand(buf, onlog);//WoHand @@ -123,7 +123,7 @@ class SwitchbotAdvertising { } return null; } - let address = peripheral.address || ""; + const address = peripheral.address || ""; if (address === "") { address = peripheral.advertisement.manufacturerData || ""; if (address !== "") { @@ -139,7 +139,7 @@ class SwitchbotAdvertising { } else { address = address.replace(/-/g, ":"); } - let data = { + const data = { id: peripheral.id, address: address, rssi: peripheral.rssi, @@ -165,14 +165,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, @@ -192,17 +192,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 / 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: { @@ -226,17 +226,15 @@ 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 byte5 = buf.readUInt8(5); + 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, @@ -256,23 +254,32 @@ 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 byte5 = buf.readUInt8(5); - let pirState = byte1 & 0b01000000 ? true : false; // 1 - Movement detected - let battery = byte2 & 0b01111111; // % - let lightLevel = byte5 & 0b00000011; + const byte1 = buf.readUInt8(1); + const byte2 = buf.readUInt8(2); + const byte5 = buf.readUInt8(5); - let data = { + 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; + + const data = { model: "s", modelName: "WoMotion", - movement: pirState, + tested: tested, + movement: movement, battery: battery, + led: led, + iot: iot, + sense_distance: sense_distance, lightLevel: lightLevel == 1 ? "dark" : lightLevel == 2 ? "bright" : "unknown", + is_light: is_light, }; return data; @@ -288,32 +295,36 @@ 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 byte5 = buf.readUInt8(5); - // let byte6 = buf.readUInt8(6); - // let byte7 = buf.readUInt8(7); - // let byte8 = buf.readUInt8(8); - - let pirState = byte1 & 0b01000000 ? true : false; // 1 - Movement detected - let battery = byte2 & 0b01111111; // % - let hallState = (byte3 >> 1) & 0b00000011; - let lightLevel = byte3 & 0b00000001; - - 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: pirState, + movement: movement, + tested: tested, battery: battery, + contact_open: contact_open, + contact_timeout: contact_timeout, + lightLevel: lightLevel == 0 ? "dark" : "bright", + button_count: button_count, doorState: hallState == 0 ? "close" : hallState == 1 ? "open" : "timeout no closed", - lightLevel: lightLevel == 0 ? "dark" : "bright", }; return data; @@ -328,24 +339,27 @@ 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 byte5 = buf.readUInt8(5); - - let calibration = byte1 & 0b01000000 ? true : false; // Whether the calibration is completed - let battery = byte2 & 0b01111111; // % - let currPosition = byte3 & 0b01111111; // current positon % - let lightLevel = (byte4 >> 4) & 0b00001111; // light sensor level (1-10) - - 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 completed + 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, battery: battery, + inMotion: inMotion, position: currPosition, lightLevel: lightLevel, + deviceChain: deviceChain, }; return data; @@ -360,40 +374,46 @@ class SwitchbotAdvertising { } return null; } - const byte9 = buf.readUInt8(9); // byte9: color bulb state; 0x00=off, 0x80=on & lightLevel: 1~100% - //const byte10 = buf.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 = buf.readUInt8(11); // byte11: wifi rssi - //const byte12 = buf.readUInt8(12); // byte12: bit7: overload? - //const byte13 = buf.readUInt8(13); // byte12[bit0~6] + byte13: current power value - - const state = byte9 === 0x01 ? "off" : byte9 === 0x80 ? "on" : null; - const lightLevel = byte9 & 0b00000011; - //const delay = !!(byte10 & 0b00000001); - //const networkStatus = !!(byte10 & 0b00000001); - //const statePreset = !!(byte10 & 0b00000010); - //const lightState = !!(byte10 & 0b00000100); - //const wifiRssi = byte11; - //const dynamicRate = !!(byte12 & 0b10000000); - //const loopIndex = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt + 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 byte6 = buf.readUInt8(6);//bulb temperature + const byte7 = buf.readUInt8(7); + const byte8 = buf.readUInt8(8); + const byte9 = buf.readUInt8(9); + const byte10 = buf.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, + power: power, state: state, - }; - /* const data = { - model: "u", - modelName: "WoBulb", - state: state, - lightLevel: lightLevel, + red: red, + green: green, + blue: blue, + brightness: brightness, delay: delay, - networkStatus: networkStatus, - statePreset: statePreset, - lightState: lightState, - wifiRssi: wifiRssi, - dynamicRate: dynamicRate, - loopIndex: loopIndex, - };*/ + preset: preset, + color_mode: color_mode, + speed: speed, + loop_index: loop_index, + }; return data; } @@ -485,22 +505,17 @@ 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 byte5 = buf.readUInt8(5); + const byte1 = buf.readUInt8(1); + const byte2 = buf.readUInt8(2); - //let pirState = (byte1 & 0b01000000) ? true : false; // 1 - Movement detected - let battery = byte2 & 0b01111111; // % - //let lightLevel = byte5 & 0b00000011; + const movement = (byte1 & 0b01000000) ? true : false; // 1 - Movement detected + const battery = byte2 & 0b01111111; // % - let data = { + const data = { model: "o", modelName: "WoSmartLock", - //movement: pirState, battery: battery, - //lightLevel: (lightLevel == 1) ? 'dark' : ((lightLevel == 2) ? 'bright' : 'unknown'), + movement: movement, }; return data; @@ -515,17 +530,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 / 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: { @@ -549,40 +564,42 @@ class SwitchbotAdvertising { } return null; } - const byte9 = buf.readUInt8(9); // byte9: color bulb state; 0x00=off, 0x80=on & lightLevel: 1~100% - //const byte10 = buf.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 = buf.readUInt8(11); // byte11: wifi rssi - //const byte12 = buf.readUInt8(12); // byte12: bit7: overload? - //const byte13 = buf.readUInt8(13); // byte12[bit0~6] + byte13: current power value - - const state = byte9 === 0x01 ? "off" : byte9 === 0x80 ? "on" : null; - //const lightLevel = byte9 & 0b00000011; - //const delay = !!(byte10 & 0b00000001); - //const networkStatus = !!(byte10 & 0b00000001); - //const statePreset = !!(byte10 & 0b00000010); - //const lightState = !!(byte10 & 0b00000100); - //const wifiRssi = byte11; - //const dynamicRate = !!(byte12 & 0b10000000); - //const loopIndex = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt + + 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, - }; - /* const data = { - model: "u", - modelName: "WoBulb", - state: state, - lightLevel: lightLevel, + brightness: brightness, + red: red, + green: green, + blue: blue, delay: delay, - networkStatus: networkStatus, - statePreset: statePreset, - lightState: lightState, - wifiRssi: wifiRssi, - dynamicRate: dynamicRate, - loopIndex: loopIndex, - };*/ + preset: preset, + color_mode: color_mode, + speed: speed, + loop_index: loop_index, + }; return data; } diff --git a/lib/switchbot-device-wobulb.js b/lib/switchbot-device-wobulb.js index 1b0c7048..cb0e2a7e 100644 --- a/lib/switchbot-device-wobulb.js +++ b/lib/switchbot-device-wobulb.js @@ -35,10 +35,114 @@ class SwitchbotDeviceWoBulb extends SwitchbotDevice { } /** - * @returns {Promise} resolves with a boolean that tells whether the plug in ON(true) or OFF(false) + * @returns {Promise} resolves with brightness percent + */ + setBrightness(brightness) { + if (typeof brightness != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target brightness percentage is incorrent: " + + typeof brightness + ) + ); + }); + } + if (brightness > 100) { + brightness = 100; + } else if (brightness < 0) { + brightness = 0; + } + return this._setState([0x02, 0x14]); + } + + /** + * @returns {Promise} resolves with brightness percent + */ + setColorTemperature(color_temperature) { + if (typeof color_temperature != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target brightness percentage is incorrent: " + + typeof brightness + ) + ); + }); + } + if (color_temperature > 100) { + color_temperature = 100; + } else if (color_temperature < 0) { + color_temperature = 0; + } + return this._setState([0x02, 0x17, color_temperature]); + } + + /** + * @returns {Promise} resolves with brightness percent */ - toggle() { - return this._setState([0x02, 0x03]); + setRGB(brightness, red, green, blue) { + if (typeof brightness != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target brightness percentage is incorrent: " + + typeof brightness + ) + ); + }); + } + if (typeof red != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target red is incorrent: " + + typeof red + ) + ); + }); + } + if (typeof green != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target green is incorrent: " + + typeof green + ) + ); + }); + } + if (typeof blue != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target blue is incorrent: " + + typeof blue + ) + ); + }); + } + if (brightness > 100) { + brightness = 100; + } else if (brightness < 0) { + brightness = 0; + } + if (red > 255) { + red = 255; + } else if (red < 0) { + red = 0; + } + if (green > 255) { + green = 255; + } else if (green < 0) { + green = 0; + } + if (blue > 255) { + blue = 255; + } else if (blue < 0) { + blue = 0; + } + return this._setState([0x02, 0x12, brightness, red, green, blue]); } /** @@ -51,7 +155,7 @@ class SwitchbotDeviceWoBulb extends SwitchbotDevice { .then((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) { const is_on = code === 0x80; resolve(is_on); diff --git a/lib/switchbot-device-wocurtain.js b/lib/switchbot-device-wocurtain.js index f176631b..92ff56c3 100644 --- a/lib/switchbot-device-wocurtain.js +++ b/lib/switchbot-device-wocurtain.js @@ -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 e799b272..3cd9378f 100644 --- a/lib/switchbot-device-wohand.js +++ b/lib/switchbot-device-wohand.js @@ -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 4b15f88b..e7d055bd 100644 --- a/lib/switchbot-device-wohumi.js +++ b/lib/switchbot-device-wohumi.js @@ -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 cf1c319c..0e91068d 100644 --- a/lib/switchbot-device-woplugmini.js +++ b/lib/switchbot-device-woplugmini.js @@ -51,7 +51,7 @@ class SwitchbotDeviceWoPlugMini extends SwitchbotDevice { .then((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) { const is_on = code === 0x80; resolve(is_on); diff --git a/lib/switchbot-device-wostrip.js b/lib/switchbot-device-wostrip.js index ada1fb68..db444e61 100644 --- a/lib/switchbot-device-wostrip.js +++ b/lib/switchbot-device-wostrip.js @@ -35,10 +35,108 @@ class SwitchbotDeviceWoStrip extends SwitchbotDevice { } /** - * @returns {Promise} resolves with a boolean that tells whether the plug in ON(true) or OFF(false) + * @returns {Promise} resolves with brightness percent + */ + setBrightness(brightness) { + if (typeof brightness != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target brightness percentage is incorrent: " + + typeof brightness + ) + ); + }); + } + if (brightness > 100) { + brightness = 100; + } else if (brightness < 0) { + brightness = 0; + } + return this._setState([0x02, 0x14]); + } + + /** + * @returns {Promise} resolves with color temperature + */ + setColorTemperature(color_temperature) { + if (color_temperature) { + return new Promise((resolve, reject) => { + reject( + new Error( + "Strip Light Doesn't Support Color temperature: " + + typeof color_temperature + ) + ); + }); + } + } + + /** + * @returns {Promise} resolves with brightness + rgb */ - toggle() { - return this._setState([0x02, 0x03]); + setRGB(brightness, red, green, blue) { + if (typeof brightness != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target brightness percentage is incorrent: " + + typeof brightness + ) + ); + }); + } + if (typeof red != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target red is incorrent: " + + typeof red + ) + ); + }); + } + if (typeof green != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target green is incorrent: " + + typeof green + ) + ); + }); + } + if (typeof blue != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target blue is incorrent: " + + typeof blue + ) + ); + }); + } + if (brightness > 100) { + brightness = 100; + } else if (brightness < 0) { + brightness = 0; + } + if (red > 255) { + red = 255; + } else if (red < 0) { + red = 0; + } + if (green > 255) { + green = 255; + } else if (green < 0) { + green = 0; + } + if (blue > 255) { + blue = 255; + } else if (blue < 0) { + blue = 0; + } + return this._setState([0x02, 0x12, brightness, red, green, blue]); } /** @@ -51,7 +149,7 @@ class SwitchbotDeviceWoStrip extends SwitchbotDevice { .then((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) { const is_on = code === 0x80; resolve(is_on); diff --git a/lib/switchbot-device.js b/lib/switchbot-device.js index c7ec6594..a09e38e0 100644 --- a/lib/switchbot-device.js +++ b/lib/switchbot-device.js @@ -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; @@ -155,7 +155,7 @@ class SwitchbotDevice { _getCharacteristics() { return new Promise((resolve, reject) => { // Set timeout timer - let timer = setTimeout(() => { + const timer = setTimeout(() => { this._ondisconnect_internal = () => {}; timer = null; reject( @@ -179,20 +179,20 @@ 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); - for (let char of char_list) { + for (const service of service_list) { + const char_list = await this._discoverCharacteristics(service); + for (const char of char_list) { if (char.uuid === this._CHAR_UUID_WRITE) { chars.write = char; } else if (char.uuid === this._CHAR_UUID_NOTIFY) { @@ -230,8 +230,8 @@ class SwitchbotDevice { return; } - let service = null; - for (let s of service_list) { + const service = null; + for (const s of service_list) { if (s.uuid === this._SERV_UUID_PRIMARY) { service = s; break; @@ -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) { @@ -439,7 +439,7 @@ class SwitchbotDevice { return; } - let res_buf = null; + const res_buf = null; this._connect() .then(() => { @@ -463,7 +463,7 @@ class SwitchbotDevice { _waitCommandResponse() { return new Promise((resolve, reject) => { - let timer = setTimeout(() => { + const timer = setTimeout(() => { timer = null; this._onnotify_internal = () => {}; reject(new Error("COMMAND_TIMEOUT")); @@ -484,7 +484,7 @@ class SwitchbotDevice { _read(char) { return new Promise((resolve, reject) => { // Set a timeout timer - let timer = setTimeout(() => { + const timer = setTimeout(() => { reject("READ_TIMEOUT"); }, this._READ_TIMEOUT_MSEC); @@ -507,7 +507,7 @@ class SwitchbotDevice { _write(char, buf) { return new Promise((resolve, reject) => { // Set a timeout timer - let timer = setTimeout(() => { + const timer = setTimeout(() => { reject("WRITE_TIMEOUT"); }, this._WRITE_TIMEOUT_MSEC); diff --git a/lib/switchbot.js b/lib/switchbot.js index 3eac618e..474872ff 100644 --- a/lib/switchbot.js +++ b/lib/switchbot.js @@ -26,7 +26,7 @@ class Switchbot { * ---------------------------------------------------------------- */ constructor(params) { // Check parameters - let noble = null; + const noble = null; if (params && params.noble) { noble = params.noble; } else { @@ -83,9 +83,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 }, @@ -110,7 +110,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 || "", @@ -120,16 +120,16 @@ class Switchbot { // Initialize the noble object this._init() .then(() => { - let peripherals = {}; - let timer = null; - let finishDiscovery = () => { + const peripherals = {}; + const timer = null; + const finishDiscovery = () => { if (timer) { clearTimeout(timer); } this.noble.removeAllListeners("discover"); this.noble.stopScanning(); - let device_list = []; - for (let addr in peripherals) { + const device_list = []; + for (const addr in peripherals) { device_list.push(peripherals[addr]); } resolve(device_list); @@ -137,11 +137,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") { @@ -177,13 +177,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); @@ -193,7 +193,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); @@ -205,9 +205,9 @@ 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; + const device = null; switch (ad.serviceData.model) { case "H": device = new SwitchbotDeviceWoHand(peripheral, this.noble); @@ -258,7 +258,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; } @@ -324,9 +324,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: { @@ -352,14 +352,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 && @@ -419,7 +419,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 57971f96..f557df39 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { "name": "node-switchbot", - "version": "1.5.0", + "version": "1.6.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "node-switchbot", - "version": "1.5.0", + "version": "1.6.0", "license": "MIT", "dependencies": { "@abandonware/noble": "^1.9.2-15" }, "devDependencies": { - "npm-check-updates": "^16.3.8" + "npm-check-updates": "^16.3.13" } }, "node_modules/@abandonware/bluetooth-hci-socket": { @@ -120,102 +120,101 @@ } }, "node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.0.0.tgz", + "integrity": "sha512-GdeVD+dnBxzMslTFvnctLX5yIqV4ZNZBWNbo1OejQ++bZpnFNQ1AjOn9Sboi+LzheQbCBU1ts1mhEVduHrcZOQ==", "dev": true, "dependencies": { - "@gar/promisify": "^1.1.3", "semver": "^7.3.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/git": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", - "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.1.tgz", + "integrity": "sha512-sfaCFyZO7Zsxia2TNHW8TeHFIUnK63896EZFA5K0vCReOMFi9aELB5RZyFveRLaBE/pT1BS6RxbTWZGjulNgSg==", "dev": true, "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/promise-spawn": "^4.0.0", "lru-cache": "^7.4.4", "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^2.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.0.tgz", + "integrity": "sha512-vpPDeSnqHAXaPK1l6lcIcpgK/aIe63AbNR5vbzOhO6I2rkaFZmviQZ5nAlSpt+vwKrOH1CnplOdoE5/x8FWtNA==", "dev": true, "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "bin": { "installed-package-contents": "index.js" }, "engines": { - "node": ">= 10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-3.0.0.tgz", + "integrity": "sha512-mOUBUIXsqAQBfn87vGIjBAve6JmD9PkP9Vdq2SayDqQh2Ol60hnXaBSvT4V6IQiho1otw6SipnVV1fulvOiyKQ==", "dev": true, "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "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/@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-4.0.0.tgz", + "integrity": "sha512-LM/GRZSwkxar1jgd58yW5WspFWrFefh8a/KVy+sbOMa0pCwqlXWxXEjQRQzbtWExyhwPb2XSK/4mJnLeiVOYng==", "dev": true, "dependencies": { "infer-owner": "^1.0.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/run-script": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", - "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-5.0.0.tgz", + "integrity": "sha512-AuqcoTOt7v4D2JqC7mCa+eUQHb64vWbwyu9o1hoJiq2kfZNwCB71f0s7tvUw+v+1B5XMdqcr98aGzjKIg7s6Vw==", "dev": true, "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^4.0.0", "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", + "read-package-json-fast": "^3.0.0", "which": "^2.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@pnpm/network.ca-file": { @@ -346,9 +345,9 @@ } }, "node_modules/ansi-styles": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz", - "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "engines": { "node": ">=12" @@ -506,32 +505,28 @@ } }, "node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.1.tgz", + "integrity": "sha512-HRnDSZUXB5hdCQc2wuB8eBQPe1a9PVU2Ow8zMTi82NGJZmBGNTSjEGzetlndKlqpVYBa4esdaJ2LH6/uOB4sFQ==", "dev": true, "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", + "@npmcli/fs": "^3.0.0", + "@npmcli/move-file": "^3.0.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", - "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "unique-filename": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/cacheable-lookup": { @@ -574,9 +569,9 @@ } }, "node_modules/chalk": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.0.tgz", - "integrity": "sha512-56zD4khRTBoIyzUYAFgDDaPhUMN/fC/rySe6aZGqbj/VWiU2eI3l6ZLOtYGFZAV5v02mwPjtpzlrOveJiz5eZQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -595,9 +590,9 @@ } }, "node_modules/ci-info": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", - "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==", "dev": true }, "node_modules/clean-stack": { @@ -1106,9 +1101,9 @@ } }, "node_modules/got": { - "version": "12.5.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.5.1.tgz", - "integrity": "sha512-sD16AK8cCyUoPtKr/NMvLTFFa+T3i3S+zoiuvhq0HP2YiqBZA9AtlBjAdsQBsLBK7slPuvmfE0OxhGi7N5dD4w==", + "version": "12.5.2", + "resolved": "https://registry.npmjs.org/got/-/got-12.5.2.tgz", + "integrity": "sha512-guHGMSEcsA5m1oPRweXUJnug0vuvlkX9wx5hzOka+ZBrBUOJHU0Z1JcNu3QE5IPGnA5aXUsQHdWOD4eJg9/v3A==", "dev": true, "dependencies": { "@sindresorhus/is": "^5.2.0", @@ -1255,15 +1250,15 @@ } }, "node_modules/ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.0.tgz", + "integrity": "sha512-bTf9UWe/UP1yxG3QUrj/KOvEhTAUWPcv+WvbFZ28LcqznXabp7Xu6o9y1JEC18+oqODuS7VhTpekV5XvFwsxJg==", "dev": true, "dependencies": { "minimatch": "^5.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/import-lazy": { @@ -1343,9 +1338,9 @@ } }, "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -1491,10 +1486,13 @@ "dev": true }, "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/json-parse-helpfulerror": { "version": "1.0.3", @@ -1658,6 +1656,97 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1705,10 +1794,13 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minipass": { "version": "3.3.4", @@ -1828,9 +1920,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "optional": true }, "node_modules/negotiator": { @@ -1868,9 +1960,9 @@ } }, "node_modules/node-gyp": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.2.0.tgz", - "integrity": "sha512-/+/YxGfIJOh/fnMsr4Ep0v6oOIjnO1BgLd2dcDspBX1spTkQU7xSIox5RdRE/2/Uq3ZwK8Z5swRIbMUmPlslmg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", + "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", "dev": true, "dependencies": { "env-paths": "^2.2.0", @@ -2022,18 +2114,30 @@ } }, "node_modules/normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, "dependencies": { - "hosted-git-info": "^5.0.0", + "hosted-git-info": "^6.0.0", "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.0.0.tgz", + "integrity": "sha512-NURrKJX36ihI69iCqcvN4uuIk9fHcc1C+uax/5fPh4Tr5WJnATir+QM/CMJNKrcOOvxQDsAdS5C9oJliM80X7g==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/normalize-url": { @@ -2049,21 +2153,24 @@ } }, "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "dev": true, "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-check-updates": { - "version": "16.3.8", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.8.tgz", - "integrity": "sha512-2CUeCWEs+arWQUJH2IEkiZU/Ak2fLBqGkMyM5JDkfnGhz1VHNe3yyGiXD+0JeVmjbXTEpgZ0t6C9VK52atGuAw==", + "version": "16.3.13", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.13.tgz", + "integrity": "sha512-iBMvWZG4tvQBg4Ocb5QvyqIXW1t8D4/6usMPWgMWjw3/7Sh2/GXFMRlWKCVqeT5uBL/W6siNGTr4/QVXEM+WLQ==", "dev": true, "dependencies": { - "chalk": "^5.0.1", + "chalk": "^5.1.2", "cli-table": "^0.3.11", "commander": "^9.4.1", "fast-memoize": "^2.5.2", @@ -2077,20 +2184,20 @@ "lodash": "^4.17.21", "minimatch": "^5.1.0", "p-map": "^4.0.0", - "pacote": "^13.6.2", + "pacote": "^15.0.0", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts-ncu": "^2.5.1", "rc-config-loader": "^4.1.0", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.7", + "semver": "^7.3.8", "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", "spawn-please": "^1.0.0", "untildify": "^4.0.0", "update-notifier": "^6.0.2", - "yaml": "^2.1.1" + "yaml": "^2.1.3" }, "bin": { "ncu": "build/src/bin/cli.js", @@ -2101,22 +2208,25 @@ } }, "node_modules/npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.0.0.tgz", + "integrity": "sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==", "dev": true, "dependencies": { "semver": "^7.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz", + "integrity": "sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/npm-package-arg": { "version": "9.1.2", @@ -2133,85 +2243,180 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/npm-package-arg/node_modules/proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/npm-packlist": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", - "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.1.tgz", + "integrity": "sha512-XddbYutimy7hdmP7S1tHMjFwghn64lvgdnhYG0KLGFBWjEvMt1/jg95OR3vPNNCjkakHS+k4a//3XOO8JOGI2A==", "dev": true, "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "bin": { - "npm-packlist": "bin/index.js" + "ignore-walk": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-packlist/node_modules/npm-bundled": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", - "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", "dev": true, "dependencies": { - "npm-normalize-package-bin": "^2.0.0" + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.0.0.tgz", + "integrity": "sha512-NURrKJX36ihI69iCqcvN4uuIk9fHcc1C+uax/5fPh4Tr5WJnATir+QM/CMJNKrcOOvxQDsAdS5C9oJliM80X7g==", "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-pick-manifest": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", - "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.0.0.tgz", + "integrity": "sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q==", "dev": true, "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "node_modules/npm-pick-manifest/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-registry-fetch": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", - "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.2.tgz", + "integrity": "sha512-TMenrMagFA9KF81E2bkS5XRyzERK4KXu70vgXt5+i8FcrFeLNgNsc6e5hekTqjDwPDkL3HGn/holWcXDMfnFgw==", "dev": true, "dependencies": { - "make-fetch-happen": "^10.0.6", + "make-fetch-happen": "^11.0.0", "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", + "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.0.0.tgz", + "integrity": "sha512-NURrKJX36ihI69iCqcvN4uuIk9fHcc1C+uax/5fPh4Tr5WJnATir+QM/CMJNKrcOOvxQDsAdS5C9oJliM80X7g==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.1.tgz", + "integrity": "sha512-clv3IblugXn2CDUmqFhNzii3rjKa46u5wNeivc+QlLXkGI5FjLX3rGboo+y2kwf1pd8W0iDiC384cemeDtw9kw==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "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/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.0.tgz", + "integrity": "sha512-NSx3k5gR4Q5Ts2poCM/19d45VwhVLBtJZ6ypYcthj2BwmDx/e7lW8Aadnyt3edd2W0ecb+b0o7FYLRYE2AGcQg==", + "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "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/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.0.0.tgz", + "integrity": "sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npmlog": { @@ -2317,38 +2522,34 @@ } }, "node_modules/pacote": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", - "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.1.tgz", + "integrity": "sha512-91Po/ZZE5fIEkbesHwsZPNae7SczIN8pSD2od96NMCfA2gGzdeEVY4CAFfXZKi+lfSEOlFIsKadRrYPj7nR/PA==", "dev": true, "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.0", + "@npmcli/promise-spawn": "^4.0.0", + "@npmcli/run-script": "^5.0.0", + "cacache": "^17.0.0", "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", "minipass": "^3.1.6", - "mkdirp": "^1.0.4", "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11" }, "bin": { "pacote": "lib/bin.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/parse-github-url": { @@ -2403,12 +2604,12 @@ } }, "node_modules/proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "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/progress": { @@ -2539,40 +2740,31 @@ "dev": true }, "node_modules/read-package-json": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", - "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", + "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==", "dev": true, "dependencies": { "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.1.tgz", + "integrity": "sha512-8+HW7Yo+cjfF+md8DqsZHgats2mxf7gGYow/+2JjxrftoHFZz9v4dzd0EubzYbkNaLxrTVcnllHwklXN2+7aTQ==", "dev": true, "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "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/readable-stream": { @@ -2954,15 +3146,15 @@ "dev": true }, "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.0.tgz", + "integrity": "sha512-64ghGOpqW0k+jh7m5jndBGdVEoPikWwGQmBNN5ks6jyUSMymzHDTlnNHOvzp+6MmHOljr2MokUzvRksnTwG0Iw==", "dev": true, "dependencies": { "minipass": "^3.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/string_decoder": { @@ -3066,27 +3258,27 @@ } }, "node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, "dependencies": { - "unique-slug": "^3.0.0" + "unique-slug": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-string": { @@ -3492,26 +3684,25 @@ } }, "@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.0.0.tgz", + "integrity": "sha512-GdeVD+dnBxzMslTFvnctLX5yIqV4ZNZBWNbo1OejQ++bZpnFNQ1AjOn9Sboi+LzheQbCBU1ts1mhEVduHrcZOQ==", "dev": true, "requires": { - "@gar/promisify": "^1.1.3", "semver": "^7.3.5" } }, "@npmcli/git": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", - "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.1.tgz", + "integrity": "sha512-sfaCFyZO7Zsxia2TNHW8TeHFIUnK63896EZFA5K0vCReOMFi9aELB5RZyFveRLaBE/pT1BS6RxbTWZGjulNgSg==", "dev": true, "requires": { - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/promise-spawn": "^4.0.0", "lru-cache": "^7.4.4", "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", @@ -3519,19 +3710,19 @@ } }, "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.0.tgz", + "integrity": "sha512-vpPDeSnqHAXaPK1l6lcIcpgK/aIe63AbNR5vbzOhO6I2rkaFZmviQZ5nAlSpt+vwKrOH1CnplOdoE5/x8FWtNA==", "dev": true, "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" } }, "@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-3.0.0.tgz", + "integrity": "sha512-mOUBUIXsqAQBfn87vGIjBAve6JmD9PkP9Vdq2SayDqQh2Ol60hnXaBSvT4V6IQiho1otw6SipnVV1fulvOiyKQ==", "dev": true, "requires": { "mkdirp": "^1.0.4", @@ -3539,30 +3730,30 @@ } }, "@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true }, "@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-4.0.0.tgz", + "integrity": "sha512-LM/GRZSwkxar1jgd58yW5WspFWrFefh8a/KVy+sbOMa0pCwqlXWxXEjQRQzbtWExyhwPb2XSK/4mJnLeiVOYng==", "dev": true, "requires": { "infer-owner": "^1.0.4" } }, "@npmcli/run-script": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", - "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-5.0.0.tgz", + "integrity": "sha512-AuqcoTOt7v4D2JqC7mCa+eUQHb64vWbwyu9o1hoJiq2kfZNwCB71f0s7tvUw+v+1B5XMdqcr98aGzjKIg7s6Vw==", "dev": true, "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^4.0.0", "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", + "read-package-json-fast": "^3.0.0", "which": "^2.0.2" } }, @@ -3664,9 +3855,9 @@ "devOptional": true }, "ansi-styles": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz", - "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true }, "aproba": { @@ -3787,29 +3978,25 @@ } }, "cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.1.tgz", + "integrity": "sha512-HRnDSZUXB5hdCQc2wuB8eBQPe1a9PVU2Ow8zMTi82NGJZmBGNTSjEGzetlndKlqpVYBa4esdaJ2LH6/uOB4sFQ==", "dev": true, "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", + "@npmcli/fs": "^3.0.0", + "@npmcli/move-file": "^3.0.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", - "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "unique-filename": "^3.0.0" } }, "cacheable-lookup": { @@ -3840,9 +4027,9 @@ "dev": true }, "chalk": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.0.tgz", - "integrity": "sha512-56zD4khRTBoIyzUYAFgDDaPhUMN/fC/rySe6aZGqbj/VWiU2eI3l6ZLOtYGFZAV5v02mwPjtpzlrOveJiz5eZQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", "dev": true }, "chownr": { @@ -3852,9 +4039,9 @@ "devOptional": true }, "ci-info": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", - "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==", "dev": true }, "clean-stack": { @@ -4223,9 +4410,9 @@ } }, "got": { - "version": "12.5.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.5.1.tgz", - "integrity": "sha512-sD16AK8cCyUoPtKr/NMvLTFFa+T3i3S+zoiuvhq0HP2YiqBZA9AtlBjAdsQBsLBK7slPuvmfE0OxhGi7N5dD4w==", + "version": "12.5.2", + "resolved": "https://registry.npmjs.org/got/-/got-12.5.2.tgz", + "integrity": "sha512-guHGMSEcsA5m1oPRweXUJnug0vuvlkX9wx5hzOka+ZBrBUOJHU0Z1JcNu3QE5IPGnA5aXUsQHdWOD4eJg9/v3A==", "dev": true, "requires": { "@sindresorhus/is": "^5.2.0", @@ -4339,9 +4526,9 @@ "dev": true }, "ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.0.tgz", + "integrity": "sha512-bTf9UWe/UP1yxG3QUrj/KOvEhTAUWPcv+WvbFZ28LcqznXabp7Xu6o9y1JEC18+oqODuS7VhTpekV5XvFwsxJg==", "dev": true, "requires": { "minimatch": "^5.0.1" @@ -4409,9 +4596,9 @@ } }, "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "requires": { "has": "^1.0.3" @@ -4518,9 +4705,9 @@ "dev": true }, "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true }, "json-parse-helpfulerror": { @@ -4640,6 +4827,81 @@ "promise-retry": "^2.0.1", "socks-proxy-agent": "^7.0.0", "ssri": "^9.0.0" + }, + "dependencies": { + "@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + } + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + } } }, "merge2": { @@ -4674,9 +4936,9 @@ } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true }, "minipass": { @@ -4768,9 +5030,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "optional": true }, "negotiator": { @@ -4794,9 +5056,9 @@ } }, "node-gyp": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.2.0.tgz", - "integrity": "sha512-/+/YxGfIJOh/fnMsr4Ep0v6oOIjnO1BgLd2dcDspBX1spTkQU7xSIox5RdRE/2/Uq3ZwK8Z5swRIbMUmPlslmg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", + "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", "dev": true, "requires": { "env-paths": "^2.2.0", @@ -4909,15 +5171,26 @@ } }, "normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, "requires": { - "hosted-git-info": "^5.0.0", + "hosted-git-info": "^6.0.0", "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" + }, + "dependencies": { + "hosted-git-info": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.0.0.tgz", + "integrity": "sha512-NURrKJX36ihI69iCqcvN4uuIk9fHcc1C+uax/5fPh4Tr5WJnATir+QM/CMJNKrcOOvxQDsAdS5C9oJliM80X7g==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + } } }, "normalize-url": { @@ -4927,21 +5200,21 @@ "dev": true }, "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "dev": true, "requires": { - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^3.0.0" } }, "npm-check-updates": { - "version": "16.3.8", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.8.tgz", - "integrity": "sha512-2CUeCWEs+arWQUJH2IEkiZU/Ak2fLBqGkMyM5JDkfnGhz1VHNe3yyGiXD+0JeVmjbXTEpgZ0t6C9VK52atGuAw==", + "version": "16.3.13", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.13.tgz", + "integrity": "sha512-iBMvWZG4tvQBg4Ocb5QvyqIXW1t8D4/6usMPWgMWjw3/7Sh2/GXFMRlWKCVqeT5uBL/W6siNGTr4/QVXEM+WLQ==", "dev": true, "requires": { - "chalk": "^5.0.1", + "chalk": "^5.1.2", "cli-table": "^0.3.11", "commander": "^9.4.1", "fast-memoize": "^2.5.2", @@ -4955,35 +5228,35 @@ "lodash": "^4.17.21", "minimatch": "^5.1.0", "p-map": "^4.0.0", - "pacote": "^13.6.2", + "pacote": "^15.0.0", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts-ncu": "^2.5.1", "rc-config-loader": "^4.1.0", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.7", + "semver": "^7.3.8", "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", "spawn-please": "^1.0.0", "untildify": "^4.0.0", "update-notifier": "^6.0.2", - "yaml": "^2.1.1" + "yaml": "^2.1.3" } }, "npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.0.0.tgz", + "integrity": "sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==", "dev": true, "requires": { "semver": "^7.1.1" } }, "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz", + "integrity": "sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==", "dev": true }, "npm-package-arg": { @@ -4996,70 +5269,150 @@ "proc-log": "^2.0.1", "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" - } - }, - "npm-packlist": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", - "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" }, "dependencies": { - "npm-bundled": { + "proc-log": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", - "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^2.0.0" - } - }, - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true } } }, + "npm-packlist": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.1.tgz", + "integrity": "sha512-XddbYutimy7hdmP7S1tHMjFwghn64lvgdnhYG0KLGFBWjEvMt1/jg95OR3vPNNCjkakHS+k4a//3XOO8JOGI2A==", + "dev": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, "npm-pick-manifest": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", - "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", "dev": true, "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", "semver": "^7.3.5" }, "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true + "hosted-git-info": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.0.0.tgz", + "integrity": "sha512-NURrKJX36ihI69iCqcvN4uuIk9fHcc1C+uax/5fPh4Tr5WJnATir+QM/CMJNKrcOOvxQDsAdS5C9oJliM80X7g==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "npm-package-arg": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.0.0.tgz", + "integrity": "sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } } } }, "npm-registry-fetch": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", - "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.2.tgz", + "integrity": "sha512-TMenrMagFA9KF81E2bkS5XRyzERK4KXu70vgXt5+i8FcrFeLNgNsc6e5hekTqjDwPDkL3HGn/holWcXDMfnFgw==", "dev": true, "requires": { - "make-fetch-happen": "^10.0.6", + "make-fetch-happen": "^11.0.0", "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", + "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.0.0.tgz", + "integrity": "sha512-NURrKJX36ihI69iCqcvN4uuIk9fHcc1C+uax/5fPh4Tr5WJnATir+QM/CMJNKrcOOvxQDsAdS5C9oJliM80X7g==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "make-fetch-happen": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.1.tgz", + "integrity": "sha512-clv3IblugXn2CDUmqFhNzii3rjKa46u5wNeivc+QlLXkGI5FjLX3rGboo+y2kwf1pd8W0iDiC384cemeDtw9kw==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "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" + } + }, + "minipass-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.0.tgz", + "integrity": "sha512-NSx3k5gR4Q5Ts2poCM/19d45VwhVLBtJZ6ypYcthj2BwmDx/e7lW8Aadnyt3edd2W0ecb+b0o7FYLRYE2AGcQg==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "npm-package-arg": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.0.0.tgz", + "integrity": "sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + } } }, "npmlog": { @@ -5135,31 +5488,27 @@ } }, "pacote": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", - "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.1.tgz", + "integrity": "sha512-91Po/ZZE5fIEkbesHwsZPNae7SczIN8pSD2od96NMCfA2gGzdeEVY4CAFfXZKi+lfSEOlFIsKadRrYPj7nR/PA==", "dev": true, "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.0", + "@npmcli/promise-spawn": "^4.0.0", + "@npmcli/run-script": "^5.0.0", + "cacache": "^17.0.0", "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", "minipass": "^3.1.6", - "mkdirp": "^1.0.4", "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11" } }, @@ -5194,9 +5543,9 @@ "dev": true }, "proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true }, "progress": { @@ -5291,33 +5640,25 @@ } }, "read-package-json": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", - "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", + "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==", "dev": true, "requires": { "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" } }, "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.1.tgz", + "integrity": "sha512-8+HW7Yo+cjfF+md8DqsZHgats2mxf7gGYow/+2JjxrftoHFZz9v4dzd0EubzYbkNaLxrTVcnllHwklXN2+7aTQ==", "dev": true, "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" } }, "readable-stream": { @@ -5594,9 +5935,9 @@ "dev": true }, "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.0.tgz", + "integrity": "sha512-64ghGOpqW0k+jh7m5jndBGdVEoPikWwGQmBNN5ks6jyUSMymzHDTlnNHOvzp+6MmHOljr2MokUzvRksnTwG0Iw==", "dev": true, "requires": { "minipass": "^3.1.1" @@ -5682,18 +6023,18 @@ } }, "unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, "requires": { - "unique-slug": "^3.0.0" + "unique-slug": "^4.0.0" } }, "unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, "requires": { "imurmurhash": "^0.1.4" diff --git a/package.json b/package.json index 61950b86..1c61d00d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-switchbot", - "version": "1.5.0", + "version": "1.6.0", "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": [ @@ -37,6 +37,6 @@ "@abandonware/noble": "^1.9.2-15" }, "devDependencies": { - "npm-check-updates": "^16.3.8" + "npm-check-updates": "^16.3.13" } } \ No newline at end of file