performance/fresnel: main (log #1582358)

sourcepatches

This run took 67 seconds.

$ date
--- stdout ---
Sat Nov  2 06:18:54 UTC 2024

--- end ---
$ git clone file:///srv/git/performance-fresnel.git repo --depth=1 -b master
--- stderr ---
Cloning into '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 ---
c9d828bceb065d3f60d4616f420689dceb53b357 refs/heads/master

--- end ---
$ /usr/bin/npm i --package-lock-only
--- stdout ---

up to date, audited 406 packages in 2s

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

14 vulnerabilities (3 moderate, 9 high, 2 critical)

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

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

Run `npm audit` for details.

--- end ---
Editing .gitignore to remove package-lock.json
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@babel/traverse": {
      "name": "@babel/traverse",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1096886,
          "name": "@babel/traverse",
          "dependency": "@babel/traverse",
          "title": "Babel vulnerable to arbitrary code execution when compiling specifically crafted malicious code",
          "url": "https://github.com/advisories/GHSA-67hx-6x53-jw92",
          "severity": "critical",
          "cwe": [
            "CWE-184",
            "CWE-697"
          ],
          "cvss": {
            "score": 9.4,
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"
          },
          "range": "<7.23.2"
        }
      ],
      "effects": [],
      "range": "<7.23.2",
      "nodes": [
        "node_modules/@babel/traverse"
      ],
      "fixAvailable": true
    },
    "ansi-regex": {
      "name": "ansi-regex",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1094092,
          "name": "ansi-regex",
          "dependency": "ansi-regex",
          "title": "Inefficient Regular Expression Complexity in chalk/ansi-regex",
          "url": "https://github.com/advisories/GHSA-93q8-gq69-wqmw",
          "severity": "high",
          "cwe": [
            "CWE-697",
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=5.0.0 <5.0.1"
        }
      ],
      "effects": [],
      "range": "5.0.0",
      "nodes": [
        "node_modules/ansi-regex"
      ],
      "fixAvailable": true
    },
    "browserslist": {
      "name": "browserslist",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1093035,
          "name": "browserslist",
          "dependency": "browserslist",
          "title": "Regular Expression Denial of Service in browserslist",
          "url": "https://github.com/advisories/GHSA-w8qv-6jwh-64r5",
          "severity": "moderate",
          "cwe": [
            "CWE-400",
            "CWE-1333"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": ">=4.0.0 <4.16.5"
        }
      ],
      "effects": [],
      "range": "4.0.0 - 4.16.4",
      "nodes": [
        "node_modules/browserslist"
      ],
      "fixAvailable": true
    },
    "eslint-config-wikimedia": {
      "name": "eslint-config-wikimedia",
      "severity": "high",
      "isDirect": true,
      "via": [
        "eslint-plugin-compat"
      ],
      "effects": [],
      "range": "0.18.0 - 0.21.0",
      "nodes": [
        "node_modules/eslint-config-wikimedia"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.28.2",
        "isSemVerMajor": true
      }
    },
    "eslint-plugin-compat": {
      "name": "eslint-plugin-compat",
      "severity": "high",
      "isDirect": false,
      "via": [
        "semver"
      ],
      "effects": [
        "eslint-config-wikimedia"
      ],
      "range": "3.6.0-0 - 4.1.4",
      "nodes": [
        "node_modules/eslint-plugin-compat"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.28.2",
        "isSemVerMajor": true
      }
    },
    "jsdoc-parse": {
      "name": "jsdoc-parse",
      "severity": "high",
      "isDirect": false,
      "via": [
        "lodash.pick"
      ],
      "effects": [],
      "range": "2.0.2 - 6.2.0",
      "nodes": [
        "node_modules/jsdoc-parse"
      ],
      "fixAvailable": true
    },
    "json5": {
      "name": "json5",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1096544,
          "name": "json5",
          "dependency": "json5",
          "title": "Prototype Pollution in JSON5 via Parse Method",
          "url": "https://github.com/advisories/GHSA-9c47-m6qq-7p4h",
          "severity": "high",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 7.1,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:L/A:H"
          },
          "range": ">=2.0.0 <2.2.2"
        }
      ],
      "effects": [],
      "range": "2.0.0 - 2.2.1",
      "nodes": [
        "node_modules/json5"
      ],
      "fixAvailable": true
    },
    "lodash.pick": {
      "name": "lodash.pick",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1096303,
          "name": "lodash.pick",
          "dependency": "lodash.pick",
          "title": "Prototype Pollution in lodash",
          "url": "https://github.com/advisories/GHSA-p6mc-m468-83gw",
          "severity": "high",
          "cwe": [
            "CWE-770",
            "CWE-1321"
          ],
          "cvss": {
            "score": 7.4,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H"
          },
          "range": ">=4.0.0 <=4.4.0"
        }
      ],
      "effects": [
        "jsdoc-parse"
      ],
      "range": ">=4.0.0",
      "nodes": [
        "node_modules/lodash.pick"
      ],
      "fixAvailable": true
    },
    "minimist": {
      "name": "minimist",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1097678,
          "name": "minimist",
          "dependency": "minimist",
          "title": "Prototype Pollution in minimist",
          "url": "https://github.com/advisories/GHSA-xvch-5gv4-984h",
          "severity": "critical",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 9.8,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": ">=1.0.0 <1.2.6"
        }
      ],
      "effects": [],
      "range": "1.0.0 - 1.2.5",
      "nodes": [
        "node_modules/minimist"
      ],
      "fixAvailable": true
    },
    "node-fetch": {
      "name": "node-fetch",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1095073,
          "name": "node-fetch",
          "dependency": "node-fetch",
          "title": "node-fetch forwards secure headers to untrusted sites",
          "url": "https://github.com/advisories/GHSA-r683-j2x4-v87g",
          "severity": "high",
          "cwe": [
            "CWE-173",
            "CWE-200",
            "CWE-601"
          ],
          "cvss": {
            "score": 8.8,
            "vectorString": "CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": "<2.6.7"
        }
      ],
      "effects": [],
      "range": "<2.6.7",
      "nodes": [
        "node_modules/node-fetch"
      ],
      "fixAvailable": true
    },
    "path-parse": {
      "name": "path-parse",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1089681,
          "name": "path-parse",
          "dependency": "path-parse",
          "title": "Regular Expression Denial of Service in path-parse",
          "url": "https://github.com/advisories/GHSA-hj48-42vr-x3v9",
          "severity": "moderate",
          "cwe": [
            "CWE-400"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<1.0.7"
        }
      ],
      "effects": [],
      "range": "<1.0.7",
      "nodes": [
        "node_modules/path-parse"
      ],
      "fixAvailable": true
    },
    "semver": {
      "name": "semver",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1098562,
          "name": "semver",
          "dependency": "semver",
          "title": "semver vulnerable to Regular Expression Denial of Service",
          "url": "https://github.com/advisories/GHSA-c2qf-rxjj-qqgw",
          "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": ">=7.0.0 <7.5.2"
        }
      ],
      "effects": [
        "eslint-plugin-compat"
      ],
      "range": "7.0.0 - 7.5.1",
      "nodes": [
        "node_modules/eslint-plugin-compat/node_modules/semver"
      ],
      "fixAvailable": {
        "name": "eslint-config-wikimedia",
        "version": "0.28.2",
        "isSemVerMajor": true
      }
    },
    "word-wrap": {
      "name": "word-wrap",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1097681,
          "name": "word-wrap",
          "dependency": "word-wrap",
          "title": "word-wrap vulnerable to Regular Expression Denial of Service",
          "url": "https://github.com/advisories/GHSA-j8xg-fqg3-53r7",
          "severity": "moderate",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<1.2.4"
        }
      ],
      "effects": [],
      "range": "<1.2.4",
      "nodes": [
        "node_modules/word-wrap"
      ],
      "fixAvailable": true
    },
    "ws": {
      "name": "ws",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1098393,
          "name": "ws",
          "dependency": "ws",
          "title": "ws affected by a DoS when handling a request with many HTTP headers",
          "url": "https://github.com/advisories/GHSA-3h5v-q93c-6h6q",
          "severity": "high",
          "cwe": [
            "CWE-476"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=7.0.0 <7.5.10"
        }
      ],
      "effects": [],
      "range": "7.0.0 - 7.5.9",
      "nodes": [
        "node_modules/ws"
      ],
      "fixAvailable": true
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 3,
      "high": 9,
      "critical": 2,
      "total": 14
    },
    "dependencies": {
      "prod": 58,
      "dev": 346,
      "optional": 3,
      "peer": 0,
      "peerOptional": 0,
      "total": 405
    }
  }
}

--- end ---
Upgrading n:eslint-config-wikimedia from 0.20.0 -> 0.28.2
$ /usr/bin/npm install
--- stderr ---
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 465 packages, and audited 466 packages in 18s

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

7 vulnerabilities (5 high, 2 critical)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

--- end ---
$ ./node_modules/.bin/eslint . --fix
--- stdout ---

/src/repo/bin/fresnel.js
  10:4  error  Don't use process.exit(); throw an error instead  n/no-process-exit
  13:4  error  Don't use process.exit(); throw an error instead  n/no-process-exit

