mediawiki/extensions/CodeMirror: main (log #2410135)

sourcepatches

This run took 212 seconds.

$ date
--- stdout ---
Wed Mar 25 01:27:06 UTC 2026

--- end ---
$ git clone file:///srv/git/mediawiki-extensions-CodeMirror.git /src/repo --depth=1 -b master
--- stderr ---
Cloning into '/src/repo'...
--- stdout ---

--- end ---
$ git config user.name libraryupgrader
--- stdout ---

--- end ---
$ git config user.email tools.libraryupgrader@tools.wmflabs.org
--- stdout ---

--- end ---
$ git submodule update --init
--- stdout ---

--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.

--- end ---
$ git show-ref refs/heads/master
--- stdout ---
8849a0c299f44c258737ab1ef0ce9d3f7cdaa560 refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@tootallnate/once": {
      "name": "@tootallnate/once",
      "severity": "low",
      "isDirect": false,
      "via": [
        {
          "source": 1113977,
          "name": "@tootallnate/once",
          "dependency": "@tootallnate/once",
          "title": "@tootallnate/once vulnerable to Incorrect Control Flow Scoping",
          "url": "https://github.com/advisories/GHSA-vpq2-c234-7xj6",
          "severity": "low",
          "cwe": [
            "CWE-705"
          ],
          "cvss": {
            "score": 3.3,
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<3.0.1"
        }
      ],
      "effects": [
        "http-proxy-agent"
      ],
      "range": "<3.0.1",
      "nodes": [
        "node_modules/@tootallnate/once"
      ],
      "fixAvailable": {
        "name": "jest-environment-jsdom",
        "version": "30.3.0",
        "isSemVerMajor": true
      }
    },
    "@wdio/mocha-framework": {
      "name": "@wdio/mocha-framework",
      "severity": "high",
      "isDirect": true,
      "via": [
        "mocha"
      ],
      "effects": [],
      "range": ">=6.1.19",
      "nodes": [
        "node_modules/@wdio/mocha-framework"
      ],
      "fixAvailable": {
        "name": "@wdio/mocha-framework",
        "version": "6.1.17",
        "isSemVerMajor": true
      }
    },
    "@wikimedia/mw-node-qunit": {
      "name": "@wikimedia/mw-node-qunit",
      "severity": "low",
      "isDirect": true,
      "via": [
        "jsdom"
      ],
      "effects": [],
      "range": ">=6.3.0",
      "nodes": [
        "node_modules/@wikimedia/mw-node-qunit"
      ],
      "fixAvailable": {
        "name": "@wikimedia/mw-node-qunit",
        "version": "6.2.1",
        "isSemVerMajor": true
      }
    },
    "basic-ftp": {
      "name": "basic-ftp",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1113518,
          "name": "basic-ftp",
          "dependency": "basic-ftp",
          "title": "Basic FTP has Path Traversal Vulnerability in its downloadToDir() method",
          "url": "https://github.com/advisories/GHSA-5rq4-664w-9x2c",
          "severity": "critical",
          "cwe": [
            "CWE-22"
          ],
          "cvss": {
            "score": 9.1,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H"
          },
          "range": "<5.2.0"
        }
      ],
      "effects": [],
      "range": "<5.2.0",
      "nodes": [
        "node_modules/basic-ftp"
      ],
      "fixAvailable": true
    },
    "fast-xml-parser": {
      "name": "fast-xml-parser",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1114153,
          "name": "fast-xml-parser",
          "dependency": "fast-xml-parser",
          "title": "fast-xml-parser has stack overflow in XMLBuilder with preserveOrder",
          "url": "https://github.com/advisories/GHSA-fj3w-jwp8-x2g3",
          "severity": "low",
          "cwe": [
            "CWE-120"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": ">=5.0.0 <5.3.8"
        },
        {
          "source": 1114952,
          "name": "fast-xml-parser",
          "dependency": "fast-xml-parser",
          "title": "Entity Expansion Limits Bypassed When Set to Zero Due to JavaScript Falsy Evaluation in fast-xml-parser",
          "url": "https://github.com/advisories/GHSA-jp2q-39xq-3w4g",
          "severity": "moderate",
          "cwe": [
            "CWE-1284"
          ],
          "cvss": {
            "score": 5.9,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=4.0.0-beta.3 <=5.5.6"
        },
        {
          "source": 1115134,
          "name": "fast-xml-parser",
          "dependency": "fast-xml-parser",
          "title": "fast-xml-parser affected by numeric entity expansion bypassing all entity expansion limits (incomplete fix for CVE-2026-26278)",
          "url": "https://github.com/advisories/GHSA-8gc5-j5rx-235r",
          "severity": "high",
          "cwe": [
            "CWE-776"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=4.0.0-beta.3 <=5.5.5"
        }
      ],
      "effects": [],
      "range": "4.0.0-beta.3 - 5.5.6",
      "nodes": [
        "node_modules/fast-xml-parser"
      ],
      "fixAvailable": true
    },
    "flatted": {
      "name": "flatted",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1114526,
          "name": "flatted",
          "dependency": "flatted",
          "title": "flatted vulnerable to unbounded recursion DoS in parse() revive phase",
          "url": "https://github.com/advisories/GHSA-25h7-pfq9-p65f",
          "severity": "high",
          "cwe": [
            "CWE-674"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<3.4.0"
        },
        {
          "source": 1114934,
          "name": "flatted",
          "dependency": "flatted",
          "title": "Prototype Pollution via parse() in NodeJS flatted",
          "url": "https://github.com/advisories/GHSA-rf6f-7fwh-wjgh",
          "severity": "high",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<=3.4.1"
        }
      ],
      "effects": [],
      "range": "<=3.4.1",
      "nodes": [
        "node_modules/flatted"
      ],
      "fixAvailable": true
    },
    "form-data": {
      "name": "form-data",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1109540,
          "name": "form-data",
          "dependency": "form-data",
          "title": "form-data uses unsafe random function in form-data for choosing boundary",
          "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4",
          "severity": "critical",
          "cwe": [
            "CWE-330"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<2.5.4"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<2.5.4",
      "nodes": [
        "node_modules/request/node_modules/form-data"
      ],
      "fixAvailable": {
        "name": "wdio-mediawiki",
        "version": "6.5.0",
        "isSemVerMajor": true
      }
    },
    "http-proxy-agent": {
      "name": "http-proxy-agent",
      "severity": "low",
      "isDirect": false,
      "via": [
        "@tootallnate/once"
      ],
      "effects": [
        "jsdom"
      ],
      "range": "4.0.1 - 5.0.0",
      "nodes": [
        "node_modules/http-proxy-agent"
      ],
      "fixAvailable": {
        "name": "jest-environment-jsdom",
        "version": "30.3.0",
        "isSemVerMajor": true
      }
    },
    "jest-environment-jsdom": {
      "name": "jest-environment-jsdom",
      "severity": "low",
      "isDirect": true,
      "via": [
        "jsdom"
      ],
      "effects": [],
      "range": "27.0.1 - 30.0.0-rc.1",
      "nodes": [
        "node_modules/jest-environment-jsdom"
      ],
      "fixAvailable": {
        "name": "jest-environment-jsdom",
        "version": "30.3.0",
        "isSemVerMajor": true
      }
    },
    "jsdom": {
      "name": "jsdom",
      "severity": "low",
      "isDirect": false,
      "via": [
        "http-proxy-agent"
      ],
      "effects": [
        "@wikimedia/mw-node-qunit",
        "jest-environment-jsdom"
      ],
      "range": "16.6.0 - 22.1.0",
      "nodes": [
        "node_modules/jest-environment-jsdom/node_modules/jsdom",
        "node_modules/jsdom"
      ],
      "fixAvailable": {
        "name": "jest-environment-jsdom",
        "version": "30.3.0",
        "isSemVerMajor": true
      }
    },
    "minimatch": {
      "name": "minimatch",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1113540,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments",
          "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj",
          "severity": "high",
          "cwe": [
            "CWE-407"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=5.0.0 <5.1.8"
        },
        {
          "source": 1113544,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments",
          "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj",
          "severity": "high",
          "cwe": [
            "CWE-407"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=9.0.0 <9.0.7"
        },
        {
          "source": 1113546,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
          "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<3.1.4"
        },
        {
          "source": 1113548,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
          "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=5.0.0 <5.1.8"
        },
        {
          "source": 1113552,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
          "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=9.0.0 <9.0.7"
        }
      ],
      "effects": [],
      "range": "<=3.1.3 || 5.0.0 - 5.1.7 || 9.0.0 - 9.0.6",
      "nodes": [
        "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch",
        "node_modules/@wdio/config/node_modules/minimatch",
        "node_modules/archiver-utils/node_modules/minimatch",
        "node_modules/eslint-config-wikimedia/node_modules/minimatch",
        "node_modules/filelist/node_modules/minimatch",
        "node_modules/glob/node_modules/minimatch",
        "node_modules/minimatch",
        "node_modules/mocha/node_modules/minimatch",
        "node_modules/readdir-glob/node_modules/minimatch"
      ],
      "fixAvailable": true
    },
    "mocha": {
      "name": "mocha",
      "severity": "high",
      "isDirect": false,
      "via": [
        "serialize-javascript"
      ],
      "effects": [
        "@wdio/mocha-framework"
      ],
      "range": "8.0.0 - 12.0.0-beta-2",
      "nodes": [
        "node_modules/mocha"
      ],
      "fixAvailable": {
        "name": "@wdio/mocha-framework",
        "version": "6.1.17",
        "isSemVerMajor": true
      }
    },
    "mwbot": {
      "name": "mwbot",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "request"
      ],
      "effects": [
        "wdio-mediawiki"
      ],
      "range": ">=0.1.6",
      "nodes": [
        "node_modules/mwbot"
      ],
      "fixAvailable": {
        "name": "wdio-mediawiki",
        "version": "6.5.0",
        "isSemVerMajor": true
      }
    },
    "qs": {
      "name": "qs",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1113719,
          "name": "qs",
          "dependency": "qs",
          "title": "qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion",
          "url": "https://github.com/advisories/GHSA-6rw7-vpxm-498p",
          "severity": "moderate",
          "cwe": [
            "CWE-20"
          ],
          "cvss": {
            "score": 3.7,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<6.14.1"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<6.14.1",
      "nodes": [
        "node_modules/qs"
      ],
      "fixAvailable": {
        "name": "wdio-mediawiki",
        "version": "6.5.0",
        "isSemVerMajor": true
      }
    },
    "request": {
      "name": "request",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1096727,
          "name": "request",
          "dependency": "request",
          "title": "Server-Side Request Forgery in Request",
          "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
          "severity": "moderate",
          "cwe": [
            "CWE-918"
          ],
          "cvss": {
            "score": 6.1,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
          },
          "range": "<=2.88.2"
        },
        "form-data",
        "qs",
        "tough-cookie"
      ],
      "effects": [
        "mwbot"
      ],
      "range": "*",
      "nodes": [
        "node_modules/request"
      ],
      "fixAvailable": {
        "name": "wdio-mediawiki",
        "version": "6.5.0",
        "isSemVerMajor": true
      }
    },
    "rollup": {
      "name": "rollup",
      "severity": "high",
      "isDirect": true,
      "via": [
        {
          "source": 1113515,
          "name": "rollup",
          "dependency": "rollup",
          "title": "Rollup 4 has Arbitrary File Write via Path Traversal",
          "url": "https://github.com/advisories/GHSA-mw96-cpmx-2vgc",
          "severity": "high",
          "cwe": [
            "CWE-22"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": ">=4.0.0 <4.59.0"
        }
      ],
      "effects": [],
      "range": "4.0.0 - 4.58.0",
      "nodes": [
        "node_modules/rollup"
      ],
      "fixAvailable": {
        "name": "rollup",
        "version": "4.60.0",
        "isSemVerMajor": false
      }
    },
    "serialize-javascript": {
      "name": "serialize-javascript",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1113686,
          "name": "serialize-javascript",
          "dependency": "serialize-javascript",
          "title": "Serialize JavaScript is Vulnerable to RCE via RegExp.flags and Date.prototype.toISOString()",
          "url": "https://github.com/advisories/GHSA-5c6j-r48x-rmvq",
          "severity": "high",
          "cwe": [
            "CWE-96"
          ],
          "cvss": {
            "score": 8.1,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": "<=7.0.2"
        }
      ],
      "effects": [
        "mocha"
      ],
      "range": "<=7.0.2",
      "nodes": [
        "node_modules/serialize-javascript"
      ],
      "fixAvailable": {
        "name": "@wdio/mocha-framework",
        "version": "6.1.17",
        "isSemVerMajor": true
      }
    },
    "tough-cookie": {
      "name": "tough-cookie",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1097682,
          "name": "tough-cookie",
          "dependency": "tough-cookie",
          "title": "tough-cookie Prototype Pollution vulnerability",
          "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3",
          "severity": "moderate",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
          },
          "range": "<4.1.3"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<4.1.3",
      "nodes": [
        "node_modules/request/node_modules/tough-cookie"
      ],
      "fixAvailable": {
        "name": "wdio-mediawiki",
        "version": "6.5.0",
        "isSemVerMajor": true
      }
    },
    "underscore": {
      "name": "underscore",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1113950,
          "name": "underscore",
          "dependency": "underscore",
          "title": "Underscore has unlimited recursion in _.flatten and _.isEqual, potential for DoS attack",
          "url": "https://github.com/advisories/GHSA-qpx9-hpmf-5gmw",
          "severity": "high",
          "cwe": [
            "CWE-674",
            "CWE-770"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<=1.13.7"
        }
      ],
      "effects": [],
      "range": "<=1.13.7",
      "nodes": [
        "node_modules/underscore"
      ],
      "fixAvailable": true
    },
    "undici": {
      "name": "undici",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1114591,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici: Malicious WebSocket 64-bit length overflows parser and crashes the client",
          "url": "https://github.com/advisories/GHSA-f269-vfmq-vjvj",
          "severity": "high",
          "cwe": [
            "CWE-248",
            "CWE-1284"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=7.0.0 <7.24.0"
        },
        {
          "source": 1114592,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici: Malicious WebSocket 64-bit length overflows parser and crashes the client",
          "url": "https://github.com/advisories/GHSA-f269-vfmq-vjvj",
          "severity": "high",
          "cwe": [
            "CWE-248",
            "CWE-1284"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=6.0.0 <6.24.0"
        },
        {
          "source": 1114593,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has an HTTP Request/Response Smuggling issue",
          "url": "https://github.com/advisories/GHSA-2mjp-6q6p-2qxm",
          "severity": "moderate",
          "cwe": [
            "CWE-444"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"
          },
          "range": ">=7.0.0 <7.24.0"
        },
        {
          "source": 1114594,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has an HTTP Request/Response Smuggling issue",
          "url": "https://github.com/advisories/GHSA-2mjp-6q6p-2qxm",
          "severity": "moderate",
          "cwe": [
            "CWE-444"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"
          },
          "range": "<6.24.0"
        },
        {
          "source": 1114637,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has Unbounded Memory Consumption in WebSocket permessage-deflate Decompression",
          "url": "https://github.com/advisories/GHSA-vrm6-8vpv-qv8q",
          "severity": "high",
          "cwe": [
            "CWE-409"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=7.0.0 <7.24.0"
        },
        {
          "source": 1114638,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has Unbounded Memory Consumption in WebSocket permessage-deflate Decompression",
          "url": "https://github.com/advisories/GHSA-vrm6-8vpv-qv8q",
          "severity": "high",
          "cwe": [
            "CWE-409"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<6.24.0"
        },
        {
          "source": 1114639,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has Unhandled Exception in WebSocket Client Due to Invalid server_max_window_bits Validation",
          "url": "https://github.com/advisories/GHSA-v9p9-hfj2-hcw8",
          "severity": "high",
          "cwe": [
            "CWE-248"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=7.0.0 <7.24.0"
        },
        {
          "source": 1114640,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has Unhandled Exception in WebSocket Client Due to Invalid server_max_window_bits Validation",
          "url": "https://github.com/advisories/GHSA-v9p9-hfj2-hcw8",
          "severity": "high",
          "cwe": [
            "CWE-248"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<6.24.0"
        },
        {
          "source": 1114641,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has CRLF Injection in undici via `upgrade` option",
          "url": "https://github.com/advisories/GHSA-4992-7rv2-5pvq",
          "severity": "moderate",
          "cwe": [
            "CWE-93"
          ],
          "cvss": {
            "score": 4.6,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N"
          },
          "range": ">=7.0.0 <7.24.0"
        },
        {
          "source": 1114642,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has CRLF Injection in undici via `upgrade` option",
          "url": "https://github.com/advisories/GHSA-4992-7rv2-5pvq",
          "severity": "moderate",
          "cwe": [
            "CWE-93"
          ],
          "cvss": {
            "score": 4.6,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N"
          },
          "range": "<6.24.0"
        },
        {
          "source": 1114643,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has Unbounded Memory Consumption in its DeduplicationHandler via Response Buffering that leads to DoS",
          "url": "https://github.com/advisories/GHSA-phc3-fgpg-7m6h",
          "severity": "moderate",
          "cwe": [
            "CWE-770"
          ],
          "cvss": {
            "score": 5.9,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=7.17.0 <7.24.0"
        }
      ],
      "effects": [],
      "range": "<=6.23.0 || 7.0.0 - 7.23.0",
      "nodes": [
        "node_modules/cheerio/node_modules/undici",
        "node_modules/undici"
      ],
      "fixAvailable": true
    },
    "wdio-mediawiki": {
      "name": "wdio-mediawiki",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "mwbot"
      ],
      "effects": [],
      "range": "<=5.1.0",
      "nodes": [
        "node_modules/wdio-mediawiki"
      ],
      "fixAvailable": {
        "name": "wdio-mediawiki",
        "version": "6.5.0",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 5,
      "moderate": 4,
      "high": 9,
      "critical": 3,
      "total": 21
    },
    "dependencies": {
      "prod": 1,
      "dev": 1303,
      "optional": 47,
      "peer": 20,
      "peerOptional": 0,
      "total": 1303
    }
  }
}

--- end ---
$ /usr/bin/composer install
--- stderr ---
No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 37 installs, 0 updates, 0 removals
  - Locking composer/pcre (3.3.2)
  - Locking composer/semver (3.4.4)
  - Locking composer/spdx-licenses (1.5.9)
  - Locking composer/xdebug-handler (3.0.5)
  - Locking danog/advanced-json-rpc (v3.2.3)
  - Locking dealerdirect/phpcodesniffer-composer-installer (v1.2.0)
  - Locking doctrine/deprecations (1.1.6)
  - Locking mediawiki/mediawiki-codesniffer (v49.0.0)
  - Locking mediawiki/mediawiki-phan-config (0.20.0)
  - Locking mediawiki/minus-x (2.0.1)
  - Locking mediawiki/phan-taint-check-plugin (9.1.0)
  - Locking netresearch/jsonmapper (v5.0.1)
  - Locking phan/phan (6.0.2)
  - Locking phan/tolerant-php-parser (v0.2.0)
  - Locking phan/var_representation_polyfill (0.1.4)
  - Locking php-parallel-lint/php-console-color (v1.0.1)
  - Locking php-parallel-lint/php-console-highlighter (v1.0.0)
  - Locking php-parallel-lint/php-parallel-lint (v1.4.0)
  - Locking phpcsstandards/phpcsextra (1.4.0)
  - Locking phpcsstandards/phpcsutils (1.2.2)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (6.0.3)
  - Locking phpdocumentor/type-resolver (2.0.0)
  - Locking phpstan/phpdoc-parser (2.3.2)
  - Locking psr/container (2.0.2)
  - Locking psr/log (3.0.2)
  - Locking sabre/event (6.0.1)
  - Locking squizlabs/php_codesniffer (3.13.5)
  - Locking symfony/console (v8.0.7)
  - Locking symfony/deprecation-contracts (v3.6.0)
  - Locking symfony/polyfill-ctype (v1.33.0)
  - Locking symfony/polyfill-intl-grapheme (v1.33.0)
  - Locking symfony/polyfill-intl-normalizer (v1.33.0)
  - Locking symfony/polyfill-mbstring (v1.33.0)
  - Locking symfony/service-contracts (v3.6.1)
  - Locking symfony/string (v8.0.6)
  - Locking webmozart/assert (2.1.6)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 37 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Installing squizlabs/php_codesniffer (3.13.5): Extracting archive
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.2.0): Extracting archive
  - Installing composer/pcre (3.3.2): Extracting archive
  - Installing phpcsstandards/phpcsutils (1.2.2): Extracting archive
  - Installing phpcsstandards/phpcsextra (1.4.0): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.33.0): Extracting archive
  - Installing composer/spdx-licenses (1.5.9): Extracting archive
  - Installing composer/semver (3.4.4): Extracting archive
  - Installing mediawiki/mediawiki-codesniffer (v49.0.0): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.33.0): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.33.0): Extracting archive
  - Installing symfony/polyfill-ctype (v1.33.0): Extracting archive
  - Installing symfony/string (v8.0.6): Extracting archive
  - Installing symfony/deprecation-contracts (v3.6.0): Extracting archive
  - Installing psr/container (2.0.2): Extracting archive
  - Installing symfony/service-contracts (v3.6.1): Extracting archive
  - Installing symfony/console (v8.0.7): Extracting archive
  - Installing sabre/event (6.0.1): Extracting archive
  - Installing phan/var_representation_polyfill (0.1.4): Extracting archive
  - Installing phan/tolerant-php-parser (v0.2.0): Extracting archive
  - Installing netresearch/jsonmapper (v5.0.1): Extracting archive
  - Installing webmozart/assert (2.1.6): Extracting archive
  - Installing phpstan/phpdoc-parser (2.3.2): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing doctrine/deprecations (1.1.6): Extracting archive
  - Installing phpdocumentor/type-resolver (2.0.0): Extracting archive
  - Installing phpdocumentor/reflection-docblock (6.0.3): Extracting archive
  - Installing danog/advanced-json-rpc (v3.2.3): Extracting archive
  - Installing psr/log (3.0.2): Extracting archive
  - Installing composer/xdebug-handler (3.0.5): Extracting archive
  - Installing phan/phan (6.0.2): Extracting archive
  - Installing mediawiki/phan-taint-check-plugin (9.1.0): Extracting archive
  - Installing mediawiki/mediawiki-phan-config (0.20.0): Extracting archive
  - Installing mediawiki/minus-x (2.0.1): Extracting archive
  - Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive
  - Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive
  - Installing php-parallel-lint/php-parallel-lint (v1.4.0): Extracting archive
  0/35 [>---------------------------]   0%
 28/35 [======================>-----]  80%
 35/35 [============================] 100%
