From 396c6c8e93928e1f6b4f498c0affae2c55fb6110 Mon Sep 17 00:00:00 2001 From: Bart van Andel Date: Thu, 6 Aug 2026 08:39:30 +0200 Subject: [PATCH 1/5] fix: replace `shasum` / `sha256sum` / `sed` calls with node built-ins (#2019) --- Gruntfile.js | 47 +++++++----- package-lock.json | 185 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 1 + 3 files changed, 201 insertions(+), 32 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index a963d1a3..8a0c6686 100755 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,10 +1,13 @@ "use strict"; +const crypto = require("node:crypto"); +const fs = require("node:fs"); +const path = require("node:path"); + const webpack = require("webpack"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin; const glob = require("glob"); -const path = require("path"); const nodeFlags = "--no-warnings --no-deprecation"; @@ -29,7 +32,7 @@ module.exports = function (grunt) { "Creates a production-ready build. Use the --msg flag to add a compile message.", [ "eslint", "clean:prod", "clean:config", "exec:generateConfig", "findModules", "webpack:web", - "copy:standalone", "zip:standalone", "clean:standalone", "exec:calcDownloadHash", "chmod" + "copy:standalone", "zip:standalone", "clean:standalone", "calcDownloadHash", "chmod" ]); grunt.registerTask("node", @@ -60,7 +63,7 @@ module.exports = function (grunt) { grunt.registerTask("findModules", "Finds all generated modules and updates the entry point list for Webpack", - function(arg1, arg2) { + function (arg1, arg2) { const moduleEntryPoints = listEntryModules(); grunt.log.writeln(`Found ${Object.keys(moduleEntryPoints).length} modules.`); @@ -71,6 +74,26 @@ module.exports = function (grunt) { }, moduleEntryPoints)); }); + grunt.registerTask("calcDownloadHash", "Compute download hash", function () { + const done = this.async(); + + const hash = crypto.createHash("sha256"); + + // Use online algorithm to calculate hash, prevents reading the entire 75+ MB zip file into memory + fs.createReadStream(`build/prod/${downloadZipFilename}`) + .on("data", (chunk) => hash.update(chunk)) + .on("end", () => { + const digest = hash.digest("hex"); + fs.writeFileSync("build/prod/sha256digest.txt", `${digest}\n`, { encoding: "utf8" }); + + const index = fs.readFileSync("build/prod/index.html", { encoding: "utf8" }); + fs.writeFileSync("build/prod/index.html", index.replace(/DOWNLOAD_HASH_PLACEHOLDER/g, digest), { encoding: "utf8" }); + + done(true); + }) + .on("error", (err) => done(false)); + }); + // Load tasks provided by each plugin grunt.loadNpmTasks("grunt-eslint"); @@ -114,7 +137,7 @@ module.exports = function (grunt) { output: { path: __dirname + "/build/prod", filename: chunkData => { - return chunkData.chunk.name === "main" ? "assets/[name].js": "[name].js"; + return chunkData.chunk.name === "main" ? "assets/[name].js" : "[name].js"; }, globalObject: "this" }, @@ -333,22 +356,6 @@ module.exports = function (grunt) { } }, exec: { - calcDownloadHash: { - command: function () { - switch (process.platform) { - case "darwin": - return chainCommands([ - `shasum -a 256 build/prod/${downloadZipFilename} | awk '{print $1;}' > build/prod/sha256digest.txt`, - `sed -i '' -e "s/DOWNLOAD_HASH_PLACEHOLDER/$(cat build/prod/sha256digest.txt)/" build/prod/index.html` - ]); - default: - return chainCommands([ - `sha256sum build/prod/${downloadZipFilename} | awk '{print $1;}' > build/prod/sha256digest.txt`, - `sed -i -e "s/DOWNLOAD_HASH_PLACEHOLDER/$(cat build/prod/sha256digest.txt)/" build/prod/index.html` - ]); - } - }, - }, repoSize: { command: chainCommands([ "git ls-files | wc -l | xargs printf '\n%b\ttracked files\n'", diff --git a/package-lock.json b/package-lock.json index 5762defd..2f77c77a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -134,6 +134,7 @@ "css-loader": "^7.1.4", "eslint": "^9.39.5", "eslint-plugin-jsdoc": "^50.8.0", + "glob": "^13.0.6", "globals": "^17.7.0", "grunt": "^1.6.2", "grunt-chmod": "~1.1.1", @@ -5376,6 +5377,28 @@ "node": ">= 6" } }, + "node_modules/archiver-utils/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/archiver/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -10239,22 +10262,18 @@ } }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "*" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -10290,6 +10309,45 @@ "tslib": "2" } }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/global-directory": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-5.0.0.tgz", @@ -10386,6 +10444,28 @@ "node": ">= 0.10" } }, + "node_modules/globule/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globule/node_modules/minimatch": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", @@ -10872,6 +10952,28 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/grunt/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/grunt/node_modules/js-yaml": { "version": "3.14.2", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", @@ -13460,6 +13562,16 @@ } } }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mocha": { "version": "10.8.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", @@ -14823,6 +14935,33 @@ "node": ">=0.10.0" } }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/path-to-regexp": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", @@ -16071,6 +16210,28 @@ "rimraf": "bin.js" } }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/ripemd160": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", diff --git a/package.json b/package.json index f8c2961e..cc79be5a 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "css-loader": "^7.1.4", "eslint": "^9.39.5", "eslint-plugin-jsdoc": "^50.8.0", + "glob": "^13.0.6", "globals": "^17.7.0", "grunt": "^1.6.2", "grunt-chmod": "~1.1.1", From 1d39e75dac17f9c90b77cdf6d5a510e1cc197b39 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Aug 2026 07:49:01 +0100 Subject: [PATCH 2/5] chore (deps): bump the actions-dependencies group with 2 updates (#2703) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/cla-close-stale.yml | 2 +- .github/workflows/releases.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cla-close-stale.yml b/.github/workflows/cla-close-stale.yml index 8f8cd11f..98a59eee 100644 --- a/.github/workflows/cla-close-stale.yml +++ b/.github/workflows/cla-close-stale.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Close stale unsigned-CLA PRs - uses: actions/stale@1e223db275d687790206a7acac4d1a11bd6fe629 #v10.4.0 + uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 #v11.0.0 with: # ---- Guards: only act on PRs carrying the CLA label ---- only-labels: 'awaiting cla' diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index 81e1ae1c..c4f4e458 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -77,7 +77,7 @@ jobs: type=semver,pattern={{version}} - name: Log in to GHCR - uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 + uses: docker/login-action@371161bbe7024a29a25c5e19bfcbc0804fe9ad2c # v4.5.2 with: registry: ${{ env.REGISTRY }} username: ${{ env.REGISTRY_USER }} From bb941dd2b6d1d565d1350ee1d16c916754c0c92c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Aug 2026 07:58:04 +0100 Subject: [PATCH 3/5] chore (deps): bump the minor-updates group across 1 directory with 3 updates (#2705) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 69 ++++++++++++++--------------------------------- package.json | 6 ++--- 2 files changed, 23 insertions(+), 52 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f77c77a..54080ae6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -56,7 +56,7 @@ "jq-web": "^0.5.1", "jquery": "3.7.1", "js-ascon": "^1.3.0", - "js-sha3": "^0.9.3", + "js-sha3": "^0.12.0", "jsesc": "^3.1.0", "json5": "^2.2.3", "jsonata": "^2.2.2", @@ -135,7 +135,7 @@ "eslint": "^9.39.5", "eslint-plugin-jsdoc": "^50.8.0", "glob": "^13.0.6", - "globals": "^17.7.0", + "globals": "^17.9.0", "grunt": "^1.6.2", "grunt-chmod": "~1.1.1", "grunt-concurrent": "^3.0.0", @@ -159,7 +159,7 @@ "prompt": "^1.3.0", "sitemap": "^9.0.1", "terser": "^5.49.0", - "webpack": "^5.108.4", + "webpack": "^5.109.2", "webpack-bundle-analyzer": "^5.3.1", "webpack-dev-server": "^5.2.6", "webpack-node-externals": "^3.0.0", @@ -5093,19 +5093,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -8897,9 +8884,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.24.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.1.tgz", - "integrity": "sha512-7DdUaTjmNwMcH2gLr1qycesKII3BK4RLy/mdAb7x10Lq7bR4aNKHt1BR1ZALSv0rPM/hF5wYF0PhGop/rJm8vw==", + "version": "5.24.5", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", + "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", "dev": true, "license": "MIT", "dependencies": { @@ -10417,9 +10404,9 @@ } }, "node_modules/globals": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.7.0.tgz", - "integrity": "sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==", + "version": "17.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.9.0.tgz", + "integrity": "sha512-m/MvAW61QVU5VDNF1Vj8axt016h8w7L5TU1e9zlab7XIttAT2YAlCwl75K1fOqvMM9apmD7lbCIRhpfkhmxhCg==", "dev": true, "license": "MIT", "engines": { @@ -12489,9 +12476,9 @@ } }, "node_modules/js-sha3": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.9.3.tgz", - "integrity": "sha512-BcJPCQeLg6WjEx3FE591wVAevlli8lxsxm9/FzV4HXkV49TmBH38Yvrpce6fjbADGMKFrBMGTqrVz3qPIZ88Gg==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.12.0.tgz", + "integrity": "sha512-DGaUQKtsHeqChRD6ndGcESOBXUBQs5/ji4xyyoAgdqBsAu5yHsVTrzuF7MZ0VQTAa/IQFXOq0WmV2I1HNuzPtA==", "license": "MIT" }, "node_modules/js-tokens": { @@ -12932,20 +12919,6 @@ "dev": true, "license": "MIT" }, - "node_modules/loader-runner": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz", - "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", @@ -18327,9 +18300,9 @@ } }, "node_modules/webpack": { - "version": "5.108.4", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.108.4.tgz", - "integrity": "sha512-yur8LyJoeiWh47dErD+Ok7vlbmDsJ3UbbRPAoxbGJ54WpE2y5yVo5G/inUzujnYgw3tPmBRdn+G7PoxXaYC33w==", + "version": "5.109.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.109.2.tgz", + "integrity": "sha512-U9/cvLzxObKNEZ9+TtdqrHM5/9z3lgl2c+c4BzbqGxFQvQvBAq87yql5A8pQ+rrMbS496MZJeF5enVBndIy2hw==", "dev": true, "license": "MIT", "dependencies": { @@ -18339,22 +18312,20 @@ "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.16.0", - "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.22.2", + "enhanced-resolve": "^5.24.4", "es-module-lexer": "^2.1.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "graceful-fs": "^4.2.11", - "loader-runner": "^4.3.2", "mime-db": "^1.54.0", "minimizer-webpack-plugin": "^5.6.1", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", "watchpack": "^2.5.2", - "webpack-sources": "^3.5.0" + "webpack-sources": "^3.5.1" }, "bin": { "webpack": "bin/webpack.js" @@ -18592,9 +18563,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.0.tgz", - "integrity": "sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.1.tgz", + "integrity": "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index cc79be5a..ba50233f 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "eslint": "^9.39.5", "eslint-plugin-jsdoc": "^50.8.0", "glob": "^13.0.6", - "globals": "^17.7.0", + "globals": "^17.9.0", "grunt": "^1.6.2", "grunt-chmod": "~1.1.1", "grunt-concurrent": "^3.0.0", @@ -88,7 +88,7 @@ "prompt": "^1.3.0", "sitemap": "^9.0.1", "terser": "^5.49.0", - "webpack": "^5.108.4", + "webpack": "^5.109.2", "webpack-bundle-analyzer": "^5.3.1", "webpack-dev-server": "^5.2.6", "webpack-node-externals": "^3.0.0", @@ -141,7 +141,7 @@ "jq-web": "^0.5.1", "jquery": "3.7.1", "js-ascon": "^1.3.0", - "js-sha3": "^0.9.3", + "js-sha3": "^0.12.0", "jsesc": "^3.1.0", "json5": "^2.2.3", "jsonata": "^2.2.2", From e2b0558c9c4c9a6718499793ab9f88896d84b259 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Aug 2026 08:32:40 +0100 Subject: [PATCH 4/5] chore (deps): bump the patch-updates group across 1 directory with 6 updates (#2712) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 58 +++++++++++++++++++++++------------------------ package.json | 12 +++++----- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54080ae6..b2660bb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,7 @@ "d3": "7.9.0", "d3-hexbin": "^0.2.2", "diff": "^9.0.0", - "dompurify": "^3.4.12", + "dompurify": "^3.4.13", "es6-promisify": "^7.0.0", "escodegen": "^2.1.0", "esprima": "^4.0.1", @@ -75,7 +75,7 @@ "markdown-it": "^14.3.0", "moment": "^2.30.1", "moment-timezone": "^0.6.3", - "ngeohash": "^0.6.3", + "ngeohash": "^0.6.4", "node-forge": "^1.4.0", "node-md6": "^0.1.0", "nodom": "^2.4.0", @@ -119,7 +119,7 @@ "@codemirror/language": "^6.12.4", "@codemirror/search": "^6.7.1", "@codemirror/state": "^6.7.1", - "@codemirror/view": "^6.43.6", + "@codemirror/view": "^6.43.7", "@puppeteer/browsers": "3.0.6", "autoprefixer": "^10.5.4", "babel-loader": "^10.1.1", @@ -136,7 +136,7 @@ "eslint-plugin-jsdoc": "^50.8.0", "glob": "^13.0.6", "globals": "^17.9.0", - "grunt": "^1.6.2", + "grunt": "^1.6.3", "grunt-chmod": "~1.1.1", "grunt-concurrent": "^3.0.0", "grunt-contrib-clean": "~2.0.1", @@ -147,12 +147,12 @@ "grunt-exec": "~3.0.0", "grunt-webpack": "^8.0.0", "grunt-zip": "^1.0.0", - "html-webpack-plugin": "^5.6.7", + "html-webpack-plugin": "^5.6.8", "imports-loader": "^5.0.0", "mini-css-extract-plugin": "2.10.2", "modify-source-webpack-plugin": "^4.1.0", "nightwatch": "^3.16.0", - "postcss": "^8.5.21", + "postcss": "^8.5.25", "postcss-css-variables": "^0.19.0", "postcss-import": "^16.1.1", "postcss-loader": "^8.2.1", @@ -1900,9 +1900,9 @@ } }, "node_modules/@codemirror/view": { - "version": "6.43.6", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.43.6.tgz", - "integrity": "sha512-EVunGSYN1wz1p75WY1s3Xg7t3i8Yol0kGZGizNdX9BUFgMFILYVe8/u6EVpo7Ff5PwbZuILb4QAq7IZoKzIEQA==", + "version": "6.43.7", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.43.7.tgz", + "integrity": "sha512-FZsExxkoxnAN+d9TgqXLg5g4A1oQwzX9WlkOT5i2PKkcW7xx3Bmu0vs90g6fo9Mpdsb/l96dnAraQ8932aO4/g==", "dev": true, "license": "MIT", "dependencies": { @@ -8712,9 +8712,9 @@ } }, "node_modules/dompurify": { - "version": "3.4.12", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.12.tgz", - "integrity": "sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==", + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.13.tgz", + "integrity": "sha512-2vmYIoqjze2d+kakP8S/nS5shfsl587kzwEjcGlTdiksUVgFHnFCsLYDVj/JNqJVOQZGSYBTmuycv0PodwmnMQ==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -10486,9 +10486,9 @@ "license": "ISC" }, "node_modules/grunt": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.2.tgz", - "integrity": "sha512-bUzh5nA/P5L66ihXTDP6J5BGnMB/8lXJXejYWSbH4Y4TvWM9t2S39sggQDYYQlx06cYcCsmu63HMYHGCIzUVfg==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.3.tgz", + "integrity": "sha512-ng0CbpyNp/ox5e5CBY9TkZgVdAL4wK+nBHO6rNE8cXGa5kM++Lxlp0MpFBVZbpgOR2oCp/91V+T3CZVSWWLqMA==", "dev": true, "license": "MIT", "dependencies": { @@ -10502,7 +10502,7 @@ "grunt-legacy-log": "~3.0.0", "grunt-legacy-util": "~2.0.1", "iconv-lite": "~0.6.3", - "js-yaml": "~3.14.0", + "js-yaml": "^3.15.0", "minimatch": "^3.1.5", "nopt": "^5.0.0" }, @@ -10962,9 +10962,9 @@ } }, "node_modules/grunt/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.1.tgz", + "integrity": "sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==", "dev": true, "license": "MIT", "dependencies": { @@ -11248,9 +11248,9 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.6.7", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.7.tgz", - "integrity": "sha512-md+vXtdCAe60s1k6AU3dUyMJnDxUyQAwfwPKoLisvgUF1IXjtlLsk2se54+qfL9Mdm26bbwvjJybpNx48NKRLw==", + "version": "5.6.8", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.8.tgz", + "integrity": "sha512-MZmKQcTnhEh1SPSyMiEytIeDZDUoBZVorNHivQGXMASHf/BSGGOrKa2xQ5bGx3TCe1n109ecCt+cpww7wwWhKA==", "dev": true, "license": "MIT", "dependencies": { @@ -11268,7 +11268,7 @@ "url": "https://opencollective.com/html-webpack-plugin" }, "peerDependencies": { - "@rspack/core": "0.x || 1.x", + "@rspack/core": "0.x || 1.x || 2.x", "webpack": "^5.20.0" }, "peerDependenciesMeta": { @@ -13863,9 +13863,9 @@ } }, "node_modules/ngeohash": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/ngeohash/-/ngeohash-0.6.3.tgz", - "integrity": "sha512-kltF0cOxgx1AbmVzKxYZaoB0aj7mOxZeHaerEtQV0YaqnkXNq26WWqMmJ6lTqShYxVRWZ/mwvvTrNeOwdslWiw==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/ngeohash/-/ngeohash-0.6.4.tgz", + "integrity": "sha512-+dEKu+Be7xkK6gVQ2wZSGLbr+iWO+0ZGaLi98iE7F0/1WCSqQDRmS8LAlZBNLD2z/3zFKE9v9BvUfCrhyDhXbg==", "license": "MIT", "engines": { "node": ">=v0.2.0" @@ -15153,9 +15153,9 @@ } }, "node_modules/postcss": { - "version": "8.5.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.21.tgz", - "integrity": "sha512-v4sDNP3fdNiWMfabO7OwOQdOX8TiQSztKyT1Wj0w+j7LDallJThJRBBBmzVGyYj0crMh7jlV4zepPkiNu9UwDQ==", + "version": "8.5.25", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", + "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", "dev": true, "funding": [ { diff --git a/package.json b/package.json index ba50233f..c8e4c491 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@codemirror/language": "^6.12.4", "@codemirror/search": "^6.7.1", "@codemirror/state": "^6.7.1", - "@codemirror/view": "^6.43.6", + "@codemirror/view": "^6.43.7", "@puppeteer/browsers": "3.0.6", "autoprefixer": "^10.5.4", "babel-loader": "^10.1.1", @@ -65,7 +65,7 @@ "eslint-plugin-jsdoc": "^50.8.0", "glob": "^13.0.6", "globals": "^17.9.0", - "grunt": "^1.6.2", + "grunt": "^1.6.3", "grunt-chmod": "~1.1.1", "grunt-concurrent": "^3.0.0", "grunt-contrib-clean": "~2.0.1", @@ -76,12 +76,12 @@ "grunt-exec": "~3.0.0", "grunt-webpack": "^8.0.0", "grunt-zip": "^1.0.0", - "html-webpack-plugin": "^5.6.7", + "html-webpack-plugin": "^5.6.8", "imports-loader": "^5.0.0", "mini-css-extract-plugin": "2.10.2", "modify-source-webpack-plugin": "^4.1.0", "nightwatch": "^3.16.0", - "postcss": "^8.5.21", + "postcss": "^8.5.25", "postcss-css-variables": "^0.19.0", "postcss-import": "^16.1.1", "postcss-loader": "^8.2.1", @@ -124,7 +124,7 @@ "d3": "7.9.0", "d3-hexbin": "^0.2.2", "diff": "^9.0.0", - "dompurify": "^3.4.12", + "dompurify": "^3.4.13", "es6-promisify": "^7.0.0", "escodegen": "^2.1.0", "esprima": "^4.0.1", @@ -160,7 +160,7 @@ "markdown-it": "^14.3.0", "moment": "^2.30.1", "moment-timezone": "^0.6.3", - "ngeohash": "^0.6.3", + "ngeohash": "^0.6.4", "node-forge": "^1.4.0", "node-md6": "^0.1.0", "nodom": "^2.4.0", From 4290ea753912378913b1f3f54e0fc5720afeda5d Mon Sep 17 00:00:00 2001 From: Bart van Andel Date: Thu, 6 Aug 2026 11:52:18 +0200 Subject: [PATCH 5/5] fix: use js-yaml for both JSON to YAML and YAML to JSON (#2710) --- package-lock.json | 79 ++++++++++++++++++++++++++++-- package.json | 1 + src/core/operations/JSONtoYAML.mjs | 6 +-- src/core/operations/YAMLToJSON.mjs | 5 +- 4 files changed, 81 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index b2660bb0..eabf953c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,6 +57,7 @@ "jquery": "3.7.1", "js-ascon": "^1.3.0", "js-sha3": "^0.12.0", + "js-yaml": "^5.2.3", "jsesc": "^3.1.0", "json5": "^2.2.3", "jsonata": "^2.2.2", @@ -2813,6 +2814,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@eslint/js": { "version": "9.39.5", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz", @@ -7363,6 +7387,29 @@ "node": ">=6" } }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/crc-32": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", @@ -12489,10 +12536,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", - "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", - "dev": true, + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.3.tgz", + "integrity": "sha512-n+mUVyUX5bVv7G/G2zyIHOhdxfuU1dY2NOFzTQUWiMUbFss8b57NFlgCCaggU78wSw5KVS9cllzeLyzyR+n5nw==", "funding": [ { "type": "github", @@ -12508,7 +12554,7 @@ "argparse": "^2.0.1" }, "bin": { - "js-yaml": "bin/js-yaml.js" + "js-yaml": "bin/js-yaml.mjs" } }, "node_modules/jsdoc-type-pratt-parser": { @@ -13622,6 +13668,29 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/mocha/node_modules/minimatch": { "version": "5.1.9", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", diff --git a/package.json b/package.json index c8e4c491..8cd81c9e 100644 --- a/package.json +++ b/package.json @@ -142,6 +142,7 @@ "jquery": "3.7.1", "js-ascon": "^1.3.0", "js-sha3": "^0.12.0", + "js-yaml": "^5.2.3", "jsesc": "^3.1.0", "json5": "^2.2.3", "jsonata": "^2.2.2", diff --git a/src/core/operations/JSONtoYAML.mjs b/src/core/operations/JSONtoYAML.mjs index 0d4cc626..39d7a949 100644 --- a/src/core/operations/JSONtoYAML.mjs +++ b/src/core/operations/JSONtoYAML.mjs @@ -6,7 +6,7 @@ import Operation from "../Operation.mjs"; import OperationError from "../errors/OperationError.mjs"; -import YAML from "yaml"; +import { dump } from "js-yaml"; /** * JSON to YAML operation @@ -35,9 +35,9 @@ class JSONtoYAML extends Operation { */ run(input, args) { try { - return YAML.stringify(input); + return dump(input); } catch (err) { - throw new OperationError("Test"); + throw new OperationError("Unable to stringify YAML: " + err); } } diff --git a/src/core/operations/YAMLToJSON.mjs b/src/core/operations/YAMLToJSON.mjs index 5b986575..c2e201f0 100644 --- a/src/core/operations/YAMLToJSON.mjs +++ b/src/core/operations/YAMLToJSON.mjs @@ -6,7 +6,8 @@ import Operation from "../Operation.mjs"; import OperationError from "../errors/OperationError.mjs"; -import jsYaml from "js-yaml"; +import { load } from "js-yaml"; + /** * YAML to JSON operation */ @@ -34,7 +35,7 @@ class YAMLToJSON extends Operation { */ run(input, args) { try { - return jsYaml.load(input); + return load(input); } catch (err) { throw new OperationError("Unable to parse YAML: " + err); }