mediawiki/extensions/MobileFrontend: main (log #2356705)

sourcepatches

This run took 139 seconds.

$ date
--- stdout ---
Sun Feb 22 21:00:35 UTC 2026

--- end ---
$ git clone file:///srv/git/mediawiki-extensions-MobileFrontend.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 ---
10e20083c6bb99f20e9cb6142764502714d07128 refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@eslint/eslintrc": {
      "name": "@eslint/eslintrc",
      "severity": "high",
      "isDirect": false,
      "via": [
        "minimatch"
      ],
      "effects": [
        "eslint"
      ],
      "range": "0.0.1 || >=0.1.1",
      "nodes": [
        "node_modules/@eslint/eslintrc"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": true
      }
    },
    "@humanwhocodes/config-array": {
      "name": "@humanwhocodes/config-array",
      "severity": "high",
      "isDirect": false,
      "via": [
        "minimatch"
      ],
      "effects": [
        "eslint"
      ],
      "range": "*",
      "nodes": [
        "node_modules/@humanwhocodes/config-array"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": true
      }
    },
    "@stylistic/eslint-plugin": {
      "name": "@stylistic/eslint-plugin",
      "severity": "high",
      "isDirect": false,
      "via": [
        "@typescript-eslint/utils"
      ],
      "effects": [],
      "range": "2.7.0-beta.0 - 5.0.0-beta.6 || >=6.0.0-beta.1",
      "nodes": [
        "node_modules/@stylistic/eslint-plugin"
      ],
      "fixAvailable": true
    },
    "@typescript-eslint/eslint-plugin": {
      "name": "@typescript-eslint/eslint-plugin",
      "severity": "high",
      "isDirect": false,
      "via": [
        "@typescript-eslint/type-utils",
        "@typescript-eslint/utils",
        "eslint"
      ],
      "effects": [
        "eslint-config-wikimedia"
      ],
      "range": "<=8.55.1-alpha.3",
      "nodes": [
        "node_modules/@typescript-eslint/eslint-plugin"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": true
      }
    },
    "@typescript-eslint/parser": {
      "name": "@typescript-eslint/parser",
      "severity": "high",
      "isDirect": false,
      "via": [
        "@typescript-eslint/typescript-estree",
        "eslint"
      ],
      "effects": [],
      "range": "1.1.1-alpha.0 - 8.56.1-alpha.2",
      "nodes": [
        "node_modules/@typescript-eslint/parser"
      ],
      "fixAvailable": true
    },
    "@typescript-eslint/type-utils": {
      "name": "@typescript-eslint/type-utils",
      "severity": "high",
      "isDirect": false,
      "via": [
        "@typescript-eslint/typescript-estree",
        "@typescript-eslint/utils",
        "eslint"
      ],
      "effects": [
        "@typescript-eslint/eslint-plugin"
      ],
      "range": "5.9.2-alpha.0 - 8.56.1-alpha.2",
      "nodes": [
        "node_modules/@typescript-eslint/type-utils"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": true
      }
    },
    "@typescript-eslint/typescript-estree": {
      "name": "@typescript-eslint/typescript-estree",
      "severity": "high",
      "isDirect": false,
      "via": [
        "minimatch"
      ],
      "effects": [
        "@typescript-eslint/parser",
        "@typescript-eslint/type-utils",
        "@typescript-eslint/utils"
      ],
      "range": "6.16.0 - 8.56.1-alpha.2",
      "nodes": [
        "node_modules/@typescript-eslint/typescript-estree",
        "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": true
      }
    },
    "@typescript-eslint/utils": {
      "name": "@typescript-eslint/utils",
      "severity": "high",
      "isDirect": false,
      "via": [
        "@typescript-eslint/typescript-estree",
        "eslint"
      ],
      "effects": [
        "@stylistic/eslint-plugin",
        "@typescript-eslint/eslint-plugin",
        "@typescript-eslint/type-utils",
        "eslint-plugin-jest"
      ],
      "range": "<=8.56.1-alpha.2",
      "nodes": [
        "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils",
        "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils",
        "node_modules/@typescript-eslint/utils"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": true
      }
    },
    "@wikimedia/mw-node-qunit": {
      "name": "@wikimedia/mw-node-qunit",
      "severity": "high",
      "isDirect": true,
      "via": [
        "glob"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/@wikimedia/mw-node-qunit"
      ],
      "fixAvailable": false
    },
    "ajv": {
      "name": "ajv",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1113398,
          "name": "ajv",
          "dependency": "ajv",
          "title": "ajv has ReDoS when using `$data` option",
          "url": "https://github.com/advisories/GHSA-2g4f-4pwh-qvx6",
          "severity": "moderate",
          "cwe": [
            "CWE-400"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<6.14.0"
        }
      ],
      "effects": [],
      "range": "<6.14.0",
      "nodes": [
        "node_modules/ajv"
      ],
      "fixAvailable": true
    },
    "babel-plugin-istanbul": {
      "name": "babel-plugin-istanbul",
      "severity": "high",
      "isDirect": true,
      "via": [
        "test-exclude"
      ],
      "effects": [],
      "range": ">=5.0.1",
      "nodes": [
        "node_modules/babel-plugin-istanbul"
      ],
      "fixAvailable": {
        "name": "babel-plugin-istanbul",
        "version": "5.0.0",
        "isSemVerMajor": true
      }
    },
    "brace-expansion": {
      "name": "brace-expansion",
      "severity": "low",
      "isDirect": false,
      "via": [
        {
          "source": 1105443,
          "name": "brace-expansion",
          "dependency": "brace-expansion",
          "title": "brace-expansion Regular Expression Denial of Service vulnerability",
          "url": "https://github.com/advisories/GHSA-v6h2-p8h4-qcjw",
          "severity": "low",
          "cwe": [
            "CWE-400"
          ],
          "cvss": {
            "score": 3.1,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": ">=1.0.0 <=1.1.11"
        }
      ],
      "effects": [],
      "range": "1.0.0 - 1.1.11",
      "nodes": [
        "node_modules/brace-expansion"
      ],
      "fixAvailable": true
    },
    "clean-webpack-plugin": {
      "name": "clean-webpack-plugin",
      "severity": "high",
      "isDirect": true,
      "via": [
        "rimraf"
      ],
      "effects": [],
      "range": "0.1.2 - 1.0.1",
      "nodes": [
        "node_modules/clean-webpack-plugin"
      ],
      "fixAvailable": {
        "name": "clean-webpack-plugin",
        "version": "4.0.0",
        "isSemVerMajor": true
      }
    },
    "cross-spawn": {
      "name": "cross-spawn",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1104663,
          "name": "cross-spawn",
          "dependency": "cross-spawn",
          "title": "Regular Expression Denial of Service (ReDoS) in cross-spawn",
          "url": "https://github.com/advisories/GHSA-3xgq-45jj-v275",
          "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": "<6.0.6"
        }
      ],
      "effects": [
        "pre-commit"
      ],
      "range": "<6.0.6",
      "nodes": [
        "node_modules/pre-commit/node_modules/cross-spawn"
      ],
      "fixAvailable": {
        "name": "pre-commit",
        "version": "1.0.10",
        "isSemVerMajor": true
      }
    },
    "doiuse": {
      "name": "doiuse",
      "severity": "high",
      "isDirect": false,
      "via": [
        "multimatch"
      ],
      "effects": [
        "stylelint-no-unsupported-browser-features"
      ],
      "range": ">=2.2.0",
      "nodes": [
        "node_modules/doiuse"
      ],
      "fixAvailable": {
        "name": "stylelint-config-wikimedia",
        "version": "0.10.1",
        "isSemVerMajor": true
      }
    },
    "eslint": {
      "name": "eslint",
      "severity": "high",
      "isDirect": false,
      "via": [
        "@eslint/eslintrc",
        "@humanwhocodes/config-array",
        "file-entry-cache",
        "minimatch"
      ],
      "effects": [
        "@typescript-eslint/eslint-plugin",
        "@typescript-eslint/parser",
        "@typescript-eslint/type-utils",
        "@typescript-eslint/utils",
        "eslint-config-wikimedia",
        "eslint-plugin-jsdoc",
        "eslint-plugin-vue"
      ],
      "range": "0.7.1 - 2.0.0-rc.1 || 4.1.0 - 10.0.0-rc.2",
      "nodes": [
        "node_modules/eslint"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": true
      }
    },
    "eslint-config-wikimedia": {
      "name": "eslint-config-wikimedia",
      "severity": "high",
      "isDirect": true,
      "via": [
        "@stylistic/eslint-plugin",
        "@typescript-eslint/eslint-plugin",
        "@typescript-eslint/parser",
        "eslint",
        "eslint-plugin-jest",
        "eslint-plugin-jsdoc",
        "eslint-plugin-vue"
      ],
      "effects": [],
      "range": ">=0.9.0",
      "nodes": [
        "node_modules/eslint-config-wikimedia"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": true
      }
    },
    "eslint-plugin-jest": {
      "name": "eslint-plugin-jest",
      "severity": "high",
      "isDirect": false,
      "via": [
        "@typescript-eslint/utils"
      ],
      "effects": [
        "eslint-config-wikimedia"
      ],
      "range": ">=29.0.0",
      "nodes": [
        "node_modules/eslint-plugin-jest"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": true
      }
    },
    "eslint-plugin-jsdoc": {
      "name": "eslint-plugin-jsdoc",
      "severity": "high",
      "isDirect": false,
      "via": [
        "eslint"
      ],
      "effects": [
        "eslint-config-wikimedia"
      ],
      "range": "8.4.4 - 62.6.1",
      "nodes": [
        "node_modules/eslint-plugin-jsdoc"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": true
      }
    },
    "eslint-plugin-vue": {
      "name": "eslint-plugin-vue",
      "severity": "high",
      "isDirect": false,
      "via": [
        "eslint"
      ],
      "effects": [
        "eslint-config-wikimedia"
      ],
      "range": "5.0.0-beta.0 - 10.7.0",
      "nodes": [
        "node_modules/eslint-plugin-vue"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": true
      }
    },
    "file-entry-cache": {
      "name": "file-entry-cache",
      "severity": "high",
      "isDirect": false,
      "via": [
        "flat-cache"
      ],
      "effects": [
        "eslint"
      ],
      "range": "4.0.0 - 7.0.2",
      "nodes": [
        "node_modules/file-entry-cache"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": true
      }
    },
    "flat-cache": {
      "name": "flat-cache",
      "severity": "high",
      "isDirect": false,
      "via": [
        "rimraf"
      ],
      "effects": [
        "file-entry-cache"
      ],
      "range": "1.3.4 - 4.0.0",
      "nodes": [
        "node_modules/flat-cache"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": 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/form-data"
      ],
      "fixAvailable": {
        "name": "jsdom",
        "version": "28.1.0",
        "isSemVerMajor": true
      }
    },
    "glob": {
      "name": "glob",
      "severity": "high",
      "isDirect": false,
      "via": [
        "minimatch"
      ],
      "effects": [
        "@wikimedia/mw-node-qunit",
        "nyc",
        "rimraf",
        "test-exclude"
      ],
      "range": "3.0.0 - 10.5.0",
      "nodes": [
        "node_modules/glob"
      ],
      "fixAvailable": {
        "name": "nyc",
        "version": "10.1.2",
        "isSemVerMajor": true
      }
    },
    "istanbul-lib-processinfo": {
      "name": "istanbul-lib-processinfo",
      "severity": "high",
      "isDirect": false,
      "via": [
        "rimraf"
      ],
      "effects": [
        "nyc"
      ],
      "range": "<=2.0.3",
      "nodes": [
        "node_modules/istanbul-lib-processinfo"
      ],
      "fixAvailable": {
        "name": "nyc",
        "version": "10.1.2",
        "isSemVerMajor": true
      }
    },
    "jsdom": {
      "name": "jsdom",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "request",
        "tough-cookie"
      ],
      "effects": [],
      "range": "0.1.20 || 0.2.0 - 16.5.3",
      "nodes": [
        "node_modules/jsdom"
      ],
      "fixAvailable": {
        "name": "jsdom",
        "version": "28.1.0",
        "isSemVerMajor": true
      }
    },
    "less": {
      "name": "less",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "request"
      ],
      "effects": [],
      "range": "1.4.0-b1 - 2.6.1 || 2.7.2 - 3.11.3",
      "nodes": [
        "node_modules/less"
      ],
      "fixAvailable": {
        "name": "less",
        "version": "3.13.1",
        "isSemVerMajor": false
      }
    },
    "minimatch": {
      "name": "minimatch",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1113371,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern",
          "url": "https://github.com/advisories/GHSA-3ppc-4f35-3m26",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<10.2.1"
        }
      ],
      "effects": [
        "@eslint/eslintrc",
        "@humanwhocodes/config-array",
        "@typescript-eslint/typescript-estree",
        "eslint",
        "glob",
        "multimatch",
        "test-exclude"
      ],
      "range": "<10.2.1",
      "nodes": [
        "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch",
        "node_modules/@typescript-eslint/utils/node_modules/minimatch",
        "node_modules/minimatch"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.8.1",
        "isSemVerMajor": true
      }
    },
    "multimatch": {
      "name": "multimatch",
      "severity": "high",
      "isDirect": false,
      "via": [
        "minimatch"
      ],
      "effects": [
        "doiuse"
      ],
      "range": "<=7.0.0",
      "nodes": [
        "node_modules/multimatch"
      ],
      "fixAvailable": {
        "name": "stylelint-config-wikimedia",
        "version": "0.10.1",
        "isSemVerMajor": true
      }
    },
    "nyc": {
      "name": "nyc",
      "severity": "high",
      "isDirect": true,
      "via": [
        "glob",
        "istanbul-lib-processinfo",
        "rimraf",
        "spawn-wrap",
        "test-exclude"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/nyc"
      ],
      "fixAvailable": {
        "name": "nyc",
        "version": "10.1.2",
        "isSemVerMajor": true
      }
    },
    "pre-commit": {
      "name": "pre-commit",
      "severity": "high",
      "isDirect": true,
      "via": [
        "cross-spawn"
      ],
      "effects": [],
      "range": ">=1.1.0",
      "nodes": [
        "node_modules/pre-commit"
      ],
      "fixAvailable": {
        "name": "pre-commit",
        "version": "1.0.10",
        "isSemVerMajor": true
      }
    },
    "qs": {
      "name": "qs",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1113132,
          "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": "high",
          "cwe": [
            "CWE-20"
          ],
          "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.14.1"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<6.14.1",
      "nodes": [
        "node_modules/qs"
      ],
      "fixAvailable": {
        "name": "jsdom",
        "version": "28.1.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": [
        "jsdom",
        "less",
        "request-promise-core",
        "request-promise-native"
      ],
      "range": "*",
      "nodes": [
        "node_modules/request"
      ],
      "fixAvailable": {
        "name": "jsdom",
        "version": "28.1.0",
        "isSemVerMajor": true
      }
    },
    "request-promise-core": {
      "name": "request-promise-core",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "request"
      ],
      "effects": [
        "request-promise-native"
      ],
      "range": "*",
      "nodes": [
        "node_modules/request-promise-core"
      ],
      "fixAvailable": true
    },
    "request-promise-native": {
      "name": "request-promise-native",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "request",
        "request-promise-core",
        "tough-cookie"
      ],
      "effects": [],
      "range": ">=1.0.0",
      "nodes": [
        "node_modules/request-promise-native"
      ],
      "fixAvailable": true
    },
    "rimraf": {
      "name": "rimraf",
      "severity": "high",
      "isDirect": false,
      "via": [
        "glob"
      ],
      "effects": [
        "clean-webpack-plugin",
        "flat-cache",
        "istanbul-lib-processinfo",
        "nyc",
        "spawn-wrap"
      ],
      "range": "2.3.0 - 3.0.2 || 4.2.0 - 5.0.10",
      "nodes": [
        "node_modules/flat-cache/node_modules/rimraf",
        "node_modules/istanbul-lib-processinfo/node_modules/rimraf",
        "node_modules/nyc/node_modules/rimraf",
        "node_modules/rimraf",
        "node_modules/spawn-wrap/node_modules/rimraf"
      ],
      "fixAvailable": {
        "name": "nyc",
        "version": "10.1.2",
        "isSemVerMajor": true
      }
    },
    "spawn-wrap": {
      "name": "spawn-wrap",
      "severity": "high",
      "isDirect": false,
      "via": [
        "rimraf"
      ],
      "effects": [
        "nyc"
      ],
      "range": ">=0.0.1",
      "nodes": [
        "node_modules/spawn-wrap"
      ],
      "fixAvailable": {
        "name": "nyc",
        "version": "10.1.2",
        "isSemVerMajor": true
      }
    },
    "stylelint-config-wikimedia": {
      "name": "stylelint-config-wikimedia",
      "severity": "high",
      "isDirect": true,
      "via": [
        "stylelint-no-unsupported-browser-features"
      ],
      "effects": [],
      "range": ">=0.10.2",
      "nodes": [
        "node_modules/stylelint-config-wikimedia"
      ],
      "fixAvailable": {
        "name": "stylelint-config-wikimedia",
        "version": "0.10.1",
        "isSemVerMajor": true
      }
    },
    "stylelint-no-unsupported-browser-features": {
      "name": "stylelint-no-unsupported-browser-features",
      "severity": "high",
      "isDirect": false,
      "via": [
        "doiuse"
      ],
      "effects": [
        "stylelint-config-wikimedia"
      ],
      "range": "*",
      "nodes": [
        "node_modules/stylelint-no-unsupported-browser-features"
      ],
      "fixAvailable": {
        "name": "stylelint-config-wikimedia",
        "version": "0.10.1",
        "isSemVerMajor": true
      }
    },
    "test-exclude": {
      "name": "test-exclude",
      "severity": "high",
      "isDirect": false,
      "via": [
        "glob",
        "minimatch"
      ],
      "effects": [
        "babel-plugin-istanbul",
        "nyc"
      ],
      "range": "4.2.2 || 5.0.0 - 7.0.2",
      "nodes": [
        "node_modules/nyc/node_modules/test-exclude",
        "node_modules/test-exclude"
      ],
      "fixAvailable": {
        "name": "nyc",
        "version": "10.1.2",
        "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": [
        "jsdom",
        "request",
        "request-promise-native"
      ],
      "range": "<4.1.3",
      "nodes": [
        "node_modules/tough-cookie"
      ],
      "fixAvailable": {
        "name": "jsdom",
        "version": "28.1.0",
        "isSemVerMajor": true
      }
    },
    "webpack": {
      "name": "webpack",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        {
          "source": 1099351,
          "name": "webpack",
          "dependency": "webpack",
          "title": "Webpack's AutoPublicPathRuntimeModule has a DOM Clobbering Gadget that leads to XSS",
          "url": "https://github.com/advisories/GHSA-4vvj-4cpr-p986",
          "severity": "moderate",
          "cwe": [
            "CWE-79"
          ],
          "cvss": {
            "score": 6.4,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:H"
          },
          "range": ">=5.0.0-alpha.0 <5.94.0"
        },
        {
          "source": 1113041,
          "name": "webpack",
          "dependency": "webpack",
          "title": "webpack buildHttp: allowedUris allow-list bypass via URL userinfo (@) leading to build-time SSRF behavior",
          "url": "https://github.com/advisories/GHSA-8fgc-7cc6-rx7x",
          "severity": "low",
          "cwe": [
            "CWE-918"
          ],
          "cvss": {
            "score": 3.7,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:U/C:L/I:L/A:N"
          },
          "range": ">=5.49.0 <=5.104.0"
        },
        {
          "source": 1113042,
          "name": "webpack",
          "dependency": "webpack",
          "title": "webpack buildHttp HttpUriPlugin allowedUris bypass via HTTP redirects → SSRF + cache persistence",
          "url": "https://github.com/advisories/GHSA-38r7-794h-5758",
          "severity": "low",
          "cwe": [
            "CWE-918"
          ],
          "cvss": {
            "score": 3.7,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:U/C:L/I:L/A:N"
          },
          "range": ">=5.49.0 <5.104.0"
        }
      ],
      "effects": [],
      "range": "5.0.0-alpha.0 - 5.104.0",
      "nodes": [
        "node_modules/webpack"
      ],
      "fixAvailable": {
        "name": "webpack",
        "version": "5.105.2",
        "isSemVerMajor": false
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 1,
      "moderate": 7,
      "high": 32,
      "critical": 2,
      "total": 42
    },
    "dependencies": {
      "prod": 1,
      "dev": 977,
      "optional": 8,
      "peer": 1,
      "peerOptional": 0,
      "total": 977
    }
  }
}

