From 640f2d1ce87e2ca8d5bd48a322b516a3cc3b6127 Mon Sep 17 00:00:00 2001 From: Nelson Chan Date: Thu, 3 Aug 2023 03:06:52 +0800 Subject: [PATCH 1/7] Feat: Serverside pagination for importantBeats --- package-lock.json | 6 +++ package.json | 1 + server/server.js | 78 +++++++++++++++++++++++---- src/mixins/socket.js | 18 ++----- src/pages/DashboardHome.vue | 105 ++++++++++++++++++++---------------- src/pages/Details.vue | 91 ++++++++++++++++++++++++------- 6 files changed, 209 insertions(+), 90 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7db707f4e9..aba10138e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,6 +46,7 @@ "knex": "^2.4.2", "limiter": "~2.1.0", "liquidjs": "^10.7.0", + "mitt": "^3.0.1", "mongodb": "~4.14.0", "mqtt": "~4.3.7", "mssql": "~8.1.4", @@ -14172,6 +14173,11 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", diff --git a/package.json b/package.json index 38ea7249fa..9e067c0ab5 100644 --- a/package.json +++ b/package.json @@ -108,6 +108,7 @@ "knex": "^2.4.2", "limiter": "~2.1.0", "liquidjs": "^10.7.0", + "mitt": "^3.0.1", "mongodb": "~4.14.0", "mqtt": "~4.3.7", "mssql": "~8.1.4", diff --git a/server/server.js b/server/server.js index cedef1d507..dd8f53f667 100644 --- a/server/server.js +++ b/server/server.js @@ -144,7 +144,7 @@ if (config.demoMode) { } // Must be after io instantiation -const { sendNotificationList, sendHeartbeatList, sendImportantHeartbeatList, sendInfo, sendProxyList, sendDockerHostList, sendAPIKeyList } = require("./client"); +const { sendNotificationList, sendHeartbeatList, sendInfo, sendProxyList, sendDockerHostList, sendAPIKeyList } = require("./client"); const { statusPageSocketHandler } = require("./socket-handlers/status-page-socket-handler"); const databaseSocketHandler = require("./socket-handlers/database-socket-handler"); const TwoFA = require("./2fa"); @@ -996,8 +996,6 @@ let needSetup = false; }); await server.sendMonitorList(socket); - // Clear heartbeat list on client - await sendImportantHeartbeatList(socket, monitorID, true, true); } catch (e) { callback({ @@ -1169,6 +1167,74 @@ let needSetup = false; } }); + socket.on("monitorImportantHeartbeatListCount", async (monitorID, callback) => { + try { + checkLogin(socket); + + let count; + + if (monitorID == null) { + count = await R.count("heartbeat", "important = 1"); + } else { + count = await R.count("heartbeat", "monitor_id = ? AND important = 1", [ + monitorID, + ]); + } + + callback({ + ok: true, + count: count, + }); + } catch (e) { + callback({ + ok: false, + msg: e.message, + }); + } + }); + + socket.on("monitorImportantHeartbeatListPaged", async (monitorID, offset, count, callback) => { + try { + checkLogin(socket); + + let list; + + if (monitorID == null) { + list = await R.find("heartbeat", ` + important = 1 + ORDER BY time DESC + LIMIT ? + OFFSET ? + `, [ + count, + offset, + ]); + } else { + list = await R.find("heartbeat", ` + monitor_id = ? + AND important = 1 + ORDER BY time DESC + LIMIT ? + OFFSET ? + `, [ + monitorID, + count, + offset, + ]); + } + + callback({ + ok: true, + data: list, + }); + } catch (e) { + callback({ + ok: false, + msg: e.message, + }); + } + }); + socket.on("changePassword", async (password, callback) => { try { checkLogin(socket); @@ -1556,8 +1622,6 @@ let needSetup = false; monitorID, ]); - await sendImportantHeartbeatList(socket, monitorID, true, true); - callback({ ok: true, }); @@ -1742,10 +1806,6 @@ async function afterLogin(socket, user) { await sendHeartbeatList(socket, monitorID); } - for (let monitorID in monitorList) { - await sendImportantHeartbeatList(socket, monitorID); - } - for (let monitorID in monitorList) { await Monitor.sendStats(io, monitorID, user.id); } diff --git a/src/mixins/socket.js b/src/mixins/socket.js index d07993e23d..3159686ca1 100644 --- a/src/mixins/socket.js +++ b/src/mixins/socket.js @@ -3,6 +3,8 @@ import { useToast } from "vue-toastification"; import jwtDecode from "jwt-decode"; import Favico from "favico.js"; import dayjs from "dayjs"; +import mitt from "mitt"; + import { DOWN, MAINTENANCE, PENDING, UP } from "../util.ts"; import { getDevContainerServerHostname, isDevContainer } from "../util-frontend.js"; const toast = useToast(); @@ -59,6 +61,7 @@ export default { currentPassword: "", }, faviconUpdateDebounce: null, + emitter: mitt(), }; }, @@ -201,11 +204,7 @@ export default { } } - if (! (data.monitorID in this.importantHeartbeatList)) { - this.importantHeartbeatList[data.monitorID] = []; - } - - this.importantHeartbeatList[data.monitorID].unshift(data); + this.emitter.emit("newImportantHeartbeat", data); } }); @@ -229,14 +228,6 @@ export default { this.tlsInfoList[monitorID] = JSON.parse(data); }); - socket.on("importantHeartbeatList", (monitorID, data, overwrite) => { - if (! (monitorID in this.importantHeartbeatList) || overwrite) { - this.importantHeartbeatList[monitorID] = data; - } else { - this.importantHeartbeatList[monitorID] = data.concat(this.importantHeartbeatList[monitorID]); - } - }); - socket.on("connect_error", (err) => { console.error(`Failed to connect to the backend. Socket.io connect_error: ${err.message}`); this.connectionErrorMsg = `${this.$t("Cannot connect to the socket server.")} [${err}] ${this.$t("Reconnecting...")}`; @@ -621,7 +612,6 @@ export default { clearData() { console.log("reset heartbeat list"); this.heartbeatList = {}; - this.importantHeartbeatList = {}; }, /** diff --git a/src/pages/DashboardHome.vue b/src/pages/DashboardHome.vue index 0be4555a76..f9a1c56a0e 100644 --- a/src/pages/DashboardHome.vue +++ b/src/pages/DashboardHome.vue @@ -42,13 +42,13 @@ - {{ beat.name }} + {{ $root.monitorList[beat.monitorID]?.name }} {{ beat.msg }} - + {{ $t("No important events") }} @@ -59,7 +59,7 @@
@@ -92,72 +92,83 @@ export default { page: 1, perPage: 25, initialPerPage: 25, - heartBeatList: [], paginationConfig: { hideCount: true, chunksNavigation: "scroll", }, + importantHeartBeatListLength: 0, + displayedRecords: [], }; }, - computed: { - - importantHeartBeatList() { - let result = []; - - for (let monitorID in this.$root.importantHeartbeatList) { - let list = this.$root.importantHeartbeatList[monitorID]; - result = result.concat(list); - } - - for (let beat of result) { - let monitor = this.$root.monitorList[beat.monitorID]; - - if (monitor) { - beat.name = monitor.name; - } - } - - result.sort((a, b) => { - if (a.time > b.time) { - return -1; - } - - if (a.time < b.time) { - return 1; - } - - return 0; - }); - - // eslint-disable-next-line vue/no-side-effects-in-computed-properties - this.heartBeatList = result; - - return result; - }, - - displayedRecords() { - const startIndex = this.perPage * (this.page - 1); - const endIndex = startIndex + this.perPage; - return this.heartBeatList.slice(startIndex, endIndex); - }, - }, watch: { - importantHeartBeatList() { + displayedRecords() { this.$nextTick(() => { this.updatePerPage(); }); }, }, + mounted() { + this.getImportantHeartbeatListLength(); + + this.$root.emitter.on("newImportantHeartbeat", this.onNewImportantHeartbeat); + this.initialPerPage = this.perPage; window.addEventListener("resize", this.updatePerPage); this.updatePerPage(); }, + beforeUnmount() { + this.$root.emitter.off("newImportantHeartbeat", this.onNewImportantHeartbeat); + window.removeEventListener("resize", this.updatePerPage); }, + methods: { + /** + * Updates the displayed records when a new important heartbeat arrives. + * + * @param {object} heartbeat - The heartbeat object received. + */ + onNewImportantHeartbeat(heartbeat) { + if (this.page === 1) { + this.displayedRecords.unshift(heartbeat); + if (this.displayedRecords.length > this.perPage) { + this.displayedRecords.pop(); + } + this.importantHeartBeatListLength += 1; + } + }, + + /** + * Retrieves the length of the important heartbeat list for all monitors. + * + * @return {void} + */ + getImportantHeartbeatListLength() { + this.$root.getSocket().emit("monitorImportantHeartbeatListCount", null, (res) => { + if (res.ok) { + this.importantHeartBeatListLength = res.count; + this.getImportantHeartbeatListPaged(); + } + }); + }, + + /** + * Retrieves the important heartbeat list for the current page. + * + * @return {void} + */ + getImportantHeartbeatListPaged() { + const offset = (this.page - 1) * this.perPage; + this.$root.getSocket().emit("monitorImportantHeartbeatListPaged", null, offset, this.perPage, (res) => { + if (res.ok) { + this.displayedRecords = res.data; + } + }); + }, + updatePerPage() { const tableContainer = this.$refs.tableContainer; const tableContainerHeight = tableContainer.offsetHeight; diff --git a/src/pages/Details.vue b/src/pages/Details.vue index 77a1009ee1..e934297625 100644 --- a/src/pages/Details.vue +++ b/src/pages/Details.vue @@ -182,7 +182,7 @@ {{ beat.msg }} - + {{ $t("No important events") }} @@ -193,7 +193,7 @@
@@ -262,6 +262,8 @@ export default { chunksNavigation: "scroll", }, cacheTime: Date.now(), + importantHeartBeatListLength: 0, + displayedRecords: [], }; }, computed: { @@ -300,16 +302,6 @@ export default { return this.$t("notAvailableShort"); }, - importantHeartBeatList() { - if (this.$root.importantHeartbeatList[this.monitor.id]) { - // eslint-disable-next-line vue/no-side-effects-in-computed-properties - this.heartBeatList = this.$root.importantHeartbeatList[this.monitor.id]; - return this.$root.importantHeartbeatList[this.monitor.id]; - } - - return []; - }, - status() { if (this.$root.statusList[this.monitor.id]) { return this.$root.statusList[this.monitor.id]; @@ -333,12 +325,6 @@ export default { return this.tlsInfo != null && this.toggleCertInfoBox; }, - displayedRecords() { - const startIndex = this.perPage * (this.page - 1); - const endIndex = startIndex + this.perPage; - return this.heartBeatList.slice(startIndex, endIndex); - }, - group() { if (!this.monitor.pathName.includes("/")) { return ""; @@ -354,9 +340,23 @@ export default { return getResBaseURL() + this.monitor.screenshot + "?time=" + this.cacheTime; } }, + + watch: { + page(to) { + this.getImportantHeartbeatListPaged(); + }, + }, + mounted() { + this.getImportantHeartbeatListLength(); + + this.$root.emitter.on("newImportantHeartbeat", this.onNewImportantHeartbeat); + }, + beforeUnmount() { + this.$root.emitter.off("newImportantHeartbeat", this.onNewImportantHeartbeat); }, + methods: { getResBaseURL, /** @@ -441,7 +441,9 @@ export default { */ clearEvents() { this.$root.clearEvents(this.monitor.id, (res) => { - if (! res.ok) { + if (res.ok) { + this.getImportantHeartbeatListLength(); + } else { toast.error(res.msg); } }); @@ -502,7 +504,56 @@ export default { // Handle SQL Server return urlString.replaceAll(/Password=(.+);/ig, "Password=******;"); } - } + }, + + /** + * Retrieves the length of the important heartbeat list for this monitor. + * + * @return {void} + */ + getImportantHeartbeatListLength() { + if (this.monitor) { + this.$root.getSocket().emit("monitorImportantHeartbeatListCount", this.monitor.id, (res) => { + if (res.ok) { + this.importantHeartBeatListLength = res.count; + this.getImportantHeartbeatListPaged(); + } + }); + } + }, + + /** + * Retrieves the important heartbeat list for the current page. + * + * @return {void} + */ + getImportantHeartbeatListPaged() { + if (this.monitor) { + const offset = (this.page - 1) * this.perPage; + this.$root.getSocket().emit("monitorImportantHeartbeatListPaged", this.monitor.id, offset, this.perPage, (res) => { + if (res.ok) { + this.displayedRecords = res.data; + } + }); + } + }, + + /** + * Updates the displayed records when a new important heartbeat arrives. + * + * @param {object} heartbeat - The heartbeat object received. + */ + onNewImportantHeartbeat(heartbeat) { + if (heartbeat.monitorID === this.monitor?.id) { + if (this.page === 1) { + this.displayedRecords.unshift(heartbeat); + if (this.displayedRecords.length > this.perPage) { + this.displayedRecords.pop(); + } + this.importantHeartBeatListLength += 1; + } + } + }, }, }; From 524e7c2243eda6c7e6d0c1a70ff991d63bfdd57b Mon Sep 17 00:00:00 2001 From: Nelson Chan Date: Thu, 3 Aug 2023 03:21:56 +0800 Subject: [PATCH 2/7] Chore: Remove unused state --- src/mixins/socket.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mixins/socket.js b/src/mixins/socket.js index 3159686ca1..c40004a0b9 100644 --- a/src/mixins/socket.js +++ b/src/mixins/socket.js @@ -41,7 +41,6 @@ export default { maintenanceList: {}, apiKeyList: {}, heartbeatList: { }, - importantHeartbeatList: { }, avgPingList: { }, uptimeList: { }, tlsInfoList: {}, From 034649a9ab7def59680d43cf7ff87df15fa1b4f2 Mon Sep 17 00:00:00 2001 From: Nelson Chan <3271800+chakflying@users.noreply.github.com> Date: Thu, 3 Aug 2023 05:29:51 +0800 Subject: [PATCH 3/7] Apply suggestions from code review Co-authored-by: Frank Elsinga --- server/server.js | 2 -- src/pages/DashboardHome.vue | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/server/server.js b/server/server.js index dd8f53f667..e8544e7945 100644 --- a/server/server.js +++ b/server/server.js @@ -1172,7 +1172,6 @@ let needSetup = false; checkLogin(socket); let count; - if (monitorID == null) { count = await R.count("heartbeat", "important = 1"); } else { @@ -1198,7 +1197,6 @@ let needSetup = false; checkLogin(socket); let list; - if (monitorID == null) { list = await R.find("heartbeat", ` important = 1 diff --git a/src/pages/DashboardHome.vue b/src/pages/DashboardHome.vue index f9a1c56a0e..3782ab2a64 100644 --- a/src/pages/DashboardHome.vue +++ b/src/pages/DashboardHome.vue @@ -130,6 +130,7 @@ export default { * Updates the displayed records when a new important heartbeat arrives. * * @param {object} heartbeat - The heartbeat object received. + * @return {void} */ onNewImportantHeartbeat(heartbeat) { if (this.page === 1) { From 648acab6444123ec48b0875a24d85330bafc13cd Mon Sep 17 00:00:00 2001 From: Nelson Chan Date: Thu, 3 Aug 2023 05:46:10 +0800 Subject: [PATCH 4/7] Fix: Add watch for monitor --- src/pages/Details.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pages/Details.vue b/src/pages/Details.vue index e934297625..0f14a9dc91 100644 --- a/src/pages/Details.vue +++ b/src/pages/Details.vue @@ -345,6 +345,10 @@ export default { page(to) { this.getImportantHeartbeatListPaged(); }, + + monitor(to) { + this.getImportantHeartbeatListLength(); + } }, mounted() { From 92ecfba492e3636b4dfdf84cebcb21faf6c83cd2 Mon Sep 17 00:00:00 2001 From: Nelson Chan Date: Fri, 4 Aug 2023 18:31:59 +0800 Subject: [PATCH 5/7] Fix: Fix compatibility with dynamic page length --- src/pages/DashboardHome.vue | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/pages/DashboardHome.vue b/src/pages/DashboardHome.vue index 3782ab2a64..3cd12269b2 100644 --- a/src/pages/DashboardHome.vue +++ b/src/pages/DashboardHome.vue @@ -101,11 +101,15 @@ export default { }; }, watch: { - displayedRecords() { + perPage() { this.$nextTick(() => { - this.updatePerPage(); + this.getImportantHeartbeatListPaged(); }); }, + + page() { + this.getImportantHeartbeatListPaged(); + }, }, mounted() { From 285320dae85cb7fd2aac5b4f4de91aecc5762dfe Mon Sep 17 00:00:00 2001 From: Nelson Chan Date: Wed, 16 Aug 2023 16:00:52 +0800 Subject: [PATCH 6/7] Chore: Fix lint --- src/pages/DashboardHome.vue | 13 +++++++------ src/pages/Details.vue | 8 +++----- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/pages/DashboardHome.vue b/src/pages/DashboardHome.vue index 3cd12269b2..3baf35a622 100644 --- a/src/pages/DashboardHome.vue +++ b/src/pages/DashboardHome.vue @@ -132,9 +132,8 @@ export default { methods: { /** * Updates the displayed records when a new important heartbeat arrives. - * * @param {object} heartbeat - The heartbeat object received. - * @return {void} + * @returns {void} */ onNewImportantHeartbeat(heartbeat) { if (this.page === 1) { @@ -148,8 +147,7 @@ export default { /** * Retrieves the length of the important heartbeat list for all monitors. - * - * @return {void} + * @returns {void} */ getImportantHeartbeatListLength() { this.$root.getSocket().emit("monitorImportantHeartbeatListCount", null, (res) => { @@ -162,8 +160,7 @@ export default { /** * Retrieves the important heartbeat list for the current page. - * - * @return {void} + * @returns {void} */ getImportantHeartbeatListPaged() { const offset = (this.page - 1) * this.perPage; @@ -174,6 +171,10 @@ export default { }); }, + /** + * Updates the number of items shown per page based on the available height. + * @returns {void} + */ updatePerPage() { const tableContainer = this.$refs.tableContainer; const tableContainerHeight = tableContainer.offsetHeight; diff --git a/src/pages/Details.vue b/src/pages/Details.vue index 0f14a9dc91..e4cb368edf 100644 --- a/src/pages/Details.vue +++ b/src/pages/Details.vue @@ -512,8 +512,7 @@ export default { /** * Retrieves the length of the important heartbeat list for this monitor. - * - * @return {void} + * @returns {void} */ getImportantHeartbeatListLength() { if (this.monitor) { @@ -528,8 +527,7 @@ export default { /** * Retrieves the important heartbeat list for the current page. - * - * @return {void} + * @returns {void} */ getImportantHeartbeatListPaged() { if (this.monitor) { @@ -544,8 +542,8 @@ export default { /** * Updates the displayed records when a new important heartbeat arrives. - * * @param {object} heartbeat - The heartbeat object received. + * @returns {void} */ onNewImportantHeartbeat(heartbeat) { if (heartbeat.monitorID === this.monitor?.id) { From f64de15fac6c5c531d02467316863fc75181533f Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 23 Sep 2023 18:44:01 +0800 Subject: [PATCH 7/7] Merge conflict --- package-lock.json | 438 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 345 insertions(+), 93 deletions(-) diff --git a/package-lock.json b/package-lock.json index aba10138e1..eb192e8317 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uptime-kuma", - "version": "1.23.0-beta.1", + "version": "1.23.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "uptime-kuma", - "version": "1.23.0-beta.1", + "version": "1.23.2", "license": "MIT", "dependencies": { "@grpc/grpc-js": "~1.7.3", @@ -46,8 +46,8 @@ "knex": "^2.4.2", "limiter": "~2.1.0", "liquidjs": "^10.7.0", - "mitt": "^3.0.1", - "mongodb": "~4.14.0", + "mitt": "~3.0.1", + "mongodb": "~4.17.1", "mqtt": "~4.3.7", "mssql": "~8.1.4", "mysql2": "~2.3.3", @@ -99,12 +99,12 @@ "core-js": "~3.26.1", "cronstrue": "~2.24.0", "cross-env": "~7.0.3", - "cypress": "^12.17.0", + "cypress": "^13.2.0", "delay": "^5.0.0", "dns2": "~2.0.1", "dompurify": "~2.4.3", "eslint": "~8.14.0", - "eslint-plugin-jsdoc": "^46.4.6", + "eslint-plugin-jsdoc": "~46.4.6", "eslint-plugin-vue": "~8.7.1", "favico.js": "~0.3.10", "jest": "~29.6.1", @@ -120,6 +120,7 @@ "stylelint": "^15.10.1", "stylelint-config-standard": "~25.0.0", "terser": "~5.15.0", + "test": "~3.3.0", "timezones-list": "~3.0.1", "typescript": "~4.4.4", "v-pagination-3": "~0.1.7", @@ -3397,9 +3398,9 @@ } }, "node_modules/@cypress/request": { - "version": "2.88.11", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", - "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", + "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", "dev": true, "dependencies": { "aws-sign2": "~0.7.0", @@ -3415,9 +3416,9 @@ "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "~6.10.3", + "qs": "6.10.4", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", + "tough-cookie": "^4.1.3", "tunnel-agent": "^0.6.0", "uuid": "^8.3.2" }, @@ -4979,6 +4980,15 @@ "node-pre-gyp": "bin/node-pre-gyp" } }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", + "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -5982,6 +5992,18 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -6301,6 +6323,26 @@ "node": ">=8" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -8081,15 +8123,15 @@ "dev": true }, "node_modules/cypress": { - "version": "12.17.3", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.17.3.tgz", - "integrity": "sha512-/R4+xdIDjUSLYkiQfwJd630S81KIgicmQOLXotFxVXkl+eTeVO+3bHXxdi5KBh/OgC33HWN33kHX+0tQR/ZWpg==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.2.0.tgz", + "integrity": "sha512-AvDQxBydE771GTq0TR4ZUBvv9m9ffXuB/ueEtpDF/6gOcvFR96amgwSJP16Yhqw6VhmwqspT5nAGzoxxB+D89g==", "dev": true, "hasInstallScript": true, "dependencies": { - "@cypress/request": "^2.88.11", + "@cypress/request": "^3.0.0", "@cypress/xvfb": "^1.2.4", - "@types/node": "^16.18.39", + "@types/node": "^18.17.5", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", "arch": "^2.2.0", @@ -8122,6 +8164,7 @@ "minimist": "^1.2.8", "ospath": "^1.2.2", "pretty-bytes": "^5.6.0", + "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", "semver": "^7.5.3", @@ -8134,13 +8177,13 @@ "cypress": "bin/cypress" }, "engines": { - "node": "^14.0.0 || ^16.0.0 || >=18.0.0" + "node": "^16.0.0 || ^18.0.0 || >=20.0.0" } }, "node_modules/cypress/node_modules/@types/node": { - "version": "16.18.40", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.40.tgz", - "integrity": "sha512-+yno3ItTEwGxXiS/75Q/aHaa5srkpnJaH+kdkTVJ3DtJEwv92itpKbxU+FjPoh2m/5G9zmUQfrL4A4C13c+iGA==", + "version": "18.17.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.18.tgz", + "integrity": "sha512-/4QOuy3ZpV7Ya1GTRz5CYSz3DgkKpyUptXuQ5PPce7uuyJAOR7r9FhkmxJfvcNUXyklbC63a+YvB3jxy7s9ngw==", "dev": true }, "node_modules/cypress/node_modules/ansi-styles": { @@ -8373,6 +8416,19 @@ "node": ">=10" } }, + "node_modules/define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -8801,17 +8857,18 @@ } }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", "dependencies": { "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -8826,19 +8883,23 @@ "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -9378,6 +9439,15 @@ "node": ">= 0.6" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/event-to-promise": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.7.0.tgz", @@ -10022,14 +10092,14 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -11196,15 +11266,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -14190,12 +14256,12 @@ } }, "node_modules/mongodb": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.14.0.tgz", - "integrity": "sha512-coGKkWXIBczZPr284tYKFLg+KbGPPLlSbdgfKAb6QqCFt5bo5VFZ50O3FFzsw4rnkqjwT6D8Qcoo9nshYKM7Mg==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.1.tgz", + "integrity": "sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==", "dependencies": { - "bson": "^4.7.0", - "mongodb-connection-string-url": "^2.5.4", + "bson": "^4.7.2", + "mongodb-connection-string-url": "^2.6.0", "socks": "^2.7.1" }, "engines": { @@ -14203,7 +14269,7 @@ }, "optionalDependencies": { "@aws-sdk/credential-providers": "^3.186.0", - "saslprep": "^1.0.3" + "@mongodb-js/saslprep": "^1.1.0" } }, "node_modules/mongodb-connection-string-url": { @@ -15535,6 +15601,15 @@ "node": ">=6" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -15832,6 +15907,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -16213,13 +16294,13 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -16315,6 +16396,12 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "node_modules/resolve": { "version": "1.22.2", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", @@ -16605,6 +16692,28 @@ "tslib": "^2.1.0" } }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -16628,18 +16737,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/sass": { "version": "1.42.1", "resolved": "https://registry.npmjs.org/sass/-/sass-1.42.1.tgz", @@ -16776,6 +16873,19 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -17303,14 +17413,31 @@ "node": ">=8" } }, + "node_modules/string.prototype.replaceall": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.replaceall/-/string.prototype.replaceall-1.0.8.tgz", + "integrity": "sha512-MmCXb9980obcnmbEd3guqVl6lXTxpP28zASfgAlAhlBMw5XehQeSKsdIWlAYtLxp/1GtALwex+2HyoIQtaLQwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -17320,26 +17447,26 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17831,6 +17958,23 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/test": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/test/-/test-3.3.0.tgz", + "integrity": "sha512-JKlEohxDIJRjwBH/+BrTcAPHljBALrAHw3Zs99RqZlaC605f6BggqXhxkdqZThbSHgaYPwpNJlf9bTSWkb/1rA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6", + "readable-stream": "^4.3.0", + "string.prototype.replaceall": "^1.0.6" + }, + "bin": { + "node--test": "bin/node--test.js", + "node--test-name-pattern": "bin/node--test-name-pattern.js", + "node--test-only": "bin/node--test-only.js", + "test": "bin/node-core-test.js" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -17845,6 +17989,46 @@ "node": ">=8" } }, + "node_modules/test/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/test/node_modules/readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dev": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -17942,16 +18126,27 @@ } }, "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { - "node": ">=0.8" + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" } }, "node_modules/tr46": { @@ -18064,6 +18259,54 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", @@ -18243,6 +18486,16 @@ "punycode": "^2.1.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -18856,16 +19109,15 @@ "dev": true }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4"