This run took 67 seconds.
$ date --- stdout --- Mon Nov 11 04:27:20 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 1s 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 911ms 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 14s 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 897ms 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'