--- 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: 39 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 dealerdirect/phpcodesniffer-composer-installer (v1.2.0)
  - Locking doctrine/deprecations (1.1.6)
  - Locking felixfbecker/advanced-json-rpc (v3.2.1)
  - Locking mediawiki/mediawiki-codesniffer (v48.0.0)
  - Locking mediawiki/mediawiki-phan-config (0.18.0)
  - Locking mediawiki/minus-x (1.1.3)
  - Locking mediawiki/phan-taint-check-plugin (8.0.0)
  - Locking microsoft/tolerant-php-parser (v0.1.2)
  - Locking netresearch/jsonmapper (v4.5.0)
  - Locking phan/phan (5.5.2)
  - 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.1.1)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (5.6.6)
  - Locking phpdocumentor/type-resolver (1.12.0)
  - Locking phpstan/phpdoc-parser (2.3.2)
  - Locking psr/container (2.0.2)
  - Locking psr/log (3.0.2)
  - Locking sabre/event (5.1.7)
  - Locking squizlabs/php_codesniffer (3.13.2)
  - Locking symfony/console (v7.4.4)
  - 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/polyfill-php80 (v1.33.0)
  - Locking symfony/service-contracts (v3.6.1)
  - Locking symfony/string (v8.0.4)
  - Locking tysonandre/var_representation_polyfill (0.1.3)
  - Locking webmozart/assert (2.1.5)
  - Locking wikimedia/idle-dom (v2.1.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 39 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Installing squizlabs/php_codesniffer (3.13.2): Extracting archive
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.2.0): Extracting archive
  - Installing composer/pcre (3.3.2): Extracting archive
  - Installing phpcsstandards/phpcsutils (1.1.1): 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 (v48.0.0): Extracting archive
  - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive
  - Installing symfony/polyfill-php80 (v1.33.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.4): 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 (v7.4.4): Extracting archive
  - Installing sabre/event (5.1.7): Extracting archive
  - Installing netresearch/jsonmapper (v4.5.0): Extracting archive
  - Installing microsoft/tolerant-php-parser (v0.1.2): Extracting archive
  - Installing webmozart/assert (2.1.5): 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 (1.12.0): Extracting archive
  - Installing phpdocumentor/reflection-docblock (5.6.6): Extracting archive
  - Installing felixfbecker/advanced-json-rpc (v3.2.1): Extracting archive
  - Installing psr/log (3.0.2): Extracting archive
  - Installing composer/xdebug-handler (3.0.5): Extracting archive
  - Installing phan/phan (5.5.2): Extracting archive
  - Installing mediawiki/phan-taint-check-plugin (8.0.0): Extracting archive
  - Installing mediawiki/mediawiki-phan-config (0.18.0): Extracting archive
  - Installing mediawiki/minus-x (1.1.3): 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
  - Installing wikimedia/idle-dom (v2.1.0): Extracting archive
  0/37 [>---------------------------]   0%
 29/37 [=====================>------]  78%
 37/37 [============================] 100%