1 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
16 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils

--- end ---
Upgrading c:mediawiki/mediawiki-codesniffer from 49.0.0 -> 50.0.0
$ /usr/bin/composer update
--- stderr ---
Loading composer repositories with package information
Updating dependencies
Lock file operations: 0 installs, 1 update, 0 removals
  - Upgrading mediawiki/mediawiki-codesniffer (v49.0.0 => v50.0.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 0 installs, 1 update, 0 removals
  - Upgrading mediawiki/mediawiki-codesniffer (v49.0.0 => v50.0.0): Extracting archive
Generating autoload files
16 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found.
--- stdout ---

--- end ---
$ vendor/bin/phpcs --report=json
--- stdout ---
{"totals":{"errors":0,"warnings":0,"fixable":0},"files":{"\/src\/repo\/includes\/Hooks\/CodeMirrorSpecialPageHook.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/.phan\/config.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/Hooks\/CodeMirrorGetModeHook.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/BaseValidator.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/ScribuntoValidator.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/JavaScriptValidatorTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/ApiCodeMirrorValidate.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/DataScriptTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/EventIngress.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/Hooks\/HookRunner.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/HookRunnerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/ApiCodeMirrorValidateTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/SanitizedCssValidator.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/DataScript.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/JavaScriptValidator.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/Hooks.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/HooksTest.php":{"errors":0,"warnings":0,"messages":[]}}}

--- end ---
$ /usr/bin/composer install
--- stderr ---
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Nothing to install, update or remove
Generating autoload files
16 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---

--- end ---
$ /usr/bin/composer test
--- stderr ---
> parallel-lint . --exclude vendor --exclude node_modules
> phpcs -sp --cache
> minus-x check .
--- stdout ---
PHP 8.4.18 | 10 parallel jobs
.................                                            17/17 (100%)


Checked 17 files in 0.1 seconds
No syntax error found
................. 17 / 17 (100%)


Time: 306ms; Memory: 14MB

MinusX
======
Processing /src/repo...
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
...
All good!

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@tootallnate/once": {
      "name": "@tootallnate/once",
      "severity": "low",
      "isDirect": false,
      "via": [
        {
          "source": 1113977,
          "name": "@tootallnate/once",
          "dependency": "@tootallnate/once",
          "title": "@tootallnate/once vulnerable to Incorrect Control Flow Scoping",
          "url": "https://github.com/advisories/GHSA-vpq2-c234-7xj6",
          "severity": "low",
          "cwe": [
            "CWE-705"
          ],
          "cvss": {
            "score": 3.3,
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<3.0.1"
        }
      ],
      "effects": [
        "http-proxy-agent"
      ],
      "range": "<3.0.1",
      "nodes": [
        "node_modules/@tootallnate/once"
      ],
      "fixAvailable": {
        "name": "@wikimedia/mw-node-qunit",
        "version": "6.2.1",
        "isSemVerMajor": true
      }
    },
    "@wdio/mocha-framework": {
      "name": "@wdio/mocha-framework",
      "severity": "high",
      "isDirect": true,
      "via": [
        "mocha"
      ],
      "effects": [],
      "range": ">=6.1.19",
      "nodes": [
        "node_modules/@wdio/mocha-framework"
      ],
      "fixAvailable": {
        "name": "@wdio/mocha-framework",
        "version": "6.1.17",
        "isSemVerMajor": true
      }
    },
    "@wikimedia/mw-node-qunit": {
      "name": "@wikimedia/mw-node-qunit",
      "severity": "low",
      "isDirect": true,
      "via": [
        "jsdom"
      ],
      "effects": [],
      "range": ">=6.3.0",
      "nodes": [
        "node_modules/@wikimedia/mw-node-qunit"
      ],
      "fixAvailable": {
        "name": "@wikimedia/mw-node-qunit",
        "version": "6.2.1",
        "isSemVerMajor": true
      }
    },
    "basic-ftp": {
      "name": "basic-ftp",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1113518,
          "name": "basic-ftp",
          "dependency": "basic-ftp",
          "title": "Basic FTP has Path Traversal Vulnerability in its downloadToDir() method",
          "url": "https://github.com/advisories/GHSA-5rq4-664w-9x2c",
          "severity": "critical",
          "cwe": [
            "CWE-22"
          ],
          "cvss": {
            "score": 9.1,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H"
          },
          "range": "<5.2.0"
        }
      ],
      "effects": [],
      "range": "<5.2.0",
      "nodes": [
        "node_modules/basic-ftp"
      ],
      "fixAvailable": true
    },
    "fast-xml-parser": {
      "name": "fast-xml-parser",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1114153,
          "name": "fast-xml-parser",
          "dependency": "fast-xml-parser",
          "title": "fast-xml-parser has stack overflow in XMLBuilder with preserveOrder",
          "url": "https://github.com/advisories/GHSA-fj3w-jwp8-x2g3",
          "severity": "low",
          "cwe": [
            "CWE-120"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": ">=5.0.0 <5.3.8"
        },
        {
          "source": 1114952,
          "name": "fast-xml-parser",
          "dependency": "fast-xml-parser",
          "title": "Entity Expansion Limits Bypassed When Set to Zero Due to JavaScript Falsy Evaluation in fast-xml-parser",
          "url": "https://github.com/advisories/GHSA-jp2q-39xq-3w4g",
          "severity": "moderate",
          "cwe": [
            "CWE-1284"
          ],
          "cvss": {
            "score": 5.9,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=4.0.0-beta.3 <=5.5.6"
        },
        {
          "source": 1115134,
          "name": "fast-xml-parser",
          "dependency": "fast-xml-parser",
          "title": "fast-xml-parser affected by numeric entity expansion bypassing all entity expansion limits (incomplete fix for CVE-2026-26278)",
          "url": "https://github.com/advisories/GHSA-8gc5-j5rx-235r",
          "severity": "high",
          "cwe": [
            "CWE-776"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=4.0.0-beta.3 <=5.5.5"
        }
      ],
      "effects": [],
      "range": "4.0.0-beta.3 - 5.5.6",
      "nodes": [
        "node_modules/fast-xml-parser"
      ],
      "fixAvailable": true
    },
    "flatted": {
      "name": "flatted",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1114526,
          "name": "flatted",
          "dependency": "flatted",
          "title": "flatted vulnerable to unbounded recursion DoS in parse() revive phase",
          "url": "https://github.com/advisories/GHSA-25h7-pfq9-p65f",
          "severity": "high",
          "cwe": [
            "CWE-674"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<3.4.0"
        },
        {
          "source": 1114934,
          "name": "flatted",
          "dependency": "flatted",
          "title": "Prototype Pollution via parse() in NodeJS flatted",
          "url": "https://github.com/advisories/GHSA-rf6f-7fwh-wjgh",
          "severity": "high",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<=3.4.1"
        }
      ],
      "effects": [],
      "range": "<=3.4.1",
      "nodes": [
        "node_modules/flatted"
      ],
      "fixAvailable": true
    },
    "form-data": {
      "name": "form-data",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1109540,
          "name": "form-data",
          "dependency": "form-data",
          "title": "form-data uses unsafe random function in form-data for choosing boundary",
          "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4",
          "severity": "critical",
          "cwe": [
            "CWE-330"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<2.5.4"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<2.5.4",
      "nodes": [
        "node_modules/request/node_modules/form-data"
      ],
      "fixAvailable": {
        "name": "wdio-mediawiki",
        "version": "6.5.0",
        "isSemVerMajor": true
      }
    },
    "http-proxy-agent": {
      "name": "http-proxy-agent",
      "severity": "low",
      "isDirect": false,
      "via": [
        "@tootallnate/once"
      ],
      "effects": [
        "jsdom"
      ],
      "range": "4.0.1 - 5.0.0",
      "nodes": [
        "node_modules/http-proxy-agent"
      ],
      "fixAvailable": {
        "name": "@wikimedia/mw-node-qunit",
        "version": "6.2.1",
        "isSemVerMajor": true
      }
    },
    "jest-environment-jsdom": {
      "name": "jest-environment-jsdom",
      "severity": "low",
      "isDirect": true,
      "via": [
        "jsdom"
      ],
      "effects": [],
      "range": "27.0.1 - 30.0.0-rc.1",
      "nodes": [
        "node_modules/jest-environment-jsdom"
      ],
      "fixAvailable": {
        "name": "jest-environment-jsdom",
        "version": "30.3.0",
        "isSemVerMajor": true
      }
    },
    "jsdom": {
      "name": "jsdom",
      "severity": "low",
      "isDirect": false,
      "via": [
        "http-proxy-agent"
      ],
      "effects": [
        "@wikimedia/mw-node-qunit",
        "jest-environment-jsdom"
      ],
      "range": "16.6.0 - 22.1.0",
      "nodes": [
        "node_modules/jest-environment-jsdom/node_modules/jsdom",
        "node_modules/jsdom"
      ],
      "fixAvailable": {
        "name": "@wikimedia/mw-node-qunit",
        "version": "6.2.1",
        "isSemVerMajor": true
      }
    },
    "minimatch": {
      "name": "minimatch",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1113540,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments",
          "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj",
          "severity": "high",
          "cwe": [
            "CWE-407"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=5.0.0 <5.1.8"
        },
        {
          "source": 1113544,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments",
          "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj",
          "severity": "high",
          "cwe": [
            "CWE-407"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=9.0.0 <9.0.7"
        },
        {
          "source": 1113546,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
          "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<3.1.4"
        },
        {
          "source": 1113548,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
          "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=5.0.0 <5.1.8"
        },
        {
          "source": 1113552,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
          "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=9.0.0 <9.0.7"
        }
      ],
      "effects": [],
      "range": "<=3.1.3 || 5.0.0 - 5.1.7 || 9.0.0 - 9.0.6",
      "nodes": [
        "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch",
        "node_modules/@wdio/config/node_modules/minimatch",
        "node_modules/archiver-utils/node_modules/minimatch",
        "node_modules/eslint-config-wikimedia/node_modules/minimatch",
        "node_modules/filelist/node_modules/minimatch",
        "node_modules/glob/node_modules/minimatch",
        "node_modules/minimatch",
        "node_modules/mocha/node_modules/minimatch",
        "node_modules/readdir-glob/node_modules/minimatch"
      ],
      "fixAvailable": true
    },
    "mocha": {
      "name": "mocha",
      "severity": "high",
      "isDirect": false,
      "via": [
        "serialize-javascript"
      ],
      "effects": [
        "@wdio/mocha-framework"
      ],
      "range": "8.0.0 - 12.0.0-beta-2",
      "nodes": [
        "node_modules/mocha"
      ],
      "fixAvailable": {
        "name": "@wdio/mocha-framework",
        "version": "6.1.17",
        "isSemVerMajor": true
      }
    },
    "mwbot": {
      "name": "mwbot",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "request"
      ],
      "effects": [
        "wdio-mediawiki"
      ],
      "range": ">=0.1.6",
      "nodes": [
        "node_modules/mwbot"
      ],
      "fixAvailable": {
        "name": "wdio-mediawiki",
        "version": "6.5.0",
        "isSemVerMajor": true
      }
    },
    "qs": {
      "name": "qs",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1113719,
          "name": "qs",
          "dependency": "qs",
          "title": "qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion",
          "url": "https://github.com/advisories/GHSA-6rw7-vpxm-498p",
          "severity": "moderate",
          "cwe": [
            "CWE-20"
          ],
          "cvss": {
            "score": 3.7,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<6.14.1"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<6.14.1",
      "nodes": [
        "node_modules/qs"
      ],
      "fixAvailable": {
        "name": "wdio-mediawiki",
        "version": "6.5.0",
        "isSemVerMajor": true
      }
    },
    "request": {
      "name": "request",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1096727,
          "name": "request",
          "dependency": "request",
          "title": "Server-Side Request Forgery in Request",
          "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
          "severity": "moderate",
          "cwe": [
            "CWE-918"
          ],
          "cvss": {
            "score": 6.1,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
          },
          "range": "<=2.88.2"
        },
        "form-data",
        "qs",
        "tough-cookie"
      ],
      "effects": [
        "mwbot"
      ],
      "range": "*",
      "nodes": [
        "node_modules/request"
      ],
      "fixAvailable": {
        "name": "wdio-mediawiki",
        "version": "6.5.0",
        "isSemVerMajor": true
      }
    },
    "rollup": {
      "name": "rollup",
      "severity": "high",
      "isDirect": true,
      "via": [
        {
          "source": 1113515,
          "name": "rollup",
          "dependency": "rollup",
          "title": "Rollup 4 has Arbitrary File Write via Path Traversal",
          "url": "https://github.com/advisories/GHSA-mw96-cpmx-2vgc",
          "severity": "high",
          "cwe": [
            "CWE-22"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": ">=4.0.0 <4.59.0"
        }
      ],
      "effects": [],
      "range": "4.0.0 - 4.58.0",
      "nodes": [
        "node_modules/rollup"
      ],
      "fixAvailable": {
        "name": "rollup",
        "version": "4.60.0",
        "isSemVerMajor": false
      }
    },
    "serialize-javascript": {
      "name": "serialize-javascript",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1113686,
          "name": "serialize-javascript",
          "dependency": "serialize-javascript",
          "title": "Serialize JavaScript is Vulnerable to RCE via RegExp.flags and Date.prototype.toISOString()",
          "url": "https://github.com/advisories/GHSA-5c6j-r48x-rmvq",
          "severity": "high",
          "cwe": [
            "CWE-96"
          ],
          "cvss": {
            "score": 8.1,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": "<=7.0.2"
        }
      ],
      "effects": [
        "mocha"
      ],
      "range": "<=7.0.2",
      "nodes": [
        "node_modules/serialize-javascript"
      ],
      "fixAvailable": {
        "name": "@wdio/mocha-framework",
        "version": "6.1.17",
        "isSemVerMajor": true
      }
    },
    "tough-cookie": {
      "name": "tough-cookie",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1097682,
          "name": "tough-cookie",
          "dependency": "tough-cookie",
          "title": "tough-cookie Prototype Pollution vulnerability",
          "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3",
          "severity": "moderate",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
          },
          "range": "<4.1.3"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<4.1.3",
      "nodes": [
        "node_modules/request/node_modules/tough-cookie"
      ],
      "fixAvailable": {
        "name": "wdio-mediawiki",
        "version": "6.5.0",
        "isSemVerMajor": true
      }
    },
    "underscore": {
      "name": "underscore",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1113950,
          "name": "underscore",
          "dependency": "underscore",
          "title": "Underscore has unlimited recursion in _.flatten and _.isEqual, potential for DoS attack",
          "url": "https://github.com/advisories/GHSA-qpx9-hpmf-5gmw",
          "severity": "high",
          "cwe": [
            "CWE-674",
            "CWE-770"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<=1.13.7"
        }
      ],
      "effects": [],
      "range": "<=1.13.7",
      "nodes": [
        "node_modules/underscore"
      ],
      "fixAvailable": true
    },
    "undici": {
      "name": "undici",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1114591,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici: Malicious WebSocket 64-bit length overflows parser and crashes the client",
          "url": "https://github.com/advisories/GHSA-f269-vfmq-vjvj",
          "severity": "high",
          "cwe": [
            "CWE-248",
            "CWE-1284"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=7.0.0 <7.24.0"
        },
        {
          "source": 1114592,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici: Malicious WebSocket 64-bit length overflows parser and crashes the client",
          "url": "https://github.com/advisories/GHSA-f269-vfmq-vjvj",
          "severity": "high",
          "cwe": [
            "CWE-248",
            "CWE-1284"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=6.0.0 <6.24.0"
        },
        {
          "source": 1114593,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has an HTTP Request/Response Smuggling issue",
          "url": "https://github.com/advisories/GHSA-2mjp-6q6p-2qxm",
          "severity": "moderate",
          "cwe": [
            "CWE-444"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"
          },
          "range": ">=7.0.0 <7.24.0"
        },
        {
          "source": 1114594,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has an HTTP Request/Response Smuggling issue",
          "url": "https://github.com/advisories/GHSA-2mjp-6q6p-2qxm",
          "severity": "moderate",
          "cwe": [
            "CWE-444"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"
          },
          "range": "<6.24.0"
        },
        {
          "source": 1114637,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has Unbounded Memory Consumption in WebSocket permessage-deflate Decompression",
          "url": "https://github.com/advisories/GHSA-vrm6-8vpv-qv8q",
          "severity": "high",
          "cwe": [
            "CWE-409"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=7.0.0 <7.24.0"
        },
        {
          "source": 1114638,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has Unbounded Memory Consumption in WebSocket permessage-deflate Decompression",
          "url": "https://github.com/advisories/GHSA-vrm6-8vpv-qv8q",
          "severity": "high",
          "cwe": [
            "CWE-409"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<6.24.0"
        },
        {
          "source": 1114639,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has Unhandled Exception in WebSocket Client Due to Invalid server_max_window_bits Validation",
          "url": "https://github.com/advisories/GHSA-v9p9-hfj2-hcw8",
          "severity": "high",
          "cwe": [
            "CWE-248"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=7.0.0 <7.24.0"
        },
        {
          "source": 1114640,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has Unhandled Exception in WebSocket Client Due to Invalid server_max_window_bits Validation",
          "url": "https://github.com/advisories/GHSA-v9p9-hfj2-hcw8",
          "severity": "high",
          "cwe": [
            "CWE-248"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<6.24.0"
        },
        {
          "source": 1114641,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has CRLF Injection in undici via `upgrade` option",
          "url": "https://github.com/advisories/GHSA-4992-7rv2-5pvq",
          "severity": "moderate",
          "cwe": [
            "CWE-93"
          ],
          "cvss": {
            "score": 4.6,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N"
          },
          "range": ">=7.0.0 <7.24.0"
        },
        {
          "source": 1114642,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has CRLF Injection in undici via `upgrade` option",
          "url": "https://github.com/advisories/GHSA-4992-7rv2-5pvq",
          "severity": "moderate",
          "cwe": [
            "CWE-93"
          ],
          "cvss": {
            "score": 4.6,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N"
          },
          "range": "<6.24.0"
        },
        {
          "source": 1114643,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has Unbounded Memory Consumption in its DeduplicationHandler via Response Buffering that leads to DoS",
          "url": "https://github.com/advisories/GHSA-phc3-fgpg-7m6h",
          "severity": "moderate",
          "cwe": [
            "CWE-770"
          ],
          "cvss": {
            "score": 5.9,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=7.17.0 <7.24.0"
        }
      ],
      "effects": [],
      "range": "<=6.23.0 || 7.0.0 - 7.23.0",
      "nodes": [
        "node_modules/cheerio/node_modules/undici",
        "node_modules/undici"
      ],
      "fixAvailable": true
    },
    "wdio-mediawiki": {
      "name": "wdio-mediawiki",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "mwbot"
      ],
      "effects": [],
      "range": "<=5.1.0",
      "nodes": [
        "node_modules/wdio-mediawiki"
      ],
      "fixAvailable": {
        "name": "wdio-mediawiki",
        "version": "6.5.0",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 5,
      "moderate": 4,
      "high": 9,
      "critical": 3,
      "total": 21
    },
    "dependencies": {
      "prod": 1,
      "dev": 1303,
      "optional": 47,
      "peer": 20,
      "peerOptional": 0,
      "total": 1303
    }
  }
}

--- end ---
Attempting to npm audit fix
$ /usr/bin/npm audit fix --dry-run --only=dev --json
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'luacheck-browserify@0.10.0',
npm WARN EBADENGINE   required: { node: '>=20.19.5' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
--- stdout ---
{
  "added": 1301,
  "removed": 0,
  "changed": 0,
  "audited": 1302,
  "funding": 226,
  "audit": {
    "auditReportVersion": 2,
    "vulnerabilities": {
      "@tootallnate/once": {
        "name": "@tootallnate/once",
        "severity": "low",
        "isDirect": false,
        "via": [
          {
            "source": 1113977,
            "name": "@tootallnate/once",
            "dependency": "@tootallnate/once",
            "title": "@tootallnate/once vulnerable to Incorrect Control Flow Scoping",
            "url": "https://github.com/advisories/GHSA-vpq2-c234-7xj6",
            "severity": "low",
            "cwe": [
              "CWE-705"
            ],
            "cvss": {
              "score": 3.3,
              "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L"
            },
            "range": "<3.0.1"
          }
        ],
        "effects": [
          "http-proxy-agent"
        ],
        "range": "<3.0.1",
        "nodes": [
          "node_modules/@tootallnate/once"
        ],
        "fixAvailable": {
          "name": "jest-environment-jsdom",
          "version": "30.3.0",
          "isSemVerMajor": true
        }
      },
      "@wdio/mocha-framework": {
        "name": "@wdio/mocha-framework",
        "severity": "high",
        "isDirect": true,
        "via": [
          "mocha"
        ],
        "effects": [],
        "range": ">=6.1.19",
        "nodes": [
          "node_modules/@wdio/mocha-framework"
        ],
        "fixAvailable": {
          "name": "@wdio/mocha-framework",
          "version": "6.1.17",
          "isSemVerMajor": true
        }
      },
      "@wikimedia/mw-node-qunit": {
        "name": "@wikimedia/mw-node-qunit",
        "severity": "low",
        "isDirect": true,
        "via": [
          "jsdom"
        ],
        "effects": [],
        "range": ">=6.3.0",
        "nodes": [
          "node_modules/@wikimedia/mw-node-qunit"
        ],
        "fixAvailable": {
          "name": "@wikimedia/mw-node-qunit",
          "version": "6.2.1",
          "isSemVerMajor": true
        }
      },
      "basic-ftp": {
        "name": "basic-ftp",
        "severity": "critical",
        "isDirect": false,
        "via": [
          {
            "source": 1113518,
            "name": "basic-ftp",
            "dependency": "basic-ftp",
            "title": "Basic FTP has Path Traversal Vulnerability in its downloadToDir() method",
            "url": "https://github.com/advisories/GHSA-5rq4-664w-9x2c",
            "severity": "critical",
            "cwe": [
              "CWE-22"
            ],
            "cvss": {
              "score": 9.1,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H"
            },
            "range": "<5.2.0"
          }
        ],
        "effects": [],
        "range": "<5.2.0",
        "nodes": [
          ""
        ],
        "fixAvailable": true
      },
      "fast-xml-parser": {
        "name": "fast-xml-parser",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1114153,
            "name": "fast-xml-parser",
            "dependency": "fast-xml-parser",
            "title": "fast-xml-parser has stack overflow in XMLBuilder with preserveOrder",
            "url": "https://github.com/advisories/GHSA-fj3w-jwp8-x2g3",
            "severity": "low",
            "cwe": [
              "CWE-120"
            ],
            "cvss": {
              "score": 0,
              "vectorString": null
            },
            "range": ">=5.0.0 <5.3.8"
          },
          {
            "source": 1114952,
            "name": "fast-xml-parser",
            "dependency": "fast-xml-parser",
            "title": "Entity Expansion Limits Bypassed When Set to Zero Due to JavaScript Falsy Evaluation in fast-xml-parser",
            "url": "https://github.com/advisories/GHSA-jp2q-39xq-3w4g",
            "severity": "moderate",
            "cwe": [
              "CWE-1284"
            ],
            "cvss": {
              "score": 5.9,
              "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": ">=4.0.0-beta.3 <=5.5.6"
          },
          {
            "source": 1115134,
            "name": "fast-xml-parser",
            "dependency": "fast-xml-parser",
            "title": "fast-xml-parser affected by numeric entity expansion bypassing all entity expansion limits (incomplete fix for CVE-2026-26278)",
            "url": "https://github.com/advisories/GHSA-8gc5-j5rx-235r",
            "severity": "high",
            "cwe": [
              "CWE-776"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": ">=4.0.0-beta.3 <=5.5.5"
          }
        ],
        "effects": [],
        "range": "4.0.0-beta.3 - 5.5.6",
        "nodes": [
          ""
        ],
        "fixAvailable": true
      },
      "flatted": {
        "name": "flatted",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1114526,
            "name": "flatted",
            "dependency": "flatted",
            "title": "flatted vulnerable to unbounded recursion DoS in parse() revive phase",
            "url": "https://github.com/advisories/GHSA-25h7-pfq9-p65f",
            "severity": "high",
            "cwe": [
              "CWE-674"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": "<3.4.0"
          },
          {
            "source": 1114934,
            "name": "flatted",
            "dependency": "flatted",
            "title": "Prototype Pollution via parse() in NodeJS flatted",
            "url": "https://github.com/advisories/GHSA-rf6f-7fwh-wjgh",
            "severity": "high",
            "cwe": [
              "CWE-1321"
            ],
            "cvss": {
              "score": 0,
              "vectorString": null
            },
            "range": "<=3.4.1"
          }
        ],
        "effects": [],
        "range": "<=3.4.1",
        "nodes": [
          ""
        ],
        "fixAvailable": true
      },
      "form-data": {
        "name": "form-data",
        "severity": "critical",
        "isDirect": false,
        "via": [
          {
            "source": 1109540,
            "name": "form-data",
            "dependency": "form-data",
            "title": "form-data uses unsafe random function in form-data for choosing boundary",
            "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4",
            "severity": "critical",
            "cwe": [
              "CWE-330"
            ],
            "cvss": {
              "score": 0,
              "vectorString": null
            },
            "range": "<2.5.4"
          }
        ],
        "effects": [
          "request"
        ],
        "range": "<2.5.4",
        "nodes": [
          "node_modules/request/node_modules/form-data"
        ],
        "fixAvailable": {
          "name": "wdio-mediawiki",
          "version": "6.5.0",
          "isSemVerMajor": true
        }
      },
      "http-proxy-agent": {
        "name": "http-proxy-agent",
        "severity": "low",
        "isDirect": false,
        "via": [
          "@tootallnate/once"
        ],
        "effects": [
          "jsdom"
        ],
        "range": "4.0.1 - 5.0.0",
        "nodes": [
          "node_modules/http-proxy-agent"
        ],
        "fixAvailable": {
          "name": "jest-environment-jsdom",
          "version": "30.3.0",
          "isSemVerMajor": true
        }
      },
      "jest-environment-jsdom": {
        "name": "jest-environment-jsdom",
        "severity": "low",
        "isDirect": true,
        "via": [
          "jsdom"
        ],
        "effects": [],
        "range": "27.0.1 - 30.0.0-rc.1",
        "nodes": [
          "node_modules/jest-environment-jsdom"
        ],
        "fixAvailable": {
          "name": "jest-environment-jsdom",
          "version": "30.3.0",
          "isSemVerMajor": true
        }
      },
      "jsdom": {
        "name": "jsdom",
        "severity": "low",
        "isDirect": false,
        "via": [
          "http-proxy-agent"
        ],
        "effects": [
          "@wikimedia/mw-node-qunit",
          "jest-environment-jsdom"
        ],
        "range": "16.6.0 - 22.1.0",
        "nodes": [
          "node_modules/jest-environment-jsdom/node_modules/jsdom",
          "node_modules/jsdom"
        ],
        "fixAvailable": {
          "name": "jest-environment-jsdom",
          "version": "30.3.0",
          "isSemVerMajor": true
        }
      },
      "minimatch": {
        "name": "minimatch",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1113540,
            "name": "minimatch",
            "dependency": "minimatch",
            "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments",
            "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj",
            "severity": "high",
            "cwe": [
              "CWE-407"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": ">=5.0.0 <5.1.8"
          },
          {
            "source": 1113544,
            "name": "minimatch",
            "dependency": "minimatch",
            "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments",
            "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj",
            "severity": "high",
            "cwe": [
              "CWE-407"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": ">=9.0.0 <9.0.7"
          },
          {
            "source": 1113546,
            "name": "minimatch",
            "dependency": "minimatch",
            "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
            "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
            "severity": "high",
            "cwe": [
              "CWE-1333"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": "<3.1.4"
          },
          {
            "source": 1113548,
            "name": "minimatch",
            "dependency": "minimatch",
            "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
            "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
            "severity": "high",
            "cwe": [
              "CWE-1333"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": ">=5.0.0 <5.1.8"
          },
          {
            "source": 1113552,
            "name": "minimatch",
            "dependency": "minimatch",
            "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
            "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
            "severity": "high",
            "cwe": [
              "CWE-1333"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": ">=9.0.0 <9.0.7"
          }
        ],
        "effects": [],
        "range": "<=3.1.3 || 5.0.0 - 5.1.7 || 9.0.0 - 9.0.6",
        "nodes": [
          "",
          "",
          "",
          "",
          "",
          "",
          "",
          "",
          ""
        ],
        "fixAvailable": true
      },
      "mocha": {
        "name": "mocha",
        "severity": "high",
        "isDirect": false,
        "via": [
          "serialize-javascript"
        ],
        "effects": [
          "@wdio/mocha-framework"
        ],
        "range": "8.0.0 - 12.0.0-beta-2",
        "nodes": [
          "node_modules/mocha"
        ],
        "fixAvailable": {
          "name": "@wdio/mocha-framework",
          "version": "6.1.17",
          "isSemVerMajor": true
        }
      },
      "mwbot": {
        "name": "mwbot",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "request"
        ],
        "effects": [
          "wdio-mediawiki"
        ],
        "range": ">=0.1.6",
        "nodes": [
          "node_modules/mwbot"
        ],
        "fixAvailable": {
          "name": "wdio-mediawiki",
          "version": "6.5.0",
          "isSemVerMajor": true
        }
      },
      "qs": {
        "name": "qs",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          {
            "source": 1113719,
            "name": "qs",
            "dependency": "qs",
            "title": "qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion",
            "url": "https://github.com/advisories/GHSA-6rw7-vpxm-498p",
            "severity": "moderate",
            "cwe": [
              "CWE-20"
            ],
            "cvss": {
              "score": 3.7,
              "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L"
            },
            "range": "<6.14.1"
          }
        ],
        "effects": [
          "request"
        ],
        "range": "<6.14.1",
        "nodes": [
          "node_modules/qs"
        ],
        "fixAvailable": {
          "name": "wdio-mediawiki",
          "version": "6.5.0",
          "isSemVerMajor": true
        }
      },
      "request": {
        "name": "request",
        "severity": "critical",
        "isDirect": false,
        "via": [
          {
            "source": 1096727,
            "name": "request",
            "dependency": "request",
            "title": "Server-Side Request Forgery in Request",
            "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
            "severity": "moderate",
            "cwe": [
              "CWE-918"
            ],
            "cvss": {
              "score": 6.1,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
            },
            "range": "<=2.88.2"
          },
          "form-data",
          "qs",
          "tough-cookie"
        ],
        "effects": [
          "mwbot"
        ],
        "range": "*",
        "nodes": [
          "node_modules/request"
        ],
        "fixAvailable": {
          "name": "wdio-mediawiki",
          "version": "6.5.0",
          "isSemVerMajor": true
        }
      },
      "rollup": {
        "name": "rollup",
        "severity": "high",
        "isDirect": true,
        "via": [
          {
            "source": 1113515,
            "name": "rollup",
            "dependency": "rollup",
            "title": "Rollup 4 has Arbitrary File Write via Path Traversal",
            "url": "https://github.com/advisories/GHSA-mw96-cpmx-2vgc",
            "severity": "high",
            "cwe": [
              "CWE-22"
            ],
            "cvss": {
              "score": 0,
              "vectorString": null
            },
            "range": ">=4.0.0 <4.59.0"
          }
        ],
        "effects": [],
        "range": "4.0.0 - 4.58.0",
        "nodes": [
          "node_modules/rollup"
        ],
        "fixAvailable": {
          "name": "rollup",
          "version": "4.60.0",
          "isSemVerMajor": false
        }
      },
      "serialize-javascript": {
        "name": "serialize-javascript",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1113686,
            "name": "serialize-javascript",
            "dependency": "serialize-javascript",
            "title": "Serialize JavaScript is Vulnerable to RCE via RegExp.flags and Date.prototype.toISOString()",
            "url": "https://github.com/advisories/GHSA-5c6j-r48x-rmvq",
            "severity": "high",
            "cwe": [
              "CWE-96"
            ],
            "cvss": {
              "score": 8.1,
              "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"
            },
            "range": "<=7.0.2"
          }
        ],
        "effects": [
          "mocha"
        ],
        "range": "<=7.0.2",
        "nodes": [
          "node_modules/serialize-javascript"
        ],
        "fixAvailable": {
          "name": "@wdio/mocha-framework",
          "version": "6.1.17",
          "isSemVerMajor": true
        }
      },
      "tough-cookie": {
        "name": "tough-cookie",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          {
            "source": 1097682,
            "name": "tough-cookie",
            "dependency": "tough-cookie",
            "title": "tough-cookie Prototype Pollution vulnerability",
            "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3",
            "severity": "moderate",
            "cwe": [
              "CWE-1321"
            ],
            "cvss": {
              "score": 6.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
            },
            "range": "<4.1.3"
          }
        ],
        "effects": [
          "request"
        ],
        "range": "<4.1.3",
        "nodes": [
          "node_modules/request/node_modules/tough-cookie"
        ],
        "fixAvailable": {
          "name": "wdio-mediawiki",
          "version": "6.5.0",
          "isSemVerMajor": true
        }
      },
      "underscore": {
        "name": "underscore",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1113950,
            "name": "underscore",
            "dependency": "underscore",
            "title": "Underscore has unlimited recursion in _.flatten and _.isEqual, potential for DoS attack",
            "url": "https://github.com/advisories/GHSA-qpx9-hpmf-5gmw",
            "severity": "high",
            "cwe": [
              "CWE-674",
              "CWE-770"
            ],
            "cvss": {
              "score": 0,
              "vectorString": null
            },
            "range": "<=1.13.7"
          }
        ],
        "effects": [],
        "range": "<=1.13.7",
        "nodes": [
          ""
        ],
        "fixAvailable": true
      },
      "undici": {
        "name": "undici",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1114591,
            "name": "undici",
            "dependency": "undici",
            "title": "Undici: Malicious WebSocket 64-bit length overflows parser and crashes the client",
            "url": "https://github.com/advisories/GHSA-f269-vfmq-vjvj",
            "severity": "high",
            "cwe": [
              "CWE-248",
              "CWE-1284"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": ">=7.0.0 <7.24.0"
          },
          {
            "source": 1114592,
            "name": "undici",
            "dependency": "undici",
            "title": "Undici: Malicious WebSocket 64-bit length overflows parser and crashes the client",
            "url": "https://github.com/advisories/GHSA-f269-vfmq-vjvj",
            "severity": "high",
            "cwe": [
              "CWE-248",
              "CWE-1284"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": ">=6.0.0 <6.24.0"
          },
          {
            "source": 1114593,
            "name": "undici",
            "dependency": "undici",
            "title": "Undici has an HTTP Request/Response Smuggling issue",
            "url": "https://github.com/advisories/GHSA-2mjp-6q6p-2qxm",
            "severity": "moderate",
            "cwe": [
              "CWE-444"
            ],
            "cvss": {
              "score": 6.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"
            },
            "range": ">=7.0.0 <7.24.0"
          },
          {
            "source": 1114594,
            "name": "undici",
            "dependency": "undici",
            "title": "Undici has an HTTP Request/Response Smuggling issue",
            "url": "https://github.com/advisories/GHSA-2mjp-6q6p-2qxm",
            "severity": "moderate",
            "cwe": [
              "CWE-444"
            ],
            "cvss": {
              "score": 6.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"
            },
            "range": "<6.24.0"
          },
          {
            "source": 1114637,
            "name": "undici",
            "dependency": "undici",
            "title": "Undici has Unbounded Memory Consumption in WebSocket permessage-deflate Decompression",
            "url": "https://github.com/advisories/GHSA-vrm6-8vpv-qv8q",
            "severity": "high",
            "cwe": [
              "CWE-409"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": ">=7.0.0 <7.24.0"
          },
          {
            "source": 1114638,
            "name": "undici",
            "dependency": "undici",
            "title": "Undici has Unbounded Memory Consumption in WebSocket permessage-deflate Decompression",
            "url": "https://github.com/advisories/GHSA-vrm6-8vpv-qv8q",
            "severity": "high",
            "cwe": [
              "CWE-409"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": "<6.24.0"
          },
          {
            "source": 1114639,
            "name": "undici",
            "dependency": "undici",
            "title": "Undici has Unhandled Exception in WebSocket Client Due to Invalid server_max_window_bits Validation",
            "url": "https://github.com/advisories/GHSA-v9p9-hfj2-hcw8",
            "severity": "high",
            "cwe": [
              "CWE-248"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": ">=7.0.0 <7.24.0"
          },
          {
            "source": 1114640,
            "name": "undici",
            "dependency": "undici",
            "title": "Undici has Unhandled Exception in WebSocket Client Due to Invalid server_max_window_bits Validation",
            "url": "https://github.com/advisories/GHSA-v9p9-hfj2-hcw8",
            "severity": "high",
            "cwe": [
              "CWE-248"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": "<6.24.0"
          },
          {
            "source": 1114641,
            "name": "undici",
            "dependency": "undici",
            "title": "Undici has CRLF Injection in undici via `upgrade` option",
            "url": "https://github.com/advisories/GHSA-4992-7rv2-5pvq",
            "severity": "moderate",
            "cwe": [
              "CWE-93"
            ],
            "cvss": {
              "score": 4.6,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N"
            },
            "range": ">=7.0.0 <7.24.0"
          },
          {
            "source": 1114642,
            "name": "undici",
            "dependency": "undici",
            "title": "Undici has CRLF Injection in undici via `upgrade` option",
            "url": "https://github.com/advisories/GHSA-4992-7rv2-5pvq",
            "severity": "moderate",
            "cwe": [
              "CWE-93"
            ],
            "cvss": {
              "score": 4.6,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N"
            },
            "range": "<6.24.0"
          },
          {
            "source": 1114643,
            "name": "undici",
            "dependency": "undici",
            "title": "Undici has Unbounded Memory Consumption in its DeduplicationHandler via Response Buffering that leads to DoS",
            "url": "https://github.com/advisories/GHSA-phc3-fgpg-7m6h",
            "severity": "moderate",
            "cwe": [
              "CWE-770"
            ],
            "cvss": {
              "score": 5.9,
              "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": ">=7.17.0 <7.24.0"
          }
        ],
        "effects": [],
        "range": "<=6.23.0 || 7.0.0 - 7.23.0",
        "nodes": [
          "",
          ""
        ],
        "fixAvailable": true
      },
      "wdio-mediawiki": {
        "name": "wdio-mediawiki",
        "severity": "moderate",
        "isDirect": true,
        "via": [
          "mwbot"
        ],
        "effects": [],
        "range": "<=5.1.0",
        "nodes": [
          "node_modules/wdio-mediawiki"
        ],
        "fixAvailable": {
          "name": "wdio-mediawiki",
          "version": "6.5.0",
          "isSemVerMajor": true
        }
      }
    },
    "metadata": {
      "vulnerabilities": {
        "info": 0,
        "low": 5,
        "moderate": 4,
        "high": 9,
        "critical": 3,
        "total": 21
      },
      "dependencies": {
        "prod": 1,
        "dev": 1301,
        "optional": 47,
        "peer": 20,
        "peerOptional": 0,
        "total": 1301
      }
    }
  }
}

--- end ---
{"added": 1301, "removed": 0, "changed": 0, "audited": 1302, "funding": 226, "audit": {"auditReportVersion": 2, "vulnerabilities": {"@tootallnate/once": {"name": "@tootallnate/once", "severity": "low", "isDirect": false, "via": [{"source": 1113977, "name": "@tootallnate/once", "dependency": "@tootallnate/once", "title": "@tootallnate/once vulnerable to Incorrect Control Flow Scoping", "url": "https://github.com/advisories/GHSA-vpq2-c234-7xj6", "severity": "low", "cwe": ["CWE-705"], "cvss": {"score": 3.3, "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L"}, "range": "<3.0.1"}], "effects": ["http-proxy-agent"], "range": "<3.0.1", "nodes": ["node_modules/@tootallnate/once"], "fixAvailable": {"name": "jest-environment-jsdom", "version": "30.3.0", "isSemVerMajor": true}}, "@wdio/mocha-framework": {"name": "@wdio/mocha-framework", "severity": "high", "isDirect": true, "via": ["mocha"], "effects": [], "range": ">=6.1.19", "nodes": ["node_modules/@wdio/mocha-framework"], "fixAvailable": {"name": "@wdio/mocha-framework", "version": "6.1.17", "isSemVerMajor": true}}, "@wikimedia/mw-node-qunit": {"name": "@wikimedia/mw-node-qunit", "severity": "low", "isDirect": true, "via": ["jsdom"], "effects": [], "range": ">=6.3.0", "nodes": ["node_modules/@wikimedia/mw-node-qunit"], "fixAvailable": {"name": "@wikimedia/mw-node-qunit", "version": "6.2.1", "isSemVerMajor": true}}, "basic-ftp": {"name": "basic-ftp", "severity": "critical", "isDirect": false, "via": [{"source": 1113518, "name": "basic-ftp", "dependency": "basic-ftp", "title": "Basic FTP has Path Traversal Vulnerability in its downloadToDir()\u00a0method", "url": "https://github.com/advisories/GHSA-5rq4-664w-9x2c", "severity": "critical", "cwe": ["CWE-22"], "cvss": {"score": 9.1, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H"}, "range": "<5.2.0"}], "effects": [], "range": "<5.2.0", "nodes": [""], "fixAvailable": true}, "fast-xml-parser": {"name": "fast-xml-parser", "severity": "high", "isDirect": false, "via": [{"source": 1114153, "name": "fast-xml-parser", "dependency": "fast-xml-parser", "title": "fast-xml-parser has stack overflow in XMLBuilder with preserveOrder", "url": "https://github.com/advisories/GHSA-fj3w-jwp8-x2g3", "severity": "low", "cwe": ["CWE-120"], "cvss": {"score": 0, "vectorString": null}, "range": ">=5.0.0 <5.3.8"}, {"source": 1114952, "name": "fast-xml-parser", "dependency": "fast-xml-parser", "title": "Entity Expansion Limits Bypassed When Set to Zero Due to JavaScript Falsy Evaluation in fast-xml-parser", "url": "https://github.com/advisories/GHSA-jp2q-39xq-3w4g", "severity": "moderate", "cwe": ["CWE-1284"], "cvss": {"score": 5.9, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=4.0.0-beta.3 <=5.5.6"}, {"source": 1115134, "name": "fast-xml-parser", "dependency": "fast-xml-parser", "title": "fast-xml-parser affected by numeric entity expansion bypassing all entity expansion limits (incomplete fix for CVE-2026-26278)", "url": "https://github.com/advisories/GHSA-8gc5-j5rx-235r", "severity": "high", "cwe": ["CWE-776"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=4.0.0-beta.3 <=5.5.5"}], "effects": [], "range": "4.0.0-beta.3 - 5.5.6", "nodes": [""], "fixAvailable": true}, "flatted": {"name": "flatted", "severity": "high", "isDirect": false, "via": [{"source": 1114526, "name": "flatted", "dependency": "flatted", "title": "flatted vulnerable to unbounded recursion DoS in parse() revive phase", "url": "https://github.com/advisories/GHSA-25h7-pfq9-p65f", "severity": "high", "cwe": ["CWE-674"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<3.4.0"}, {"source": 1114934, "name": "flatted", "dependency": "flatted", "title": "Prototype Pollution via parse() in NodeJS flatted", "url": "https://github.com/advisories/GHSA-rf6f-7fwh-wjgh", "severity": "high", "cwe": ["CWE-1321"], "cvss": {"score": 0, "vectorString": null}, "range": "<=3.4.1"}], "effects": [], "range": "<=3.4.1", "nodes": [""], "fixAvailable": true}, "form-data": {"name": "form-data", "severity": "critical", "isDirect": false, "via": [{"source": 1109540, "name": "form-data", "dependency": "form-data", "title": "form-data uses unsafe random function in form-data for choosing boundary", "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4", "severity": "critical", "cwe": ["CWE-330"], "cvss": {"score": 0, "vectorString": null}, "range": "<2.5.4"}], "effects": ["request"], "range": "<2.5.4", "nodes": ["node_modules/request/node_modules/form-data"], "fixAvailable": {"name": "wdio-mediawiki", "version": "6.5.0", "isSemVerMajor": true}}, "http-proxy-agent": {"name": "http-proxy-agent", "severity": "low", "isDirect": false, "via": ["@tootallnate/once"], "effects": ["jsdom"], "range": "4.0.1 - 5.0.0", "nodes": ["node_modules/http-proxy-agent"], "fixAvailable": {"name": "jest-environment-jsdom", "version": "30.3.0", "isSemVerMajor": true}}, "jest-environment-jsdom": {"name": "jest-environment-jsdom", "severity": "low", "isDirect": true, "via": ["jsdom"], "effects": [], "range": "27.0.1 - 30.0.0-rc.1", "nodes": ["node_modules/jest-environment-jsdom"], "fixAvailable": {"name": "jest-environment-jsdom", "version": "30.3.0", "isSemVerMajor": true}}, "jsdom": {"name": "jsdom", "severity": "low", "isDirect": false, "via": ["http-proxy-agent"], "effects": ["@wikimedia/mw-node-qunit", "jest-environment-jsdom"], "range": "16.6.0 - 22.1.0", "nodes": ["node_modules/jest-environment-jsdom/node_modules/jsdom", "node_modules/jsdom"], "fixAvailable": {"name": "jest-environment-jsdom", "version": "30.3.0", "isSemVerMajor": true}}, "minimatch": {"name": "minimatch", "severity": "high", "isDirect": false, "via": [{"source": 1113540, "name": "minimatch", "dependency": "minimatch", "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments", "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj", "severity": "high", "cwe": ["CWE-407"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=5.0.0 <5.1.8"}, {"source": 1113544, "name": "minimatch", "dependency": "minimatch", "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments", "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj", "severity": "high", "cwe": ["CWE-407"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=9.0.0 <9.0.7"}, {"source": 1113546, "name": "minimatch", "dependency": "minimatch", "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions", "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74", "severity": "high", "cwe": ["CWE-1333"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<3.1.4"}, {"source": 1113548, "name": "minimatch", "dependency": "minimatch", "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions", "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74", "severity": "high", "cwe": ["CWE-1333"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=5.0.0 <5.1.8"}, {"source": 1113552, "name": "minimatch", "dependency": "minimatch", "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions", "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74", "severity": "high", "cwe": ["CWE-1333"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=9.0.0 <9.0.7"}], "effects": [], "range": "<=3.1.3 || 5.0.0 - 5.1.7 || 9.0.0 - 9.0.6", "nodes": ["", "", "", "", "", "", "", "", ""], "fixAvailable": true}, "mocha": {"name": "mocha", "severity": "high", "isDirect": false, "via": ["serialize-javascript"], "effects": ["@wdio/mocha-framework"], "range": "8.0.0 - 12.0.0-beta-2", "nodes": ["node_modules/mocha"], "fixAvailable": {"name": "@wdio/mocha-framework", "version": "6.1.17", "isSemVerMajor": true}}, "mwbot": {"name": "mwbot", "severity": "moderate", "isDirect": false, "via": ["request"], "effects": ["wdio-mediawiki"], "range": ">=0.1.6", "nodes": ["node_modules/mwbot"], "fixAvailable": {"name": "wdio-mediawiki", "version": "6.5.0", "isSemVerMajor": true}}, "qs": {"name": "qs", "severity": "moderate", "isDirect": false, "via": [{"source": 1113719, "name": "qs", "dependency": "qs", "title": "qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion", "url": "https://github.com/advisories/GHSA-6rw7-vpxm-498p", "severity": "moderate", "cwe": ["CWE-20"], "cvss": {"score": 3.7, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L"}, "range": "<6.14.1"}], "effects": ["request"], "range": "<6.14.1", "nodes": ["node_modules/qs"], "fixAvailable": {"name": "wdio-mediawiki", "version": "6.5.0", "isSemVerMajor": true}}, "request": {"name": "request", "severity": "critical", "isDirect": false, "via": [{"source": 1096727, "name": "request", "dependency": "request", "title": "Server-Side Request Forgery in Request", "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6", "severity": "moderate", "cwe": ["CWE-918"], "cvss": {"score": 6.1, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"}, "range": "<=2.88.2"}, "form-data", "qs", "tough-cookie"], "effects": ["mwbot"], "range": "*", "nodes": ["node_modules/request"], "fixAvailable": {"name": "wdio-mediawiki", "version": "6.5.0", "isSemVerMajor": true}}, "rollup": {"name": "rollup", "severity": "high", "isDirect": true, "via": [{"source": 1113515, "name": "rollup", "dependency": "rollup", "title": "Rollup 4 has Arbitrary File Write via Path Traversal", "url": "https://github.com/advisories/GHSA-mw96-cpmx-2vgc", "severity": "high", "cwe": ["CWE-22"], "cvss": {"score": 0, "vectorString": null}, "range": ">=4.0.0 <4.59.0"}], "effects": [], "range": "4.0.0 - 4.58.0", "nodes": ["node_modules/rollup"], "fixAvailable": {"name": "rollup", "version": "4.60.0", "isSemVerMajor": false}}, "serialize-javascript": {"name": "serialize-javascript", "severity": "high", "isDirect": false, "via": [{"source": 1113686, "name": "serialize-javascript", "dependency": "serialize-javascript", "title": "Serialize JavaScript is Vulnerable to RCE via RegExp.flags and Date.prototype.toISOString()", "url": "https://github.com/advisories/GHSA-5c6j-r48x-rmvq", "severity": "high", "cwe": ["CWE-96"], "cvss": {"score": 8.1, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"}, "range": "<=7.0.2"}], "effects": ["mocha"], "range": "<=7.0.2", "nodes": ["node_modules/serialize-javascript"], "fixAvailable": {"name": "@wdio/mocha-framework", "version": "6.1.17", "isSemVerMajor": true}}, "tough-cookie": {"name": "tough-cookie", "severity": "moderate", "isDirect": false, "via": [{"source": 1097682, "name": "tough-cookie", "dependency": "tough-cookie", "title": "tough-cookie Prototype Pollution vulnerability", "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3", "severity": "moderate", "cwe": ["CWE-1321"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"}, "range": "<4.1.3"}], "effects": ["request"], "range": "<4.1.3", "nodes": ["node_modules/request/node_modules/tough-cookie"], "fixAvailable": {"name": "wdio-mediawiki", "version": "6.5.0", "isSemVerMajor": true}}, "underscore": {"name": "underscore", "severity": "high", "isDirect": false, "via": [{"source": 1113950, "name": "underscore", "dependency": "underscore", "title": "Underscore has unlimited recursion in _.flatten and _.isEqual, potential for DoS attack", "url": "https://github.com/advisories/GHSA-qpx9-hpmf-5gmw", "severity": "high", "cwe": ["CWE-674", "CWE-770"], "cvss": {"score": 0, "vectorString": null}, "range": "<=1.13.7"}], "effects": [], "range": "<=1.13.7", "nodes": [""], "fixAvailable": true}, "undici": {"name": "undici", "severity": "high", "isDirect": false, "via": [{"source": 1114591, "name": "undici", "dependency": "undici", "title": "Undici: Malicious WebSocket 64-bit length overflows parser and crashes the client", "url": "https://github.com/advisories/GHSA-f269-vfmq-vjvj", "severity": "high", "cwe": ["CWE-248", "CWE-1284"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=7.0.0 <7.24.0"}, {"source": 1114592, "name": "undici", "dependency": "undici", "title": "Undici: Malicious WebSocket 64-bit length overflows parser and crashes the client", "url": "https://github.com/advisories/GHSA-f269-vfmq-vjvj", "severity": "high", "cwe": ["CWE-248", "CWE-1284"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=6.0.0 <6.24.0"}, {"source": 1114593, "name": "undici", "dependency": "undici", "title": "Undici has an HTTP Request/Response Smuggling issue", "url": "https://github.com/advisories/GHSA-2mjp-6q6p-2qxm", "severity": "moderate", "cwe": ["CWE-444"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"}, "range": ">=7.0.0 <7.24.0"}, {"source": 1114594, "name": "undici", "dependency": "undici", "title": "Undici has an HTTP Request/Response Smuggling issue", "url": "https://github.com/advisories/GHSA-2mjp-6q6p-2qxm", "severity": "moderate", "cwe": ["CWE-444"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"}, "range": "<6.24.0"}, {"source": 1114637, "name": "undici", "dependency": "undici", "title": "Undici has Unbounded Memory Consumption in WebSocket permessage-deflate Decompression", "url": "https://github.com/advisories/GHSA-vrm6-8vpv-qv8q", "severity": "high", "cwe": ["CWE-409"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=7.0.0 <7.24.0"}, {"source": 1114638, "name": "undici", "dependency": "undici", "title": "Undici has Unbounded Memory Consumption in WebSocket permessage-deflate Decompression", "url": "https://github.com/advisories/GHSA-vrm6-8vpv-qv8q", "severity": "high", "cwe": ["CWE-409"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<6.24.0"}, {"source": 1114639, "name": "undici", "dependency": "undici", "title": "Undici has Unhandled Exception in WebSocket Client Due to Invalid server_max_window_bits Validation", "url": "https://github.com/advisories/GHSA-v9p9-hfj2-hcw8", "severity": "high", "cwe": ["CWE-248"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=7.0.0 <7.24.0"}, {"source": 1114640, "name": "undici", "dependency": "undici", "title": "Undici has Unhandled Exception in WebSocket Client Due to Invalid server_max_window_bits Validation", "url": "https://github.com/advisories/GHSA-v9p9-hfj2-hcw8", "severity": "high", "cwe": ["CWE-248"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<6.24.0"}, {"source": 1114641, "name": "undici", "dependency": "undici", "title": "Undici has CRLF Injection in undici via `upgrade` option", "url": "https://github.com/advisories/GHSA-4992-7rv2-5pvq", "severity": "moderate", "cwe": ["CWE-93"], "cvss": {"score": 4.6, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N"}, "range": ">=7.0.0 <7.24.0"}, {"source": 1114642, "name": "undici", "dependency": "undici", "title": "Undici has CRLF Injection in undici via `upgrade` option", "url": "https://github.com/advisories/GHSA-4992-7rv2-5pvq", "severity": "moderate", "cwe": ["CWE-93"], "cvss": {"score": 4.6, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N"}, "range": "<6.24.0"}, {"source": 1114643, "name": "undici", "dependency": "undici", "title": "Undici has Unbounded Memory Consumption in its DeduplicationHandler via Response Buffering that leads to DoS", "url": "https://github.com/advisories/GHSA-phc3-fgpg-7m6h", "severity": "moderate", "cwe": ["CWE-770"], "cvss": {"score": 5.9, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=7.17.0 <7.24.0"}], "effects": [], "range": "<=6.23.0 || 7.0.0 - 7.23.0", "nodes": ["", ""], "fixAvailable": true}, "wdio-mediawiki": {"name": "wdio-mediawiki", "severity": "moderate", "isDirect": true, "via": ["mwbot"], "effects": [], "range": "<=5.1.0", "nodes": ["node_modules/wdio-mediawiki"], "fixAvailable": {"name": "wdio-mediawiki", "version": "6.5.0", "isSemVerMajor": true}}}, "metadata": {"vulnerabilities": {"info": 0, "low": 5, "moderate": 4, "high": 9, "critical": 3, "total": 21}, "dependencies": {"prod": 1, "dev": 1301, "optional": 47, "peer": 20, "peerOptional": 0, "total": 1301}}}}
{}
Upgrading n:rollup from 4.22.4 -> 4.60.0
$ /usr/bin/npm audit fix --only=dev
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'luacheck-browserify@0.10.0',
npm WARN EBADENGINE   required: { node: '>=20.19.5' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated node-domexception@1.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 1300 packages, and audited 1301 packages in 31s

226 packages are looking for funding
  run `npm fund` for details

# npm audit report

@tootallnate/once  <3.0.1
@tootallnate/once vulnerable to Incorrect Control Flow Scoping - https://github.com/advisories/GHSA-vpq2-c234-7xj6
fix available via `npm audit fix --force`
Will install jest-environment-jsdom@30.3.0, which is a breaking change
node_modules/@tootallnate/once
  http-proxy-agent  4.0.1 - 5.0.0
  Depends on vulnerable versions of @tootallnate/once
  node_modules/http-proxy-agent
    jsdom  16.6.0 - 22.1.0
    Depends on vulnerable versions of http-proxy-agent
    node_modules/jest-environment-jsdom/node_modules/jsdom
    node_modules/jsdom
      @wikimedia/mw-node-qunit  >=6.3.0
      Depends on vulnerable versions of jsdom
      node_modules/@wikimedia/mw-node-qunit
      jest-environment-jsdom  27.0.1 - 30.0.0-rc.1
      Depends on vulnerable versions of jsdom
      node_modules/jest-environment-jsdom

form-data  <2.5.4
Severity: critical
form-data uses unsafe random function in form-data for choosing boundary - https://github.com/advisories/GHSA-fjxv-7rqg-78g4
fix available via `npm audit fix --force`
Will install wdio-mediawiki@6.5.0, which is a breaking change
node_modules/request/node_modules/form-data
  request  *
  Depends on vulnerable versions of form-data
  Depends on vulnerable versions of qs
  Depends on vulnerable versions of tough-cookie
  node_modules/request
    mwbot  >=0.1.6
    Depends on vulnerable versions of request
    node_modules/mwbot
      wdio-mediawiki  <=5.1.0
      Depends on vulnerable versions of mwbot
      node_modules/wdio-mediawiki

qs  <6.14.1
Severity: moderate
qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion - https://github.com/advisories/GHSA-6rw7-vpxm-498p
fix available via `npm audit fix --force`
Will install wdio-mediawiki@6.5.0, which is a breaking change
node_modules/qs


serialize-javascript  <=7.0.2
Severity: high
Serialize JavaScript is Vulnerable to RCE via RegExp.flags and Date.prototype.toISOString() - https://github.com/advisories/GHSA-5c6j-r48x-rmvq
fix available via `npm audit fix --force`
Will install @wdio/mocha-framework@6.1.17, which is a breaking change
node_modules/serialize-javascript
  mocha  8.0.0 - 12.0.0-beta-2
  Depends on vulnerable versions of serialize-javascript
  node_modules/mocha
    @wdio/mocha-framework  >=6.1.19
    Depends on vulnerable versions of mocha
    node_modules/@wdio/mocha-framework

tough-cookie  <4.1.3
Severity: moderate
tough-cookie Prototype Pollution vulnerability - https://github.com/advisories/GHSA-72xf-g2v4-qvf3
fix available via `npm audit fix --force`
Will install wdio-mediawiki@6.5.0, which is a breaking change
node_modules/request/node_modules/tough-cookie

14 vulnerabilities (5 low, 4 moderate, 3 high, 2 critical)

To address all issues (including breaking changes), run:
  npm audit fix --force

--- end ---
Verifying that tests still pass
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'luacheck-browserify@0.10.0',
npm WARN EBADENGINE   required: { node: '>=20.19.5' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated node-domexception@1.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 1300 packages, and audited 1301 packages in 49s

226 packages are looking for funding
  run `npm fund` for details

14 vulnerabilities (5 low, 4 moderate, 3 high, 2 critical)

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stderr ---
PASS tests/jest/codemirror.preferences.test.js (5.422 s)
PASS tests/jest/codemirror.test.js (7.439 s)
PASS tests/jest/modes/codemirror.mediawiki.test.js (7.758 s)
PASS tests/jest/modes/codemirror.json.lint.test.js
PASS tests/jest/codemirror.wikieditor.test.js
PASS tests/jest/codemirror.codex.test.js
PASS tests/jest/modes/codemirror.mediawiki.parser.test.js
PASS tests/jest/codemirror.search.test.js
PASS tests/jest/modes/codemirror.mediawiki.lint.test.js
PASS tests/jest/modes/codemirror.mediawiki.autocomplete.test.js
PASS tests/jest/codemirror.extensionRegistry.test.js
PASS tests/jest/codemirror.keymap.test.js
PASS tests/jest/codemirror.matchbrackets.test.js
PASS tests/jest/codemirror.visualEditor.test.js
PASS tests/jest/modes/codemirror.lua.autocomplete.test.js
PASS tests/jest/modes/codemirror.mediawiki.keymap.test.js
PASS tests/jest/codemirror.lint.test.js
PASS tests/jest/codemirror.child.test.js
PASS tests/jest/modes/codemirror.mediawiki.bidiIsolation.test.js
PASS tests/jest/codemirror.gotoLine.test.js
PASS tests/jest/modes/codemirror.mediawiki.matchTag.test.js
PASS tests/jest/modes/codemirror.mediawiki.openLinks.test.js
PASS tests/jest/modes/codemirror.css.test.js
PASS tests/jest/modes/codemirror.javascript.autocomplete.test.js
PASS tests/jest/modes/codemirror.lua.codeFolding.test.js
PASS tests/jest/modes/codemirror.css.autocomplete.test.js
PASS tests/jest/codemirror.init.test.js
PASS tests/jest/modes/codemirror.javascript.test.js (6.495 s)

Test Suites: 28 passed, 28 total
Tests:       3164 passed, 3164 total
Snapshots:   0 total
Time:        18.187 s
Ran all test suites.

resources/codemirror.bundle.lib.js → resources/lib/codemirror6.bundle.lib.js...
created resources/lib/codemirror6.bundle.lib.js in 2.1s

resources/modes/codemirror.bundle.modes.js → resources/lib/codemirror6.bundle.modes.js...
(!) Conflicting re-exports
"resources/modes/codemirror.bundle.modes.js" re-exports "autoCloseTags" from both "node_modules/@codemirror/lang-javascript/dist/index.js" and "node_modules/@codemirror/lang-html/dist/index.js" (will be ignored).
created resources/lib/codemirror6.bundle.modes.js in 424ms

  resources/workers/css/worker.min.js  674.4kb

⚡ Done in 175ms

  resources/workers/javascript/worker.min.js  1.1mb ⚠️

⚡ Done in 195ms

  resources/workers/lua/worker.min.js  605.0kb

⚡ Done in 55ms

  resources/workers/mediawiki/worker.min.js  121.7kb

⚡ Done in 46ms
--- stdout ---

> test
> npm run test:lint && npm run test:unit && npm run check-built-assets


> test:lint
> npm run test:lint:styles && npm run test:lint:js && npm run test:lint:i18n


> test:lint:styles
> stylelint --cache "resources/**/*.less"


> test:lint:js
> ESLINT_USE_FLAT_CONFIG=false eslint --cache .


/src/repo/resources/codemirror.search.js
  583:1  warning  This line has a length of 108. Maximum allowed is 100  max-len
  583:1  warning  Expected 1 lines after block description               jsdoc/tag-lines

✖ 2 problems (0 errors, 2 warnings)
  0 errors and 1 warning potentially fixable with the `--fix` option.


> test:lint:i18n
> banana-checker i18n/

Checked 1 message directory.

> test:unit
> jest

----------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------------------------
File                                    | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                                                                                                      
----------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------------------------
All files                               |   82.13 |    73.83 |   75.07 |   82.47 |                                                                                                                        
 resources                              |   82.28 |    69.88 |    74.6 |   82.56 |                                                                                                                        
  codemirror.bundle.lib.js              |       0 |        0 |       0 |       0 |                                                                                                                        
  codemirror.child.js                   |    87.5 |      100 |   85.71 |    87.5 | 52-53                                                                                                                  
  codemirror.codex.js                   |   97.05 |    78.72 |   78.57 |   97.05 | 283-284,389,395-396                                                                                                    
  codemirror.extensionRegistry.js       |    92.5 |    84.37 |     100 |    92.5 | 153,188-189                                                                                                            
  codemirror.gotoLine.js                |   90.62 |    58.06 |     100 |   90.47 | 167,175-179,181                                                                                                        
  codemirror.init.js                    |   17.07 |    18.75 |       0 |   17.07 | 26-82,96-136                                                                                                           
  codemirror.js                         |   89.28 |     84.1 |   84.28 |   89.56 | 290,394-403,655-662,742,842,856-861,891,934,956,1215,1217-1233                                                         
  codemirror.keymap.js                  |   97.88 |    90.42 |   94.11 |   97.88 | 245,386,422                                                                                                            
  codemirror.lint.js                    |   81.81 |    80.76 |      70 |   82.29 | 13-21,37,41,51,63-64,84-88,126                                                                                         
  codemirror.matchbrackets.js           |   64.93 |     55.4 |   53.84 |   64.47 | 89-94,114,145-154,172-183,226-229                                                                                      
  codemirror.panel.js                   |     100 |      100 |   33.33 |     100 |                                                                                                                        
  codemirror.preferences.js             |   88.93 |    77.12 |   80.48 |   89.24 | 280,330-332,368,558-560,596,639-640,715,729,741-746,758-759,801-807,827-828                                            
  codemirror.search.js                  |    73.2 |    38.63 |   70.96 |    73.2 | 108-135,285-290,327-328,339-340,444-483,520-534,546-549                                                                
  codemirror.textSelection.js           |   81.96 |    96.42 |   83.33 |   83.33 | 83-88,191-192,196-197,229-239                                                                                          
  codemirror.validate.js                |   19.04 |        0 |   16.66 |   19.04 | 14-47                                                                                                                  
  codemirror.visualEditor.js            |   65.75 |       40 |   83.33 |   66.66 | 111-112,268-350                                                                                                        
  codemirror.wikieditor.js              |   72.16 |    64.86 |   55.26 |   73.68 | 66,78,85,104-113,279,300,303,318-346,383,472-488,496,519-524                                                           
 resources/modes                        |   72.54 |    69.46 |   69.44 |    72.8 |                                                                                                                        
  codemirror.bundle.modes.js            |       0 |        0 |       0 |       0 |                                                                                                                        
  codemirror.css.js                     |   69.09 |       56 |   57.14 |   68.51 | 39-40,86,101-120,156-158                                                                                               
  codemirror.javascript.js              |   80.85 |    78.57 |   78.94 |   80.85 | 92-97,163,180-183                                                                                                      
  codemirror.json.js                    |       0 |        0 |       0 |       0 | 1-73                                                                                                                   
  codemirror.lua.js                     |   84.61 |    79.68 |   78.94 |   85.22 | 355,366,368,373,385,395,455,464-465,483-486                                                                            
  codemirror.mode.exporter.js           |     100 |      100 |     100 |     100 |                                                                                                                        
  codemirror.mode.js                    |      75 |      100 |    62.5 |      75 | 65-74,110                                                                                                              
  codemirror.vue.js                     |     100 |      100 |     100 |     100 |                                                                                                                        
 resources/modes/json                   |   99.41 |    99.03 |     100 |   99.41 |                                                                                                                        
  codemirror.json.lint.js               |   99.41 |    99.03 |     100 |   99.41 | 111                                                                                                                    
 resources/modes/mediawiki              |   81.58 |     75.1 |   76.05 |   81.99 |                                                                                                                        
  codemirror.mediawiki.autocomplete.js  |   71.42 |    55.29 |   58.62 |   71.42 | 50,56-62,67,93-94,101-104,107,111-114,120,135-140,157-158,188,195-201,281                                              
  codemirror.mediawiki.bidiIsolation.js |     100 |    61.11 |     100 |     100 | 33,92-113                                                                                                              
  codemirror.mediawiki.closeTags.js     |   17.39 |        0 |       0 |   17.39 | 6-38                                                                                                                   
  codemirror.mediawiki.codeFolding.js   |   51.42 |    48.14 |   41.37 |    51.8 | 137,148,153-162,188,194,205,235-236,250-254,273-282,309-320,332-351,375-432,451-467                                    
  codemirror.mediawiki.config.js        |     100 |      100 |     100 |     100 |                                                                                                                        
  codemirror.mediawiki.js               |   96.25 |       95 |   97.05 |   96.22 | 275-276,352-353,404,488-490,500-503,598-600,1035-1037,1041-1042,1343,1373-1378,1510,1565-1569,1677,1710,1718-1719,1735 
  codemirror.mediawiki.keymap.js        |   78.94 |       70 |   72.22 |   78.94 | 211-212,228-247,312-331,383-388                                                                                        
  codemirror.mediawiki.lint.js          |   52.23 |    25.92 |    40.9 |   53.33 | 25,142,162-189,199-211                                                                                                 
  codemirror.mediawiki.matchTag.js      |   70.49 |    42.85 |   71.42 |   70.68 | 59-63,136-154                                                                                                          
  codemirror.mediawiki.openLinks.js     |    30.5 |    15.25 |      80 |    30.5 | 61-115                                                                                                                 
----------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------------------------

> check-built-assets
> { git status resources/lib/ | grep "nothing to commit, working tree clean"; } && { echo 'CHECKING BUILD SOURCES ARE COMMITTED' && npm run build && git status resources/lib/ | grep "nothing to commit, working tree clean" || { npm run node-debug; false; }; }

nothing to commit, working tree clean
CHECKING BUILD SOURCES ARE COMMITTED

> build
> rollup -c && npm run build:stylelint && npm run build:eslint && npm run build:luacheck && npm run build:wikilint


> build:stylelint
> esbuild resources/workers/css/worker.js --charset=utf8 --bundle --minify --target=es2017 --format=iife --outfile=resources/workers/css/worker.min.js


> build:eslint
> esbuild resources/workers/javascript/worker.js --charset=utf8 --bundle --minify --target=es2017 --format=iife --outfile=resources/workers/javascript/worker.min.js


> build:luacheck
> esbuild resources/workers/lua/worker.js --charset=utf8 --bundle --minify --target=es2017 --format=iife --outfile=resources/workers/lua/worker.min.js


> build:wikilint
> esbuild resources/workers/mediawiki/worker.js --charset=utf8 --bundle --minify --target=es2017 --format=iife --outfile=resources/workers/mediawiki/worker.min.js


> node-debug
> node -v && npm -v && echo 'ERROR: Please ensure that production assets have been built with `npm run build` and committed. For the recommended Node.js version, see .nvmrc.'

v20.19.2
9.2.0
ERROR: Please ensure that production assets have been built with `npm run build` and committed. For the recommended Node.js version, see .nvmrc.

--- end ---
$ node_modules/.bin/jest -u
--- stderr ---
PASS tests/jest/codemirror.test.js (5.722 s)
PASS tests/jest/modes/codemirror.mediawiki.test.js (5.735 s)
PASS tests/jest/modes/codemirror.javascript.test.js (6.004 s)
PASS tests/jest/codemirror.preferences.test.js
PASS tests/jest/modes/codemirror.css.test.js
PASS tests/jest/modes/codemirror.mediawiki.lint.test.js
PASS tests/jest/codemirror.matchbrackets.test.js
PASS tests/jest/modes/codemirror.mediawiki.parser.test.js
PASS tests/jest/codemirror.child.test.js
PASS tests/jest/codemirror.wikieditor.test.js
PASS tests/jest/modes/codemirror.json.lint.test.js
PASS tests/jest/modes/codemirror.mediawiki.keymap.test.js
PASS tests/jest/codemirror.search.test.js
PASS tests/jest/modes/codemirror.mediawiki.autocomplete.test.js
PASS tests/jest/modes/codemirror.lua.autocomplete.test.js
PASS tests/jest/modes/codemirror.mediawiki.openLinks.test.js
PASS tests/jest/codemirror.visualEditor.test.js
PASS tests/jest/modes/codemirror.css.autocomplete.test.js
PASS tests/jest/modes/codemirror.javascript.autocomplete.test.js
PASS tests/jest/modes/codemirror.mediawiki.bidiIsolation.test.js
PASS tests/jest/codemirror.keymap.test.js
PASS tests/jest/codemirror.extensionRegistry.test.js
PASS tests/jest/codemirror.codex.test.js
PASS tests/jest/modes/codemirror.mediawiki.matchTag.test.js
PASS tests/jest/codemirror.lint.test.js
PASS tests/jest/modes/codemirror.lua.codeFolding.test.js
PASS tests/jest/codemirror.gotoLine.test.js
PASS tests/jest/codemirror.init.test.js

Test Suites: 28 passed, 28 total
Tests:       3164 passed, 3164 total
Snapshots:   0 total
Time:        12.761 s, estimated 15 s
Ran all test suites.
--- stdout ---
----------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------------------------
File                                    | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                                                                                                      
----------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------------------------
All files                               |   82.13 |    73.83 |   75.07 |   82.47 |                                                                                                                        
 resources                              |   82.28 |    69.88 |    74.6 |   82.56 |                                                                                                                        
  codemirror.bundle.lib.js              |       0 |        0 |       0 |       0 |                                                                                                                        
  codemirror.child.js                   |    87.5 |      100 |   85.71 |    87.5 | 52-53                                                                                                                  
  codemirror.codex.js                   |   97.05 |    78.72 |   78.57 |   97.05 | 283-284,389,395-396                                                                                                    
  codemirror.extensionRegistry.js       |    92.5 |    84.37 |     100 |    92.5 | 153,188-189                                                                                                            
  codemirror.gotoLine.js                |   90.62 |    58.06 |     100 |   90.47 | 167,175-179,181                                                                                                        
  codemirror.init.js                    |   17.07 |    18.75 |       0 |   17.07 | 26-82,96-136                                                                                                           
  codemirror.js                         |   89.28 |     84.1 |   84.28 |   89.56 | 290,394-403,655-662,742,842,856-861,891,934,956,1215,1217-1233                                                         
  codemirror.keymap.js                  |   97.88 |    90.42 |   94.11 |   97.88 | 245,386,422                                                                                                            
  codemirror.lint.js                    |   81.81 |    80.76 |      70 |   82.29 | 13-21,37,41,51,63-64,84-88,126                                                                                         
  codemirror.matchbrackets.js           |   64.93 |     55.4 |   53.84 |   64.47 | 89-94,114,145-154,172-183,226-229                                                                                      
  codemirror.panel.js                   |     100 |      100 |   33.33 |     100 |                                                                                                                        
  codemirror.preferences.js             |   88.93 |    77.12 |   80.48 |   89.24 | 280,330-332,368,558-560,596,639-640,715,729,741-746,758-759,801-807,827-828                                            
  codemirror.search.js                  |    73.2 |    38.63 |   70.96 |    73.2 | 108-135,285-290,327-328,339-340,444-483,520-534,546-549                                                                
  codemirror.textSelection.js           |   81.96 |    96.42 |   83.33 |   83.33 | 83-88,191-192,196-197,229-239                                                                                          
  codemirror.validate.js                |   19.04 |        0 |   16.66 |   19.04 | 14-47                                                                                                                  
  codemirror.visualEditor.js            |   65.75 |       40 |   83.33 |   66.66 | 111-112,268-350                                                                                                        
  codemirror.wikieditor.js              |   72.16 |    64.86 |   55.26 |   73.68 | 66,78,85,104-113,279,300,303,318-346,383,472-488,496,519-524                                                           
 resources/modes                        |   72.54 |    69.46 |   69.44 |    72.8 |                                                                                                                        
  codemirror.bundle.modes.js            |       0 |        0 |       0 |       0 |                                                                                                                        
  codemirror.css.js                     |   69.09 |       56 |   57.14 |   68.51 | 39-40,86,101-120,156-158                                                                                               
  codemirror.javascript.js              |   80.85 |    78.57 |   78.94 |   80.85 | 92-97,163,180-183                                                                                                      
  codemirror.json.js                    |       0 |        0 |       0 |       0 | 1-73                                                                                                                   
  codemirror.lua.js                     |   84.61 |    79.68 |   78.94 |   85.22 | 355,366,368,373,385,395,455,464-465,483-486                                                                            
  codemirror.mode.exporter.js           |     100 |      100 |     100 |     100 |                                                                                                                        
  codemirror.mode.js                    |      75 |      100 |    62.5 |      75 | 65-74,110                                                                                                              
  codemirror.vue.js                     |     100 |      100 |     100 |     100 |                                                                                                                        
 resources/modes/json                   |   99.41 |    99.03 |     100 |   99.41 |                                                                                                                        
  codemirror.json.lint.js               |   99.41 |    99.03 |     100 |   99.41 | 111                                                                                                                    
 resources/modes/mediawiki              |   81.58 |     75.1 |   76.05 |   81.99 |                                                                                                                        
  codemirror.mediawiki.autocomplete.js  |   71.42 |    55.29 |   58.62 |   71.42 | 50,56-62,67,93-94,101-104,107,111-114,120,135-140,157-158,188,195-201,281                                              
  codemirror.mediawiki.bidiIsolation.js |     100 |    61.11 |     100 |     100 | 33,92-113                                                                                                              
  codemirror.mediawiki.closeTags.js     |   17.39 |        0 |       0 |   17.39 | 6-38                                                                                                                   
  codemirror.mediawiki.codeFolding.js   |   51.42 |    48.14 |   41.37 |    51.8 | 137,148,153-162,188,194,205,235-236,250-254,273-282,309-320,332-351,375-432,451-467                                    
  codemirror.mediawiki.config.js        |     100 |      100 |     100 |     100 |                                                                                                                        
  codemirror.mediawiki.js               |   96.25 |       95 |   97.05 |   96.22 | 275-276,352-353,404,488-490,500-503,598-600,1035-1037,1041-1042,1343,1373-1378,1510,1565-1569,1677,1710,1718-1719,1735 
  codemirror.mediawiki.keymap.js        |   78.94 |       70 |   72.22 |   78.94 | 211-212,228-247,312-331,383-388                                                                                        
  codemirror.mediawiki.lint.js          |   52.23 |    25.92 |    40.9 |   53.33 | 25,142,162-189,199-211                                                                                                 
  codemirror.mediawiki.matchTag.js      |   70.49 |    42.85 |   71.42 |   70.68 | 59-63,136-154                                                                                                          
  codemirror.mediawiki.openLinks.js     |    30.5 |    15.25 |      80 |    30.5 | 61-115                                                                                                                 
----------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------------------------

--- end ---
$ /usr/bin/npm test
--- stderr ---
PASS tests/jest/modes/codemirror.mediawiki.test.js
PASS tests/jest/codemirror.test.js
PASS tests/jest/modes/codemirror.javascript.test.js
PASS tests/jest/codemirror.wikieditor.test.js
PASS tests/jest/codemirror.matchbrackets.test.js
PASS tests/jest/modes/codemirror.css.test.js
PASS tests/jest/codemirror.child.test.js
PASS tests/jest/modes/codemirror.mediawiki.parser.test.js
PASS tests/jest/modes/codemirror.mediawiki.keymap.test.js
PASS tests/jest/modes/codemirror.mediawiki.lint.test.js
PASS tests/jest/codemirror.search.test.js
PASS tests/jest/codemirror.preferences.test.js
PASS tests/jest/modes/codemirror.mediawiki.openLinks.test.js
PASS tests/jest/modes/codemirror.mediawiki.autocomplete.test.js
PASS tests/jest/modes/codemirror.lua.autocomplete.test.js
PASS tests/jest/modes/codemirror.mediawiki.matchTag.test.js
PASS tests/jest/codemirror.visualEditor.test.js
PASS tests/jest/modes/codemirror.json.lint.test.js
PASS tests/jest/codemirror.keymap.test.js
PASS tests/jest/modes/codemirror.mediawiki.bidiIsolation.test.js
PASS tests/jest/modes/codemirror.javascript.autocomplete.test.js
PASS tests/jest/modes/codemirror.lua.codeFolding.test.js
PASS tests/jest/codemirror.codex.test.js
PASS tests/jest/codemirror.gotoLine.test.js
PASS tests/jest/modes/codemirror.css.autocomplete.test.js
PASS tests/jest/codemirror.extensionRegistry.test.js
PASS tests/jest/codemirror.init.test.js
PASS tests/jest/codemirror.lint.test.js

Test Suites: 28 passed, 28 total
Tests:       3164 passed, 3164 total
Snapshots:   0 total
Time:        9.297 s, estimated 10 s
Ran all test suites.
--- stdout ---

> test
> npm run test:lint && npm run test:unit && npm run check-built-assets


> test:lint
> npm run test:lint:styles && npm run test:lint:js && npm run test:lint:i18n


> test:lint:styles
> stylelint --cache "resources/**/*.less"


> test:lint:js
> ESLINT_USE_FLAT_CONFIG=false eslint --cache .


/src/repo/resources/codemirror.search.js
  583:1  warning  This line has a length of 108. Maximum allowed is 100  max-len
  583:1  warning  Expected 1 lines after block description               jsdoc/tag-lines

✖ 2 problems (0 errors, 2 warnings)
  0 errors and 1 warning potentially fixable with the `--fix` option.


> test:lint:i18n
> banana-checker i18n/

Checked 1 message directory.

> test:unit
> jest

----------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------------------------
File                                    | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                                                                                                      
----------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------------------------
All files                               |   82.13 |    73.83 |   75.07 |   82.47 |                                                                                                                        
 resources                              |   82.28 |    69.88 |    74.6 |   82.56 |                                                                                                                        
  codemirror.bundle.lib.js              |       0 |        0 |       0 |       0 |                                                                                                                        
  codemirror.child.js                   |    87.5 |      100 |   85.71 |    87.5 | 52-53                                                                                                                  
  codemirror.codex.js                   |   97.05 |    78.72 |   78.57 |   97.05 | 283-284,389,395-396                                                                                                    
  codemirror.extensionRegistry.js       |    92.5 |    84.37 |     100 |    92.5 | 153,188-189                                                                                                            
  codemirror.gotoLine.js                |   90.62 |    58.06 |     100 |   90.47 | 167,175-179,181                                                                                                        
  codemirror.init.js                    |   17.07 |    18.75 |       0 |   17.07 | 26-82,96-136                                                                                                           
  codemirror.js                         |   89.28 |     84.1 |   84.28 |   89.56 | 290,394-403,655-662,742,842,856-861,891,934,956,1215,1217-1233                                                         
  codemirror.keymap.js                  |   97.88 |    90.42 |   94.11 |   97.88 | 245,386,422                                                                                                            
  codemirror.lint.js                    |   81.81 |    80.76 |      70 |   82.29 | 13-21,37,41,51,63-64,84-88,126                                                                                         
  codemirror.matchbrackets.js           |   64.93 |     55.4 |   53.84 |   64.47 | 89-94,114,145-154,172-183,226-229                                                                                      
  codemirror.panel.js                   |     100 |      100 |   33.33 |     100 |                                                                                                                        
  codemirror.preferences.js             |   88.93 |    77.12 |   80.48 |   89.24 | 280,330-332,368,558-560,596,639-640,715,729,741-746,758-759,801-807,827-828                                            
  codemirror.search.js                  |    73.2 |    38.63 |   70.96 |    73.2 | 108-135,285-290,327-328,339-340,444-483,520-534,546-549                                                                
  codemirror.textSelection.js           |   81.96 |    96.42 |   83.33 |   83.33 | 83-88,191-192,196-197,229-239                                                                                          
  codemirror.validate.js                |   19.04 |        0 |   16.66 |   19.04 | 14-47                                                                                                                  
  codemirror.visualEditor.js            |   65.75 |       40 |   83.33 |   66.66 | 111-112,268-350                                                                                                        
  codemirror.wikieditor.js              |   72.16 |    64.86 |   55.26 |   73.68 | 66,78,85,104-113,279,300,303,318-346,383,472-488,496,519-524                                                           
 resources/modes                        |   72.54 |    69.46 |   69.44 |    72.8 |                                                                                                                        
  codemirror.bundle.modes.js            |       0 |        0 |       0 |       0 |                                                                                                                        
  codemirror.css.js                     |   69.09 |       56 |   57.14 |   68.51 | 39-40,86,101-120,156-158                                                                                               
  codemirror.javascript.js              |   80.85 |    78.57 |   78.94 |   80.85 | 92-97,163,180-183                                                                                                      
  codemirror.json.js                    |       0 |        0 |       0 |       0 | 1-73                                                                                                                   
  codemirror.lua.js                     |   84.61 |    79.68 |   78.94 |   85.22 | 355,366,368,373,385,395,455,464-465,483-486                                                                            
  codemirror.mode.exporter.js           |     100 |      100 |     100 |     100 |                                                                                                                        
  codemirror.mode.js                    |      75 |      100 |    62.5 |      75 | 65-74,110                                                                                                              
  codemirror.vue.js                     |     100 |      100 |     100 |     100 |                                                                                                                        
 resources/modes/json                   |   99.41 |    99.03 |     100 |   99.41 |                                                                                                                        
  codemirror.json.lint.js               |   99.41 |    99.03 |     100 |   99.41 | 111                                                                                                                    
 resources/modes/mediawiki              |   81.58 |     75.1 |   76.05 |   81.99 |                                                                                                                        
  codemirror.mediawiki.autocomplete.js  |   71.42 |    55.29 |   58.62 |   71.42 | 50,56-62,67,93-94,101-104,107,111-114,120,135-140,157-158,188,195-201,281                                              
  codemirror.mediawiki.bidiIsolation.js |     100 |    61.11 |     100 |     100 | 33,92-113                                                                                                              
  codemirror.mediawiki.closeTags.js     |   17.39 |        0 |       0 |   17.39 | 6-38                                                                                                                   
  codemirror.mediawiki.codeFolding.js   |   51.42 |    48.14 |   41.37 |    51.8 | 137,148,153-162,188,194,205,235-236,250-254,273-282,309-320,332-351,375-432,451-467                                    
  codemirror.mediawiki.config.js        |     100 |      100 |     100 |     100 |                                                                                                                        
  codemirror.mediawiki.js               |   96.25 |       95 |   97.05 |   96.22 | 275-276,352-353,404,488-490,500-503,598-600,1035-1037,1041-1042,1343,1373-1378,1510,1565-1569,1677,1710,1718-1719,1735 
  codemirror.mediawiki.keymap.js        |   78.94 |       70 |   72.22 |   78.94 | 211-212,228-247,312-331,383-388                                                                                        
  codemirror.mediawiki.lint.js          |   52.23 |    25.92 |    40.9 |   53.33 | 25,142,162-189,199-211                                                                                                 
  codemirror.mediawiki.matchTag.js      |   70.49 |    42.85 |   71.42 |   70.68 | 59-63,136-154                                                                                                          
  codemirror.mediawiki.openLinks.js     |    30.5 |    15.25 |      80 |    30.5 | 61-115                                                                                                                 
----------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------------------------

> check-built-assets
> { git status resources/lib/ | grep "nothing to commit, working tree clean"; } && { echo 'CHECKING BUILD SOURCES ARE COMMITTED' && npm run build && git status resources/lib/ | grep "nothing to commit, working tree clean" || { npm run node-debug; false; }; }


--- end ---
Traceback (most recent call last):
  File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 289, in npm_test
    self.check_call(["npm", "test"])
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.13/site-packages/runner/shell2.py", line 66, in check_call
    res.check_returncode()
    ~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.13/subprocess.py", line 508, in check_returncode
    raise CalledProcessError(self.returncode, self.args, self.stdout,
                             self.stderr)
subprocess.CalledProcessError: Command '['/usr/bin/npm', 'test']' returned non-zero exit status 1.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 1268, in main
    libup.run()
    ~~~~~~~~~^^
  File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 1208, in run
    self.npm_audit_fix(new_npm_audit)
    ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 239, in npm_audit_fix
    self.npm_test()
    ~~~~~~~~~~~~~^^
  File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 303, in npm_test
    self.check_call(["npm", "test"])
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.13/site-packages/runner/shell2.py", line 66, in check_call
    res.check_returncode()
    ~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.13/subprocess.py", line 508, in check_returncode
    raise CalledProcessError(self.returncode, self.args, self.stdout,
                             self.stderr)
subprocess.CalledProcessError: Command '['/usr/bin/npm', 'test']' returned non-zero exit status 1.
Source code is licensed under the AGPL.