/src/repo/src/Writer.js
  44:4  warning  Found mkdirSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/src/conductor.js
  200:2   warning  Found writeFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  222:16  warning  Found non-literal argument in require                                       security/detect-non-literal-require
  223:16  warning  Found non-literal argument in require                                       security/detect-non-literal-require

/src/repo/src/probes/index.js
  15:1  error  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer

/src/repo/src/probes/navtiming.js
  13:17  error  The 'performance' is still an experimental feature and is not supported until Node.js 16.0.0. The configured version range is '>=14.14.0'                   n/no-unsupported-features/node-builtins
  13:17  error  The 'performance.getEntriesByType' is still an experimental feature and is not supported until Node.js 16.7.0. The configured version range is '>=14.14.0'  n/no-unsupported-features/node-builtins

/src/repo/src/probes/paint.js
  14:2  error  The 'performance' is still an experimental feature and is not supported until Node.js 16.0.0. The configured version range is '>=14.14.0'                   n/no-unsupported-features/node-builtins
  14:2  error  The 'performance.getEntriesByType' is still an experimental feature and is not supported until Node.js 16.7.0. The configured version range is '>=14.14.0'  n/no-unsupported-features/node-builtins

/src/repo/src/probes/transfer.js
  13:9   error  The 'performance' is still an experimental feature and is not supported until Node.js 16.0.0. The configured version range is '>=14.14.0'                   n/no-unsupported-features/node-builtins
  13:9   error  The 'performance.getEntriesByType' is still an experimental feature and is not supported until Node.js 16.7.0. The configured version range is '>=14.14.0'  n/no-unsupported-features/node-builtins
  14:12  error  The 'performance' is still an experimental feature and is not supported until Node.js 16.0.0. The configured version range is '>=14.14.0'                   n/no-unsupported-features/node-builtins
  14:12  error  The 'performance.getEntriesByType' is still an experimental feature and is not supported until Node.js 16.7.0. The configured version range is '>=14.14.0'  n/no-unsupported-features/node-builtins

/src/repo/src/reports/index.js
  13:1  error  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer

/src/repo/src/reports/transfer.js
   94:5  error  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer
  103:5  error  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer
  111:5  error  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer
  120:5  error  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer
  128:5  error  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer
  136:5  error  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer

/src/repo/test/cli.e2e.js
  51:20  warning  Found non-literal argument in require  security/detect-non-literal-require

/src/repo/test/conductor.e2e.js
  33:15  error  The 'localStorage' is still an experimental feature The configured version range is '>=14.14.0'  n/no-unsupported-features/node-builtins
  36:7   error  The 'localStorage' is still an experimental feature The configured version range is '>=14.14.0'  n/no-unsupported-features/node-builtins

/src/repo/test/probes.e2e.js
  44:5   error  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer
  63:10  error  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer

/src/repo/test/writer.unit.js
  25:4  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  29:4  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

✖ 29 problems (24 errors, 5 warnings)