1 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
17 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 n:jsdoc from 4.0.3 -> 4.0.5
$ /usr/bin/npm install
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: undefined,
npm WARN EBADENGINE   required: { node: '20.19.5' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm ERR! code ENOENT
npm ERR! syscall stat
npm ERR! path /cache/_cacache/content-v2/sha512/6c/db/e868de6955ce5f4958c00431507b701526546a51265c4ec57c8fa08b762fb686fc0cb45c9394eb0290cdf222edec15d221582ee2ebdb57747b34f7f32d7c
npm ERR! errno ENOENT
npm ERR! enoent Invalid response body while trying to fetch https://registry.npmjs.org/async-limiter: ENOENT: no such file or directory, stat '/cache/_cacache/content-v2/sha512/6c/db/e868de6955ce5f4958c00431507b701526546a51265c4ec57c8fa08b762fb686fc0cb45c9394eb0290cdf222edec15d221582ee2ebdb57747b34f7f32d7c'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent 

npm ERR! A complete log of this run can be found in:
npm ERR!     /cache/_logs/2026-02-22T21_00_43_525Z-debug-0.log
--- stdout ---

--- end ---
$ rm -rf package-lock.json node_modules
--- stdout ---

--- end ---
$ /usr/bin/npm install
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: undefined,
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 inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated lodash.get@4.4.2: This package is deprecated. Use the optional chaining (?.) operator instead.
npm WARN deprecated request-promise-native@1.0.9: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142
npm WARN deprecated rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated whatwg-encoding@1.0.5: Use @exodus/bytes instead for a more spec-conformant and faster implementation
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated whatwg-encoding@2.0.0: Use @exodus/bytes instead for a more spec-conformant and faster implementation
npm WARN deprecated acorn-import-assertions@1.9.0: package has been renamed to acorn-import-attributes
npm WARN deprecated domexception@1.0.1: Use your platform's native DOMException instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.0: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
npm WARN deprecated w3c-hr-time@1.0.2: Use your platform's native performance.now() and performance.timeOrigin.
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated sinon@12.0.1: 16.1.1
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 967 packages, and audited 968 packages in 24s

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

40 vulnerabilities (6 moderate, 32 high, 2 critical)

To address issues that do not require attention, run:
  npm audit fix

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

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

--- end ---
$ package-lock-lint /src/repo/package-lock.json
--- stdout ---
Checking /src/repo/package-lock.json

--- end ---
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: undefined,
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 inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated lodash.get@4.4.2: This package is deprecated. Use the optional chaining (?.) operator instead.
npm WARN deprecated rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated request-promise-native@1.0.9: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated whatwg-encoding@1.0.5: Use @exodus/bytes instead for a more spec-conformant and faster implementation
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated whatwg-encoding@2.0.0: Use @exodus/bytes instead for a more spec-conformant and faster implementation
npm WARN deprecated domexception@1.0.1: Use your platform's native DOMException instead
npm WARN deprecated acorn-import-assertions@1.9.0: package has been renamed to acorn-import-attributes
npm WARN deprecated glob@7.2.0: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated w3c-hr-time@1.0.2: Use your platform's native performance.now() and performance.timeOrigin.
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated sinon@12.0.1: 16.1.1
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 967 packages, and audited 968 packages in 23s

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

40 vulnerabilities (6 moderate, 32 high, 2 critical)

To address issues that do not require attention, run:
  npm audit fix

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

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stderr ---
The "se" translation has 4 translations with trailing whitespace:
* mobile-frontend-editor-disabled
* mobile-frontend-editor-error-preview
* mobile-frontend-user-page-describe-yourself
* tag-advanced_mobile_edit
ERROR: Coverage for lines (54.2%) does not meet global threshold (65%)
ERROR: Coverage for functions (50.4%) does not meet global threshold (62%)
ERROR: Coverage for branches (43.53%) does not meet global threshold (51%)
ERROR: Coverage for statements (54.25%) does not meet global threshold (65%)
--- stdout ---

> test
> npm -s run lint && bash ./dev-scripts/svg_check.sh && npm -s run coverage && npm -s run test:bundle && npm -s run jsdoc

Checked 1 message directory.

/src/repo/src/mobile.editor.overlay/EditorOverlayBase.js
  293:1  warning  This line has a length of 103. Maximum allowed is 100  max-len

/src/repo/src/mobile.editor.overlay/parseBlockInfo.js
  58:1  warning  This line has a length of 120. Maximum allowed is 100  max-len

/src/repo/src/mobile.languages.structured/LanguageSearcher.js
  8:1  warning  This line has a length of 106. Maximum allowed is 100  max-len

/src/repo/src/mobile.mediaViewer/ImageCarousel.js
  42:1  warning  This line has a length of 104. Maximum allowed is 100  max-len

/src/repo/src/mobile.startup/CtaDrawer.js
  34:1  warning  This line has a length of 118. Maximum allowed is 100  max-len

/src/repo/src/mobile.startup/OverlayManager.js
  363:1  warning  This line has a length of 102. Maximum allowed is 100  max-len
  364:1  warning  This line has a length of 102. Maximum allowed is 100  max-len
  365:1  warning  This line has a length of 101. Maximum allowed is 100  max-len

/src/repo/tests/node-qunit/importable.test.js
  69:4  warning  Found non-literal argument in require  security/detect-non-literal-require

/src/repo/tests/node-qunit/mobile.startup/CtaDrawer.test.js
   87:12  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  108:12  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp

/src/repo/tests/node-qunit/mobile.startup/PageHTMLParser.test.js
  207:1  warning  This line has a length of 111. Maximum allowed is 100  max-len
  214:1  warning  This line has a length of 108. Maximum allowed is 100  max-len

✖ 13 problems (0 errors, 13 warnings)

TAP version 13
not ok 1 MobileFrontend imports > All our code is importable in headless Node.js
  ---
  message: |+
    There were no errors when importing any of the modules:
    
    src/mobile.editor.overlay/BlockMessageDetails.js
    src/mobile.editor.overlay/blockMessageDrawer.js
    src/mobile.editor.overlay/EditorOverlayBase.js
    src/mobile.editor.overlay/SourceEditorOverlay.js
    src/mobile.editor.overlay/VisualEditorOverlay.js
  severity: failed
  actual  : 5
  expected: 0
  ...
not ok 2 MobileFrontend mobile.editor.overlay/BlockMessageDetails > renders block reason
  ---
  message: "beforeEach failed on renders block reason: Cannot read properties of undefined (reading 'Button')"
  severity: failed
  stack: |
    TypeError: Cannot read properties of undefined (reading 'Button')
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/BlockMessageDetails.js:3:29)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.beforeEach (/src/repo/tests/node-qunit/mobile.editor.overlay/BlockMessageDetails.test.js:12:30)
  ...
  ---
  message: |+
    Died on test #2: this.BlockMessageDetails is not a constructor
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: this.BlockMessageDetails is not a constructor
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/BlockMessageDetails.test.js:23:20)
  ...
