diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 3da0f90606d..510e0059f37 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -35,13 +35,16 @@ jobs: steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: { persist-credentials: false } - - name: Use Node.js 20 + - name: Use Node.js 25 uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 with: - node-version: 20 + node-version: 25 - name: Validate language JSON files run: node ./extra/check-lang-json.js - name: Validate knex migrations filename run: node ./extra/check-knex-filenames.mjs + + - name: Validate package.json + run: node ./extra/check-package-json.mjs diff --git a/extra/check-package-json.mjs b/extra/check-package-json.mjs new file mode 100644 index 00000000000..e9d16a573b5 --- /dev/null +++ b/extra/check-package-json.mjs @@ -0,0 +1,17 @@ +import packageJSON from "../package.json" with { type: "json" }; + +let hasError = false; + +for (const dep in packageJSON.dependencies) { + const semver = packageJSON.dependencies[dep]; + if (semver.startsWith("^")) { + console.error(`Dependency ${dep} has a caret (^) in its version. Please change it to (~)`); + hasError = true; + } +} + +if (hasError) { + process.exit(1); +} else { + console.log("All dependencies are valid."); +} diff --git a/package-lock.json b/package-lock.json index e50058e45fa..a9b533ae9ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,153 +12,153 @@ "@grpc/grpc-js": "~1.8.22", "@louislam/ping": "~0.4.4-mod.1", "@louislam/sqlite3": "15.1.6", - "@vvo/tzdb": "^6.125.0", + "@vvo/tzdb": "~6.198.0", "args-parser": "~1.3.0", - "axios": "~0.30.0", + "axios": "~0.30.3", "badge-maker": "~3.3.1", "bcryptjs": "~2.4.3", "chardet": "~1.4.0", - "check-password-strength": "^2.0.5", - "cheerio": "~1.0.0-rc.12", + "check-password-strength": "~2.0.10", + "cheerio": "~1.0.0", "chroma-js": "~2.4.2", "command-exists": "~1.2.9", "compare-versions": "~3.6.0", "compression": "~1.8.1", - "country-flag-emoji-polyfill": "^0.1.8", - "croner": "~8.1.0", - "dayjs": "~1.11.5", - "dev-null": "^0.1.1", + "country-flag-emoji-polyfill": "~0.1.8", + "croner": "~8.1.2", + "dayjs": "~1.11.19", + "dev-null": "~0.1.1", "dotenv": "~16.0.3", "express": "~4.22.1", "express-basic-auth": "~1.2.1", - "express-static-gzip": "~2.1.7", - "feed": "^4.2.2", - "form-data": "~4.0.0", - "gamedig": "^5.0.1", - "globalping": "^0.2.0", - "html-escaper": "^3.0.3", + "express-static-gzip": "~2.1.8", + "feed": "~4.2.2", + "form-data": "~4.0.5", + "gamedig": "~5.3.2", + "globalping": "~0.2.0", + "html-escaper": "~3.0.3", "http-cookie-agent": "~5.0.4", - "http-graceful-shutdown": "~3.1.7", + "http-graceful-shutdown": "~3.1.15", "http-proxy-agent": "~7.0.2", "https-proxy-agent": "~7.0.6", "iconv-lite": "~0.6.3", - "is-url": "^1.2.4", - "isomorphic-ws": "^5.0.0", + "is-url": "~1.2.4", + "isomorphic-ws": "~5.0.0", "jsesc": "~3.0.2", - "jsonata": "^2.0.3", - "jsonwebtoken": "~9.0.0", + "jsonata": "~2.1.0", + "jsonwebtoken": "~9.0.3", "jwt-decode": "~3.1.2", - "kafkajs": "^2.2.4", + "kafkajs": "~2.2.4", "knex": "~3.1.0", "limiter": "~2.1.0", - "liquidjs": "^10.7.0", - "marked": "^14.0.0", + "liquidjs": "~10.24.0", + "marked": "~14.1.4", "mitt": "~3.0.1", - "mongodb": "~4.17.1", - "mqtt": "~4.3.7", + "mongodb": "~4.17.2", + "mqtt": "~4.3.8", "mssql": "~12.0.0", - "mysql2": "~3.11.3", - "nanoid": "~3.3.4", - "net-snmp": "^3.11.2", - "node-cloudflared-tunnel": "~1.0.9", + "mysql2": "~3.11.5", + "nanoid": "~3.3.11", + "net-snmp": "~3.26.1", + "node-cloudflared-tunnel": "~1.0.10", "node-radius-utils": "~1.2.0", - "nodemailer": "~7.0.12", - "nostr-tools": "^2.17.0", + "nodemailer": "~7.0.13", + "nostr-tools": "~2.20.0", "notp": "~2.0.3", - "openid-client": "^5.4.2", + "openid-client": "~5.7.1", "password-hash": "~1.2.2", - "pg": "~8.11.3", - "pg-connection-string": "~2.6.2", + "pg": "~8.11.6", + "pg-connection-string": "~2.6.4", "playwright-core": "~1.39.0", "prom-client": "~13.2.0", - "prometheus-api-metrics": "~3.2.1", + "prometheus-api-metrics": "~3.2.2", "promisify-child-process": "~4.1.2", - "protobufjs": "~7.2.4", - "qs": "~6.14.1", + "protobufjs": "~7.2.6", + "qs": "~6.14.2", "radius": "~1.1.4", - "redbean-node": "~0.3.0", + "redbean-node": "~0.3.3", "redis": "~5.9.0", "semver": "~7.5.4", - "socket.io": "~4.8.0", - "socket.io-client": "~4.8.0", + "socket.io": "~4.8.3", + "socket.io-client": "~4.8.3", "socks-proxy-agent": "~8.0.5", "sqlstring": "~2.3.3", "tar": "~6.2.1", "tcp-ping": "~0.1.1", "thirty-two": "~1.0.2", - "tldts": "^7.0.19", - "tough-cookie": "~4.1.3", - "validator": "^13.15.26", - "web-push": "^3.6.7", - "ws": "^8.13.0" + "tldts": "~7.0.23", + "tough-cookie": "~4.1.4", + "validator": "~13.15.26", + "web-push": "~3.6.7", + "ws": "~8.19.0" }, "devDependencies": { - "@actions/github": "~6.0.0", + "@actions/github": "~6.0.1", "@fortawesome/fontawesome-svg-core": "~1.2.36", "@fortawesome/free-regular-svg-icons": "~5.15.4", "@fortawesome/free-solid-svg-icons": "~5.15.4", "@fortawesome/vue-fontawesome": "~3.1.3", "@playwright/test": "~1.39.0", "@popperjs/core": "~2.10.2", - "@testcontainers/hivemq": "^10.13.1", - "@testcontainers/mariadb": "^10.13.0", + "@testcontainers/hivemq": "^10.28.0", + "@testcontainers/mariadb": "^10.28.0", "@testcontainers/mssqlserver": "^10.28.0", - "@testcontainers/mysql": "^11.11.0", - "@testcontainers/postgresql": "^11.9.0", - "@testcontainers/rabbitmq": "^10.13.2", - "@types/bootstrap": "~5.1.9", - "@types/node": "^20.8.6", + "@testcontainers/mysql": "^11.12.0", + "@testcontainers/postgresql": "^11.12.0", + "@testcontainers/rabbitmq": "^10.28.0", + "@types/bootstrap": "~5.1.13", + "@types/node": "^20.19.33", "@types/web-push": "^3.6.4", - "@typescript-eslint/eslint-plugin": "^6.7.5", - "@typescript-eslint/parser": "^6.7.5", - "@vitejs/plugin-vue": "~5.0.1", - "@vue/compiler-sfc": "~3.4.2", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "@vitejs/plugin-vue": "~5.0.5", + "@vue/compiler-sfc": "~3.4.38", "@vuepic/vue-datepicker": "~3.4.8", "aedes": "^0.46.3", "bootstrap": "5.1.3", "chart.js": "~4.2.1", "chartjs-adapter-dayjs-4": "~1.0.4", - "concurrently": "^7.1.0", + "concurrently": "^7.6.0", "core-js": "~3.26.1", "cronstrue": "~2.24.0", "cross-env": "~7.0.3", "delay": "^5.0.0", - "dns2": "~2.0.1", - "dompurify": "~3.2.4", + "dns2": "~2.0.5", + "dompurify": "~3.2.7", "eslint": "~8.14.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-jsdoc": "~46.4.6", "eslint-plugin-vue": "~8.7.1", "favico.js": "~0.3.10", - "get-port-please": "^3.1.1", + "get-port-please": "^3.2.0", "node-ssh": "~13.1.0", "postcss-html": "~1.8.1", "postcss-rtlcss": "~5.7.1", - "postcss-scss": "~4.0.4", - "prettier": "^3.7.4", + "postcss-scss": "~4.0.9", + "prettier": "^3.8.1", "prismjs": "~1.30.0", - "qrcode": "~1.5.0", - "rollup-plugin-visualizer": "^5.6.0", + "qrcode": "~1.5.4", + "rollup-plugin-visualizer": "^5.14.0", "sass": "~1.42.1", - "stylelint": "^15.10.1", + "stylelint": "^15.11.0", "stylelint-config-prettier": "^9.0.5", "stylelint-config-standard": "~25.0.0", - "terser": "~5.15.0", + "terser": "~5.15.1", "test": "~3.3.0", - "testcontainers": "^11.5.0", + "testcontainers": "^11.12.0", "typescript": "~4.4.4", "v-pagination-3": "~0.1.7", - "vite": "~5.4.15", + "vite": "~5.4.21", "vite-plugin-compression": "^0.5.1", - "vue": "~3.5.26", + "vue": "~3.5.28", "vue-chartjs": "~5.2.0", "vue-confirm-dialog": "~1.0.2", "vue-contenteditable": "~3.0.4", "vue-i18n": "~11.2.8", "vue-image-crop-upload": "~3.0.3", - "vue-multiselect": "~3.0.0-alpha.2", + "vue-multiselect": "~3.0.0", "vue-prism-editor": "~2.0.0-alpha.2", - "vue-qrcode": "~1.0.0", + "vue-qrcode": "~1.0.1", "vue-router": "~4.2.5", "vue-toastification": "~2.0.0-rc.5", "vuedraggable": "~4.1.0", @@ -2480,39 +2480,45 @@ } }, "node_modules/@noble/ciphers": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-2.1.1.tgz", - "integrity": "sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.5.3.tgz", + "integrity": "sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==", "license": "MIT", - "engines": { - "node": ">= 20.19.0" - }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/curves": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz", - "integrity": "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", "license": "MIT", "dependencies": { - "@noble/hashes": "2.0.1" + "@noble/hashes": "1.3.2" }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", "engines": { - "node": ">= 20.19.0" + "node": ">= 16" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/hashes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", - "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", "license": "MIT", "engines": { - "node": ">= 20.19.0" + "node": ">= 16" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -3267,36 +3273,51 @@ ] }, "node_modules/@scure/base": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-2.0.0.tgz", - "integrity": "sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@scure/bip32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", "license": "MIT", + "dependencies": { + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.0" + }, "funding": { "url": "https://paulmillr.com/funding/" } }, - "node_modules/@scure/bip32": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-2.0.1.tgz", - "integrity": "sha512-4Md1NI5BzoVP+bhyJaY3K6yMesEFzNS1sE/cP+9nuvE7p/b0kx9XbpDHHFl8dHtufcbdHRUUQdRqLIPHN/s7yA==", + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "license": "MIT", "dependencies": { - "@noble/curves": "2.0.1", - "@noble/hashes": "2.0.1", - "@scure/base": "2.0.0" + "@noble/hashes": "1.3.1" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/bip39": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-2.0.1.tgz", - "integrity": "sha512-PsxdFj/d2AcJcZDX1FXN3dDgitDDTmwf78rKZq1a6c1P1Nan1X/Sxc7667zU3U+AN60g7SxxP0YCVw2H/hBycg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", "license": "MIT", "dependencies": { - "@noble/hashes": "2.0.1", - "@scure/base": "2.0.0" + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -12209,17 +12230,17 @@ } }, "node_modules/nostr-tools": { - "version": "2.23.1", - "resolved": "https://registry.npmjs.org/nostr-tools/-/nostr-tools-2.23.1.tgz", - "integrity": "sha512-Q5SJ1omrseBFXtLwqDhufpFLA6vX3rS/IuBCc974qaYX6YKGwEPxa/ZsyxruUOr+b+5EpWL2hFmCB5AueYrfBw==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/nostr-tools/-/nostr-tools-2.20.0.tgz", + "integrity": "sha512-Kq/2lMyeOdGvpDsYH2an8HP4H0aFCqwKythhTzxfgZTVv4L3NOgrJw2SxH8jkWlH8xPhWxGfN6lFtC+EAa2qYQ==", "license": "Unlicense", "dependencies": { - "@noble/ciphers": "2.1.1", - "@noble/curves": "2.0.1", - "@noble/hashes": "2.0.1", - "@scure/base": "2.0.0", - "@scure/bip32": "2.0.1", - "@scure/bip39": "2.0.1", + "@noble/ciphers": "^0.5.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.1", + "@scure/base": "1.1.1", + "@scure/bip32": "1.3.1", + "@scure/bip39": "1.2.1", "nostr-wasm": "0.1.0" }, "peerDependencies": { diff --git a/package.json b/package.json index 7aecd56bd6f..1499dcc741a 100644 --- a/package.json +++ b/package.json @@ -73,153 +73,153 @@ "@grpc/grpc-js": "~1.8.22", "@louislam/ping": "~0.4.4-mod.1", "@louislam/sqlite3": "15.1.6", - "@vvo/tzdb": "^6.125.0", + "@vvo/tzdb": "~6.198.0", "args-parser": "~1.3.0", - "axios": "~0.30.0", + "axios": "~0.30.3", "badge-maker": "~3.3.1", "bcryptjs": "~2.4.3", "chardet": "~1.4.0", - "check-password-strength": "^2.0.5", - "cheerio": "~1.0.0-rc.12", + "check-password-strength": "~2.0.10", + "cheerio": "~1.0.0", "chroma-js": "~2.4.2", "command-exists": "~1.2.9", "compare-versions": "~3.6.0", "compression": "~1.8.1", - "country-flag-emoji-polyfill": "^0.1.8", - "croner": "~8.1.0", - "dayjs": "~1.11.5", - "dev-null": "^0.1.1", + "country-flag-emoji-polyfill": "~0.1.8", + "croner": "~8.1.2", + "dayjs": "~1.11.19", + "dev-null": "~0.1.1", "dotenv": "~16.0.3", "express": "~4.22.1", "express-basic-auth": "~1.2.1", - "express-static-gzip": "~2.1.7", - "feed": "^4.2.2", - "form-data": "~4.0.0", - "gamedig": "^5.0.1", - "globalping": "^0.2.0", - "html-escaper": "^3.0.3", + "express-static-gzip": "~2.1.8", + "feed": "~4.2.2", + "form-data": "~4.0.5", + "gamedig": "~5.3.2", + "globalping": "~0.2.0", + "html-escaper": "~3.0.3", "http-cookie-agent": "~5.0.4", - "http-graceful-shutdown": "~3.1.7", + "http-graceful-shutdown": "~3.1.15", "http-proxy-agent": "~7.0.2", "https-proxy-agent": "~7.0.6", "iconv-lite": "~0.6.3", - "is-url": "^1.2.4", - "isomorphic-ws": "^5.0.0", + "is-url": "~1.2.4", + "isomorphic-ws": "~5.0.0", "jsesc": "~3.0.2", - "jsonata": "^2.0.3", - "jsonwebtoken": "~9.0.0", + "jsonata": "~2.1.0", + "jsonwebtoken": "~9.0.3", "jwt-decode": "~3.1.2", - "kafkajs": "^2.2.4", + "kafkajs": "~2.2.4", "knex": "~3.1.0", "limiter": "~2.1.0", - "liquidjs": "^10.7.0", - "marked": "^14.0.0", + "liquidjs": "~10.24.0", + "marked": "~14.1.4", "mitt": "~3.0.1", - "mongodb": "~4.17.1", - "mqtt": "~4.3.7", + "mongodb": "~4.17.2", + "mqtt": "~4.3.8", "mssql": "~12.0.0", - "mysql2": "~3.11.3", - "nanoid": "~3.3.4", - "net-snmp": "^3.11.2", - "node-cloudflared-tunnel": "~1.0.9", + "mysql2": "~3.11.5", + "nanoid": "~3.3.11", + "net-snmp": "~3.26.1", + "node-cloudflared-tunnel": "~1.0.10", "node-radius-utils": "~1.2.0", - "nodemailer": "~7.0.12", - "nostr-tools": "^2.17.0", + "nodemailer": "~7.0.13", + "nostr-tools": "~2.20.0", "notp": "~2.0.3", - "openid-client": "^5.4.2", + "openid-client": "~5.7.1", "password-hash": "~1.2.2", - "pg": "~8.11.3", - "pg-connection-string": "~2.6.2", + "pg": "~8.11.6", + "pg-connection-string": "~2.6.4", "playwright-core": "~1.39.0", "prom-client": "~13.2.0", - "prometheus-api-metrics": "~3.2.1", + "prometheus-api-metrics": "~3.2.2", "promisify-child-process": "~4.1.2", - "protobufjs": "~7.2.4", - "qs": "~6.14.1", + "protobufjs": "~7.2.6", + "qs": "~6.14.2", "radius": "~1.1.4", - "redbean-node": "~0.3.0", + "redbean-node": "~0.3.3", "redis": "~5.9.0", "semver": "~7.5.4", - "socket.io": "~4.8.0", - "socket.io-client": "~4.8.0", + "socket.io": "~4.8.3", + "socket.io-client": "~4.8.3", "socks-proxy-agent": "~8.0.5", "sqlstring": "~2.3.3", "tar": "~6.2.1", "tcp-ping": "~0.1.1", "thirty-two": "~1.0.2", - "tldts": "^7.0.19", - "tough-cookie": "~4.1.3", - "validator": "^13.15.26", - "web-push": "^3.6.7", - "ws": "^8.13.0" + "tldts": "~7.0.23", + "tough-cookie": "~4.1.4", + "validator": "~13.15.26", + "web-push": "~3.6.7", + "ws": "~8.19.0" }, "devDependencies": { - "@actions/github": "~6.0.0", + "@actions/github": "~6.0.1", "@fortawesome/fontawesome-svg-core": "~1.2.36", "@fortawesome/free-regular-svg-icons": "~5.15.4", "@fortawesome/free-solid-svg-icons": "~5.15.4", "@fortawesome/vue-fontawesome": "~3.1.3", "@playwright/test": "~1.39.0", "@popperjs/core": "~2.10.2", - "@testcontainers/hivemq": "^10.13.1", - "@testcontainers/mariadb": "^10.13.0", + "@testcontainers/hivemq": "^10.28.0", + "@testcontainers/mariadb": "^10.28.0", "@testcontainers/mssqlserver": "^10.28.0", - "@testcontainers/mysql": "^11.11.0", - "@testcontainers/postgresql": "^11.9.0", - "@testcontainers/rabbitmq": "^10.13.2", - "@types/bootstrap": "~5.1.9", - "@types/node": "^20.8.6", + "@testcontainers/mysql": "^11.12.0", + "@testcontainers/postgresql": "^11.12.0", + "@testcontainers/rabbitmq": "^10.28.0", + "@types/bootstrap": "~5.1.13", + "@types/node": "^20.19.33", "@types/web-push": "^3.6.4", - "@typescript-eslint/eslint-plugin": "^6.7.5", - "@typescript-eslint/parser": "^6.7.5", - "@vitejs/plugin-vue": "~5.0.1", - "@vue/compiler-sfc": "~3.4.2", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "@vitejs/plugin-vue": "~5.0.5", + "@vue/compiler-sfc": "~3.4.38", "@vuepic/vue-datepicker": "~3.4.8", "aedes": "^0.46.3", "bootstrap": "5.1.3", "chart.js": "~4.2.1", "chartjs-adapter-dayjs-4": "~1.0.4", - "concurrently": "^7.1.0", + "concurrently": "^7.6.0", "core-js": "~3.26.1", "cronstrue": "~2.24.0", "cross-env": "~7.0.3", "delay": "^5.0.0", - "dns2": "~2.0.1", - "dompurify": "~3.2.4", + "dns2": "~2.0.5", + "dompurify": "~3.2.7", "eslint": "~8.14.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-jsdoc": "~46.4.6", "eslint-plugin-vue": "~8.7.1", "favico.js": "~0.3.10", - "get-port-please": "^3.1.1", + "get-port-please": "^3.2.0", "node-ssh": "~13.1.0", "postcss-html": "~1.8.1", "postcss-rtlcss": "~5.7.1", - "postcss-scss": "~4.0.4", - "prettier": "^3.7.4", + "postcss-scss": "~4.0.9", + "prettier": "^3.8.1", "prismjs": "~1.30.0", - "qrcode": "~1.5.0", - "rollup-plugin-visualizer": "^5.6.0", + "qrcode": "~1.5.4", + "rollup-plugin-visualizer": "^5.14.0", "sass": "~1.42.1", - "stylelint": "^15.10.1", + "stylelint": "^15.11.0", "stylelint-config-prettier": "^9.0.5", "stylelint-config-standard": "~25.0.0", - "terser": "~5.15.0", + "terser": "~5.15.1", "test": "~3.3.0", - "testcontainers": "^11.5.0", + "testcontainers": "^11.12.0", "typescript": "~4.4.4", "v-pagination-3": "~0.1.7", - "vite": "~5.4.15", + "vite": "~5.4.21", "vite-plugin-compression": "^0.5.1", - "vue": "~3.5.26", + "vue": "~3.5.28", "vue-chartjs": "~5.2.0", "vue-confirm-dialog": "~1.0.2", "vue-contenteditable": "~3.0.4", "vue-i18n": "~11.2.8", "vue-image-crop-upload": "~3.0.3", - "vue-multiselect": "~3.0.0-alpha.2", + "vue-multiselect": "~3.0.0", "vue-prism-editor": "~2.0.0-alpha.2", - "vue-qrcode": "~1.0.0", + "vue-qrcode": "~1.0.1", "vue-router": "~4.2.5", "vue-toastification": "~2.0.0-rc.5", "vuedraggable": "~4.1.0",