--- end ---
$ ./node_modules/.bin/eslint . -f json
--- stdout ---
[{"filePath":"/src/repo/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/bin/fresnel.js","messages":[{"ruleId":"n/no-process-exit","severity":2,"message":"Don't use process.exit(); throw an error instead.","line":10,"column":4,"nodeType":"CallExpression","messageId":"noProcessExit","endLine":10,"endColumn":23},{"ruleId":"n/no-process-exit","severity":2,"message":"Don't use process.exit(); throw an error instead.","line":13,"column":4,"nodeType":"CallExpression","messageId":"noProcessExit","endLine":13,"endColumn":21}],"suppressedMessages":[],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"#!/usr/bin/env node\n'use strict';\n\n// argv: 0 = bin/node\n// 1 = bin/fresnel\n// 2... = command and any params\nrequire( '../src/cli.js' )( ...process.argv.slice( 2 ) )\n\t.catch( ( err ) => {\n\t\tif ( typeof err === 'number' ) {\n\t\t\tprocess.exit( err );\n\t\t} else {\n\t\t\tconsole.error( err );\n\t\t\tprocess.exit( 1 );\n\t\t}\n\t} );\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/npm-shrinkwrap.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/Registry.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/Writer.js","messages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found mkdirSync from package \"fs\" with non literal argument at index 0","line":44,"column":4,"nodeType":"CallExpression","endLine":44,"endColumn":23}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst fs = require( 'fs' );\nconst path = require( 'path' );\n\n/**\n * @ignore\n * @param {string} name\n * @throws {Error} If name cannot be used for a file.\n */\nfunction validateName( name ) {\n\tif (\n\t\t// Empty\n\t\tname === '' ||\n\t\t// Only dots\n\t\t/^\\.+$/.test( name ) ||\n\t\t// Traversal on different operating systems\n\t\t/[/?<>\\\\:*|\":]/.test( name )\n\t) {\n\t\tthrow new Error( `Invalid file name: \"${ name }\"` );\n\t}\n}\n\n/**\n * Represents a directory and an (optional) prefix for files and\n * subdirectories created within it.\n *\n * @class\n */\nclass Writer {\n\t/**\n\t * The specified directory will be created if needed.\n\t * Any parent directories must exist beforehand.\n\t *\n\t * @param {string} dir File path\n\t * @param {string} prefix\n\t * @throws {Error} If directory can't be created.\n\t */\n\tconstructor( dir, prefix = '' ) {\n\t\t// Create as needed\n\t\ttry {\n\t\t\tfs.accessSync( dir, fs.constants.W_OK );\n\t\t} catch ( err ) {\n\t\t\tfs.mkdirSync( dir );\n\t\t}\n\n\t\t/**\n\t\t * @private\n\t\t * @property {string}\n\t\t */\n\t\tthis.dir = dir;\n\n\t\t/**\n\t\t * @private\n\t\t * @property {string}\n\t\t */\n\t\tthis.namePrefix = prefix;\n\t}\n\n\t/**\n\t * Get the file path for a resource in this writer's directory.\n\t *\n\t * @param {string} name File name\n\t * @return {string} File path\n\t */\n\tgetPath( name ) {\n\t\tconst segment = this.namePrefix + name;\n\t\tvalidateName( segment );\n\t\treturn path.join( this.dir, segment );\n\t}\n\n\t/**\n\t * Create a Writer object for the same directory, with\n\t * an added prefix for any files and subdirectories.\n\t *\n\t * @param {string} prefix\n\t * @return {Writer}\n\t */\n\tprefix( prefix ) {\n\t\treturn new Writer( this.dir, this.namePrefix + prefix );\n\t}\n\n\t/**\n\t * Create a Writer object for a subdirectory of the current one.\n\t *\n\t * @param {string} name\n\t * @return {Writer}\n\t */\n\tchild( name ) {\n\t\treturn new Writer( this.getPath( name ) );\n\t}\n}\n\nmodule.exports = Writer;\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/cli.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/compute.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/conductor.js","messages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":200,"column":2,"nodeType":"CallExpression","endLine":200,"endColumn":85},{"ruleId":"security/detect-non-literal-require","severity":1,"message":"Found non-literal argument in require","line":222,"column":16,"nodeType":"CallExpression","endLine":222,"endColumn":32},{"ruleId":"security/detect-non-literal-require","severity":1,"message":"Found non-literal argument in require","line":223,"column":16,"nodeType":"CallExpression","endLine":223,"endColumn":32}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n/**\n * The program interface for Fresnel commands.\n *\n * Interacts with: {@link external:puppeteer/Browser puppeteer/Browser},\n * {@link Writer}, {@link Probe}, and {@link Report}.\n *\n * @module conductor\n */\n\nconst fs = require( 'fs' );\nconst path = require( 'path' );\nconst puppeteer = require( 'puppeteer' );\n\nconst Registry = require( './Registry' );\nconst Writer = require( './Writer' );\nconst hasOwn = Object.prototype.hasOwnProperty;\nconst is = require( './util/is' );\nconst probesIndex = require( './probes' );\nconst recorder = require( './recorder' );\nconst reportsIndex = require( './reports' );\n\n/**\n * Create a Fresnel record.\n *\n * This runs the scenarios from the given configuration object, and saves the\n * record and probe artefacts to an out subdirectory named after the label.\n *\n * The Scenario URL may have placeholders for variables. These allow scenarios\n * to adapt to the current environment. For example, when testing an app\n * like MediaWiki, the hostname and port of the web server may vary in each\n * CI or development environment.\n *\n * @param {Object} config Configuration object, e.g. from `.fresnel.yml`.\n * @param {string} outputDir File path\n * @param {string} label Record label. Must be valid as a directory name.\n * @param {Function} progress Callback for handling internal events\n *  as the recording progresses.\n * @return {Object} Fresnel record.\n * @throws {Error} If configuration is invalid.\n * @throws {Error} If Writer can't create the output directory.\n */\nasync function record( config, outputDir, label, progress = () => {} ) {\n\t// Step 1: Preparations\n\t//\n\t// - Apply default config.\n\t// - Validate config.\n\t// - Create output directory (if needed).\n\t// - Open the probes and reports registries.\n\t// - Create an empty recording to store the data we'll gather.\n\n\tconfig = Object.assign( { warmup: false, runs: 1 }, config );\n\tis.config( config );\n\tconst writer = new Writer( outputDir ).child( label );\n\tconst probeReg = new Registry( Registry.isProbe, probesIndex );\n\tconst reportReg = new Registry( Registry.isReport, reportsIndex );\n\n\t// The record will contain meta-data about every scenario,\n\t// and the data collected by probes on each of the runs.\n\tconst rec = {\n\t\tscenarios: {}\n\t};\n\n\t// Step 2: Start the browser\n\t//\n\t// - Determine the CLI options for the Chromium executable.\n\t//   Wikimedia CI uses Docker and sets --no-sandbox through this mechanism.\n\t// - Use puppeteer to launch the browser (Headless Chromium).\n\n\tconst launchOpts = ( process.env.CHROMIUM_FLAGS ) ?\n\t\t{ args: process.env.CHROMIUM_FLAGS.split( /\\s+/ ) } :\n\t\t{};\n\tconst browser = await puppeteer.launch( launchOpts );\n\n\t// Step 3: Perform each configured scenario\n\t//\n\t// - Warmup the given url on the server by opening it once in a browser (optional).\n\t// - Open the url N times in a browser, and each time collect data\n\t//   from the probes and add the probe's data to the record.\n\t// - Close the browser.\n\n\tprogress( 'conductor/record-start', config );\n\n\ttry {\n\t\tfor ( const key in config.scenarios ) {\n\t\t\tconst scenario = config.scenarios[ key ];\n\t\t\trec.scenarios[ key ] = {\n\t\t\t\toptions: {\n\t\t\t\t\turl: scenario.url,\n\t\t\t\t\tviewport: scenario.viewport,\n\t\t\t\t\treports: scenario.reports || []\n\t\t\t\t},\n\t\t\t\truns: []\n\t\t\t};\n\n\t\t\t// Get the Probe objects for this scenario.\n\t\t\tconst probes = new Set();\n\t\t\tif ( scenario.reports ) {\n\t\t\t\tscenario.reports.forEach( ( reportKey ) => {\n\t\t\t\t\tconst report = reportReg.get( reportKey );\n\t\t\t\t\treport.probes.forEach( ( probe ) => probes.add( probeReg.get( probe ) ) );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( scenario.probes ) {\n\t\t\t\tscenario.probes.forEach( ( probe ) => probes.add( probeReg.get( probe ) ) );\n\t\t\t}\n\n\t\t\tif ( config.warmup ) {\n\t\t\t\tprogress( 'conductor/warmup' );\n\t\t\t\tawait recorder.warmup( scenario, browser );\n\t\t\t}\n\n\t\t\tfor ( let run = 0; run < config.runs; run++ ) {\n\t\t\t\tprogress( 'conductor/record-run', { scenario: key, run: run } );\n\t\t\t\tconst probeDatas = await recorder.run(\n\t\t\t\t\tscenario,\n\t\t\t\t\tprobes,\n\t\t\t\t\twriter.child( `scenario-${ key }-run-${ run }` ),\n\t\t\t\t\tbrowser,\n\t\t\t\t\tprogress\n\t\t\t\t);\n\t\t\t\trec.scenarios[ key ].runs.push( probeDatas );\n\t\t\t}\n\t\t}\n\n\t} finally {\n\t\t// Use finally, as this should also happen in case of failure.\n\t\t// This ensures the Fresnel process can exit cleanly after an error\n\t\t// (it can't exit with an active child process).\n\t\tawait browser.close();\n\t}\n\n\t// Step 4: Analyse the data.\n\t//\n\t// Combine values from individual runs. For two runs like this:\n\t//\n\t//     record.scenarios[key].runs: [\n\t//       {\n\t//         myProbe: { x: 1.4 }\n\t//       },\n\t//       {\n\t//         myProbe: { x: 2.1 }\n\t//       }\n\t//     ]\n\t//\n\t// The combined version becomes:\n\t//\n\t//     record.scenarios[key].combined: {\n\t//       myProbe: {\n\t//         x: [ 1.4, 2.1 ]\n\t//       }\n\t//     }\n\t//\n\t// Then, the Report objects analyse the data and we get:\n\t//\n\t//     record.scenarios[key].analysed: {\n\t//       myProbe: {\n\t//         x: { mean: 1.75, stdev: 0.35 }\n\t//       }\n\t//     }\n\t//\n\tfunction addCombinedData( scenario ) {\n\t\tconst combined = scenario.combined = {};\n\t\tfor ( const run of scenario.runs ) {\n\t\t\tfor ( const probeName in run ) {\n\t\t\t\tif ( !hasOwn.call( combined, probeName ) ) {\n\t\t\t\t\tcombined[ probeName ] = {};\n\t\t\t\t}\n\t\t\t\tconst data = combined[ probeName ];\n\n\t\t\t\tfor ( const dataKey in run[ probeName ] ) {\n\t\t\t\t\tif ( !hasOwn.call( data, dataKey ) ) {\n\t\t\t\t\t\tdata[ dataKey ] = [ run[ probeName ][ dataKey ] ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata[ dataKey ].push( run[ probeName ][ dataKey ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction addAnalysedData( scenario ) {\n\t\tconst analysed = scenario.analysed = {};\n\t\tfor ( const reportName of scenario.options.reports ) {\n\t\t\tanalysed[ reportName ] = {};\n\n\t\t\tconst report = reportReg.get( reportName );\n\t\t\tfor ( const metric in report.metrics ) {\n\t\t\t\tanalysed[ reportName ][ metric ] =\n\t\t\t\t\treport.metrics[ metric ].analyse( scenario.combined );\n\t\t\t}\n\t\t}\n\t}\n\n\tfor ( const key in rec.scenarios ) {\n\t\taddCombinedData( rec.scenarios[ key ] );\n\t\taddAnalysedData( rec.scenarios[ key ] );\n\t}\n\n\t// Step 5: Lastly, write the record to disk.\n\tfs.writeFileSync( writer.getPath( 'record.json' ), JSON.stringify( rec, null, 2 ) );\n\n\tprogress( 'conductor/record-end', { label: label } );\n\n\treturn rec;\n}\n\n/**\n * Compare two Fresnel records.\n *\n * @param {string} outputDir File path\n * @param {string} labelA Record label\n * @param {string} labelB Record label\n * @return {Object} Comparison\n * @throws {Error} If records could not be read\n */\nasync function compare( outputDir, labelA, labelB ) {\n\tconst reportReg = new Registry( Registry.isReport, reportsIndex );\n\n\t// Step 1: Read the original records\n\tconst pathA = path.join( path.resolve( outputDir ), labelA, 'record.json' );\n\tconst pathB = path.join( path.resolve( outputDir ), labelB, 'record.json' );\n\tconst fileA = require( pathA );\n\tconst fileB = require( pathB );\n\n\t// Step 2: Compare the analysed records.\n\tfunction makeJudgement( threshold, diff ) {\n\t\tif ( threshold > 0 ) {\n\t\t\t// This metric is characterised as \"lower values are better\".\n\t\t\t// - If the difference is positive and higher than this, it's bad.\n\t\t\t// - If the difference is negative and bigger than this, it's good.\n\t\t\tif ( diff > threshold ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif ( diff < 0 && Math.abs( diff ) > threshold ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\t// Idea: Support metrics characterised as \"higher values are better\".\n\t\t// Use a negative threshold value.\n\t\t// - If the difference is negative and lower than this, it's bad.\n\t\t// - If the difference is positive and bigger than this, it's good.\n\t\treturn null;\n\t}\n\tfunction makeComparison( recordA, recordB ) {\n\t\tconst result = {};\n\t\tconst warnings = [];\n\n\t\tfor ( const scenarioKey in recordA.scenarios ) {\n\t\t\tconst compared = result[ scenarioKey ] = {};\n\n\t\t\tconst scenarioA = recordA.scenarios[ scenarioKey ];\n\t\t\tconst scenarioB = recordB.scenarios[ scenarioKey ];\n\n\t\t\tfor ( const reportName in scenarioA.analysed ) {\n\t\t\t\tconst report = reportReg.get( reportName );\n\t\t\t\tcompared[ reportName ] = {};\n\n\t\t\t\tfor ( const metricKey in report.metrics ) {\n\t\t\t\t\tconst metric = report.metrics[ metricKey ];\n\t\t\t\t\tconst a = scenarioA.analysed[ reportName ][ metricKey ];\n\t\t\t\t\tconst b = scenarioB.analysed[ reportName ][ metricKey ];\n\t\t\t\t\t/* istanbul ignore if */\n\t\t\t\t\tif ( !a || !b ) {\n\t\t\t\t\t\t// If the evaluated commit changes the Fresnel configuration,\n\t\t\t\t\t\t// so that one of the scenarios or metrics exists in only one\n\t\t\t\t\t\t// of \"before\" or \"after\", then we can't compare it.\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst diff = metric.compare( a, b );\n\t\t\t\t\tconst judgement = makeJudgement( metric.threshold, diff );\n\t\t\t\t\tconst item = compared[ reportName ][ metricKey ] = {\n\t\t\t\t\t\tcaption: metric.caption,\n\t\t\t\t\t\tunit: metric.unit,\n\t\t\t\t\t\ta: a,\n\t\t\t\t\t\tb: b,\n\t\t\t\t\t\tdiff: diff,\n\t\t\t\t\t\tcompareUnit: metric.compareUnit || metric.unit,\n\t\t\t\t\t\tjudgement: judgement\n\t\t\t\t\t};\n\t\t\t\t\tif ( judgement === false ) {\n\t\t\t\t\t\twarnings.push( item );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { result, warnings };\n\t}\n\n\treturn makeComparison( fileA, fileB );\n}\n\nmodule.exports = { record, compare };\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/external.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/printer.js","messages":[],"suppressedMessages":[{"ruleId":"no-control-regex","severity":2,"message":"Unexpected control character(s) in regular expression: \\x1b.","line":20,"column":16,"nodeType":"Literal","messageId":"unexpected","endLine":20,"endColumn":31,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/probes/index.js","messages":[{"ruleId":"es-x/no-arraybuffer-prototype-transfer","severity":2,"message":"ES2024 'ArrayBuffer.prototype.transfer' method is forbidden.","line":15,"column":1,"nodeType":"MemberExpression","messageId":"forbidden","endLine":15,"endColumn":16}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n/**\n * Registry of built-in Fresnel probes.\n *\n * @ignore\n * @module probes\n */\n\nconst probes = Object.create( null );\n\nprobes.navtiming = require( './navtiming' );\nprobes.paint = require( './paint' );\nprobes.screenshot = require( './screenshot' );\nprobes.trace = require( './trace' );\nprobes.transfer = require( './transfer' );\n\nmodule.exports = probes;\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/probes/navtiming.js","messages":[{"ruleId":"n/no-unsupported-features/node-builtins","severity":2,"message":"The 'performance' is still an experimental feature and is not supported until Node.js 16.0.0. The configured version range is '>=14.14.0'.","line":13,"column":17,"nodeType":"Identifier","messageId":"not-supported-till","endLine":13,"endColumn":28},{"ruleId":"n/no-unsupported-features/node-builtins","severity":2,"message":"The 'performance.getEntriesByType' is still an experimental feature and is not supported until Node.js 16.7.0. The configured version range is '>=14.14.0'.","line":13,"column":17,"nodeType":"MemberExpression","messageId":"not-supported-till","endLine":13,"endColumn":45}],"suppressedMessages":[],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n/**\n * Get data from the Navigation Timing API in the browser.\n *\n * @module probes/navtiming\n * @see {@link Probe}\n * @see <https://www.w3.org/TR/navigation-timing-2/>\n */\n\n/* istanbul ignore next */\nfunction browserCode() {\n\t/* eslint-env browser */\n\tconst timing = performance.getEntriesByType( 'navigation' )[ 0 ];\n\treturn timing.toJSON();\n}\n\nmodule.exports = {\n\tasync after( page, writer, addData ) {\n\t\tconst response = await page.evaluate( browserCode );\n\t\taddData( response );\n\t}\n};\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/probes/paint.js","messages":[{"ruleId":"n/no-unsupported-features/node-builtins","severity":2,"message":"The 'performance' is still an experimental feature and is not supported until Node.js 16.0.0. The configured version range is '>=14.14.0'.","line":14,"column":2,"nodeType":"Identifier","messageId":"not-supported-till","endLine":14,"endColumn":13},{"ruleId":"n/no-unsupported-features/node-builtins","severity":2,"message":"The 'performance.getEntriesByType' is still an experimental feature and is not supported until Node.js 16.7.0. The configured version range is '>=14.14.0'.","line":14,"column":2,"nodeType":"MemberExpression","messageId":"not-supported-till","endLine":14,"endColumn":30}],"suppressedMessages":[],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n/**\n * Get data from the Paint Timing API in the browser.\n *\n * @module probes/paint\n * @see {@link Probe}\n * @see <https://www.w3.org/TR/paint-timing/>\n */\n\n/* istanbul ignore next */\nfunction browserCode() {\n\t/* eslint-env browser */\n\tconst result = {};\n\tperformance.getEntriesByType( 'paint' ).forEach( ( entry ) => {\n\t\t// first-paint\n\t\t// first-contentful-paint\n\t\tresult[ entry.name ] = entry.startTime;\n\t} );\n\treturn result;\n}\n\nmodule.exports = {\n\tasync after( page, writer, addData ) {\n\t\tconst response = await page.evaluate( browserCode );\n\t\taddData( response );\n\t}\n};\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/probes/screenshot.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/probes/trace.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/probes/transfer.js","messages":[{"ruleId":"n/no-unsupported-features/node-builtins","severity":2,"message":"The 'performance' is still an experimental feature and is not supported until Node.js 16.0.0. The configured version range is '>=14.14.0'.","line":13,"column":9,"nodeType":"Identifier","messageId":"not-supported-till","endLine":13,"endColumn":20},{"ruleId":"n/no-unsupported-features/node-builtins","severity":2,"message":"The 'performance.getEntriesByType' is still an experimental feature and is not supported until Node.js 16.7.0. The configured version range is '>=14.14.0'.","line":13,"column":9,"nodeType":"MemberExpression","messageId":"not-supported-till","endLine":13,"endColumn":37},{"ruleId":"n/no-unsupported-features/node-builtins","severity":2,"message":"The 'performance' is still an experimental feature and is not supported until Node.js 16.0.0. The configured version range is '>=14.14.0'.","line":14,"column":12,"nodeType":"Identifier","messageId":"not-supported-till","endLine":14,"endColumn":23},{"ruleId":"n/no-unsupported-features/node-builtins","severity":2,"message":"The 'performance.getEntriesByType' is still an experimental feature and is not supported until Node.js 16.7.0. The configured version range is '>=14.14.0'.","line":14,"column":12,"nodeType":"MemberExpression","messageId":"not-supported-till","endLine":14,"endColumn":40}],"suppressedMessages":[],"errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n/**\n * Get data from the Resource Timing API in the browser.\n *\n * @module probes/transfer\n * @see {@link Probe}\n * @see <https://www.w3.org/TR/resource-timing-2/>\n */\n\n/* istanbul ignore next */\nfunction browserCode() {\n\t/* eslint-env browser */\n\treturn performance.getEntriesByType( 'resource' )\n\t\t.concat( performance.getEntriesByType( 'navigation' ) )\n\t\t.map( ( entry ) => entry.toJSON() );\n}\n\nmodule.exports = {\n\tasync after( page, writer, addData ) {\n\t\tconst response = await page.evaluate( browserCode );\n\n\t\taddData( {\n\t\t\tentries: response\n\t\t} );\n\t}\n};\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/recorder.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/reports/index.js","messages":[{"ruleId":"es-x/no-arraybuffer-prototype-transfer","severity":2,"message":"ES2024 'ArrayBuffer.prototype.transfer' method is forbidden.","line":13,"column":1,"nodeType":"MemberExpression","messageId":"forbidden","endLine":13,"endColumn":17}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n/**\n * Registry of built-in Fresnel reports.\n *\n * @ignore\n * @module reports\n */\n\nconst reports = Object.create( null );\n\nreports.navtiming = require( './navtiming' );\nreports.paint = require( './paint' );\nreports.transfer = require( './transfer' );\n\nmodule.exports = reports;\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/reports/navtiming.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/reports/paint.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/reports/transfer.js","messages":[{"ruleId":"es-x/no-arraybuffer-prototype-transfer","severity":2,"message":"ES2024 'ArrayBuffer.prototype.transfer' method is forbidden.","line":94,"column":5,"nodeType":"MemberExpression","messageId":"forbidden","endLine":94,"endColumn":20},{"ruleId":"es-x/no-arraybuffer-prototype-transfer","severity":2,"message":"ES2024 'ArrayBuffer.prototype.transfer' method is forbidden.","line":103,"column":5,"nodeType":"MemberExpression","messageId":"forbidden","endLine":103,"endColumn":20},{"ruleId":"es-x/no-arraybuffer-prototype-transfer","severity":2,"message":"ES2024 'ArrayBuffer.prototype.transfer' method is forbidden.","line":111,"column":5,"nodeType":"MemberExpression","messageId":"forbidden","endLine":111,"endColumn":20},{"ruleId":"es-x/no-arraybuffer-prototype-transfer","severity":2,"message":"ES2024 'ArrayBuffer.prototype.transfer' method is forbidden.","line":120,"column":5,"nodeType":"MemberExpression","messageId":"forbidden","endLine":120,"endColumn":20},{"ruleId":"es-x/no-arraybuffer-prototype-transfer","severity":2,"message":"ES2024 'ArrayBuffer.prototype.transfer' method is forbidden.","line":128,"column":5,"nodeType":"MemberExpression","messageId":"forbidden","endLine":128,"endColumn":20},{"ruleId":"es-x/no-arraybuffer-prototype-transfer","severity":2,"message":"ES2024 'ArrayBuffer.prototype.transfer' method is forbidden.","line":136,"column":5,"nodeType":"MemberExpression","messageId":"forbidden","endLine":136,"endColumn":20}],"suppressedMessages":[],"errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n/**\n * Report with transfer sizes from the Resource Timing API.\n *\n * @module reports/transfer\n * @see {@link Report}\n * @see <https://www.w3.org/TR/resource-timing-2/>\n */\n\nconst URL = require( 'url' ).URL;\nconst compute = require( '../compute' );\n\nconst rImg = /\\.(?:jpeg|jpg|gif|png|svg)$/;\nconst rFont = /\\.(?:woff2|woff:ttf)$/;\n\nfunction getSizesFromEntries( category, entries ) {\n\tconst sizes = {\n\t\thtml: 0,\n\t\tcss: 0,\n\t\tjs: 0,\n\t\timg: 0,\n\t\tother: 0,\n\t\ttotal: 0\n\t};\n\n\tentries.forEach( ( entry ) => {\n\t\tsizes.total += entry.transferSize;\n\n\t\tconst path = ( new URL( entry.name ) ).pathname;\n\t\tswitch ( entry.initiatorType ) {\n\t\t\tcase 'navigation':\n\t\t\t\tsizes.html += entry.transferSize;\n\t\t\t\tbreak;\n\t\t\tcase 'link':\n\t\t\t\t// From <link> element or Link header.\n\t\t\t\t// e.g. a stylesheet, or preloaded image.\n\t\t\t\t// Upstream issue: https://github.com/w3c/resource-timing/issues/132\n\t\t\t\tif ( rImg.test( path ) ) {\n\t\t\t\t\tsizes.img += entry.transferSize;\n\t\t\t\t} else {\n\t\t\t\t\tsizes.css += entry.transferSize;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'script':\n\t\t\t\tsizes.js += entry.transferSize;\n\t\t\t\tbreak;\n\t\t\tcase 'img':\n\t\t\t\tsizes.img += entry.transferSize;\n\t\t\t\tbreak;\n\t\t\t// Resource requested by CSS.\n\t\t\t// e.g. an imported stylesheet, background image, or font file.\n\t\t\tcase 'css':\n\t\t\t\t/* istanbul ignore else */\n\t\t\t\tif ( rImg.test( path ) ) {\n\t\t\t\t\tsizes.img += entry.transferSize;\n\t\t\t\t} else if ( rFont.test( path ) ) {\n\t\t\t\t\tsizes.other += entry.transferSize;\n\t\t\t\t} else {\n\t\t\t\t\tsizes.css += entry.transferSize;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'xmlhttprequest':\n\t\t\tcase 'fetch':\n\t\t\tcase 'beacon':\n\t\t\tcase 'other':\n\t\t\tdefault:\n\t\t\t\tsizes.other += entry.transferSize;\n\t\t\t\tbreak;\n\t\t}\n\t} );\n\n\treturn sizes[ category ];\n}\n\nmodule.exports = {\n\tprobes: [ 'transfer' ],\n\n\t// TODO: Improve the transfer-based metrics to have a concept of\n\t// of 'interaction-blocking', which measures only the startup module\n\t// (and any other requests that don't contain page-specific leaf modules).\n\t//\n\t// To do this cleanly, we may want to separate \"probes\" (which gather data)\n\t// from \"metrics\" (which interpret data), so that we can have the 'transfer'\n\t// probe collect the data with only minimal aggregation (e.g. by url, and by type),\n\t// with maybe \"render-blocking\" which is fairly universal. And then, the \"mediawiki\"\n\t// metrics interprets that data also, and defines a \"interaction-blocking-bytes\"\n\t// metric based on load.php urls and other MediaWiki-specific things.\n\n\tmetrics: {\n\t\tpageWeight: {\n\t\t\tcaption: 'Total size of transfers during page load',\n\t\t\tunit: 'B',\n\t\t\tanalyse: ( series ) => compute.stats(\n\t\t\t\tseries.transfer.entries.map( getSizesFromEntries.bind( null, 'total' ) )\n\t\t\t),\n\t\t\tcompare: ( a, b ) => compute.diffStdev( a, b ),\n\t\t\tthreshold: 5\n\t\t},\n\t\thtml: {\n\t\t\tcaption: 'Transfer size of HTML document',\n\t\t\tunit: 'B',\n\t\t\tanalyse: ( series ) => compute.stats(\n\t\t\t\tseries.transfer.entries.map( getSizesFromEntries.bind( null, 'html' ) )\n\t\t\t),\n\t\t\tcompare: ( a, b ) => compute.diffStdev( a, b )\n\t\t},\n\t\tcss: {\n\t\t\tcaption: 'Transfer size of CSS resources',\n\t\t\tunit: 'B',\n\t\t\tanalyse: ( series ) => compute.stats(\n\t\t\t\tseries.transfer.entries.map( getSizesFromEntries.bind( null, 'css' ) )\n\t\t\t),\n\t\t\tcompare: ( a, b ) => compute.diffStdev( a, b ),\n\t\t\tthreshold: 3\n\t\t},\n\t\tjs: {\n\t\t\tcaption: 'Transfer size of JavaScript resources',\n\t\t\tunit: 'B',\n\t\t\tanalyse: ( series ) => compute.stats(\n\t\t\t\tseries.transfer.entries.map( getSizesFromEntries.bind( null, 'js' ) )\n\t\t\t),\n\t\t\tcompare: ( a, b ) => compute.diffStdev( a, b )\n\t\t},\n\t\timg: {\n\t\t\tcaption: 'Transfer size of Image document',\n\t\t\tunit: 'B',\n\t\t\tanalyse: ( series ) => compute.stats(\n\t\t\t\tseries.transfer.entries.map( getSizesFromEntries.bind( null, 'img' ) )\n\t\t\t),\n\t\t\tcompare: ( a, b ) => compute.diffStdev( a, b )\n\t\t},\n\t\tother: {\n\t\t\tcaption: 'Transfer size of other resources',\n\t\t\tunit: 'B',\n\t\t\tanalyse: ( series ) => compute.stats(\n\t\t\t\tseries.transfer.entries.map( getSizesFromEntries.bind( null, 'other' ) )\n\t\t\t),\n\t\t\tcompare: ( a, b ) => compute.diffStdev( a, b )\n\t\t}\n\t}\n};\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/util/is.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/Registry.unit.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/cli.e2e.js","messages":[{"ruleId":"security/detect-non-literal-require","severity":1,"message":"Found non-literal argument in require","line":51,"column":20,"nodeType":"CallExpression","endLine":51,"endColumn":73}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n/**\n * End-to-end test for `cli`.\n */\n\nconst fs = require( 'fs' );\nconst path = require( 'path' );\n\nconst cli = require( '../src/cli' );\nconst fileUrl = require( './util/file-url' );\nconst mktmpdir = require( './util/tmpdir' );\nconst { rColor } = require( '../src/printer' );\n\nQUnit.module( 'e2e/cli', ( hooks ) => {\n\tlet orgEnv, orgLog, orgError, orgCwd, out, tmpDir, fixtureDir;\n\thooks.beforeEach( () => {\n\t\t// Stub\n\t\torgEnv = process.env;\n\t\t// Inherit original so that CHROMIUM_FLAGS may still apply\n\t\tprocess.env = Object.create( process.env );\n\t\torgLog = console.log;\n\t\torgError = console.error;\n\t\tout = '';\n\t\tconsole.log = console.error = ( str ) => {\n\t\t\tout += `${ str }\\n`;\n\t\t};\n\n\t\ttmpDir = mktmpdir( 'fresnel_test' );\n\t\tprocess.env.FRESNEL_DIR = tmpDir;\n\n\t\tfixtureDir = path.join( __dirname, 'fixtures' );\n\t\tprocess.env.TEST_FIXTUREURL = fileUrl( fixtureDir );\n\n\t\torgCwd = process.cwd();\n\t} );\n\thooks.afterEach( () => {\n\t\tprocess.chdir( orgCwd );\n\t\tfs.rmSync( tmpDir, { force: true, recursive: true } );\n\n\t\t// Restore\n\t\tconsole.log = orgLog;\n\t\tconsole.error = orgError;\n\t\tprocess.env = orgEnv;\n\t} );\n\n\tQUnit.test( 'record', ( assert ) => {\n\t\tprocess.chdir( path.join( fixtureDir, 'basic' ) );\n\n\t\treturn cli( 'record' )\n\t\t\t.then( () => {\n\t\t\t\tconst actual = require( path.join( tmpDir, 'default/record.json' ) );\n\t\t\t\tconst expected = require( './fixtures/basic-records/one/record.json' );\n\n\t\t\t\tassert.propEqual( actual, expected, 'record' );\n\t\t\t} );\n\t} );\n\n\tQUnit.test( 'compare - forward', ( assert ) => {\n\t\tprocess.env.FRESNEL_DIR = path.join( __dirname, 'fixtures/compare-records' );\n\n\t\treturn cli( 'compare', 'one', 'two' ).then( () => {\n\t\t\tconst expected = fs.readFileSync( path.join( __dirname, 'fixtures/compare-forward.txt' ), 'utf8' );\n\t\t\tassert.propEqual(\n\t\t\t\tout.trim().replace( rColor, '' ).split( '\\n' ),\n\t\t\t\texpected.trim().split( '\\n' ),\n\t\t\t\t'result'\n\t\t\t);\n\t\t} );\n\t} );\n\n\tQUnit.test( 'compare - backward', ( assert ) => {\n\t\tprocess.env.FRESNEL_DIR = path.join( __dirname, 'fixtures/compare-records' );\n\n\t\tconst fail = cli( 'compare', 'two', 'one' );\n\t\tassert.rejects( fail, 'exit code' );\n\n\t\treturn fail.catch( () => {\n\t\t\tconst expected = fs.readFileSync(\n\t\t\t\tpath.join( __dirname, 'fixtures/compare-backward.txt' ),\n\t\t\t\t'utf8'\n\t\t\t);\n\t\t\tassert.propEqual(\n\t\t\t\tout.trim().replace( rColor, '' ).split( '\\n' ),\n\t\t\t\texpected.trim().split( '\\n' ),\n\t\t\t\t'result'\n\t\t\t);\n\t\t} );\n\t} );\n\n\tQUnit.test( 'record - error', ( assert ) => {\n\t\tassert.rejects( cli( 'record', 'too', 'many' ), 'exit code' );\n\n\t\tassert.strictEqual( /DESCRIPTION/.test( out ), true, 'help shown on error' );\n\t} );\n\n\tQUnit.test( 'compare - error', ( assert ) => {\n\t\tassert.rejects( cli( 'compare', 'solo' ), 'exit code' );\n\n\t\tassert.strictEqual( /DESCRIPTION/.test( out ), true, 'help shown on error' );\n\t} );\n\n\tQUnit.test( 'help', ( assert ) => cli( 'help' )\n\t\t.then( () => {\n\t\t\tassert.strictEqual( /Usage: fresnel/.test( out ), true, 'output' );\n\t\t} ) );\n\n\tQUnit.test( 'help record', ( assert ) => cli( 'help', 'record' )\n\t\t.then( () => {\n\t\t\tassert.strictEqual( /DESCRIPTION/.test( out ), true, 'help shown' );\n\t\t} ) );\n\n\tQUnit.test( 'help compare', ( assert ) => cli( 'help', 'compare' )\n\t\t.then( () => {\n\t\t\tassert.strictEqual( /DESCRIPTION/.test( out ), true, 'help shown' );\n\t\t} ) );\n\n\tQUnit.test( 'version', ( assert ) => cli( 'version' )\n\t\t.then( () => {\n\t\t\tassert.strictEqual( /Fresnel \\d/.test( out ), true, 'output' );\n\t\t} ) );\n\n\tQUnit.test( 'unknown command', ( assert ) => {\n\t\tassert.rejects( cli( 'whatever' ), 'exit code' );\n\n\t\tassert.strictEqual( /unknown command/i.test( out ), true, 'output' );\n\t} );\n} );\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/compute.unit.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/conductor.e2e.js","messages":[{"ruleId":"n/no-unsupported-features/node-builtins","severity":2,"message":"The 'localStorage' is still an experimental feature The configured version range is '>=14.14.0'.","line":33,"column":15,"nodeType":"Identifier","messageId":"not-supported-yet","endLine":33,"endColumn":27},{"ruleId":"n/no-unsupported-features/node-builtins","severity":2,"message":"The 'localStorage' is still an experimental feature The configured version range is '>=14.14.0'.","line":36,"column":7,"nodeType":"Identifier","messageId":"not-supported-yet","endLine":36,"endColumn":19}],"suppressedMessages":[],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n/**\n * End-to-end test for `conductor`.\n */\n\nconst fs = require( 'fs' );\nconst path = require( 'path' );\n\nconst conductor = require( '../src/conductor' );\nconst fileUrl = require( './util/file-url' );\nconst mktmpdir = require( './util/tmpdir' );\n\nQUnit.module( 'e2e/conductor', ( hooks ) => {\n\tlet tmpDir;\n\thooks.beforeEach( () => {\n\t\ttmpDir = mktmpdir( 'fresnel_test' );\n\t} );\n\thooks.afterEach( () => {\n\t\tfs.rmSync( tmpDir, { force: true, recursive: true } );\n\t} );\n\n\tQUnit.test( 'record() - clean state per run', ( assert ) => {\n\t\t// Confirm that each run gets a fresh browser context with\n\t\t// no cookies or localStorage values from previous runs.\n\t\tconst testprobe = {\n\t\t\tname: 'testprobe',\n\t\t\tafter( page, writer, addData ) {\n\t\t\t\treturn page\n\t\t\t\t\t.evaluate( () => {\n\t\t\t\t\t\t/* eslint-env browser */\n\t\t\t\t\t\tconst data = {\n\t\t\t\t\t\t\t// This should be null every time\n\t\t\t\t\t\t\tvalue: localStorage.getItem( 'test-fresh' )\n\t\t\t\t\t\t};\n\t\t\t\t\t\t// The value set here should never be seen again\n\t\t\t\t\t\tlocalStorage.setItem( 'test-fresh', 'some old value' );\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t} )\n\t\t\t\t\t.then( ( data ) => {\n\t\t\t\t\t\taddData( data );\n\t\t\t\t\t} );\n\t\t\t}\n\t\t};\n\n\t\tconst file = path.join( __dirname, 'fixtures/basic/one.html' );\n\t\tconst config = {\n\t\t\truns: 2,\n\t\t\tscenarios: [ {\n\t\t\t\turl: fileUrl( file ),\n\t\t\t\tviewport: { width: 800, height: 600 },\n\t\t\t\tprobes: [ testprobe ]\n\t\t\t} ]\n\t\t};\n\n\t\treturn conductor.record( config, tmpDir, 'default' ).then( ( record ) => {\n\t\t\tassert.propEqual(\n\t\t\t\trecord.scenarios[ 0 ].runs,\n\t\t\t\t[\n\t\t\t\t\t{ testprobe: { value: null } },\n\t\t\t\t\t{ testprobe: { value: null } }\n\t\t\t\t],\n\t\t\t\t'results'\n\t\t\t);\n\t\t} );\n\t} );\n\n\tQUnit.test( 'record() - result', ( assert ) => {\n\t\tprocess.env.TEST_FIXTUREURL = fileUrl( path.join( __dirname, 'fixtures' ) );\n\t\tconst config = {\n\t\t\twarmup: false,\n\t\t\truns: 1,\n\t\t\tscenarios: [ {\n\t\t\t\turl: '{TEST_FIXTUREURL}/basic/one.html',\n\t\t\t\tviewport: { width: 800, height: 600 },\n\t\t\t\treports: [ 'navtiming', 'paint' ],\n\t\t\t\tprobes: [ 'screenshot', 'trace' ]\n\t\t\t} ]\n\t\t};\n\n\t\treturn conductor.record( config, tmpDir, 'default' ).then( ( record ) => {\n\n\t\t\tconst expected = require( './fixtures/basic-records/one/record.json' );\n\t\t\tassert.propEqual( record, expected, 'record' );\n\t\t} );\n\t} );\n\n\tQUnit.test( 'compare()', ( assert ) => {\n\t\tconst outputDir = path.join( __dirname, 'fixtures/compare-records' );\n\n\t\treturn conductor.compare( outputDir, 'one', 'two' ).then( ( compared ) => {\n\n\t\t\tconst expected = require( './fixtures/compare.json' );\n\t\t\tassert.propEqual( compared.result, expected, 'result' );\n\t\t} );\n\t} );\n} );\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/fixtures/basic-records/one/record.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/fixtures/basic/.fresnel.yml","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/fixtures/compare-records/one/record.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/fixtures/compare-records/two/record.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/fixtures/compare.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/fixtures/transfer-records/after/record.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/fixtures/transfer-records/before/record.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/is.unit.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/printer.unit.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/probes.e2e.js","messages":[{"ruleId":"es-x/no-arraybuffer-prototype-transfer","severity":2,"message":"ES2024 'ArrayBuffer.prototype.transfer' method is forbidden.","line":44,"column":5,"nodeType":"MemberExpression","messageId":"forbidden","endLine":44,"endColumn":44},{"ruleId":"es-x/no-arraybuffer-prototype-transfer","severity":2,"message":"ES2024 'ArrayBuffer.prototype.transfer' method is forbidden.","line":63,"column":10,"nodeType":"MemberExpression","messageId":"forbidden","endLine":63,"endColumn":39}],"suppressedMessages":[],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n/**\n * End-to-end test for `conductor`.\n */\n\nconst fs = require( 'fs' );\nconst path = require( 'path' );\n\nconst conductor = require( '../src/conductor' );\nconst fileUrl = require( './util/file-url' );\nconst mktmpdir = require( './util/tmpdir' );\n\nfunction map( obj, fn ) {\n\tconst derived = {};\n\tfor ( const key in obj ) {\n\t\tderived[ key ] = fn( obj[ key ] );\n\t}\n\treturn derived;\n}\n\nQUnit.module( 'e2e/probes', ( hooks ) => {\n\tlet tmpDir;\n\thooks.beforeEach( () => {\n\t\ttmpDir = mktmpdir( 'fresnel_test' );\n\t} );\n\thooks.afterEach( () => {\n\t\tfs.rmSync( tmpDir, { force: true, recursive: true } );\n\t} );\n\n\tQUnit.test( 'transfer - record', ( assert ) => {\n\t\tconst file = path.join( __dirname, 'fixtures/basic/one.html' );\n\t\tconst config = {\n\t\t\twarmup: false,\n\t\t\truns: 1,\n\t\t\tscenarios: [ {\n\t\t\t\turl: fileUrl( file ),\n\t\t\t\tviewport: { width: 800, height: 600 },\n\t\t\t\treports: [ 'transfer' ]\n\t\t\t} ]\n\t\t};\n\n\t\treturn conductor.record( config, tmpDir, 'default' ).then( ( record ) => {\n\t\t\tassert.propEqual(\n\t\t\t\trecord.scenarios[ 0 ].analysed.transfer,\n\t\t\t\t{\n\t\t\t\t\tpageWeight: { mean: 116208, stdev: 0, values: [ 116208 ] },\n\t\t\t\t\thtml: { mean: 5900, stdev: 0, values: [ 5900 ] },\n\t\t\t\t\tcss: { mean: 315, stdev: 0, values: [ 315 ] },\n\t\t\t\t\tjs: { mean: 35797, stdev: 0, values: [ 35797 ] },\n\t\t\t\t\timg: { mean: 53286, stdev: 0, values: [ 53286 ] },\n\t\t\t\t\tother: { mean: 20910, stdev: 0, values: [ 20910 ] }\n\t\t\t\t},\n\t\t\t\t'analysed.transfer'\n\t\t\t);\n\t\t} );\n\t} );\n\n\tQUnit.test( 'transfer - compare', ( assert ) => {\n\t\tconst outputDir = path.join( __dirname, 'fixtures/transfer-records' );\n\n\t\treturn conductor.compare( outputDir, 'before', 'after' ).then( ( compared ) => {\n\t\t\tassert.propEqual(\n\t\t\t\tmap( compared.result[ 0 ].transfer, ( obj ) => obj.diff ),\n\t\t\t\t{\n\t\t\t\t\tpageWeight: -150.10999999998603,\n\t\t\t\t\thtml: -76.63000000000011,\n\t\t\t\t\tcss: 0,\n\t\t\t\t\tjs: -70.35000000000582,\n\t\t\t\t\timg: 0,\n\t\t\t\t\tother: 0\n\t\t\t\t},\n\t\t\t\t'compared.transfer'\n\t\t\t);\n\t\t} );\n\t} );\n} );\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/util/file-url.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/util/tmpdir.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/test/writer.unit.js","messages":[{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":25,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":25,"endColumn":62},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":29,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":29,"endColumn":67}],"suppressedMessages":[],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n/**\n * Unit tests for `Writer`.\n */\n\nconst fs = require( 'fs' );\nconst path = require( 'path' );\n\nconst Writer = require( '../src/Writer' );\nconst mktmpdir = require( './util/tmpdir' );\n\nQUnit.module( 'writer', ( hooks ) => {\n\tlet testDir;\n\thooks.beforeEach( () => {\n\t\ttestDir = mktmpdir( 'fresnel_test' );\n\t} );\n\thooks.afterEach( () => {\n\t\tfs.rmSync( testDir, { force: true, recursive: true } );\n\t} );\n\n\tQUnit.test( 'Writer#constructor()', ( assert ) => {\n\t\t// Accept\n\t\t{\n\t\t\tconst writer = new Writer( testDir );\n\t\t\tassert.ok( writer instanceof Writer, 'new sub directory' );\n\t\t}\n\t\t{\n\t\t\tconst writer = new Writer( testDir );\n\t\t\tassert.ok( writer instanceof Writer, 'pre-existing directory' );\n\t\t}\n\n\t\t// Reject\n\t\t{\n\t\t\tassert.throws( () => new Writer( path.join( testDir, 'missing/parent' ) ), 'two levels away from pre-existing directory' );\n\t\t}\n\t} );\n\n\tQUnit.test( 'Writer#child()', ( assert ) => {\n\t\tconst writer = new Writer( testDir );\n\n\t\t// Accept: three chained child directories\n\t\twriter.child( 'aa' ).child( 'bb' ).child( 'cc' );\n\t\t// This Node.js API throws if the path is not found\n\t\tfs.accessSync( path.join( testDir, 'aa/bb/cc' ) );\n\n\t\t// Reject\n\t\tassert.throws( () => {\n\t\t\twriter.child( '' );\n\t\t}, 'empty string as name' );\n\n\t\tassert.throws( () => {\n\t\t\twriter.child( 'aa/bb' );\n\t\t}, 'traversing name' );\n\n\t\tassert.throws( () => {\n\t\t\twriter.child( '..' );\n\t\t}, 'only dots as name' );\n\t} );\n\n\tQUnit.test( 'Writer#prefix()', ( assert ) => {\n\t\tconst writer = new Writer( testDir );\n\n\t\t// Accept: Create child with prefix\n\t\twriter.prefix( 'aa-' ).child( 'bb' );\n\t\tfs.accessSync( path.join( testDir, 'aa-bb' ) );\n\n\t\tassert.expect( 0 );\n\t} );\n} );\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]}]

--- end ---
Disabling eslint rule 'n/no-process-exit' (broken in .eslintrc.json) on .eslintrc.json
Disabling eslint rule 'es-x/no-arraybuffer-prototype-transfer' (broken in .eslintrc.json) on .eslintrc.json
Disabling eslint rule 'n/no-unsupported-features/node-builtins' (broken in .eslintrc.json) on .eslintrc.json
Disabling eslint rule 'n/no-unsupported-features/node-builtins' (broken in .eslintrc.json) on .eslintrc.json
Disabling eslint rule 'n/no-unsupported-features/node-builtins' (broken in .eslintrc.json) on .eslintrc.json
Disabling eslint rule 'es-x/no-arraybuffer-prototype-transfer' (broken in .eslintrc.json) on .eslintrc.json
Disabling eslint rule 'es-x/no-arraybuffer-prototype-transfer' (broken in .eslintrc.json) on .eslintrc.json
Disabling eslint rule 'n/no-unsupported-features/node-builtins' (broken in test/.eslintrc.json) on test/.eslintrc.json
Disabling eslint rule 'es-x/no-arraybuffer-prototype-transfer' (broken in test/.eslintrc.json) on test/.eslintrc.json
Disabling eslint rule 'qunit/no-loose-assertions' (broken in test/.eslintrc.json) on test/.eslintrc.json
$ /usr/bin/npm i --package-lock-only
--- stdout ---

up to date, audited 466 packages in 938ms

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

7 vulnerabilities (5 high, 2 critical)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

--- end ---
Editing .gitignore to remove package-lock.json
$ /usr/bin/npm ci
--- stderr ---
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 465 packages, and audited 466 packages in 15s

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

7 vulnerabilities (5 high, 2 critical)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stdout ---

> fresnel@1.1.1 test
> nyc qunit && eslint . && npm run doc

TAP version 13
ok 1 writer > get()
ok 2 e2e/cli > record
ok 3 e2e/cli > compare - forward
ok 4 e2e/cli > compare - backward
ok 5 e2e/cli > record - error
ok 6 e2e/cli > compare - error
ok 7 e2e/cli > help
ok 8 e2e/cli > help record
ok 9 e2e/cli > help compare
ok 10 e2e/cli > version
ok 11 e2e/cli > unknown command
ok 12 compute > stats()
ok 13 compute > diffStdev() - decrease
ok 14 compute > diffStdev() - increase
ok 15 compute > diffStdev() - unchanged
ok 16 compute > diffMannWhitney() - unchanged
ok 17 compute > diffMannWhitney() - increase
ok 18 compute > diffMannWhitney() - decrease
ok 19 compute > diffMannWhitney() - unchanged, tied ranks
ok 20 compute > diffMannWhitney() - increase, tied ranks
ok 21 compute > diffMannWhitney() - decrease, tied ranks
ok 22 compute > diffMannWhitney() - exactly the same
ok 23 e2e/conductor > record() - clean state per run
ok 24 e2e/conductor > record() - result
ok 25 e2e/conductor > compare()
ok 26 util/is > like() - single type
ok 27 util/is > like() - multi type
ok 28 util/is > like() - plain object
ok 29 util/is > config()
ok 30 printer > format()
ok 31 e2e/probes > transfer - record
ok 32 e2e/probes > transfer - compare
ok 33 writer > Writer#constructor()
ok 34 writer > Writer#child()
ok 35 writer > Writer#prefix()
1..35
# pass 35
# skip 0
# todo 0
# fail 0
----------------|---------|----------|---------|---------|-------------------
File            | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------------|---------|----------|---------|---------|-------------------
All files       |     100 |    94.92 |     100 |     100 |                   
 src            |     100 |    95.45 |     100 |     100 |                   
  cli.js        |     100 |     93.1 |     100 |     100 | 105,117           
  conductor.js  |     100 |    96.67 |     100 |     100 | 70                
  printer.js    |     100 |    95.74 |     100 |     100 | 51,106            
  recorder.js   |     100 |       75 |     100 |     100 | 83                
 src/reports    |     100 |    76.92 |     100 |     100 |                   
  transfer.js   |     100 |    76.92 |     100 |     100 | 30                
----------------|---------|----------|---------|---------|-------------------

/src/repo/bin/fresnel.js
  10:4  warning  Don't use process.exit(); throw an error instead  n/no-process-exit
  13:4  warning  Don't use process.exit(); throw an error instead  n/no-process-exit

/src/repo/src/Writer.js
  44:4  warning  Found mkdirSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/src/conductor.js
  200:2   warning  Found writeFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  222:16  warning  Found non-literal argument in require                                       security/detect-non-literal-require
  223:16  warning  Found non-literal argument in require                                       security/detect-non-literal-require

/src/repo/src/probes/index.js
  15:1  warning  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer

/src/repo/src/probes/navtiming.js
  13:17  warning  The 'performance' is still an experimental feature and is not supported until Node.js 16.0.0. The configured version range is '>=14.14.0'                   n/no-unsupported-features/node-builtins
  13:17  warning  The 'performance.getEntriesByType' is still an experimental feature and is not supported until Node.js 16.7.0. The configured version range is '>=14.14.0'  n/no-unsupported-features/node-builtins

/src/repo/src/probes/paint.js
  14:2  warning  The 'performance' is still an experimental feature and is not supported until Node.js 16.0.0. The configured version range is '>=14.14.0'                   n/no-unsupported-features/node-builtins
  14:2  warning  The 'performance.getEntriesByType' is still an experimental feature and is not supported until Node.js 16.7.0. The configured version range is '>=14.14.0'  n/no-unsupported-features/node-builtins

/src/repo/src/probes/transfer.js
  13:9   warning  The 'performance' is still an experimental feature and is not supported until Node.js 16.0.0. The configured version range is '>=14.14.0'                   n/no-unsupported-features/node-builtins
  13:9   warning  The 'performance.getEntriesByType' is still an experimental feature and is not supported until Node.js 16.7.0. The configured version range is '>=14.14.0'  n/no-unsupported-features/node-builtins
  14:12  warning  The 'performance' is still an experimental feature and is not supported until Node.js 16.0.0. The configured version range is '>=14.14.0'                   n/no-unsupported-features/node-builtins
  14:12  warning  The 'performance.getEntriesByType' is still an experimental feature and is not supported until Node.js 16.7.0. The configured version range is '>=14.14.0'  n/no-unsupported-features/node-builtins

/src/repo/src/reports/index.js
  13:1  warning  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer

/src/repo/src/reports/transfer.js
   94:5  warning  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer
  103:5  warning  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer
  111:5  warning  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer
  120:5  warning  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer
  128:5  warning  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer
  136:5  warning  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer

/src/repo/test/cli.e2e.js
  51:20  warning  Found non-literal argument in require  security/detect-non-literal-require

/src/repo/test/conductor.e2e.js
  33:15  warning  The 'localStorage' is still an experimental feature The configured version range is '>=14.14.0'  n/no-unsupported-features/node-builtins
  36:7   warning  The 'localStorage' is still an experimental feature The configured version range is '>=14.14.0'  n/no-unsupported-features/node-builtins

/src/repo/test/probes.e2e.js
  44:5   warning  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer
  63:10  warning  ES2024 'ArrayBuffer.prototype.transfer' method is forbidden  es-x/no-arraybuffer-prototype-transfer

/src/repo/test/writer.unit.js
  25:4  warning  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  29:4  warning  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

✖ 29 problems (0 errors, 29 warnings)


> fresnel@1.1.1 doc
> jsdoc2md --template build/api.partial.hbs src/*.js src/**/*.js > API.md


--- end ---
$ /usr/bin/npm i --package-lock-only
--- stdout ---

up to date, audited 466 packages in 864ms

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

7 vulnerabilities (5 high, 2 critical)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

--- end ---
Editing .gitignore to remove package-lock.json
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@babel/traverse": {
      "name": "@babel/traverse",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1096886,
          "name": "@babel/traverse",
          "dependency": "@babel/traverse",
          "title": "Babel vulnerable to arbitrary code execution when compiling specifically crafted malicious code",
          "url": "https://github.com/advisories/GHSA-67hx-6x53-jw92",
          "severity": "critical",
          "cwe": [
            "CWE-184",
            "CWE-697"
          ],
          "cvss": {
            "score": 9.4,
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"
          },
          "range": "<7.23.2"
        }
      ],
      "effects": [],
      "range": "<7.23.2",
      "nodes": [
        "node_modules/@babel/traverse"
      ],
      "fixAvailable": true
    },
    "jsdoc-parse": {
      "name": "jsdoc-parse",
      "severity": "high",
      "isDirect": false,
      "via": [
        "lodash.pick"
      ],
      "effects": [],
      "range": "2.0.2 - 6.2.0",
      "nodes": [
        "node_modules/jsdoc-parse"
      ],
      "fixAvailable": true
    },
    "json5": {
      "name": "json5",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1096544,
          "name": "json5",
          "dependency": "json5",
          "title": "Prototype Pollution in JSON5 via Parse Method",
          "url": "https://github.com/advisories/GHSA-9c47-m6qq-7p4h",
          "severity": "high",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 7.1,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:L/A:H"
          },
          "range": ">=2.0.0 <2.2.2"
        }
      ],
      "effects": [],
      "range": "2.0.0 - 2.2.1",
      "nodes": [
        "node_modules/json5"
      ],
      "fixAvailable": true
    },
    "lodash.pick": {
      "name": "lodash.pick",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1096303,
          "name": "lodash.pick",
          "dependency": "lodash.pick",
          "title": "Prototype Pollution in lodash",
          "url": "https://github.com/advisories/GHSA-p6mc-m468-83gw",
          "severity": "high",
          "cwe": [
            "CWE-770",
            "CWE-1321"
          ],
          "cvss": {
            "score": 7.4,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H"
          },
          "range": ">=4.0.0 <=4.4.0"
        }
      ],
      "effects": [
        "jsdoc-parse"
      ],
      "range": ">=4.0.0",
      "nodes": [
        "node_modules/lodash.pick"
      ],
      "fixAvailable": true
    },
    "minimist": {
      "name": "minimist",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1097678,
          "name": "minimist",
          "dependency": "minimist",
          "title": "Prototype Pollution in minimist",
          "url": "https://github.com/advisories/GHSA-xvch-5gv4-984h",
          "severity": "critical",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 9.8,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": ">=1.0.0 <1.2.6"
        }
      ],
      "effects": [],
      "range": "1.0.0 - 1.2.5",
      "nodes": [
        "node_modules/minimist"
      ],
      "fixAvailable": true
    },
    "node-fetch": {
      "name": "node-fetch",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1095073,
          "name": "node-fetch",
          "dependency": "node-fetch",
          "title": "node-fetch forwards secure headers to untrusted sites",
          "url": "https://github.com/advisories/GHSA-r683-j2x4-v87g",
          "severity": "high",
          "cwe": [
            "CWE-173",
            "CWE-200",
            "CWE-601"
          ],
          "cvss": {
            "score": 8.8,
            "vectorString": "CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": "<2.6.7"
        }
      ],
      "effects": [],
      "range": "<2.6.7",
      "nodes": [
        "node_modules/node-fetch"
      ],
      "fixAvailable": true
    },
    "ws": {
      "name": "ws",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1098393,
          "name": "ws",
          "dependency": "ws",
          "title": "ws affected by a DoS when handling a request with many HTTP headers",
          "url": "https://github.com/advisories/GHSA-3h5v-q93c-6h6q",
          "severity": "high",
          "cwe": [
            "CWE-476"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=7.0.0 <7.5.10"
        }
      ],
      "effects": [],
      "range": "7.0.0 - 7.5.9",
      "nodes": [
        "node_modules/ws"
      ],
      "fixAvailable": true
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 5,
      "critical": 2,
      "total": 7
    },
    "dependencies": {
      "prod": 58,
      "dev": 406,
      "optional": 3,
      "peer": 1,
      "peerOptional": 0,
      "total": 465
    }
  }
}

--- end ---
Attempting to npm audit fix
Traceback (most recent call last):
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/__init__.py", line 1864, in main
    libup.run(args.repo, args.output, args.branch)
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/__init__.py", line 1809, in run
    self.npm_audit_fix(new_npm_audit)
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/__init__.py", line 209, in npm_audit_fix
    prior_lock = PackageLockJson()
                 ^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/files.py", line 86, in __init__
    self.data = load_ordered_json(self.fname)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/files.py", line 33, in load_ordered_json
    with open(fname) as f:
         ^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'package-lock.json'
Source code is licensed under the AGPL.