not ok 3 MobileFrontend mobile.editor.overlay/BlockMessageDetails > does not render block reason if it is empty
  ---
  message: "beforeEach failed on does not render block reason if it is empty: Cannot read properties of undefined (reading 'Button')"
  severity: failed
  stack: |
    TypeError: Cannot read properties of undefined (reading 'Button')
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/BlockMessageDetails.js:3:29)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.beforeEach (/src/repo/tests/node-qunit/mobile.editor.overlay/BlockMessageDetails.test.js:12:30)
  ...
  ---
  message: |+
    Died on test #2: this.BlockMessageDetails is not a constructor
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: this.BlockMessageDetails is not a constructor
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/BlockMessageDetails.test.js:44:20)
  ...
not ok 4 MobileFrontend mobile.editor.overlay/EditorGateway > #getContent (no section)
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:227:17)
  ...
not ok 5 MobileFrontend mobile.editor.overlay/EditorGateway > #getContent
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:243:17)
  ...
not ok 6 MobileFrontend mobile.editor.overlay/EditorGateway > #getContent, missing section
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:259:26)
  ...
ok 7 MobileFrontend mobile.editor.overlay/EditorGateway > #getBlockInfo
not ok 8 MobileFrontend mobile.editor.overlay/EditorGateway > #save, success
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:296:17)
  ...
not ok 9 MobileFrontend mobile.editor.overlay/EditorGateway > #save, new page
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:319:17)
  ...
not ok 10 MobileFrontend mobile.editor.overlay/EditorGateway > #save, submit CAPTCHA
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:345:17)
  ...
not ok 11 MobileFrontend mobile.editor.overlay/EditorGateway > #save, request failure
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:371:17)
  ...
not ok 12 MobileFrontend mobile.editor.overlay/EditorGateway > #save, API failure
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:388:17)
  ...
not ok 13 MobileFrontend mobile.editor.overlay/EditorGateway > #save, CAPTCHA response with image URL
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:407:17)
  ...
not ok 14 MobileFrontend mobile.editor.overlay/EditorGateway > #save, AbuseFilter warning
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:434:17)
  ...
not ok 15 MobileFrontend mobile.editor.overlay/EditorGateway > #save, AbuseFilter disallow
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:459:17)
  ...
not ok 16 MobileFrontend mobile.editor.overlay/EditorGateway > #save, AbuseFilter other
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:484:17)
  ...
not ok 17 MobileFrontend mobile.editor.overlay/EditorGateway > #save, extension errors
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:509:17)
  ...
not ok 18 MobileFrontend mobile.editor.overlay/EditorGateway > #save, read-only error
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:541:10)
  ...
not ok 19 MobileFrontend mobile.editor.overlay/EditorGateway > #save, unknown errors
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:559:17)
  ...
not ok 20 MobileFrontend mobile.editor.overlay/EditorGateway > #save, without changes
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:577:17)
  ...
not ok 21 MobileFrontend mobile.editor.overlay/EditorGateway > #EditorGateway
  ---
  message: |+
    Died on test #1: Cannot read properties of undefined (reading 'extend')
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: Cannot read properties of undefined (reading 'extend')
        at EditorGateway.getPreview (/src/repo/src/mobile.editor.overlay/EditorGateway.js:244:8)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:600:17)
  ...
not ok 22 MobileFrontend mobile.editor.overlay/EditorGateway > #EditorGateway, check without sectionLine
  ---
  message: |+
    Died on test #1: Cannot read properties of undefined (reading 'extend')
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: Cannot read properties of undefined (reading 'extend')
        at EditorGateway.getPreview (/src/repo/src/mobile.editor.overlay/EditorGateway.js:244:8)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:622:17)
  ...
not ok 23 MobileFrontend mobile.editor.overlay/EditorGateway > #EditorGateway, check with sectionLine
  ---
  message: |+
    Died on test #1: Cannot read properties of undefined (reading 'extend')
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: Cannot read properties of undefined (reading 'extend')
        at EditorGateway.getPreview (/src/repo/src/mobile.editor.overlay/EditorGateway.js:244:8)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:636:17)
  ...
not ok 24 MobileFrontend mobile.editor.overlay/EditorGateway > #save, when token has expired
  ---
  message: |+
    Died on test #1: actionParams is not a function
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: actionParams is not a function
        at EditorGateway.getContent (/src/repo/src/mobile.editor.overlay/EditorGateway.js:82:14)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/EditorGateway.test.js:650:17)
  ...
not ok 25 MobileFrontend mobile.editor.overlay/SourceEditorOverlay > #initialize, blocked user
  ---
  message: "beforeEach failed on #initialize, blocked user: Cannot read properties of undefined (reading 'Overlay')"
  severity: failed
  stack: |
    TypeError: Cannot read properties of undefined (reading 'Overlay')
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/EditorOverlayBase.js:7:25)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/SourceEditorOverlay.js:2:22)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.beforeEach (/src/repo/tests/node-qunit/mobile.editor.overlay/SourceEditorOverlay.test.js:30:25)
  ...
  ---
  message: |+
    Died on test #2: SourceEditorOverlay is not a constructor
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: SourceEditorOverlay is not a constructor
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/SourceEditorOverlay.test.js:107:2)
  ...
not ok 26 MobileFrontend mobile.editor.overlay/SourceEditorOverlay > #initialize, with given page and section
  ---
  message: "beforeEach failed on #initialize, with given page and section: Cannot read properties of undefined (reading 'Overlay')"
  severity: failed
  stack: |
    TypeError: Cannot read properties of undefined (reading 'Overlay')
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/EditorOverlayBase.js:7:25)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/SourceEditorOverlay.js:2:22)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.beforeEach (/src/repo/tests/node-qunit/mobile.editor.overlay/SourceEditorOverlay.test.js:30:25)
  ...
  ---
  message: |+
    Died on test #2: SourceEditorOverlay is not a constructor
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: SourceEditorOverlay is not a constructor
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/SourceEditorOverlay.test.js:127:24)
  ...
not ok 27 MobileFrontend mobile.editor.overlay/SourceEditorOverlay > #initialize, without a section
  ---
  message: "beforeEach failed on #initialize, without a section: Cannot read properties of undefined (reading 'Overlay')"
  severity: failed
  stack: |
    TypeError: Cannot read properties of undefined (reading 'Overlay')
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/EditorOverlayBase.js:7:25)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/SourceEditorOverlay.js:2:22)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.beforeEach (/src/repo/tests/node-qunit/mobile.editor.overlay/SourceEditorOverlay.test.js:30:25)
  ...
  ---
  message: |+
    Died on test #2: SourceEditorOverlay is not a constructor
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: SourceEditorOverlay is not a constructor
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/SourceEditorOverlay.test.js:144:24)
  ...
not ok 28 MobileFrontend mobile.editor.overlay/SourceEditorOverlay > #preview
  ---
  message: "beforeEach failed on #preview: Cannot read properties of undefined (reading 'Overlay')"
  severity: failed
  stack: |
    TypeError: Cannot read properties of undefined (reading 'Overlay')
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/EditorOverlayBase.js:7:25)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/SourceEditorOverlay.js:2:22)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.beforeEach (/src/repo/tests/node-qunit/mobile.editor.overlay/SourceEditorOverlay.test.js:30:25)
  ...
  ---
  message: |+
    Died on test #2: SourceEditorOverlay is not a constructor
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: SourceEditorOverlay is not a constructor
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/SourceEditorOverlay.test.js:156:24)
  ...
not ok 29 MobileFrontend mobile.editor.overlay/SourceEditorOverlay > #initialize, as anonymous
  ---
  message: "beforeEach failed on #initialize, as anonymous: Cannot read properties of undefined (reading 'Overlay')"
  severity: failed
  stack: |
    TypeError: Cannot read properties of undefined (reading 'Overlay')
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/EditorOverlayBase.js:7:25)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/SourceEditorOverlay.js:2:22)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.beforeEach (/src/repo/tests/node-qunit/mobile.editor.overlay/SourceEditorOverlay.test.js:30:25)
  ...
  ---
  message: |+
    Died on test #2: SourceEditorOverlay is not a constructor
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: SourceEditorOverlay is not a constructor
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/SourceEditorOverlay.test.js:169:24)
  ...
not ok 30 MobileFrontend mobile.editor.overlay/SourceEditorOverlay > #initialize, as anonymous Growth experiment treatment group
  ---
  message: "beforeEach failed on #initialize, as anonymous Growth experiment treatment group: Cannot read properties of undefined (reading 'Overlay')"
  severity: failed
  stack: |
    TypeError: Cannot read properties of undefined (reading 'Overlay')
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/EditorOverlayBase.js:7:25)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/SourceEditorOverlay.js:2:22)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.beforeEach (/src/repo/tests/node-qunit/mobile.editor.overlay/SourceEditorOverlay.test.js:30:25)
  ...
  ---
  message: |+
    Died on test #2: SourceEditorOverlay is not a constructor
        at Object.test (/src/repo/node_modules/qunit/qunit/qunit.js:3345:5)
  severity: failed
  stack: |
    TypeError: SourceEditorOverlay is not a constructor
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/SourceEditorOverlay.test.js:189:24)
  ...
not ok 31 MobileFrontend mobile.editor.overlay/blockMessageDrawer > blockMessageDrawer
  ---
  message: "beforeEach failed on blockMessageDrawer: Cannot read properties of undefined (reading 'Overlay')"
  severity: failed
  stack: |
    TypeError: Cannot read properties of undefined (reading 'Overlay')
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/EditorOverlayBase.js:7:25)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.<anonymous> (/src/repo/src/mobile.editor.overlay/SourceEditorOverlay.js:2:22)
        at Module._compile (node:internal/modules/cjs/loader:1529:14)
        at Module.replacementCompile (/src/repo/node_modules/append-transform/index.js:60:13)
        at Module._compile (/src/repo/node_modules/pirates/lib/index.js:129:24)
        at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
        at newLoader (/src/repo/node_modules/pirates/lib/index.js:134:7)
        at Object.<anonymous> (/src/repo/node_modules/append-transform/index.js:64:4)
        at Module.load (node:internal/modules/cjs/loader:1275:32)
        at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
        at Module.require (node:internal/modules/cjs/loader:1298:19)
        at require (node:internal/modules/helpers:182:18)
        at Object.beforeEach (/src/repo/tests/node-qunit/mobile.editor.overlay/blockMessageDrawer.test.js:35:25)
  ...
  ---
  message: "Promise rejected during \"blockMessageDrawer\": blockMessageDrawer is not a function"
  severity: failed
  stack: |
    TypeError: blockMessageDrawer is not a function
        at call (/src/repo/tests/node-qunit/mobile.editor.overlay/blockMessageDrawer.test.js:93:17)
        at Generator._invoke (/src/repo/tests/node-qunit/mobile.editor.overlay/blockMessageDrawer.test.js:2:1)
        at Generator.next (/src/repo/tests/node-qunit/mobile.editor.overlay/blockMessageDrawer.test.js:2:1)
        at asyncGeneratorStep (/src/repo/tests/node-qunit/mobile.editor.overlay/blockMessageDrawer.test.js:2:1)
        at _next (/src/repo/tests/node-qunit/mobile.editor.overlay/blockMessageDrawer.test.js:2:1)
        at /src/repo/tests/node-qunit/mobile.editor.overlay/blockMessageDrawer.test.js:2:1
        at new Promise (<anonymous>)
        at Object.apply (/src/repo/tests/node-qunit/mobile.editor.overlay/blockMessageDrawer.test.js:2:1)
        at Object.<anonymous> (/src/repo/tests/node-qunit/mobile.editor.overlay/blockMessageDrawer.test.js:109:2)
  ...
ok 32 MobileFrontend mobile.editor.overlay/identifyLeadParagraph > identifyLeadParagraph
ok 33 MobileFrontend Toggler.js > Mobile mode - Toggle section
ok 34 MobileFrontend Toggler.js > Mobile mode - Clicking a hash link to reveal an already open section
ok 35 MobileFrontend Toggler.js > Mobile mode - Reveal element
ok 36 MobileFrontend Toggler.js > Mobile mode - Clicking hash links
ok 37 MobileFrontend Toggler.js > Mobile mode - Tap event toggles section
ok 38 MobileFrontend Toggler.js > Accessibility - Verify ARIA attributes
ok 39 MobileFrontend Toggler.js > Tablet mode - Open by default
ok 40 MobileFrontend Toggler.js > Tablet mode - Open by default 2
ok 41 MobileFrontend Toggler.js > Accessibility - Pressing space/ enter toggles a heading
ok 42 MobileFrontend Toggler.js > Clicking a link within a heading isn't triggering a toggle
ok 43 MobileFrontend Toggler.js > MobileFrontend toggle.js - T320753: Presence of class disables toggling.
ok 44 MobileFrontend editorLoadingOverlay.js > editorLoadingOverlay calls the callbacks
ok 45 MobileFrontend lazyLoadedImages > initNative
ok 46 MobileFrontend sectionCollapsing.js > init() - article pages
ok 47 MobileFrontend sectionCollapsing.js > init() - article pages on tablet page
ok 48 MobileFrontend sectionCollapsing.js > init() - talk pages
ok 49 MobileFrontend sectionCollapsing.js > init() - expands section when hash fragment targets element inside
ok 50 MobileFrontend sectionCollapsing.js > init() - expands section when hash fragment targets heading
ok 51 MobileFrontend sectionCollapsing.js > init() - responds to hashchange events
ok 52 MobileFrontend sectionCollapsing.js > init() - no errors when hash targets non-existent element
ok 53 MobileFrontend LanguageSearcher.js > renders output
ok 54 MobileFrontend LanguageSearcher.js > saves the language count when link is clicked
ok 55 MobileFrontend LanguageSearcher.js > without variants, input event filters languages
ok 56 MobileFrontend LanguageSearcher.js > with variants, input event filters languages
ok 57 MobileFrontend mobile.languages.structured/util.test.js > #getFrequentlyUsedLanguages
ok 58 MobileFrontend mobile.languages.structured/util.test.js > #saveLanguageUsageCount
ok 59 MobileFrontend mobile.languages.structured/util.test.js > #getStructuredLanguages
ok 60 MobileFrontend mobile.languages.structured/util.test.js > #getStructuredLanguages device language
ok 61 MobileFrontend mobile.languages.structured/util.test.js > #getStructuredLanguages variants
ok 62 MobileFrontend mobile.mediaViewer/ImageCarousel.js > Shows details bar and image with successful api response
ok 63 MobileFrontend mobile.mediaViewer/ImageCarousel.js > Shows error message with failed api response
ok 64 MobileFrontend mobile.mediaViewer/ImageCarousel.js > Toggling of details is disabled when overlay has load failure
ok 65 MobileFrontend mobile.mediaViewer/ImageCarousel.js > Toggling of details is enabled when overlay loads successfully
ok 66 MobileFrontend mobile.mediaViewer/ImageGateway > #findSizeBucket
ok 67 MobileFrontend mobile.mediaViewer/ImageGateway > ImageGateway#getThumb (missing page)
ok 68 mobile.special.mobileoptions.scripts > addClientPreferencesToForm (named user)
ok 69 MobileFrontend ScrollEndEventEmitter.js > initializes properly
ok 70 MobileFrontend ScrollEndEventEmitter.js > emits scroll end event
ok 71 MobileFrontend ScrollEndEventEmitter.js > doesn't emit when disabled
ok 72 MobileFrontend WatchList.js > In watched mode
ok 73 MobileFrontend WatchListGateway.js > loadWatchlist() loads results from the first page
ok 74 MobileFrontend WatchListGateway.js > loadWatchlist() loads results from the second page from last item of first
ok 75 MobileFrontend WatchListGateway.js > loadWatchlist() doesn't throw an error when no pages are returned
ok 76 MobileFrontend WatchListGateway.js > loadWatchlist() marks pages as new if necessary
ok 77 MobileFrontend Watchstar.js > Render a watchstar
ok 78 MobileFrontend: WatchstarGateway.js > getStatuses(nonempty)
ok 79 MobileFrontend: WatchstarGateway.js > getStatuses(empty)
ok 80 MobileFrontend: WatchstarGateway.js > getStatusesByID(nonempty)
ok 81 MobileFrontend: WatchstarGateway.js > getStatusesByID(empty)
ok 82 MobileFrontend: WatchstarGateway.js > getStatusesByTitle(nonempty)
ok 83 MobileFrontend: WatchstarGateway.js > getStatusesByTitle(empty)
ok 84 MobileFrontend: WatchstarGateway.js > _unmarshalGetResponse(nonempty)
ok 85 MobileFrontend: WatchstarGateway.js > _unmarshalGetResponse(empty)
ok 86 MobileFrontend mobile.special.watchlist.scripts/WatchstarPageList > Watchlist status check if no ids
ok 87 MobileFrontend mobile.special.watchlist.scripts/WatchstarPageList > Checks watchlist status once
ok 88 MobileFrontend extendSearchParams.js > it throws if the feature is invalid
ok 89 MobileFrontend extendSearchParams.js > it extends the parameters
ok 90 MobileFrontend extendSearchParams.js > it doesn't include Wikibase-specific parameters if the feature is disabled
ok 91 MobileFrontend extendSearchParams.js > it adds the MobileFrontend configuration to given terms types
ok 92 MobileFrontend extendSearchParams.js > it prioritizes MobileFrontend configuration
ok 93 MobileFrontend extendSearchParams.js > it is variadic
ok 94 MobileFrontend pageJSONParser > .parse()
ok 95 MobileFrontend Browser.js > isIos()
ok 96 MobileFrontend Browser.js > Methods are cached
ok 97 MobileFrontend Browser.js > isWideScreen()
ok 98 MobileFrontend Browser.js > supportsTouchEvents()
ok 99 MobileFrontend Button.js > creates a link if passed href option
ok 100 MobileFrontend Button.js > does not add href attribute when not a link
ok 101 MobileFrontend CtaDrawer.js > redirectParams() > empty props, default URL
ok 102 MobileFrontend CtaDrawer.js > redirectParams() > empty props, nondefault URL
ok 103 MobileFrontend CtaDrawer.js > redirectParams() > nonempty props
ok 104 MobileFrontend CtaDrawer.js > signUpParams() > empty props
ok 105 MobileFrontend CtaDrawer.js > signUpParams() > nonempty props
ok 106 MobileFrontend CtaDrawer.js > HTML > defaults
ok 107 MobileFrontend CtaDrawer.js > HTML > overrides
ok 108 MobileFrontend Drawer.js > visible on show()
ok 109 MobileFrontend Drawer.js > accepts onShow and events
ok 110 MobileFrontend Drawer.js > hidden on hide()
ok 111 MobileFrontend Drawer.js > hidden on mask click
ok 112 MobileFrontend Drawer.js > HTML is valid
ok 113 MobileFrontend Icon.js > getIconClasses generates icon classes using icon
ok 114 MobileFrontend Icon.js > getIconClasses generates icon classes using custom icon prefix
ok 115 MobileFrontend Icon.js > getRotationClasses returns rotation classes
ok 116 MobileFrontend Icon.js > getGlyphClassName uses icon prefix
ok 117 MobileFrontend Icon.js > getGlyphClassName does not use icon prefix if not provided
ok 118 MobileFrontend Icon.js > adds small classes
ok 119 MobileFrontend IconButton.js > creates a link if passed href option
ok 120 MobileFrontend IconButton.js > does not add href attribute when not a link
ok 121 MobileFrontend IconButton.js > adds disabled attribute when a button
ok 122 MobileFrontend IconButton.js > does not add disabled attribute when not a button
ok 123 MobileFrontend IconButton.js > adds additional classes
ok 124 MobileFrontend: Overlay.js > Simple overlay
ok 125 MobileFrontend: Overlay.js > #make
ok 126 MobileFrontend: Overlay.js > HTML overlay
ok 127 MobileFrontend: Overlay.js > headerActions property
ok 128 MobileFrontend: Overlay.js > onBeforeExit
ok 129 MobileFrontend: Overlay.js > Close overlay
ok 130 MobileFrontend mobile.startup/OverlayManager > #getSingleton (hash present and overlay not managed)
ok 131 MobileFrontend mobile.startup/OverlayManager > #getSingleton (hash present and overlay managed)
ok 132 MobileFrontend mobile.startup/OverlayManager > #getSingleton
ok 133 MobileFrontend mobile.startup/OverlayManager > #add
ok 134 MobileFrontend mobile.startup/OverlayManager > #show
ok 135 MobileFrontend mobile.startup/OverlayManager > #add, with current path
ok 136 MobileFrontend mobile.startup/OverlayManager > #add, with string literal (matching)
ok 137 MobileFrontend mobile.startup/OverlayManager > #add, with string literal (not matching)
ok 138 MobileFrontend mobile.startup/OverlayManager > #replaceCurrent
ok 139 MobileFrontend mobile.startup/OverlayManager > route with params
ok 140 MobileFrontend mobile.startup/OverlayManager > hide when route changes
ok 141 MobileFrontend mobile.startup/OverlayManager > go back (change route) if overlay hidden but not by route change
ok 142 MobileFrontend mobile.startup/OverlayManager > go back if overlayManager still matches
ok 143 MobileFrontend mobile.startup/OverlayManager > go back if overlayManager still matches (non-regex)
ok 144 MobileFrontend mobile.startup/OverlayManager > do not go back (change route) if overlay hidden by change in route
ok 145 MobileFrontend mobile.startup/OverlayManager > preventDefault called when you cancel an exit request
ok 146 MobileFrontend mobile.startup/OverlayManager > Browser back can be overidden
ok 147 MobileFrontend mobile.startup/OverlayManager > stacked overlays
ok 148 MobileFrontend mobile.startup/OverlayManager > prevent route change
ok 149 MobileFrontend mobile.startup/OverlayManager > stack increases and decreases at right times
ok 150 MobileFrontend mobile.startup/OverlayManager > replace overlay when route event path is equal to current path
ok 151 MobileFrontend Page.js > #isMainPage
ok 152 MobileFrontend PageHTMLParser.js > #findInSectionLead
ok 153 MobileFrontend PageHTMLParser.js > #getThumbnail
ok 154 MobileFrontend PageHTMLParser.js > #getThumbnails
ok 155 MobileFrontend PageHTMLParser.js > #getLanguages
ok 156 MobileFrontend PageHTMLParser.js > #getLanguages (no hyphen)
ok 157 MobileFrontend PageHTMLParser.js > #getLanguages (T349000)
ok 158 MobileFrontend Section.js > initialize with options
ok 159 MobileFrontend Section.js > initialize with subsections
ok 160 MobileFrontend mobile.startup/View > View
ok 161 MobileFrontend mobile.startup/View > View, jQuery proxy functions
ok 162 MobileFrontend mobile.startup/View > View#preRender
ok 163 MobileFrontend mobile.startup/View > View#postRender
ok 164 MobileFrontend mobile.startup/View > View#delegateEvents
ok 165 MobileFrontend mobile.startup/View > View#render (with isTemplateMode)
ok 166 MobileFrontend mobile.startup/View > View#render events (with isTemplateMode)
ok 167 MobileFrontend mobile.startup/View > View with className option
ok 168 MobileFrontend mobile.startup/View > View.make()
ok 169 MobileFrontend icons.js > #cancel()
ok 170 MobileFrontend icons.js > #cancel(variant)
ok 171 MobileFrontend icons.js > #cancel(, props)
ok 172 MobileFrontend icons.js > #spinner(props)
ok 173 MobileFrontend icons.js > #spinner()
ok 174 MobileFrontend getDeviceLanguage > returns language code of device in lowercase
ok 175 MobileFrontend languageOverlay.js > #constructor
ok 176 MobileFrontend lazyImageLoader.js > #queryPlaceholders() empty
ok 177 MobileFrontend lazyImageLoader.js > #queryPlaceholders() nonempty
ok 178 MobileFrontend lazyImageLoader.js > #loadImage() copy attributes
ok 179 MobileFrontend lazyImageLoader.js > #loadImage() loaded
ok 180 MobileFrontend lazyImageLoader.js > #loadImage() load error
ok 181 MobileFrontend lazyImageLoader.js > #loadImages() empty
ok 182 MobileFrontend lazyImageLoader.js > #loadImages() nonempty
ok 183 MobileFrontend lazyImageLoader.js > #loadImages() plural
ok 184 MobileFrontend lazyImageLoader.js > #loadImages() one fails to load, one succeeds
ok 185 MobileFrontend ModuleLoader > #require
ok 186 MobileFrontend ModuleLoader > #define
ok 187 MobileFrontend promisedView.js > #constructor happyView
ok 188 MobileFrontend promisedView.js > #constructor when promise rejects but not to a sadView
ok 189 MobileFrontend promisedView.js > #constructor when promise rejects to a sadView
ok 190 MobileFrontend ReferencesHtmlScraperGateway.test.js > getReference() checking good reference
ok 191 MobileFrontend ReferencesHtmlScraperGateway.test.js > getReference() checking bad reference
ok 192 MobileFrontend ReferencesHtmlScraperGateway.test.js > getReference() adds an extra class for external links
ok 193 MobileFrontend: references > Bad reference not shown
ok 194 MobileFrontend: references > Good reference causes render
ok 195 MobileFrontend: references > Reference failure renders error in drawer
ok 196 MobileFrontend: references > makeOnNestedReferenceClickHandler runs when associated with link
ok 197 MobileFrontend time.js > timeAgo()
ok 198 MobileFrontend util.js > Promise.all() success
ok 199 MobileFrontend util.js > Promise.all() reject
ok 200 MobileFrontend util.js > escapeSelector()
ok 201 MobileFrontend util.js > docReady()
ok 202 MobileFrontend util.js > Deferred() - resolve
ok 203 MobileFrontend util.js > Deferred() - reject
ok 204 MobileFrontend util.js > getDocument()
ok 205 MobileFrontend util.js > getWindow()
ok 206 MobileFrontend util.js > parseHTML()
ok 207 MobileFrontend util.js > extend()
1..207
# pass 177
# skip 0
# todo 0
# fail 30
----------------------------------|---------|----------|---------|---------|------------------------
File                              | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s      
----------------------------------|---------|----------|---------|---------|------------------------
All files                         |   54.25 |    43.53 |    50.4 |    54.2 |                        
 mobile.editor.overlay            |    7.52 |     4.21 |    4.87 |    7.46 |                        
  BlockMessageDetails.js          |    3.63 |        0 |       0 |     3.7 | 4-210                  
  EditorGateway.js                |   30.68 |    16.66 |   31.25 |   31.03 | ...1,80,97-228,260-293 
  EditorOverlayBase.js            |    1.09 |        0 |       0 |    1.09 | 10-886                 
  SourceEditorOverlay.js          |    0.94 |        0 |       0 |    0.95 | 3-611                  
  VisualEditorOverlay.js          |    1.66 |        0 |       0 |    1.66 | 4-346                  
  blockMessageDrawer.js           |    2.94 |        0 |       0 |    3.12 | 2-93                   
  identifyLeadParagraph.js        |   94.11 |    83.33 |     100 |   93.75 | 23                     
  parseBlockInfo.js               |    8.69 |        0 |       0 |    9.09 | 8-64                   
  saveFailureMessage.js           |   11.11 |        0 |       0 |   11.11 | 12-28                  
  setPreferredEditor.js           |      20 |        0 |       0 |      20 | 7-12                   
 mobile.init                      |   44.94 |    29.06 |   36.45 |   44.92 |                        
  Toggler.js                      |   85.26 |    67.85 |      80 |   86.17 | ...217,244-250,268,292 
  editor.js                       |    6.63 |        0 |       0 |    6.63 | 33-576,581-591         
  editorLoadingOverlay.js         |   69.69 |       50 |    62.5 |   69.69 | 38,43,59-74            
  fakeToolbar.js                  |     100 |      100 |     100 |     100 |                        
  isCollapsedByDefault.js         |     100 |      100 |     100 |     100 |                        
  lazyLoadedImages.js             |   21.42 |        0 |      10 |   21.42 | 18-87,99-100,104       
  sectionCollapsing.js            |   88.37 |    68.75 |   88.23 |   88.23 | ...175,196,243,261,281 
  toggling.js                     |    5.55 |        0 |       0 |    5.55 | 3-54                   
 mobile.languages.structured      |   89.38 |    81.66 |    87.5 |   89.28 |                        
  LanguageSearcher.js             |   89.79 |       95 |   81.81 |   89.79 | 149-156                
  mobile.languages.structured.js  |     100 |      100 |     100 |     100 |                        
  rtlLanguages.js                 |     100 |      100 |     100 |     100 |                        
  util.js                         |   88.33 |       75 |    92.3 |   88.13 | 48,65,137-139,170,180  
 mobile.mediaViewer               |   80.29 |       52 |      80 |   80.88 |                        
  ImageCarousel.js                |   77.35 |    41.66 |      75 |   78.09 | ...278,324-325,332,351 
  ImageGateway.js                 |   94.73 |    78.57 |     100 |   94.73 | 44                     
  LoadErrorMessage.js             |   83.33 |      100 |   83.33 |   83.33 | 73-75                  
 mobile.special.watchlist.scripts |   87.55 |    72.94 |   84.74 |   87.43 |                        
  PageList.js                     |     100 |       50 |     100 |     100 | 52                     
  ScrollEndEventEmitter.js        |   79.31 |       60 |   88.88 |   78.57 | 116-122                
  WatchList.js                    |      70 |       50 |   45.45 |      70 | 37,41,85-114           
  WatchListGateway.js             |   96.55 |     87.5 |     100 |   96.42 | 51                     
  WatchstarGateway.js             |   81.81 |       80 |      90 |   81.81 | 105-112                
  WatchstarPageList.js            |      95 |       75 |     100 |      95 | 93,122                 
  extendSearchParams.js           |     100 |       75 |     100 |     100 | 30,57                  
  pageJSONParser.js               |   91.66 |    81.25 |     100 |   91.66 | 32                     
  watchstar.js                    |   84.21 |       50 |      50 |   84.21 | 27-30                  
 mobile.startup                   |   80.42 |    73.16 |   71.02 |   80.38 |                        
  Anchor.js                       |     100 |      100 |     100 |     100 |                        
  Browser.js                      |   96.77 |    93.75 |     100 |   96.66 | 70                     
  Button.js                       |   94.73 |       80 |     100 |   94.73 | 67                     
  CtaDrawer.js                    |     100 |      100 |     100 |     100 |                        
  Drawer.js                       |   95.34 |      100 |   83.33 |   95.23 | 34-35                  
  Icon.js                         |   94.59 |     87.5 |     100 |   94.59 | 44-46                  
  IconButton.js                   |     100 |     87.5 |     100 |     100 | 52-55                  
  LanguageInfo.js                 |   15.78 |        0 |       0 |   16.66 | 14-61                  
  MessageBox.js                   |   42.85 |      100 |       0 |   42.85 | 13-36                  
  Overlay.js                      |   82.14 |       70 |   63.15 |   82.14 | ...119,221-222,250-263 
  OverlayManager.js               |   98.07 |    94.73 |   95.23 |   98.97 | 46                     
  Page.js                         |   34.61 |    57.14 |   33.33 |   34.61 | ...127,146-155,174-181 
  PageHTMLParser.js               |   95.38 |    93.33 |    92.3 |   95.31 | 43,88,231              
  Section.js                      |     100 |      100 |     100 |     100 |                        
  Skin.js                         |      20 |        0 |       0 |      20 | 24-116,126-133         
  Thumbnail.js                    |    87.5 |      100 |      80 |    87.5 | 44                     
  View.js                         |   91.42 |    78.57 |   86.95 |    91.3 | 196-199,338,515-516    
  actionParams.js                 |     100 |       50 |     100 |     100 | 17                     
  currentPage.js                  |   18.18 |        0 |       0 |   18.18 | 17-44                  
  currentPageHTMLParser.js        |   83.33 |       50 |     100 |   83.33 | 19                     
  eventBusSingleton.js            |     100 |      100 |     100 |     100 |                        
  headers.js                      |   81.81 |    85.71 |      50 |   81.81 | 41,78-114              
  icons.js                        |   96.15 |    81.25 |   83.33 |   96.15 | 31                     
  loadingOverlay.js               |      50 |      100 |       0 |      50 | 13-18                  
  mobile.startup.js               |   82.35 |      100 |       0 |   82.35 | 110-210                
  moduleLoader.js                 |   71.42 |       50 |   66.66 |   71.42 | 41-43,70-90            
  moduleLoaderSingleton.js        |     100 |      100 |     100 |     100 |                        
  promisedView.js                 |     100 |      100 |     100 |     100 |                        
  showOnPageReload.js             |   41.66 |       25 |      50 |   41.66 | 14-16,39-46            
  time.js                         |   24.24 |     9.09 |   16.66 |   24.24 | 32-144                 
  util.js                         |   94.11 |    66.66 |    92.3 |   94.11 | 17                     
 mobile.startup/languageOverlay   |   79.31 |      100 |   54.54 |   81.48 |                        
  getDeviceLanguage.js            |     100 |      100 |     100 |     100 |                        
  languageInfoOverlay.js          |   54.54 |      100 |       0 |      60 | 15-39                  
  languageOverlay.js              |   93.33 |      100 |   83.33 |   92.85 | 33                     
 mobile.startup/lazyImages        |   93.75 |       85 |     100 |   93.75 |                        
  lazyImageLoader.js              |   93.75 |       85 |     100 |   93.75 | 63,70                  
 mobile.startup/mediaViewer       |   63.63 |      100 |       0 |   63.63 |                        
  overlay.js                      |   63.63 |      100 |       0 |   63.63 | 22-39                  
 mobile.startup/references        |   82.75 |       75 |   73.33 |   82.75 |                        
  ReferencesGateway.js            |     100 |      100 |      50 |     100 |                        
  ReferencesHtmlScraperGateway.js |   94.73 |     87.5 |     100 |   94.73 | 38                     
  references.js                   |   74.28 |    68.75 |   66.66 |   74.28 | 56,69,135-148          
----------------------------------|---------|----------|---------|---------|------------------------

--- end ---
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 1202, in run
    self.npm_upgrade(plan)
    ~~~~~~~~~~~~~~~~^^^^^^
  File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 1064, in npm_upgrade
    self.npm_test()
    ~~~~~~~~~~~~~^^
  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.
Source code is licensed under the AGPL.