This run took 224 seconds.
From 39fc226877768e381946ada48cda8575b8b1edb0 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Tue, 5 May 2026 06:40:56 +0000
Subject: [PATCH] build: Updating npm dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* eslint-config-wikimedia: 0.32.3 → 0.32.4
* axios: 1.15.0 → 1.16.0
* https://github.com/advisories/GHSA-3w6x-2g7m-8v23
* https://github.com/advisories/GHSA-445q-vr5w-6q77
* https://github.com/advisories/GHSA-5c9x-8gcm-mpgx
* https://github.com/advisories/GHSA-62hf-57xw-28j9
* https://github.com/advisories/GHSA-6chq-wfr3-2hj9
* https://github.com/advisories/GHSA-m7pr-hjqh-92cm
* https://github.com/advisories/GHSA-pf86-5x62-jrwf
* https://github.com/advisories/GHSA-pmwg-cvhr-8vh7
* https://github.com/advisories/GHSA-q8qp-cvcw-x6jj
* https://github.com/advisories/GHSA-vf2m-468p-8v99
* https://github.com/advisories/GHSA-w9j2-pvgh-6h63
* https://github.com/advisories/GHSA-xhjh-pmcv-23jw
* https://github.com/advisories/GHSA-xx6v-rp6x-q39c
Change-Id: I963742e488b8e92d0d1c0e2d88a8e04b7b66297b
---
package-lock.json | 472 ++++++++++++++++++++++++----------------------
package.json | 2 +-
2 files changed, 245 insertions(+), 229 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 0f2aa8e..cae76b0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -34,7 +34,7 @@
"ajv-formats": "^2.1.1",
"csv-parse": "^5.5.3",
"eslint": "8.57.0",
- "eslint-config-wikimedia": "0.32.3",
+ "eslint-config-wikimedia": "0.32.4",
"eslint-plugin-n": "^16.6.2",
"extend": "^3.0.2",
"mocha": "^10.3.0",
@@ -360,19 +360,32 @@
}
},
"node_modules/@es-joy/jsdoccomment": {
- "version": "0.76.0",
- "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.76.0.tgz",
- "integrity": "sha512-g+RihtzFgGTx2WYCuTHbdOXJeAlGnROws0TeALx9ow/ZmOROOZkVg5wp/B44n0WJgI4SQFP1eWM2iRPlU2Y14w==",
+ "version": "0.86.0",
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.86.0.tgz",
+ "integrity": "sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==",
"dev": true,
"dependencies": {
"@types/estree": "^1.0.8",
- "@typescript-eslint/types": "^8.46.0",
- "comment-parser": "1.4.1",
- "esquery": "^1.6.0",
- "jsdoc-type-pratt-parser": "~6.10.0"
+ "@typescript-eslint/types": "^8.58.0",
+ "comment-parser": "1.4.6",
+ "esquery": "^1.7.0",
+ "jsdoc-type-pratt-parser": "~7.2.0"
},
"engines": {
- "node": ">=20.11.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ }
+ },
+ "node_modules/@es-joy/jsdoccomment/node_modules/@typescript-eslint/types": {
+ "version": "8.59.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.2.tgz",
+ "integrity": "sha512-e82GVOE8Ps3E++Egvb6Y3Dw0S10u8NkQ9KXmtRhCWJJ8kDhOJTvtMAWnFL16kB1583goCWXsr0NieKCZMs2/0Q==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
"node_modules/@es-joy/resolve.exports": {
@@ -385,9 +398,9 @@
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
- "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
"dev": true,
"dependencies": {
"eslint-visitor-keys": "^3.4.3"
@@ -403,9 +416,9 @@
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
- "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
"dev": true,
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -703,9 +716,9 @@
}
},
"node_modules/@mdn/browser-compat-data": {
- "version": "5.7.6",
- "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.7.6.tgz",
- "integrity": "sha512-7xdrMX0Wk7grrTZQwAoy1GkvPMFoizStUoL+VmtUkAxegbCCec+3FKwOM6yc/uGU5+BEczQHXAlWiqvM8JeENg==",
+ "version": "6.1.5",
+ "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-6.1.5.tgz",
+ "integrity": "sha512-PzdZZzRhcXvKB0begee28n5lvwAcinGKYuLZOVxHAZm+n7y01ddEGfdS1ZXRuVcV+ndG6mSEAE8vgudom5UjYg==",
"dev": true
},
"node_modules/@nodelib/fs.scandir": {
@@ -878,20 +891,19 @@
"dev": true
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.0.tgz",
- "integrity": "sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz",
+ "integrity": "sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==",
"dev": true,
"dependencies": {
- "@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.46.0",
- "@typescript-eslint/type-utils": "8.46.0",
- "@typescript-eslint/utils": "8.46.0",
- "@typescript-eslint/visitor-keys": "8.46.0",
- "graphemer": "^1.4.0",
- "ignore": "^7.0.0",
+ "@eslint-community/regexpp": "^4.12.2",
+ "@typescript-eslint/scope-manager": "8.54.0",
+ "@typescript-eslint/type-utils": "8.54.0",
+ "@typescript-eslint/utils": "8.54.0",
+ "@typescript-eslint/visitor-keys": "8.54.0",
+ "ignore": "^7.0.5",
"natural-compare": "^1.4.0",
- "ts-api-utils": "^2.1.0"
+ "ts-api-utils": "^2.4.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -901,7 +913,7 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.46.0",
+ "@typescript-eslint/parser": "^8.54.0",
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
@@ -916,16 +928,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.0.tgz",
- "integrity": "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.54.0.tgz",
+ "integrity": "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "8.46.0",
- "@typescript-eslint/types": "8.46.0",
- "@typescript-eslint/typescript-estree": "8.46.0",
- "@typescript-eslint/visitor-keys": "8.46.0",
- "debug": "^4.3.4"
+ "@typescript-eslint/scope-manager": "8.54.0",
+ "@typescript-eslint/types": "8.54.0",
+ "@typescript-eslint/typescript-estree": "8.54.0",
+ "@typescript-eslint/visitor-keys": "8.54.0",
+ "debug": "^4.4.3"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -963,14 +975,14 @@
"dev": true
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.0.tgz",
- "integrity": "sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.54.0.tgz",
+ "integrity": "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==",
"dev": true,
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.46.0",
- "@typescript-eslint/types": "^8.46.0",
- "debug": "^4.3.4"
+ "@typescript-eslint/tsconfig-utils": "^8.54.0",
+ "@typescript-eslint/types": "^8.54.0",
+ "debug": "^4.4.3"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1007,13 +1019,13 @@
"dev": true
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz",
- "integrity": "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz",
+ "integrity": "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "8.46.0",
- "@typescript-eslint/visitor-keys": "8.46.0"
+ "@typescript-eslint/types": "8.54.0",
+ "@typescript-eslint/visitor-keys": "8.54.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1024,9 +1036,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz",
- "integrity": "sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz",
+ "integrity": "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==",
"dev": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1040,16 +1052,16 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.0.tgz",
- "integrity": "sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.54.0.tgz",
+ "integrity": "sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "8.46.0",
- "@typescript-eslint/typescript-estree": "8.46.0",
- "@typescript-eslint/utils": "8.46.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^2.1.0"
+ "@typescript-eslint/types": "8.54.0",
+ "@typescript-eslint/typescript-estree": "8.54.0",
+ "@typescript-eslint/utils": "8.54.0",
+ "debug": "^4.4.3",
+ "ts-api-utils": "^2.4.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1087,9 +1099,9 @@
"dev": true
},
"node_modules/@typescript-eslint/types": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.0.tgz",
- "integrity": "sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.54.0.tgz",
+ "integrity": "sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==",
"dev": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1100,21 +1112,20 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz",
- "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz",
+ "integrity": "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/project-service": "8.46.0",
- "@typescript-eslint/tsconfig-utils": "8.46.0",
- "@typescript-eslint/types": "8.46.0",
- "@typescript-eslint/visitor-keys": "8.46.0",
- "debug": "^4.3.4",
- "fast-glob": "^3.3.2",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^2.1.0"
+ "@typescript-eslint/project-service": "8.54.0",
+ "@typescript-eslint/tsconfig-utils": "8.54.0",
+ "@typescript-eslint/types": "8.54.0",
+ "@typescript-eslint/visitor-keys": "8.54.0",
+ "debug": "^4.4.3",
+ "minimatch": "^9.0.5",
+ "semver": "^7.7.3",
+ "tinyglobby": "^0.2.15",
+ "ts-api-utils": "^2.4.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1175,15 +1186,15 @@
"dev": true
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.0.tgz",
- "integrity": "sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.54.0.tgz",
+ "integrity": "sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==",
"dev": true,
"dependencies": {
- "@eslint-community/eslint-utils": "^4.7.0",
- "@typescript-eslint/scope-manager": "8.46.0",
- "@typescript-eslint/types": "8.46.0",
- "@typescript-eslint/typescript-estree": "8.46.0"
+ "@eslint-community/eslint-utils": "^4.9.1",
+ "@typescript-eslint/scope-manager": "8.54.0",
+ "@typescript-eslint/types": "8.54.0",
+ "@typescript-eslint/typescript-estree": "8.54.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1198,12 +1209,12 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz",
- "integrity": "sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz",
+ "integrity": "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "8.46.0",
+ "@typescript-eslint/types": "8.54.0",
"eslint-visitor-keys": "^4.2.1"
},
"engines": {
@@ -1253,9 +1264,9 @@
}
},
"node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -1430,6 +1441,12 @@
"@mdn/browser-compat-data": "^5.6.19"
}
},
+ "node_modules/ast-metadata-inferer/node_modules/@mdn/browser-compat-data": {
+ "version": "5.7.6",
+ "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.7.6.tgz",
+ "integrity": "sha512-7xdrMX0Wk7grrTZQwAoy1GkvPMFoizStUoL+VmtUkAxegbCCec+3FKwOM6yc/uGU5+BEczQHXAlWiqvM8JeENg==",
+ "dev": true
+ },
"node_modules/async": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
@@ -1454,11 +1471,11 @@
"integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw=="
},
"node_modules/axios": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
- "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz",
+ "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==",
"dependencies": {
- "follow-redirects": "^1.15.11",
+ "follow-redirects": "^1.16.0",
"form-data": "^4.0.5",
"proxy-from-env": "^2.1.0"
}
@@ -1968,9 +1985,9 @@
}
},
"node_modules/comment-parser": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz",
- "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
+ "version": "1.4.6",
+ "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.6.tgz",
+ "integrity": "sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==",
"dev": true,
"engines": {
"node": ">= 12.0.0"
@@ -2305,13 +2322,13 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.18.3",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz",
- "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==",
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz",
+ "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
+ "tapable": "^2.3.3"
},
"engines": {
"node": ">=10.13.0"
@@ -2479,34 +2496,36 @@
}
},
"node_modules/eslint-config-wikimedia": {
- "version": "0.32.3",
- "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.32.3.tgz",
- "integrity": "sha512-Ekz2/ozpCCjQl3VbC6dW7ChqoW7FRilLDxmJ+FJOZhIxxzZSZR5QqQOAGWSZAlG1ONkZbYV/TPwGLWZcrNxyaA==",
+ "version": "0.32.4",
+ "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.32.4.tgz",
+ "integrity": "sha512-zcHJYss2vo8HK5PzkFuaV9mzaSGRuhA+jFGoQ4rNIwWz0usZsuQ2LYpkKxrbCVX1CbV0PzG+jJ6p0cLI+G37JQ==",
"dev": true,
"dependencies": {
"@stylistic/eslint-plugin": "^3.1.0",
- "@typescript-eslint/eslint-plugin": "8.46.0",
- "@typescript-eslint/parser": "8.46.0",
+ "@typescript-eslint/eslint-plugin": "8.54.0",
+ "@typescript-eslint/parser": "8.54.0",
"browserslist-config-wikimedia": "^0.7.0",
- "eslint": "^8.57.0",
- "eslint-plugin-compat": "^6.0.2",
+ "eslint-plugin-compat": "^6.1.0",
"eslint-plugin-es-x": "^8.7.0",
- "eslint-plugin-jest": "^29.0.1",
- "eslint-plugin-jsdoc": "61.3.0",
+ "eslint-plugin-jest": "^29.12.2",
+ "eslint-plugin-jsdoc": "^62.9.0",
"eslint-plugin-json-es": "^1.6.0",
- "eslint-plugin-mediawiki": "^0.8.2",
+ "eslint-plugin-mediawiki": "^0.8.3",
"eslint-plugin-mocha": "^10.5.0",
- "eslint-plugin-n": "^17.23.1",
- "eslint-plugin-no-jquery": "^3.1.1",
- "eslint-plugin-qunit": "^8.2.5",
- "eslint-plugin-security": "^3.0.1",
+ "eslint-plugin-n": "^17.24.0",
+ "eslint-plugin-no-jquery": "^4.0.0",
+ "eslint-plugin-qunit": "^8.2.6",
+ "eslint-plugin-security": "^4.0.0",
"eslint-plugin-unicorn": "^56.0.1",
"eslint-plugin-vue": "^9.33.0",
- "eslint-plugin-wdio": "^9.16.2",
+ "eslint-plugin-wdio": "9.23.0",
"eslint-plugin-yml": "^1.19.0"
},
"engines": {
"node": ">=20 <25"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0"
}
},
"node_modules/eslint-config-wikimedia/node_modules/eslint-plugin-es-x": {
@@ -2546,9 +2565,9 @@
}
},
"node_modules/eslint-config-wikimedia/node_modules/eslint-plugin-n": {
- "version": "17.23.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.23.1.tgz",
- "integrity": "sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==",
+ "version": "17.24.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.24.0.tgz",
+ "integrity": "sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.5.0",
@@ -2605,15 +2624,14 @@
}
},
"node_modules/eslint-plugin-compat": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-6.0.2.tgz",
- "integrity": "sha512-1ME+YfJjmOz1blH0nPZpHgjMGK4kjgEeoYqGCqoBPQ/mGu/dJzdoP0f1C8H2jcWZjzhZjAMccbM/VdXhPORIfA==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-6.2.1.tgz",
+ "integrity": "sha512-gLKqUH+lQcCL+HzsROUjBDvakc5Zaga51Y4ZAkPCXc41pzKBfyluqTr2j8zOx8QQQb7zyglu1LVoL5aSNWf2SQ==",
"dev": true,
"dependencies": {
- "@mdn/browser-compat-data": "^5.5.35",
+ "@mdn/browser-compat-data": "^6.1.1",
"ast-metadata-inferer": "^0.8.1",
- "browserslist": "^4.24.2",
- "caniuse-lite": "^1.0.30001687",
+ "browserslist": "^4.25.2",
"find-up": "^5.0.0",
"globals": "^15.7.0",
"lodash.memoize": "^4.1.2",
@@ -2623,7 +2641,7 @@
"node": ">=18.x"
},
"peerDependencies": {
- "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0"
+ "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0"
}
},
"node_modules/eslint-plugin-compat/node_modules/globals": {
@@ -2689,31 +2707,31 @@
}
},
"node_modules/eslint-plugin-jsdoc": {
- "version": "61.3.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-61.3.0.tgz",
- "integrity": "sha512-E4m/5J5lrasd63Z74q4CCZ4PFnywnnrcvA7zZ98802NPhrZKKTp5NH+XAT+afcjXp2ps2/OQF5gPSWCT2XFCJg==",
+ "version": "62.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-62.9.0.tgz",
+ "integrity": "sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==",
"dev": true,
"dependencies": {
- "@es-joy/jsdoccomment": "~0.76.0",
+ "@es-joy/jsdoccomment": "~0.86.0",
"@es-joy/resolve.exports": "1.2.0",
"are-docs-informative": "^0.0.2",
- "comment-parser": "1.4.1",
+ "comment-parser": "1.4.6",
"debug": "^4.4.3",
"escape-string-regexp": "^4.0.0",
- "espree": "^10.4.0",
- "esquery": "^1.6.0",
+ "espree": "^11.2.0",
+ "esquery": "^1.7.0",
"html-entities": "^2.6.0",
"object-deep-merge": "^2.0.0",
"parse-imports-exports": "^0.2.4",
- "semver": "^7.7.3",
+ "semver": "^7.7.4",
"spdx-expression-parse": "^4.0.0",
"to-valid-identifier": "^1.0.0"
},
"engines": {
- "node": ">=20.11.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
+ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0"
}
},
"node_modules/eslint-plugin-jsdoc/node_modules/debug": {
@@ -2734,29 +2752,29 @@
}
},
"node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
"dev": true,
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint-plugin-jsdoc/node_modules/espree": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
- "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz",
+ "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==",
"dev": true,
"dependencies": {
- "acorn": "^8.15.0",
+ "acorn": "^8.16.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.1"
+ "eslint-visitor-keys": "^5.0.1"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -2782,9 +2800,9 @@
}
},
"node_modules/eslint-plugin-mediawiki": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.8.2.tgz",
- "integrity": "sha512-ydYrpkzm8IVVDQA96QPF3HnFd2xjkIEh7gixD2gvOqUbUZF0p36LtpWXOFAlPWAvHLePWbNNTD5ovd3d4hEtog==",
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.8.3.tgz",
+ "integrity": "sha512-RQKZd40C1taMDk5N9+aFLEBGBB95RNG7Gc54EsJ8pHsJu8//nIdpxNFWPtQz6RNxz6pZUXBnMCxzkMOLM3Mm1w==",
"dev": true,
"dependencies": {
"upath": "^2.0.1"
@@ -2839,31 +2857,34 @@
}
},
"node_modules/eslint-plugin-no-jquery": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.1.1.tgz",
- "integrity": "sha512-LTLO3jH/Tjr1pmxCEqtV6qmt+OChv8La4fwgG470JRpgxyFF4NOzoC9CRy92GIWD3Yjl0qLEgPmD2FLQWcNEjg==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-4.0.0.tgz",
+ "integrity": "sha512-ZR631D3qIQfgjKOAcgvYa5cB8xdTvFXAD5MbK5x5WltLSwFxmGnoaTXNtnptFU7py07ALrIe5dZRYncu4RD/Ug==",
"dev": true,
"peerDependencies": {
- "eslint": ">=8.0.0"
+ "eslint": ">=8.0.0 <9.0.0"
}
},
"node_modules/eslint-plugin-qunit": {
- "version": "8.2.5",
- "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-8.2.5.tgz",
- "integrity": "sha512-qr7RJCYImKQjB+39q4q46i1l7p1V3joHzBE5CAYfxn5tfVFjrnjn/tw7q/kDyweU9kAIcLul0Dx/KWVUCb3BgA==",
+ "version": "8.2.6",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-8.2.6.tgz",
+ "integrity": "sha512-S1jC/DIW9J8VtNX4uG1vlf5FZVrfQFlcuiYmvTHR2IICUhubHqpWA5o+qS1tujh+81Gs39omKV2D4OXfbSJE5g==",
"dev": true,
"dependencies": {
- "eslint-utils": "^3.0.0",
+ "@eslint-community/eslint-utils": "^4.4.0",
"requireindex": "^1.2.0"
},
"engines": {
"node": "^16.0.0 || ^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=8.38.0"
}
},
"node_modules/eslint-plugin-security": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-3.0.1.tgz",
- "integrity": "sha512-XjVGBhtDZJfyuhIxnQ/WMm385RbX3DBu7H1J7HNNhmB2tnGxMeqVSnYv79oAj992ayvIBZghsymwkYFS6cGH4Q==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-4.0.0.tgz",
+ "integrity": "sha512-tfuQT8K/Li1ZxhFzyD8wPIKtlzZxqBcPr9q0jFMQ77wWAbKBVEhaMPVQRTMTvCMUDhwBe5vPVqQPwAGk/ASfxQ==",
"dev": true,
"dependencies": {
"safe-regex": "^2.1.1"
@@ -2943,9 +2964,9 @@
}
},
"node_modules/eslint-plugin-wdio": {
- "version": "9.16.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-9.16.2.tgz",
- "integrity": "sha512-qkqsPgxN70OnUPWMjmzJbSbvm2+Q087JIGss53/OFI4Y46xKlV5VLhLiYealaAibAiXmnfWKd0tERjZAzVL87A==",
+ "version": "9.23.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-9.23.0.tgz",
+ "integrity": "sha512-8tcpupzp2Qmv+uSfhzeHi42LVA9PyjkpMBPclSIkPxBfXpj4fMrejwAHu1PROh1OmJN1VQcGQUTWvSzyRcV2vA==",
"dev": true,
"engines": {
"node": ">=18.20.0"
@@ -3142,9 +3163,9 @@
}
},
"node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
"dev": true,
"dependencies": {
"estraverse": "^5.1.0"
@@ -3254,34 +3275,6 @@
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
- "node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -4383,9 +4376,9 @@
"integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
},
"node_modules/jsdoc-type-pratt-parser": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-6.10.0.tgz",
- "integrity": "sha512-+LexoTRyYui5iOhJGn13N9ZazL23nAHGkXsa1p/C8yeq79WRfLBag6ZZ0FQG2aRoc9yfo59JT9EYCQonOkHKkQ==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.2.0.tgz",
+ "integrity": "sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==",
"dev": true,
"engines": {
"node": ">=20.0.0"
@@ -4672,15 +4665,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
@@ -4689,19 +4673,6 @@
"node": ">= 0.6"
}
},
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
"node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
@@ -6427,9 +6398,9 @@
}
},
"node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"bin": {
"semver": "bin/semver.js"
},
@@ -6934,9 +6905,9 @@
}
},
"node_modules/tapable": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
- "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz",
+ "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==",
"dev": true,
"engines": {
"node": ">=6"
@@ -7022,6 +6993,51 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "node_modules/tinyglobby": {
+ "version": "0.2.16",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
+ "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
+ "dev": true,
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -7071,9 +7087,9 @@
}
},
"node_modules/ts-api-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
- "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
"dev": true,
"engines": {
"node": ">=18.12"
diff --git a/package.json b/package.json
index 28fecc4..3c70b22 100644
--- a/package.json
+++ b/package.json
@@ -64,7 +64,7 @@
"ajv-formats": "^2.1.1",
"csv-parse": "^5.5.3",
"eslint": "8.57.0",
- "eslint-config-wikimedia": "0.32.3",
+ "eslint-config-wikimedia": "0.32.4",
"eslint-plugin-n": "^16.6.2",
"extend": "^3.0.2",
"mocha": "^10.3.0",
--
2.47.3
$ date
--- stdout ---
Tue May 5 06:38:04 UTC 2026
--- end ---
$ git clone file:///srv/git/mediawiki-services-wikifeeds.git /src/repo --depth=1 -b master
--- stderr ---
Cloning into '/src/repo'...
--- stdout ---
--- end ---
$ git config user.name libraryupgrader
--- stdout ---
--- end ---
$ git config user.email tools.libraryupgrader@tools.wmflabs.org
--- stdout ---
--- end ---
$ git submodule update --init
--- stdout ---
--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.
--- end ---
$ git show-ref refs/heads/master
--- stdout ---
a895dc27c0e8dd849b93d590361995dd3b7708a6 refs/heads/master
--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
"auditReportVersion": 2,
"vulnerabilities": {
"axios": {
"name": "axios",
"severity": "high",
"isDirect": true,
"via": [
{
"source": 1117574,
"name": "axios",
"dependency": "axios",
"title": "Axios: Authentication Bypass via Prototype Pollution Gadget in `validateStatus` Merge Strategy",
"url": "https://github.com/advisories/GHSA-w9j2-pvgh-6h63",
"severity": "moderate",
"cwe": [
"CWE-287",
"CWE-1321"
],
"cvss": {
"score": 4.8,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117576,
"name": "axios",
"dependency": "axios",
"title": "Axios: Incomplete Fix for CVE-2025-62718 — NO_PROXY Protection Bypassed via RFC 1122 Loopback Subnet (127.0.0.0/8) in Axios 1.15.0",
"url": "https://github.com/advisories/GHSA-pmwg-cvhr-8vh7",
"severity": "high",
"cwe": [
"CWE-183",
"CWE-441",
"CWE-918"
],
"cvss": {
"score": 7.2,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117577,
"name": "axios",
"dependency": "axios",
"title": "Axios: Invisible JSON Response Tampering via Prototype Pollution Gadget in `parseReviver`",
"url": "https://github.com/advisories/GHSA-3w6x-2g7m-8v23",
"severity": "moderate",
"cwe": [
"CWE-915",
"CWE-1321"
],
"cvss": {
"score": 6.5,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:N"
},
"range": ">=1.0.0 <1.15.2"
},
{
"source": 1117578,
"name": "axios",
"dependency": "axios",
"title": "Axios has prototype pollution read-side gadgets in HTTP adapter that allow credential injection and request hijacking",
"url": "https://github.com/advisories/GHSA-q8qp-cvcw-x6jj",
"severity": "high",
"cwe": [
"CWE-1321"
],
"cvss": {
"score": 7.4,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"
},
"range": ">=1.0.0 <1.15.2"
},
{
"source": 1117580,
"name": "axios",
"dependency": "axios",
"title": "Axios: Null Byte Injection via Reverse-Encoding in AxiosURLSearchParams",
"url": "https://github.com/advisories/GHSA-xhjh-pmcv-23jw",
"severity": "low",
"cwe": [
"CWE-116",
"CWE-626"
],
"cvss": {
"score": 3.7,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117581,
"name": "axios",
"dependency": "axios",
"title": "Axios: CRLF Injection in multipart/form-data body via unsanitized blob.type in formDataToStream",
"url": "https://github.com/advisories/GHSA-445q-vr5w-6q77",
"severity": "moderate",
"cwe": [
"CWE-93"
],
"cvss": {
"score": 5.3,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117583,
"name": "axios",
"dependency": "axios",
"title": "Axios: no_proxy bypass via IP alias allows SSRF",
"url": "https://github.com/advisories/GHSA-m7pr-hjqh-92cm",
"severity": "moderate",
"cwe": [
"CWE-918"
],
"cvss": {
"score": 6.8,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117585,
"name": "axios",
"dependency": "axios",
"title": "Axios: unbounded recursion in toFormData causes DoS via deeply nested request data",
"url": "https://github.com/advisories/GHSA-62hf-57xw-28j9",
"severity": "moderate",
"cwe": [
"CWE-674"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117587,
"name": "axios",
"dependency": "axios",
"title": "Axios' HTTP adapter-streamed uploads bypass maxBodyLength when maxRedirects: 0",
"url": "https://github.com/advisories/GHSA-5c9x-8gcm-mpgx",
"severity": "moderate",
"cwe": [
"CWE-770"
],
"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.0 <1.15.1"
},
{
"source": 1117589,
"name": "axios",
"dependency": "axios",
"title": "Axios: HTTP adapter streamed responses bypass maxContentLength",
"url": "https://github.com/advisories/GHSA-vf2m-468p-8v99",
"severity": "moderate",
"cwe": [
"CWE-770"
],
"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.0 <1.15.1"
},
{
"source": 1117591,
"name": "axios",
"dependency": "axios",
"title": "Axios: Prototype Pollution Gadgets - Response Tampering, Data Exfiltration, and Request Hijacking",
"url": "https://github.com/advisories/GHSA-pf86-5x62-jrwf",
"severity": "high",
"cwe": [
"CWE-1321"
],
"cvss": {
"score": 7.4,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117593,
"name": "axios",
"dependency": "axios",
"title": "Axios: Header Injection via Prototype Pollution",
"url": "https://github.com/advisories/GHSA-6chq-wfr3-2hj9",
"severity": "high",
"cwe": [
"CWE-113",
"CWE-1321"
],
"cvss": {
"score": 7.4,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117595,
"name": "axios",
"dependency": "axios",
"title": "Axios: XSRF Token Cross-Origin Leakage via Prototype Pollution Gadget in `withXSRFToken` Boolean Coercion",
"url": "https://github.com/advisories/GHSA-xx6v-rp6x-q39c",
"severity": "moderate",
"cwe": [
"CWE-183",
"CWE-201"
],
"cvss": {
"score": 5.4,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
}
],
"effects": [],
"range": "1.0.0 - 1.15.1",
"nodes": [
"node_modules/axios"
],
"fixAvailable": true
},
"cross-spawn": {
"name": "cross-spawn",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1104663,
"name": "cross-spawn",
"dependency": "cross-spawn",
"title": "Regular Expression Denial of Service (ReDoS) in cross-spawn",
"url": "https://github.com/advisories/GHSA-3xgq-45jj-v275",
"severity": "high",
"cwe": [
"CWE-1333"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
},
"range": "<6.0.6"
}
],
"effects": [
"pre-commit"
],
"range": "<6.0.6",
"nodes": [
"node_modules/pre-commit/node_modules/cross-spawn"
],
"fixAvailable": {
"name": "pre-commit",
"version": "2.0.0",
"isSemVerMajor": true
}
},
"form-data": {
"name": "form-data",
"severity": "critical",
"isDirect": false,
"via": [
{
"source": 1109540,
"name": "form-data",
"dependency": "form-data",
"title": "form-data uses unsafe random function in form-data for choosing boundary",
"url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4",
"severity": "critical",
"cwe": [
"CWE-330"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<2.5.4"
}
],
"effects": [
"request"
],
"range": "<2.5.4",
"nodes": [
"node_modules/request/node_modules/form-data"
],
"fixAvailable": false
},
"istanbul-lib-processinfo": {
"name": "istanbul-lib-processinfo",
"severity": "moderate",
"isDirect": false,
"via": [
"uuid"
],
"effects": [
"nyc"
],
"range": "*",
"nodes": [
"node_modules/istanbul-lib-processinfo"
],
"fixAvailable": {
"name": "nyc",
"version": "14.1.1",
"isSemVerMajor": true
}
},
"limitation": {
"name": "limitation",
"severity": "moderate",
"isDirect": false,
"via": [
"wikimedia-kad-fork"
],
"effects": [
"service-runner"
],
"range": ">=0.2.3",
"nodes": [
"node_modules/limitation"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
},
"mocha": {
"name": "mocha",
"severity": "high",
"isDirect": true,
"via": [
"serialize-javascript"
],
"effects": [],
"range": "8.0.0 - 12.0.0-beta-2",
"nodes": [
"node_modules/mocha"
],
"fixAvailable": {
"name": "mocha",
"version": "7.2.0",
"isSemVerMajor": true
}
},
"ms": {
"name": "ms",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1109573,
"name": "ms",
"dependency": "ms",
"title": "Vercel ms Inefficient Regular Expression Complexity vulnerability",
"url": "https://github.com/advisories/GHSA-w9mr-4mfr-499f",
"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": "<2.0.0"
}
],
"effects": [
"wikimedia-kad-fork"
],
"range": "<2.0.0",
"nodes": [
"node_modules/wikimedia-kad-fork/node_modules/ms"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
},
"nyc": {
"name": "nyc",
"severity": "moderate",
"isDirect": true,
"via": [
"istanbul-lib-processinfo"
],
"effects": [],
"range": ">=15.0.0-alpha.0",
"nodes": [
"node_modules/nyc"
],
"fixAvailable": {
"name": "nyc",
"version": "14.1.1",
"isSemVerMajor": true
}
},
"pre-commit": {
"name": "pre-commit",
"severity": "high",
"isDirect": true,
"via": [
"cross-spawn"
],
"effects": [],
"range": "1.1.0 - 1.2.2",
"nodes": [
"node_modules/pre-commit"
],
"fixAvailable": {
"name": "pre-commit",
"version": "2.0.0",
"isSemVerMajor": true
}
},
"preq": {
"name": "preq",
"severity": "high",
"isDirect": true,
"via": [
"request",
"requestretry"
],
"effects": [],
"range": "*",
"nodes": [
"node_modules/preq"
],
"fixAvailable": false
},
"qs": {
"name": "qs",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1113719,
"name": "qs",
"dependency": "qs",
"title": "qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion",
"url": "https://github.com/advisories/GHSA-6rw7-vpxm-498p",
"severity": "moderate",
"cwe": [
"CWE-20"
],
"cvss": {
"score": 3.7,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L"
},
"range": "<6.14.1"
}
],
"effects": [
"request"
],
"range": "<6.14.1",
"nodes": [
"node_modules/request/node_modules/qs"
],
"fixAvailable": false
},
"request": {
"name": "request",
"severity": "critical",
"isDirect": false,
"via": [
{
"source": 1096727,
"name": "request",
"dependency": "request",
"title": "Server-Side Request Forgery in Request",
"url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
"severity": "moderate",
"cwe": [
"CWE-918"
],
"cvss": {
"score": 6.1,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
},
"range": "<=2.88.2"
},
"form-data",
"qs",
"tough-cookie",
"uuid"
],
"effects": [
"preq",
"requestretry"
],
"range": "*",
"nodes": [
"node_modules/request"
],
"fixAvailable": false
},
"requestretry": {
"name": "requestretry",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1090420,
"name": "requestretry",
"dependency": "requestretry",
"title": "Cookie exposure in requestretry",
"url": "https://github.com/advisories/GHSA-hjp8-2cm3-cc45",
"severity": "high",
"cwe": [
"CWE-200"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"
},
"range": "<7.0.0"
},
"request"
],
"effects": [
"preq"
],
"range": "<=7.1.0",
"nodes": [
"node_modules/requestretry"
],
"fixAvailable": false
},
"serialize-javascript": {
"name": "serialize-javascript",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1113686,
"name": "serialize-javascript",
"dependency": "serialize-javascript",
"title": "Serialize JavaScript is Vulnerable to RCE via RegExp.flags and Date.prototype.toISOString()",
"url": "https://github.com/advisories/GHSA-5c6j-r48x-rmvq",
"severity": "high",
"cwe": [
"CWE-96"
],
"cvss": {
"score": 8.1,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"
},
"range": "<=7.0.2"
},
{
"source": 1115723,
"name": "serialize-javascript",
"dependency": "serialize-javascript",
"title": "Serialize JavaScript has CPU Exhaustion Denial of Service via crafted array-like objects",
"url": "https://github.com/advisories/GHSA-qj8w-gfj5-8c6v",
"severity": "moderate",
"cwe": [
"CWE-400",
"CWE-834"
],
"cvss": {
"score": 5.9,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
},
"range": "<7.0.5"
}
],
"effects": [
"mocha"
],
"range": "<=7.0.4",
"nodes": [
"node_modules/serialize-javascript"
],
"fixAvailable": {
"name": "mocha",
"version": "7.2.0",
"isSemVerMajor": true
}
},
"service-runner": {
"name": "service-runner",
"severity": "high",
"isDirect": true,
"via": [
"limitation",
"tar"
],
"effects": [],
"range": ">=3.0.0",
"nodes": [
"node_modules/service-runner"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
},
"swagger-router": {
"name": "swagger-router",
"severity": "moderate",
"isDirect": true,
"via": [
"uuid"
],
"effects": [],
"range": ">=0.7.4",
"nodes": [
"node_modules/swagger-router"
],
"fixAvailable": {
"name": "swagger-router",
"version": "0.7.3",
"isSemVerMajor": true
}
},
"tar": {
"name": "tar",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1097493,
"name": "tar",
"dependency": "tar",
"title": "Denial of service while parsing a tar file due to lack of folders count validation",
"url": "https://github.com/advisories/GHSA-f5x3-32g6-xq36",
"severity": "moderate",
"cwe": [
"CWE-400"
],
"cvss": {
"score": 6.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H"
},
"range": "<6.2.1"
},
{
"source": 1112659,
"name": "tar",
"dependency": "tar",
"title": "node-tar Vulnerable to Arbitrary File Creation/Overwrite via Hardlink Path Traversal",
"url": "https://github.com/advisories/GHSA-34x7-hfp2-rc4v",
"severity": "high",
"cwe": [
"CWE-22",
"CWE-59"
],
"cvss": {
"score": 8.2,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:N"
},
"range": "<7.5.7"
},
{
"source": 1113300,
"name": "tar",
"dependency": "tar",
"title": "node-tar is Vulnerable to Arbitrary File Overwrite and Symlink Poisoning via Insufficient Path Sanitization",
"url": "https://github.com/advisories/GHSA-8qq5-rm4j-mr97",
"severity": "high",
"cwe": [
"CWE-22"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<=7.5.2"
},
{
"source": 1113375,
"name": "tar",
"dependency": "tar",
"title": "Arbitrary File Read/Write via Hardlink Target Escape Through Symlink Chain in node-tar Extraction",
"url": "https://github.com/advisories/GHSA-83g3-92jg-28cx",
"severity": "high",
"cwe": [
"CWE-22"
],
"cvss": {
"score": 7.1,
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N"
},
"range": "<7.5.8"
},
{
"source": 1114200,
"name": "tar",
"dependency": "tar",
"title": "tar has Hardlink Path Traversal via Drive-Relative Linkpath",
"url": "https://github.com/advisories/GHSA-qffp-2rhf-9h96",
"severity": "high",
"cwe": [
"CWE-22",
"CWE-59"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<=7.5.9"
},
{
"source": 1114302,
"name": "tar",
"dependency": "tar",
"title": "node-tar Symlink Path Traversal via Drive-Relative Linkpath",
"url": "https://github.com/advisories/GHSA-9ppj-qmqm-q256",
"severity": "high",
"cwe": [
"CWE-22"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<=7.5.10"
},
{
"source": 1114680,
"name": "tar",
"dependency": "tar",
"title": "Race Condition in node-tar Path Reservations via Unicode Ligature Collisions on macOS APFS",
"url": "https://github.com/advisories/GHSA-r6q2-hw4h-h46w",
"severity": "high",
"cwe": [
"CWE-176",
"CWE-367"
],
"cvss": {
"score": 8.8,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:H/A:L"
},
"range": "<=7.5.3"
}
],
"effects": [
"service-runner"
],
"range": "<=7.5.10",
"nodes": [
"node_modules/tar"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
},
"tough-cookie": {
"name": "tough-cookie",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1097682,
"name": "tough-cookie",
"dependency": "tough-cookie",
"title": "tough-cookie Prototype Pollution vulnerability",
"url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3",
"severity": "moderate",
"cwe": [
"CWE-1321"
],
"cvss": {
"score": 6.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
},
"range": "<4.1.3"
}
],
"effects": [
"request"
],
"range": "<4.1.3",
"nodes": [
"node_modules/tough-cookie"
],
"fixAvailable": false
},
"uuid": {
"name": "uuid",
"severity": "moderate",
"isDirect": true,
"via": [
{
"source": 1116970,
"name": "uuid",
"dependency": "uuid",
"title": "uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided",
"url": "https://github.com/advisories/GHSA-w5hq-g745-h8pq",
"severity": "moderate",
"cwe": [
"CWE-787",
"CWE-1285"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<14.0.0"
}
],
"effects": [
"istanbul-lib-processinfo",
"request",
"swagger-router"
],
"range": "<14.0.0",
"nodes": [
"node_modules/istanbul-lib-processinfo/node_modules/uuid",
"node_modules/request/node_modules/uuid",
"node_modules/swagger-router/node_modules/uuid",
"node_modules/uuid"
],
"fixAvailable": {
"name": "nyc",
"version": "14.1.1",
"isSemVerMajor": true
}
},
"wikimedia-kad-fork": {
"name": "wikimedia-kad-fork",
"severity": "moderate",
"isDirect": false,
"via": [
"ms"
],
"effects": [
"limitation"
],
"range": "*",
"nodes": [
"node_modules/wikimedia-kad-fork"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
}
},
"metadata": {
"vulnerabilities": {
"info": 0,
"low": 0,
"moderate": 9,
"high": 9,
"critical": 2,
"total": 20
},
"dependencies": {
"prod": 223,
"dev": 435,
"optional": 13,
"peer": 1,
"peerOptional": 0,
"total": 669
}
}
}
--- end ---
Upgrading n:eslint-config-wikimedia from 0.32.3 -> 0.32.4
$ /usr/bin/npm install
--- stderr ---
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated lodash.get@4.4.2: This package is deprecated. Use the optional chaining (?.) operator instead.
npm WARN deprecated kad-fs@0.0.4: This package is no longer maintained.
npm WARN deprecated rimraf@2.4.5: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated lodash.clone@4.5.0: This package is deprecated. Use structuredClone instead.
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated @humanwhocodes/config-array@0.11.14: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated kad-memstore@0.0.1: This package is no longer maintained.
npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@6.0.4: Glob versions prior to v9 are no longer supported
npm WARN deprecated preq@0.5.14: Deprecated as this is a wrapper around the deprecated request library. Preq can be replaced with fetch, which is available from Node 18 as an experimental feature.
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated eslint@8.57.0: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---
added 665 packages, and audited 666 packages in 10s
119 packages are looking for funding
run `npm fund` for details
20 vulnerabilities (9 moderate, 9 high, 2 critical)
To address issues that do not require attention, run:
npm audit fix
To address all issues possible (including breaking changes), run:
npm audit fix --force
Some issues need review, and may require choosing
a different dependency.
Run `npm audit` for details.
--- end ---
$ package-lock-lint /src/repo/package-lock.json
--- stdout ---
Checking /src/repo/package-lock.json
--- end ---
$ package-lock-lint /src/repo/package-lock.json
--- stdout ---
Checking /src/repo/package-lock.json
--- end ---
$ ./node_modules/.bin/eslint . --fix
--- stderr ---
[baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
--- stdout ---
/src/repo/.eslintrc.json
1:1 warning Use the global form of 'use strict' strict
/src/repo/app.js
20:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
64:37 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
136:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
138:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
150:31 warning Found non-literal argument in require security/detect-non-literal-require
197:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
198:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
236:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
/src/repo/etc/dyk-sites.js
19:5 warning Missing JSDoc @return declaration jsdoc/require-returns
/src/repo/etc/news-sites.js
4:1 warning At most one access-control tag may be present on a JSDoc block jsdoc/check-access
5:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
6:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
50:1 warning Syntax error in type: {Object.<string, NewsSite>} jsdoc/valid-types
/src/repo/lib/announcements.js
30:1 warning Expected this semicolon to be at the end of the previous line semi-style
34:1 warning This line has a length of 123. Maximum allowed is 100 max-len
51:1 warning This line has a length of 134. Maximum allowed is 100 max-len
84:1 warning This line has a length of 119. Maximum allowed is 100 max-len
86:1 warning This line has a length of 118. Maximum allowed is 100 max-len
135:1 warning This line has a length of 123. Maximum allowed is 100 max-len
/src/repo/lib/api-util.js
297:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
/src/repo/lib/did-you-know.js
20:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
21:1 warning Missing JSDoc @param "lang" type jsdoc/require-param-type
41:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
42:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
82:12 warning 'si' is already declared in the upper scope on line 8 column 7 no-shadow
97:20 warning 'result' is already declared in the upper scope on line 88 column 19 no-shadow
/src/repo/lib/featured.js
136:12 warning 'si' is already declared in the upper scope on line 12 column 7 no-shadow
/src/repo/lib/imageinfo.js
30:1 warning The type 'Bool' is undefined jsdoc/no-undefined-types
85:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
132:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
203:43 warning Array.prototype.map() expects a return value from arrow function array-callback-return
280:1 warning Syntax error in type: [type] jsdoc/valid-types
282:1 warning Syntax error in type: [type] jsdoc/valid-types
/src/repo/lib/most-read.js
81:1 warning At most one access-control tag may be present on a JSDoc block jsdoc/check-access
82:1 warning @public should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
83:1 warning @public should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
100:1 warning This line has a length of 122. Maximum allowed is 100 max-len
115:28 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
116:1 warning This line has a length of 112. Maximum allowed is 100 max-len
145:19 warning 'pageviews' is already declared in the upper scope on line 10 column 7 no-shadow
161:25 warning Array.prototype.map() expects a return value from arrow function array-callback-return
202:1 warning This line has a length of 148. Maximum allowed is 100 max-len
212:1 warning This line has a length of 113. Maximum allowed is 100 max-len
/src/repo/lib/news.js
15:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
73:12 warning 'si' is already declared in the upper scope on line 8 column 7 no-shadow
96:20 warning 'result' is already declared in the upper scope on line 80 column 19 no-shadow
/src/repo/lib/on-this-day.js
34:1 warning The type 'Integer' is undefined jsdoc/no-undefined-types
122:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
123:1 warning The type 'Integer' is undefined jsdoc/no-undefined-types
128:12 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
141:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
151:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
172:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
184:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
207:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
253:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
270:1 warning The type 'Integer' is undefined jsdoc/no-undefined-types
309:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
320:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
321:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
342:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
360:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
380:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
412:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
426:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
440:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
454:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
468:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
483:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
484:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
543:1 warning Missing JSDoc @param "sendResponse" type jsdoc/require-param-type
/src/repo/lib/on-this-day.languages.js
28:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
30:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
32:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
60:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
62:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
64:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
100:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
102:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
104:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
128:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
130:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
132:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
156:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
158:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
160:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
189:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
191:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
193:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
217:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
219:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
221:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
245:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
247:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
249:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
273:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
275:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
277:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
301:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
303:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
305:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
335:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
337:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
339:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
362:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
364:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
366:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
390:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
392:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
418:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
420:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
422:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
/src/repo/lib/pageviews.js
36:1 warning At most one access-control tag may be present on a JSDoc block jsdoc/check-access
37:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
38:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
39:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
53:1 warning The type 'Platform' is undefined jsdoc/no-undefined-types
54:1 warning The type 'Agent' is undefined jsdoc/no-undefined-types
56:1 warning The type 'Granularity' is undefined jsdoc/no-undefined-types
71:1 warning The type 'Platform' is undefined jsdoc/no-undefined-types
/src/repo/lib/random.js
38:9 warning 'score' is already declared in the upper scope on line 31 column 10 no-shadow
55:1 warning Missing JSDoc @param "scoredResults" type jsdoc/require-param-type
/src/repo/lib/siteinfo.js
3:1 warning Use the global form of 'use strict' strict
10:29 warning Unsafe Regular Expression security/detect-unsafe-regex
/src/repo/lib/util.js
104:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
142:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
222:1 warning The type 'Router' is undefined jsdoc/no-undefined-types
280:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
293:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
306:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
378:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
450:34 warning Default parameters should be last default-param-last
/src/repo/package-lock.json
1:1 warning Use the global form of 'use strict' strict
/src/repo/package.json
1:1 warning Use the global form of 'use strict' strict
/src/repo/scripts/check-featured-feed.js
49:35 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
82:44 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
107:34 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
150:30 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
217:5 warning Don't use process.exit(); throw an error instead n/no-process-exit
/src/repo/spec.yaml
1030:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1035:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1040:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1045:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1050:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1055:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1058:1 warning This line has a length of 112. Maximum allowed is 100 max-len
1107:1 warning This line has a length of 109. Maximum allowed is 100 max-len
1124:1 warning This line has a length of 126. Maximum allowed is 100 max-len
1125:1 warning This line has a length of 107. Maximum allowed is 100 max-len
1131:1 warning This line has a length of 132. Maximum allowed is 100 max-len
1138:1 warning This line has a length of 127. Maximum allowed is 100 max-len
1140:1 warning This line has a length of 108. Maximum allowed is 100 max-len
1141:1 warning This line has a length of 113. Maximum allowed is 100 max-len
1142:1 warning This line has a length of 121. Maximum allowed is 100 max-len
1146:1 warning This line has a length of 121. Maximum allowed is 100 max-len
1150:1 warning This line has a length of 113. Maximum allowed is 100 max-len
1154:1 warning This line has a length of 111. Maximum allowed is 100 max-len
1160:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1164:1 warning This line has a length of 281. Maximum allowed is 100 max-len
1437:1 warning This line has a length of 106. Maximum allowed is 100 max-len
✖ 161 problems (0 errors, 161 warnings)
--- end ---
$ ./node_modules/.bin/eslint . -f json
--- stderr ---
[baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
--- stdout ---
[{"filePath":"/src/repo/.eslintrc.json","messages":[{"ruleId":"strict","severity":1,"message":"Use the global form of 'use strict'.","line":1,"column":1,"nodeType":"Program","messageId":"global","endLine":38,"endColumn":3}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"{\n\t\"root\": true,\n\t\"extends\": [\n\t\t\"wikimedia/server\"\n\t],\n\t\"rules\": {\n\t\t\"camelcase\": [\n\t\t\t\"error\",\n\t\t\t{\n\t\t\t\t\"properties\": \"never\"\n\t\t\t}\n\t\t],\n\t\t\"indent\": [\n\t\t\t\"off\",\n\t\t\t4\n\t\t],\n\t\t\"no-unused-vars\": [\n\t\t\t\"error\",\n\t\t\t{\n\t\t\t\t\"args\": \"none\"\n\t\t\t}\n\t\t],\n\t\t\"space-in-parens\": [\n\t\t\t\"error\",\n\t\t\t\"never\"\n\t\t],\n\t\t\"computed-property-spacing\": \"off\",\n\t\t\"no-multi-spaces\": \"off\",\n\t\t\"array-bracket-spacing\": \"off\",\n\t\t\"array-callback-return\": \"warn\",\n\t\t\"default-param-last\": \"warn\",\n\t\t\"n/no-process-exit\": \"warn\",\n\t\t\"no-shadow\": \"warn\",\n\t\t\"strict\": \"warn\",\n\t\t\"semi-style\": \"warn\"\n\t}\n}\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/app.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'bluebird' is undefined.","line":20,"column":1,"nodeType":"Block","endLine":20,"endColumn":1},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":64,"column":37,"nodeType":"NewExpression","endLine":64,"endColumn":133},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Application' is undefined.","line":136,"column":1,"nodeType":"Block","endLine":136,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'bluebird' is undefined.","line":138,"column":1,"nodeType":"Block","endLine":138,"endColumn":1},{"ruleId":"security/detect-non-literal-require","severity":1,"message":"Found non-literal argument in require","line":150,"column":31,"nodeType":"CallExpression","endLine":150,"endColumn":61},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Application' is undefined.","line":197,"column":1,"nodeType":"Block","endLine":197,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'bluebird' is undefined.","line":198,"column":1,"nodeType":"Block","endLine":198,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'bluebird' is undefined.","line":236,"column":1,"nodeType":"Block","endLine":236,"endColumn":1}],"suppressedMessages":[{"ruleId":"max-len","severity":1,"message":"This line has a length of 107. Maximum allowed is 100.","line":37,"column":1,"nodeType":"Program","messageId":"max","endLine":37,"endColumn":108,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst http = require('http');\nconst BBPromise = require('bluebird');\nconst express = require('express');\nconst compression = require('compression');\nconst bodyParser = require('body-parser');\nconst fs = BBPromise.promisifyAll(require('fs'));\nconst sUtil = require('./lib/util');\nconst apiUtil = require('./lib/api-util');\nconst packageInfo = require('./package.json');\nconst yaml = require('js-yaml');\nconst addShutdown = require('http-shutdown');\nconst path = require('path');\n\n/**\n * Creates an express app and initialises it\n *\n * @param {Object} options the options to initialise the app with\n * @return {bluebird} the promise resolving to the app object\n */\nfunction initApp(options) {\n\n // the main application object\n const app = express();\n\n // get the options and make them available in the app\n app.logger = options.logger; // the logging device\n app.metrics = options.metrics; // the metrics\n app.conf = options.config; // this app's config options\n app.info = packageInfo; // this app's package info\n\n // ensure some sane defaults\n app.conf.port = app.conf.port || 8888;\n app.conf.interface = app.conf.interface || '0.0.0.0';\n // eslint-disable-next-line max-len\n app.conf.compression_level = app.conf.compression_level === undefined ? 3 : app.conf.compression_level;\n app.conf.cors = app.conf.cors === undefined ? '*' : app.conf.cors;\n if (app.conf.csp === undefined) {\n app.conf.csp = \"default-src 'self'; object-src 'none'; media-src *; img-src *; style-src *; frame-ancestors 'self'\";\n }\n\n // set outgoing proxy\n if (app.conf.proxy) {\n process.env.HTTP_PROXY = app.conf.proxy;\n // if there is a list of domains which should\n // not be proxied, set it\n if (app.conf.no_proxy_list) {\n if (Array.isArray(app.conf.no_proxy_list)) {\n process.env.NO_PROXY = app.conf.no_proxy_list.join(',');\n } else {\n process.env.NO_PROXY = app.conf.no_proxy_list;\n }\n }\n }\n\n // set up header allow listing for logging\n if (!app.conf.log_header_allowlist) {\n app.conf.log_header_allowlist = [\n 'cache-control', 'content-type', 'content-length', 'if-match',\n 'user-agent', 'x-request-id'\n ];\n }\n app.conf.log_header_allowlist = new RegExp(`^(?:${ app.conf.log_header_allowlist.map((item) => item.trim()).join('|') })$`, 'i');\n\n // set up the request templates for the APIs\n apiUtil.setupApiTemplates(app);\n\n // set up the spec\n if (!app.conf.spec) {\n app.conf.spec = `${ __dirname }/spec.yaml`;\n }\n if (app.conf.spec.constructor !== Object) {\n try {\n app.conf.spec = yaml.load(fs.readFileSync(app.conf.spec));\n } catch (e) {\n app.logger.log('warn/spec', `Could not load the spec: ${ e }`);\n app.conf.spec = {};\n }\n }\n if (!app.conf.spec.swagger) {\n app.conf.spec.swagger = '2.0';\n }\n if (!app.conf.spec.info) {\n app.conf.spec.info = {\n version: app.info.version,\n title: app.info.name,\n description: app.info.description\n };\n }\n app.conf.spec.info.version = app.info.version;\n if (!app.conf.spec.paths) {\n app.conf.spec.paths = {};\n }\n\n // set the CORS and CSP headers\n app.all('*', (req, res, next) => {\n if (app.conf.cors !== false) {\n res.header('access-control-allow-origin', app.conf.cors);\n res.header('access-control-allow-headers', 'accept, x-requested-with, content-type');\n res.header('access-control-expose-headers', 'etag');\n }\n if (app.conf.csp !== false) {\n res.header('x-xss-protection', '1; mode=block');\n res.header('x-content-type-options', 'nosniff');\n res.header('x-frame-options', 'SAMEORIGIN');\n res.header('content-security-policy', app.conf.csp);\n res.header('x-content-security-policy', app.conf.csp);\n res.header('x-webkit-csp', app.conf.csp);\n }\n sUtil.initAndLogRequest(req, app);\n next();\n });\n\n // set up the user agent header string to use for requests\n app.conf.user_agent = app.conf.user_agent || app.info.name;\n\n // disable the X-Powered-By header\n app.set('x-powered-by', false);\n // disable the ETag header - users should provide them!\n app.set('etag', false);\n // enable compression\n app.use(compression({ level: app.conf.compression_level }));\n // use the JSON body parser\n app.use(bodyParser.json({ limit: app.conf.max_body_size || '100kb' }));\n // use the application/x-www-form-urlencoded parser\n app.use(bodyParser.urlencoded({ extended: true }));\n\n return BBPromise.resolve(app);\n\n}\n\n/**\n * Loads all routes declared in routes/ into the app\n *\n * @param {Application} app the application object to load routes into\n * @param {string} dir routes folder\n * @return {bluebird} a promise resolving to the app object\n */\nfunction loadRoutes(app, dir) {\n\n // recursively load routes from .js files under routes/\n return fs.readdirAsync(dir).map((fname) => BBPromise.try(() => {\n const resolvedPath = path.resolve(dir, fname);\n const isDirectory = fs.statSync(resolvedPath).isDirectory();\n if (isDirectory) {\n loadRoutes(app, resolvedPath);\n } else if (/\\.js$/.test(fname)) {\n // import the route file\n const route = require(`${ dir }/${ fname }`);\n return route(app);\n }\n }).then((route) => {\n if (route === undefined) {\n return undefined;\n }\n // check that the route exports the object we need\n if (route.constructor !== Object || !route.path || !route.router ||\n !(route.api_version || route.skip_domain)) {\n throw new TypeError(`routes/${ fname } does not export the correct object!`);\n }\n // normalise the path to be used as the mount point\n if (route.path[0] !== '/') {\n route.path = `/${ route.path }`;\n }\n if (route.path[route.path.length - 1] !== '/') {\n route.path = `${ route.path }/`;\n }\n if (!route.skip_domain) {\n route.path = `/:domain/v${ route.api_version }${ route.path }`;\n }\n // wrap the route handlers with Promise.try() blocks\n sUtil.wrapRouteHandlers(route, app);\n // all good, use that route\n\n // HACK: return 404 for yue.wikipedia.org domain\n app.use((req, res, next) => {\n if (req.url.startsWith('/yue.wikipedia.org/')) {\n res.status(404).end('Domain not found');\n return;\n }\n next();\n });\n app.use(route.path, route.router);\n })).then(() => {\n // catch errors\n sUtil.setErrorHandler(app);\n // route loading is now complete, return the app object\n return BBPromise.resolve(app);\n });\n\n}\n\n/**\n * Creates and start the service's web server\n *\n * @param {Application} app the app object to use in the service\n * @return {bluebird} a promise creating the web server\n */\nfunction createServer(app) {\n\n // return a promise which creates an HTTP server,\n // attaches the app to it, and starts accepting\n // incoming client requests\n let server;\n return new BBPromise((resolve) => {\n server = http.createServer(app).listen(\n app.conf.port,\n app.conf.interface,\n resolve\n );\n server = addShutdown(server);\n }).then(() => {\n app.logger.log('info',\n `Worker ${ process.pid } listening on ${ app.conf.interface || '*' }:${ app.conf.port }`);\n\n // Don't delay incomplete packets for 40ms (Linux default) on\n // pipelined HTTP sockets. We write in large chunks or buffers, so\n // lack of coalescing should not be an issue here.\n server.on('connection', (socket) => {\n socket.setNoDelay(true);\n });\n\n return server;\n });\n\n}\n\n/**\n * The service's entry point. It takes over the configuration\n * options and the logger- and metrics-reporting objects from\n * service-runner and starts an HTTP server, attaching the application\n * object to it.\n *\n * @param {Object} options the options to initialise the app with\n * @return {bluebird} HTTP server\n */\nmodule.exports = (options) => initApp(options)\n .then((app) => loadRoutes(app, `${ __dirname }/routes`))\n .then((app) => {\n // serve static files from static/\n app.use('/static', express.static(`${ __dirname }/static`));\n return app;\n }).then(createServer);\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/config.dev.yaml","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/config.yaml","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/dist/config.yaml","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/etc/announcements.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/etc/dyk-sites.js","messages":[{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":19,"column":5,"nodeType":"Block","endLine":21,"endColumn":8}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* eslint no-underscore-dangle: 0 */\n'use strict';\n\nclass DykSite {\n constructor(title, dykSelectorAll, picturedRegex) {\n this._title = title;\n this._dykSelectorAll = dykSelectorAll;\n this._picturedRegex = picturedRegex;\n }\n\n get title() {\n return this._title;\n }\n\n get dykSelectorAll() {\n return this._dykSelectorAll;\n }\n\n /**\n * Regex to remove the \"(pictured)\" text from DYK items\n */\n get picturedRegex() {\n return this._picturedRegex;\n }\n}\n\nmodule.exports = {\n ar: new DykSite('ويكيبيديا:هل تعلم', 'section > ul > li', /\\s*\\(في الصورة\\)/i),\n de: new DykSite('Wikipedia:Hauptseite/Schon_gewusst', 'ul > li', /\\s*\\(Bild\\)/i),\n en: new DykSite('Template:Did_you_know', 'section > ul > li', /\\s*\\([^)]*picture[^)]*\\)/i),\n hi: new DykSite('साँचा:क्या_आप_जानते_हैं', 'div > ul > li', /\\s*\\(चित्रित\\)/i),\n pt: new DykSite('Predefinição:Sabia_que', 'section > p:not(.mw-empty-elt)', /\\s*\\(imagem\\)/i),\n ru: new DykSite('Шаблон:Знаете_ли_вы', 'section > ul > li', /\\s*\\(на\\s*илл.\\)/i),\n uk: new DykSite('Шаблон:Чи_знаєте_ви,_що', 'section > ul > li', /\\s*\\(на\\s*зобр.\\)/i)\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/etc/news-sites.js","messages":[{"ruleId":"jsdoc/check-access","severity":1,"message":"At most one access-control tag may be present on a JSDoc block.","line":4,"column":1,"nodeType":"Block","endLine":7,"endColumn":4},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@private should not have a bracketed type in \"jsdoc\" mode.","line":5,"column":1,"nodeType":"Block","endLine":5,"endColumn":1},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@private should not have a bracketed type in \"jsdoc\" mode.","line":6,"column":1,"nodeType":"Block","endLine":6,"endColumn":1},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Syntax error in type: {Object.<string, NewsSite>}","line":50,"column":1,"nodeType":"Block","endLine":50,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* eslint no-underscore-dangle: 0 */\n'use strict';\n\n/**\n * @private {!string} _title\n * @private {!string} _headlineSelector\n */\nclass NewsSite {\n /**\n * @param {!string} title\n * @param {!string} headlineSelectorAll\n * @param {!string} topicAnchorSelector\n */\n constructor(title, headlineSelectorAll, topicAnchorSelector) {\n this._title = title;\n this._headlineSelectorAll = headlineSelectorAll;\n this._topicAnchorSelector = topicAnchorSelector;\n }\n\n /**\n * @return {!string} News source wiki portal or template title to scrape\n * data from\n */\n get title() {\n return this._title;\n }\n\n /**\n * @return {!string} Query selector for news headline containers (not\n * specific categories like deaths, sports, etc)\n */\n get headlineSelectorAll() {\n return this._headlineSelectorAll;\n }\n\n /**\n * @return {!string} Query selector for news headline subject links; this\n * selector should be used on a headline element\n */\n get topicAnchorSelector() {\n return this._topicAnchorSelector;\n }\n}\n\nconst STORY_SELECTOR = '.itn-story';\nconst TOPIC_SELECTOR_LINK = 'a[rel=\"mw:WikiLink\"]:nth-of-type(1)';\nconst TOPIC_SELECTOR_BOLD_LINK = 'b:nth-of-type(1) a[rel=\"mw:WikiLink\"]';\n\n/**\n * @type {{Object.<string, NewsSite>}} A map of Wikipedia site languages codes to NewsSites\n */\nmodule.exports = {\n test: new NewsSite('InTheNewsFormatExample', STORY_SELECTOR, TOPIC_SELECTOR_BOLD_LINK),\n bs: new NewsSite('Šablon:Vijesti', STORY_SELECTOR, TOPIC_SELECTOR_BOLD_LINK),\n da: new NewsSite('Skabelon:Forside_aktuelle_begivenheder', 'div > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n de: new NewsSite('Wikipedia:Hauptseite/Aktuelles', 'ul:not(.breadcrumb-nav-container) > li', TOPIC_SELECTOR_LINK),\n el: new NewsSite('Πύλη:Τρέχοντα_γεγονότα/Επικεφαλίδες', 'li', TOPIC_SELECTOR_LINK),\n en: new NewsSite('Template:In_the_news', 'section > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n es: new NewsSite('Portal:Actualidad', 'div:nth-of-type(2) > div > ul:nth-of-type(1) > li', TOPIC_SELECTOR_LINK),\n fi: new NewsSite('Malline:Uutisissa', 'body > section > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n fr: new NewsSite('Modèle:Accueil_actualité', 'section > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n he: new NewsSite('תבנית:חדשות_ואקטואליה', 'section > ul > li', TOPIC_SELECTOR_LINK),\n ko: new NewsSite('틀:새로_들어온_소식', 'body > section > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n no: new NewsSite('Mal:Aktuelt', 'ul > li', TOPIC_SELECTOR_BOLD_LINK),\n pl: new NewsSite('Szablon:Aktualności', 'ul:last-of-type > li', TOPIC_SELECTOR_BOLD_LINK),\n pt: new NewsSite('Portal:Eventos_atuais', 'table:nth-of-type(2) div:not(.hlist) > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n ru: new NewsSite('Шаблон:Текущие_события_на_заглавной_странице', 'body > section > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n sco: new NewsSite('Template:In_the_news', 'section > ul > li', TOPIC_SELECTOR_BOLD_LINK), // see en\n sv: new NewsSite('Portal:Huvudsida/Aktuella händelser', 'body > section > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n uk: new NewsSite('Шаблон:Останні_новини', 'section > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n vi: new NewsSite('Bản_mẫu:Tin_tức', 'ul > li', TOPIC_SELECTOR_BOLD_LINK)\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/announcements.js","messages":[{"ruleId":"semi-style","severity":1,"message":"Expected this semicolon to be at the end of the previous line.","line":30,"column":1,"nodeType":null,"messageId":"expectedSemiColon","endLine":30,"endColumn":2},{"ruleId":"max-len","severity":1,"message":"This line has a length of 123. Maximum allowed is 100.","line":34,"column":1,"nodeType":"Program","messageId":"max","endLine":34,"endColumn":124},{"ruleId":"max-len","severity":1,"message":"This line has a length of 134. Maximum allowed is 100.","line":51,"column":1,"nodeType":"Program","messageId":"max","endLine":51,"endColumn":135},{"ruleId":"max-len","severity":1,"message":"This line has a length of 119. Maximum allowed is 100.","line":84,"column":1,"nodeType":"Program","messageId":"max","endLine":84,"endColumn":120},{"ruleId":"max-len","severity":1,"message":"This line has a length of 118. Maximum allowed is 100.","line":86,"column":1,"nodeType":"Program","messageId":"max","endLine":86,"endColumn":119},{"ruleId":"max-len","severity":1,"message":"This line has a length of 123. Maximum allowed is 100.","line":135,"column":1,"nodeType":"Program","messageId":"max","endLine":135,"endColumn":124}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst config = require('../etc/announcements');\nconst HTTPError = require('./util').HTTPError;\nconst striptags = require('striptags');\n\nconst plaintextFromHTML = (html) => {\n const htmlWithSpacesAndNewlines = html.replace(/ /ig, ' ').replace(/<br\\/>/ig, '\\n');\n return striptags(htmlWithSpacesAndNewlines);\n};\n\n/**\n * @param {!Object} campaign object, as seen in etc/announcements.js\n * @param {!string} os operating system, all caps ('IOS' or 'ANDROID')\n * @param {?string} id another string to distinguish different announcements, all caps\n * @return {!string} announcement id string\n */\nconst buildId = (campaign, os, id) => `${ campaign.idPrefix }${ os }${ id }`;\n\nconst baseAnnouncement = (campaign) => ({\n type: campaign.type,\n start_time: campaign.startTime,\n end_time: campaign.endTime,\n domain: campaign.domain\n })\n\n // beta: true,\n // logged_in: true,\n // reading_list_sync_enabled: true,\n;\n\nconst getFundraisingAnnouncementText = (countryConfig) => `<b>Wikipedia is still not on the market.</b><br><i>An important update from Jimmy Wales</i><br><br>Please don’t skip this 1-minute read. Today I ask you to reflect on the number of times you have used Wikipedia this year, the value you got from it, and whether you’re able to give ${ countryConfig.currency }${ countryConfig.coffee } to the nonprofit that supports it. Wikipedia is written by everyone, together. We want everyone to have equal access to high-quality information. If Wikipedia has given you ${ countryConfig.currency }${ countryConfig.coffee } worth of knowledge, please join the 2% of readers who donate. There are no small contributions: every edit counts, every donation counts. Thank you. — <i>Jimmy Wales, founder, Wikimedia Foundation</i>`;\n\nconst androidV2FundraisingAnnouncement = (code, countryConfig, campaign) => Object.assign({}, baseAnnouncement(campaign), {\n id: buildId(campaign, 'ANDROIDV2', 'EN'),\n platforms: [ config.Platform.ANDROID_V2 ],\n countries: [ code.toUpperCase() ],\n border: countryConfig.border,\n placement: countryConfig.placement,\n text: getFundraisingAnnouncementText(countryConfig),\n // image_url: countryConfig.imageUrl,\n // image_height: 40,\n caption_HTML: \"By donating, you agree to our <a href='https://foundation.wikimedia.org/wiki/Donor_privacy_policy/en'>donor policy</a>.\",\n negative_text: 'No thanks',\n action: {\n title: 'DONATE NOW',\n url: 'https://donate.wikimedia.org/?uselang=en&appeal=JimmyQuote&utm_medium=WikipediaApp&utm_campaign=Android&utm_source=app_2023_en6C_Android_control'\n }\n });\n\nconst japanFundraisingAnnouncement = (code, countryConfig, campaign, os, platforms) => Object.assign({}, baseAnnouncement(campaign), {\n id: buildId(campaign, os.toUpperCase(), code.toUpperCase()),\n platforms: platforms,\n countries: [ code.toUpperCase() ],\n border: countryConfig.border,\n placement: countryConfig.placement,\n text: '<b>ウィキペディアは売り物ではありません。</b><br>ジミー・ウェールズから皆様へのメッセージ<br>1分で結構です、どうか読み飛ばさないでください。今日は皆様に、ぜひお考えいただきたいことがあります。この1年間でウィキペディア アプリをどれほど使い、そこでどんな価値を得たか、そして¥300 のご寄付が可能かどうかです。ウィキメディア財団のウィキペディアを含むプロジェクト群を支える技術は、読者の皆様によって支えられています。非営利団体であるということは、誰かがウィキペディアを買い取り、好き勝手にする危険性がないことを意味します。この一年、もしあなたがウィキペディアから得た情報に¥300 の価値があったと思っていただけるのでしたら、ご寄付をお寄せいただけないでしょうか。感謝を込めて。— ジミー・ウェールズ(ウィキメディア財団創設者)',\n negative_text: 'けっこうです',\n action: {\n title: '今すぐ寄付する',\n url: `https://donate.wikimedia.org/?uselang=ja&appeal=JimmyQuote&utm_medium=WikipediaApp&utm_campaign=${ os }&utm_source=app_2023_jaJP_${ os }_control&monthlyconvert=Default`\n }\n });\n\nconst androidV2SurveyAnnouncement = (campaign) => Object.assign({}, baseAnnouncement(campaign), {\n id: buildId(campaign, 'ANDROIDV2', 'EN'),\n platforms: [ config.Platform.ANDROID_V2 ],\n countries: [ 'AL', 'DZ', 'AO', 'AR', 'AM', 'AU', 'AT', 'AZ', 'BD', 'BY', 'BR', 'BG', 'CM', 'CA', 'CF', 'TD',\n 'CL', 'CO', 'KM', 'CR', 'CI', 'HR', 'CY', 'CZ', 'DK', 'EC', 'EG', 'SV', 'EE', 'ET', 'DE', 'GH', 'GR', 'GT',\n 'GN', 'HN', 'HK', 'HU', 'IN', 'ID', 'IE', 'IT', 'JM', 'JP', 'KE', 'KR', 'LV', 'LB', 'LT', 'MG', 'MW', 'MY',\n 'ML', 'MQ', 'MR', 'MX', 'MA', 'MZ', 'NL', 'NG', 'PK', 'PY', 'PE', 'PH', 'PL', 'PT', 'PR', 'RO', 'SN', 'RS',\n 'SG', 'SK', 'SI', 'ZA', 'ES', 'SE', 'CH', 'TW', 'TZ', 'TN', 'TR', 'UG', 'GB', 'US', 'UY', 'ZM', 'ZW' ],\n border: false,\n placement: 'feed',\n text: 'Help to improve the Wikipedia mobile apps by signing up to be a user tester. Take a quick survey to participate in an upcoming study or research interview.',\n caption_HTML: \"View our <a href='https://foundation.m.wikimedia.org/w/index.php?title=Editing_Awareness_and_Trust_Survey_Privacy_Statement'>privacy statement</a>. Survey powered by a third party. View their <a href='https://policies.google.com/privacy'>privacy policy</a>.\",\n negative_text: 'No thanks',\n action: {\n title: 'Start survey',\n url: 'https://forms.gle/DUWfFRoD9nqgStJZ7'\n }\n });\n\nconst iosV2FundraisingAnnouncement = (code, countryConfig, campaign) => Object.assign({}, baseAnnouncement(campaign), {\n id: buildId(campaign, 'IOSV2', 'EN'),\n platforms: [ config.Platform.IOS_V2, config.Platform.IOS_V3, config.Platform.IOS_V4, config.Platform.IOS_V5 ],\n countries: [ code.toUpperCase() ],\n border: countryConfig.border,\n placement: countryConfig.placement,\n text: getFundraisingAnnouncementText(countryConfig),\n caption_HTML: \"By donating, you agree to our <a href='https://foundation.wikimedia.org/wiki/Donor_privacy_policy/en'>donor policy</a>.\",\n negative_text: 'No thanks',\n action: {\n title: 'DONATE NOW',\n url: 'https://donate.wikimedia.org/?uselang=en&appeal=JimmyQuote&utm_medium=WikipediaApp&utm_campaign=iOS&utm_source=app_2023_en6C_iOS_control'\n }\n });\n\nconst iOSAaaLDArticleTitles = [];\n\nconst iosV4SurveyAnnouncement = (campaign) => Object.assign({}, baseAnnouncement(campaign), {\n id: buildId(campaign, 'IOSV4', 'EN'),\n platforms: [ config.Platform.IOS_V4 ],\n border: false,\n placement: 'article',\n text: 'Help improve Wikipedia by taking a quick survey about this article',\n caption_HTML: \"View our <a href='https://foundation.m.wikimedia.org/w/index.php?title=Editing_Awareness_and_Trust_Survey_Privacy_Statement'>privacy statement</a>. Survey powered by a third-party. View their <a href='https://policies.google.com/privacy'>privacy policy</a>.\",\n negative_text: 'No thanks',\n percent_receiving_experiment: 50,\n action: {\n title: 'Start survey',\n url: 'https://docs.google.com/forms/d/e/1FAIpQLSdQ34Nz6u7Uhc6A3mTk5XwGdWVKwJpQfCZ4Jlx32QHhI6fx9Q/viewform?usp=pp_url&entry.135304298={{articleTitle}}&entry.1794192386={{didSeeModal}}&entry.1315551869={{isInExperiment}}'\n },\n articleTitles: iOSAaaLDArticleTitles,\n displayDelay: 30\n });\n\nconst iosAaaLDSurveyAnnouncement = (campaign) => Object.assign({}, baseAnnouncement(campaign), {\n id: buildId(campaign, 'IOS', 'SURVEY20-1'),\n platforms: [ config.Platform.IOS_V5 ],\n border: false,\n placement: 'article',\n text: 'Help improve Wikipedia by taking a quick survey about this article',\n caption_HTML: \"View our <a href='https://foundation.m.wikimedia.org/w/index.php?title=Editing_Awareness_and_Trust_Survey_Privacy_Statement'>privacy statement</a>. Survey powered by a third-party. View their <a href='https://policies.google.com/privacy'>privacy policy</a>.\",\n negative_text: 'No thanks',\n percent_receiving_experiment: 50,\n action: {\n title: 'Start survey',\n url: 'https://docs.google.com/forms/d/e/1FAIpQLSdQ34Nz6u7Uhc6A3mTk5XwGdWVKwJpQfCZ4Jlx32QHhI6fx9Q/viewform?usp=pp_url&entry.135304298={{articleTitle}}&entry.1794192386={{didSeeModal}}&entry.1315551869={{isInExperiment}}'\n },\n articleTitles: iOSAaaLDArticleTitles,\n displayDelay: 30\n });\n\nconst iosLegacyFundraisingAnnouncement = (code, countryConfig, campaign) => Object.assign({}, baseAnnouncement(campaign), {\n id: buildId(campaign, 'IOS', 'EN'),\n platforms: [ config.Platform.IOS ],\n countries: [ code.toUpperCase() ],\n min_version: '5.8.0',\n max_version: '6.1.0',\n caption_HTML: \"<p>By donating, you agree to our <a href='https://foundation.wikimedia.org/wiki/Donor_privacy_policy/en'>donor policy</a></p>.\",\n border: countryConfig.border,\n placement: countryConfig.placement,\n text: plaintextFromHTML(getFundraisingAnnouncementText(countryConfig)),\n action: {\n title: 'DONATE NOW',\n url: 'https://donate.wikimedia.org/?uselang=en&appeal=JimmyQuote&utm_medium=WikipediaApp&utm_campaign=iOS&utm_source=app_2023_en6C_iOS_control'\n }\n });\n\nfunction getAndroidFundraisingAnnouncements(campaign) {\n return Object.keys(campaign.countryVars)\n .map((code) => androidV2FundraisingAnnouncement(code, campaign.countryVars[code], campaign));\n}\n\nfunction getAndroidSurveyAnnouncements(campaign) {\n return [].concat(androidV2SurveyAnnouncement(campaign));\n}\n\nfunction getiOSFundraisingAnnouncements(campaign) {\n return Object.keys(campaign.countryVars)\n .map((code) => iosV2FundraisingAnnouncement(code, campaign.countryVars[code], campaign));\n}\n\nfunction getiOSSurveyAnnouncements(campaign) {\n return [].concat(iosV4SurveyAnnouncement(campaign));\n}\n\nfunction getiOSAaaLDSurveyAnnouncements(campaign) {\n return [].concat(iosAaaLDSurveyAnnouncement(campaign));\n}\n\nfunction getLegacyiOSFundraisingAnnouncements(campaign) {\n return Object.keys(campaign.countryVars)\n .map((code) => iosLegacyFundraisingAnnouncement(code, campaign.countryVars[code], campaign));\n}\n\nfunction getAnnouncementsForCampaign(campaign) {\n switch (campaign.idPrefix) {\n case 'INDIAFUNDRAISING23':\n return getAndroidFundraisingAnnouncements(campaign)\n .concat(getiOSFundraisingAnnouncements(campaign))\n .concat(getLegacyiOSFundraisingAnnouncements(campaign));\n case 'JAPANFUNDRAISING23':\n return Object.keys(campaign.countryVars).map((code) => japanFundraisingAnnouncement(code, campaign.countryVars[code], campaign, 'iOS', [ config.Platform.IOS_V2, config.Platform.IOS_V3, config.Platform.IOS_V4, config.Platform.IOS_V5 ]))\n .concat(Object.keys(campaign.countryVars).map((code) => japanFundraisingAnnouncement(code, campaign.countryVars[code], campaign, 'Android', [ config.Platform.ANDROID_V2 ])));\n case 'INDIAFUNDRAISING22':\n return getAndroidFundraisingAnnouncements(campaign);\n case 'FUNDRAISING23':\n return getAndroidFundraisingAnnouncements(campaign)\n .concat(getiOSFundraisingAnnouncements(campaign))\n .concat(getLegacyiOSFundraisingAnnouncements(campaign));\n case 'IOSSURVEY20':\n return getiOSSurveyAnnouncements(campaign);\n case 'IOSAAALDSURVEY':\n return getiOSAaaLDSurveyAnnouncements(campaign);\n case 'ANDROIDSURVEY20':\n return getAndroidSurveyAnnouncements(campaign);\n }\n}\n\nfunction hasEnded(campaign, now) {\n const endDate = Date.parse(campaign.endTime);\n if (isNaN(endDate)) {\n throw new HTTPError({\n status: 500,\n type: 'config_error',\n title: 'invalid end date in announcements config',\n detail: config.endTime\n });\n }\n return now > endDate;\n}\n\nfunction getActiveCampaigns(domain, now) {\n return config.campaigns.filter((campaign) => campaign.activeWikis.includes(domain) &&\n !hasEnded(campaign, now));\n}\n\nfunction getAnnouncements(domain) {\n const announcements = [];\n const activeCampaigns = getActiveCampaigns(domain, new Date());\n activeCampaigns.forEach((campaign) => {\n announcements.push(...getAnnouncementsForCampaign(campaign));\n });\n\n return {\n announce: announcements\n };\n}\n\nmodule.exports = {\n getAnnouncements,\n testing: {\n buildId,\n getActiveCampaigns,\n getAnnouncementsForCampaign,\n getAndroidFundraisingAnnouncements,\n getiOSFundraisingAnnouncements,\n getLegacyiOSFundraisingAnnouncements,\n hasEnded\n }\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/api-util.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Application' is undefined.","line":297,"column":1,"nodeType":"Block","endLine":297,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst axios = require('axios').default;\nconst axiosRetry = require('axios-retry').default;\nconst BBPromise = require('bluebird');\nconst sUtil = require('./util');\nconst Template = require('swagger-router').Template;\nconst HTTPError = sUtil.HTTPError;\nconst uuid = require('cassandra-uuid').TimeUuid;\n\nconst isRedirect = (status) => status < 400 && status >= 300;\n\n/**\n * Make outgoing HTTP request using axios\n *\n * @param {Object} outReq Outgoing request\n * @param {Object} parentReq Incoming request\n * @return {Promise} outgoing request config\n */\nfunction makeOutgoingRequest(outReq, parentReq) {\n const httpConf = parentReq.app.conf.http_client || {};\n\n // Log each outgoing request on incoming request logger\n const loggerInterceptor = (config) => {\n parentReq.logger.log('trace/req', { msg: 'Outgoing request', out_request: outReq });\n return config;\n };\n\n // Handle service mesh redirects\n const serviceMeshInterceptor = ((response) => {\n if (isRedirect(response.status)) {\n const location = response.headers.location;\n try {\n // Redirect location is absolute\n const nextURL = new URL(response.headers.location);\n response.config.url.pathname = nextURL.pathname;\n response.config.headers.host = nextURL.hostname;\n } catch (err) {\n // Redirect location is relative\n response.config.url = new URL(location, response.config.url);\n }\n return axios.request(response.config);\n }\n return response;\n });\n\n Object.assign(outReq.headers, {\n 'user-agent': parentReq.app.conf.user_agent,\n 'x-request-id': parentReq.headers['x-request-id']\n });\n\n const reqConfig = {\n url: new URL(outReq.uri),\n method: outReq.method,\n headers: outReq.headers,\n timeout: httpConf.timeout || 2 * 60 * 1000,\n validateStatus: httpConf.status_validator || ((status) => status < 400)\n };\n\n // Ensure requests are retried in case of failure\n axiosRetry(axios, { retries: httpConf.retries || 3 });\n\n axios.interceptors.request.use(loggerInterceptor);\n if (httpConf.use_service_mesh) {\n // Manually handle redirects for service mesh\n reqConfig.maxRedirects = 0;\n axios.interceptors.response.use(serviceMeshInterceptor);\n }\n\n return axios.request(reqConfig);\n}\n\n/**\n * Calls the MW REST API with the supplied query as its body\n *\n * @param {!Object} req the incoming request object\n * @param {?Object} addlHeaders additional headers to pass to the MW API\n * @return {!Promise} a promise resolving as the response object from the MW API\n */\nfunction mwCorePageHTMLGet(req, addlHeaders) {\n const rev = req.params.revision;\n const title = encodeURIComponent(req.params.title);\n const corePageReq = req.app.mwrestapi_tpl.expand({\n request: {\n headers: addlHeaders,\n params: {\n path: rev ? `revision/${ rev }/with_html` : `page/${ title }/with_html`,\n domain: req.params.domain\n }\n }\n });\n\n return makeOutgoingRequest(corePageReq, req).then((response) => {\n // Compat: rewrite etag header and body to be the same format as the\n // responses from parsoid on restbase\n const html = response.data.html;\n const revision = response.data.id;\n const timestamp = response.data.timestamp;\n const tid = uuid.fromDate(new Date(timestamp)).toString();\n const etag = `${ revision }/${ tid }`;\n response.body = html;\n response.headers.etag = etag;\n return response;\n });\n}\n\n/**\n * Calls the MW API with the supplied query as its body\n *\n * @param {!Object} req the incoming request object\n * @param {?Object} query an object with all the query parameters for the MW API\n * @param {?string} altDomain domain to query, if other than the original request domain\n * @param {?Object} addlHeaders additional headers to pass to the MW API\n * @return {!Promise} a promise resolving as the response object from the MW API\n */\nfunction mwApiGet(req, query, altDomain, addlHeaders) {\n\n const app = req.app;\n query = Object.assign({\n format: 'json',\n formatversion: 2\n }, query);\n\n const request = app.mwapi_tpl.expand({\n request: {\n params: { domain: altDomain || req.params.domain },\n headers: req.headers,\n query\n }\n });\n Object.assign(request.headers, addlHeaders);\n\n return req.issueRequest(request).then((response) => {\n if (response.status < 200 || response.status > 399) {\n // there was an error when calling the upstream service, propagate that\n return BBPromise.reject(new HTTPError({\n status: response.status,\n type: 'api_error',\n title: 'MW API error',\n detail: response.body\n }));\n }\n return response;\n });\n\n}\n\n/**\n * For use by `restApiGet`, `restGetSummary` and `restGatewayGet`.\n *\n * @ignore\n *\n * @throws {Error} If the domain is unspecified and cannot be retreived from\n * the incoming request\n * @throws {Error} If the path is unspecified\n */\nfunction prepareReqParams(req, path, reqParams) {\n\n if (path.constructor === Object) {\n reqParams = path;\n path = undefined;\n }\n reqParams = reqParams || {};\n reqParams.method = reqParams.method || 'get';\n reqParams.query = reqParams.query || {};\n reqParams.headers = reqParams.headers || {};\n reqParams.params = reqParams.params || {};\n reqParams.params.path = path || reqParams.params.path;\n reqParams.params.domain = reqParams.params.domain || req.params.domain;\n\n if (!reqParams.params.path) {\n throw new Error('The path must be specified.');\n }\n\n if (!reqParams.params.domain) {\n throw new Error('The domain must be specified or retrievable from the incoming request.');\n }\n\n reqParams.params.path = reqParams.params.path[0] === '/' ?\n reqParams.params.path.slice(1) : reqParams.params.path;\n\n return reqParams;\n}\n\n/**\n * Calls the REST API with the supplied parameters.\n *\n * @param {!Object} req the incoming request object\n * @param {?string} path the API path to contact without the leading slash\n * @param {?Object} [reqParams={}] the object containing request details\n * @param {!string} [reqParams.path] the path\n * @param {?string} [reqParams.domain] the domain, defaulting to `req.params.domain`\n * @param {?string} [reqParams.method=get] the request method\n * @param {?Object} [reqParams.query={}] the query string to send, if any\n * @param {?Object} [reqParams.headers={}] the request headers to send\n * @param {?Object} [reqParams.body=null] the body of the request, if any\n * @return {!Promise} a promise resolving as the response object from the API\n * or rejecting if the domain or path were unspecified or couldn't be\n * retrieved from the incoming request\n */\nfunction restApiGet(req, path, reqParams) {\n\n try {\n return req.issueRequest(req.app.restbase_tpl.expand({\n request: prepareReqParams(req, path, reqParams)\n }));\n } catch (e) {\n return BBPromise.reject(new HTTPError({\n status: 500,\n type: 'internal_error',\n title: 'Invalid internal call',\n detail: 'domain and path need to be defined for the REST API call'\n }));\n }\n\n}\n\n/**\n * Calls the Analytics API with the supplied parameters.\n *\n * @param {!Object} req the incoming request object\n * @param {?string} path the API path to contact without the leading slash\n * @param {?Object} [reqParams={}] the object containing request details\n * @param {!string} [reqParams.path] the path\n * @param {?string} [reqParams.domain] the domain, defaulting to `req.params.domain`\n * @param {?string} [reqParams.method=get] the request method\n * @param {?Object} [reqParams.query={}] the query string to send, if any\n * @param {?Object} [reqParams.headers={}] the request headers to send\n * @param {?Object} [reqParams.body=null] the body of the request, if any\n * @return {!Promise} a promise resolving as the response object from the API\n * or rejecting if the domain or path were unspecified or couldn't be\n * retrieved from the incoming request\n */\nfunction analyticsGet(req, path, reqParams) {\n\n try {\n const outgoing = req.app.page_analytics_tpl.expand({\n request: prepareReqParams(req, path, reqParams)\n });\n return req.issueRequest(outgoing);\n } catch (e) {\n return BBPromise.reject(new HTTPError({\n status: 500,\n type: 'internal_error',\n title: 'Invalid internal call',\n detail: 'domain and path need to be defined for the REST Gateway API call'\n }));\n }\n\n}\n\nfunction mwGet(req, title, addlHeaders) {\n const app = req.app;\n const request = app.mw_tpl.expand({\n request: {\n headers: Object.assign(req.headers, addlHeaders),\n params: {\n domain: req.params.domain,\n title\n }\n }\n });\n return req.issueRequest(request);\n}\n\n/**\n * Returns a promise to the summary object for the given title.\n *\n * @param {!Object} req\n * @param {!string} title\n * @return {Promise<Object>}\n */\nfunction restGetSummary(req, title) {\n const lang = req.headers['accept-language'];\n const pcsReq = req.app.pcs_tpl.expand({\n request: prepareReqParams(\n req,\n `page/summary/${ encodeURIComponent(title) }`,\n {\n headers: {\n 'accept-language': lang\n }\n }\n )\n });\n return req.issueRequest(pcsReq).then((res) => {\n // Support legacy pre summary 2.0 clients.\n res.body.normalizedtitle = res.body.title;\n res.body.title = res.body.title.replace(/ /g, '_');\n return res.body;\n });\n}\n\n/**\n * Sets up the request templates for MW and RESTBase API requests\n *\n * @param {!Application} app the application object\n */\nfunction setupApiTemplates(app) {\n\n // set up the MW API request template\n if (!app.conf.mwapi_req) {\n app.conf.mwapi_req = {\n method: 'get',\n uri: 'http://{{domain}}/w/api.php',\n headers: '{{request.headers}}',\n query: '{{ default(request.query, {}) }}'\n };\n }\n app.mwapi_tpl = new Template(app.conf.mwapi_req);\n\n // set up MW REST API request template\n if (!app.conf.mwrestapi_req) {\n app.conf.mwrestapi_req = {\n method: 'get',\n uri: 'http://{{domain}}/w/rest.php/v1/{+path}',\n headers: '{{request.headers}}'\n };\n }\n app.mwrestapi_tpl = new Template(app.conf.mwrestapi_req);\n\n // set up the RESTBase request template\n if (!app.conf.restbase_req) {\n app.conf.restbase_req = {\n method: '{{request.method}}',\n uri: 'http://{{domain}}/api/rest_v1/{+path}',\n query: '{{ default(request.query, {}) }}',\n headers: '{{request.headers}}',\n body: '{{request.body}}'\n };\n }\n app.restbase_tpl = new Template(app.conf.restbase_req);\n\n // Set up the Analytics API request template\n if (!app.conf.page_analytics_req) {\n app.conf.page_analytics_req = {\n method: '{{request.method}}',\n uri: 'http://wikimedia.org/api/rest_v1/metrics/{+path}',\n query: '{{ default(request.query, {}) }}',\n headers: '{{request.headers}}',\n body: '{{request.body}}'\n };\n }\n app.page_analytics_tpl = new Template(app.conf.page_analytics_req);\n\n // Set up the PCS request template\n if (!app.conf.pcs_req) {\n app.conf.pcs_req = {\n method: '{{request.method}}',\n uri: 'http://{{domain}}/api/rest_v1/{+path}',\n query: '{{ default(request.query, {}) }}',\n headers: '{{request.headers}}',\n body: '{{request.body}}'\n };\n }\n app.pcs_tpl = new Template(app.conf.pcs_req);\n\n // set up the MediaWiki page request template\n if (!app.conf.mw_req) {\n app.conf.mw_req = {\n method: '{{request.method}}',\n uri: 'http://{{domain}}/w/index.php?title={+title}',\n query: '{{ default(request.query, {}) }}',\n headers: '{{request.headers}}'\n };\n }\n app.mw_tpl = new Template(app.conf.mw_req);\n}\n\nmodule.exports = {\n mwGet,\n mwApiGet,\n restApiGet,\n restGetSummary,\n setupApiTemplates,\n mwCorePageHTMLGet,\n analyticsGet\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/configuration/configuration.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/configuration/hcaptcha.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/configuration/year-in-review.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/date-util.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/did-you-know.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":20,"column":1,"nodeType":"Block","endLine":20,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"lang\" type.","line":21,"column":1,"nodeType":"Block","endLine":21,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":41,"column":1,"nodeType":"Block","endLine":41,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":42,"column":1,"nodeType":"Block","endLine":42,"endColumn":1},{"ruleId":"no-shadow","severity":1,"message":"'si' is already declared in the upper scope on line 8 column 7.","line":82,"column":12,"nodeType":"Identifier","messageId":"noShadow","endLine":82,"endColumn":14},{"ruleId":"no-shadow","severity":1,"message":"'result' is already declared in the upper scope on line 88 column 19.","line":97,"column":20,"nodeType":"Identifier","messageId":"noShadow","endLine":97,"endColumn":26}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst BBPromise = require('bluebird');\nconst parsoid = require('./parsoid');\nconst util = require('./util');\nconst docUtil = require('./doc-util');\nconst HTTPError = util.HTTPError;\nconst si = require('./siteinfo');\nconst DYK_SITES = require('../etc/dyk-sites');\n\nconst supportedSubdomains = Object.keys(DYK_SITES);\n\nconst supportedDomains = supportedSubdomains.map((lang) => `${ lang }.wikipedia.org`);\n\nconst isSupported = (domain) => supportedDomains.includes(domain);\n\n/**\n * Extracts DYK items from the document\n *\n * @param {!Document} doc The document to extract from\n * @param lang\n * @return {!Array} Array of DYK items\n */\nfunction extractDYKItems(doc, lang) {\n const items = [];\n const elements = doc.querySelectorAll(DYK_SITES[lang].dykSelectorAll);\n\n Array.prototype.forEach.call(elements, (element) => {\n items.push({\n html: element.innerHTML.replace(DYK_SITES[lang].picturedRegex, ''),\n text: element.textContent.replace(DYK_SITES[lang].picturedRegex, '').trim()\n });\n });\n return items;\n}\n\n/**\n * Rewrites anchors in the document to use absolute URLs instead of relative ones, if any.\n *\n * @param {!Object} req The request object\n * @param {!Document} doc The document to process\n * @return {!Document} The document with rewritten anchors\n */\nfunction rewriteAnchorsAbsolute(req, doc) {\n const anchors = doc.querySelectorAll('a');\n Array.prototype.forEach.call(anchors, (anchor) => {\n const href = anchor.getAttribute('href');\n if (href && !href.startsWith('http')) {\n anchor.setAttribute('href', `https://${ req.params.domain }/wiki/${ util.removeLinkPrefix(href) }`);\n }\n });\n return doc;\n}\n\n/**\n * Main function to fetch and process DYK content\n *\n * @param {!Object} app The application object\n * @param {!Object} req The request object\n * @return {!Promise} Promise resolving to the DYK content\n */\nfunction promise(app, req) {\n const lang = req.params.domain.split('.')[0];\n const aggregated = !!req.query.aggregated;\n\n if (!isSupported(req.params.domain)) {\n if (aggregated) {\n return BBPromise.resolve({});\n }\n throw new HTTPError({\n status: 404,\n type: 'not_found',\n title: 'Not found',\n detail: 'The language you have requested is not yet supported.'\n });\n }\n\n // Set the title to the DYK template page\n req.params.title = DYK_SITES[lang].title;\n\n return si.getSiteInfo(req)\n .then((si) => parsoid.getParsoidHtml(req)\n .then((response) => {\n const vary = [];\n if (si.variants && si.variants.length > 1) {\n vary.push('accept-language');\n }\n const result = {\n payload: [],\n meta: { etag: util.getRevisionFromEtag(response.headers), vary }\n };\n return docUtil.createDocument(response.body)\n .then((doc) => {\n result.payload = extractDYKItems(rewriteAnchorsAbsolute(req, doc), lang);\n return result;\n })\n .then((result) => util.promiseAwaitAll(result, true, req.logger));\n }));\n}\n\nmodule.exports = {\n promise,\n supportedSubdomains,\n supportedDomains,\n testing: {\n isSupported\n }\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/doc-util.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/featured-image.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/featured.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'si' is already declared in the upper scope on line 12 column 7.","line":136,"column":12,"nodeType":"Identifier","messageId":"noShadow","endLine":136,"endColumn":14}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * To retrieve TFA -- Today's featured article -- for a given date.\n */\n\n'use strict';\n\nconst crypto = require('crypto');\nconst domino = require('domino');\nconst BBPromise = require('bluebird');\nconst api = require('./api-util');\n\nconst si = require('./siteinfo');\nconst dateUtil = require('./date-util');\nconst util = require('./util');\n\nconst HTTPError = util.HTTPError;\n\nconst NS_SPECIAL = '-1';\n\nconst supportedSubdomains = [ 'bg', 'bn', 'bs', 'cs', 'de', 'el', 'en', 'fa', 'he', 'hu', 'it', 'ja',\n 'la', 'no', 'sco', 'sd', 'sv', 'tr', 'ur', 'vi', 'zh' ];\n\nconst supportedDomains = supportedSubdomains.map((lang) => `${ lang }.wikipedia.org`);\n\nconst isSupported = (domain) => supportedDomains.includes(domain);\n\n/**\n * Builds the request to get the Special:FeedItem provided by the FeaturedFeed extension.\n *\n * @param {!string} req the request object\n * @param {!Object} siteinfo\n * @param {!Date} date for which day the featured article is requested\n * @return {!Promise} a promise resolving as an JSON object containing the response\n */\nconst requestFeaturedFeedSpecialItem = (req, siteinfo, date) => {\n const lang = siteinfo.general.lang;\n const localizedNamespaceSpecial = siteinfo.namespaces[NS_SPECIAL].name.replace(/ /g, '_');\n const feedItemAliasInfo = siteinfo.specialpagealiases.find((i) => i.realname === 'FeedItem');\n const feedItemAlias = (feedItemAliasInfo && feedItemAliasInfo.aliases[0]) || 'FeedItem';\n const dateString = `${ dateUtil.formatYYYYMMDD(date) }000000`;\n const title = `${ localizedNamespaceSpecial }:${ feedItemAlias }/featured/${ dateString }/${ lang }`;\n return api.mwGet(req, title, { accept: 'text/html; charset=UTF-8' });\n};\n\n// -- functions dealing with responses:\n\nconst findPageTitle = (html) => {\n const document = domino.createDocument(html);\n const scope = document.querySelector('div#mw-content-text');\n if (!scope) {\n return;\n }\n\n const found = scope.querySelector('b > a, a > b');\n if (found) {\n if (found.tagName === 'A') { // b > a\n return found.getAttribute('title');\n } else { // a > b\n // the anchor is the parent node\n return found.parentNode.getAttribute('title');\n }\n }\n};\n\n/**\n * Fetches higher-quality page image form MW API\n *\n * @param {!Object} req\n * @param {!string} title\n * @return {Promise<Object>}\n */\nconst fetchHighQualityPageImage = (req, title) => api.mwApiGet(req, {\n action: 'query',\n format: 'json',\n formatversion: 2,\n prop: 'pageimages',\n piprop: 'thumbnail|original',\n pithumbsize: 960,\n pilicense: 'any',\n titles: title\n })\n .then((res) => {\n if (res.body &&\n res.body.query &&\n res.body.query.pages &&\n res.body.query.pages.length &&\n res.body.query.pages[0].thumbnail &&\n res.body.query.pages[0].original) {\n const thumbnail = res.body.query.pages[0].thumbnail;\n const originalimage = res.body.query.pages[0].original;\n thumbnail.source = thumbnail.source.replace(/^http:/, 'https:');\n originalimage.source = originalimage.source.replace(/^http:/, 'https:');\n return { thumbnail, originalimage };\n }\n });\n\nconst createSha1 = (input) => {\n const shasum = crypto.createHash('sha1');\n shasum.update(input);\n return shasum.digest('hex');\n};\n\n// -- main\n\nconst promise = (app, req) => {\n let pageTitle;\n const domain = req.params.domain;\n const aggregated = !!req.query.aggregated;\n\n if (!dateUtil.validate(dateUtil.hyphenDelimitedDateString(req))) {\n if (aggregated) {\n return BBPromise.resolve({});\n }\n dateUtil.throwDateError();\n }\n\n if (!isSupported(domain)) {\n if (aggregated) {\n return BBPromise.resolve({});\n } else {\n throw new HTTPError({\n status: 404,\n type: 'not_found',\n title: 'Not found',\n detail: 'The language you have requested is not yet supported.'\n });\n }\n }\n\n const requestedDate = dateUtil.getRequestedDate(req);\n if (domain === 'de.wikipedia.org' && !(dateUtil.isWithinLast3Days(requestedDate))) {\n return BBPromise.resolve({});\n }\n\n return si.getSiteInfo(req)\n .then((si) => requestFeaturedFeedSpecialItem(req, si, requestedDate)\n .then((featured) => {\n pageTitle = findPageTitle(featured.body);\n if (!pageTitle) {\n return BBPromise.resolve({});\n }\n const dbTitle = util.getDbTitle(pageTitle, si);\n const vary = [];\n if (si.variants && si.variants.length > 1) {\n vary.push('accept-language');\n }\n return {\n payload: api.restGetSummary(req, dbTitle),\n meta: { etag: createSha1(dbTitle), vary },\n // will be moved into summary before returning the result\n $fetchHighQualityImage: fetchHighQualityPageImage(req, dbTitle)\n };\n })\n .then((result) => util.promiseAwaitAll(result, true, req.logger))\n .then((resolvedResult) => {\n if (resolvedResult.$fetchHighQualityImage) {\n Object.assign(resolvedResult.payload, resolvedResult.$fetchHighQualityImage);\n }\n delete resolvedResult.$fetchHighQualityImage;\n return resolvedResult;\n })\n .catch((err) => {\n if (aggregated) {\n return BBPromise.resolve({});\n }\n throw err;\n }));\n};\n\nmodule.exports = {\n promise,\n supportedSubdomains,\n supportedDomains,\n testing: {\n findPageTitle,\n isSupported\n }\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/imageinfo.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Bool' is undefined.","line":30,"column":1,"nodeType":"Block","endLine":30,"endColumn":1},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":85,"column":1,"nodeType":"Block","endLine":103,"endColumn":4},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":132,"column":1,"nodeType":"Block","endLine":145,"endColumn":4},{"ruleId":"array-callback-return","severity":1,"message":"Array.prototype.map() expects a return value from arrow function.","line":203,"column":43,"nodeType":"ArrowFunctionExpression","messageId":"expectedInside","endLine":203,"endColumn":45},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Syntax error in type: [type]","line":280,"column":1,"nodeType":"Block","endLine":280,"endColumn":1},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Syntax error in type: [type]","line":282,"column":1,"nodeType":"Block","endLine":282,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst P = require('bluebird');\nconst _ = require('lodash');\nconst domino = require('domino');\nconst striptags = require('striptags');\nconst api = require('./api-util');\nconst dateUtil = require('./date-util');\nconst util = require('./util');\nconst HTTPError = util.HTTPError;\nconst parsoid = require('./parsoid');\n\nconst PROD_COMMONS_DOMAIN = 'commons.wikimedia.org';\nconst BETA_COMMONS_DOMAIN = 'commons.wikimedia.beta.wmflabs.org';\n\n/**\n * Get the correct Commons domain to handle the request.\n *\n * @param {!string} domain original request domain\n * @return {!string} Commons domain for beta or prod\n */\nfunction getCommonsDomain(domain) {\n return domain.endsWith('beta.wmflabs.org') ? BETA_COMMONS_DOMAIN : PROD_COMMONS_DOMAIN;\n}\n\n/**\n * get page object from api response\n *\n * @param {Object} response MWAPI response\n * @param {Bool} dontThrow if true throw HTTP error 404\n * @return {Object} Page Object\n */\nfunction getPageObject(response, dontThrow) {\n const page = response.body.query.pages[0];\n if (!page.pageid || page.missing === true) {\n if (dontThrow) {\n page.notfound = true;\n return page;\n } else {\n throw new HTTPError({\n status: 404,\n type: 'not_found',\n title: 'No picture of the day for this date',\n detail: 'There is no picture of the day for this date.'\n });\n }\n }\n return page;\n}\n\n/**\n * @param {!domino.Document} doc\n * @return {void}\n */\nfunction removeLangLabels(doc) {\n const labels = doc.querySelectorAll('span[class*=langlabel-]') || [];\n labels.forEach((element) => {\n element.parentNode.removeChild(element);\n });\n}\n\n/**\n * @param {!domino.Document} doc\n * @return {!Object.<string, string>} Map of languages to descriptions\n */\nfunction queryDescriptions(doc) {\n const descriptions = {};\n const descriptionElements = doc.querySelectorAll('.description[class*=lang-]') || [];\n descriptionElements.forEach((element) => {\n descriptions[element.lang] = element.innerHTML.trim();\n });\n return descriptions;\n}\n\n/**\n * Converts a metadata array to a standard JS key-value object.\n *\n * @param {!Array} meta A metadata array from Commons ([ { name: foo, value: bar }, ... ])\n * @return {!Object} a consolidated object ({ foo: bar, ... })\n */\nfunction metadataToObject(meta) {\n return Object.assign(...meta.map((item) => ({ [item.name]: item.value })));\n}\n\n/**\n * Provides a consistent structure for extended metadata (extmetadata) properties returned from the\n * MW API. As returned directly from the MW API, these values may be strings or objects, and may\n * or may not specify the language in which they are provided. This provides some structure to help\n * clients consume the data more easily.\n * The result language will be chosen according to the following algorithm:\n * 1) If a key for preferredLang exists, use preferredLang;\n * 2) Else, if the key exists in English, use English;\n * 3) Else, use the first available language.\n * The return value will include the following properties:\n * html (required): the original value text in the chosen language, likely (but not necessarily)\n * HTML-formatted;\n * text (required): the original value text with HTML-formatting stripped;\n * lang (optional): the chosen language code, if language codes were provided\n *\n * @param {!Object|string} val Value of the extmetadata property\n * @param {!string} preferredLang preferred language (most likely the request language)\n * @return {?Object} structured values for the extmetadata property\n */\nfunction structureExtMetadataValue(val, preferredLang) {\n let html;\n let lang;\n\n if (typeof val === 'object') {\n if (val[preferredLang]) {\n lang = preferredLang;\n } else if (val.en) {\n lang = 'en';\n } else if (Object.keys(val)[0]) {\n lang = Object.keys(val)[0];\n } else {\n return;\n }\n html = val[lang];\n } else if (typeof val === 'string') {\n html = val;\n } else {\n return;\n }\n\n return {\n html,\n text: striptags(html).trim(),\n lang\n };\n}\n\n/**\n * Get structured artist info from extmetadata (to the extent possible).\n * We take a rather conservative approach here:\n * 1) In the 'html' property, we always return the full HTML string.\n * 2) If the field contains only plain text, we assume this is an artist name and\n * return it in the 'name' property.\n * 3) If the HTML string is of a specific common form, we parse the user name and\n * user page from it, and return them in the 'name' and 'user_page' fields respectively.\n * That form is \"<a href=\\\"//commons.wikimedia.org/wiki/User:Foo\\\" title=\\\"User:Foo\\\">Foo</a>\".\n *\n * @param {!Object|string} val The Artist value from extmetadata\n * @param {!string} preferredLang \"artist\" metadata value from the MW API\n * @return {?Object} structured artist info\n */\nfunction getStructuredArtistInfo(val, preferredLang) {\n const result = structureExtMetadataValue(val, preferredLang);\n if (!result) {\n return;\n }\n const doc = domino.createDocument(result.html);\n if (!doc.body.textContent) {\n return;\n }\n let name;\n let userPage;\n if (doc.body.textContent === result.html) {\n name = doc.body.textContent;\n } else {\n const a = doc.body.querySelector('a');\n if (a && a.outerHTML === result.html && a.getAttribute('title') === `User:${ doc.body.textContent }` &&\n // TODO: Update to handle all Wikimedia project domains\n a.getAttribute('href') === `//commons.wikimedia.org/wiki/${ a.title }`) {\n name = doc.body.textContent;\n userPage = `https:${ a.getAttribute('href') }`;\n }\n }\n return Object.assign(result, { name, user_page: userPage });\n}\n\n/**\n * Provides consistent structuring of extmetadata values. See comments on\n * structureExtMetadataProperty for the specific steps applied to each value.\n *\n * @param {!Object} extMetadata extmetadata object from MW API\n * @param {!string} preferredLang preferred language (most likely the request language)\n * @return {?Object} set of structured extmetadata values\n */\nfunction structureExtMetadataValues(extMetadata, preferredLang) {\n return Object.keys(extMetadata).reduce((acc, cur) => {\n const val = extMetadata[cur].value;\n if (cur === 'Artist') {\n // Special-case handling for the Artist property (conditionally including a\n // derived Commons username and User page URL), which is used for something\n // or other in the Android app.\n acc[cur] = getStructuredArtistInfo(val, preferredLang);\n } else {\n acc[cur] = structureExtMetadataValue(val, preferredLang);\n }\n return acc;\n }, {});\n}\n\n/**\n * Provides consistent structuring of wbentities values for the structured captions field\n *\n * @param {!Object} wbentity object data from wbgetentities API action\n * @return {!Object} structured captions for given wbentity\n */\nfunction structureCaptions(wbentity) {\n const captions = wbentity && wbentity.labels;\n if (captions) {\n Object.keys(captions).map((index) => {\n captions[index] = captions[index].value;\n });\n }\n return captions;\n}\n\n/**\n * Make image info result\n *\n * @param {!Object} wbentity Wikibase entity object\n * @param {!Object} image metadata query results to be parsed and formatted\n * @param {!Object} siteinfo Site info\n * @param {!string} preferredLang language code of the preferred language for metadata values\n * @param {!Object} desc Description Value pre-processed (needed for Picture of the day)\n * @return {!Object}\n */\nfunction makeResult(wbentity, image, siteinfo, preferredLang, desc) {\n const imageInfo = image.imageinfo[0];\n const meta = imageInfo.metadata && metadataToObject(imageInfo.metadata);\n const ext = imageInfo.extmetadata &&\n structureExtMetadataValues(imageInfo.extmetadata, preferredLang);\n const isAudio = imageInfo.mediatype === 'AUDIO';\n const isSvg = imageInfo.mime && imageInfo.mime.includes('svg');\n const captions = structureCaptions(wbentity);\n\n return {\n title: image.pageprops && image.pageprops.displaytitle || image.title,\n thumbnail: {\n source: imageInfo.thumburl,\n width: imageInfo.thumbwidth,\n height: imageInfo.thumbheight,\n mime: imageInfo.thumbmime\n },\n image: {\n source: imageInfo.url,\n width: isAudio || isSvg ? undefined : imageInfo.width,\n height: isAudio || isSvg ? undefined : imageInfo.height,\n mime: imageInfo.mime\n },\n page_count: imageInfo.pagecount,\n file_page: imageInfo.descriptionurl,\n duration: meta && (meta.length || meta.playtime_seconds) || undefined,\n artist: ext && ext.Artist,\n credit: ext && ext.Credit,\n // Use original value for each of these since it's well standardized data\n license: {\n type: ext && ext.LicenseShortName && ext.LicenseShortName.html,\n code: ext && ext.License && ext.License.html,\n url: ext && ext.LicenseUrl && ext.LicenseUrl.html\n },\n description:\n desc && structureExtMetadataValue(desc, preferredLang) ||\n ext && ext.ImageDescription,\n wb_entity_id: wbentity.id,\n structured: {\n captions: captions && Object.keys(captions).length ? captions : {}\n }\n };\n}\n\n/**\n * Get Picture of the day description from Parsoid response\n *\n * @param {Object} req req Server request\n * @param {Object} body parsoid body response\n * @return {Object} POTD description value\n */\nfunction getPotdDescriptionValue(req, body) {\n const doc = domino.createDocument(body);\n removeLangLabels(doc);\n return queryDescriptions(doc);\n}\n\n/**\n * Builds the request to get the Picture of the day of a given date.\n *\n * @param {[type]} req [description]\n * @param {!Date} date for which day the featured image of theday is requested\n * @param {[type]} siteinfo [description]\n * @return {!Promise} a promise resolving as an JSON object containing the response\n */\nfunction requestPictureOfTheDay(req, date, siteinfo) {\n const isoDate = dateUtil.formatISODate(date);\n const commonsDomain = getCommonsDomain(req.params.domain);\n let page;\n const filter = [\n 'Artist',\n 'LicenseShortName',\n 'License',\n 'LicenseUrl',\n 'Credit'\n ];\n\n const imageInfoProps = [\n 'url',\n 'dimensions',\n 'extmetadata'\n ];\n\n const query = {\n action: 'query',\n format: 'json',\n formatversion: 2,\n generator: 'images',\n prop: 'imageinfo|revisions',\n iiextmetadatafilter: filter.join('|'),\n iimetadataversion: 'latest',\n iiprop: imageInfoProps.join('|'),\n iiurlwidth: 640,\n rawcontinue: '',\n titles: `Template:Potd/${ isoDate }`\n };\n return api.mwApiGet(req, query, commonsDomain).then((response) => {\n page = getPageObject(response);\n\n const parsoidReq = Object.create(req);\n parsoidReq.params = Object.create(req.params);\n parsoidReq.params.title = page.title;\n parsoidReq.params.domain = commonsDomain;\n\n const structuredQuery = {\n action: 'wbgetentities',\n format: 'json',\n formatversion: 2,\n sites: 'commonswiki',\n props: 'labels|info',\n titles: page.title\n };\n\n return P.join(\n parsoid.getParsoidHtml(parsoidReq),\n api.mwApiGet(req, structuredQuery, commonsDomain),\n (html, structured) => {\n const description = getPotdDescriptionValue(req, html.body);\n const lang = req.params.domain.split('.')[0];\n const wbentity = _.values(structured.body.entities)[0];\n return {\n payload: makeResult(wbentity, page, siteinfo, lang, description),\n meta: util.getRevAndTidFromEtag(html.headers)\n };\n });\n });\n}\n\nmodule.exports = {\n requestPictureOfTheDay,\n testing: {\n structureExtMetadataValue\n }\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/most-read.js","messages":[{"ruleId":"jsdoc/check-access","severity":1,"message":"At most one access-control tag may be present on a JSDoc block.","line":81,"column":1,"nodeType":"Block","endLine":84,"endColumn":4},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@public should not have a bracketed type in \"jsdoc\" mode.","line":82,"column":1,"nodeType":"Block","endLine":82,"endColumn":1},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@public should not have a bracketed type in \"jsdoc\" mode.","line":83,"column":1,"nodeType":"Block","endLine":83,"endColumn":1},{"ruleId":"max-len","severity":1,"message":"This line has a length of 122. Maximum allowed is 100.","line":100,"column":1,"nodeType":"Program","messageId":"max","endLine":100,"endColumn":123},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":115,"column":28,"nodeType":"NewExpression","endLine":115,"endColumn":80},{"ruleId":"max-len","severity":1,"message":"This line has a length of 112. Maximum allowed is 100.","line":116,"column":1,"nodeType":"Program","messageId":"max","endLine":116,"endColumn":113},{"ruleId":"no-shadow","severity":1,"message":"'pageviews' is already declared in the upper scope on line 10 column 7.","line":145,"column":19,"nodeType":"Identifier","messageId":"noShadow","endLine":145,"endColumn":28},{"ruleId":"array-callback-return","severity":1,"message":"Array.prototype.map() expects a return value from arrow function.","line":161,"column":25,"nodeType":"ReturnStatement","messageId":"expectedReturnValue","endLine":161,"endColumn":32},{"ruleId":"max-len","severity":1,"message":"This line has a length of 148. Maximum allowed is 100.","line":202,"column":1,"nodeType":"Program","messageId":"max","endLine":202,"endColumn":149},{"ruleId":"max-len","severity":1,"message":"This line has a length of 113. Maximum allowed is 100.","line":212,"column":1,"nodeType":"Program","messageId":"max","endLine":212,"endColumn":114}],"suppressedMessages":[{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in '_id'.","line":157,"column":26,"nodeType":"MemberExpression","messageId":"unexpectedUnderscore","endLine":157,"endColumn":87,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":10,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Most-read article promise and related support functions.\n */\n\n'use strict';\n\nconst BBPromise = require('bluebird');\nconst regexEscape = require('lodash').escapeRegExp;\nconst dateUtil = require('./date-util');\nconst pageviews = require('./pageviews');\nconst si = require('./siteinfo');\nconst util = require('./util');\nconst apiUtil = require('./api-util');\nconst Title = require('mediawiki-title').Title;\n\nconst MAX_TITLES = 50;\n\nconst DENY_LIST = {\n '*': [\n '-',\n 'wiki.phtml',\n 'Test_card',\n 'Web_scraping',\n 'XHamster',\n 'Java_(programming_language)',\n 'Images/upload/bel.jpg',\n 'Superintelligence:_Paths,_Dangers,_Strategies',\n 'Okto',\n 'Proyecto_40',\n 'AMGTV',\n 'Lali_Espósito',\n 'La7',\n 'Vagina',\n 'کس', // mznwiki\n 'مقعد', // mznwiki\n 'Tobias_Sammet', // dewiki T238942\n 'Avantasia', // dewiki T238942\n 'Edguy', // dewiki T238942\n 'Pornhub', // dewiki T238942\n 'Index', // T327904\n 'Index_(statistics)',\n 'Index,_Washington',\n 'Index_(economics)',\n 'XXX:_Return_of_Xander_Cage',\n 'XXX_(film_series)',\n 'XXX_(2002_film)',\n 'Cookie_(informatique)',\n 'Nigger',\n 'nigger',\n 'YouTube',\n 'Cleopatra',\n 'Outlook.com',\n 'Sex',\n '.xxx',\n 'XNXX',\n 'XVideos',\n 'XXXX_(beer)',\n 'XXXX',\n 'XXXX_Gold',\n 'XXXX_(album)',\n 'XXXX_Summer_Bright_Lager',\n 'XXXX_Panzer_Corps',\n 'XXX:_State_of_the_Union',\n 'XXXTentacion',\n 'X_(2022_film)',\n 'Super_Bowl_XXX',\n 'Murder_of_XXXTentacion',\n 'ChatGPT',\n 'Magic_cross_piercing'\n ],\n ru: [\n 'Яндекс',\n 'ЯRUS',\n 'IMGSRC.RU'\n ],\n test: [\n 'User:JGiannelos_(WMF)/test_most_read_block'\n ]\n};\n\n/**\n * @public {!string} date ISO 8601 timestamp of pageviews recorded\n * @public {!number} views Integer pageviews on date\n */\nclass DatedPageviews {\n constructor(date, views) {\n this.date = date;\n this.views = views;\n }\n}\n\nfunction getTopPageviews(req, domain, date) {\n const restReq = {\n params: { domain: 'wikimedia.org' },\n headers: { accept: 'application/json; charset=utf-8' }\n };\n return new pageviews.Client(req, restReq).reqTop(domain, pageviews.Platform.ALL, date);\n}\nfunction pageviewsPageRspToDatedPageviews(rsp) {\n return rsp.body.items.map((item) => new DatedPageviews(dateUtil.iso8601DateFromYYYYMMDD(item.timestamp), item.views));\n}\n\nfunction getViewHistory(req, domain, startDate, endDate, entry) {\n const restReq = {\n params: { domain: 'wikimedia.org' },\n headers: { accept: 'application/json; charset=utf-8' }\n };\n const client = new pageviews.Client(req, restReq);\n return client.reqPage(util.removeTLD(domain), pageviews.Platform.ALL, pageviews.Agent.USER,\n entry.article, pageviews.Granularity.DAILY, startDate, endDate)\n .then(pageviewsPageRspToDatedPageviews);\n}\n\nfunction filterSpecial(articles, mainPageTitle) {\n const mainPageRegExp = new RegExp(`^${ regexEscape(mainPageTitle) }$`, 'i');\n return articles.filter((entry) => entry.namespace.id === 0 && !mainPageRegExp.test(entry.titles.canonical));\n}\n\nfunction isBlocked(lang, title) {\n return (lang in DENY_LIST && DENY_LIST[lang].includes(title)) || DENY_LIST['*'].includes(title);\n}\n\nfunction promise(app, req) {\n if (req.params.domain === 'fy.wikipedia.org') {\n return BBPromise.resolve({ meta: {} });\n }\n\n if (!dateUtil.validate(dateUtil.hyphenDelimitedDateString(req))) {\n if (req.query.aggregated) {\n return BBPromise.resolve({ meta: {} });\n }\n dateUtil.throwDateError();\n }\n\n const reqDate = dateUtil.getRequestedDate(req);\n const rspDate = req.query.aggregated ? dateUtil.addDays(reqDate, -1) : reqDate;\n\n return BBPromise.join(\n getTopPageviews(req, util.removeTLD(req.params.domain), rspDate),\n si.getSiteInfo(req),\n (pageviewsResponse, siteinfo) => {\n const mainPage = siteinfo.general && siteinfo.general.mainpage;\n const mainPageTitle = Title.newFromText(mainPage, siteinfo);\n\n const pageviews = pageviewsResponse &&\n pageviewsResponse.body &&\n pageviewsResponse.body.items &&\n pageviewsResponse.body.items[0];\n\n const pageviewsSlice = pageviews.articles &&\n pageviews.articles.slice(0, MAX_TITLES);\n\n const titles = pageviewsSlice.map((entry) => {\n let ns;\n try {\n // eslint-disable-next-line no-underscore-dangle\n ns = Title.newFromText(entry.article, siteinfo).getNamespace()._id;\n } catch (e) {\n if (e.type === 'title-invalid-utf8') {\n req.logger.log('warn', e);\n return;\n } else {\n throw e;\n }\n }\n return Object.assign({ ns }, entry);\n }).filter((entry) => entry !== undefined)\n .filter((entry) => entry.ns === 0)\n .filter((entry) => !isBlocked(siteinfo.general.lang, entry.article));\n\n const resultsDate = `${ pageviews.year }-${ pageviews.month }-${ pageviews.day }Z`;\n const start = dateUtil.addDays(new Date(resultsDate), -4);\n const end = new Date(resultsDate);\n\n const results = titles.map((entry) => {\n // Will be merged-in on a later pass\n entry.$summary = apiUtil.restGetSummary(req, entry.article);\n entry.view_history = getViewHistory(req, req.params.domain, start, end, entry);\n delete entry.article;\n delete entry.ns;\n return entry;\n });\n\n return util.promiseAwaitAll(results, true, req.logger)\n .then((resp) => {\n let articles = resp\n // Throw away items where summaries failed to fetch.\n .filter((entry) => !!entry.$summary)\n // Merge the summary content into the article view data.\n .map((entry) => {\n Object.assign(entry, entry.$summary);\n delete entry.$summary;\n return entry;\n });\n\n // Deduplicate the most-read pages cause some of them might have been\n // redirects which have now been resolved.\n articles = util.removeDuplicateTitles(articles, (orig, dupe) => {\n orig.views += dupe.views;\n if (orig.view_history) {\n orig.view_history.forEach((toViewsForDate) => {\n const filteredViews = dupe.view_history.filter((fromViewsForDate) => toViewsForDate.date === fromViewsForDate.date);\n if (filteredViews.length) {\n toViewsForDate.views += filteredViews[0].views;\n }\n });\n }\n return orig;\n });\n\n articles = filterSpecial(articles, mainPageTitle.getPrefixedDBKey());\n articles = articles.filter((entry) => !isBlocked(siteinfo.general.lang, entry.titles.canonical));\n\n const vary = [];\n if (siteinfo.variants && siteinfo.variants.length > 1) {\n vary.push('accept-language');\n }\n return {\n payload: {\n date: resultsDate,\n articles\n },\n meta: { revision: dateUtil.dateStringFrom(req), vary }\n };\n });\n }).catch((err) => {\n // Catch and handle the error if this is an aggregated request and the\n // pageview data are not yet loaded.\n if (req.query.aggregated && err.status === 404) {\n return BBPromise.resolve({ meta: {} });\n }\n throw err;\n });\n}\n\nmodule.exports = {\n promise,\n\n // visible for testing\n filterSpecial,\n isBlocked\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/news.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":15,"column":1,"nodeType":"Block","endLine":15,"endColumn":1},{"ruleId":"no-shadow","severity":1,"message":"'si' is already declared in the upper scope on line 8 column 7.","line":73,"column":12,"nodeType":"Identifier","messageId":"noShadow","endLine":73,"endColumn":14},{"ruleId":"no-shadow","severity":1,"message":"'result' is already declared in the upper scope on line 80 column 19.","line":96,"column":20,"nodeType":"Identifier","messageId":"noShadow","endLine":96,"endColumn":26}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst BBPromise = require('bluebird');\nconst parsoid = require('./parsoid');\nconst util = require('./util');\nconst apiUtil = require('./api-util');\nconst docUtil = require('./doc-util');\nconst si = require('./siteinfo');\nconst HTTPError = util.HTTPError;\nconst NEWS_TEMPLATES = require('../etc/news-sites');\n\n/**\n * Remove any elements matching selector from doc\n *\n * @param {Document} doc\n * @param {string} selector\n * @return {boolean} true if at least one node has been removed\n */\nfunction rmElements(doc, selector) {\n const nodes = doc.querySelectorAll(selector) || [];\n for (let idx = 0; idx < nodes.length; idx++) {\n const node = nodes[idx];\n node.parentNode.removeChild(node);\n }\n return nodes.length > 0;\n}\n\nfunction constructStory(req, lang, storyHtml) {\n const story = { links: [] };\n const linkTitles = [];\n\n const topicAnchor = storyHtml.querySelector(NEWS_TEMPLATES[lang].topicAnchorSelector);\n const topicTitle = util.extractDbTitleFromAnchor(topicAnchor);\n storyHtml.querySelectorAll('a[rel=\"mw:WikiLink\"]:not(.new)').forEach((anchor) => {\n const storyTitle = util.extractDbTitleFromAnchor(anchor);\n if (!linkTitles.includes(storyTitle)) {\n story.links.splice(\n storyTitle === topicTitle ? 0 : story.links.length,\n 0,\n apiUtil.restGetSummary(req, storyTitle)\n );\n linkTitles.push(storyTitle);\n }\n });\n\n rmElements(storyHtml, 'span[style^=float:right]');\n story.story = storyHtml.innerHTML;\n if (story.story.length > 0 && story.links.length > 0) {\n return story;\n } else {\n return undefined;\n }\n}\n\nfunction promise(app, req) {\n const lang = req.params.domain.split('.')[0];\n const aggregated = !!req.query.aggregated;\n\n if (!NEWS_TEMPLATES[lang]) {\n if (aggregated) {\n return BBPromise.resolve({});\n }\n throw new HTTPError({\n status: 404,\n type: 'not_found',\n title: 'Not found',\n detail: 'The language you have requested is not yet supported.'\n });\n }\n\n req.params.title = NEWS_TEMPLATES[lang].title;\n return si.getSiteInfo(req)\n .then((si) => parsoid.getParsoidHtml(req)\n .then((response) => {\n const selector = NEWS_TEMPLATES[lang].headlineSelectorAll;\n const vary = [];\n if (si.variants && si.variants.length > 1) {\n vary.push('accept-language');\n }\n const result = {\n payload: [],\n meta: { etag: util.getRevisionFromEtag(response.headers), vary }\n };\n return docUtil.createDocument(response.body)\n .then((doc) => {\n const headlines = doc.querySelectorAll(selector);\n Array.prototype.forEach.call(headlines, (storyHtml) => {\n const story = constructStory(req, lang, storyHtml);\n if (story) {\n result.payload.push(story);\n }\n });\n\n return result;\n })\n .then((result) => util.promiseAwaitAll(result, true, req.logger));\n }));\n}\n\nmodule.exports = {\n promise,\n\n // visible for testing\n constructStory\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/on-this-day.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Integer' is undefined.","line":34,"column":1,"nodeType":"Block","endLine":34,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'AnchorElement' is undefined.","line":122,"column":1,"nodeType":"Block","endLine":122,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Integer' is undefined.","line":123,"column":1,"nodeType":"Block","endLine":123,"endColumn":1},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":128,"column":12,"nodeType":"NewExpression","endLine":128,"endColumn":73},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'AnchorElement' is undefined.","line":141,"column":1,"nodeType":"Block","endLine":141,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'AnchorElement' is undefined.","line":151,"column":1,"nodeType":"Block","endLine":151,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":172,"column":1,"nodeType":"Block","endLine":172,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'AnchorElement' is undefined.","line":184,"column":1,"nodeType":"Block","endLine":184,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":207,"column":1,"nodeType":"Block","endLine":207,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":253,"column":1,"nodeType":"Block","endLine":253,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Integer' is undefined.","line":270,"column":1,"nodeType":"Block","endLine":270,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":309,"column":1,"nodeType":"Block","endLine":309,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":320,"column":1,"nodeType":"Block","endLine":320,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":321,"column":1,"nodeType":"Block","endLine":321,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":342,"column":1,"nodeType":"Block","endLine":342,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":360,"column":1,"nodeType":"Block","endLine":360,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":380,"column":1,"nodeType":"Block","endLine":380,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":412,"column":1,"nodeType":"Block","endLine":412,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":426,"column":1,"nodeType":"Block","endLine":426,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":440,"column":1,"nodeType":"Block","endLine":440,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":454,"column":1,"nodeType":"Block","endLine":454,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":468,"column":1,"nodeType":"Block","endLine":468,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":483,"column":1,"nodeType":"Block","endLine":483,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":484,"column":1,"nodeType":"Block","endLine":484,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"sendResponse\" type.","line":543,"column":1,"nodeType":"Block","endLine":543,"endColumn":1}],"suppressedMessages":[{"ruleId":"no-prototype-builtins","severity":2,"message":"Do not access Object.prototype method 'hasOwnProperty' from target object.","line":509,"column":16,"nodeType":"CallExpression","messageId":"prototypeBuildIn","endLine":509,"endColumn":30,"suggestions":[{"messageId":"callObjectPrototype","data":{"prop":"hasOwnProperty"},"fix":{"range":[17408,17430],"text":"Object.prototype.hasOwnProperty.call(object, "},"desc":"Call Object.prototype.hasOwnProperty explicitly."}],"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":25,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst _ = require('lodash');\nconst parsoid = require('./parsoid');\nconst apiUtil = require('./api-util');\nconst util = require('./util');\nconst docUtil = require('./doc-util');\nconst si = require('./siteinfo');\nconst HTTPError = util.HTTPError;\nconst languages = require('./on-this-day.languages').languages;\n\n/**\n * WMFPage models a link to a page\n *\n * @param {!string} title a page title, i.e. 'Goat'\n * @param {!boolean} isTopic events can have multiple links to pages, if this particular link is\n * bolded, such as those seen on https://en.m.wikipedia.org/wiki/Wikipedia:On_this_day/Today,\n * isTopic will be true.\n */\nclass WMFPage {\n constructor(title, isTopic) {\n this.title = title;\n if (isTopic) {\n this.isTopic = isTopic;\n }\n }\n}\n\n/**\n * WMFEvent models an historical event\n *\n * @param {!string} text event description\n * @param {!Array} pages array of WMFPage's for the event\n * @param {!Integer} year the year the event first happened. A negative number indicates the event\n * occured 'BC' (sometimes also denoted 'BCE' - i.e. '32 BC' or '200 BCE)'.\n */\nclass WMFEvent {\n constructor(text, pages, year) {\n this.text = text;\n this.pages = pages;\n this.year = year;\n }\n}\n\n/**\n * WMFHoliday models an annually occuring holiday.\n *\n * @param {!string} text event description\n * @param {!Array} pages array of WMFPage's for the event\n */\nclass WMFHoliday {\n constructor(text, pages) {\n this.text = text;\n this.pages = pages;\n }\n}\n\n/**\n * Gets day page titles, which are formatted as follows: 'May_20'\n *\n * @param {!string} monthNumberString string for month number ranging from '1' to '12'\n * @param {!string} dayNumberString string number for day of month\n * @param {!string} lang String for project language code\n * @return {!string} day page title. Example, inputs ('5', '20') returns 'May_20'\n */\nfunction titleForDayPageFromMonthDayNumberStrings(monthNumberString, dayNumberString, lang) {\n const monthNumber = parseInt(monthNumberString, 10);\n const monthName = languages[lang].monthNames[monthNumber - 1];\n const dayNumber = parseInt(dayNumberString, 10);\n return languages[lang].dayPage.nameFormatter(monthName, monthNumber, dayNumber);\n}\n\n/**\n * Gets selected page titles, which are formatted as follows:\n * 'Wikipedia:Selected_anniversaries/May_20'\n *\n * @param {!string} monthNumberString a string for month number ranging from '1' to '12'\n * @param {!string} dayNumberString a string number for day of month\n * @param {!string} lang a string for project language code\n * @return {!string} selected page title. Example, inputs ('5', '20') returns\n * 'Wikipedia:Selected_anniversaries/May_20'\n */\nfunction titleForSelectedPageFromMonthDayNumberStrings(monthNumberString, dayNumberString, lang) {\n const monthNumber = parseInt(monthNumberString, 10);\n const monthName = languages[lang].monthNames[monthNumber - 1];\n const dayNumber = parseInt(dayNumberString, 10);\n return languages[lang].selectedPage.nameFormatter(monthName, monthNumber, dayNumber);\n}\n\n/**\n * Gets day page Parsoid title for day pages such as https://en.m.wikipedia.org/wiki/May_20\n *\n * @param {!Request} req Request containing month (req.params.mm) and day (req.params.dd) number\n * string params\n * @return {!string} day page title for month and day number. Example, input mm '5' dd '20'\n * returns 'May_20'\n */\nconst dayTitleForRequest = (req) => {\n const lang = req.params.domain.split('.')[0];\n return titleForDayPageFromMonthDayNumberStrings(req.params.mm, req.params.dd, lang);\n};\n\n/**\n * Gets selected page Parsoid title for selected pages such as\n * https://en.m.wikipedia.org/wiki/Wikipedia:Selected_anniversaries/May_20. These pages are\n * also where 'Today' page https://en.m.wikipedia.org/wiki/Wikipedia:On_this_day/Today content comes\n * from.\n *\n * @param {!Request} req Request containing month (req.params.mm) and day (req.params.dd) number\n * string params\n * @return {!string} elected page title for month and day number. Example, input mm '5' dd '20\n * returns 'Wikipedia:Selected_anniversaries/May_20'\n */\nconst selectedTitleForRequest = (req) => {\n const lang = req.params.domain.split('.')[0];\n return titleForSelectedPageFromMonthDayNumberStrings(req.params.mm, req.params.dd, lang);\n};\n\n/**\n * Determines whether anchor is for specific year page.\n *\n * @param {!AnchorElement} anchor\n * @param {!Integer} year\n * @param {!string} era\n * @return {!boolean}\n */\nfunction isAnchorForYear(anchor, year, era) {\n return new RegExp(String.raw`^${ Math.abs(year) }\\s*${ era }$`, 'i').test(anchor.title);\n}\n\n/**\n * Regex for determining whether anchor is not relative.\n *\n * @type {RegExp}\n */\nconst nonRelativeAnchorRegex = /^http[s]?.*/i;\n\n/**\n * Determines whether anchor is relative.\n *\n * @param {!AnchorElement} anchor\n * @return {!boolean}\n */\nfunction isAnchorRelative(anchor) {\n return !nonRelativeAnchorRegex.test(anchor.href);\n}\n\n/**\n * Determines whether anchor is a reference.\n *\n * @param {!AnchorElement} anchor\n * @return {!boolean}\n */\nfunction isAnchorReference(anchor) {\n return anchor.parentElement?.classList.contains('reference') ||\n anchor.parentElement?.parentElement?.classList.contains('reference');\n}\n\n/**\n * Trims and also removes bracketed numbers.\n *\n * @param {!string} string\n * @return {!string}\n */\nfunction cleanString(string) {\n return string.replace(/\\[\\d+\\]/g, '').trim();\n}\n\n/**\n * Removes style element from a list element\n *\n * @param {!ListElement} element\n */\nfunction removeStyleElement(element) {\n const styles = Array.from(element.querySelectorAll('STYLE'));\n for (const style of styles) {\n style.remove();\n }\n}\n\n/**\n * Converts document anchor element to WMFPage model.\n *\n * @param {!AnchorElement} anchorElement Anchor to convert\n * @return {!WMFPage} a WMFPage\n */\nfunction wmfPageFromAnchorElement(anchorElement) {\n const title = util.extractDbTitleFromAnchor(anchorElement);\n const isTopic = anchorElement.parentElement.tagName === 'B';\n return new WMFPage(title, isTopic);\n}\n\n/**\n * Converts document list element to WMFEvent model.\n * A regular expression determines valid \"year list elements\" and separating their components.\n * For example: '399 BC - Death of Socrates'\n * RegEx Capture groups:\n * 1st - entire match (will be non-null if the string looks like a year list element)\n * '399 BC - Death of Socrates'\n * 2nd - year number, required\n * '399'\n * 3rd - 'BC' indication string, optional\n * 'BC'\n * 4th - event description string, required\n * 'Death of Socrates'\n *\n * @param {!ListElement} listElement List element to convert\n * @param {!boolean} isSelected If listElement is extracted from selectedPage\n * @param {!string} lang String for project language code\n * @return {?WMFEvent} a WMFEvent or null if the list element isn't formatted as an event\n */\nfunction wmfEventFromListElement(listElement, isSelected, lang) {\n const regEx = isSelected ? languages[lang].selectedRegEx : languages[lang].yearListElementRegEx;\n\n const match = listElement.textContent.match(regEx);\n if (match === null) {\n return null;\n }\n\n let year = parseInt(match[1], 10);\n const isBC = (match[2] !== undefined);\n let era = '';\n if (isBC) {\n // Negate BC years so they sort correctly\n year = -year;\n era = match[2];\n }\n\n // In Chinese, 'BC' is written in front of year. E.g. '前153年',\n // so the 2nd capture group is 'BC' indication and 3rd is year number.\n if (lang === 'zh') {\n year = parseInt(match[2], 10);\n if (match[1] !== '') {\n year = -year;\n era = match[2];\n }\n }\n\n const textAfterYear = cleanString(match[3]);\n\n const pages = Array.from(listElement.querySelectorAll('a:not(.new)'))\n .filter((anchor) => !isAnchorForYear(anchor, year, era))\n .filter((anchor) => !isAnchorReference(anchor))\n .filter(isAnchorRelative)\n .map(wmfPageFromAnchorElement);\n\n return new WMFEvent(textAfterYear, pages, year);\n}\n\n/**\n * Converts document list element to WMFHoliday model\n *\n * @param {!ListElement} listElement List element to convert\n * @return {!WMFHoliday} a WMFHoliday\n */\nfunction wmfHolidayFromListElement(listElement) {\n const text = cleanString(listElement.textContent);\n const pages = Array.from(listElement.querySelectorAll('a:not(.new)'))\n .filter((anchor) => !isAnchorReference(anchor))\n .filter(isAnchorRelative)\n .map(wmfPageFromAnchorElement);\n return new WMFHoliday(text, pages);\n}\n\n/**\n * WMFEvent comparator which properly handles negative 'BC'/'BCE' years\n *\n * @param {!WMFEvent} eventA First event\n * @param {!WMFEvent} eventB Second event\n * @return {!Integer} number of years between eventB and eventA ( yearB - yearA ).\n */\nfunction reverseChronologicalWMFEventComparator(eventA, eventB) {\n // Reminder: BC years are negative numbers.\n return eventB.year - eventA.year;\n}\n\n/**\n * Gets chronologically sorted array of WMFEvent models from an array of list elements.\n *\n * @param {!Array} listElements an array of document list elements\n * @param {!boolean} isSelected If listElement is extracted from selectedPage\n * @param {!string} lang a string for project language code\n * @return {!Array} sorted array of WMFEvent models, one for each year list element found\n * in 'listElements' argument\n */\nfunction eventsForYearListElements(listElements, isSelected, lang) {\n return listElements\n .map((element) => wmfEventFromListElement(element, isSelected, lang))\n .filter((possibleEvent) => possibleEvent instanceof WMFEvent)\n .sort(reverseChronologicalWMFEventComparator);\n}\n\n/**\n * Gets array of WMFHoliday models from an array of list elements.\n *\n * @param {!Array} listElements an array of document list elements\n * @return {!Array} an array of WMFHoliday models, one for each list element in\n * 'listElements' argument\n */\nfunction holidaysForHolidayListElements(listElements) {\n return listElements\n .map(wmfHolidayFromListElement)\n .filter((possibleHoliday) => possibleHoliday instanceof WMFHoliday);\n}\n\n/**\n * Determine if listElement has nested list elements.\n *\n * @param {!ListElement} listElement\n * @return {!boolean}\n */\nfunction listElementHasDescendentListElements(listElement) {\n return listElement.querySelector('UL > LI') !== undefined;\n}\n\n/**\n * Return ancestor list element of listElement, if any.\n * Returns undefined unless listElement is nested inside another listElement.\n *\n * @param {!ListElement} listElement\n * @return {?ListElement}\n */\nfunction ancestorListElementOfListElement(listElement) {\n const parent = listElement.parentElement;\n if (!parent) {\n return undefined;\n }\n const grandparent = parent.parentElement;\n if (!grandparent) {\n return undefined;\n }\n if (parent.tagName === 'UL' && grandparent.tagName === 'LI') {\n return grandparent;\n }\n return undefined;\n}\n\n/**\n * Gets prefix from a list element suitable to pre-pend to one of its decendent list element's\n * innerHTML.\n *\n * @param {!ListElement} ancestorListElement\n * @param {!string} lang a string for project language code\n * @return {!string}\n */\nfunction prefixFromAncestorListElement(ancestorListElement, lang) {\n const firstLine = ancestorListElement.textContent.split('\\n')[0];\n const yearPrefixRegEx = languages[lang].yearPrefixRegEx;\n const result = firstLine.match(yearPrefixRegEx);\n const isFirstLineAYear = (result !== null);\n const firstLineStringToUse = isFirstLineAYear ? result[1] : firstLine;\n const separator = isFirstLineAYear ? ' - ' : '\\n';\n const prefix = `${ firstLineStringToUse.trim() }${ separator }`;\n return prefix;\n}\n\n/**\n * Adds prefix from ancestor list elements to listElement.\n *\n * @param {!ListElement} listElement\n * @param {!string} lang a string for project language code\n */\nfunction addPrefixFromAncestorListElementsToListElement(listElement, lang) {\n const prefixes = [];\n removeStyleElement(listElement);\n let el = listElement;\n while ((el = ancestorListElementOfListElement(el))) {\n prefixes.push(prefixFromAncestorListElement(el, lang));\n }\n const prefixString = (prefixes.length === 0) ? '' : `${ prefixes.reverse().join('') }`;\n listElement.innerHTML = `${ _.escape(prefixString) }${ listElement.innerHTML.trim() }`;\n}\n\n/**\n * Gets list elements grouped under a given heading. Couldn't use pure CSS selector syntax for\n * extracting these - this is because some languages use further sub-headings under, say, 'births',\n * for things like 'Births before 1900' and so forth. We want *all* births, in this case - that is,\n * we want all list elements after the h2 'births' heading up until the next h2 heading.\n *\n * @param {!Document} document a DOM document to examine\n * @param {!string} headingIds an array of heading id strings\n * @param {!string} lang a string for project language code\n * @return {!Array} an array of list elements\n */\nfunction listElementsByHeadingID(document, headingIds, lang) {\n const elements = Array.from(document.querySelectorAll('h2,ul li'));\n const listElements = [];\n let grab = false;\n for (const element of elements) {\n if (element.tagName === 'H2') {\n grab = false;\n for (const headingId of headingIds) {\n if (element.id === headingId) {\n grab = true;\n }\n }\n } else if (element.tagName === 'LI' && grab) {\n\n if (listElementHasDescendentListElements(element)) {\n continue;\n }\n addPrefixFromAncestorListElementsToListElement(element, lang);\n listElements.push(element);\n }\n }\n return listElements;\n}\n\n/**\n * Gets array of WMFEvent models of births found in a document\n *\n * @param {!Document} doc a DOM document to examine\n * @param {!string} lang a string for project language code\n * @return {!Object} an object containing list of births\n */\nconst birthsInDoc = (doc, lang) => {\n const headingIds = languages[lang].dayPage.headingIds.births;\n return { births:\n eventsForYearListElements(listElementsByHeadingID(doc, headingIds, lang), false, lang)\n };\n};\n\n/**\n * Gets array of WMFEvent models of deaths found in a document\n *\n * @param {!Document} doc a DOM document to examine\n * @param {!string} lang a string for project language code\n * @return {!Object} an object containing list of deaths\n */\nconst deathsInDoc = (doc, lang) => {\n const headingIds = languages[lang].dayPage.headingIds.deaths;\n return { deaths:\n eventsForYearListElements(listElementsByHeadingID(doc, headingIds, lang), false, lang)\n };\n};\n\n/**\n * Gets array of WMFEvent models of events found in a document\n *\n * @param {!Document} doc a DOM document to examine\n * @param {!string} lang a string for project language code\n * @return {!Object} an object containing list of events\n */\nconst eventsInDoc = (doc, lang) => {\n const headingIds = languages[lang].dayPage.headingIds.events;\n return { events:\n eventsForYearListElements(listElementsByHeadingID(doc, headingIds, lang), false, lang)\n };\n};\n\n/**\n * Gets array of WMFEvent models of holidays and observances found in a document\n *\n * @param {!Document} doc a DOM document to examine\n * @param {!string} lang a string for project language code\n * @return {!Object} an object containing list of holidays and observances\n */\nconst holidaysInDoc = (doc, lang) => {\n const headingIds = languages[lang].dayPage.headingIds.holidays;\n return { holidays:\n holidaysForHolidayListElements(listElementsByHeadingID(doc, headingIds, lang))\n };\n};\n\n/**\n * Gets array of WMFEvent models of editor curated selected anniversaries found in a document\n *\n * @param {!Document} doc a DOM document to examine\n * @param {!string} lang a string for project language code\n * @return {!Object} an object containing list of selected anniversaries\n */\nconst selectionsInDoc = (doc, lang) => {\n const selector = languages[lang].selectedPage.listElementSelector;\n return { selected:\n eventsForYearListElements(doc.querySelectorAll(selector), true, lang)\n };\n};\n\n/**\n * Gets dictionary of arrays of WMFEvent models of all types: 'births', 'deaths', 'events',\n * 'holidays' and 'selected'\n *\n * @param {!Document} dayDoc a DOM document of events on a given day\n * @param {!Document} selectionsDoc a DOM document of editor curated events for a given day\n * @param {!string} lang a string for project language code\n * @return {!Object} an object with keys for arrays of 'selected', 'events',\n * 'births', 'deaths', and 'holidays'\n */\nconst everythingInDayAndSelectionsDocs = (dayDoc, selectionsDoc, lang) => {\n const result = {};\n Object.assign(result,\n selectionsInDoc(selectionsDoc, lang),\n eventsInDoc(dayDoc, lang),\n birthsInDoc(dayDoc, lang),\n deathsInDoc(dayDoc, lang),\n holidaysInDoc(dayDoc, lang)\n );\n return result;\n};\n\n/**\n * Determines whether a DOM element has a 'title' property\n *\n * @param {!Object} object DOM element to examine\n * @return {!boolean} true if the object has a 'title' property\n */\nfunction hasTitle(object) {\n return (\n object.hasOwnProperty('title') && // eslint-disable-line no-prototype-builtins\n typeof object.title === 'string'\n );\n}\n\n/**\n * Recursively creates summary promises instead of objects with 'title' properties\n * found in a dom object hierarchy\n *\n * @param {!Object} req the original request\n * @param {!Object} object Dom object to examine\n * @return {Object}\n */\nfunction fetchSummaries(req, object) {\n if (hasTitle(object)) {\n return apiUtil.restGetSummary(req, object.title);\n }\n for (const property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n if (typeof object[property] === 'object') {\n object[property] = fetchSummaries(req, object[property]);\n }\n }\n }\n return object;\n}\n\n/**\n * Ends a response. Creates $merge nodes and sets eTags, status etc.\n *\n * @param {!Object} req the original request\n * @param {!Object} res a response to end\n * @param {!Object} output a payload to JSONify and deliver\n * @param {?number} revision a revision\n * @param sendResponse\n * @return {Promise}\n */\nconst endResponseWithOutput = (req, res, output, revision, sendResponse = true) => {\n fetchSummaries(req, output);\n return util.promiseAwaitAll(output, true, req.logger)\n .then((resolvedOutput) => {\n // Drop duplicate pages from the output\n Object.keys(resolvedOutput).forEach((key) => {\n if (!Array.isArray(resolvedOutput[key])) {\n return;\n }\n resolvedOutput[key].forEach((elem) => {\n if (!elem || !Array.isArray(elem.pages)) {\n return;\n }\n elem.pages = util.removeDuplicateTitles(elem.pages);\n });\n });\n if (!sendResponse) {\n return resolvedOutput;\n }\n return si.getSiteInfo(req)\n .then((siteinfo) => {\n res.status(200);\n util.setETag(res, revision);\n if (siteinfo.variants && siteinfo.variants.length) {\n res.header('vary', 'accept-language');\n }\n util.setContentType(res, util.CONTENT_TYPES.onthisday);\n res.json(resolvedOutput).end();\n });\n });\n};\n\n/**\n * Promises to get Parsoid html for a title\n *\n * @param {!Object} app the application object\n * @param {!Request} req a request\n * @param {!string} title a page title to fetch\n * @return {!Promise} a Promise resolving to a response\n */\nfunction fetchParsoidHtmlForTitle(app, req, title) {\n const parsoidReq = Object.create(req);\n parsoidReq.params.title = title;\n return parsoid.getParsoidHtml(parsoidReq);\n}\n\n/**\n * Fetches document and revision for URI\n *\n * @param {!Object} app the application object\n * @param {!Object} req a request\n * @param {!Function} titleFunction a function for getting source page title from request\n * @return {!Promise} a Promise resolving to array containing [document, revision] for URI\n */\nfunction fetchDocAndRevision(app, req, titleFunction) {\n let revision;\n return fetchParsoidHtmlForTitle(app, req, titleFunction(req))\n .then((response) => {\n revision = util.getRevisionFromEtag(response.headers);\n return response.body;\n })\n .then(docUtil.createDocument)\n .then((doc) => [ doc, revision ]);\n}\n\nconst assertLanguage = (lang) => {\n if (!languages[lang]) {\n throw new HTTPError({\n status: 404,\n type: 'not_found',\n title: 'Not found',\n detail: 'The language you have requested is not yet supported.'\n });\n }\n};\n\n/**\n * Fetches document for URI, extracts sought elements, responds\n *\n * @param {!Object} app the application object\n * @param {!Request} req a request\n * @param {!Response} res a response\n * @param {!Function} titleFunction a function for getting source page title from request\n * @param {!Function} extractionFunction a function for extracting sought elements\n * (births, deaths, holidays, etc)\n * @param {boolean} sendResponse send an HTTP response or return early with the data payload\n * @return {!Promise} a Promise resolving when response has completed\n */\nfunction fetchAndRespond(app, req, res, titleFunction, extractionFunction, sendResponse = true) {\n const lang = req.params.domain.split('.')[0];\n assertLanguage(lang);\n\n return fetchDocAndRevision(app, req, titleFunction)\n .then((docAndRevision) => {\n const doc = docAndRevision[0];\n const revision = docAndRevision[1];\n const output = extractionFunction(doc, lang);\n return endResponseWithOutput(req, res, output, revision, sendResponse);\n });\n}\n\nmodule.exports = {\n dayTitleForRequest,\n selectedTitleForRequest,\n birthsInDoc,\n deathsInDoc,\n eventsInDoc,\n holidaysInDoc,\n selectionsInDoc,\n everythingInDayAndSelectionsDocs,\n assertLanguage,\n fetchAndRespond,\n fetchDocAndRevision,\n titleForDayPageFromMonthDayNumberStrings,\n WMFPage,\n WMFEvent,\n WMFHoliday,\n wmfHolidayFromListElement,\n wmfEventFromListElement,\n wmfPageFromAnchorElement,\n eventsForYearListElements,\n reverseChronologicalWMFEventComparator,\n listElementsByHeadingID,\n isAnchorForYear,\n addPrefixFromAncestorListElementsToListElement,\n endResponseWithOutput\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/on-this-day.languages.js","messages":[{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":28,"column":11,"nodeType":"NewExpression","endLine":28,"endColumn":109},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":30,"column":11,"nodeType":"NewExpression","endLine":30,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":32,"column":11,"nodeType":"NewExpression","endLine":32,"endColumn":109},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":60,"column":11,"nodeType":"NewExpression","endLine":60,"endColumn":102},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":62,"column":11,"nodeType":"NewExpression","endLine":62,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":64,"column":11,"nodeType":"NewExpression","endLine":64,"endColumn":102},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":100,"column":11,"nodeType":"NewExpression","endLine":100,"endColumn":123},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":102,"column":11,"nodeType":"NewExpression","endLine":102,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":104,"column":11,"nodeType":"NewExpression","endLine":104,"endColumn":123},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":128,"column":11,"nodeType":"NewExpression","endLine":128,"endColumn":95},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":130,"column":11,"nodeType":"NewExpression","endLine":130,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":132,"column":11,"nodeType":"NewExpression","endLine":132,"endColumn":95},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":156,"column":11,"nodeType":"NewExpression","endLine":156,"endColumn":94},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":158,"column":11,"nodeType":"NewExpression","endLine":158,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":160,"column":11,"nodeType":"NewExpression","endLine":160,"endColumn":94},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":189,"column":11,"nodeType":"NewExpression","endLine":189,"endColumn":110},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":191,"column":11,"nodeType":"NewExpression","endLine":191,"endColumn":85},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":193,"column":11,"nodeType":"NewExpression","endLine":193,"endColumn":110},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":217,"column":11,"nodeType":"NewExpression","endLine":217,"endColumn":98},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":219,"column":11,"nodeType":"NewExpression","endLine":219,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":221,"column":11,"nodeType":"NewExpression","endLine":221,"endColumn":98},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":245,"column":11,"nodeType":"NewExpression","endLine":245,"endColumn":88},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":247,"column":11,"nodeType":"NewExpression","endLine":247,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":249,"column":11,"nodeType":"NewExpression","endLine":249,"endColumn":88},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":273,"column":13,"nodeType":"NewExpression","endLine":273,"endColumn":102},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":275,"column":13,"nodeType":"NewExpression","endLine":275,"endColumn":76},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":277,"column":13,"nodeType":"NewExpression","endLine":277,"endColumn":102},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":301,"column":11,"nodeType":"NewExpression","endLine":301,"endColumn":110},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":303,"column":11,"nodeType":"NewExpression","endLine":303,"endColumn":85},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":305,"column":11,"nodeType":"NewExpression","endLine":305,"endColumn":110},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":335,"column":11,"nodeType":"NewExpression","endLine":335,"endColumn":94},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":337,"column":11,"nodeType":"NewExpression","endLine":337,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":339,"column":11,"nodeType":"NewExpression","endLine":339,"endColumn":94},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":362,"column":11,"nodeType":"NewExpression","endLine":362,"endColumn":106},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":364,"column":11,"nodeType":"NewExpression","endLine":364,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":366,"column":11,"nodeType":"NewExpression","endLine":366,"endColumn":106},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":390,"column":11,"nodeType":"NewExpression","endLine":390,"endColumn":98},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":392,"column":11,"nodeType":"NewExpression","endLine":392,"endColumn":84},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":418,"column":13,"nodeType":"NewExpression","endLine":418,"endColumn":119},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":420,"column":13,"nodeType":"NewExpression","endLine":420,"endColumn":76},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":422,"column":13,"nodeType":"NewExpression","endLine":422,"endColumn":119}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":41,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst dashChars = String.raw`\\u002D\\u2013\\u2014\\u2212`;\n\nconst languages = {\n\n en: {\n monthNames: [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n ],\n dayPage: {\n // https://en.wikipedia.org/api/rest_v1/page/html/May_22\n nameFormatter: (monthName, monthNumber, dayNumber) => `${ monthName }_${ dayNumber }`,\n headingIds: {\n births: [ 'Births' ],\n deaths: [ 'Deaths' ],\n events: [ 'Events' ],\n holidays: [ 'Holidays_and_observances' ]\n }\n },\n selectedPage: {\n // https://en.wikipedia.org/api/rest_v1/page/html/Wikipedia:Selected_anniversaries%2FMay_22\n nameFormatter: (monthName, monthNumber, dayNumber) => `Wikipedia:Selected_anniversaries/${ monthName }_${ dayNumber }`,\n listElementSelector: 'body > ul li,section > ul li'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(?:ad\\s+)?(\\d+)\\s*(?:(bce?)|ad|ce)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n new RegExp(String.raw`^\\s*(?:ad\\s+)?(\\d+)\\s*(?:(bce?)|ad|ce)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n },\n\n de: {\n monthNames: [\n 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni',\n 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'\n ],\n dayPage: {\n // https://de.wikipedia.org/api/rest_v1/page/html/22._Mai\n nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }._${ monthName }`,\n headingIds: {\n births: [ 'Geboren' ],\n deaths: [ 'Gestorben' ],\n events: [ 'Ereignisse' ],\n holidays: [\n 'Feier-_und_Gedenktage',\n 'Feier-,_Gedenk-_und_Aktionstage',\n 'Feier-,_Aktions-_und_Gedenktage'\n ]\n }\n },\n selectedPage: {\n // https://de.wikipedia.org/api/rest_v1/page/html/Wikipedia:Hauptseite%2FJahrestage%2FMai%2F22\n nameFormatter: (monthName, monthNumber, dayNumber) => `Wikipedia:Hauptseite/Jahrestage/${ monthName }/${ dayNumber }`,\n listElementSelector: 'body > ul li,section > ul li'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(v\\.\\s*Chr\\.)?\\s*(?::|[${ dashChars }])\\s*(.*\\S.*)`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(v\\.\\s*Chr\\.)?\\s*(?::|[${ dashChars }])\\s*(.*\\S.*)`, 'i')\n },\n\n fr: {\n monthNames: [\n 'janvier', 'février', 'mars', 'avril', 'mai', 'juin',\n 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'\n ],\n dayPage: {\n // https://fr.wikipedia.org/api/rest_v1/page/html/22_mai\n nameFormatter: (monthName, monthNumber, dayNumber) => {\n if (dayNumber === 1) {\n dayNumber = '1er';\n }\n return `${ dayNumber }_${ monthName }`;\n },\n headingIds: {\n births: [ 'Naissances' ],\n deaths: [ 'Décès' ],\n events: [ 'Événements', 'Évènements', 'Arts,_culture_et_religion', 'Sciences_et_techniques', 'Économie_et_société' ],\n holidays: [ 'Célébrations' ]\n }\n },\n selectedPage: {\n // https://fr.wikipedia.org/api/rest_v1/page/html/Wikipédia:Éphéméride%2F22_mai\n nameFormatter: (monthName, monthNumber, dayNumber) => {\n if (dayNumber === 1) {\n if (new Set([ 1, 2, 3, 5, 9, 10, 11, 12 ]).has(monthNumber)) {\n dayNumber = '1er';\n }\n }\n return `Wikipédia:Éphéméride/${ dayNumber }_${ monthName }`;\n },\n listElementSelector: 'body > ul li,section > ul li'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(av\\.\\s*J\\.\\s*[${ dashChars }]C\\.)?\\s*(?::|[${ dashChars }])\\s*(.*\\S.*)`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(av\\.\\s*J\\.\\s*[${ dashChars }]C\\.)?\\s*(?::|[${ dashChars }])\\s*(.*\\S.*)`, 'i')\n },\n\n sv: {\n monthNames: [\n 'januari', 'februari', 'mars', 'april', 'maj', 'juni',\n 'juli', 'augusti', 'september', 'oktober', 'november', 'december'\n ],\n dayPage: {\n // https://sv.wikipedia.org/api/rest_v1/page/html/22_maj\n nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n headingIds: {\n births: [ 'Födda' ],\n deaths: [ 'Avlidna' ],\n events: [ 'Händelser' ],\n holidays: [ 'Återkommande_bemärkelsedagar' ]\n }\n },\n selectedPage: {\n // https://sv.wikipedia.org/api/rest_v1/page/html/Mall:22_maj\n nameFormatter: (monthName, monthNumber, dayNumber) => `Mall:${ dayNumber }_${ monthName }`,\n listElementSelector: 'body > ul li,section > ul li'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(f\\.\\s*Kr\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(f\\.\\s*Kr\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n },\n\n pt: {\n monthNames: [\n 'de janeiro', 'de fevereiro', 'de março', 'de abril', 'de maio', 'de junho',\n 'de julho', 'de agosto', 'de setembro', 'de outubro', 'de novembro', 'de dezembro'\n ],\n dayPage: {\n // https://pt.wikipedia.org/api/rest_v1/page/html/15_de_maio\n nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n headingIds: {\n births: [ 'Nascimentos' ],\n deaths: [ 'Mortes', 'Falecimentos' ],\n events: [ 'Eventos', 'Eventos_históricos' ],\n holidays: [ 'Feriados_e_eventos_cíclicos' ]\n }\n },\n selectedPage: {\n // https://pt.wikipedia.org/api/rest_v1/page/html/Wikipédia:Efemérides%2F22_de_maio\n nameFormatter: (monthName, monthNumber, dayNumber) => `Wikipédia:Efemérides/${ dayNumber }_${ monthName }`,\n listElementSelector: 'body > ul li,section > ul li'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(a\\.\\s*C\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(a\\.\\s*C\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n },\n\n ru: {\n monthNames: [\n 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня',\n 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'\n ],\n dayPage: {\n // https://ru.wikipedia.org/api/rest_v1/page/html/22_мая\n nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n headingIds: {\n births: [ 'Родились' ],\n deaths: [ 'Скончались' ],\n events: [ 'События' ],\n holidays: [\n 'Праздники',\n 'Праздники_и_памятные_дни',\n 'Праздники_и_памятные_даты',\n 'Праздники,_памятные_даты'\n ]\n }\n },\n selectedPage: {\n // https://ru.wikipedia.org/api/rest_v1/page/html/Шаблон:События_дня:05-30\n nameFormatter: (monthName, monthNo, dayNo) => `Шаблон:События_дня:${ monthNo < 10 ? `0${ monthNo }` : monthNo }-${ dayNo }`,\n listElementSelector: 'body > ul li,section > ul li'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(?:год)?\\s*(до\\s*н\\.\\s*э\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(?:год)?\\s*[:${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(?:год)?\\s*(до\\s*н\\.\\s*э\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n },\n\n es: {\n monthNames: [\n 'de enero', 'de febrero', 'de marzo', 'de abril', 'de mayo', 'de junio',\n 'de julio', 'de agosto', 'de septiembre', 'de octubre', 'de noviembre', 'de diciembre'\n ],\n dayPage: {\n // https://es.wikipedia.org/api/rest_v1/page/html/22_de_mayo\n nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n headingIds: {\n births: [ 'Nacimientos' ],\n deaths: [ 'Fallecimientos' ],\n events: [ 'Acontecimientos' ],\n holidays: [ 'Celebraciones' ]\n }\n },\n selectedPage: {\n // https://es.wikipedia.org/api/rest_v1/page/html/Plantilla:Efemérides_-_22_de_mayo\n nameFormatter: (monthName, monthNumber, dayNumber) => `Plantilla:Efemérides - ${ dayNumber }_${ monthName }`,\n listElementSelector: 'body > ul li,section > ul li'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(a\\.\\s*C\\.)?\\s*\\.*[:${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(a\\.\\s*C\\.)?\\s*\\.*[:${ dashChars }]\\s*(.*\\S.*)`, 'i')\n },\n\n ar: {\n monthNames: [\n 'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',\n 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'\n ],\n dayPage: {\n // https://ar.wikipedia.org/api/rest_v1/page/html/22_مايو\n nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n headingIds: {\n births: [ 'مواليد' ],\n deaths: [ 'وفيات' ],\n events: [ 'أحداث', 'الأحداث' ],\n holidays: [ 'أعياد_ومناسبات' ]\n }\n },\n selectedPage: {\n // https://ar.wikipedia.org/api/rest_v1/page/html/%D9%88%D9%8A%D9%83%D9%8A%D8%A8%D9%8A%D8%AF%D9%8A%D8%A7%3A%D9%81%D9%8A_%D9%87%D8%B0%D8%A7_%D8%A7%D9%84%D9%8A%D9%88%D9%85%2F22_%D9%85%D8%A7%D9%8A%D9%88\n nameFormatter: (monthName, monthNumber, dayNumber) => `ويكيبيديا:في_هذا_اليوم/${ dayNumber }_${ monthName }`,\n listElementSelector: 'body > ul li,section > ul li'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(ق.م)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(ق.م)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n },\n\n bs: {\n monthNames: [\n 'januar', 'februar', 'mart', 'april', 'maj', 'juni',\n 'juli', 'august', 'septembar', 'oktobar', 'novembar', 'decembar'\n ],\n dayPage: {\n // https://bs.wikipedia.org/wiki/1._januar\n nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n headingIds: {\n births: [ 'Rođeni' ],\n deaths: [ 'Umrli' ],\n events: [ 'Događaji' ],\n holidays: [ 'Praznici' ]\n }\n },\n selectedPage: {\n // https://bs.wikipedia.org/wiki/%C5%A0ablon:Na_dana%C5%A1nji_dan/1._januar\n nameFormatter: (monthName, monthNumber, dayNumber) => `Šablon:Na_današnji_dan/${ dayNumber }._${ monthName }`,\n listElementSelector: 'body > ul li,section > ul li'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(p\\. n\\. e)?\\s*(?::|[${ dashChars }])\\s*(.*\\S.*)`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(p\\. n\\. e)?\\s*(?::|[${ dashChars }])\\s*(.*\\S.*)`, 'i')\n },\n\n uk: {\n monthNames: [\n 'січня', 'лютого', 'березня', 'квітня', 'травня', 'червня',\n 'липня', 'серпня', 'вересня', 'жовтня', 'листопада', 'грудня'\n ],\n dayPage: {\n // https://uk.wikipedia.org/api/rest_v1/page/html/1_січня\n nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n headingIds: {\n births: [ 'Народились' ],\n deaths: [ 'Померли' ],\n events: [ 'Події' ],\n holidays: [ 'Свята_і_пам\\'ятні_дні' ]\n }\n },\n selectedPage: {\n // https://uk.wikipedia.org/api/rest_v1/page/html/Вікіпедія%3AПроект%3AЦей_день_в_історії%2F1_січня\n nameFormatter: (monthName, monthNumber, dayNumber) => `Вікіпедія:Проект:Цей день в історії/${ dayNumber }_${ monthName }`,\n listElementSelector: 'body > div.onthisdayselected > ul li, section > div.onthisdayselected > ul li'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(?:рік)?\\s*(до\\s*н\\.\\s*е\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(?:рік)?\\s*[:${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(?:рік)?\\s*(до\\s*н\\.\\s*е\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n },\n\n it: {\n monthNames: [\n 'gennaio', 'febbraio', 'marzo', 'aprile', 'maggio', 'giugno',\n 'luglio', 'agosto', 'settembre', 'ottobre', 'novembre', 'dicembre'\n ],\n dayPage: {\n // https://it.wikipedia.org/wiki/25_luglio\n // TODO - births and deaths are not yet supported since they exist in the separate pages\n // List of births - https://it.wikipedia.org/wiki/Nati_il_25_luglio\n // List of deaths - https://it.wikipedia.org/wiki/Morti_il_23_luglio\n nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n headingIds: {\n births: ['Nati'],\n deaths: ['Morti'],\n events: ['Eventi'],\n holidays: ['Feste_e_ricorrenze']\n }\n },\n selectedPage: {\n // https://it.wikipedia.org/api/rest_v1/page/html/Template:PaginaPrincipale%2FAttualita%2F25_luglio\n nameFormatter: (monthName, monthNumber, dayNumber) => `Template:PaginaPrincipale/Attualita/${ dayNumber }_${ monthName }`,\n // TODO: the above page can be fetched but not parsed, being a single <p> element.\n // We probably need to wait for the switch to the new template:\n // https://it.wikipedia.org/api/rest_v1/page/html/Template:Pagina_principale%2FAttualit%E0%2F25_luglio\n listElementSelector: 'body > ul li,section > ul li'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(a\\.\\s*C\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(a\\.\\s*C\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n },\n\n tr: {\n monthNames: [\n 'Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık'\n ],\n dayPage: {\n // https://tr.wikipedia.org/api/rest_v1/page/html/Nisan_23\n nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n headingIds: {\n births: [ 'Doğumlar' ],\n deaths: [ 'Ölümler' ],\n events: [ 'Olaylar' ],\n holidays: [ 'Tatiller_ve_özel_günler' ]\n }\n },\n selectedPage: {\n // https://tr.wikipedia.org/api/rest_v1/page/html/%C5%9Eablon%3ATarihte_bug%C3%BCn%2F22_Ekim\n nameFormatter: (monthName, monthNumber, dayNumber) => `Şablon:Tarihte_bugün/${ dayNumber }_${ monthName }`,\n listElementSelector: 'body > ul li,section > ul li'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(?:(M.?Ö.?))?\\s*(?:yil)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(?:(M.?Ö.?))?\\s*(?:yil)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n },\n\n zh: {\n monthNames: [\n '1月', '2月', '3月', '4月', '5月', '6月',\n '7月', '8月', '9月', '10月', '11月', '12月'\n ],\n dayPage: {\n // https://zh.wikipedia.org/api/rest_v1/page/html/5月22日\n nameFormatter: (monthName, monthNumber, dayNumber) => `${ monthName }${ dayNumber }日`,\n headingIds: {\n births: [ '出生'],\n deaths: [ '逝世' ],\n events: [ '大事记', '大事記', '大事紀' ],\n holidays: [ '节假日和习俗', '節假日和習俗', '节日、风俗习惯', '節日、風俗習慣' ]\n }\n },\n selectedPage: {\n // https://zh.wikipedia.org/api/rest_v1/page/html/Wikipedia:历史上的今天%2F5月22日\n nameFormatter: (monthName, monthNumber, dayNumber) => `Wikipedia:历史上的今天/${ monthName }${ dayNumber }日`,\n listElementSelector: 'section > dl > .event'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(前?)\\s*(\\d+)\\s*(?:年)?\\s*[::${ dashChars }]\\s*(.*\\S.*)$`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*(?:年)?\\s*[::${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n /(前?)(\\d+)(?:年)?\\s*(.*\\S.*)/\n },\n\n cs: {\n monthNames: [\n 'leden', 'únor', 'březen', 'duben', 'květen', 'červen',\n 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec'\n ],\n dayPage: {\n // https://cs.wikipedia.org/wiki/1._srpen\n nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }._${ monthName }`,\n headingIds: {\n births: [ 'Narození' ],\n deaths: [ 'Úmrtí' ],\n events: [ 'Události' ],\n holidays: [ 'Svátky' ]\n }\n },\n selectedPage: {\n // https://cs.wikipedia.org/api/rest_v1/page/html/Wikipedie:Vybran%C3%A1_v%C3%BDro%C4%8D%C3%AD_dne%2F22._kv%C4%9Bten\n nameFormatter: (monthName, monthNumber, dayNumber) => `Wikipedie:Vybraná_výročí_dne/${ dayNumber }._${ monthName }`,\n listElementSelector: 'body > ul li,section > ul li'\n },\n yearListElementRegEx:\n new RegExp(String.raw`^\\s*(?:př\\.n\\.l\\.\\s+)?(\\d+)\\s*(?:(n\\.l\\.?)|ad)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n yearPrefixRegEx:\n new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n selectedRegEx:\n new RegExp(String.raw`^\\s*(?:př\\.n\\.l\\.\\s+)?(\\d+)\\s*(?:(n\\.l\\.?)|ad)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n }\n\n};\n\nmodule.exports = {\n languages\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/pageviews.js","messages":[{"ruleId":"jsdoc/check-access","severity":1,"message":"At most one access-control tag may be present on a JSDoc block.","line":36,"column":1,"nodeType":"Block","endLine":40,"endColumn":4},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@private should not have a bracketed type in \"jsdoc\" mode.","line":37,"column":1,"nodeType":"Block","endLine":37,"endColumn":1},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@private should not have a bracketed type in \"jsdoc\" mode.","line":38,"column":1,"nodeType":"Block","endLine":38,"endColumn":1},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@private should not have a bracketed type in \"jsdoc\" mode.","line":39,"column":1,"nodeType":"Block","endLine":39,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Platform' is undefined.","line":53,"column":1,"nodeType":"Block","endLine":53,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Agent' is undefined.","line":54,"column":1,"nodeType":"Block","endLine":54,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Granularity' is undefined.","line":56,"column":1,"nodeType":"Block","endLine":56,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Platform' is undefined.","line":71,"column":1,"nodeType":"Block","endLine":71,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst api = require('./api-util');\nconst dateUtil = require('./date-util');\n\n/**\n * @readonly\n * @enum {!string}\n */\nmodule.exports.Platform = {\n ALL: 'all-access',\n DESKTOP_WEB: 'desktop',\n MOBILE_WEB: 'mobile-web',\n MOBILE_APP: 'mobile-app'\n};\n\n/**\n * @readonly\n * @enum {!string}\n */\nmodule.exports.Agent = {\n ALL: 'all-agents',\n USER: 'user',\n SPIDER: 'spider',\n BOT: 'bot'\n};\n\n/**\n * @readonly\n * @enum {!string}\n */\nmodule.exports.Granularity = {\n DAILY: 'daily'\n};\n\n/**\n * @private {!Object} app\n * @private {!string} apiDomain RESTBase API domain; e.g., wikimedia.org\n * @private {!Object} req\n */\nmodule.exports.Client = class {\n /**\n * @param {!Object} req original Request object\n * @param {!Object} restReq new Request object for the Pageviews API\n */\n constructor(req, restReq) {\n this.req = req;\n this.restReq = restReq;\n }\n\n /**\n * @param {!string} domain Top level project domain to filter; e.g., de.wikipedia\n * @param {!Platform} platform Device platform to filter\n * @param {!Agent} agent User agent to filter\n * @param {!string} title Normalized article title\n * @param {!Granularity} granularity Result time unit\n * @param {!Date} start Inclusive start date\n * @param {!Date} end Inclusive end date\n * @return {!Promise} Daily pageviews on domain from platform for title from [start, end]\n */\n reqPage(domain, platform, agent, title, granularity, start, end) {\n const titleEncoded = encodeURIComponent(title);\n const startStr = dateUtil.formatYYYYMMDD(start);\n const endStr = dateUtil.formatYYYYMMDD(end);\n const path = `pageviews/per-article/${ domain }/${ platform }/${ agent }/${ titleEncoded }/${ granularity }/${ startStr }/${ endStr }`;\n return api.analyticsGet(this.req, path, this.restReq);\n }\n\n /**\n * @param {!string} domain Top level project domain to filter; e.g., de.wikipedia\n * @param {!Platform} platform Device platform to filter\n * @param {!Date} date\n * @return {!Promise} Top pageviews on domain from platform for date\n */\n reqTop(domain, platform, date) {\n const year = date.getUTCFullYear();\n const month = dateUtil.pad(date.getUTCMonth() + 1);\n const day = dateUtil.pad(date.getUTCDate());\n const path = `pageviews/top/${ domain }/${ platform }/${ year }/${ month }/${ day }`;\n return api.analyticsGet(this.req, path, this.restReq);\n }\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/parsoid.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/random.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'score' is already declared in the upper scope on line 31 column 10.","line":38,"column":9,"nodeType":"Identifier","messageId":"noShadow","endLine":38,"endColumn":14},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"scoredResults\" type.","line":55,"column":1,"nodeType":"Block","endLine":55,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Random article promise and related support functions.\n */\n\n'use strict';\n\nconst api = require('./api-util');\nconst util = require('./util');\nconst si = require('./siteinfo');\nconst BBPromise = require('bluebird');\n\n/**\n * Returns a numeric score which can be used to roughly determine the relative \"quality\" of random\n * results.\n *\n * Scores are calculated as follows:\n *\n * 2 points for having:\n * thumb url\n *\n * 1 point for having:\n * wikidataDescription\n *\n * -10 point for being:\n * disambiguation page\n * list item page\n *\n * @param {?Object} page Page object from MW API\n * @return {!number} quality score\n */\nfunction score(page) {\n\n const isDisambiguationPage = (page.pageprops && page.pageprops.disambiguation) ||\n (page.description && page.description.includes('disambiguation page'));\n\n const isListPage = page.description && page.description.includes('Wikimedia list article');\n\n let score = 0.0;\n\n if (page.pageprops && (page.pageprops.page_image || page.pageprops.page_image_free)) {\n score += 2.0;\n }\n if (page.description) {\n score += 1.0;\n }\n if (isDisambiguationPage || isListPage) {\n score -= 10.0;\n }\n return score;\n}\n\n/**\n * Returns random page from max score pages list.\n *\n * @param scoredResults\n * @return {*}\n */\nfunction pickBestResult(scoredResults) {\n const maxScore = Math.max.apply(\n scoredResults,\n scoredResults.map((page) => page.score)\n );\n const scoredPagesFiltered = scoredResults.filter((page) => page.score === maxScore);\n\n return scoredPagesFiltered[Math.floor(Math.random() * scoredPagesFiltered.length)];\n}\n\n/**\n * Returns a single random result well suited to card-type layouts, i.e.\n * one likely to have a page image and wikidata description.\n *\n * Multiple random items are requested, but only the result having\n * the highest relative score is returned. Requesting about 12 items\n * seems to consistently produce a really \"good\" result.\n *\n * @param {!Object} req Request object\n * @return {!Promise}\n */\nfunction promise(req) {\n const itemsToRequest = 12;\n return BBPromise.join(\n si.getSiteInfo(req),\n api.mwApiGet(req, {\n action: 'query',\n format: 'json',\n formatversion: 2,\n generator: 'random',\n grnfilterredir: 'nonredirects',\n grnlimit: itemsToRequest,\n grnnamespace: 0,\n prop: 'description|pageprops'\n }),\n (siteinfo, queryResponse) => {\n const pages = queryResponse.body.query.pages;\n const scoredPages = pages.map((page) => Object.assign(page, { score: score(page) }));\n const bestResult = pickBestResult(scoredPages);\n return util.getDbTitle(bestResult.title, siteinfo);\n });\n}\n\nmodule.exports = {\n promise,\n\n // visible for testing\n pickBestResult\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/siteinfo.js","messages":[{"ruleId":"strict","severity":1,"message":"Use the global form of 'use strict'.","line":3,"column":1,"nodeType":"Program","messageId":"global","endLine":59,"endColumn":34},{"ruleId":"security/detect-unsafe-regex","severity":1,"message":"Unsafe Regular Expression","line":10,"column":29,"nodeType":"Literal","endLine":10,"endColumn":55}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"// use strict;\n\nconst api = require('./api-util');\n\nconst siteInfoCache = {};\n\nfunction findSharedRepoDomain(siteInfoRes) {\n const sharedRepo = (siteInfoRes.body.query.repos || []).find((repo) => repo.name === 'shared');\n if (sharedRepo) {\n const domainMatch = /^((:?https?:)?\\/\\/[^/]+)/.exec(sharedRepo.descBaseUrl);\n if (domainMatch) {\n return domainMatch[0];\n }\n }\n}\n\n/**\n * Builds a request for siteinfo data for the MW site for the request domain.\n *\n * @param {!Object} req the request object\n * @return {!Promise} a promise resolving as an JSON object containing the response\n */\nfunction getSiteInfo(req) {\n const rp = req.params;\n if (!siteInfoCache[rp.domain]) {\n const query = {\n action: 'query',\n meta: 'siteinfo|allmessages',\n siprop: 'general|languagevariants|namespaces|namespacealiases|specialpagealiases',\n ammessages: 'toc'\n };\n siteInfoCache[rp.domain] = api.mwApiGet(req, query)\n .then((res) => {\n const general = res.body.query.general;\n const allmessages = res.body.query.allmessages;\n\n return {\n general: {\n mainpage: general.mainpage,\n lang: general.lang,\n legaltitlechars: general.legaltitlechars,\n case: general.case,\n mobileserver: general.mobileserver,\n toctitle: allmessages[0].content\n },\n variants: res.body.query.languagevariants &&\n res.body.query.languagevariants[general.lang] &&\n Object.keys(res.body.query.languagevariants[general.lang]),\n namespaces: res.body.query.namespaces,\n namespacealiases: res.body.query.namespacealiases,\n specialpagealiases: res.body.query.specialpagealiases,\n sharedRepoRootURI: findSharedRepoDomain(res)\n };\n });\n }\n return siteInfoCache[rp.domain];\n}\n\nmodule.exports = { getSiteInfo };\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/swagger-ui.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/lib/util.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Application' is undefined.","line":104,"column":1,"nodeType":"Block","endLine":104,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Application' is undefined.","line":142,"column":1,"nodeType":"Block","endLine":142,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Router' is undefined.","line":222,"column":1,"nodeType":"Block","endLine":222,"endColumn":1},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":280,"column":1,"nodeType":"Block","endLine":286,"endColumn":4},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":293,"column":1,"nodeType":"Block","endLine":298,"endColumn":4},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":306,"column":1,"nodeType":"Block","endLine":311,"endColumn":4},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Application' is undefined.","line":378,"column":1,"nodeType":"Block","endLine":378,"endColumn":1},{"ruleId":"default-param-last","severity":1,"message":"Default parameters should be last.","line":450,"column":34,"nodeType":"AssignmentPattern","messageId":"shouldBeLast","endLine":450,"endColumn":57}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst BBPromise = require('bluebird');\nconst preq = require('preq');\nconst express = require('express');\nconst assert = require('assert');\nconst uuidv1 = require('uuid').v1;\nconst bunyan = require('bunyan');\nconst uuid = require('cassandra-uuid');\n\n// service-specific deps\nconst Title = require('mediawiki-title').Title;\n\n/**\n * Error instance wrapping HTTP error responses\n */\nclass HTTPError extends Error {\n\n constructor(response) {\n super();\n Error.captureStackTrace(this, HTTPError);\n\n if (response.constructor !== Object) {\n // just assume this is just the error message\n response = {\n status: 500,\n type: 'internal_error',\n title: 'InternalError',\n detail: response\n };\n }\n\n this.name = this.constructor.name;\n this.message = `${ response.status }`;\n if (response.type) {\n this.message += `: ${ response.type }`;\n }\n\n Object.assign(this, response);\n }\n}\n\n/**\n * Generates an object suitable for logging out of a request object\n *\n * @param {!Request} req the request\n * @param {?RegExp} allowListRegExp the RegExp used to filter headers\n * @return {!Object} an object containing the key components of the request\n */\nfunction reqForLog(req, allowListRegExp) {\n\n const ret = {\n url: req.originalUrl,\n headers: {},\n method: req.method,\n params: req.params,\n query: req.query,\n body: req.body,\n remoteAddress: req.connection.remoteAddress,\n remotePort: req.connection.remotePort\n };\n\n if (req.headers && allowListRegExp) {\n Object.keys(req.headers).forEach((hdr) => {\n if (allowListRegExp.test(hdr)) {\n ret.headers[hdr] = req.headers[hdr];\n }\n });\n }\n\n return ret;\n\n}\n\n/**\n * Serialises an error object in a form suitable for logging.\n *\n * @param {!Error} err error to serialise\n * @return {!Object} the serialised version of the error\n */\nfunction errForLog(err) {\n\n const ret = bunyan.stdSerializers.err(err);\n ret.status = err.status;\n ret.type = err.type;\n ret.detail = err.detail;\n\n // log the stack trace only for 500 errors\n if (Number.parseInt(ret.status, 10) !== 500) {\n ret.stack = undefined;\n }\n\n return ret;\n\n}\n\n/**\n * Wraps all of the given router's handler functions with\n * promised try blocks so as to allow catching all errors,\n * regardless of whether a handler returns/uses promises\n * or not.\n *\n * @param {!Object} route the object containing the router and path to bind it to\n * @param {!Application} app the application object\n */\nfunction wrapRouteHandlers(route, app) {\n\n route.router.stack.forEach((routerLayer) => {\n let path = (route.path + routerLayer.route.path.slice(1))\n .replace(/\\/:/g, '/--')\n .replace(/^\\//, '')\n .replace(/[/?]+$/, '');\n path = app.metrics.normalizeName(path || 'root');\n routerLayer.route.stack.forEach((layer) => {\n const origHandler = layer.handle;\n layer.handle = (req, res, next) => {\n const startTime = Date.now();\n BBPromise.try(() => origHandler(req, res, next))\n .catch(next)\n .finally(() => {\n let statusCode = parseInt(res.statusCode, 10) || 500;\n if (statusCode < 100 || statusCode > 599) {\n statusCode = 500;\n }\n const statusClass = `${ Math.floor(statusCode / 100) }xx`;\n const stat = `${ path }.${ req.method }.`;\n app.metrics.endTiming([\n stat + statusCode,\n stat + statusClass,\n `${ stat }ALL`\n ], startTime);\n });\n };\n });\n });\n\n}\n\n/**\n * Generates an error handler for the given applications and installs it.\n *\n * @param {!Application} app the application object to add the handler to\n */\nfunction setErrorHandler(app) {\n\n app.use((err, req, res, next) => {\n let errObj;\n // ensure this is an HTTPError object\n if (err.constructor === HTTPError) {\n errObj = err;\n } else if (err instanceof Error) {\n // is this an HTTPError defined elsewhere? (preq)\n if (err.constructor.name === 'HTTPError') {\n const o = { status: err.status };\n if (err.body && err.body.constructor === Object) {\n Object.keys(err.body).forEach((key) => {\n o[key] = err.body[key];\n });\n } else {\n o.detail = err.body;\n }\n o.message = err.message;\n errObj = new HTTPError(o);\n } else {\n // this is a standard error, convert it\n errObj = new HTTPError({\n status: 500,\n type: 'internal_error',\n title: err.name,\n detail: err.detail || err.message,\n stack: err.stack\n });\n }\n } else if (err.constructor === Object) {\n // this is a regular object, suppose it's a response\n errObj = new HTTPError(err);\n } else {\n // just assume this is just the error message\n errObj = new HTTPError({\n status: 500,\n type: 'internal_error',\n title: 'InternalError',\n detail: err\n });\n }\n // ensure some important error fields are present\n errObj.status = errObj.status || 500;\n errObj.type = errObj.type || 'internal_error';\n // add the offending URI and method as well\n errObj.method = errObj.method || req.method;\n errObj.uri = errObj.uri || req.url;\n // some set 'message' or 'description' instead of 'detail'\n errObj.detail = errObj.detail || errObj.message || errObj.description || '';\n // adjust the log level based on the status code\n let level = 'error';\n if (Number.parseInt(errObj.status, 10) < 400) {\n level = 'trace';\n } else if (Number.parseInt(errObj.status, 10) < 500) {\n level = 'info';\n }\n // log the error\n const component = (errObj.component ? errObj.component : errObj.status);\n (req.logger || app.logger).log(`${ level }/${ component }`, errForLog(errObj));\n // let through only non-sensitive info\n const respBody = {\n status: errObj.status,\n type: errObj.type,\n title: errObj.title,\n detail: errObj.detail,\n method: errObj.method,\n uri: errObj.uri\n };\n res.status(errObj.status).json(respBody);\n });\n\n}\n\n/**\n * Creates a new router with some default options.\n *\n * @param {?Object} [opts] additional options to pass to express.Router()\n * @return {!Router} a new router object\n */\nfunction createRouter(opts) {\n\n const options = {\n mergeParams: true\n };\n\n if (opts && opts.constructor === Object) {\n Object.assign(options, opts);\n }\n\n return new express.Router(options);\n\n}\n\nfunction removeFragment(href) {\n if (href.includes('#')) {\n return href.slice(0, Math.max(0, href.indexOf('#')));\n }\n return href;\n}\n\nfunction removeLinkPrefix(href) {\n return href.replace(/^\\.\\//, '');\n}\n\nfunction extractDbTitleFromAnchor(anchor) {\n // T308096: Use the original title without language conversion\n if (anchor && anchor.getAttribute('data-mw-variant-orig')) {\n return removeFragment(anchor.getAttribute('data-mw-variant-orig'));\n }\n return anchor && removeFragment(removeLinkPrefix(anchor.getAttribute('href')));\n}\n\nfunction getRbPageSummaryUrl(restbaseTpl, domain, title) {\n const request = restbaseTpl.expand({\n request: {\n params: {\n domain,\n path: `page/summary/${ encodeURIComponent(title) }`\n }\n }\n });\n return request.uri;\n}\n\n/**\n * Get a Title object for a MW title string\n *\n * @param {!string} title a MediaWiki page title string\n * @param {!Object} siteinfo siteinfo from the MW API\n * @return {!string} a mediawiki-title Title object that can be used to obtain a db-normalized title\n */\nfunction getDbTitle(title, siteinfo) {\n return Title.newFromText(title, siteinfo).getPrefixedDBKey();\n}\n\n/**\n * Retrieves the etag from the headers if present. Strips the weak etag prefix (W/) and enclosing\n * quotes.\n *\n * @param {?Object} headers an object of header name/values\n * @return {?string} etag\n */\nfunction getEtagFromHeaders(headers) {\n if (headers && headers.etag) {\n return headers.etag.replace(/^W\\//, '').replace(/\"/g, '');\n }\n}\n\n/**\n * Retrieves the revision from the etag emitted by Parsoid.\n *\n * @param {?Object} headers an object of header name/values\n * @return {?string} revision portion of etag, if found\n */\nfunction getRevisionFromEtag(headers) {\n const etag = getEtagFromHeaders(headers);\n if (etag) {\n return etag.split('/').shift();\n }\n}\n\n/**\n * Retrieves the revision and tid from the etag emitted by Parsoid.\n *\n * @param {?Object} headers an object of header name/values\n * @return {?Object} revision and tid from etag, if found\n */\nfunction getRevAndTidFromEtag(headers) {\n const etag = getEtagFromHeaders(headers);\n if (etag) {\n const etagComponents = etag.split('/');\n return {\n revision: etagComponents[0],\n tid: etagComponents[1]\n };\n }\n}\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\"<<\"] }] */\nfunction hashCode(string) {\n return string.split('').reduce((prevHash, currVal) => ((prevHash << 5) - prevHash) + currVal.charCodeAt(0), 0);\n}\n\n/**\n * Remove the top-level domain from a domain string, e.g., 'en.wikipedia.org' ->\n * 'en.wikipedia'.\n *\n * @param {!string} domain domain string\n * @return {!string} domain string minus the TLD\n */\nfunction removeTLD(domain) {\n return domain.split('.').slice(0, 2).join('.');\n}\n\n/**\n * Sets the ETag header on the response object, comprised of the revision ID and\n * the time UUID. If the latter is not given, the current time stamp is used to\n * generate it.\n *\n * @param {!Object} response The HTTPResponse object on which to set the header\n * @param {?number} revision The revision integer ID to use\n * @param {?string} tid The time UUID to use; optional\n */\nfunction setETag(response, revision, tid = undefined) {\n assert(['string', 'number'].includes(typeof revision));\n assert(['string', 'undefined'].includes(typeof tid));\n if (!tid) {\n tid = uuid.TimeUuid.now().toString();\n }\n response.set('etag', `\"${ revision }/${ tid }\"`);\n}\n\nfunction getContentTypeString(spec) {\n return `${ spec.type }; charset=utf-8; profile=\"https://www.mediawiki.org/wiki/Specs/${ spec.name }/${ spec.version }\"`;\n}\n\nfunction setContentType(res, spec) {\n if (!spec.name || !spec.version) {\n throw new HTTPError({\n status: 500,\n type: 'invalid_content_type',\n title: 'Only use the allowed content-types',\n detail: `${ spec.name }/${ spec.version } is not an allowed content-type!`\n });\n }\n\n res.type(getContentTypeString(spec));\n}\n\n/**\n * Adds logger to the request and logs it.\n *\n * @param {!*} req request object\n * @param {!Application} app application object\n */\nfunction initAndLogRequest(req, app) {\n req.headers = req.headers || {};\n req.headers['x-request-id'] = req.headers['x-request-id'] || uuidv1();\n req.logger = app.logger.child({\n request_id: req.headers['x-request-id'],\n request: reqForLog(req, app.conf.log_header_allowlist)\n });\n req.context = { reqId: req.headers['x-request-id'] };\n req.issueRequest = (request) => {\n if (!(request.constructor === Object)) {\n request = { uri: request };\n }\n if (request.url) {\n request.uri = request.url;\n delete request.url;\n }\n if (!request.uri) {\n return BBPromise.reject(new HTTPError({\n status: 500,\n type: 'internal_error',\n title: 'No request to issue',\n detail: 'No request has been specified'\n }));\n }\n request.method = request.method || 'get';\n request.headers = request.headers || {};\n Object.assign(request.headers, {\n 'user-agent': app.conf.user_agent,\n 'x-request-id': req.context.reqId\n });\n req.logger.log('trace/req', { msg: 'Outgoing request', out_request: request });\n return preq(request);\n };\n req.logger.log('trace/req', { msg: 'Incoming request' });\n}\n\n/**\n * Remove entries with duplicate 'title' values from an array of objects\n *\n * @param {?Array} arr Array of page/article objects\n * @param {?Function} upd Optional function to update the original item based on the duplicate.\n * Takes two parameters (orig, dupe): orig - the original object,\n * dupe - the duplicate\n * @return {?Array} arr deduplicated by 'title'\n */\nfunction removeDuplicateTitles(arr, upd) {\n const titles = {};\n return arr.filter((item, idx, init) => {\n if (titles[item.title]) {\n if (upd) {\n const orig = init[init.findIndex((el) => el.title === item.title)];\n upd(orig, item);\n }\n return false;\n }\n titles[item.title] = true;\n return true;\n });\n}\n\n/**\n * For a free-form object nested object with promises, awaits all promises in parallel.\n *\n * @param {!Object} object\n * @param {boolean} ignoreRejections whether to ignore rejected promises.\n * If true, rejected promises are ignored and removed from the object.\n * If false, the first rejection is propagated to the returned promise.\n * @param {Object} logger optional logger to log promise rejections.\n * @return {Promise<Object>}\n */\nfunction promiseAwaitAll(object, ignoreRejections = true, logger) {\n const promises = [];\n function collectPromises(subObject, replaceCallback, removeCallback) {\n if (subObject instanceof BBPromise) {\n promises.push(subObject\n .then(\n (value) => replaceCallback(value),\n (err) => {\n if (ignoreRejections) {\n if (logger) {\n logger.log('warn', err);\n }\n removeCallback();\n } else {\n throw err;\n }\n }\n ));\n } else if (Array.isArray(subObject)) {\n subObject.forEach((item) => collectPromises(\n item,\n (value) => {\n subObject[subObject.indexOf(item)] = value;\n },\n () => {\n subObject.splice(subObject.indexOf(item), 1);\n }));\n } else if (typeof subObject === 'object') {\n Object.keys(subObject).forEach((key) => {\n collectPromises(\n subObject[key],\n (value) => {\n subObject[key] = value;\n },\n () => {\n delete subObject[key];\n });\n });\n }\n }\n collectPromises(object);\n return BBPromise.all(promises).thenReturn(object);\n}\n\nconst CONTENT_TYPES = {\n html: { name: 'HTML', version: '2.1.0', type: 'text/html' },\n announcements: { name: 'Announcements', version: '0.3.0', type: 'application/json' },\n configuration: { name: 'Configuration', version: '0.1.0', type: 'application/json' },\n onthisday: { name: 'OnThisDay', version: '0.5.0', type: 'application/json' },\n availability: { name: 'Availability', version: '1.0.1', type: 'application/json' },\n random: { name: 'Random', version: '0.7.0', type: 'application/json' },\n dyk: { name: 'DidYouKnow', version: '0.1.0', type: 'application/json' },\n unpublished: { name: 'Unpublished', version: '0.0.0', type: 'application/json' }\n};\n\nmodule.exports = {\n HTTPError,\n initAndLogRequest,\n wrapRouteHandlers,\n setErrorHandler,\n router: createRouter,\n\n // service-specific\n extractDbTitleFromAnchor,\n getContentTypeString,\n getRbPageSummaryUrl,\n getDbTitle,\n getRevisionFromEtag,\n getRevAndTidFromEtag,\n hashCode,\n removeLinkPrefix,\n removeTLD,\n setETag,\n setContentType,\n promiseAwaitAll,\n removeDuplicateTitles,\n CONTENT_TYPES\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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-lock.json","messages":[{"ruleId":"strict","severity":1,"message":"Use the global form of 'use strict'.","line":1,"column":1,"nodeType":"Program","messageId":"global","endLine":7684,"endColumn":3}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"{\n\t\"name\": \"@wikimedia/wikifeeds\",\n\t\"version\": \"1.0.0\",\n\t\"lockfileVersion\": 3,\n\t\"requires\": true,\n\t\"packages\": {\n\t\t\"\": {\n\t\t\t\"name\": \"@wikimedia/wikifeeds\",\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"license\": \"Apache-2.0\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"axios\": \"^1.6.7\",\n\t\t\t\t\"axios-retry\": \"^4.0.0\",\n\t\t\t\t\"bluebird\": \"^3.7.2\",\n\t\t\t\t\"body-parser\": \"^1.20.2\",\n\t\t\t\t\"bunyan\": \"^1.8.15\",\n\t\t\t\t\"cassandra-uuid\": \"^0.1.0\",\n\t\t\t\t\"compression\": \"^1.7.4\",\n\t\t\t\t\"domino\": \"^2.1.6\",\n\t\t\t\t\"express\": \"^4.18.2\",\n\t\t\t\t\"http-shutdown\": \"^1.2.2\",\n\t\t\t\t\"js-yaml\": \"^4.1.0\",\n\t\t\t\t\"lodash\": \"^4.17.21\",\n\t\t\t\t\"mediawiki-title\": \"^0.7.5\",\n\t\t\t\t\"preq\": \"^0.5.14\",\n\t\t\t\t\"service-runner\": \"^3.1.0\",\n\t\t\t\t\"striptags\": \"^3.2.0\",\n\t\t\t\t\"swagger-router\": \"^0.7.4\",\n\t\t\t\t\"swagger-ui-dist\": \"^5.11.7\",\n\t\t\t\t\"uuid\": \"^9.0.1\"\n\t\t\t},\n\t\t\t\"devDependencies\": {\n\t\t\t\t\"ajv\": \"^8.12.0\",\n\t\t\t\t\"ajv-formats\": \"^2.1.1\",\n\t\t\t\t\"csv-parse\": \"^5.5.3\",\n\t\t\t\t\"eslint\": \"8.57.0\",\n\t\t\t\t\"eslint-config-wikimedia\": \"0.32.4\",\n\t\t\t\t\"eslint-plugin-n\": \"^16.6.2\",\n\t\t\t\t\"extend\": \"^3.0.2\",\n\t\t\t\t\"mocha\": \"^10.3.0\",\n\t\t\t\t\"mocha-lcov-reporter\": \"^1.3.0\",\n\t\t\t\t\"mocha.parallel\": \"^0.15.6\",\n\t\t\t\t\"nock\": \"^13.5.3\",\n\t\t\t\t\"nyc\": \"^15.1.0\",\n\t\t\t\t\"path\": \"^0.12.7\",\n\t\t\t\t\"pre-commit\": \"^1.2.2\",\n\t\t\t\t\"rss-parser\": \"^3.13.0\",\n\t\t\t\t\"sinon\": \"^17.0.1\",\n\t\t\t\t\"underscore\": \"^1.13.6\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=16.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@ampproject/remapping\": {\n\t\t\t\"version\": \"2.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@jridgewell/gen-mapping\": \"^0.3.5\",\n\t\t\t\t\"@jridgewell/trace-mapping\": \"^0.3.24\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/code-frame\": {\n\t\t\t\"version\": \"7.27.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz\",\n\t\t\t\"integrity\": \"sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/helper-validator-identifier\": \"^7.27.1\",\n\t\t\t\t\"js-tokens\": \"^4.0.0\",\n\t\t\t\t\"picocolors\": \"^1.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/compat-data\": {\n\t\t\t\"version\": \"7.27.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz\",\n\t\t\t\"integrity\": \"sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/core\": {\n\t\t\t\"version\": \"7.27.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz\",\n\t\t\t\"integrity\": \"sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@ampproject/remapping\": \"^2.2.0\",\n\t\t\t\t\"@babel/code-frame\": \"^7.27.1\",\n\t\t\t\t\"@babel/generator\": \"^7.27.3\",\n\t\t\t\t\"@babel/helper-compilation-targets\": \"^7.27.2\",\n\t\t\t\t\"@babel/helper-module-transforms\": \"^7.27.3\",\n\t\t\t\t\"@babel/helpers\": \"^7.27.4\",\n\t\t\t\t\"@babel/parser\": \"^7.27.4\",\n\t\t\t\t\"@babel/template\": \"^7.27.2\",\n\t\t\t\t\"@babel/traverse\": \"^7.27.4\",\n\t\t\t\t\"@babel/types\": \"^7.27.3\",\n\t\t\t\t\"convert-source-map\": \"^2.0.0\",\n\t\t\t\t\"debug\": \"^4.1.0\",\n\t\t\t\t\"gensync\": \"^1.0.0-beta.2\",\n\t\t\t\t\"json5\": \"^2.2.3\",\n\t\t\t\t\"semver\": \"^6.3.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/babel\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/core/node_modules/convert-source-map\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@babel/core/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/core/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@babel/core/node_modules/semver\": {\n\t\t\t\"version\": \"6.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semver/-/semver-6.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"semver\": \"bin/semver.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/generator\": {\n\t\t\t\"version\": \"7.27.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz\",\n\t\t\t\"integrity\": \"sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/parser\": \"^7.27.5\",\n\t\t\t\t\"@babel/types\": \"^7.27.3\",\n\t\t\t\t\"@jridgewell/gen-mapping\": \"^0.3.5\",\n\t\t\t\t\"@jridgewell/trace-mapping\": \"^0.3.25\",\n\t\t\t\t\"jsesc\": \"^3.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-compilation-targets\": {\n\t\t\t\"version\": \"7.27.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz\",\n\t\t\t\"integrity\": \"sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/compat-data\": \"^7.27.2\",\n\t\t\t\t\"@babel/helper-validator-option\": \"^7.27.1\",\n\t\t\t\t\"browserslist\": \"^4.24.0\",\n\t\t\t\t\"lru-cache\": \"^5.1.1\",\n\t\t\t\t\"semver\": \"^6.3.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-compilation-targets/node_modules/semver\": {\n\t\t\t\"version\": \"6.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semver/-/semver-6.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"semver\": \"bin/semver.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-module-imports\": {\n\t\t\t\"version\": \"7.27.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz\",\n\t\t\t\"integrity\": \"sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/traverse\": \"^7.27.1\",\n\t\t\t\t\"@babel/types\": \"^7.27.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-module-transforms\": {\n\t\t\t\"version\": \"7.27.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz\",\n\t\t\t\"integrity\": \"sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/helper-module-imports\": \"^7.27.1\",\n\t\t\t\t\"@babel/helper-validator-identifier\": \"^7.27.1\",\n\t\t\t\t\"@babel/traverse\": \"^7.27.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"@babel/core\": \"^7.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-string-parser\": {\n\t\t\t\"version\": \"7.27.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz\",\n\t\t\t\"integrity\": \"sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-validator-identifier\": {\n\t\t\t\"version\": \"7.27.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz\",\n\t\t\t\"integrity\": \"sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-validator-option\": {\n\t\t\t\"version\": \"7.27.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz\",\n\t\t\t\"integrity\": \"sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helpers\": {\n\t\t\t\"version\": \"7.27.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz\",\n\t\t\t\"integrity\": \"sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/template\": \"^7.27.2\",\n\t\t\t\t\"@babel/types\": \"^7.27.6\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/parser\": {\n\t\t\t\"version\": \"7.27.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz\",\n\t\t\t\"integrity\": \"sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/types\": \"^7.27.3\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"parser\": \"bin/babel-parser.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/template\": {\n\t\t\t\"version\": \"7.27.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz\",\n\t\t\t\"integrity\": \"sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/code-frame\": \"^7.27.1\",\n\t\t\t\t\"@babel/parser\": \"^7.27.2\",\n\t\t\t\t\"@babel/types\": \"^7.27.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/traverse\": {\n\t\t\t\"version\": \"7.27.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz\",\n\t\t\t\"integrity\": \"sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/code-frame\": \"^7.27.1\",\n\t\t\t\t\"@babel/generator\": \"^7.27.3\",\n\t\t\t\t\"@babel/parser\": \"^7.27.4\",\n\t\t\t\t\"@babel/template\": \"^7.27.2\",\n\t\t\t\t\"@babel/types\": \"^7.27.3\",\n\t\t\t\t\"debug\": \"^4.3.1\",\n\t\t\t\t\"globals\": \"^11.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/traverse/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/traverse/node_modules/globals\": {\n\t\t\t\"version\": \"11.12.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/globals/-/globals-11.12.0.tgz\",\n\t\t\t\"integrity\": \"sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/traverse/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@babel/types\": {\n\t\t\t\"version\": \"7.27.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz\",\n\t\t\t\"integrity\": \"sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/helper-string-parser\": \"^7.27.1\",\n\t\t\t\t\"@babel/helper-validator-identifier\": \"^7.27.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@es-joy/jsdoccomment\": {\n\t\t\t\"version\": \"0.86.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.86.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@types/estree\": \"^1.0.8\",\n\t\t\t\t\"@typescript-eslint/types\": \"^8.58.0\",\n\t\t\t\t\"comment-parser\": \"1.4.6\",\n\t\t\t\t\"esquery\": \"^1.7.0\",\n\t\t\t\t\"jsdoc-type-pratt-parser\": \"~7.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^20.19.0 || ^22.13.0 || >=24\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@es-joy/jsdoccomment/node_modules/@typescript-eslint/types\": {\n\t\t\t\"version\": \"8.59.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.2.tgz\",\n\t\t\t\"integrity\": \"sha512-e82GVOE8Ps3E++Egvb6Y3Dw0S10u8NkQ9KXmtRhCWJJ8kDhOJTvtMAWnFL16kB1583goCWXsr0NieKCZMs2/0Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@es-joy/resolve.exports\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@es-joy/resolve.exports/-/resolve.exports-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@eslint-community/eslint-utils\": {\n\t\t\t\"version\": \"4.9.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz\",\n\t\t\t\"integrity\": \"sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"eslint-visitor-keys\": \"^3.4.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \"^6.0.0 || ^7.0.0 || >=8.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@eslint-community/regexpp\": {\n\t\t\t\"version\": \"4.12.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz\",\n\t\t\t\"integrity\": \"sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.0.0 || ^14.0.0 || >=16.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@eslint/eslintrc\": {\n\t\t\t\"version\": \"2.1.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz\",\n\t\t\t\"integrity\": \"sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ajv\": \"^6.12.4\",\n\t\t\t\t\"debug\": \"^4.3.2\",\n\t\t\t\t\"espree\": \"^9.6.0\",\n\t\t\t\t\"globals\": \"^13.19.0\",\n\t\t\t\t\"ignore\": \"^5.2.0\",\n\t\t\t\t\"import-fresh\": \"^3.2.1\",\n\t\t\t\t\"js-yaml\": \"^4.1.0\",\n\t\t\t\t\"minimatch\": \"^3.1.2\",\n\t\t\t\t\"strip-json-comments\": \"^3.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@eslint/eslintrc/node_modules/ajv\": {\n\t\t\t\"version\": \"6.14.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz\",\n\t\t\t\"integrity\": \"sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fast-deep-equal\": \"^3.1.1\",\n\t\t\t\t\"fast-json-stable-stringify\": \"^2.0.0\",\n\t\t\t\t\"json-schema-traverse\": \"^0.4.1\",\n\t\t\t\t\"uri-js\": \"^4.2.2\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"github\",\n\t\t\t\t\"url\": \"https://github.com/sponsors/epoberezkin\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@eslint/eslintrc/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@eslint/eslintrc/node_modules/json-schema-traverse\": {\n\t\t\t\"version\": \"0.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@eslint/eslintrc/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@eslint/js\": {\n\t\t\t\"version\": \"8.57.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@humanwhocodes/config-array\": {\n\t\t\t\"version\": \"0.11.14\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz\",\n\t\t\t\"integrity\": \"sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==\",\n\t\t\t\"deprecated\": \"Use @eslint/config-array instead\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@humanwhocodes/object-schema\": \"^2.0.2\",\n\t\t\t\t\"debug\": \"^4.3.1\",\n\t\t\t\t\"minimatch\": \"^3.0.5\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@humanwhocodes/config-array/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@humanwhocodes/config-array/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@humanwhocodes/module-importer\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12.22\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"github\",\n\t\t\t\t\"url\": \"https://github.com/sponsors/nzakas\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@humanwhocodes/object-schema\": {\n\t\t\t\"version\": \"2.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==\",\n\t\t\t\"deprecated\": \"Use @eslint/object-schema instead\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config\": {\n\t\t\t\"version\": \"1.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"camelcase\": \"^5.3.1\",\n\t\t\t\t\"find-up\": \"^4.1.0\",\n\t\t\t\t\"get-package-type\": \"^0.1.0\",\n\t\t\t\t\"js-yaml\": \"^3.13.1\",\n\t\t\t\t\"resolve-from\": \"^5.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/argparse\": {\n\t\t\t\"version\": \"1.0.10\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz\",\n\t\t\t\"integrity\": \"sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"sprintf-js\": \"~1.0.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/find-up\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"locate-path\": \"^5.0.0\",\n\t\t\t\t\"path-exists\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml\": {\n\t\t\t\"version\": \"3.14.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz\",\n\t\t\t\"integrity\": \"sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"argparse\": \"^1.0.7\",\n\t\t\t\t\"esprima\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"js-yaml\": \"bin/js-yaml.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-locate\": \"^4.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit\": {\n\t\t\t\"version\": \"2.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-try\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-limit\": \"^2.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/schema\": {\n\t\t\t\"version\": \"0.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@jridgewell/gen-mapping\": {\n\t\t\t\"version\": \"0.3.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz\",\n\t\t\t\"integrity\": \"sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@jridgewell/set-array\": \"^1.2.1\",\n\t\t\t\t\"@jridgewell/sourcemap-codec\": \"^1.4.10\",\n\t\t\t\t\"@jridgewell/trace-mapping\": \"^0.3.24\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@jridgewell/resolve-uri\": {\n\t\t\t\"version\": \"3.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@jridgewell/set-array\": {\n\t\t\t\"version\": \"1.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@jridgewell/sourcemap-codec\": {\n\t\t\t\"version\": \"1.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@jridgewell/trace-mapping\": {\n\t\t\t\"version\": \"0.3.25\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz\",\n\t\t\t\"integrity\": \"sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@jridgewell/resolve-uri\": \"^3.1.0\",\n\t\t\t\t\"@jridgewell/sourcemap-codec\": \"^1.4.14\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@mdn/browser-compat-data\": {\n\t\t\t\"version\": \"6.1.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-6.1.5.tgz\",\n\t\t\t\"integrity\": \"sha512-PzdZZzRhcXvKB0begee28n5lvwAcinGKYuLZOVxHAZm+n7y01ddEGfdS1ZXRuVcV+ndG6mSEAE8vgudom5UjYg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@nodelib/fs.scandir\": {\n\t\t\t\"version\": \"2.1.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz\",\n\t\t\t\"integrity\": \"sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@nodelib/fs.stat\": \"2.0.5\",\n\t\t\t\t\"run-parallel\": \"^1.1.9\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@nodelib/fs.stat\": {\n\t\t\t\"version\": \"2.0.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz\",\n\t\t\t\"integrity\": \"sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@nodelib/fs.walk\": {\n\t\t\t\"version\": \"1.2.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz\",\n\t\t\t\"integrity\": \"sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@nodelib/fs.scandir\": \"2.1.5\",\n\t\t\t\t\"fastq\": \"^1.6.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@scarf/scarf\": {\n\t\t\t\"version\": \"1.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==\",\n\t\t\t\"hasInstallScript\": true\n\t\t},\n\t\t\"node_modules/@sindresorhus/base62\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@sindresorhus/base62/-/base62-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=18\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@sinonjs/commons\": {\n\t\t\t\"version\": \"3.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"type-detect\": \"4.0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@sinonjs/fake-timers\": {\n\t\t\t\"version\": \"11.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@sinonjs/commons\": \"^3.0.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@sinonjs/samsam\": {\n\t\t\t\"version\": \"8.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@sinonjs/commons\": \"^3.0.1\",\n\t\t\t\t\"lodash.get\": \"^4.4.2\",\n\t\t\t\t\"type-detect\": \"^4.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@sinonjs/samsam/node_modules/type-detect\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@sinonjs/text-encoding\": {\n\t\t\t\"version\": \"0.7.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz\",\n\t\t\t\"integrity\": \"sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@stylistic/eslint-plugin\": {\n\t\t\t\"version\": \"3.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-3.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-pA6VOrOqk0+S8toJYhQGv2MWpQQR0QpeUo9AhNkC49Y26nxBQ/nH1rta9bUU1rPw2fJ1zZEMV5oCX5AazT7J2g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@typescript-eslint/utils\": \"^8.13.0\",\n\t\t\t\t\"eslint-visitor-keys\": \"^4.2.0\",\n\t\t\t\t\"espree\": \"^10.3.0\",\n\t\t\t\t\"estraverse\": \"^5.3.0\",\n\t\t\t\t\"picomatch\": \"^4.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=8.40.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys\": {\n\t\t\t\"version\": \"4.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@stylistic/eslint-plugin/node_modules/espree\": {\n\t\t\t\"version\": \"10.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/espree/-/espree-10.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"acorn\": \"^8.15.0\",\n\t\t\t\t\"acorn-jsx\": \"^5.3.2\",\n\t\t\t\t\"eslint-visitor-keys\": \"^4.2.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@stylistic/eslint-plugin/node_modules/picomatch\": {\n\t\t\t\"version\": \"4.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/jonschlinkert\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@types/estree\": {\n\t\t\t\"version\": \"1.0.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz\",\n\t\t\t\"integrity\": \"sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@types/normalize-package-data\": {\n\t\t\t\"version\": \"2.4.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz\",\n\t\t\t\"integrity\": \"sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@typescript-eslint/eslint-plugin\": {\n\t\t\t\"version\": \"8.54.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz\",\n\t\t\t\"integrity\": \"sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/regexpp\": \"^4.12.2\",\n\t\t\t\t\"@typescript-eslint/scope-manager\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/type-utils\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/utils\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/visitor-keys\": \"8.54.0\",\n\t\t\t\t\"ignore\": \"^7.0.5\",\n\t\t\t\t\"natural-compare\": \"^1.4.0\",\n\t\t\t\t\"ts-api-utils\": \"^2.4.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"@typescript-eslint/parser\": \"^8.54.0\",\n\t\t\t\t\"eslint\": \"^8.57.0 || ^9.0.0\",\n\t\t\t\t\"typescript\": \">=4.8.4 <6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore\": {\n\t\t\t\"version\": \"7.0.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz\",\n\t\t\t\"integrity\": \"sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/parser\": {\n\t\t\t\"version\": \"8.54.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.54.0.tgz\",\n\t\t\t\"integrity\": \"sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@typescript-eslint/scope-manager\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/types\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/typescript-estree\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/visitor-keys\": \"8.54.0\",\n\t\t\t\t\"debug\": \"^4.4.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \"^8.57.0 || ^9.0.0\",\n\t\t\t\t\"typescript\": \">=4.8.4 <6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/parser/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz\",\n\t\t\t\"integrity\": \"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/parser/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@typescript-eslint/project-service\": {\n\t\t\t\"version\": \"8.54.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.54.0.tgz\",\n\t\t\t\"integrity\": \"sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@typescript-eslint/tsconfig-utils\": \"^8.54.0\",\n\t\t\t\t\"@typescript-eslint/types\": \"^8.54.0\",\n\t\t\t\t\"debug\": \"^4.4.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"typescript\": \">=4.8.4 <6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/project-service/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz\",\n\t\t\t\"integrity\": \"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/project-service/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@typescript-eslint/scope-manager\": {\n\t\t\t\"version\": \"8.54.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz\",\n\t\t\t\"integrity\": \"sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@typescript-eslint/types\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/visitor-keys\": \"8.54.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/tsconfig-utils\": {\n\t\t\t\"version\": \"8.54.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz\",\n\t\t\t\"integrity\": \"sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"typescript\": \">=4.8.4 <6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/type-utils\": {\n\t\t\t\"version\": \"8.54.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.54.0.tgz\",\n\t\t\t\"integrity\": \"sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@typescript-eslint/types\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/typescript-estree\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/utils\": \"8.54.0\",\n\t\t\t\t\"debug\": \"^4.4.3\",\n\t\t\t\t\"ts-api-utils\": \"^2.4.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \"^8.57.0 || ^9.0.0\",\n\t\t\t\t\"typescript\": \">=4.8.4 <6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/type-utils/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz\",\n\t\t\t\"integrity\": \"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/type-utils/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@typescript-eslint/types\": {\n\t\t\t\"version\": \"8.54.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/types/-/types-8.54.0.tgz\",\n\t\t\t\"integrity\": \"sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/typescript-estree\": {\n\t\t\t\"version\": \"8.54.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz\",\n\t\t\t\"integrity\": \"sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@typescript-eslint/project-service\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/tsconfig-utils\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/types\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/visitor-keys\": \"8.54.0\",\n\t\t\t\t\"debug\": \"^4.4.3\",\n\t\t\t\t\"minimatch\": \"^9.0.5\",\n\t\t\t\t\"semver\": \"^7.7.3\",\n\t\t\t\t\"tinyglobby\": \"^0.2.15\",\n\t\t\t\t\"ts-api-utils\": \"^2.4.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"typescript\": \">=4.8.4 <6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"balanced-match\": \"^1.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/typescript-estree/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz\",\n\t\t\t\"integrity\": \"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch\": {\n\t\t\t\"version\": \"9.0.9\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz\",\n\t\t\t\"integrity\": \"sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"brace-expansion\": \"^2.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=16 || 14 >=14.17\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/isaacs\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/typescript-estree/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@typescript-eslint/utils\": {\n\t\t\t\"version\": \"8.54.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.54.0.tgz\",\n\t\t\t\"integrity\": \"sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.9.1\",\n\t\t\t\t\"@typescript-eslint/scope-manager\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/types\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/typescript-estree\": \"8.54.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \"^8.57.0 || ^9.0.0\",\n\t\t\t\t\"typescript\": \">=4.8.4 <6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/visitor-keys\": {\n\t\t\t\"version\": \"8.54.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz\",\n\t\t\t\"integrity\": \"sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@typescript-eslint/types\": \"8.54.0\",\n\t\t\t\t\"eslint-visitor-keys\": \"^4.2.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys\": {\n\t\t\t\"version\": \"4.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@ungap/structured-clone\": {\n\t\t\t\"version\": \"1.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/accepts\": {\n\t\t\t\"version\": \"1.3.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz\",\n\t\t\t\"integrity\": \"sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"mime-types\": \"~2.1.34\",\n\t\t\t\t\"negotiator\": \"0.6.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/accepts/node_modules/negotiator\": {\n\t\t\t\"version\": \"0.6.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz\",\n\t\t\t\"integrity\": \"sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/acorn\": {\n\t\t\t\"version\": \"8.16.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz\",\n\t\t\t\"integrity\": \"sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"acorn\": \"bin/acorn\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/acorn-jsx\": {\n\t\t\t\"version\": \"5.3.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz\",\n\t\t\t\"integrity\": \"sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"acorn\": \"^6.0.0 || ^7.0.0 || ^8.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/aggregate-error\": {\n\t\t\t\"version\": \"3.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"clean-stack\": \"^2.0.0\",\n\t\t\t\t\"indent-string\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ajv\": {\n\t\t\t\"version\": \"8.18.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz\",\n\t\t\t\"integrity\": \"sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fast-deep-equal\": \"^3.1.3\",\n\t\t\t\t\"fast-uri\": \"^3.0.1\",\n\t\t\t\t\"json-schema-traverse\": \"^1.0.0\",\n\t\t\t\t\"require-from-string\": \"^2.0.2\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"github\",\n\t\t\t\t\"url\": \"https://github.com/sponsors/epoberezkin\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ajv-formats\": {\n\t\t\t\"version\": \"2.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ajv\": \"^8.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"ajv\": \"^8.0.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"ajv\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ansi-colors\": {\n\t\t\t\"version\": \"4.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ansi-regex\": {\n\t\t\t\"version\": \"5.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ansi-styles\": {\n\t\t\t\"version\": \"4.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"color-convert\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/chalk/ansi-styles?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/anymatch\": {\n\t\t\t\"version\": \"3.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"normalize-path\": \"^3.0.0\",\n\t\t\t\t\"picomatch\": \"^2.0.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/append-transform\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"default-require-extensions\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/archy\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/archy/-/archy-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/are-docs-informative\": {\n\t\t\t\"version\": \"0.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=14\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/argparse\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==\"\n\t\t},\n\t\t\"node_modules/array-flatten\": {\n\t\t\t\"version\": \"1.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==\"\n\t\t},\n\t\t\"node_modules/asap\": {\n\t\t\t\"version\": \"2.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/asap/-/asap-2.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==\"\n\t\t},\n\t\t\"node_modules/asn1\": {\n\t\t\t\"version\": \"0.2.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz\",\n\t\t\t\"integrity\": \"sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safer-buffer\": \"~2.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/assert-plus\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ast-metadata-inferer\": {\n\t\t\t\"version\": \"0.8.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.1.tgz\",\n\t\t\t\"integrity\": \"sha512-ht3Dm6Zr7SXv6t1Ra6gFo0+kLDglHGrEbYihTkcycrbHw7WCcuhBzPlJYHEsIpycaUwzsJHje+vUcxXUX4ztTA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@mdn/browser-compat-data\": \"^5.6.19\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ast-metadata-inferer/node_modules/@mdn/browser-compat-data\": {\n\t\t\t\"version\": \"5.7.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.7.6.tgz\",\n\t\t\t\"integrity\": \"sha512-7xdrMX0Wk7grrTZQwAoy1GkvPMFoizStUoL+VmtUkAxegbCCec+3FKwOM6yc/uGU5+BEczQHXAlWiqvM8JeENg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/async\": {\n\t\t\t\"version\": \"0.9.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.2.tgz\",\n\t\t\t\"integrity\": \"sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==\"\n\t\t},\n\t\t\"node_modules/asynckit\": {\n\t\t\t\"version\": \"0.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==\"\n\t\t},\n\t\t\"node_modules/aws-sign2\": {\n\t\t\t\"version\": \"0.7.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz\",\n\t\t\t\"integrity\": \"sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/aws4\": {\n\t\t\t\"version\": \"1.13.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz\",\n\t\t\t\"integrity\": \"sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==\"\n\t\t},\n\t\t\"node_modules/axios\": {\n\t\t\t\"version\": \"1.15.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/axios/-/axios-1.15.0.tgz\",\n\t\t\t\"integrity\": \"sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"follow-redirects\": \"^1.15.11\",\n\t\t\t\t\"form-data\": \"^4.0.5\",\n\t\t\t\t\"proxy-from-env\": \"^2.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/axios-retry\": {\n\t\t\t\"version\": \"4.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/axios-retry/-/axios-retry-4.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-retry-allowed\": \"^2.2.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"axios\": \"0.x || 1.x\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/balanced-match\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==\",\n\t\t\t\"devOptional\": true\n\t\t},\n\t\t\"node_modules/baseline-browser-mapping\": {\n\t\t\t\"version\": \"2.8.31\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz\",\n\t\t\t\"integrity\": \"sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"baseline-browser-mapping\": \"dist/cli.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/bcrypt-pbkdf\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"tweetnacl\": \"^0.14.3\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/binary-extensions\": {\n\t\t\t\"version\": \"2.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/bindings\": {\n\t\t\t\"version\": \"1.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==\",\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"file-uri-to-path\": \"1.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/bintrees\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==\"\n\t\t},\n\t\t\"node_modules/bl\": {\n\t\t\t\"version\": \"1.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bl/-/bl-1.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"readable-stream\": \"^2.3.5\",\n\t\t\t\t\"safe-buffer\": \"^5.1.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/bluebird\": {\n\t\t\t\"version\": \"3.7.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz\",\n\t\t\t\"integrity\": \"sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==\"\n\t\t},\n\t\t\"node_modules/body-parser\": {\n\t\t\t\"version\": \"1.20.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz\",\n\t\t\t\"integrity\": \"sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bytes\": \"~3.1.2\",\n\t\t\t\t\"content-type\": \"~1.0.5\",\n\t\t\t\t\"debug\": \"2.6.9\",\n\t\t\t\t\"depd\": \"2.0.0\",\n\t\t\t\t\"destroy\": \"~1.2.0\",\n\t\t\t\t\"http-errors\": \"~2.0.1\",\n\t\t\t\t\"iconv-lite\": \"~0.4.24\",\n\t\t\t\t\"on-finished\": \"~2.4.1\",\n\t\t\t\t\"qs\": \"~6.14.0\",\n\t\t\t\t\"raw-body\": \"~2.5.3\",\n\t\t\t\t\"type-is\": \"~1.6.18\",\n\t\t\t\t\"unpipe\": \"~1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\",\n\t\t\t\t\"npm\": \"1.2.8000 || >= 1.4.16\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/body-parser/node_modules/http-errors\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"depd\": \"~2.0.0\",\n\t\t\t\t\"inherits\": \"~2.0.4\",\n\t\t\t\t\"setprototypeof\": \"~1.2.0\",\n\t\t\t\t\"statuses\": \"~2.0.2\",\n\t\t\t\t\"toidentifier\": \"~1.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/express\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/body-parser/node_modules/statuses\": {\n\t\t\t\"version\": \"2.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/boolbase\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/brace-expansion\": {\n\t\t\t\"version\": \"1.1.14\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz\",\n\t\t\t\"integrity\": \"sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==\",\n\t\t\t\"devOptional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"balanced-match\": \"^1.0.0\",\n\t\t\t\t\"concat-map\": \"0.0.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/braces\": {\n\t\t\t\"version\": \"3.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/braces/-/braces-3.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fill-range\": \"^7.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/browser-stdout\": {\n\t\t\t\"version\": \"1.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/browserslist\": {\n\t\t\t\"version\": \"4.28.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz\",\n\t\t\t\"integrity\": \"sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\t\"url\": \"https://opencollective.com/browserslist\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"tidelift\",\n\t\t\t\t\t\"url\": \"https://tidelift.com/funding/github/npm/browserslist\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/ai\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"baseline-browser-mapping\": \"^2.8.25\",\n\t\t\t\t\"caniuse-lite\": \"^1.0.30001754\",\n\t\t\t\t\"electron-to-chromium\": \"^1.5.249\",\n\t\t\t\t\"node-releases\": \"^2.0.27\",\n\t\t\t\t\"update-browserslist-db\": \"^1.1.4\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"browserslist\": \"cli.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/browserslist-config-wikimedia\": {\n\t\t\t\"version\": \"0.7.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.7.0.tgz\",\n\t\t\t\"integrity\": \"sha512-CTa0lv78dXKEgrYsOLCkqO+9UUS3CV9MWEOYHcymgEvx4mYxB80sCoKRCR7wW2SOMNxjaP9hohrZripjnKuRTA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/buffer-from\": {\n\t\t\t\"version\": \"1.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/builtin-modules\": {\n\t\t\t\"version\": \"3.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/builtins\": {\n\t\t\t\"version\": \"5.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"semver\": \"^7.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/bunyan\": {\n\t\t\t\"version\": \"1.8.15\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz\",\n\t\t\t\"integrity\": \"sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==\",\n\t\t\t\"engines\": [\n\t\t\t\t\"node >=0.10.0\"\n\t\t\t],\n\t\t\t\"bin\": {\n\t\t\t\t\"bunyan\": \"bin/bunyan\"\n\t\t\t},\n\t\t\t\"optionalDependencies\": {\n\t\t\t\t\"dtrace-provider\": \"~0.8\",\n\t\t\t\t\"moment\": \"^2.19.3\",\n\t\t\t\t\"mv\": \"~2\",\n\t\t\t\t\"safe-json-stringify\": \"~1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/bunyan-syslog-udp\": {\n\t\t\t\"version\": \"0.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bunyan-syslog-udp/-/bunyan-syslog-udp-0.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-tY6iaw+iYbCjlsAgAyO4CeA7Usnj5VndygMfd2PcHK++626oMoHANcdsH5tq5VxRPsbk9M1fbuk0a5pX9axV2w==\"\n\t\t},\n\t\t\"node_modules/bytes\": {\n\t\t\t\"version\": \"3.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/caching-transform\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"hasha\": \"^5.0.0\",\n\t\t\t\t\"make-dir\": \"^3.0.0\",\n\t\t\t\t\"package-hash\": \"^4.0.0\",\n\t\t\t\t\"write-file-atomic\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/call-bind-apply-helpers\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"es-errors\": \"^1.3.0\",\n\t\t\t\t\"function-bind\": \"^1.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/call-bound\": {\n\t\t\t\"version\": \"1.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"call-bind-apply-helpers\": \"^1.0.2\",\n\t\t\t\t\"get-intrinsic\": \"^1.3.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/callsites\": {\n\t\t\t\"version\": \"3.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/camelcase\": {\n\t\t\t\"version\": \"5.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/caniuse-lite\": {\n\t\t\t\"version\": \"1.0.30001757\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz\",\n\t\t\t\"integrity\": \"sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\t\"url\": \"https://opencollective.com/browserslist\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"tidelift\",\n\t\t\t\t\t\"url\": \"https://tidelift.com/funding/github/npm/caniuse-lite\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/ai\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"node_modules/caseless\": {\n\t\t\t\"version\": \"0.12.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz\",\n\t\t\t\"integrity\": \"sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==\"\n\t\t},\n\t\t\"node_modules/cassandra-uuid\": {\n\t\t\t\"version\": \"0.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cassandra-uuid/-/cassandra-uuid-0.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-XM/UdAVoXJWDcqxVqNe2agYat51C25g5m8nkJ2/ai3QvHwWsRx/+OlziD1c1/jYLlP7kcC1DMO2IF5ldt8EV+A==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"long\": \"^4.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/chalk\": {\n\t\t\t\"version\": \"4.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ansi-styles\": \"^4.1.0\",\n\t\t\t\t\"supports-color\": \"^7.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/chalk/chalk?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/chokidar\": {\n\t\t\t\"version\": \"3.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"anymatch\": \"~3.1.2\",\n\t\t\t\t\"braces\": \"~3.0.2\",\n\t\t\t\t\"glob-parent\": \"~5.1.2\",\n\t\t\t\t\"is-binary-path\": \"~2.1.0\",\n\t\t\t\t\"is-glob\": \"~4.0.1\",\n\t\t\t\t\"normalize-path\": \"~3.0.0\",\n\t\t\t\t\"readdirp\": \"~3.6.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8.10.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://paulmillr.com/funding/\"\n\t\t\t},\n\t\t\t\"optionalDependencies\": {\n\t\t\t\t\"fsevents\": \"~2.3.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/chokidar/node_modules/glob-parent\": {\n\t\t\t\"version\": \"5.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-glob\": \"^4.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/chownr\": {\n\t\t\t\"version\": \"1.1.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz\",\n\t\t\t\"integrity\": \"sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==\"\n\t\t},\n\t\t\"node_modules/ci-info\": {\n\t\t\t\"version\": \"4.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/sibiraj-s\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/clarinet\": {\n\t\t\t\"version\": \"0.11.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/clarinet/-/clarinet-0.11.0.tgz\",\n\t\t\t\"integrity\": \"sha512-6hgoCgDgdyEtrXsk1tMomUl+S6wnslv2F1muNTOuhQemOhauR+Q0FtBdrj9k+qyIDLm0TVW0QMZ10aeWwRDgIA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"chrome\": \">=16.0.912\",\n\t\t\t\t\"firefox\": \">=0.8.0\",\n\t\t\t\t\"node\": \">=0.3.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/clean-regexp\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"escape-string-regexp\": \"^1.0.5\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/clean-regexp/node_modules/escape-string-regexp\": {\n\t\t\t\"version\": \"1.0.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz\",\n\t\t\t\"integrity\": \"sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/clean-stack\": {\n\t\t\t\"version\": \"2.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/cliui\": {\n\t\t\t\"version\": \"7.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"string-width\": \"^4.2.0\",\n\t\t\t\t\"strip-ansi\": \"^6.0.0\",\n\t\t\t\t\"wrap-ansi\": \"^7.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/color-convert\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"color-name\": \"~1.1.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=7.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/color-name\": {\n\t\t\t\"version\": \"1.1.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz\",\n\t\t\t\"integrity\": \"sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==\"\n\t\t},\n\t\t\"node_modules/colors\": {\n\t\t\t\"version\": \"1.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/colors/-/colors-1.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.1.90\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/combined-stream\": {\n\t\t\t\"version\": \"1.0.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz\",\n\t\t\t\"integrity\": \"sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"delayed-stream\": \"~1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/comment-parser\": {\n\t\t\t\"version\": \"1.4.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.6.tgz\",\n\t\t\t\"integrity\": \"sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 12.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/commondir\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/compressible\": {\n\t\t\t\"version\": \"2.0.18\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz\",\n\t\t\t\"integrity\": \"sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"mime-db\": \">= 1.43.0 < 2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/compression\": {\n\t\t\t\"version\": \"1.8.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/compression/-/compression-1.8.1.tgz\",\n\t\t\t\"integrity\": \"sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bytes\": \"3.1.2\",\n\t\t\t\t\"compressible\": \"~2.0.18\",\n\t\t\t\t\"debug\": \"2.6.9\",\n\t\t\t\t\"negotiator\": \"~0.6.4\",\n\t\t\t\t\"on-headers\": \"~1.1.0\",\n\t\t\t\t\"safe-buffer\": \"5.2.1\",\n\t\t\t\t\"vary\": \"~1.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/concat-map\": {\n\t\t\t\"version\": \"0.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==\",\n\t\t\t\"devOptional\": true\n\t\t},\n\t\t\"node_modules/concat-stream\": {\n\t\t\t\"version\": \"1.6.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz\",\n\t\t\t\"integrity\": \"sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": [\n\t\t\t\t\"node >= 0.8\"\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"buffer-from\": \"^1.0.0\",\n\t\t\t\t\"inherits\": \"^2.0.3\",\n\t\t\t\t\"readable-stream\": \"^2.2.2\",\n\t\t\t\t\"typedarray\": \"^0.0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/content-disposition\": {\n\t\t\t\"version\": \"0.5.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz\",\n\t\t\t\"integrity\": \"sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safe-buffer\": \"5.2.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/content-type\": {\n\t\t\t\"version\": \"1.0.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz\",\n\t\t\t\"integrity\": \"sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/convert-source-map\": {\n\t\t\t\"version\": \"1.9.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/cookie\": {\n\t\t\t\"version\": \"0.7.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz\",\n\t\t\t\"integrity\": \"sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/cookie-signature\": {\n\t\t\t\"version\": \"1.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==\"\n\t\t},\n\t\t\"node_modules/core-js-compat\": {\n\t\t\t\"version\": \"3.47.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz\",\n\t\t\t\"integrity\": \"sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"browserslist\": \"^4.28.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/core-js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/core-util-is\": {\n\t\t\t\"version\": \"1.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==\"\n\t\t},\n\t\t\"node_modules/cross-spawn\": {\n\t\t\t\"version\": \"7.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"path-key\": \"^3.1.0\",\n\t\t\t\t\"shebang-command\": \"^2.0.0\",\n\t\t\t\t\"which\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/cssesc\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"cssesc\": \"bin/cssesc\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/csv-parse\": {\n\t\t\t\"version\": \"5.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/csv-parse/-/csv-parse-5.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/dashdash\": {\n\t\t\t\"version\": \"1.14.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz\",\n\t\t\t\"integrity\": \"sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"assert-plus\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/debug\": {\n\t\t\t\"version\": \"2.6.9\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz\",\n\t\t\t\"integrity\": \"sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/decamelize\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/deep-is\": {\n\t\t\t\"version\": \"0.1.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz\",\n\t\t\t\"integrity\": \"sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/default-require-extensions\": {\n\t\t\t\"version\": \"3.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"strip-bom\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/delayed-stream\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/depd\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/depd/-/depd-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/destroy\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\",\n\t\t\t\t\"npm\": \"1.2.8000 || >= 1.4.16\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/diff\": {\n\t\t\t\"version\": \"5.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/diff/-/diff-5.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.3.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/diff-sequences\": {\n\t\t\t\"version\": \"27.5.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz\",\n\t\t\t\"integrity\": \"sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/dnscache\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/dnscache/-/dnscache-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-2FFKzmLGOnD+Y378bRKH+gTjRMuSpH7OKgPy31KjjfCoKZx7tU8Dmqfd/3fhG2d/4bppuN8/KtWMUZBAcUCRnQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"asap\": \"^2.0.6\",\n\t\t\t\t\"lodash.clone\": \"^4.5.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/doctrine\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"esutils\": \"^2.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/dom-storage\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/domino\": {\n\t\t\t\"version\": \"2.1.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/domino/-/domino-2.1.6.tgz\",\n\t\t\t\"integrity\": \"sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==\"\n\t\t},\n\t\t\"node_modules/dtrace-provider\": {\n\t\t\t\"version\": \"0.8.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz\",\n\t\t\t\"integrity\": \"sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==\",\n\t\t\t\"hasInstallScript\": true,\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"nan\": \"^2.14.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/dunder-proto\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"call-bind-apply-helpers\": \"^1.0.1\",\n\t\t\t\t\"es-errors\": \"^1.3.0\",\n\t\t\t\t\"gopd\": \"^1.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ecc-jsbn\": {\n\t\t\t\"version\": \"0.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"jsbn\": \"~0.1.0\",\n\t\t\t\t\"safer-buffer\": \"^2.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ee-first\": {\n\t\t\t\"version\": \"1.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==\"\n\t\t},\n\t\t\"node_modules/electron-to-chromium\": {\n\t\t\t\"version\": \"1.5.260\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.260.tgz\",\n\t\t\t\"integrity\": \"sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/emoji-regex\": {\n\t\t\t\"version\": \"8.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==\"\n\t\t},\n\t\t\"node_modules/encodeurl\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/enhanced-resolve\": {\n\t\t\t\"version\": \"5.21.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz\",\n\t\t\t\"integrity\": \"sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"graceful-fs\": \"^4.2.4\",\n\t\t\t\t\"tapable\": \"^2.3.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10.13.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/entities\": {\n\t\t\t\"version\": \"2.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/entities/-/entities-2.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/fb55/entities?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/error-ex\": {\n\t\t\t\"version\": \"1.3.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz\",\n\t\t\t\"integrity\": \"sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-arrayish\": \"^0.2.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/es-define-property\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/es-errors\": {\n\t\t\t\"version\": \"1.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/es-object-atoms\": {\n\t\t\t\"version\": \"1.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"es-errors\": \"^1.3.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/es-set-tostringtag\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"es-errors\": \"^1.3.0\",\n\t\t\t\t\"get-intrinsic\": \"^1.2.6\",\n\t\t\t\t\"has-tostringtag\": \"^1.0.2\",\n\t\t\t\t\"hasown\": \"^2.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/es6-error\": {\n\t\t\t\"version\": \"4.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/escalade\": {\n\t\t\t\"version\": \"3.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/escape-html\": {\n\t\t\t\"version\": \"1.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==\"\n\t\t},\n\t\t\"node_modules/escape-string-regexp\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint\": {\n\t\t\t\"version\": \"8.57.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz\",\n\t\t\t\"integrity\": \"sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==\",\n\t\t\t\"deprecated\": \"This version is no longer supported. Please see https://eslint.org/version-support for other options.\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.2.0\",\n\t\t\t\t\"@eslint-community/regexpp\": \"^4.6.1\",\n\t\t\t\t\"@eslint/eslintrc\": \"^2.1.4\",\n\t\t\t\t\"@eslint/js\": \"8.57.0\",\n\t\t\t\t\"@humanwhocodes/config-array\": \"^0.11.14\",\n\t\t\t\t\"@humanwhocodes/module-importer\": \"^1.0.1\",\n\t\t\t\t\"@nodelib/fs.walk\": \"^1.2.8\",\n\t\t\t\t\"@ungap/structured-clone\": \"^1.2.0\",\n\t\t\t\t\"ajv\": \"^6.12.4\",\n\t\t\t\t\"chalk\": \"^4.0.0\",\n\t\t\t\t\"cross-spawn\": \"^7.0.2\",\n\t\t\t\t\"debug\": \"^4.3.2\",\n\t\t\t\t\"doctrine\": \"^3.0.0\",\n\t\t\t\t\"escape-string-regexp\": \"^4.0.0\",\n\t\t\t\t\"eslint-scope\": \"^7.2.2\",\n\t\t\t\t\"eslint-visitor-keys\": \"^3.4.3\",\n\t\t\t\t\"espree\": \"^9.6.1\",\n\t\t\t\t\"esquery\": \"^1.4.2\",\n\t\t\t\t\"esutils\": \"^2.0.2\",\n\t\t\t\t\"fast-deep-equal\": \"^3.1.3\",\n\t\t\t\t\"file-entry-cache\": \"^6.0.1\",\n\t\t\t\t\"find-up\": \"^5.0.0\",\n\t\t\t\t\"glob-parent\": \"^6.0.2\",\n\t\t\t\t\"globals\": \"^13.19.0\",\n\t\t\t\t\"graphemer\": \"^1.4.0\",\n\t\t\t\t\"ignore\": \"^5.2.0\",\n\t\t\t\t\"imurmurhash\": \"^0.1.4\",\n\t\t\t\t\"is-glob\": \"^4.0.0\",\n\t\t\t\t\"is-path-inside\": \"^3.0.3\",\n\t\t\t\t\"js-yaml\": \"^4.1.0\",\n\t\t\t\t\"json-stable-stringify-without-jsonify\": \"^1.0.1\",\n\t\t\t\t\"levn\": \"^0.4.1\",\n\t\t\t\t\"lodash.merge\": \"^4.6.2\",\n\t\t\t\t\"minimatch\": \"^3.1.2\",\n\t\t\t\t\"natural-compare\": \"^1.4.0\",\n\t\t\t\t\"optionator\": \"^0.9.3\",\n\t\t\t\t\"strip-ansi\": \"^6.0.1\",\n\t\t\t\t\"text-table\": \"^0.2.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"eslint\": \"bin/eslint.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-compat-utils\": {\n\t\t\t\"version\": \"0.5.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz\",\n\t\t\t\"integrity\": \"sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"semver\": \"^7.5.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-config-wikimedia\": {\n\t\t\t\"version\": \"0.32.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.32.4.tgz\",\n\t\t\t\"integrity\": \"sha512-zcHJYss2vo8HK5PzkFuaV9mzaSGRuhA+jFGoQ4rNIwWz0usZsuQ2LYpkKxrbCVX1CbV0PzG+jJ6p0cLI+G37JQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@stylistic/eslint-plugin\": \"^3.1.0\",\n\t\t\t\t\"@typescript-eslint/eslint-plugin\": \"8.54.0\",\n\t\t\t\t\"@typescript-eslint/parser\": \"8.54.0\",\n\t\t\t\t\"browserslist-config-wikimedia\": \"^0.7.0\",\n\t\t\t\t\"eslint-plugin-compat\": \"^6.1.0\",\n\t\t\t\t\"eslint-plugin-es-x\": \"^8.7.0\",\n\t\t\t\t\"eslint-plugin-jest\": \"^29.12.2\",\n\t\t\t\t\"eslint-plugin-jsdoc\": \"^62.9.0\",\n\t\t\t\t\"eslint-plugin-json-es\": \"^1.6.0\",\n\t\t\t\t\"eslint-plugin-mediawiki\": \"^0.8.3\",\n\t\t\t\t\"eslint-plugin-mocha\": \"^10.5.0\",\n\t\t\t\t\"eslint-plugin-n\": \"^17.24.0\",\n\t\t\t\t\"eslint-plugin-no-jquery\": \"^4.0.0\",\n\t\t\t\t\"eslint-plugin-qunit\": \"^8.2.6\",\n\t\t\t\t\"eslint-plugin-security\": \"^4.0.0\",\n\t\t\t\t\"eslint-plugin-unicorn\": \"^56.0.1\",\n\t\t\t\t\"eslint-plugin-vue\": \"^9.33.0\",\n\t\t\t\t\"eslint-plugin-wdio\": \"9.23.0\",\n\t\t\t\t\"eslint-plugin-yml\": \"^1.19.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=20 <25\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \"^8.57.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-config-wikimedia/node_modules/eslint-plugin-es-x\": {\n\t\t\t\"version\": \"8.7.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-8.7.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Du5Sb067sjqzmglaPhsfcEQgE1EYfL8sko+4jOMcAB/XKGoCxntSrOmTYuVzswA1rzM9+MZwH6+GOp0G3/wVCg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t\"https://github.com/sponsors/ota-meshi\",\n\t\t\t\t\"https://opencollective.com/eslint\"\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.1.2\",\n\t\t\t\t\"@eslint-community/regexpp\": \"^4.12.1\",\n\t\t\t\t\"eslint-compat-utils\": \"^0.6.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^14.18.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-config-wikimedia/node_modules/eslint-plugin-es-x/node_modules/eslint-compat-utils\": {\n\t\t\t\"version\": \"0.6.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz\",\n\t\t\t\"integrity\": \"sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"semver\": \"^7.5.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-config-wikimedia/node_modules/eslint-plugin-n\": {\n\t\t\t\"version\": \"17.24.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.24.0.tgz\",\n\t\t\t\"integrity\": \"sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.5.0\",\n\t\t\t\t\"enhanced-resolve\": \"^5.17.1\",\n\t\t\t\t\"eslint-plugin-es-x\": \"^7.8.0\",\n\t\t\t\t\"get-tsconfig\": \"^4.8.1\",\n\t\t\t\t\"globals\": \"^15.11.0\",\n\t\t\t\t\"globrex\": \"^0.1.2\",\n\t\t\t\t\"ignore\": \"^5.3.2\",\n\t\t\t\t\"semver\": \"^7.6.3\",\n\t\t\t\t\"ts-declaration-location\": \"^1.0.6\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=8.23.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-config-wikimedia/node_modules/eslint-plugin-n/node_modules/eslint-plugin-es-x\": {\n\t\t\t\"version\": \"7.8.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t\"https://github.com/sponsors/ota-meshi\",\n\t\t\t\t\"https://opencollective.com/eslint\"\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.1.2\",\n\t\t\t\t\"@eslint-community/regexpp\": \"^4.11.0\",\n\t\t\t\t\"eslint-compat-utils\": \"^0.5.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^14.18.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-config-wikimedia/node_modules/globals\": {\n\t\t\t\"version\": \"15.15.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/globals/-/globals-15.15.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=18\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-compat\": {\n\t\t\t\"version\": \"6.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-6.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-gLKqUH+lQcCL+HzsROUjBDvakc5Zaga51Y4ZAkPCXc41pzKBfyluqTr2j8zOx8QQQb7zyglu1LVoL5aSNWf2SQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@mdn/browser-compat-data\": \"^6.1.1\",\n\t\t\t\t\"ast-metadata-inferer\": \"^0.8.1\",\n\t\t\t\t\"browserslist\": \"^4.25.2\",\n\t\t\t\t\"find-up\": \"^5.0.0\",\n\t\t\t\t\"globals\": \"^15.7.0\",\n\t\t\t\t\"lodash.memoize\": \"^4.1.2\",\n\t\t\t\t\"semver\": \"^7.6.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=18.x\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \"^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-compat/node_modules/globals\": {\n\t\t\t\"version\": \"15.15.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/globals/-/globals-15.15.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=18\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-es-x\": {\n\t\t\t\"version\": \"7.8.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t\"https://github.com/sponsors/ota-meshi\",\n\t\t\t\t\"https://opencollective.com/eslint\"\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.1.2\",\n\t\t\t\t\"@eslint-community/regexpp\": \"^4.11.0\",\n\t\t\t\t\"eslint-compat-utils\": \"^0.5.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^14.18.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-jest\": {\n\t\t\t\"version\": \"29.15.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.15.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ZCGr7vTH2WSo2hrK5oM2RULFmMruQ7W3cX7YfwoTiPfzTGTFBMmrVIz45jZHd++cGKj/kWf02li/RhTGcANJSA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@typescript-eslint/utils\": \"^8.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^20.12.0 || ^22.0.0 || >=24.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"@typescript-eslint/eslint-plugin\": \"^8.0.0\",\n\t\t\t\t\"eslint\": \"^8.57.0 || ^9.0.0 || ^10.0.0\",\n\t\t\t\t\"jest\": \"*\",\n\t\t\t\t\"typescript\": \">=4.8.4 <6.0.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"@typescript-eslint/eslint-plugin\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t},\n\t\t\t\t\"jest\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t},\n\t\t\t\t\"typescript\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-jsdoc\": {\n\t\t\t\"version\": \"62.9.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-62.9.0.tgz\",\n\t\t\t\"integrity\": \"sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@es-joy/jsdoccomment\": \"~0.86.0\",\n\t\t\t\t\"@es-joy/resolve.exports\": \"1.2.0\",\n\t\t\t\t\"are-docs-informative\": \"^0.0.2\",\n\t\t\t\t\"comment-parser\": \"1.4.6\",\n\t\t\t\t\"debug\": \"^4.4.3\",\n\t\t\t\t\"escape-string-regexp\": \"^4.0.0\",\n\t\t\t\t\"espree\": \"^11.2.0\",\n\t\t\t\t\"esquery\": \"^1.7.0\",\n\t\t\t\t\"html-entities\": \"^2.6.0\",\n\t\t\t\t\"object-deep-merge\": \"^2.0.0\",\n\t\t\t\t\"parse-imports-exports\": \"^0.2.4\",\n\t\t\t\t\"semver\": \"^7.7.4\",\n\t\t\t\t\"spdx-expression-parse\": \"^4.0.0\",\n\t\t\t\t\"to-valid-identifier\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^20.19.0 || ^22.13.0 || >=24\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \"^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-jsdoc/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz\",\n\t\t\t\"integrity\": \"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys\": {\n\t\t\t\"version\": \"5.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^20.19.0 || ^22.13.0 || >=24\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-jsdoc/node_modules/espree\": {\n\t\t\t\"version\": \"11.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/espree/-/espree-11.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"acorn\": \"^8.16.0\",\n\t\t\t\t\"acorn-jsx\": \"^5.3.2\",\n\t\t\t\t\"eslint-visitor-keys\": \"^5.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^20.19.0 || ^22.13.0 || >=24\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-jsdoc/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/eslint-plugin-json-es\": {\n\t\t\t\"version\": \"1.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-xVn6hufGQH1Aa+yqOhQ43Cq28GuitTcMpQh+uaUh27U2qnVLBrvkN+2xQSnv6zpdLEPS35JCNhq4kvhR+PQCgw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"eslint-visitor-keys\": \"^3.3.0\",\n\t\t\t\t\"espree\": \"^9.3.1\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">= 7\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-mediawiki\": {\n\t\t\t\"version\": \"0.8.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.8.3.tgz\",\n\t\t\t\"integrity\": \"sha512-RQKZd40C1taMDk5N9+aFLEBGBB95RNG7Gc54EsJ8pHsJu8//nIdpxNFWPtQz6RNxz6pZUXBnMCxzkMOLM3Mm1w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"upath\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=5.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-mocha\": {\n\t\t\t\"version\": \"10.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-F2ALmQVPT1GoP27O1JTZGrV9Pqg8k79OeIuvw63UxMtQKREZtmkK1NFgkZQ2TW7L2JSSFKHFPTtHu5z8R9QNRw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"eslint-utils\": \"^3.0.0\",\n\t\t\t\t\"globals\": \"^13.24.0\",\n\t\t\t\t\"rambda\": \"^7.4.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=14.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=7.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-n\": {\n\t\t\t\"version\": \"16.6.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz\",\n\t\t\t\"integrity\": \"sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.4.0\",\n\t\t\t\t\"builtins\": \"^5.0.1\",\n\t\t\t\t\"eslint-plugin-es-x\": \"^7.5.0\",\n\t\t\t\t\"get-tsconfig\": \"^4.7.0\",\n\t\t\t\t\"globals\": \"^13.24.0\",\n\t\t\t\t\"ignore\": \"^5.2.4\",\n\t\t\t\t\"is-builtin-module\": \"^3.2.1\",\n\t\t\t\t\"is-core-module\": \"^2.12.1\",\n\t\t\t\t\"minimatch\": \"^3.1.2\",\n\t\t\t\t\"resolve\": \"^1.22.2\",\n\t\t\t\t\"semver\": \"^7.5.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/mysticatea\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=7.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-no-jquery\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ZR631D3qIQfgjKOAcgvYa5cB8xdTvFXAD5MbK5x5WltLSwFxmGnoaTXNtnptFU7py07ALrIe5dZRYncu4RD/Ug==\",\n\t\t\t\"dev\": true,\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=8.0.0 <9.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-qunit\": {\n\t\t\t\"version\": \"8.2.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-8.2.6.tgz\",\n\t\t\t\"integrity\": \"sha512-S1jC/DIW9J8VtNX4uG1vlf5FZVrfQFlcuiYmvTHR2IICUhubHqpWA5o+qS1tujh+81Gs39omKV2D4OXfbSJE5g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.4.0\",\n\t\t\t\t\"requireindex\": \"^1.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^16.0.0 || ^18.0.0 || >=20.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=8.38.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-security\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-tfuQT8K/Li1ZxhFzyD8wPIKtlzZxqBcPr9q0jFMQ77wWAbKBVEhaMPVQRTMTvCMUDhwBe5vPVqQPwAGk/ASfxQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safe-regex\": \"^2.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-unicorn\": {\n\t\t\t\"version\": \"56.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/helper-validator-identifier\": \"^7.24.7\",\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.4.0\",\n\t\t\t\t\"ci-info\": \"^4.0.0\",\n\t\t\t\t\"clean-regexp\": \"^1.0.0\",\n\t\t\t\t\"core-js-compat\": \"^3.38.1\",\n\t\t\t\t\"esquery\": \"^1.6.0\",\n\t\t\t\t\"globals\": \"^15.9.0\",\n\t\t\t\t\"indent-string\": \"^4.0.0\",\n\t\t\t\t\"is-builtin-module\": \"^3.2.1\",\n\t\t\t\t\"jsesc\": \"^3.0.2\",\n\t\t\t\t\"pluralize\": \"^8.0.0\",\n\t\t\t\t\"read-pkg-up\": \"^7.0.1\",\n\t\t\t\t\"regexp-tree\": \"^0.1.27\",\n\t\t\t\t\"regjsparser\": \"^0.10.0\",\n\t\t\t\t\"semver\": \"^7.6.3\",\n\t\t\t\t\"strip-indent\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=18.18\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=8.56.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-unicorn/node_modules/globals\": {\n\t\t\t\"version\": \"15.15.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/globals/-/globals-15.15.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=18\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-vue\": {\n\t\t\t\"version\": \"9.33.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz\",\n\t\t\t\"integrity\": \"sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.4.0\",\n\t\t\t\t\"globals\": \"^13.24.0\",\n\t\t\t\t\"natural-compare\": \"^1.4.0\",\n\t\t\t\t\"nth-check\": \"^2.1.1\",\n\t\t\t\t\"postcss-selector-parser\": \"^6.0.15\",\n\t\t\t\t\"semver\": \"^7.6.3\",\n\t\t\t\t\"vue-eslint-parser\": \"^9.4.3\",\n\t\t\t\t\"xml-name-validator\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \"^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-wdio\": {\n\t\t\t\"version\": \"9.23.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-9.23.0.tgz\",\n\t\t\t\"integrity\": \"sha512-8tcpupzp2Qmv+uSfhzeHi42LVA9PyjkpMBPclSIkPxBfXpj4fMrejwAHu1PROh1OmJN1VQcGQUTWvSzyRcV2vA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=18.20.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-yml\": {\n\t\t\t\"version\": \"1.19.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.19.0.tgz\",\n\t\t\t\"integrity\": \"sha512-S+4GbcCWksFKAvFJtf0vpdiCkZZvDJCV4Zsi9ahmYkYOYcf+LRqqzvzkb/ST7vTYV6sFwXOvawzYyL/jFT2nQA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"debug\": \"^4.3.2\",\n\t\t\t\t\"diff-sequences\": \"^27.5.1\",\n\t\t\t\t\"escape-string-regexp\": \"4.0.0\",\n\t\t\t\t\"eslint-compat-utils\": \"^0.6.0\",\n\t\t\t\t\"natural-compare\": \"^1.4.0\",\n\t\t\t\t\"yaml-eslint-parser\": \"^1.2.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ota-meshi\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-yml/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz\",\n\t\t\t\"integrity\": \"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-yml/node_modules/eslint-compat-utils\": {\n\t\t\t\"version\": \"0.6.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz\",\n\t\t\t\"integrity\": \"sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"semver\": \"^7.5.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-yml/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/eslint-scope\": {\n\t\t\t\"version\": \"7.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"esrecurse\": \"^4.3.0\",\n\t\t\t\t\"estraverse\": \"^5.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-utils\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"eslint-visitor-keys\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^10.0.0 || ^12.0.0 || >= 14.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/mysticatea\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=5\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-utils/node_modules/eslint-visitor-keys\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-visitor-keys\": {\n\t\t\t\"version\": \"3.4.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz\",\n\t\t\t\"integrity\": \"sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint/node_modules/ajv\": {\n\t\t\t\"version\": \"6.14.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz\",\n\t\t\t\"integrity\": \"sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fast-deep-equal\": \"^3.1.1\",\n\t\t\t\t\"fast-json-stable-stringify\": \"^2.0.0\",\n\t\t\t\t\"json-schema-traverse\": \"^0.4.1\",\n\t\t\t\t\"uri-js\": \"^4.2.2\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"github\",\n\t\t\t\t\"url\": \"https://github.com/sponsors/epoberezkin\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint/node_modules/json-schema-traverse\": {\n\t\t\t\"version\": \"0.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/eslint/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/espree\": {\n\t\t\t\"version\": \"9.6.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/espree/-/espree-9.6.1.tgz\",\n\t\t\t\"integrity\": \"sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"acorn\": \"^8.9.0\",\n\t\t\t\t\"acorn-jsx\": \"^5.3.2\",\n\t\t\t\t\"eslint-visitor-keys\": \"^3.4.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/esprima\": {\n\t\t\t\"version\": \"4.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==\",\n\t\t\t\"bin\": {\n\t\t\t\t\"esparse\": \"bin/esparse.js\",\n\t\t\t\t\"esvalidate\": \"bin/esvalidate.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/esquery\": {\n\t\t\t\"version\": \"1.7.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"estraverse\": \"^5.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/esrecurse\": {\n\t\t\t\"version\": \"4.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"estraverse\": \"^5.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/estraverse\": {\n\t\t\t\"version\": \"5.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/esutils\": {\n\t\t\t\"version\": \"2.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/etag\": {\n\t\t\t\"version\": \"1.8.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz\",\n\t\t\t\"integrity\": \"sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/express\": {\n\t\t\t\"version\": \"4.22.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/express/-/express-4.22.1.tgz\",\n\t\t\t\"integrity\": \"sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"accepts\": \"~1.3.8\",\n\t\t\t\t\"array-flatten\": \"1.1.1\",\n\t\t\t\t\"body-parser\": \"~1.20.3\",\n\t\t\t\t\"content-disposition\": \"~0.5.4\",\n\t\t\t\t\"content-type\": \"~1.0.4\",\n\t\t\t\t\"cookie\": \"~0.7.1\",\n\t\t\t\t\"cookie-signature\": \"~1.0.6\",\n\t\t\t\t\"debug\": \"2.6.9\",\n\t\t\t\t\"depd\": \"2.0.0\",\n\t\t\t\t\"encodeurl\": \"~2.0.0\",\n\t\t\t\t\"escape-html\": \"~1.0.3\",\n\t\t\t\t\"etag\": \"~1.8.1\",\n\t\t\t\t\"finalhandler\": \"~1.3.1\",\n\t\t\t\t\"fresh\": \"~0.5.2\",\n\t\t\t\t\"http-errors\": \"~2.0.0\",\n\t\t\t\t\"merge-descriptors\": \"1.0.3\",\n\t\t\t\t\"methods\": \"~1.1.2\",\n\t\t\t\t\"on-finished\": \"~2.4.1\",\n\t\t\t\t\"parseurl\": \"~1.3.3\",\n\t\t\t\t\"path-to-regexp\": \"~0.1.12\",\n\t\t\t\t\"proxy-addr\": \"~2.0.7\",\n\t\t\t\t\"qs\": \"~6.14.0\",\n\t\t\t\t\"range-parser\": \"~1.2.1\",\n\t\t\t\t\"safe-buffer\": \"5.2.1\",\n\t\t\t\t\"send\": \"~0.19.0\",\n\t\t\t\t\"serve-static\": \"~1.16.2\",\n\t\t\t\t\"setprototypeof\": \"1.2.0\",\n\t\t\t\t\"statuses\": \"~2.0.1\",\n\t\t\t\t\"type-is\": \"~1.6.18\",\n\t\t\t\t\"utils-merge\": \"1.0.1\",\n\t\t\t\t\"vary\": \"~1.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.10.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/express\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/extend\": {\n\t\t\t\"version\": \"3.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/extend/-/extend-3.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==\"\n\t\t},\n\t\t\"node_modules/extsprintf\": {\n\t\t\t\"version\": \"1.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==\",\n\t\t\t\"engines\": [\n\t\t\t\t\"node >=0.6.0\"\n\t\t\t]\n\t\t},\n\t\t\"node_modules/fast-deep-equal\": {\n\t\t\t\"version\": \"3.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==\"\n\t\t},\n\t\t\"node_modules/fast-json-stable-stringify\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==\"\n\t\t},\n\t\t\"node_modules/fast-levenshtein\": {\n\t\t\t\"version\": \"2.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/fast-uri\": {\n\t\t\t\"version\": \"3.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/fastify\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\t\"url\": \"https://opencollective.com/fastify\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"node_modules/fastq\": {\n\t\t\t\"version\": \"1.19.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz\",\n\t\t\t\"integrity\": \"sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"reusify\": \"^1.0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/file-entry-cache\": {\n\t\t\t\"version\": \"6.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"flat-cache\": \"^3.0.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^10.12.0 || >=12.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/file-uri-to-path\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==\",\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"node_modules/fill-range\": {\n\t\t\t\"version\": \"7.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"to-regex-range\": \"^5.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/finalhandler\": {\n\t\t\t\"version\": \"1.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"debug\": \"2.6.9\",\n\t\t\t\t\"encodeurl\": \"~2.0.0\",\n\t\t\t\t\"escape-html\": \"~1.0.3\",\n\t\t\t\t\"on-finished\": \"2.4.1\",\n\t\t\t\t\"parseurl\": \"~1.3.3\",\n\t\t\t\t\"statuses\": \"2.0.1\",\n\t\t\t\t\"unpipe\": \"~1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/find-cache-dir\": {\n\t\t\t\"version\": \"3.3.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz\",\n\t\t\t\"integrity\": \"sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"commondir\": \"^1.0.1\",\n\t\t\t\t\"make-dir\": \"^3.0.2\",\n\t\t\t\t\"pkg-dir\": \"^4.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/avajs/find-cache-dir?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/find-up\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"locate-path\": \"^6.0.0\",\n\t\t\t\t\"path-exists\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/flat\": {\n\t\t\t\"version\": \"5.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/flat/-/flat-5.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"flat\": \"cli.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/flat-cache\": {\n\t\t\t\"version\": \"3.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"flatted\": \"^3.2.9\",\n\t\t\t\t\"keyv\": \"^4.5.3\",\n\t\t\t\t\"rimraf\": \"^3.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^10.12.0 || >=12.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/flatted\": {\n\t\t\t\"version\": \"3.4.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz\",\n\t\t\t\"integrity\": \"sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/follow-redirects\": {\n\t\t\t\"version\": \"1.16.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz\",\n\t\t\t\"integrity\": \"sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==\",\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"individual\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/RubenVerborgh\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"debug\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/foreground-child\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"cross-spawn\": \"^7.0.0\",\n\t\t\t\t\"signal-exit\": \"^3.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/forever-agent\": {\n\t\t\t\"version\": \"0.6.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz\",\n\t\t\t\"integrity\": \"sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/form-data\": {\n\t\t\t\"version\": \"4.0.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz\",\n\t\t\t\"integrity\": \"sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"asynckit\": \"^0.4.0\",\n\t\t\t\t\"combined-stream\": \"^1.0.8\",\n\t\t\t\t\"es-set-tostringtag\": \"^2.1.0\",\n\t\t\t\t\"hasown\": \"^2.0.2\",\n\t\t\t\t\"mime-types\": \"^2.1.12\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/forwarded\": {\n\t\t\t\"version\": \"0.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/fresh\": {\n\t\t\t\"version\": \"0.5.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz\",\n\t\t\t\"integrity\": \"sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/fromentries\": {\n\t\t\t\"version\": \"1.3.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz\",\n\t\t\t\"integrity\": \"sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"patreon\",\n\t\t\t\t\t\"url\": \"https://www.patreon.com/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"consulting\",\n\t\t\t\t\t\"url\": \"https://feross.org/support\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"node_modules/fs-minipass\": {\n\t\t\t\"version\": \"1.2.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz\",\n\t\t\t\"integrity\": \"sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"minipass\": \"^2.6.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/fs.realpath\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/fsevents\": {\n\t\t\t\"version\": \"2.3.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz\",\n\t\t\t\"integrity\": \"sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"hasInstallScript\": true,\n\t\t\t\"optional\": true,\n\t\t\t\"os\": [\n\t\t\t\t\"darwin\"\n\t\t\t],\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^8.16.0 || ^10.6.0 || >=11.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/function-bind\": {\n\t\t\t\"version\": \"1.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==\",\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/gelf-stream\": {\n\t\t\t\"version\": \"1.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/gelf-stream/-/gelf-stream-1.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-kCzCfI6DJ8+aaDhwMcsNm2l6CsBj6y4Is6CCxH2W9sYnZGcXg9WmJ/iZMoJVO6uTwTRL7dbIioAS8lCuGUXSFA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"gelfling\": \"^0.3.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/gelfling\": {\n\t\t\t\"version\": \"0.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/gelfling/-/gelfling-0.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-vli3D2RYpLW6XhryNrv7HMjFNbj+ks/CCVDjokxOtZ+p6QYRadj8Zc0ps+LolSsh/I97XO0OduP/ShOej08clA==\"\n\t\t},\n\t\t\"node_modules/gensync\": {\n\t\t\t\"version\": \"1.0.0-beta.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz\",\n\t\t\t\"integrity\": \"sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/get-caller-file\": {\n\t\t\t\"version\": \"2.0.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz\",\n\t\t\t\"integrity\": \"sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"6.* || 8.* || >= 10.*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/get-intrinsic\": {\n\t\t\t\"version\": \"1.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"call-bind-apply-helpers\": \"^1.0.2\",\n\t\t\t\t\"es-define-property\": \"^1.0.1\",\n\t\t\t\t\"es-errors\": \"^1.3.0\",\n\t\t\t\t\"es-object-atoms\": \"^1.1.1\",\n\t\t\t\t\"function-bind\": \"^1.1.2\",\n\t\t\t\t\"get-proto\": \"^1.0.1\",\n\t\t\t\t\"gopd\": \"^1.2.0\",\n\t\t\t\t\"has-symbols\": \"^1.1.0\",\n\t\t\t\t\"hasown\": \"^2.0.2\",\n\t\t\t\t\"math-intrinsics\": \"^1.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/get-package-type\": {\n\t\t\t\"version\": \"0.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/get-proto\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"dunder-proto\": \"^1.0.1\",\n\t\t\t\t\"es-object-atoms\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/get-tsconfig\": {\n\t\t\t\"version\": \"4.10.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz\",\n\t\t\t\"integrity\": \"sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"resolve-pkg-maps\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/privatenumber/get-tsconfig?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/getpass\": {\n\t\t\t\"version\": \"0.1.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz\",\n\t\t\t\"integrity\": \"sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"assert-plus\": \"^1.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/glob\": {\n\t\t\t\"version\": \"8.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob/-/glob-8.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==\",\n\t\t\t\"deprecated\": \"Glob versions prior to v9 are no longer supported\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fs.realpath\": \"^1.0.0\",\n\t\t\t\t\"inflight\": \"^1.0.4\",\n\t\t\t\t\"inherits\": \"2\",\n\t\t\t\t\"minimatch\": \"^5.0.1\",\n\t\t\t\t\"once\": \"^1.3.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/isaacs\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/glob-parent\": {\n\t\t\t\"version\": \"6.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-glob\": \"^4.0.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10.13.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/glob/node_modules/brace-expansion\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"balanced-match\": \"^1.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/glob/node_modules/minimatch\": {\n\t\t\t\"version\": \"5.1.9\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz\",\n\t\t\t\"integrity\": \"sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"brace-expansion\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/globals\": {\n\t\t\t\"version\": \"13.24.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/globals/-/globals-13.24.0.tgz\",\n\t\t\t\"integrity\": \"sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"type-fest\": \"^0.20.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/globrex\": {\n\t\t\t\"version\": \"0.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/gopd\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/graceful-fs\": {\n\t\t\t\"version\": \"4.2.11\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz\",\n\t\t\t\"integrity\": \"sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/graphemer\": {\n\t\t\t\"version\": \"1.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/har-schema\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/har-validator\": {\n\t\t\t\"version\": \"5.1.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz\",\n\t\t\t\"integrity\": \"sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==\",\n\t\t\t\"deprecated\": \"this library is no longer supported\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ajv\": \"^6.12.3\",\n\t\t\t\t\"har-schema\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/har-validator/node_modules/ajv\": {\n\t\t\t\"version\": \"6.14.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz\",\n\t\t\t\"integrity\": \"sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fast-deep-equal\": \"^3.1.1\",\n\t\t\t\t\"fast-json-stable-stringify\": \"^2.0.0\",\n\t\t\t\t\"json-schema-traverse\": \"^0.4.1\",\n\t\t\t\t\"uri-js\": \"^4.2.2\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"github\",\n\t\t\t\t\"url\": \"https://github.com/sponsors/epoberezkin\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/har-validator/node_modules/json-schema-traverse\": {\n\t\t\t\"version\": \"0.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==\"\n\t\t},\n\t\t\"node_modules/has-flag\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/has-symbols\": {\n\t\t\t\"version\": \"1.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/has-tostringtag\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"has-symbols\": \"^1.0.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/hasha\": {\n\t\t\t\"version\": \"5.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-stream\": \"^2.0.0\",\n\t\t\t\t\"type-fest\": \"^0.8.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/hasha/node_modules/type-fest\": {\n\t\t\t\"version\": \"0.8.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz\",\n\t\t\t\"integrity\": \"sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/hasown\": {\n\t\t\t\"version\": \"2.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"function-bind\": \"^1.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/hat\": {\n\t\t\t\"version\": \"0.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/hat/-/hat-0.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-zpImx2GoKXy42fVDSEad2BPKuSQdLcqsCYa48K3zHSzM/ugWuYjLDr8IXxpVuL7uCLHw56eaiLxCRthhOzf5ug==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/he\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/he/-/he-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"he\": \"bin/he\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/heapdump\": {\n\t\t\t\"version\": \"0.3.15\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/heapdump/-/heapdump-0.3.15.tgz\",\n\t\t\t\"integrity\": \"sha512-n8aSFscI9r3gfhOcAECAtXFaQ1uy4QSke6bnaL+iymYZ/dWs9cqDqHM+rALfsHUwukUbxsdlECZ0pKmJdQ/4OA==\",\n\t\t\t\"hasInstallScript\": true,\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"nan\": \"^2.13.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/hosted-git-info\": {\n\t\t\t\"version\": \"2.8.9\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz\",\n\t\t\t\"integrity\": \"sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/hot-shots\": {\n\t\t\t\"version\": \"6.8.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/hot-shots/-/hot-shots-6.8.7.tgz\",\n\t\t\t\"integrity\": \"sha512-XH8iezBSZgVw2jegu96pUfF1Zv0VZ/iXjb7L5yE3F7mn7/bdhf4qeniXjO0wQWeefe433rhOsazNKLxM+XMI9w==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t},\n\t\t\t\"optionalDependencies\": {\n\t\t\t\t\"unix-dgram\": \"2.0.x\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/html-entities\": {\n\t\t\t\"version\": \"2.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/mdevils\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"patreon\",\n\t\t\t\t\t\"url\": \"https://patreon.com/mdevils\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"node_modules/html-escaper\": {\n\t\t\t\"version\": \"2.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/http-errors\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"depd\": \"2.0.0\",\n\t\t\t\t\"inherits\": \"2.0.4\",\n\t\t\t\t\"setprototypeof\": \"1.2.0\",\n\t\t\t\t\"statuses\": \"2.0.1\",\n\t\t\t\t\"toidentifier\": \"1.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/http-shutdown\": {\n\t\t\t\"version\": \"1.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"iojs\": \">= 1.0.0\",\n\t\t\t\t\"node\": \">= 0.12.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/http-signature\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"assert-plus\": \"^1.0.0\",\n\t\t\t\t\"jsprim\": \"^1.2.2\",\n\t\t\t\t\"sshpk\": \"^1.7.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8\",\n\t\t\t\t\"npm\": \">=1.3.7\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/iconv-lite\": {\n\t\t\t\"version\": \"0.4.24\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz\",\n\t\t\t\"integrity\": \"sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safer-buffer\": \">= 2.1.2 < 3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ignore\": {\n\t\t\t\"version\": \"5.3.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz\",\n\t\t\t\"integrity\": \"sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/import-fresh\": {\n\t\t\t\"version\": \"3.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"parent-module\": \"^1.0.0\",\n\t\t\t\t\"resolve-from\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/imurmurhash\": {\n\t\t\t\"version\": \"0.1.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz\",\n\t\t\t\"integrity\": \"sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8.19\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/indent-string\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/inflight\": {\n\t\t\t\"version\": \"1.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==\",\n\t\t\t\"deprecated\": \"This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.\",\n\t\t\t\"devOptional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"once\": \"^1.3.0\",\n\t\t\t\t\"wrappy\": \"1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/inherits\": {\n\t\t\t\"version\": \"2.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==\"\n\t\t},\n\t\t\"node_modules/ipaddr.js\": {\n\t\t\t\"version\": \"1.9.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz\",\n\t\t\t\"integrity\": \"sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-arrayish\": {\n\t\t\t\"version\": \"0.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/is-binary-path\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"binary-extensions\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-builtin-module\": {\n\t\t\t\"version\": \"3.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"builtin-modules\": \"^3.3.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-core-module\": {\n\t\t\t\"version\": \"2.16.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz\",\n\t\t\t\"integrity\": \"sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"hasown\": \"^2.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-extglob\": {\n\t\t\t\"version\": \"2.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-fullwidth-code-point\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-glob\": {\n\t\t\t\"version\": \"4.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-extglob\": \"^2.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-number\": {\n\t\t\t\"version\": \"7.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.12.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-path-inside\": {\n\t\t\t\"version\": \"3.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-plain-obj\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-retry-allowed\": {\n\t\t\t\"version\": \"2.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-stream\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-typedarray\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==\"\n\t\t},\n\t\t\"node_modules/is-unicode-supported\": {\n\t\t\t\"version\": \"0.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-windows\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/isarray\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==\"\n\t\t},\n\t\t\"node_modules/isexe\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/isstream\": {\n\t\t\t\"version\": \"0.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==\"\n\t\t},\n\t\t\"node_modules/istanbul-lib-coverage\": {\n\t\t\t\"version\": \"3.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-hook\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"append-transform\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-instrument\": {\n\t\t\t\"version\": \"4.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/core\": \"^7.7.5\",\n\t\t\t\t\"@istanbuljs/schema\": \"^0.1.2\",\n\t\t\t\t\"istanbul-lib-coverage\": \"^3.0.0\",\n\t\t\t\t\"semver\": \"^6.3.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-instrument/node_modules/semver\": {\n\t\t\t\"version\": \"6.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semver/-/semver-6.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"semver\": \"bin/semver.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-processinfo\": {\n\t\t\t\"version\": \"2.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"archy\": \"^1.0.0\",\n\t\t\t\t\"cross-spawn\": \"^7.0.3\",\n\t\t\t\t\"istanbul-lib-coverage\": \"^3.2.0\",\n\t\t\t\t\"p-map\": \"^3.0.0\",\n\t\t\t\t\"rimraf\": \"^3.0.0\",\n\t\t\t\t\"uuid\": \"^8.3.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-processinfo/node_modules/uuid\": {\n\t\t\t\"version\": \"8.3.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz\",\n\t\t\t\"integrity\": \"sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"uuid\": \"dist/bin/uuid\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-report\": {\n\t\t\t\"version\": \"3.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"istanbul-lib-coverage\": \"^3.0.0\",\n\t\t\t\t\"make-dir\": \"^4.0.0\",\n\t\t\t\t\"supports-color\": \"^7.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-report/node_modules/make-dir\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"semver\": \"^7.5.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-source-maps\": {\n\t\t\t\"version\": \"4.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"debug\": \"^4.1.1\",\n\t\t\t\t\"istanbul-lib-coverage\": \"^3.0.0\",\n\t\t\t\t\"source-map\": \"^0.6.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-source-maps/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-source-maps/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/istanbul-reports\": {\n\t\t\t\"version\": \"3.1.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz\",\n\t\t\t\"integrity\": \"sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"html-escaper\": \"^2.0.0\",\n\t\t\t\t\"istanbul-lib-report\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/js-tokens\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/js-yaml\": {\n\t\t\t\"version\": \"4.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"argparse\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"js-yaml\": \"bin/js-yaml.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/jsbn\": {\n\t\t\t\"version\": \"0.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==\"\n\t\t},\n\t\t\"node_modules/jsdoc-type-pratt-parser\": {\n\t\t\t\"version\": \"7.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=20.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/jsesc\": {\n\t\t\t\"version\": \"3.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"jsesc\": \"bin/jsesc\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/json-buffer\": {\n\t\t\t\"version\": \"3.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/json-parse-even-better-errors\": {\n\t\t\t\"version\": \"2.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/json-schema\": {\n\t\t\t\"version\": \"0.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==\"\n\t\t},\n\t\t\"node_modules/json-schema-traverse\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/json-stable-stringify-without-jsonify\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/json-stringify-safe\": {\n\t\t\t\"version\": \"5.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==\"\n\t\t},\n\t\t\"node_modules/json5\": {\n\t\t\t\"version\": \"2.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json5/-/json5-2.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"json5\": \"lib/cli.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/jsprim\": {\n\t\t\t\"version\": \"1.4.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz\",\n\t\t\t\"integrity\": \"sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"assert-plus\": \"1.0.0\",\n\t\t\t\t\"extsprintf\": \"1.3.0\",\n\t\t\t\t\"json-schema\": \"0.4.0\",\n\t\t\t\t\"verror\": \"1.10.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.6.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/just-extend\": {\n\t\t\t\"version\": \"6.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/kad-fs\": {\n\t\t\t\"version\": \"0.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/kad-fs/-/kad-fs-0.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-VlLY7MuXy+3Tlqn1NJNgNkta6BRposNsJhqqcLv/M5e/rGBAETU33DhlPwV6/RBZKGzylQFkeYaKaoYin+mGZw==\",\n\t\t\t\"deprecated\": \"This package is no longer maintained.\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"readable-stream\": \"^2.0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/kad-localstorage\": {\n\t\t\t\"version\": \"0.0.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/kad-localstorage/-/kad-localstorage-0.0.7.tgz\",\n\t\t\t\"integrity\": \"sha512-3BEFBPa9cbPvW7WvZSTQHy6dSgw7ob7yTqT+eORWrxm4f4fE26BUVorg36KRbg/W+YWEnippuM68ybFyF3heiA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"dom-storage\": \"^2.0.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/kad-memstore\": {\n\t\t\t\"version\": \"0.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/kad-memstore/-/kad-memstore-0.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-fwGvRXWjaSzMed8iQHkZH41wvaoq+3tIhuIbkqBBYFuuJtWoDWqgCYTADGPqLyaLX4Ct8aP5NtAxCaxk4cfcCg==\",\n\t\t\t\"deprecated\": \"This package is no longer maintained.\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"readable-stream\": \"^2.0.5\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/keyv\": {\n\t\t\t\"version\": \"4.5.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz\",\n\t\t\t\"integrity\": \"sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"json-buffer\": \"3.0.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/levn\": {\n\t\t\t\"version\": \"0.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/levn/-/levn-0.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"prelude-ls\": \"^1.2.1\",\n\t\t\t\t\"type-check\": \"~0.4.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/limitation\": {\n\t\t\t\"version\": \"0.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/limitation/-/limitation-0.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-IpIBG7WniPI1Og0HYxlo8JRD2E2pExwuol7hjobcNZSYBBxAamPJdV91Q47uw5/KiUKA+We8a33sh6vD1PQ+Yw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bluebird\": \"^3.3.1\",\n\t\t\t\t\"readable-stream\": \"^2.0.5\",\n\t\t\t\t\"wikimedia-kad-fork\": \"^1.3.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/lines-and-columns\": {\n\t\t\t\"version\": \"1.2.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz\",\n\t\t\t\"integrity\": \"sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/locate-path\": {\n\t\t\t\"version\": \"6.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-locate\": \"^5.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/lodash\": {\n\t\t\t\"version\": \"4.18.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz\",\n\t\t\t\"integrity\": \"sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==\"\n\t\t},\n\t\t\"node_modules/lodash.clone\": {\n\t\t\t\"version\": \"4.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==\",\n\t\t\t\"deprecated\": \"This package is deprecated. Use structuredClone instead.\"\n\t\t},\n\t\t\"node_modules/lodash.clonedeep\": {\n\t\t\t\"version\": \"4.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==\"\n\t\t},\n\t\t\"node_modules/lodash.flattendeep\": {\n\t\t\t\"version\": \"4.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/lodash.get\": {\n\t\t\t\"version\": \"4.4.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz\",\n\t\t\t\"integrity\": \"sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==\",\n\t\t\t\"deprecated\": \"This package is deprecated. Use the optional chaining (?.) operator instead.\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/lodash.memoize\": {\n\t\t\t\"version\": \"4.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/lodash.merge\": {\n\t\t\t\"version\": \"4.6.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz\",\n\t\t\t\"integrity\": \"sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/log-symbols\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"chalk\": \"^4.1.0\",\n\t\t\t\t\"is-unicode-supported\": \"^0.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/long\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/long/-/long-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==\"\n\t\t},\n\t\t\"node_modules/lru-cache\": {\n\t\t\t\"version\": \"5.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"yallist\": \"^3.0.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/make-dir\": {\n\t\t\t\"version\": \"3.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"semver\": \"^6.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/make-dir/node_modules/semver\": {\n\t\t\t\"version\": \"6.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semver/-/semver-6.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"semver\": \"bin/semver.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/math-intrinsics\": {\n\t\t\t\"version\": \"1.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/media-typer\": {\n\t\t\t\"version\": \"0.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mediawiki-title\": {\n\t\t\t\"version\": \"0.7.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mediawiki-title/-/mediawiki-title-0.7.5.tgz\",\n\t\t\t\"integrity\": \"sha512-csC7Gt/z03tvtlicXqT2OMNc8wHk2rd7KSL4a/ZQxhY9YRyPPq3cSysg0ToskyGld89btn+zS8TdK0iaQp3M2g==\"\n\t\t},\n\t\t\"node_modules/merge-descriptors\": {\n\t\t\t\"version\": \"1.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==\",\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/methods\": {\n\t\t\t\"version\": \"1.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/methods/-/methods-1.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mime\": {\n\t\t\t\"version\": \"1.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mime/-/mime-1.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==\",\n\t\t\t\"bin\": {\n\t\t\t\t\"mime\": \"cli.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mime-db\": {\n\t\t\t\"version\": \"1.54.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz\",\n\t\t\t\"integrity\": \"sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mime-types\": {\n\t\t\t\"version\": \"2.1.35\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz\",\n\t\t\t\"integrity\": \"sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"mime-db\": \"1.52.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mime-types/node_modules/mime-db\": {\n\t\t\t\"version\": \"1.52.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz\",\n\t\t\t\"integrity\": \"sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/min-indent\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/minimatch\": {\n\t\t\t\"version\": \"3.1.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz\",\n\t\t\t\"integrity\": \"sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==\",\n\t\t\t\"devOptional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"brace-expansion\": \"^1.1.7\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/minimist\": {\n\t\t\t\"version\": \"1.2.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz\",\n\t\t\t\"integrity\": \"sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==\",\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/minipass\": {\n\t\t\t\"version\": \"2.9.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz\",\n\t\t\t\"integrity\": \"sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safe-buffer\": \"^5.1.2\",\n\t\t\t\t\"yallist\": \"^3.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/minizlib\": {\n\t\t\t\"version\": \"1.3.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"minipass\": \"^2.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mkdirp\": {\n\t\t\t\"version\": \"0.5.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz\",\n\t\t\t\"integrity\": \"sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"minimist\": \"^1.2.6\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"mkdirp\": \"bin/cmd.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha\": {\n\t\t\t\"version\": \"10.8.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz\",\n\t\t\t\"integrity\": \"sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ansi-colors\": \"^4.1.3\",\n\t\t\t\t\"browser-stdout\": \"^1.3.1\",\n\t\t\t\t\"chokidar\": \"^3.5.3\",\n\t\t\t\t\"debug\": \"^4.3.5\",\n\t\t\t\t\"diff\": \"^5.2.0\",\n\t\t\t\t\"escape-string-regexp\": \"^4.0.0\",\n\t\t\t\t\"find-up\": \"^5.0.0\",\n\t\t\t\t\"glob\": \"^8.1.0\",\n\t\t\t\t\"he\": \"^1.2.0\",\n\t\t\t\t\"js-yaml\": \"^4.1.0\",\n\t\t\t\t\"log-symbols\": \"^4.1.0\",\n\t\t\t\t\"minimatch\": \"^5.1.6\",\n\t\t\t\t\"ms\": \"^2.1.3\",\n\t\t\t\t\"serialize-javascript\": \"^6.0.2\",\n\t\t\t\t\"strip-json-comments\": \"^3.1.1\",\n\t\t\t\t\"supports-color\": \"^8.1.1\",\n\t\t\t\t\"workerpool\": \"^6.5.1\",\n\t\t\t\t\"yargs\": \"^16.2.0\",\n\t\t\t\t\"yargs-parser\": \"^20.2.9\",\n\t\t\t\t\"yargs-unparser\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"_mocha\": \"bin/_mocha\",\n\t\t\t\t\"mocha\": \"bin/mocha.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 14.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha-lcov-reporter\": {\n\t\t\t\"version\": \"1.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mocha-lcov-reporter/-/mocha-lcov-reporter-1.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-/5zI2tW4lq/ft8MGpYQ1nIH6yePPtIzdGeUEwFMKfMRdLfAQ1QW2c68eEJop32tNdN5srHa/E2TzB+erm3YMYA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha.parallel\": {\n\t\t\t\"version\": \"0.15.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mocha.parallel/-/mocha.parallel-0.15.6.tgz\",\n\t\t\t\"integrity\": \"sha512-pWph+QieKGjk7cHY2hB78wyKJDOQLyOMDuBLQLrFL7riJb8qbQBlCY3XztFHv0D1d4I1gCpiwFNjd4LhVOXPew==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bluebird\": \"^2.9.34\",\n\t\t\t\t\"semaphore\": \"^1.0.5\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"mocha\": \">=2.2.5\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha.parallel/node_modules/bluebird\": {\n\t\t\t\"version\": \"2.11.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz\",\n\t\t\t\"integrity\": \"sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/mocha/node_modules/brace-expansion\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"balanced-match\": \"^1.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha/node_modules/minimatch\": {\n\t\t\t\"version\": \"5.1.9\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz\",\n\t\t\t\"integrity\": \"sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"brace-expansion\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/mocha/node_modules/supports-color\": {\n\t\t\t\"version\": \"8.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"has-flag\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/chalk/supports-color?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/moment\": {\n\t\t\t\"version\": \"2.30.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/moment/-/moment-2.30.1.tgz\",\n\t\t\t\"integrity\": \"sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==\",\n\t\t\t\"optional\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ms\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==\"\n\t\t},\n\t\t\"node_modules/msgpack5\": {\n\t\t\t\"version\": \"3.6.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/msgpack5/-/msgpack5-3.6.1.tgz\",\n\t\t\t\"integrity\": \"sha512-VoY2AaoowHZLLKyEb5FRzuhdSzXn5quGjcMKJOJHJPxp9baYZx5t6jiHUhp5aNRlqqlt+5GXQGovMLNKsrm1hg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bl\": \"^1.2.1\",\n\t\t\t\t\"inherits\": \"^2.0.3\",\n\t\t\t\t\"readable-stream\": \"^2.3.3\",\n\t\t\t\t\"safe-buffer\": \"^5.1.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mv\": {\n\t\t\t\"version\": \"2.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mv/-/mv-2.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==\",\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"mkdirp\": \"~0.5.1\",\n\t\t\t\t\"ncp\": \"~2.0.0\",\n\t\t\t\t\"rimraf\": \"~2.4.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mv/node_modules/glob\": {\n\t\t\t\"version\": \"6.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob/-/glob-6.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==\",\n\t\t\t\"deprecated\": \"Glob versions prior to v9 are no longer supported\",\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"inflight\": \"^1.0.4\",\n\t\t\t\t\"inherits\": \"2\",\n\t\t\t\t\"minimatch\": \"2 || 3\",\n\t\t\t\t\"once\": \"^1.3.0\",\n\t\t\t\t\"path-is-absolute\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mv/node_modules/rimraf\": {\n\t\t\t\"version\": \"2.4.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz\",\n\t\t\t\"integrity\": \"sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==\",\n\t\t\t\"deprecated\": \"Rimraf versions prior to v4 are no longer supported\",\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"glob\": \"^6.0.1\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"rimraf\": \"bin.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nan\": {\n\t\t\t\"version\": \"2.22.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/nan/-/nan-2.22.2.tgz\",\n\t\t\t\"integrity\": \"sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==\",\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"node_modules/natural-compare\": {\n\t\t\t\"version\": \"1.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/ncp\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==\",\n\t\t\t\"optional\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"ncp\": \"bin/ncp\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/negotiator\": {\n\t\t\t\"version\": \"0.6.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz\",\n\t\t\t\"integrity\": \"sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nise\": {\n\t\t\t\"version\": \"5.1.9\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/nise/-/nise-5.1.9.tgz\",\n\t\t\t\"integrity\": \"sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@sinonjs/commons\": \"^3.0.0\",\n\t\t\t\t\"@sinonjs/fake-timers\": \"^11.2.2\",\n\t\t\t\t\"@sinonjs/text-encoding\": \"^0.7.2\",\n\t\t\t\t\"just-extend\": \"^6.2.0\",\n\t\t\t\t\"path-to-regexp\": \"^6.2.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nise/node_modules/path-to-regexp\": {\n\t\t\t\"version\": \"6.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/nock\": {\n\t\t\t\"version\": \"13.5.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/nock/-/nock-13.5.6.tgz\",\n\t\t\t\"integrity\": \"sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"debug\": \"^4.1.0\",\n\t\t\t\t\"json-stringify-safe\": \"^5.0.1\",\n\t\t\t\t\"propagate\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 10.13\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nock/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nock/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/node-preload\": {\n\t\t\t\"version\": \"0.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"process-on-spawn\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/node-releases\": {\n\t\t\t\"version\": \"2.0.27\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz\",\n\t\t\t\"integrity\": \"sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/normalize-package-data\": {\n\t\t\t\"version\": \"2.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"hosted-git-info\": \"^2.1.4\",\n\t\t\t\t\"resolve\": \"^1.10.0\",\n\t\t\t\t\"semver\": \"2 || 3 || 4 || 5\",\n\t\t\t\t\"validate-npm-package-license\": \"^3.0.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/normalize-package-data/node_modules/semver\": {\n\t\t\t\"version\": \"5.7.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semver/-/semver-5.7.2.tgz\",\n\t\t\t\"integrity\": \"sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"semver\": \"bin/semver\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/normalize-path\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nth-check\": {\n\t\t\t\"version\": \"2.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"boolbase\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/fb55/nth-check?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc\": {\n\t\t\t\"version\": \"15.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@istanbuljs/load-nyc-config\": \"^1.0.0\",\n\t\t\t\t\"@istanbuljs/schema\": \"^0.1.2\",\n\t\t\t\t\"caching-transform\": \"^4.0.0\",\n\t\t\t\t\"convert-source-map\": \"^1.7.0\",\n\t\t\t\t\"decamelize\": \"^1.2.0\",\n\t\t\t\t\"find-cache-dir\": \"^3.2.0\",\n\t\t\t\t\"find-up\": \"^4.1.0\",\n\t\t\t\t\"foreground-child\": \"^2.0.0\",\n\t\t\t\t\"get-package-type\": \"^0.1.0\",\n\t\t\t\t\"glob\": \"^7.1.6\",\n\t\t\t\t\"istanbul-lib-coverage\": \"^3.0.0\",\n\t\t\t\t\"istanbul-lib-hook\": \"^3.0.0\",\n\t\t\t\t\"istanbul-lib-instrument\": \"^4.0.0\",\n\t\t\t\t\"istanbul-lib-processinfo\": \"^2.0.2\",\n\t\t\t\t\"istanbul-lib-report\": \"^3.0.0\",\n\t\t\t\t\"istanbul-lib-source-maps\": \"^4.0.0\",\n\t\t\t\t\"istanbul-reports\": \"^3.0.2\",\n\t\t\t\t\"make-dir\": \"^3.0.0\",\n\t\t\t\t\"node-preload\": \"^0.2.1\",\n\t\t\t\t\"p-map\": \"^3.0.0\",\n\t\t\t\t\"process-on-spawn\": \"^1.0.0\",\n\t\t\t\t\"resolve-from\": \"^5.0.0\",\n\t\t\t\t\"rimraf\": \"^3.0.0\",\n\t\t\t\t\"signal-exit\": \"^3.0.2\",\n\t\t\t\t\"spawn-wrap\": \"^2.0.0\",\n\t\t\t\t\"test-exclude\": \"^6.0.0\",\n\t\t\t\t\"yargs\": \"^15.0.2\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"nyc\": \"bin/nyc.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.9\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/cliui\": {\n\t\t\t\"version\": \"6.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"string-width\": \"^4.2.0\",\n\t\t\t\t\"strip-ansi\": \"^6.0.0\",\n\t\t\t\t\"wrap-ansi\": \"^6.2.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/find-up\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"locate-path\": \"^5.0.0\",\n\t\t\t\t\"path-exists\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/glob\": {\n\t\t\t\"version\": \"7.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob/-/glob-7.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==\",\n\t\t\t\"deprecated\": \"Glob versions prior to v9 are no longer supported\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fs.realpath\": \"^1.0.0\",\n\t\t\t\t\"inflight\": \"^1.0.4\",\n\t\t\t\t\"inherits\": \"2\",\n\t\t\t\t\"minimatch\": \"^3.1.1\",\n\t\t\t\t\"once\": \"^1.3.0\",\n\t\t\t\t\"path-is-absolute\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/isaacs\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/locate-path\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-locate\": \"^4.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/p-limit\": {\n\t\t\t\"version\": \"2.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-try\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/p-locate\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-limit\": \"^2.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/resolve-from\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/wrap-ansi\": {\n\t\t\t\"version\": \"6.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ansi-styles\": \"^4.0.0\",\n\t\t\t\t\"string-width\": \"^4.1.0\",\n\t\t\t\t\"strip-ansi\": \"^6.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/y18n\": {\n\t\t\t\"version\": \"4.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/nyc/node_modules/yargs\": {\n\t\t\t\"version\": \"15.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"cliui\": \"^6.0.0\",\n\t\t\t\t\"decamelize\": \"^1.2.0\",\n\t\t\t\t\"find-up\": \"^4.1.0\",\n\t\t\t\t\"get-caller-file\": \"^2.0.1\",\n\t\t\t\t\"require-directory\": \"^2.1.1\",\n\t\t\t\t\"require-main-filename\": \"^2.0.0\",\n\t\t\t\t\"set-blocking\": \"^2.0.0\",\n\t\t\t\t\"string-width\": \"^4.2.0\",\n\t\t\t\t\"which-module\": \"^2.0.0\",\n\t\t\t\t\"y18n\": \"^4.0.0\",\n\t\t\t\t\"yargs-parser\": \"^18.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/yargs-parser\": {\n\t\t\t\"version\": \"18.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"camelcase\": \"^5.0.0\",\n\t\t\t\t\"decamelize\": \"^1.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/oauth-sign\": {\n\t\t\t\"version\": \"0.9.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz\",\n\t\t\t\"integrity\": \"sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/object-deep-merge\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/object-inspect\": {\n\t\t\t\"version\": \"1.13.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz\",\n\t\t\t\"integrity\": \"sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/on-finished\": {\n\t\t\t\"version\": \"2.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ee-first\": \"1.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/on-headers\": {\n\t\t\t\"version\": \"1.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/once\": {\n\t\t\t\"version\": \"1.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/once/-/once-1.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==\",\n\t\t\t\"devOptional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"wrappy\": \"1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/optionator\": {\n\t\t\t\"version\": \"0.9.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz\",\n\t\t\t\"integrity\": \"sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"deep-is\": \"^0.1.3\",\n\t\t\t\t\"fast-levenshtein\": \"^2.0.6\",\n\t\t\t\t\"levn\": \"^0.4.1\",\n\t\t\t\t\"prelude-ls\": \"^1.2.1\",\n\t\t\t\t\"type-check\": \"^0.4.0\",\n\t\t\t\t\"word-wrap\": \"^1.2.5\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/os-shim\": {\n\t\t\t\"version\": \"0.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/p-limit\": {\n\t\t\t\"version\": \"3.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"yocto-queue\": \"^0.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/p-locate\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-limit\": \"^3.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/p-map\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"aggregate-error\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/p-try\": {\n\t\t\t\"version\": \"2.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/package-hash\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"graceful-fs\": \"^4.1.15\",\n\t\t\t\t\"hasha\": \"^5.0.0\",\n\t\t\t\t\"lodash.flattendeep\": \"^4.4.0\",\n\t\t\t\t\"release-zalgo\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/parent-module\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"callsites\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/parse-imports-exports\": {\n\t\t\t\"version\": \"0.2.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz\",\n\t\t\t\"integrity\": \"sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"parse-statements\": \"1.0.11\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/parse-json\": {\n\t\t\t\"version\": \"5.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/code-frame\": \"^7.0.0\",\n\t\t\t\t\"error-ex\": \"^1.3.1\",\n\t\t\t\t\"json-parse-even-better-errors\": \"^2.3.0\",\n\t\t\t\t\"lines-and-columns\": \"^1.1.6\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/parse-statements\": {\n\t\t\t\"version\": \"1.0.11\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz\",\n\t\t\t\"integrity\": \"sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/parseurl\": {\n\t\t\t\"version\": \"1.3.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz\",\n\t\t\t\"integrity\": \"sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/path\": {\n\t\t\t\"version\": \"0.12.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path/-/path-0.12.7.tgz\",\n\t\t\t\"integrity\": \"sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"process\": \"^0.11.1\",\n\t\t\t\t\"util\": \"^0.10.3\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/path-exists\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/path-is-absolute\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==\",\n\t\t\t\"devOptional\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/path-key\": {\n\t\t\t\"version\": \"3.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/path-parse\": {\n\t\t\t\"version\": \"1.0.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz\",\n\t\t\t\"integrity\": \"sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/path-to-regexp\": {\n\t\t\t\"version\": \"0.1.13\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz\",\n\t\t\t\"integrity\": \"sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==\"\n\t\t},\n\t\t\"node_modules/performance-now\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==\"\n\t\t},\n\t\t\"node_modules/picocolors\": {\n\t\t\t\"version\": \"1.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/picomatch\": {\n\t\t\t\"version\": \"2.3.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz\",\n\t\t\t\"integrity\": \"sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/jonschlinkert\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pkg-dir\": {\n\t\t\t\"version\": \"4.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"find-up\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pkg-dir/node_modules/find-up\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"locate-path\": \"^5.0.0\",\n\t\t\t\t\"path-exists\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pkg-dir/node_modules/locate-path\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-locate\": \"^4.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pkg-dir/node_modules/p-limit\": {\n\t\t\t\"version\": \"2.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-try\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pkg-dir/node_modules/p-locate\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-limit\": \"^2.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pluralize\": {\n\t\t\t\"version\": \"8.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/postcss-selector-parser\": {\n\t\t\t\"version\": \"6.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"cssesc\": \"^3.0.0\",\n\t\t\t\t\"util-deprecate\": \"^1.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit\": {\n\t\t\t\"version\": \"1.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/pre-commit/-/pre-commit-1.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-qokTiqxD6GjODy5ETAIgzsRgnBWWQHQH2ghy86PU7mIn/wuWeTwF3otyNQZxWBwVn8XNr8Tdzj/QfUXpH+gRZA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"hasInstallScript\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"cross-spawn\": \"^5.0.1\",\n\t\t\t\t\"spawn-sync\": \"^1.0.15\",\n\t\t\t\t\"which\": \"1.2.x\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit/node_modules/cross-spawn\": {\n\t\t\t\"version\": \"5.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"lru-cache\": \"^4.0.1\",\n\t\t\t\t\"shebang-command\": \"^1.2.0\",\n\t\t\t\t\"which\": \"^1.2.9\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit/node_modules/lru-cache\": {\n\t\t\t\"version\": \"4.1.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz\",\n\t\t\t\"integrity\": \"sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"pseudomap\": \"^1.0.2\",\n\t\t\t\t\"yallist\": \"^2.1.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit/node_modules/shebang-command\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"shebang-regex\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit/node_modules/shebang-regex\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit/node_modules/which\": {\n\t\t\t\"version\": \"1.2.14\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/which/-/which-1.2.14.tgz\",\n\t\t\t\"integrity\": \"sha512-16uPglFkRPzgiUXYMi1Jf8Z5EzN1iB4V0ZtMXcHZnwsBtQhhHeCqoWw7tsUY42hJGNDWtUsVLTjakIa5BgAxCw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"isexe\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"which\": \"bin/which\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit/node_modules/yallist\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/prelude-ls\": {\n\t\t\t\"version\": \"1.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/preq\": {\n\t\t\t\"version\": \"0.5.14\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/preq/-/preq-0.5.14.tgz\",\n\t\t\t\"integrity\": \"sha512-kuJ5ndEgjs27kTTQ/P2ipPQoHeCJcAI4i97mU3xSjkjx6CsuQOsCe2l5twTGC0SCB5UkzRpmrpXmvN0Ip4ZCxA==\",\n\t\t\t\"deprecated\": \"Deprecated as this is a wrapper around the deprecated request library. Preq can be replaced with fetch, which is available from Node 18 as an experimental feature.\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bluebird\": \"^3.5.5\",\n\t\t\t\t\"request\": \"^2.88.0\",\n\t\t\t\t\"requestretry\": \"4.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/process\": {\n\t\t\t\"version\": \"0.11.10\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/process/-/process-0.11.10.tgz\",\n\t\t\t\"integrity\": \"sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/process-nextick-args\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==\"\n\t\t},\n\t\t\"node_modules/process-on-spawn\": {\n\t\t\t\"version\": \"1.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fromentries\": \"^1.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/prom-client\": {\n\t\t\t\"version\": \"11.5.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/prom-client/-/prom-client-11.5.3.tgz\",\n\t\t\t\"integrity\": \"sha512-iz22FmTbtkyL2vt0MdDFY+kWof+S9UB/NACxSn2aJcewtw+EERsen0urSkZ2WrHseNdydsvcxCTAnPcSMZZv4Q==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"tdigest\": \"^0.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/propagate\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/proxy-addr\": {\n\t\t\t\"version\": \"2.0.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz\",\n\t\t\t\"integrity\": \"sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"forwarded\": \"0.2.0\",\n\t\t\t\t\"ipaddr.js\": \"1.9.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/proxy-from-env\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pseudomap\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/psl\": {\n\t\t\t\"version\": \"1.15.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/psl/-/psl-1.15.0.tgz\",\n\t\t\t\"integrity\": \"sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"punycode\": \"^2.3.1\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/lupomontero\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/punycode\": {\n\t\t\t\"version\": \"2.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/qs\": {\n\t\t\t\"version\": \"6.14.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/qs/-/qs-6.14.2.tgz\",\n\t\t\t\"integrity\": \"sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"side-channel\": \"^1.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/queue-microtask\": {\n\t\t\t\"version\": \"1.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"patreon\",\n\t\t\t\t\t\"url\": \"https://www.patreon.com/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"consulting\",\n\t\t\t\t\t\"url\": \"https://feross.org/support\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"node_modules/rambda\": {\n\t\t\t\"version\": \"7.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/randombytes\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safe-buffer\": \"^5.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/range-parser\": {\n\t\t\t\"version\": \"1.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/raw-body\": {\n\t\t\t\"version\": \"2.5.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz\",\n\t\t\t\"integrity\": \"sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bytes\": \"~3.1.2\",\n\t\t\t\t\"http-errors\": \"~2.0.1\",\n\t\t\t\t\"iconv-lite\": \"~0.4.24\",\n\t\t\t\t\"unpipe\": \"~1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/raw-body/node_modules/http-errors\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"depd\": \"~2.0.0\",\n\t\t\t\t\"inherits\": \"~2.0.4\",\n\t\t\t\t\"setprototypeof\": \"~1.2.0\",\n\t\t\t\t\"statuses\": \"~2.0.2\",\n\t\t\t\t\"toidentifier\": \"~1.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/express\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/raw-body/node_modules/statuses\": {\n\t\t\t\"version\": \"2.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg\": {\n\t\t\t\"version\": \"5.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@types/normalize-package-data\": \"^2.4.0\",\n\t\t\t\t\"normalize-package-data\": \"^2.5.0\",\n\t\t\t\t\"parse-json\": \"^5.0.0\",\n\t\t\t\t\"type-fest\": \"^0.6.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg-up\": {\n\t\t\t\"version\": \"7.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"find-up\": \"^4.1.0\",\n\t\t\t\t\"read-pkg\": \"^5.2.0\",\n\t\t\t\t\"type-fest\": \"^0.8.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg-up/node_modules/find-up\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"locate-path\": \"^5.0.0\",\n\t\t\t\t\"path-exists\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg-up/node_modules/locate-path\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-locate\": \"^4.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg-up/node_modules/p-limit\": {\n\t\t\t\"version\": \"2.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-try\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg-up/node_modules/p-locate\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-limit\": \"^2.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg-up/node_modules/type-fest\": {\n\t\t\t\"version\": \"0.8.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz\",\n\t\t\t\"integrity\": \"sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg/node_modules/type-fest\": {\n\t\t\t\"version\": \"0.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/readable-stream\": {\n\t\t\t\"version\": \"2.3.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz\",\n\t\t\t\"integrity\": \"sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"core-util-is\": \"~1.0.0\",\n\t\t\t\t\"inherits\": \"~2.0.3\",\n\t\t\t\t\"isarray\": \"~1.0.0\",\n\t\t\t\t\"process-nextick-args\": \"~2.0.0\",\n\t\t\t\t\"safe-buffer\": \"~5.1.1\",\n\t\t\t\t\"string_decoder\": \"~1.1.1\",\n\t\t\t\t\"util-deprecate\": \"~1.0.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/readable-stream/node_modules/safe-buffer\": {\n\t\t\t\"version\": \"5.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==\"\n\t\t},\n\t\t\"node_modules/readdirp\": {\n\t\t\t\"version\": \"3.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"picomatch\": \"^2.2.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/regexp-tree\": {\n\t\t\t\"version\": \"0.1.27\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz\",\n\t\t\t\"integrity\": \"sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"regexp-tree\": \"bin/regexp-tree\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/regjsparser\": {\n\t\t\t\"version\": \"0.10.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz\",\n\t\t\t\"integrity\": \"sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"jsesc\": \"~0.5.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"regjsparser\": \"bin/parser\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/regjsparser/node_modules/jsesc\": {\n\t\t\t\"version\": \"0.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"jsesc\": \"bin/jsesc\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/release-zalgo\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"es6-error\": \"^4.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/request\": {\n\t\t\t\"version\": \"2.88.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/request/-/request-2.88.2.tgz\",\n\t\t\t\"integrity\": \"sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==\",\n\t\t\t\"deprecated\": \"request has been deprecated, see https://github.com/request/request/issues/3142\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"aws-sign2\": \"~0.7.0\",\n\t\t\t\t\"aws4\": \"^1.8.0\",\n\t\t\t\t\"caseless\": \"~0.12.0\",\n\t\t\t\t\"combined-stream\": \"~1.0.6\",\n\t\t\t\t\"extend\": \"~3.0.2\",\n\t\t\t\t\"forever-agent\": \"~0.6.1\",\n\t\t\t\t\"form-data\": \"~2.3.2\",\n\t\t\t\t\"har-validator\": \"~5.1.3\",\n\t\t\t\t\"http-signature\": \"~1.2.0\",\n\t\t\t\t\"is-typedarray\": \"~1.0.0\",\n\t\t\t\t\"isstream\": \"~0.1.2\",\n\t\t\t\t\"json-stringify-safe\": \"~5.0.1\",\n\t\t\t\t\"mime-types\": \"~2.1.19\",\n\t\t\t\t\"oauth-sign\": \"~0.9.0\",\n\t\t\t\t\"performance-now\": \"^2.1.0\",\n\t\t\t\t\"qs\": \"~6.5.2\",\n\t\t\t\t\"safe-buffer\": \"^5.1.2\",\n\t\t\t\t\"tough-cookie\": \"~2.5.0\",\n\t\t\t\t\"tunnel-agent\": \"^0.6.0\",\n\t\t\t\t\"uuid\": \"^3.3.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/request/node_modules/form-data\": {\n\t\t\t\"version\": \"2.3.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz\",\n\t\t\t\"integrity\": \"sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"asynckit\": \"^0.4.0\",\n\t\t\t\t\"combined-stream\": \"^1.0.6\",\n\t\t\t\t\"mime-types\": \"^2.1.12\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.12\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/request/node_modules/qs\": {\n\t\t\t\"version\": \"6.5.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/qs/-/qs-6.5.5.tgz\",\n\t\t\t\"integrity\": \"sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/request/node_modules/uuid\": {\n\t\t\t\"version\": \"3.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==\",\n\t\t\t\"deprecated\": \"Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.\",\n\t\t\t\"bin\": {\n\t\t\t\t\"uuid\": \"bin/uuid\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/requestretry\": {\n\t\t\t\"version\": \"4.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/requestretry/-/requestretry-4.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-ZGdO1ZXUQAeCB9xOS2keSN501y7T1t0zPOD58jTAOwamt6qkcBMaGdRBHEOMQRnDtT5fn7S99F0dwADUqCmYqg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"extend\": \"^3.0.2\",\n\t\t\t\t\"lodash\": \"^4.17.10\",\n\t\t\t\t\"when\": \"^3.7.7\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"request\": \"2.*.*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/require-directory\": {\n\t\t\t\"version\": \"2.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/require-from-string\": {\n\t\t\t\"version\": \"2.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/require-main-filename\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/requireindex\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.5\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/reserved-identifiers\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=18\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/resolve\": {\n\t\t\t\"version\": \"1.22.10\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz\",\n\t\t\t\"integrity\": \"sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-core-module\": \"^2.16.0\",\n\t\t\t\t\"path-parse\": \"^1.0.7\",\n\t\t\t\t\"supports-preserve-symlinks-flag\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"resolve\": \"bin/resolve\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/resolve-from\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/resolve-pkg-maps\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/privatenumber/resolve-pkg-maps?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/reusify\": {\n\t\t\t\"version\": \"1.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"iojs\": \">=1.0.0\",\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/rimraf\": {\n\t\t\t\"version\": \"3.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==\",\n\t\t\t\"deprecated\": \"Rimraf versions prior to v4 are no longer supported\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"glob\": \"^7.1.3\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"rimraf\": \"bin.js\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/isaacs\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/rimraf/node_modules/glob\": {\n\t\t\t\"version\": \"7.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob/-/glob-7.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==\",\n\t\t\t\"deprecated\": \"Glob versions prior to v9 are no longer supported\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fs.realpath\": \"^1.0.0\",\n\t\t\t\t\"inflight\": \"^1.0.4\",\n\t\t\t\t\"inherits\": \"2\",\n\t\t\t\t\"minimatch\": \"^3.1.1\",\n\t\t\t\t\"once\": \"^1.3.0\",\n\t\t\t\t\"path-is-absolute\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/isaacs\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/rss-parser\": {\n\t\t\t\"version\": \"3.13.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/rss-parser/-/rss-parser-3.13.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"entities\": \"^2.0.3\",\n\t\t\t\t\"xml2js\": \"^0.5.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/run-parallel\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"patreon\",\n\t\t\t\t\t\"url\": \"https://www.patreon.com/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"consulting\",\n\t\t\t\t\t\"url\": \"https://feross.org/support\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"queue-microtask\": \"^1.2.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/safe-buffer\": {\n\t\t\t\"version\": \"5.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==\",\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"patreon\",\n\t\t\t\t\t\"url\": \"https://www.patreon.com/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"consulting\",\n\t\t\t\t\t\"url\": \"https://feross.org/support\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"node_modules/safe-json-stringify\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==\",\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"node_modules/safe-regex\": {\n\t\t\t\"version\": \"2.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"regexp-tree\": \"~0.1.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/safer-buffer\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==\"\n\t\t},\n\t\t\"node_modules/sax\": {\n\t\t\t\"version\": \"1.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/sax/-/sax-1.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/semaphore\": {\n\t\t\t\"version\": \"1.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/semver\": {\n\t\t\t\"version\": \"7.7.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semver/-/semver-7.7.4.tgz\",\n\t\t\t\"integrity\": \"sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==\",\n\t\t\t\"bin\": {\n\t\t\t\t\"semver\": \"bin/semver.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/send\": {\n\t\t\t\"version\": \"0.19.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/send/-/send-0.19.0.tgz\",\n\t\t\t\"integrity\": \"sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"debug\": \"2.6.9\",\n\t\t\t\t\"depd\": \"2.0.0\",\n\t\t\t\t\"destroy\": \"1.2.0\",\n\t\t\t\t\"encodeurl\": \"~1.0.2\",\n\t\t\t\t\"escape-html\": \"~1.0.3\",\n\t\t\t\t\"etag\": \"~1.8.1\",\n\t\t\t\t\"fresh\": \"0.5.2\",\n\t\t\t\t\"http-errors\": \"2.0.0\",\n\t\t\t\t\"mime\": \"1.6.0\",\n\t\t\t\t\"ms\": \"2.1.3\",\n\t\t\t\t\"on-finished\": \"2.4.1\",\n\t\t\t\t\"range-parser\": \"~1.2.1\",\n\t\t\t\t\"statuses\": \"2.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/send/node_modules/encodeurl\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/send/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\"\n\t\t},\n\t\t\"node_modules/serialize-javascript\": {\n\t\t\t\"version\": \"6.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"randombytes\": \"^2.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/serve-static\": {\n\t\t\t\"version\": \"1.16.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz\",\n\t\t\t\"integrity\": \"sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"encodeurl\": \"~2.0.0\",\n\t\t\t\t\"escape-html\": \"~1.0.3\",\n\t\t\t\t\"parseurl\": \"~1.3.3\",\n\t\t\t\t\"send\": \"0.19.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/service-runner\": {\n\t\t\t\"version\": \"3.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/service-runner/-/service-runner-3.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-eDUg9iP17zodtkPNhy+LOgjL/hh245s+D0Z5fgeB1ds39qHQzBds8tM4GByGbrU4u7zv0sO0RXlyq/j6Q1kZsA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bluebird\": \"^3.7.2\",\n\t\t\t\t\"bunyan\": \"^1.8.12\",\n\t\t\t\t\"bunyan-syslog-udp\": \"^0.2.0\",\n\t\t\t\t\"dnscache\": \"^1.0.2\",\n\t\t\t\t\"gelf-stream\": \"^1.1.1\",\n\t\t\t\t\"hot-shots\": \"^6.8.7\",\n\t\t\t\t\"js-yaml\": \"^3.13.1\",\n\t\t\t\t\"limitation\": \"^0.2.3\",\n\t\t\t\t\"lodash.clonedeep\": \"^4.5.0\",\n\t\t\t\t\"prom-client\": \"^11.5.3\",\n\t\t\t\t\"semver\": \"^7.1.2\",\n\t\t\t\t\"tar\": \"^4.4.16\",\n\t\t\t\t\"yargs\": \"^16.2.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"service-runner\": \"service-runner.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"optionalDependencies\": {\n\t\t\t\t\"heapdump\": \"^0.3.15\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/service-runner/node_modules/argparse\": {\n\t\t\t\"version\": \"1.0.10\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz\",\n\t\t\t\"integrity\": \"sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"sprintf-js\": \"~1.0.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/service-runner/node_modules/js-yaml\": {\n\t\t\t\"version\": \"3.14.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz\",\n\t\t\t\"integrity\": \"sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"argparse\": \"^1.0.7\",\n\t\t\t\t\"esprima\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"js-yaml\": \"bin/js-yaml.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/set-blocking\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/setprototypeof\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==\"\n\t\t},\n\t\t\"node_modules/shebang-command\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"shebang-regex\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/shebang-regex\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/side-channel\": {\n\t\t\t\"version\": \"1.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"es-errors\": \"^1.3.0\",\n\t\t\t\t\"object-inspect\": \"^1.13.3\",\n\t\t\t\t\"side-channel-list\": \"^1.0.0\",\n\t\t\t\t\"side-channel-map\": \"^1.0.1\",\n\t\t\t\t\"side-channel-weakmap\": \"^1.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/side-channel-list\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"es-errors\": \"^1.3.0\",\n\t\t\t\t\"object-inspect\": \"^1.13.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/side-channel-map\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"call-bound\": \"^1.0.2\",\n\t\t\t\t\"es-errors\": \"^1.3.0\",\n\t\t\t\t\"get-intrinsic\": \"^1.2.5\",\n\t\t\t\t\"object-inspect\": \"^1.13.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/side-channel-weakmap\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"call-bound\": \"^1.0.2\",\n\t\t\t\t\"es-errors\": \"^1.3.0\",\n\t\t\t\t\"get-intrinsic\": \"^1.2.5\",\n\t\t\t\t\"object-inspect\": \"^1.13.3\",\n\t\t\t\t\"side-channel-map\": \"^1.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/signal-exit\": {\n\t\t\t\"version\": \"3.0.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz\",\n\t\t\t\"integrity\": \"sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/sinon\": {\n\t\t\t\"version\": \"17.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@sinonjs/commons\": \"^3.0.0\",\n\t\t\t\t\"@sinonjs/fake-timers\": \"^11.2.2\",\n\t\t\t\t\"@sinonjs/samsam\": \"^8.0.0\",\n\t\t\t\t\"diff\": \"^5.1.0\",\n\t\t\t\t\"nise\": \"^5.1.5\",\n\t\t\t\t\"supports-color\": \"^7.2.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/sinon\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/source-map\": {\n\t\t\t\"version\": \"0.6.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz\",\n\t\t\t\"integrity\": \"sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/spawn-sync\": {\n\t\t\t\"version\": \"1.0.15\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz\",\n\t\t\t\"integrity\": \"sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"hasInstallScript\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"concat-stream\": \"^1.4.7\",\n\t\t\t\t\"os-shim\": \"^0.1.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/spawn-wrap\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"foreground-child\": \"^2.0.0\",\n\t\t\t\t\"is-windows\": \"^1.0.2\",\n\t\t\t\t\"make-dir\": \"^3.0.0\",\n\t\t\t\t\"rimraf\": \"^3.0.0\",\n\t\t\t\t\"signal-exit\": \"^3.0.2\",\n\t\t\t\t\"which\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/spdx-correct\": {\n\t\t\t\"version\": \"3.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"spdx-expression-parse\": \"^3.0.0\",\n\t\t\t\t\"spdx-license-ids\": \"^3.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/spdx-correct/node_modules/spdx-expression-parse\": {\n\t\t\t\"version\": \"3.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"spdx-exceptions\": \"^2.1.0\",\n\t\t\t\t\"spdx-license-ids\": \"^3.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/spdx-exceptions\": {\n\t\t\t\"version\": \"2.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/spdx-expression-parse\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"spdx-exceptions\": \"^2.1.0\",\n\t\t\t\t\"spdx-license-ids\": \"^3.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/spdx-license-ids\": {\n\t\t\t\"version\": \"3.0.22\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz\",\n\t\t\t\"integrity\": \"sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/sprintf-js\": {\n\t\t\t\"version\": \"1.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==\"\n\t\t},\n\t\t\"node_modules/sshpk\": {\n\t\t\t\"version\": \"1.18.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz\",\n\t\t\t\"integrity\": \"sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"asn1\": \"~0.2.3\",\n\t\t\t\t\"assert-plus\": \"^1.0.0\",\n\t\t\t\t\"bcrypt-pbkdf\": \"^1.0.0\",\n\t\t\t\t\"dashdash\": \"^1.12.0\",\n\t\t\t\t\"ecc-jsbn\": \"~0.1.1\",\n\t\t\t\t\"getpass\": \"^0.1.1\",\n\t\t\t\t\"jsbn\": \"~0.1.0\",\n\t\t\t\t\"safer-buffer\": \"^2.0.2\",\n\t\t\t\t\"tweetnacl\": \"~0.14.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"sshpk-conv\": \"bin/sshpk-conv\",\n\t\t\t\t\"sshpk-sign\": \"bin/sshpk-sign\",\n\t\t\t\t\"sshpk-verify\": \"bin/sshpk-verify\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/statuses\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/string_decoder\": {\n\t\t\t\"version\": \"1.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safe-buffer\": \"~5.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/string_decoder/node_modules/safe-buffer\": {\n\t\t\t\"version\": \"5.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==\"\n\t\t},\n\t\t\"node_modules/string-width\": {\n\t\t\t\"version\": \"4.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"emoji-regex\": \"^8.0.0\",\n\t\t\t\t\"is-fullwidth-code-point\": \"^3.0.0\",\n\t\t\t\t\"strip-ansi\": \"^6.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/strip-ansi\": {\n\t\t\t\"version\": \"6.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ansi-regex\": \"^5.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/strip-bom\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/strip-indent\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"min-indent\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/strip-json-comments\": {\n\t\t\t\"version\": \"3.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/striptags\": {\n\t\t\t\"version\": \"3.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==\"\n\t\t},\n\t\t\"node_modules/supports-color\": {\n\t\t\t\"version\": \"7.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"has-flag\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/supports-preserve-symlinks-flag\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/swagger-router\": {\n\t\t\t\"version\": \"0.7.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/swagger-router/-/swagger-router-0.7.4.tgz\",\n\t\t\t\"integrity\": \"sha512-HdKJ4DenOXcaChWKST7oFHvd+kclike9rsFfPt3W9JWVvznofcOWGSivyWJECky3tOlw52jqvCKSQrz1l+1D9w==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bluebird\": \"^3.5.2\",\n\t\t\t\t\"js-yaml\": \"^3.12.0\",\n\t\t\t\t\"tassembly\": \"^0.2.3\",\n\t\t\t\t\"template-expression-compiler\": \"^0.1.10\",\n\t\t\t\t\"uuid\": \"^3.3.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/swagger-router/node_modules/argparse\": {\n\t\t\t\"version\": \"1.0.10\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz\",\n\t\t\t\"integrity\": \"sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"sprintf-js\": \"~1.0.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/swagger-router/node_modules/js-yaml\": {\n\t\t\t\"version\": \"3.14.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz\",\n\t\t\t\"integrity\": \"sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"argparse\": \"^1.0.7\",\n\t\t\t\t\"esprima\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"js-yaml\": \"bin/js-yaml.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/swagger-router/node_modules/uuid\": {\n\t\t\t\"version\": \"3.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==\",\n\t\t\t\"deprecated\": \"Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.\",\n\t\t\t\"bin\": {\n\t\t\t\t\"uuid\": \"bin/uuid\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/swagger-ui-dist\": {\n\t\t\t\"version\": \"5.25.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.25.2.tgz\",\n\t\t\t\"integrity\": \"sha512-V4JyoygUe5nCbn7bAD0fVKSC0yNcL3ROIQtGC7M0NATKuyosCSmMU6T0yDZIIuGpSxjsjZh/D2Ejb8lnF2jjxw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@scarf/scarf\": \"=1.4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/tapable\": {\n\t\t\t\"version\": \"2.3.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz\",\n\t\t\t\"integrity\": \"sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/webpack\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/tar\": {\n\t\t\t\"version\": \"4.4.19\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tar/-/tar-4.4.19.tgz\",\n\t\t\t\"integrity\": \"sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"chownr\": \"^1.1.4\",\n\t\t\t\t\"fs-minipass\": \"^1.2.7\",\n\t\t\t\t\"minipass\": \"^2.9.0\",\n\t\t\t\t\"minizlib\": \"^1.3.3\",\n\t\t\t\t\"mkdirp\": \"^0.5.5\",\n\t\t\t\t\"safe-buffer\": \"^5.2.1\",\n\t\t\t\t\"yallist\": \"^3.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4.5\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/tassembly\": {\n\t\t\t\"version\": \"0.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tassembly/-/tassembly-0.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-rpYD3bbgITu9vxxhRgMDANK3wMUw4WcQ9PJDLJnDJGs13rbHHnfuPB0sVmkTOn0c01BIUe7xZdDcF2IzlgMEHw==\"\n\t\t},\n\t\t\"node_modules/tdigest\": {\n\t\t\t\"version\": \"0.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bintrees\": \"1.0.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/template-expression-compiler\": {\n\t\t\t\"version\": \"0.1.10\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/template-expression-compiler/-/template-expression-compiler-0.1.10.tgz\",\n\t\t\t\"integrity\": \"sha512-AuGyxkl8I+GhmYqt4JzsxZWIMgB1TnuCQCkRdOhHlZ612peP+yoXcoYVdBJWP/NYAFwmUUliBjuVwgqog0y5KQ==\"\n\t\t},\n\t\t\"node_modules/test-exclude\": {\n\t\t\t\"version\": \"6.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@istanbuljs/schema\": \"^0.1.2\",\n\t\t\t\t\"glob\": \"^7.1.4\",\n\t\t\t\t\"minimatch\": \"^3.0.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/test-exclude/node_modules/glob\": {\n\t\t\t\"version\": \"7.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob/-/glob-7.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==\",\n\t\t\t\"deprecated\": \"Glob versions prior to v9 are no longer supported\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fs.realpath\": \"^1.0.0\",\n\t\t\t\t\"inflight\": \"^1.0.4\",\n\t\t\t\t\"inherits\": \"2\",\n\t\t\t\t\"minimatch\": \"^3.1.1\",\n\t\t\t\t\"once\": \"^1.3.0\",\n\t\t\t\t\"path-is-absolute\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/isaacs\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/text-table\": {\n\t\t\t\"version\": \"0.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/tinyglobby\": {\n\t\t\t\"version\": \"0.2.16\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz\",\n\t\t\t\"integrity\": \"sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fdir\": \"^6.5.0\",\n\t\t\t\t\"picomatch\": \"^4.0.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/SuperchupuDev\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/tinyglobby/node_modules/fdir\": {\n\t\t\t\"version\": \"6.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"picomatch\": \"^3 || ^4\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"picomatch\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/tinyglobby/node_modules/picomatch\": {\n\t\t\t\"version\": \"4.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/jonschlinkert\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/to-regex-range\": {\n\t\t\t\"version\": \"5.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-number\": \"^7.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/to-valid-identifier\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/to-valid-identifier/-/to-valid-identifier-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@sindresorhus/base62\": \"^1.0.0\",\n\t\t\t\t\"reserved-identifiers\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=20\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/toidentifier\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/tough-cookie\": {\n\t\t\t\"version\": \"2.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"psl\": \"^1.1.28\",\n\t\t\t\t\"punycode\": \"^2.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ts-api-utils\": {\n\t\t\t\"version\": \"2.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=18.12\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"typescript\": \">=4.8.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ts-declaration-location\": {\n\t\t\t\"version\": \"1.0.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ts-declaration-location/-/ts-declaration-location-1.0.7.tgz\",\n\t\t\t\"integrity\": \"sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"ko-fi\",\n\t\t\t\t\t\"url\": \"https://ko-fi.com/rebeccastevens\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"tidelift\",\n\t\t\t\t\t\"url\": \"https://tidelift.com/funding/github/npm/ts-declaration-location\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"picomatch\": \"^4.0.2\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"typescript\": \">=4.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ts-declaration-location/node_modules/picomatch\": {\n\t\t\t\"version\": \"4.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/jonschlinkert\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/tunnel-agent\": {\n\t\t\t\"version\": \"0.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safe-buffer\": \"^5.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/tweetnacl\": {\n\t\t\t\"version\": \"0.14.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz\",\n\t\t\t\"integrity\": \"sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==\"\n\t\t},\n\t\t\"node_modules/type-check\": {\n\t\t\t\"version\": \"0.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"prelude-ls\": \"^1.2.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/type-detect\": {\n\t\t\t\"version\": \"4.0.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz\",\n\t\t\t\"integrity\": \"sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/type-fest\": {\n\t\t\t\"version\": \"0.20.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/type-is\": {\n\t\t\t\"version\": \"1.6.18\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz\",\n\t\t\t\"integrity\": \"sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"media-typer\": \"0.3.0\",\n\t\t\t\t\"mime-types\": \"~2.1.24\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/typedarray\": {\n\t\t\t\"version\": \"0.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/typedarray-to-buffer\": {\n\t\t\t\"version\": \"3.1.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz\",\n\t\t\t\"integrity\": \"sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-typedarray\": \"^1.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/typescript\": {\n\t\t\t\"version\": \"5.8.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz\",\n\t\t\t\"integrity\": \"sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"peer\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"tsc\": \"bin/tsc\",\n\t\t\t\t\"tsserver\": \"bin/tsserver\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=14.17\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/underscore\": {\n\t\t\t\"version\": \"1.13.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz\",\n\t\t\t\"integrity\": \"sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/unix-dgram\": {\n\t\t\t\"version\": \"2.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/unix-dgram/-/unix-dgram-2.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg==\",\n\t\t\t\"hasInstallScript\": true,\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bindings\": \"^1.5.0\",\n\t\t\t\t\"nan\": \"^2.16.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.48\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/unpipe\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/upath\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/upath/-/upath-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\",\n\t\t\t\t\"yarn\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/update-browserslist-db\": {\n\t\t\t\"version\": \"1.1.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz\",\n\t\t\t\"integrity\": \"sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\t\"url\": \"https://opencollective.com/browserslist\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"tidelift\",\n\t\t\t\t\t\"url\": \"https://tidelift.com/funding/github/npm/browserslist\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/ai\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"escalade\": \"^3.2.0\",\n\t\t\t\t\"picocolors\": \"^1.1.1\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"update-browserslist-db\": \"cli.js\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"browserslist\": \">= 4.21.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/uri-js\": {\n\t\t\t\"version\": \"4.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"punycode\": \"^2.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/util\": {\n\t\t\t\"version\": \"0.10.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/util/-/util-0.10.4.tgz\",\n\t\t\t\"integrity\": \"sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"inherits\": \"2.0.3\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/util-deprecate\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==\"\n\t\t},\n\t\t\"node_modules/util/node_modules/inherits\": {\n\t\t\t\"version\": \"2.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/utils-merge\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/uuid\": {\n\t\t\t\"version\": \"9.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==\",\n\t\t\t\"funding\": [\n\t\t\t\t\"https://github.com/sponsors/broofa\",\n\t\t\t\t\"https://github.com/sponsors/ctavan\"\n\t\t\t],\n\t\t\t\"bin\": {\n\t\t\t\t\"uuid\": \"dist/bin/uuid\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/validate-npm-package-license\": {\n\t\t\t\"version\": \"3.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"spdx-correct\": \"^3.0.0\",\n\t\t\t\t\"spdx-expression-parse\": \"^3.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/validate-npm-package-license/node_modules/spdx-expression-parse\": {\n\t\t\t\"version\": \"3.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"spdx-exceptions\": \"^2.1.0\",\n\t\t\t\t\"spdx-license-ids\": \"^3.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/vary\": {\n\t\t\t\"version\": \"1.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/verror\": {\n\t\t\t\"version\": \"1.10.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/verror/-/verror-1.10.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==\",\n\t\t\t\"engines\": [\n\t\t\t\t\"node >=0.6.0\"\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"assert-plus\": \"^1.0.0\",\n\t\t\t\t\"core-util-is\": \"1.0.2\",\n\t\t\t\t\"extsprintf\": \"^1.2.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/verror/node_modules/core-util-is\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==\"\n\t\t},\n\t\t\"node_modules/vue-eslint-parser\": {\n\t\t\t\"version\": \"9.4.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz\",\n\t\t\t\"integrity\": \"sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"debug\": \"^4.3.4\",\n\t\t\t\t\"eslint-scope\": \"^7.1.1\",\n\t\t\t\t\"eslint-visitor-keys\": \"^3.3.0\",\n\t\t\t\t\"espree\": \"^9.3.1\",\n\t\t\t\t\"esquery\": \"^1.4.0\",\n\t\t\t\t\"lodash\": \"^4.17.21\",\n\t\t\t\t\"semver\": \"^7.3.6\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/mysticatea\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/vue-eslint-parser/node_modules/debug\": {\n\t\t\t\"version\": \"4.4.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz\",\n\t\t\t\"integrity\": \"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"^2.1.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/vue-eslint-parser/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/when\": {\n\t\t\t\"version\": \"3.7.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/when/-/when-3.7.8.tgz\",\n\t\t\t\"integrity\": \"sha512-5cZ7mecD3eYcMiCH4wtRPA5iFJZ50BJYDfckI5RRpQiktMiYTcn0ccLTZOvcbBume+1304fQztxeNzNS9Gvrnw==\"\n\t\t},\n\t\t\"node_modules/which\": {\n\t\t\t\"version\": \"2.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/which/-/which-2.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"isexe\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"node-which\": \"bin/node-which\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/which-module\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/wikimedia-kad-fork\": {\n\t\t\t\"version\": \"1.3.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/wikimedia-kad-fork/-/wikimedia-kad-fork-1.3.6.tgz\",\n\t\t\t\"integrity\": \"sha512-m+IxFN4JatoQPRo0N46xMh7tR6FSznb/ithIchAy7Wg9mrkc4/bE/3BhlJS410quFJFrJp8lJJp93g4uTbj4lA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"async\": \"^0.9.0\",\n\t\t\t\t\"clarinet\": \"^0.11.0\",\n\t\t\t\t\"colors\": \"^1.0.3\",\n\t\t\t\t\"hat\": \"0.0.3\",\n\t\t\t\t\"kad-fs\": \"0.0.4\",\n\t\t\t\t\"kad-localstorage\": \"0.0.7\",\n\t\t\t\t\"kad-memstore\": \"0.0.1\",\n\t\t\t\t\"lodash\": \"^4.17.11\",\n\t\t\t\t\"ms\": \"^0.7.0\",\n\t\t\t\t\"msgpack5\": \"^3.3.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/wikimedia-kad-fork/node_modules/ms\": {\n\t\t\t\"version\": \"0.7.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-0.7.3.tgz\",\n\t\t\t\"integrity\": \"sha512-lrKNzMWqQZgwJahtrtrM+9NgOoDUveDrVmm5aGXrf3BdtL0mq7X6IVzoZaw+TfNti29eHd1/8GI+h45K5cQ6/w==\"\n\t\t},\n\t\t\"node_modules/word-wrap\": {\n\t\t\t\"version\": \"1.2.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz\",\n\t\t\t\"integrity\": \"sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/workerpool\": {\n\t\t\t\"version\": \"6.5.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/wrap-ansi\": {\n\t\t\t\"version\": \"7.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ansi-styles\": \"^4.0.0\",\n\t\t\t\t\"string-width\": \"^4.1.0\",\n\t\t\t\t\"strip-ansi\": \"^6.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/chalk/wrap-ansi?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/wrappy\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==\",\n\t\t\t\"devOptional\": true\n\t\t},\n\t\t\"node_modules/write-file-atomic\": {\n\t\t\t\"version\": \"3.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"imurmurhash\": \"^0.1.4\",\n\t\t\t\t\"is-typedarray\": \"^1.0.0\",\n\t\t\t\t\"signal-exit\": \"^3.0.2\",\n\t\t\t\t\"typedarray-to-buffer\": \"^3.1.5\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/xml-name-validator\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/xml2js\": {\n\t\t\t\"version\": \"0.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"sax\": \">=0.6.0\",\n\t\t\t\t\"xmlbuilder\": \"~11.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/xmlbuilder\": {\n\t\t\t\"version\": \"11.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/y18n\": {\n\t\t\t\"version\": \"5.0.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz\",\n\t\t\t\"integrity\": \"sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yallist\": {\n\t\t\t\"version\": \"3.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==\"\n\t\t},\n\t\t\"node_modules/yaml\": {\n\t\t\t\"version\": \"2.8.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz\",\n\t\t\t\"integrity\": \"sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"yaml\": \"bin.mjs\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 14.6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/eemeli\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yaml-eslint-parser\": {\n\t\t\t\"version\": \"1.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-MdSgP9YA9QjtAO2+lt4O7V2bnH22LPnfeVLiQqjY3cOyn8dy/Ief8otjIe6SPPTK03nM7O3Yl0LTfWuF7l+9yw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"eslint-visitor-keys\": \"^3.0.0\",\n\t\t\t\t\"yaml\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ota-meshi\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yargs\": {\n\t\t\t\"version\": \"16.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"cliui\": \"^7.0.2\",\n\t\t\t\t\"escalade\": \"^3.1.1\",\n\t\t\t\t\"get-caller-file\": \"^2.0.5\",\n\t\t\t\t\"require-directory\": \"^2.1.1\",\n\t\t\t\t\"string-width\": \"^4.2.0\",\n\t\t\t\t\"y18n\": \"^5.0.5\",\n\t\t\t\t\"yargs-parser\": \"^20.2.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yargs-parser\": {\n\t\t\t\"version\": \"20.2.9\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz\",\n\t\t\t\"integrity\": \"sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yargs-unparser\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"camelcase\": \"^6.0.0\",\n\t\t\t\t\"decamelize\": \"^4.0.0\",\n\t\t\t\t\"flat\": \"^5.0.2\",\n\t\t\t\t\"is-plain-obj\": \"^2.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yargs-unparser/node_modules/camelcase\": {\n\t\t\t\"version\": \"6.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yargs-unparser/node_modules/decamelize\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yocto-queue\": {\n\t\t\t\"version\": \"0.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t}\n\t}\n}\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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":[{"ruleId":"strict","severity":1,"message":"Use the global form of 'use strict'.","line":1,"column":1,"nodeType":"Program","messageId":"global","endLine":82,"endColumn":3}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"{\n\t\"name\": \"@wikimedia/wikifeeds\",\n\t\"version\": \"1.0.0\",\n\t\"description\": \"A node webservice supporting featured wiki content feeds\",\n\t\"main\": \"./app.js\",\n\t\"engines\": {\n\t\t\"node\": \">=16.0.0\"\n\t},\n\t\"scripts\": {\n\t\t\"start\": \"service-runner\",\n\t\t\"test\": \"npm run lint && PREQ_CONNECT_TIMEOUT=15 mocha --recursive\",\n\t\t\"test:unit\": \"mocha test/lib\",\n\t\t\"test:diff\": \"mocha --exit test/diff\",\n\t\t\"test:spec\": \"mocha test/features/app/spec.js\",\n\t\t\"lint\": \"eslint .\",\n\t\t\"lint:fix\": \"eslint --fix .\",\n\t\t\"docker-start\": \"service-runner docker-start\",\n\t\t\"docker-test\": \"service-runner docker-test\",\n\t\t\"test-build\": \"service-runner docker-test && service-runner build --deploy-repo --force\",\n\t\t\"coverage\": \"nyc mocha --recursive\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/services/wikifeeds\"\n\t},\n\t\"keywords\": [\n\t\t\"REST\",\n\t\t\"API\",\n\t\t\"node service\",\n\t\t\"mobile apps\",\n\t\t\"MediaWiki\",\n\t\t\"Wikipedia\"\n\t],\n\t\"author\": \"Wikimedia Product Infrastructure team, maintained by Content Transform team\",\n\t\"contributors\": [],\n\t\"license\": \"Apache-2.0\",\n\t\"bugs\": {\n\t\t\"url\": \"https://phabricator.wikimedia.org/tag/wikifeeds\"\n\t},\n\t\"homepage\": \"https://phabricator.wikimedia.org/tag/wikifeeds\",\n\t\"dependencies\": {\n\t\t\"axios\": \"^1.6.7\",\n\t\t\"axios-retry\": \"^4.0.0\",\n\t\t\"bluebird\": \"^3.7.2\",\n\t\t\"body-parser\": \"^1.20.2\",\n\t\t\"bunyan\": \"^1.8.15\",\n\t\t\"cassandra-uuid\": \"^0.1.0\",\n\t\t\"compression\": \"^1.7.4\",\n\t\t\"domino\": \"^2.1.6\",\n\t\t\"express\": \"^4.18.2\",\n\t\t\"http-shutdown\": \"^1.2.2\",\n\t\t\"js-yaml\": \"^4.1.0\",\n\t\t\"lodash\": \"^4.17.21\",\n\t\t\"mediawiki-title\": \"^0.7.5\",\n\t\t\"preq\": \"^0.5.14\",\n\t\t\"service-runner\": \"^3.1.0\",\n\t\t\"striptags\": \"^3.2.0\",\n\t\t\"swagger-router\": \"^0.7.4\",\n\t\t\"swagger-ui-dist\": \"^5.11.7\",\n\t\t\"uuid\": \"^9.0.1\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ajv\": \"^8.12.0\",\n\t\t\"ajv-formats\": \"^2.1.1\",\n\t\t\"csv-parse\": \"^5.5.3\",\n\t\t\"eslint\": \"8.57.0\",\n\t\t\"eslint-config-wikimedia\": \"0.32.4\",\n\t\t\"eslint-plugin-n\": \"^16.6.2\",\n\t\t\"extend\": \"^3.0.2\",\n\t\t\"mocha\": \"^10.3.0\",\n\t\t\"mocha-lcov-reporter\": \"^1.3.0\",\n\t\t\"mocha.parallel\": \"^0.15.6\",\n\t\t\"nock\": \"^13.5.3\",\n\t\t\"nyc\": \"^15.1.0\",\n\t\t\"path\": \"^0.12.7\",\n\t\t\"pre-commit\": \"^1.2.2\",\n\t\t\"rss-parser\": \"^3.13.0\",\n\t\t\"sinon\": \"^17.0.1\",\n\t\t\"underscore\": \"^1.13.6\"\n\t}\n}\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/routes/aggregated.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/routes/announcements.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/routes/availability.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/routes/configuration.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/routes/did-you-know.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/routes/featured-image.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/routes/featured.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/routes/info.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/routes/most-read.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/routes/news.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/routes/on-this-day.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/routes/random.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/routes/root.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/scripts/check-featured-feed.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'feature' is already declared in the upper scope on line 212 column 7.","line":49,"column":35,"nodeType":"Identifier","messageId":"noShadow","endLine":49,"endColumn":42},{"ruleId":"no-shadow","severity":1,"message":"'feature' is already declared in the upper scope on line 212 column 7.","line":82,"column":44,"nodeType":"Identifier","messageId":"noShadow","endLine":82,"endColumn":51},{"ruleId":"no-shadow","severity":1,"message":"'feature' is already declared in the upper scope on line 212 column 7.","line":107,"column":34,"nodeType":"Identifier","messageId":"noShadow","endLine":107,"endColumn":41},{"ruleId":"no-shadow","severity":1,"message":"'feature' is already declared in the upper scope on line 212 column 7.","line":150,"column":30,"nodeType":"Identifier","messageId":"noShadow","endLine":150,"endColumn":37},{"ruleId":"n/no-process-exit","severity":1,"message":"Don't use process.exit(); throw an error instead.","line":217,"column":5,"nodeType":"CallExpression","messageId":"noProcessExit","endLine":217,"endColumn":21}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst BBPromise = require('bluebird');\nconst domino = require('domino');\nconst preq = require('preq');\nconst parseRssUrl = BBPromise.promisify(require('rss-parser').parseURL);\nconst underscore = require('underscore');\nconst path = require('path');\n\n//\n// LANGUAGES SECTION start\n//\nconst wikiquoteLanguages = require(path.join(__dirname, '../private/wikiquotes.json'));\nconst wiktionaryLanguages = require(path.join(__dirname, '../private/wiktionaries.json'));\nconst wikipediaLanguagesRawList = require(path.join(__dirname, '../private/languages_list.json'));\n\nconst prepareWikipediaLanguageCodes = () => {\n delete wikipediaLanguagesRawList['Simplified Chinese']; // skip lang variants\n delete wikipediaLanguagesRawList['Traditional Chinese'];\n return underscore.values(wikipediaLanguagesRawList).sort();\n};\nconst wikipediaLanguages = prepareWikipediaLanguageCodes();\n//\n// LANGUAGES SECTION end\n//\n\nconst ModeEnum = Object.freeze({ wikitext: 0, expandTemplates: 1, rssFeed: 2 });\nconst mode = ModeEnum.rssFeed;\n\nconst candidates = [];\nconst errNotConfigured = [];\nconst errElse = [];\nconst errHttp = [];\n\nconst cleanUpHtml = (html) => html.replace(/<!--[\\s\\S]*?-->/mg, '').replace(/\\n/mg, '');\n\nconst lookForBoldAnchor = (document, projectLang, html) => {\n const boldAnchor = document.querySelector('b > a, a > b');\n if (boldAnchor) {\n const tfaTitle = boldAnchor.getAttribute('title');\n console.log(`${ projectLang }: ${ tfaTitle }`);\n candidates.push(projectLang);\n } else {\n console.log(`${ projectLang }: ERROR: bold anchor not found: else: ${ html }`);\n errElse.push(projectLang);\n }\n};\n\nconst getWikitext = (projectLang, feature) => {\n const baseUri = `https://${ projectLang }.${ feature.projectFamily }.org`;\n const queryParams1 = 'action=query&format=json&prop=revisions&rvprop=content';\n const queryParams2 = `&rvslots=main&titles=MediaWiki%3A${ feature.title }`;\n const uri = `${ baseUri }/w/api.php?${ queryParams1 }${ queryParams2 }`;\n\n return preq.get({ uri })\n .then((rsp) => {\n const pages = rsp.body.query && rsp.body.query.pages;\n if (!pages) {\n errNotConfigured.push(projectLang);\n return;\n }\n const firstPageKey = Object.keys(pages)[0];\n if (Object.prototype.hasOwnProperty.call(pages[firstPageKey], 'missing')) {\n errNotConfigured.push(projectLang);\n return;\n }\n\n const wikiText = pages[firstPageKey].revisions[0].slots.main['*'];\n if (wikiText) {\n console.log(`${ projectLang }: ${ wikiText }`);\n candidates.push(projectLang);\n } else {\n errNotConfigured.push(projectLang);\n }\n })\n .catch((err) => {\n console.log(`${ projectLang } ERROR: ${ err }`);\n errHttp.push(projectLang);\n });\n};\n\nconst doubleExpandTemplate = (projectLang, feature) => {\n const baseUri = `https://${ projectLang }.${ feature.projectFamily }.org`;\n const wikiText = encodeURIComponent(\n `{{#ifexist:{{int:${ feature.title }}}|{{ {{int:${ feature.title }}} }} }}`);\n const queryParams = `action=parse&format=json&prop=text&contentmodel=wikitext&text=${ wikiText }`;\n const uri = `${ baseUri }/w/api.php?${ queryParams }`;\n\n return preq.get({ uri })\n .then((rsp) => {\n const html = cleanUpHtml(rsp.body.parse.text['*']);\n if (html === '') {\n errNotConfigured.push(projectLang);\n } else if (feature.shouldLookForBoldAnchor) {\n lookForBoldAnchor(domino.createDocument(html), projectLang, html);\n } else {\n console.log(`${ projectLang }: ${ html }`);\n candidates.push(projectLang);\n }\n })\n .catch((err) => {\n console.log(`${ projectLang } ERROR: ${ err }`);\n errHttp.push(projectLang);\n });\n};\n\nconst getRssFeed = (projectLang, feature) => {\n const baseUri = `https://${ projectLang }.${ feature.projectFamily }.org`;\n const queryParams = `action=featuredfeed&feed=${ feature.feedName }&feedformat=rss`;\n const uri = `${ baseUri }/w/api.php?${ queryParams }`;\n const contentPool = [];\n const indices = [];\n\n return parseRssUrl(uri)\n .then((response) => {\n let languageCode;\n // console.log(`${projectLang}: ${response.feed.title}`);\n response.feed.entries.forEach((entry) => {\n const index = underscore.indexOf(contentPool, entry.content);\n // console.log(`${entry.title}: ${index}: ${entry.link}`);\n if (index >= 0) {\n indices.push(index);\n } else {\n contentPool.push(entry.content);\n indices.push(contentPool.length - 1);\n }\n languageCode = entry.link.slice(entry.link.lastIndexOf('/') + 1);\n });\n // in a few instances the languageCode differs from the projectLang (Example: no/nb)\n console.log(`${ projectLang }/${ languageCode }: ${ indices }: ${ uri }`);\n candidates.push(projectLang);\n })\n .catch((err) => {\n if (err.message === 'RSS 1.0 parsing not yet implemented.') {\n errNotConfigured.push(projectLang);\n } else {\n console.log(`${ projectLang }: ERROR: ${ uri }: ${ err }`);\n errHttp.push(projectLang);\n }\n });\n};\n\nconst printResultSummary = () => {\n console.log(`candidates: ${ candidates.length }: ${ JSON.stringify(candidates.sort()) }`);\n console.log(`errNotConfigured: ${ errNotConfigured.length }: ${ errNotConfigured.sort() }`);\n console.log(`errElse: ${ errElse.length }: ${ errElse.sort() }`);\n console.log(`retryQueue: ${ errHttp.length }: ${ errHttp.sort() }`);\n};\n\nconst processAllLanguages = (feature) => {\n BBPromise.map(feature.projectLangs, (projectLang) => {\n if (mode === ModeEnum.expandTemplates) {\n return doubleExpandTemplate(projectLang, feature);\n } else if (mode === ModeEnum.wikitext) {\n return getWikitext(projectLang, feature);\n } else {\n return getRssFeed(projectLang, feature);\n }\n }, { concurrency: 1 })\n .then(() => {\n printResultSummary();\n });\n};\n\n// MAIN\nconst featureMap = {\n tfa: {\n projectFamily: 'wikipedia',\n projectLangs: wikipediaLanguages,\n feedName: 'featured',\n title: 'Ffeed-featured-page',\n shouldLookForBoldAnchor: true\n },\n dyk: {\n projectFamily: 'wikipedia',\n projectLangs: wikipediaLanguages,\n feedName: 'dyk',\n title: 'Ffeed-dyk-page'\n },\n potd: {\n projectFamily: 'wikipedia',\n projectLangs: wikipediaLanguages,\n feedName: 'potd',\n title: 'Ffeed-potd-page'\n },\n motd: {\n projectFamily: 'wikipedia',\n projectLangs: wikipediaLanguages,\n feedName: 'motd',\n title: 'Ffeed-motd-page'\n },\n qotd: {\n projectFamily: 'wikiquote',\n projectLangs: wikiquoteLanguages,\n feedName: 'qotd',\n title: 'Ffeed-qotd-page'\n },\n wotd: {\n projectFamily: 'wiktionary',\n projectLangs: wiktionaryLanguages,\n feedName: 'wotd',\n title: 'Ffeed-wotd-page'\n },\n fwotd: {\n projectFamily: 'wiktionary',\n projectLangs: wiktionaryLanguages,\n feedName: 'fwotd',\n title: 'Ffeed-fwotd-page'\n }\n};\n\nconst feature = featureMap[process.argv[2]];\nif (feature) {\n processAllLanguages(feature);\n} else {\n console.error(`Error: need to specify one of ${ Object.keys(featureMap) }!`);\n process.exit(-1);\n}\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/server.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/spec.yaml","messages":[{"ruleId":"max-len","severity":1,"message":"This line has a length of 124. Maximum allowed is 100.","line":1030,"column":1,"nodeType":"Program","messageId":"max","endLine":1030,"endColumn":125},{"ruleId":"max-len","severity":1,"message":"This line has a length of 124. Maximum allowed is 100.","line":1035,"column":1,"nodeType":"Program","messageId":"max","endLine":1035,"endColumn":125},{"ruleId":"max-len","severity":1,"message":"This line has a length of 124. Maximum allowed is 100.","line":1040,"column":1,"nodeType":"Program","messageId":"max","endLine":1040,"endColumn":125},{"ruleId":"max-len","severity":1,"message":"This line has a length of 124. Maximum allowed is 100.","line":1045,"column":1,"nodeType":"Program","messageId":"max","endLine":1045,"endColumn":125},{"ruleId":"max-len","severity":1,"message":"This line has a length of 124. Maximum allowed is 100.","line":1050,"column":1,"nodeType":"Program","messageId":"max","endLine":1050,"endColumn":125},{"ruleId":"max-len","severity":1,"message":"This line has a length of 124. Maximum allowed is 100.","line":1055,"column":1,"nodeType":"Program","messageId":"max","endLine":1055,"endColumn":125},{"ruleId":"max-len","severity":1,"message":"This line has a length of 112. Maximum allowed is 100.","line":1058,"column":1,"nodeType":"Program","messageId":"max","endLine":1058,"endColumn":113},{"ruleId":"max-len","severity":1,"message":"This line has a length of 109. Maximum allowed is 100.","line":1107,"column":1,"nodeType":"Program","messageId":"max","endLine":1107,"endColumn":110},{"ruleId":"max-len","severity":1,"message":"This line has a length of 126. Maximum allowed is 100.","line":1124,"column":1,"nodeType":"Program","messageId":"max","endLine":1124,"endColumn":127},{"ruleId":"max-len","severity":1,"message":"This line has a length of 107. Maximum allowed is 100.","line":1125,"column":1,"nodeType":"Program","messageId":"max","endLine":1125,"endColumn":108},{"ruleId":"max-len","severity":1,"message":"This line has a length of 132. Maximum allowed is 100.","line":1131,"column":1,"nodeType":"Program","messageId":"max","endLine":1131,"endColumn":133},{"ruleId":"max-len","severity":1,"message":"This line has a length of 127. Maximum allowed is 100.","line":1138,"column":1,"nodeType":"Program","messageId":"max","endLine":1138,"endColumn":128},{"ruleId":"max-len","severity":1,"message":"This line has a length of 108. Maximum allowed is 100.","line":1140,"column":1,"nodeType":"Program","messageId":"max","endLine":1140,"endColumn":109},{"ruleId":"max-len","severity":1,"message":"This line has a length of 113. Maximum allowed is 100.","line":1141,"column":1,"nodeType":"Program","messageId":"max","endLine":1141,"endColumn":114},{"ruleId":"max-len","severity":1,"message":"This line has a length of 121. Maximum allowed is 100.","line":1142,"column":1,"nodeType":"Program","messageId":"max","endLine":1142,"endColumn":122},{"ruleId":"max-len","severity":1,"message":"This line has a length of 121. Maximum allowed is 100.","line":1146,"column":1,"nodeType":"Program","messageId":"max","endLine":1146,"endColumn":122},{"ruleId":"max-len","severity":1,"message":"This line has a length of 113. Maximum allowed is 100.","line":1150,"column":1,"nodeType":"Program","messageId":"max","endLine":1150,"endColumn":114},{"ruleId":"max-len","severity":1,"message":"This line has a length of 111. Maximum allowed is 100.","line":1154,"column":1,"nodeType":"Program","messageId":"max","endLine":1154,"endColumn":112},{"ruleId":"max-len","severity":1,"message":"This line has a length of 124. Maximum allowed is 100.","line":1160,"column":1,"nodeType":"Program","messageId":"max","endLine":1160,"endColumn":125},{"ruleId":"max-len","severity":1,"message":"This line has a length of 281. Maximum allowed is 100.","line":1164,"column":1,"nodeType":"Program","messageId":"max","endLine":1164,"endColumn":282},{"ruleId":"max-len","severity":1,"message":"This line has a length of 106. Maximum allowed is 100.","line":1437,"column":1,"nodeType":"Program","messageId":"max","endLine":1437,"endColumn":107}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":21,"fixableErrorCount":0,"fixableWarningCount":0,"source":"swagger: \"2.0\"\n\ninfo:\n version: 1.0.0\n title: Wikifeeds API\n description: |\n The Wikifeeds API provides daily curated content from Wikipedia, such as featured\n articles, most-read articles, and current events. Wikipedia content from this API\n is available under the [CC BY-SA](https://creativecommons.org/licenses/by-sa/4.0/)\n license. Images and media files from this API are licensed individually according\n to the image metadata.\n termsOfService: https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use#12._API_Terms\n contact:\n name: Wikimedia Content Transform Team\n url: https://www.mediawiki.org/wiki/Special:MyLanguage/Content_Transform_Team\n license:\n name: Apache2\n url: http://www.apache.org/licenses/LICENSE-2.0\nexternalDocs:\n url: https://www.mediawiki.org/wiki/Special:MyLanguage/Wikifeeds_API\n description: API documentation\n\ntags:\n - name: Feed\n description: Daily featured content from Wikipedia\n - name: Page\n description: Wikipedia articles\n - name: Internal\n description: Private and internal endpoints\n\nx-default-params:\n domain: en.wikipedia.org\n\nparameters:\n domain:\n in: path\n name: domain\n required: true\n type: string\n description: Wikimedia project domain\n year:\n in: path\n name: year\n required: true\n type: integer\n description: Four-digit year (2016 and later)\n minimum: 2016\n maximum: 2999\n month:\n in: path\n name: month\n required: true\n type: string\n description: Two-digit month, 0-padded if necessary (01-12)\n pattern: \"^(0[1-9]|1[012])$\"\n day:\n in: path\n name: day\n required: true\n type: string\n description: Two-digit day of the month, 0-padded if necessary (01-31)\n pattern: \"^(0[1-9]|[12][0-9]|3[01])$\"\n\npaths:\n # from routes/root.js\n /robots.txt:\n get:\n summary: Get robots.txt\n operationId: getRobotsTxt\n tags:\n - Internal\n description: Returns the robots.txt file.\n responses:\n 200:\n description: Success\n default:\n description: Error\n schema:\n $ref: \"#/definitions/problem\"\n x-monitor: false\n\n /:\n get:\n summary: Root endpoint\n operationId: rootEndpoint\n tags:\n - Internal\n description: The root service end-point\n produces:\n - application/json\n - application/problem+json\n responses:\n 200:\n description: Success\n default:\n description: Error\n schema:\n $ref: \"#/definitions/problem\"\n x-amples:\n - title: spec from root\n request:\n query:\n spec: true\n response:\n status: 200\n\n # from routes/info.js\n /_info:\n get:\n summary: Get service information\n operationId: getServiceInformation\n tags:\n - Internal\n description: Returns information about the service.\n produces:\n - application/json\n - application/problem+json\n responses:\n 200:\n description: Success\n default:\n description: Error\n schema:\n $ref: \"#/definitions/problem\"\n x-amples:\n - title: retrieve service info\n request: {}\n response:\n status: 200\n headers:\n content-type: application/json\n body:\n name: /.+/\n description: /.+/\n version: /.+/\n home: /.+/\n\n # from routes/feed/availability.js\n /{domain}/v1/feed/availability:\n get:\n tags:\n - Feed\n summary: Get supported projects\n operationId: getSupportedProjects\n description: Returns availability of featured feed content by Wikimedia project domain.\n produces:\n - application/json\n - application/problem+json\n parameters:\n - $ref: \"#/parameters/domain\"\n responses:\n 200:\n description: Availability of the feed content by wiki domain\n schema:\n $ref: \"#/definitions/availability\"\n default:\n description: Error\n schema:\n $ref: \"#/definitions/problem\"\n x-amples:\n - title: Retrieve feed content availability from \\'wikipedia.org\\'\n request:\n params:\n domain: wikimedia.org\n response:\n status: 200\n headers:\n content-type: application/json\n vary: /.+/\n etag: /^\"[^/\"]+/[^/\"]+\"$/\n access-control-allow-origin: \"*\"\n access-control-allow-headers: accept, x-requested-with, content-type\n content-security-policy: default-src\n x-content-security-policy: default-src\n x-frame-options: SAMEORIGIN\n body:\n todays_featured_article: [ /.+/ ]\n most_read: [ \"*\" ]\n picture_of_the_day: [ \"*\" ]\n in_the_news: [ /.+/ ]\n on_this_day: [ /.+/ ]\n did_you_know: [ /.+/ ]\n\n # from routes/feed/announcements.js\n /{domain}/v1/feed/announcements:\n get:\n tags:\n - Internal\n summary: Get app announcements\n operationId: getAppAnnouncements\n description: |\n Returns announcements for display in the official Wikipedia mobile apps.\n This is usually used to show announcements for surveys or fundraising.\n produces:\n - application/json; charset=utf-8; profile=\"https://www.mediawiki.org/wiki/Specs/Announcements/0.3.0\"\n - application/problem+json\n parameters:\n - $ref: \"#/parameters/domain\"\n responses:\n 200:\n description: Announcements for the wiki\n schema:\n $ref: \"#/definitions/announcements\"\n default:\n description: Error\n schema:\n $ref: \"#/definitions/problem\"\n x-amples:\n - title: Retrieve announcements\n response:\n status: 200\n headers:\n content-type: application/json; charset=utf-8; profile=\"https://www.mediawiki.org/wiki/Specs/Announcements/0.3.0\"\n cache-control: public, max-age=86400, s-maxage=900\n vary: /.+/\n etag: /^\"[^/\"]+/[^/\"]+\"$/\n access-control-allow-origin: \"*\"\n access-control-allow-headers: accept, x-requested-with, content-type\n content-security-policy: default-src\n x-content-security-policy: default-src\n x-frame-options: SAMEORIGIN\n\n # from routes/feed/on-this-day.js\n /{domain}/v1/feed/onthisday/{type}/{month}/{day}:\n get:\n tags:\n - Feed\n summary: Get events on a day in history\n operationId: getEventsOnADayInHistory\n description: |\n Returns events that occurred on a day in history, including notable historical\n events, holidays, and births and deaths of notable people.\n produces:\n - application/json\n - application/problem+json\n parameters:\n - $ref: \"#/parameters/domain\"\n - name: type\n in: path\n description: |\n Type of event, one of:\n - `selected`: Curated set of events\n - `births`: Notable births\n - `deaths`: Notable deaths\n - `holidays`: Fixed holidays\n - `events`: Events not included in another type\n - `all`: All of the above\n type: string\n required: true\n enum:\n - selected\n - births\n - deaths\n - holidays\n - events\n - all\n - $ref: \"#/parameters/month\"\n - $ref: \"#/parameters/day\"\n\n responses:\n 200:\n description: Events on this day in history\n schema:\n $ref: \"#/definitions/onthisdayResponse\"\n 404:\n description: No data found for the requested date\n schema:\n $ref: \"#/definitions/problem\"\n 501:\n description: Unsupported language\n schema:\n $ref: \"#/definitions/problem\"\n default:\n description: Error\n schema:\n $ref: \"#/definitions/problem\"\n x-amples:\n - title: retrieve selected events on January 15\n request:\n params:\n type: selected\n month: 01\n day: 15\n response:\n status: 200\n headers:\n content-type: application/json\n vary: /.+/\n etag: /^\"[^/\"]+/[^/\"]+\"$/\n access-control-allow-origin: \"*\"\n access-control-allow-headers: accept, x-requested-with, content-type\n content-security-policy: default-src\n x-content-security-policy: default-src\n x-frame-options: SAMEORIGIN\n body:\n selected:\n - text: /.+/\n year: /.+/\n pages:\n - title: /.+/\n\n # from routes/feed/featured.js\n /{domain}/v1/page/featured/{year}/{month}/{day}:\n get:\n tags:\n - Internal\n summary: Get featured article of the day\n operationId: getFeaturedArticleOfTheDay\n description: |\n Returns the page title of \"Today's featured article\" (only works on select wikis).\n produces:\n - application/json\n - application/problem+json\n parameters:\n - $ref: \"#/parameters/domain\"\n - $ref: \"#/parameters/year\"\n - $ref: \"#/parameters/month\"\n - $ref: \"#/parameters/day\"\n responses:\n 200:\n description: The title of a Wikipedia's Featured Article of the Day\n schema:\n $ref: \"#/definitions/summary\"\n 204:\n description: Empty response (for feed content aggregation requests from RESTBase)\n schema:\n $ref: \"#/definitions/empty\"\n 404:\n description: Not found\n schema:\n $ref: \"#/definitions/problem\"\n 500:\n description: API Error\n schema:\n $ref: \"#/definitions/problem\"\n 501:\n description: Unsupported language\n schema:\n $ref: \"#/definitions/problem\"\n default:\n description: Error\n schema:\n $ref: \"#/definitions/problem\"\n x-amples:\n - title: retrieve title of the featured article for April 29, 2025\n request:\n params:\n year: 2025\n month: \"04\"\n day: 29\n response:\n status: 200\n headers:\n content-type: application/json; charset=utf-8\n vary: /.+/\n etag: /^\"[^/\"]+/[^/\"]+\"$/\n access-control-allow-origin: \"*\"\n access-control-allow-headers: accept, x-requested-with, content-type\n content-security-policy: default-src\n x-content-security-policy: default-src\n x-frame-options: SAMEORIGIN\n body:\n title: /.+/\n extract: /.+/\n - title: retrieve featured article info for unsupported site (with aggregated=true)\n request:\n params:\n domain: is.wikipedia.org\n year: 2025\n month: \"04\"\n day: 29\n query:\n aggregated: true\n response:\n status: 204\n body: \"\"\n\n # from routes/feed/featured-image.js\n /{domain}/v1/media/image/featured/{year}/{month}/{day}:\n get:\n tags:\n - Internal\n summary: Get picture of the day\n operationId: getPictureOfTheDay\n description: |\n Returns the daily featured image from Wikimedia Commons, including thumbnail and\n full resolution image URLs and a localized description based on the domain.\n produces:\n - application/json\n - application/problem+json\n parameters:\n - $ref: \"#/parameters/domain\"\n - $ref: \"#/parameters/year\"\n - $ref: \"#/parameters/month\"\n - $ref: \"#/parameters/day\"\n responses:\n 200:\n description: Picture of the day\n schema:\n $ref: \"#/definitions/image\"\n 204:\n description: Empty response (for feed content aggregation requests from RESTBase)\n schema:\n $ref: \"#/definitions/empty\"\n 404:\n description: Not found (no featured image for the requested date)\n schema:\n $ref: \"#/definitions/problem\"\n default:\n description: Error\n schema:\n $ref: \"#/definitions/problem\"\n x-amples:\n - title: retrieve featured image data for April 29, 2025\n request:\n params:\n year: 2025\n month: \"04\"\n day: 29\n response:\n status: 200\n headers:\n content-type: application/json; charset=utf-8\n vary: /.+/\n etag: /^\"[^/\"]+/[^/\"]+\"$/\n access-control-allow-origin: \"*\"\n access-control-allow-headers: accept, x-requested-with, content-type\n content-security-policy: default-src\n x-content-security-policy: default-src\n x-frame-options: SAMEORIGIN\n body:\n title: /.+/\n description:\n html: /.+/\n text: /.+/\n lang: /.+/\n image:\n source: /.+/\n width: /.+/\n height: /.+/\n credit:\n html: /.+/\n text: /.+/\n license:\n type: /.+/\n code: /.+/\n url: /.+/\n artist:\n html: /.+/\n text: /.+/\n file_page: /.+/\n wb_entity_id: /.+/\n structured:\n captions: /.+/\n thumbnail:\n source: /.+/\n width: /.+/\n height: /.+/\n\n # from routes/feed/most-read.js\n /{domain}/v1/page/most-read/{year}/{month}/{day}:\n get:\n tags:\n - Internal\n summary: Get most-viewed pages\n operationId: getMostViewedPages\n description: |\n Returns the most-read articles for the date provided.\n The date is in UTC, as other endpoints, too.\n Only days prior to today's date are accepted.\n produces:\n - application/json\n - application/problem+json\n parameters:\n - $ref: \"#/parameters/domain\"\n - $ref: \"#/parameters/year\"\n - $ref: \"#/parameters/month\"\n - $ref: \"#/parameters/day\"\n responses:\n 200:\n description: Most-read article titles for this wiki for the requested date\n schema:\n $ref: \"#/definitions/mostread\"\n 204:\n description: Empty response (for feed content aggregation requests from RESTBase)\n schema:\n $ref: \"#/definitions/empty\"\n 404:\n description: No data found for the requested date\n schema:\n $ref: \"#/definitions/problem\"\n default:\n description: Error\n schema:\n $ref: \"#/definitions/problem\"\n x-amples:\n - title: retrieve the most-read articles for January 1, 2026\n request:\n params:\n year: 2026\n month: \"01\"\n day: \"01\"\n response:\n status: 200\n headers:\n content-type: application/json\n vary: /.+/\n etag: /^\"[^/\"]+/[^/\"]+\"$/\n access-control-allow-origin: \"*\"\n access-control-allow-headers: accept, x-requested-with, content-type\n content-security-policy: default-src\n x-content-security-policy: default-src\n x-frame-options: SAMEORIGIN\n body:\n date: 2026-01-01Z\n articles:\n - views: /.+/\n rank: /.+/\n title: /.+/\n extract: /.+/\n - title: retrieve the most-read articles for January 1, 2026 (with aggregated=true)\n request:\n params:\n year: 2026\n month: \"01\"\n day: \"01\"\n query:\n aggregated: true\n response:\n status: 200\n headers:\n content-type: application/json; charset=utf-8\n vary: /.+/\n etag: /^\"[^/\"]+/[^/\"]+\"$/\n access-control-allow-origin: \"*\"\n access-control-allow-headers: accept, x-requested-with, content-type\n content-security-policy: default-src\n x-content-security-policy: default-src\n x-frame-options: SAMEORIGIN\n body:\n date: 2025-12-31Z\n articles:\n - views: /.+/\n rank: /.+/\n title: /.+/\n extract: /.+/\n - title: retrieve most-read articles for date with no data (with aggregated=true)\n request:\n params:\n year: 2015\n month: \"01\"\n day: \"01\"\n query:\n aggregated: true\n response:\n status: 204\n body: \"\"\n\n # from routes/feed/news.js\n /{domain}/v1/page/news:\n get:\n tags:\n - Internal\n summary: Get current news headlines\n operationId: getCurrentNewsHeadlines\n description: |\n Returns content related to the current \"In the News\" template\n (for some wikis).\n produces:\n - application/json\n - application/problem+json\n parameters:\n - $ref: \"#/parameters/domain\"\n responses:\n 200:\n description: News content from a Wikipedia main page\n schema:\n $ref: \"#/definitions/news\"\n 204:\n description: Empty response (for feed content aggregation requests from RESTBase)\n schema:\n $ref: \"#/definitions/empty\"\n 501:\n description: Unsupported language\n schema:\n $ref: \"#/definitions/problem\"\n default:\n description: Error\n schema:\n $ref: \"#/definitions/problem\"\n x-amples:\n - title: get 'In the News' content\n response:\n status: 200\n headers:\n content-type: application/json; charset=utf-8\n vary: /.+/\n etag: /^\"[^/\"]+/[^/\"]+\"$/\n access-control-allow-origin: \"*\"\n access-control-allow-headers: accept, x-requested-with, content-type\n content-security-policy: default-src\n x-content-security-policy: default-src\n x-frame-options: SAMEORIGIN\n body:\n - story: /.+/\n links:\n - title: /.+/\n extract: /.+/\n - title: get \"In the News\" content for unsupported language (with aggregated=true)\n request:\n params:\n domain: is.wikipedia.org\n query:\n aggregated: true\n response:\n status: 204\n body: \"\"\n\n # from routes/page/random.js\n /{domain}/v1/page/random/title:\n get:\n tags:\n - Page\n summary: Get a random article\n operationId: getARandomArticle\n description: |\n Returns the title of a randomly picked article from the main namespace.\n Preference is given to articles with a thumbnail and an associated Wikidata description.\n produces:\n - application/json\n - application/problem+json\n parameters:\n - $ref: \"#/parameters/domain\"\n responses:\n 200:\n description: A random (good) article title\n schema:\n $ref: \"#/definitions/random\"\n 400:\n description: Bad request\n schema:\n $ref: \"#/definitions/problem\"\n default:\n $ref: \"#/definitions/problem\"\n x-amples:\n - title: retrieve a random article title\n response:\n status: 200\n headers:\n content-type: application/json\n vary: /.+/\n access-control-allow-origin: \"*\"\n access-control-allow-headers: accept, x-requested-with, content-type\n content-security-policy: default-src\n x-content-security-policy: default-src\n x-frame-options: SAMEORIGIN\n body:\n items:\n - title: /.+/\n\n # from routes/configuration.js\n /{domain}/v1/feed/configuration:\n get:\n tags:\n - Internal\n summary: Get feed configuration\n operationId: getFeedConfiguration\n description: |\n Returns information for use in official Wikipedia mobile apps.\n produces:\n - application/json\n - application/problem+json\n parameters:\n - $ref: \"#/parameters/domain\"\n responses:\n 200:\n description: Configuration information\n 400:\n description: Bad request\n schema:\n $ref: \"#/definitions/problem\"\n default:\n $ref: \"#/definitions/problem\"\n x-amples:\n - title: retrieve configuration\n response:\n status: 200\n headers:\n content-type: application/json\n body:\n commonv1: /.+/\n\n # from routes/did-you-know.js\n /{domain}/v1/feed/did-you-know:\n get:\n tags:\n - Feed\n summary: Get featured facts\n operationId: getFeaturedFacts\n description: |\n Returns a series of facts from new or recently improved articles on Wikipedia.\n Featured facts are updated on a regular basis according to the policies\n of each wiki.\n produces:\n - application/json\n - application/problem+json\n parameters:\n - $ref: \"#/parameters/domain\"\n responses:\n 200:\n description: Featured facts\n schema:\n $ref: \"#/definitions/didYouKnowList\"\n 400:\n description: Bad request\n schema:\n $ref: \"#/definitions/problem\"\n default:\n $ref: \"#/definitions/problem\"\n x-amples:\n - title: retrieve featured facts\n response:\n status: 200\n headers:\n content-type: application/json\n body:\n - html: /.+/\n text: /.+/\n\n # from routes/feed/aggregated.js\n /{domain}/v1/aggregated/featured/{year}/{month}/{day}:\n get:\n tags:\n - Feed\n summary: Get featured content\n operationId: getFeaturedContent\n description: |\n Returns featured content from Wikipedia for a given day. Depending on availability,\n the response can include the daily featured article (TFA), featured image or media file,\n list of most-read articles, and events from that day in history. Requests for the current\n day may also include the latest news stories and featured did-you-know facts (DYK).\n Use the availability endpoint to see supported content types per Wikimedia project.\n produces:\n - application/json\n - application/problem+json\n parameters:\n - $ref: \"#/parameters/domain\"\n - $ref: \"#/parameters/year\"\n - $ref: \"#/parameters/month\"\n - $ref: \"#/parameters/day\"\n responses:\n 200:\n description: Featured content\n schema:\n $ref: \"#/definitions/featured_content\"\n 404:\n description: Not found\n schema:\n $ref: \"#/definitions/problem\"\n 500:\n description: API Error\n schema:\n $ref: \"#/definitions/problem\"\n default:\n description: Error\n schema:\n $ref: \"#/definitions/problem\"\n x-amples:\n - title: retrieve aggregated featured content for April 29, 2025\n request:\n params:\n year: 2025\n month: \"04\"\n day: 29\n response:\n status: 200\n headers:\n content-type: application/json\n body:\n tfa: /.+/\n mostread: /.+/\n image: /.+/\n onthisday: /.+/\n\ndefinitions:\n # A https://tools.ietf.org/html/draft-nottingham-http-problem\n problem:\n required:\n - type\n properties:\n status:\n type: integer\n type:\n type: string\n title:\n type: string\n detail:\n type: string\n method:\n type: string\n uri:\n type: string\n\n empty:\n type: object\n properties:\n type:\n type: string\n description: description of original content type (buffer)\n data:\n type: array\n description: Buffer contents\n items:\n type: string\n additionalProperties: false\n\n dated_pageview:\n type: object\n properties:\n date:\n type: string\n description: Date that the data applies to in ISO 8601 format\n views:\n type: integer\n description: Number of views\n required:\n - date\n - views\n additionalProperties: false\n\n mostread_article:\n allOf:\n - $ref: \"#/definitions/summary\"\n - type: object\n properties:\n views:\n type: integer\n description: Number of views\n view_history:\n type: array\n description: Views for the previous five days\n items:\n $ref: \"#/definitions/dated_pageview\"\n rank:\n type: integer\n description: |\n Position in the list of most-viewed articles. Rank may\n not start with 1 and may not be sequential\n required:\n - views\n - rank\n\n mostread:\n description: List of most-read articles\n type: object\n properties:\n date:\n type: string\n description: Date that the data applies to in ISO 8601 format\n articles:\n type: array\n description: 50 articles with the highest number of views\n items:\n $ref: \"#/definitions/mostread_article\"\n required:\n - date\n - articles\n\n didYouKnowList:\n type: array\n description: |\n \"List of facts continuing the question: Did you know... Facts start with an ellipsis\n and end with a question mark.\"\n items:\n type: object\n properties:\n text:\n type: string\n description: Fact in plain text\n html:\n type: string\n description: Fact in html\n required:\n - text\n - html\n\n onthisdayList:\n type: array\n items:\n type: object\n properties:\n text:\n type: string\n description: Short description in plain text\n year:\n type: integer\n description: Year the event occurred\n pages:\n type: array\n description: Related articles\n items:\n $ref: \"#/definitions/summary\"\n required:\n - text\n - pages\n\n onthisdayResponse:\n type: object\n description: Events that occurred on this day in history\n properties:\n births:\n $ref: \"#/definitions/onthisdayList\"\n deaths:\n $ref: \"#/definitions/onthisdayList\"\n events:\n $ref: \"#/definitions/onthisdayList\"\n holidays:\n $ref: \"#/definitions/onthisdayList\"\n selected:\n $ref: \"#/definitions/onthisdayList\"\n additionalProperties: false\n\n news_item:\n type: object\n properties:\n story:\n type: string\n description: Short summary of the story in HTML\n links:\n type: array\n description: Articles related to the story\n items:\n $ref: \"#/definitions/summary\"\n required:\n - story\n - links\n\n news:\n type: array\n description: Stories from today's news. Available only for the current day in UTC.\n items:\n $ref: \"#/definitions/news_item\"\n\n image:\n type: object\n properties:\n title:\n type: string\n description: Image title\n thumbnail:\n $ref: \"#/definitions/image_props\"\n image:\n $ref: \"#/definitions/image_props\"\n description:\n $ref: \"#/definitions/extmetadata_property\"\n file_page:\n type: string\n description: URL for the image's attribution page\n artist:\n type: object\n description: Information about the image's author\n properties:\n html:\n type: string\n description: Artist name in HTML\n text:\n type: string\n description: Artist name in plain text\n name:\n type: string\n description: Artist name in plain text\n user_page:\n type: string\n description: User page for the artist on Wikimedia Commons\n required:\n - html\n credit:\n $ref: \"#/definitions/extmetadata_property\"\n license:\n type: object\n description: License under which the image is available\n properties:\n type:\n type: string\n description: Name of the license in plain text\n code:\n type: string\n description: Code for the license, such as cc-by-sa-4.0\n url:\n type: string\n description: URL describing the terms and conditions of the license, if any\n required:\n - type\n wb_entity_id:\n type: string\n description: Wikimedia Commons Wikibase (WB) identifier, if the file is on Wikimedia Commons\n structured:\n type: object\n description: Image captions and tags\n properties:\n captions:\n type: object\n description: |\n Multilingual captions for the image as key-value pairs with the language code\n and translated caption\n required: [ captions ]\n required:\n - title\n - thumbnail\n - image\n - license\n - structured\n\n announcements:\n type: object\n properties:\n announce:\n type: array\n description: List of active announcements for the wiki\n items:\n $ref: \"#/definitions/announcement\"\n required:\n - announce\n\n availability:\n type: object\n properties:\n todays_featured_article:\n type: array\n description: Domains for wikis with this feature enabled, or [ '*.<project>.org' ] for all wikis in a project family\n items:\n type: string\n most_read:\n type: array\n description: Domains for wikis with this feature enabled, or [ '*.<project>.org' ] for all wikis in a project family\n items:\n type: string\n picture_of_the_day:\n type: array\n description: Domains for wikis with this feature enabled, or [ '*.<project>.org' ] for all wikis in a project family\n items:\n type: string\n in_the_news:\n type: array\n description: Domains for wikis with this feature enabled, or [ '*.<project>.org' ] for all wikis in a project family\n items:\n type: string\n on_this_day:\n type: array\n description: Domains for wikis with this feature enabled, or [ '*.<project>.org' ] for all wikis in a project family\n items:\n type: string\n did_you_know:\n type: array\n description: Domains for wikis with this feature enabled, or [ '*.<project>.org' ] for all wikis in a project family\n items:\n type: string\n required: [ todays_featured_article, most_read, picture_of_the_day, in_the_news, on_this_day, did_you_know ]\n additionalProperties: false\n\n announcement:\n type: object\n properties:\n id:\n type: string\n description: Unique ID of the announcement\n type:\n type: string\n description: The announcement type\n enum:\n - survey\n - fundraising\n - announcement\n start_time:\n type: string\n description: The ISO 8601 date to begin showing the announcement.\n end_time:\n type: string\n description: The ISO 8601 date to stop showing the announcement.\n platforms:\n type: array\n description: |\n An array of platforms on which to display the announcement.\n items:\n type: string\n enum:\n - iOSApp\n - iOSAppV2\n - iOSAppV3\n - iOSAppV4\n - iOSAppV5\n - AndroidApp\n - AndroidAppV2\n text:\n type: string\n description: The text of the announcement\n image:\n type: string\n description: \\[DEPRECATED\\] The URL of the image for the announcement (Android only)\n image_url:\n type: string\n description: The URL of the image for the announcement\n action:\n $ref: \"#/definitions/action\"\n caption_HTML:\n type: string\n description: HTML to display below the announcement. Usually a privacy statement and link to a policy\n countries:\n type: array\n description: |\n An array of country codes in which to display the announcement. Clients should derive\n the country from the 'GeoIP' portion of the Set-Cookie header.\n items:\n type: string\n min_version:\n type: string\n description: minimum app version code for which to show the announcement\n max_version:\n type: string\n description: maximum app version code for which to show the announcement\n beta:\n type: boolean\n description: |\n (AndroidAppV2 only) Optional boolean flag controlling the release builds for which the announcement should be shown.\n Set to true if the announcement should be shown only in pre-production builds (beta, alpha, dev).\n Set to false if the announcement should be shown only in release builds.\n If not defined, the announcement will be shown for all builds.\n logged_in:\n type: boolean\n description: |\n (AndroidAppV2 only) Optional boolean flag controlling whether announcements should be shown based on the user login state.\n Set to true if the announcement should be shown only if the user is logged in.\n Set to false if the announcement should be shown only if the user is NOT logged in.\n If not defined, the announcement will be shown regardless of the user's login state.\n reading_list_sync_enabled:\n type: boolean\n description: |\n (AndroidAppV2 only) Optional boolean flag controlling whether announcements should be shown based on whether the user\n has enabled reading list syncing.\n Set to true if the announcement should be shown only if the user has enabled reading list syncing.\n Set to false if the announcement should be shown only if the user has NOT enabled reading list syncing.\n If not defined, the announcement will be shown regardless of whether the user has enabled reading list syncing.\n negative_text:\n type: string\n description: |\n (AndroidAppV2 only) text to show on a \"negative\" button on the announcement. If absent, the button is not shown\n image_height:\n type: integer\n description: |\n (AndroidAppV2 only) height, in device-independent pixels, of the image portion of the announcement card\n articleTitles:\n type: array\n description: |\n (iOSAppV3+ only, survey type only) Array of article titles that will display the survey announcement.\n items:\n type: string\n displayDelay:\n type: integer\n description: |\n (iOSAppV3+ only, survey type only) Number in seconds to wait for survey announcement to appear after content load.\n percent_receiving_experiment:\n type: integer\n description: |\n (iOSAppV4+ only, survey type only) Integer between 0 and 100 representing the percentage of users that will fall into the iOS Article as a Living Document experiment. This percentage will see the feature, the others will not. Both groups will see the survey announcement.\n required:\n - id\n - type\n - start_time\n - end_time\n - platforms\n - text\n - action\n\n random_article:\n type: object\n properties:\n title:\n type: string\n description: Article title\n page_id:\n type: integer\n description: Article identifier\n rev:\n type: integer\n description: Identifier of the latest revision\n tid:\n type: string\n description: Time-based UUID associated with the underlying HTML content\n namespace:\n type: integer\n description: MediaWiki namespace identifier\n user_id:\n type: integer\n description: Identifier of the user who made the latest edit\n user_text:\n type: string\n description: Username of the user who made the latest edit\n comment:\n type: string\n description: Summary for the latest edit\n timestamp:\n type: string\n description: Timestamp of the latest edit in ISO 8601 format\n tags:\n type: array\n description: Tags associated with the edit\n items:\n type: string\n restrictions:\n type: array\n description: Article protection restrictions at the time of the latest edit\n items:\n type: string\n page_language:\n type: string\n description: Language code for the language of the article\n redirect:\n type: boolean\n description: Indicates whether the article is a redirect\n required:\n - title\n - page_id\n - rev\n - tid\n - namespace\n - user_id\n - user_text\n - comment\n - timestamp\n - tags\n - restrictions\n - page_language\n - redirect\n\n image_props:\n type: object\n properties:\n source:\n type: string\n description: Image URI\n width:\n type: integer\n minimum: 0\n description: Image width in pixels\n height:\n type: integer\n minimum: 0\n description: Image height in pixels\n mime:\n type: string\n description: MIME type\n required:\n - source\n - width\n - height\n additionalProperties: false\n\n extmetadata_property:\n type: object\n properties:\n html:\n type: string\n description: Description in HTML\n text:\n type: string\n description: Description in plain text\n lang:\n type: string\n description: Language code for the description\n required:\n - html\n - text\n\n action:\n type: object\n properties:\n title:\n type: string\n description: The title to display on the button that performs the action\n url:\n type: string\n description: The URL to navigate to when the button is pressed\n required:\n - title\n - url\n\n random:\n type: object\n properties:\n items:\n type: array\n items:\n $ref: \"#/definitions/random_article\"\n required:\n - items\n\n titles_set:\n type: object\n description: |\n Article title in multiple formats. Examples:\n - https://en.wikipedia.org/api/rest_v1/page/summary/IOS_13\n - https://en.wikipedia.org/api/rest_v1/page/summary/Man%27s_best_friend\n properties:\n canonical:\n type: string\n description: Article title with underscores instead of spaces\n normalized:\n type: string\n description: Article title with spaces instead of underscores\n display:\n type: string\n description: Article title as it should be displayed to the user\n required:\n - canonical\n - normalized\n - display\n\n content_urls:\n type: object\n properties:\n page:\n type: string\n description: URL for the article\n revisions:\n type: string\n description: URL for the article's revision history\n edit:\n type: string\n description: URL to edit the article\n talk:\n type: string\n description: URL for the article's discussion page, if applicable\n required:\n - page\n - revisions\n - edit\n additionalProperties: false\n\n featured_content:\n type: object\n description: |\n Daily featured content. Depending on availability, may include:\n - Daily featured article (`tfa`)\n - Daily featured image from Wikimedia Commons (`image`)\n - Previous day's most-read articles (`mostread`) – not available for the current\n day in UTC\n - Stories from the news (`news`) – available only for the current day in UTC\n - Featured facts (`dyk`) – available only for the current day in UTC\n properties:\n tfa:\n $ref: \"#/definitions/summary\"\n mostread:\n $ref: \"#/definitions/mostread\"\n image:\n $ref: \"#/definitions/image\"\n news:\n $ref: \"#/definitions/news\"\n onthisday:\n $ref: \"#/definitions/onthisdayList\"\n dyk:\n $ref: \"#/definitions/didYouKnowList\"\n\n summary:\n type: object\n description: Information about an article\n properties:\n type:\n type: string\n description: Type of article\n enum:\n - standard\n - disambiguation\n - no-extract\n - mainpage\n titles:\n $ref: \"#/definitions/titles_set\"\n title:\n type: string\n description: \\[DEPRECATED\\] Use `titles.normalized` instead\n displaytitle:\n type: string\n description: \\[DEPRECATED\\] Use `titles.display` instead\n namespace:\n type: object\n properties:\n id:\n type: integer\n description: MediaWiki namespace identifier\n text:\n type: string\n description: Localized name of the namespace\n required: [ id, text ]\n additionalProperties: false\n wikibase_item:\n type: string\n description: Identifier for the associated Wikidata entity (if any)\n pageid:\n type: integer\n description: Article identifier\n revision:\n type: string\n description: Revision identifier for the latest revision\n tid:\n type: string\n description: Time-based UUID associated with the underlying HTML content\n extract:\n type: string\n description: First few sentences of the article in plain text\n extract_html:\n type: string\n description: First few sentences of the article in HTML\n thumbnail:\n $ref: \"#/definitions/image_props\"\n originalimage:\n $ref: \"#/definitions/image_props\"\n lang:\n type: string\n description: Language code for the language of the article\n example: en\n dir:\n type: string\n description: Language direction\n enum:\n - ltr\n - rtl\n timestamp:\n type: string\n format: date-time\n description: Time when the article was last edited in ISO 8601 format\n example: \"1970-01-01T00:00:00.000Z\"\n description:\n type: string\n description: Short summary of the topic of the article\n example: American poet\n description_source:\n type: string\n description: Source of the description, either local (from the article) or central (from Wikidata)\n enum:\n - local\n - central\n content_urls:\n type: object\n description: Article URLs\n properties:\n desktop:\n $ref: \"#/definitions/content_urls\"\n mobile:\n $ref: \"#/definitions/content_urls\"\n coordinates:\n type: object\n description: Geographic coordinates associated with the article\n properties:\n lat:\n type: number\n description: Latitude\n lon:\n type: number\n description: Longitude\n required: [ lat, lon ]\n normalizedtitle:\n type: string\n description: \\[DEPRECATED\\] Use titles.normalized instead\n required:\n - type\n - titles\n - title\n - displaytitle\n - pageid\n - lang\n - dir\n - revision\n - timestamp\n - content_urls\n - extract\n - extract_html\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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/targets.yaml","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"semi-style","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":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","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-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"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":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","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":[]}]}]
--- end ---
$ /usr/bin/npm ci
--- stderr ---
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated lodash.get@4.4.2: This package is deprecated. Use the optional chaining (?.) operator instead.
npm WARN deprecated kad-fs@0.0.4: This package is no longer maintained.
npm WARN deprecated rimraf@2.4.5: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated lodash.clone@4.5.0: This package is deprecated. Use structuredClone instead.
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated @humanwhocodes/config-array@0.11.14: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated kad-memstore@0.0.1: This package is no longer maintained.
npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@6.0.4: Glob versions prior to v9 are no longer supported
npm WARN deprecated preq@0.5.14: Deprecated as this is a wrapper around the deprecated request library. Preq can be replaced with fetch, which is available from Node 18 as an experimental feature.
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated eslint@8.57.0: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---
added 665 packages, and audited 666 packages in 9s
119 packages are looking for funding
run `npm fund` for details
20 vulnerabilities (9 moderate, 9 high, 2 critical)
To address issues that do not require attention, run:
npm audit fix
To address all issues possible (including breaking changes), run:
npm audit fix --force
Some issues need review, and may require choosing
a different dependency.
Run `npm audit` for details.
--- end ---
$ /usr/bin/npm test
--- stderr ---
[baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
strict mode: missing type "object" for keyword "required" at "#/definitions/problem#" (strictTypes)
strict mode: missing type "object" for keyword "properties" at "#/definitions/problem#" (strictTypes)
--- stdout ---
> @wikimedia/wikifeeds@1.0.0 test
> npm run lint && PREQ_CONNECT_TIMEOUT=15 mocha --recursive
> @wikimedia/wikifeeds@1.0.0 lint
> eslint .
/src/repo/.eslintrc.json
1:1 warning Use the global form of 'use strict' strict
/src/repo/app.js
20:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
64:37 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
136:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
138:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
150:31 warning Found non-literal argument in require security/detect-non-literal-require
197:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
198:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
236:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
/src/repo/etc/dyk-sites.js
19:5 warning Missing JSDoc @return declaration jsdoc/require-returns
/src/repo/etc/news-sites.js
4:1 warning At most one access-control tag may be present on a JSDoc block jsdoc/check-access
5:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
6:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
50:1 warning Syntax error in type: {Object.<string, NewsSite>} jsdoc/valid-types
/src/repo/lib/announcements.js
30:1 warning Expected this semicolon to be at the end of the previous line semi-style
34:1 warning This line has a length of 123. Maximum allowed is 100 max-len
51:1 warning This line has a length of 134. Maximum allowed is 100 max-len
84:1 warning This line has a length of 119. Maximum allowed is 100 max-len
86:1 warning This line has a length of 118. Maximum allowed is 100 max-len
135:1 warning This line has a length of 123. Maximum allowed is 100 max-len
/src/repo/lib/api-util.js
297:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
/src/repo/lib/did-you-know.js
20:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
21:1 warning Missing JSDoc @param "lang" type jsdoc/require-param-type
41:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
42:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
82:12 warning 'si' is already declared in the upper scope on line 8 column 7 no-shadow
97:20 warning 'result' is already declared in the upper scope on line 88 column 19 no-shadow
/src/repo/lib/featured.js
136:12 warning 'si' is already declared in the upper scope on line 12 column 7 no-shadow
/src/repo/lib/imageinfo.js
30:1 warning The type 'Bool' is undefined jsdoc/no-undefined-types
85:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
132:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
203:43 warning Array.prototype.map() expects a return value from arrow function array-callback-return
280:1 warning Syntax error in type: [type] jsdoc/valid-types
282:1 warning Syntax error in type: [type] jsdoc/valid-types
/src/repo/lib/most-read.js
81:1 warning At most one access-control tag may be present on a JSDoc block jsdoc/check-access
82:1 warning @public should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
83:1 warning @public should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
100:1 warning This line has a length of 122. Maximum allowed is 100 max-len
115:28 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
116:1 warning This line has a length of 112. Maximum allowed is 100 max-len
145:19 warning 'pageviews' is already declared in the upper scope on line 10 column 7 no-shadow
161:25 warning Array.prototype.map() expects a return value from arrow function array-callback-return
202:1 warning This line has a length of 148. Maximum allowed is 100 max-len
212:1 warning This line has a length of 113. Maximum allowed is 100 max-len
/src/repo/lib/news.js
15:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
73:12 warning 'si' is already declared in the upper scope on line 8 column 7 no-shadow
96:20 warning 'result' is already declared in the upper scope on line 80 column 19 no-shadow
/src/repo/lib/on-this-day.js
34:1 warning The type 'Integer' is undefined jsdoc/no-undefined-types
122:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
123:1 warning The type 'Integer' is undefined jsdoc/no-undefined-types
128:12 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
141:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
151:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
172:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
184:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
207:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
253:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
270:1 warning The type 'Integer' is undefined jsdoc/no-undefined-types
309:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
320:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
321:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
342:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
360:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
380:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
412:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
426:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
440:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
454:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
468:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
483:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
484:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
543:1 warning Missing JSDoc @param "sendResponse" type jsdoc/require-param-type
/src/repo/lib/on-this-day.languages.js
28:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
30:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
32:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
60:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
62:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
64:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
100:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
102:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
104:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
128:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
130:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
132:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
156:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
158:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
160:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
189:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
191:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
193:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
217:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
219:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
221:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
245:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
247:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
249:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
273:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
275:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
277:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
301:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
303:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
305:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
335:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
337:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
339:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
362:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
364:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
366:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
390:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
392:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
418:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
420:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
422:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
/src/repo/lib/pageviews.js
36:1 warning At most one access-control tag may be present on a JSDoc block jsdoc/check-access
37:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
38:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
39:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
53:1 warning The type 'Platform' is undefined jsdoc/no-undefined-types
54:1 warning The type 'Agent' is undefined jsdoc/no-undefined-types
56:1 warning The type 'Granularity' is undefined jsdoc/no-undefined-types
71:1 warning The type 'Platform' is undefined jsdoc/no-undefined-types
/src/repo/lib/random.js
38:9 warning 'score' is already declared in the upper scope on line 31 column 10 no-shadow
55:1 warning Missing JSDoc @param "scoredResults" type jsdoc/require-param-type
/src/repo/lib/siteinfo.js
3:1 warning Use the global form of 'use strict' strict
10:29 warning Unsafe Regular Expression security/detect-unsafe-regex
/src/repo/lib/util.js
104:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
142:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
222:1 warning The type 'Router' is undefined jsdoc/no-undefined-types
280:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
293:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
306:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
378:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
450:34 warning Default parameters should be last default-param-last
/src/repo/package-lock.json
1:1 warning Use the global form of 'use strict' strict
/src/repo/package.json
1:1 warning Use the global form of 'use strict' strict
/src/repo/scripts/check-featured-feed.js
49:35 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
82:44 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
107:34 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
150:30 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
217:5 warning Don't use process.exit(); throw an error instead n/no-process-exit
/src/repo/spec.yaml
1030:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1035:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1040:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1045:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1050:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1055:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1058:1 warning This line has a length of 112. Maximum allowed is 100 max-len
1107:1 warning This line has a length of 109. Maximum allowed is 100 max-len
1124:1 warning This line has a length of 126. Maximum allowed is 100 max-len
1125:1 warning This line has a length of 107. Maximum allowed is 100 max-len
1131:1 warning This line has a length of 132. Maximum allowed is 100 max-len
1138:1 warning This line has a length of 127. Maximum allowed is 100 max-len
1140:1 warning This line has a length of 108. Maximum allowed is 100 max-len
1141:1 warning This line has a length of 113. Maximum allowed is 100 max-len
1142:1 warning This line has a length of 121. Maximum allowed is 100 max-len
1146:1 warning This line has a length of 121. Maximum allowed is 100 max-len
1150:1 warning This line has a length of 113. Maximum allowed is 100 max-len
1154:1 warning This line has a length of 111. Maximum allowed is 100 max-len
1160:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1164:1 warning This line has a length of 281. Maximum allowed is 100 max-len
1437:1 warning This line has a length of 106. Maximum allowed is 100 max-len
✖ 161 problems (0 errors, 161 warnings)
aggregated featured
starting test server
✔ should return 200 for a valid request (2111ms)
✔ should return 404 for an invalid year
✔ should return 404 for an invalid month
✔ should return 404 for an invalid day
✔ should return only historic keys for past date (851ms)
✔ should return current keys for today (1432ms)
✔ should return future keys for tomorrow (1666ms)
aggregate onthisday
✔ should return 200 for a valid request (5597ms)
✔ should return 404 for an invalid month (227ms)
✔ should return 404 for an invalid day (121ms)
✔ should return objects with the expected keys (3001ms)
express app
✔ should get robots.txt
✔ should set CORS headers
✔ should set CSP headers
✔ should get static content gzipped
✔ should get static content uncompressed
Swagger spec
✔ get the spec
✔ spec validation
validate responses against schema
- random response should conform to schema
✔ featured article response should conform to schema (226ms)
✔ featured image response should conform to schema (181ms)
✔ most-read response should conform to schema (324ms)
✔ news response should conform to schema (57ms)
✔ announcements should conform to schema
✔ onthisday response should conform to schema (2323ms)
✔ featured article response should conform to schema (invalid lang, agg=true)
✔ featured image response should conform to schema (invalid date, agg=true)
✔ most-read response should conform to schema (invalid date, agg=true)
✔ news response (invalid language, agg=true) should be empty
✔ featured article request should fail for invalid language when !agg=true
✔ featured image request should fail for invalid date when !agg=true
✔ most-read request should fail for invalid date when !agg=true
✔ news request should fail for invalid language when !agg=true
validate spec examples
✔ spec from root
✔ retrieve service info
✔ Retrieve feed content availability from \'wikipedia.org\'
✔ Retrieve announcements
✔ retrieve selected events on January 15 (355ms)
✔ retrieve title of the featured article for April 29, 2025 (168ms)
✔ retrieve featured article info for unsupported site (with aggregated=true)
✔ retrieve featured image data for April 29, 2025 (1133ms)
✔ retrieve the most-read articles for January 1, 2026 (828ms)
✔ retrieve the most-read articles for January 1, 2026 (with aggregated=true) (516ms)
✔ retrieve most-read articles for date with no data (with aggregated=true)
✔ get 'In the News' content (130ms)
✔ get "In the News" content for unsupported language (with aggregated=true)
✔ retrieve a random article title (71ms)
✔ retrieve configuration
✔ retrieve featured facts
✔ retrieve aggregated featured content for April 29, 2025 (730ms)
did-you-know
✔ ar: results list should have expected properties (219ms)
✔ de: results list should have expected properties (137ms)
✔ en: results list should have expected properties (86ms)
✔ hi: results list should have expected properties (160ms)
✔ pt: results list should have expected properties (154ms)
✔ ru: results list should have expected properties (160ms)
✔ uk: results list should have expected properties (150ms)
featured
✔ incomplete date should return 404
✔ extra uri path parameter after date should return 404
✔ Missing TFA should return 204 (112ms)
✔ Missing TFA with aggregated=true should return 204 (108ms)
✔ featured article of an old date should return 404
featured-image-lang
✔ bg description (3127ms)
✔ bn description (262ms)
✔ bs description (288ms)
✔ cs description (278ms)
✔ de description (193ms)
✔ el description (246ms)
✔ en description (188ms)
✔ fa description (295ms)
✔ he description (273ms)
✔ hu description (300ms)
✔ it description (244ms)
✔ ja description (240ms)
✔ la description (284ms)
✔ no description (275ms)
✔ sco description (268ms)
✔ sd description (307ms)
✔ sv description (241ms)
✔ tr description (237ms)
✔ ur description (260ms)
✔ vi description (297ms)
✔ zh description (269ms)
featured-image
✔ incomplete date should return 404
✔ extra uri path parameter after date should return 404
service information
✔ should get the service name
✔ should get the service version
✔ should redirect to the service home page
✔ should get the service info
most-read articles
✔ Should provide pageviews from day prior when aggregated flag is set (2314ms)
✔ Should drop duplicate pageviews (1415ms)
✔ Should filter out missing summaries (1712ms)
✔ Should return 204 for fywiki requests
✔ main page filtering RegExp should handle all main page title chars
✔ Should filter out blocked titles from some languages, but not others
✔ Should filter out certain blocked titles from all wikis
most-read articles
✔ Should return 200 even if title has invalid utf8 encoding (1074ms)
✔ Should filter-out invalid utf8 encoding
news headline selectors
✔ test news headlines should be general not categorical
✔ test news headline topics should be nonnull
✔ bs news headlines should be general not categorical
✔ bs news headline topics should be nonnull
✔ da news headlines should be general not categorical
✔ da news headline topics should be nonnull
✔ de news headlines should be general not categorical
✔ de news headline topics should be nonnull
✔ el news headlines should be general not categorical
✔ el news headline topics should be nonnull
✔ en news headlines should be general not categorical
✔ en news headline topics should be nonnull
✔ es news headlines should be general not categorical
✔ es news headline topics should be nonnull
✔ fi news headlines should be general not categorical
✔ fi news headline topics should be nonnull
✔ fr news headlines should be general not categorical
✔ fr news headline topics should be nonnull
✔ he news headlines should be general not categorical
✔ he news headline topics should be nonnull
✔ ko news headlines should be general not categorical
✔ ko news headline topics should be nonnull
✔ no news headlines should be general not categorical
✔ no news headline topics should be nonnull
✔ pl news headlines should be general not categorical
✔ pl news headline topics should be nonnull
✔ pt news headlines should be general not categorical
✔ pt news headline topics should be nonnull
✔ ru news headlines should be general not categorical
✔ ru news headline topics should be nonnull
✔ sco news headlines should be general not categorical
✔ sco news headline topics should be nonnull
✔ sv news headlines should be general not categorical
✔ sv news headline topics should be nonnull
✔ uk news headlines should be general not categorical
✔ uk news headline topics should be nonnull
✔ vi news headlines should be general not categorical
✔ vi news headline topics should be nonnull
✔ news headline topic should be the first bold link
✔ news headline topic should be the first link when no link is bolded
news
✔ test: results list should have expected properties (202ms)
✔ bs: results list should have expected properties (160ms)
✔ da: results list should have expected properties (406ms)
✔ de: results list should have expected properties (173ms)
✔ el: results list should have expected properties (132ms)
✔ en: results list should have expected properties (132ms)
✔ es: results list should have expected properties (282ms)
✔ fi: results list should have expected properties (264ms)
✔ fr: results list should have expected properties (463ms)
✔ he: results list should have expected properties (312ms)
✔ ko: results list should have expected properties (284ms)
✔ no: results list should have expected properties (657ms)
✔ pl: results list should have expected properties (856ms)
✔ pt: results list should have expected properties (2737ms)
✔ ru: results list should have expected properties (376ms)
✔ sco: results list should have expected properties (159ms)
✔ sv: results list should have expected properties (271ms)
✔ uk: results list should have expected properties (256ms)
✔ vi: results list should have expected properties (159ms)
onthisday
✔ all: unsupported language throws 404
✔ selected: unsupported language throws 404
✔ selected: fetches some results (396ms)
✔ births: unsupported language throws 404
✔ births: fetches some results (1199ms)
✔ deaths: unsupported language throws 404
✔ deaths: fetches some results (829ms)
✔ events: unsupported language throws 404
✔ events: fetches some results (1062ms)
✔ holidays: unsupported language throws 404
✔ holidays: fetches some results (751ms)
✔ "all" fetches some results for births, deaths, events, holidays and selected (2251ms)
✔ verify contents in events (2655ms)
random/title
✔ pickBestResult should select best-scored title from sample
✔ redirects to the right format with random title - html (70ms)
✔ redirects to the right format with random title - invalid format
✔ returns 404 for yue.wikipedia.org
stopping test server
lib:announcements
✔ should return no announcement for inactive wiki
✔ should return one or more announcements for active wiki
lib:announcements:etc
✔ should return no image_url
✔ should return correct type
✔ countries is an array of strings
✔ should not deliver HTML in certain legacy iOS announcements fields
✔ iOS legacy fundraising announcement should have the proper platform ID
✔ iOS fundraising announcement should have the proper platform ID
✔ should deliver HTML in certain V2 announcements fields
✔ caption_HTML on iOS should be inside a paragraph
✔ caption_HTML on Android should not be inside a paragraph
✔ should return no image_url
✔ should return correct type
✔ countries is an array of strings
✔ should not deliver HTML in certain legacy iOS announcements fields
✔ iOS legacy fundraising announcement should have the proper platform ID
✔ iOS fundraising announcement should have the proper platform ID
✔ should deliver HTML in certain V2 announcements fields
✔ caption_HTML on iOS should be inside a paragraph
✔ caption_HTML on Android should not be inside a paragraph
✔ should return no image_url
✔ should return correct type
✔ countries is an array of strings
✔ should not deliver HTML in certain legacy iOS announcements fields
✔ iOS legacy fundraising announcement should have the proper platform ID
✔ iOS fundraising announcement should have the proper platform ID
✔ should deliver HTML in certain V2 announcements fields
✔ caption_HTML on iOS should be inside a paragraph
✔ caption_HTML on Android should not be inside a paragraph
✔ should return no image_url
✔ should return correct type
✔ countries is an array of strings
✔ should not deliver HTML in certain legacy iOS announcements fields
✔ iOS legacy fundraising announcement should have the proper platform ID
✔ iOS fundraising announcement should have the proper platform ID
✔ should deliver HTML in certain V2 announcements fields
✔ caption_HTML on iOS should be inside a paragraph
✔ caption_HTML on Android should not be inside a paragraph
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
.hasEnded
✔ invalid endTime
✔ endTime has passed
✔ endTime has not passed yet
announcements-unit-config
✔ all dates should be valid
MW core page HTML
✔ fetches the core page html output only with title in params
✔ fetches the core page html output with revision in params
featured-unit
✔ isSupported should return the correct boolean
✔ findPageTitle should find the first bold link: a inside b
✔ findPageTitle should find the first bold link: b inside a
✔ findPageTitle should return undefined if nothing found
featured-image-unit
✔ structureExtMetadataValue returns description for preferred lang if present
✔ structureExtMetadataValue falls back to en description if preferred lang not present
✔ structureExtMetadataValue returns lang undefined for type of value equals to string
✔ structureExtMetadataValue returns undefined for undefined input
news-unit
✔ news story constructed correctly (duplicate titles handled correctly)
✔ floating spans are removed
onthisday-unit
✔ eventsForYearListElements returns a WMFEvent for only year list elements
✔ Sort year list events in correct BC[E] aware manner
page title generation: titleForDayPageFromMonthDayNumberStrings
✔ 1 digit mm and 1 digit dd
✔ 0 padded mm and 1 digit dd
✔ 0 padded mm and 0 padded dd
day page URI generation: dayTitleForRequest
✔ returns expected title for 0 padded month and 2 digit day
✔ returns expected title for 2 digit month and 0 padded day
✔ returns expected title for 1 digit month and 1 digit day
selected page URI generation: selectedTitleForRequest
✔ returns expected title for 0 padded month and 2 digit day
✔ returns expected title for 2 digit month and 0 padded day
✔ returns expected title for 1 digit month and 1 digit day
anchor to WMFPage transforms: wmfPageFromAnchorElement
✔ WMFPage model object is correctly created from a topic anchor
✔ WMFPage model object is correctly created from a non-topic anchor
wmfEventFromListElement: WMFEvent model object is correctly created
✔ from a selected list element
✔ from a birth list element
✔ from an event list element
✔ from a death list element
✔ from a birth list element
✔ from a selected div element on zhwiki
✔ wmfEventFromListElement should return null for elements not describing events
wmfHolidayFromListElement: WMFHoliday model object is correctly created
✔ WMFHoliday model object is correctly created from a holiday list element
yearListElementRegEx
✔ rejects malformed BC strings
✔ accepts well formed BC strings
✔ accepts well formed BCE strings
✔ accepts well formed CE strings
✔ accepts well formed year strings (no BCE/AD/CE)
✔ accepts well formed AD strings
✔ extracts expected BC/BCE strings
✔ extracts expected BC/BCE strings in Chinese
✔ AD strings should not be negated
✔ rejects non year list strings
✔ rejects strings missing text
listElementsByHeadingID extracts expected number of births from
✔ DE fixture (49ms)
✔ EN fixture (43ms)
✔ AR fixture
✔ BS fixture
nested list element handling
✔ listElementsByHeadingID extracts expected number of holidays from EN fixture
✔ expected textContent for a list item NOT nested within another list item
✔ expected textContent for a list item nested within another list item
✔ expected textContent for list items nested within a year-dash list item
✔ expected textContent for list items nested within a year list item (no dash)
addPrefixFromAncestorListElementsToListElement
✔ expected extraction from ancestor year element
✔ expected extraction from multiline ancestor year element
✔ expected extraction from ancestor year element with dash
✔ expected extraction from ancestor year element with dash space
✔ expected extraction from multiline ancestor year element with dash
✔ expected extraction from multiline non-year ancestor
✔ expected extraction from double-nested list element
✔ expected extraction from triple-nested list element
✔ expected extraction from nested Russian list element with "год"
✔ Prefixed text content from ancestor element is escaped
isAnchorForYear
✔ correctly identifies anchor linking to year article
✔ correctly rejects anchor linking article starting with a year
✔ correctly rejects anchor linking article starting with a number
✔ correctly rejects anchor linking article not starting with a year
✔ correctly identifies anchor linking to year article with an era string
✔ correctly identifies anchor linking to year article with era string w/o space
non-article urls should be excluded
✔ exclude external url from WMFHoliday pages
✔ exclude external url from WMFEvent pages
✔ exclude redlinks from WMFEvent pages
style tags should be dropped
✔ exclude style tags
random
✔ pickBestResult should select best-scored title from sample
util
✔ promiseAwaitAll, ignoreRejected
✔ promiseAwaitAll, propagate rejected
removeDuplicateTitles
✔ deduplicates and applies update function
299 passing (57s)
1 pending
--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
"auditReportVersion": 2,
"vulnerabilities": {
"axios": {
"name": "axios",
"severity": "high",
"isDirect": true,
"via": [
{
"source": 1117574,
"name": "axios",
"dependency": "axios",
"title": "Axios: Authentication Bypass via Prototype Pollution Gadget in `validateStatus` Merge Strategy",
"url": "https://github.com/advisories/GHSA-w9j2-pvgh-6h63",
"severity": "moderate",
"cwe": [
"CWE-287",
"CWE-1321"
],
"cvss": {
"score": 4.8,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117576,
"name": "axios",
"dependency": "axios",
"title": "Axios: Incomplete Fix for CVE-2025-62718 — NO_PROXY Protection Bypassed via RFC 1122 Loopback Subnet (127.0.0.0/8) in Axios 1.15.0",
"url": "https://github.com/advisories/GHSA-pmwg-cvhr-8vh7",
"severity": "high",
"cwe": [
"CWE-183",
"CWE-441",
"CWE-918"
],
"cvss": {
"score": 7.2,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117577,
"name": "axios",
"dependency": "axios",
"title": "Axios: Invisible JSON Response Tampering via Prototype Pollution Gadget in `parseReviver`",
"url": "https://github.com/advisories/GHSA-3w6x-2g7m-8v23",
"severity": "moderate",
"cwe": [
"CWE-915",
"CWE-1321"
],
"cvss": {
"score": 6.5,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:N"
},
"range": ">=1.0.0 <1.15.2"
},
{
"source": 1117578,
"name": "axios",
"dependency": "axios",
"title": "Axios has prototype pollution read-side gadgets in HTTP adapter that allow credential injection and request hijacking",
"url": "https://github.com/advisories/GHSA-q8qp-cvcw-x6jj",
"severity": "high",
"cwe": [
"CWE-1321"
],
"cvss": {
"score": 7.4,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"
},
"range": ">=1.0.0 <1.15.2"
},
{
"source": 1117580,
"name": "axios",
"dependency": "axios",
"title": "Axios: Null Byte Injection via Reverse-Encoding in AxiosURLSearchParams",
"url": "https://github.com/advisories/GHSA-xhjh-pmcv-23jw",
"severity": "low",
"cwe": [
"CWE-116",
"CWE-626"
],
"cvss": {
"score": 3.7,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117581,
"name": "axios",
"dependency": "axios",
"title": "Axios: CRLF Injection in multipart/form-data body via unsanitized blob.type in formDataToStream",
"url": "https://github.com/advisories/GHSA-445q-vr5w-6q77",
"severity": "moderate",
"cwe": [
"CWE-93"
],
"cvss": {
"score": 5.3,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117583,
"name": "axios",
"dependency": "axios",
"title": "Axios: no_proxy bypass via IP alias allows SSRF",
"url": "https://github.com/advisories/GHSA-m7pr-hjqh-92cm",
"severity": "moderate",
"cwe": [
"CWE-918"
],
"cvss": {
"score": 6.8,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117585,
"name": "axios",
"dependency": "axios",
"title": "Axios: unbounded recursion in toFormData causes DoS via deeply nested request data",
"url": "https://github.com/advisories/GHSA-62hf-57xw-28j9",
"severity": "moderate",
"cwe": [
"CWE-674"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117587,
"name": "axios",
"dependency": "axios",
"title": "Axios' HTTP adapter-streamed uploads bypass maxBodyLength when maxRedirects: 0",
"url": "https://github.com/advisories/GHSA-5c9x-8gcm-mpgx",
"severity": "moderate",
"cwe": [
"CWE-770"
],
"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.0 <1.15.1"
},
{
"source": 1117589,
"name": "axios",
"dependency": "axios",
"title": "Axios: HTTP adapter streamed responses bypass maxContentLength",
"url": "https://github.com/advisories/GHSA-vf2m-468p-8v99",
"severity": "moderate",
"cwe": [
"CWE-770"
],
"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.0 <1.15.1"
},
{
"source": 1117591,
"name": "axios",
"dependency": "axios",
"title": "Axios: Prototype Pollution Gadgets - Response Tampering, Data Exfiltration, and Request Hijacking",
"url": "https://github.com/advisories/GHSA-pf86-5x62-jrwf",
"severity": "high",
"cwe": [
"CWE-1321"
],
"cvss": {
"score": 7.4,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117593,
"name": "axios",
"dependency": "axios",
"title": "Axios: Header Injection via Prototype Pollution",
"url": "https://github.com/advisories/GHSA-6chq-wfr3-2hj9",
"severity": "high",
"cwe": [
"CWE-113",
"CWE-1321"
],
"cvss": {
"score": 7.4,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117595,
"name": "axios",
"dependency": "axios",
"title": "Axios: XSRF Token Cross-Origin Leakage via Prototype Pollution Gadget in `withXSRFToken` Boolean Coercion",
"url": "https://github.com/advisories/GHSA-xx6v-rp6x-q39c",
"severity": "moderate",
"cwe": [
"CWE-183",
"CWE-201"
],
"cvss": {
"score": 5.4,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
}
],
"effects": [],
"range": "1.0.0 - 1.15.1",
"nodes": [
"node_modules/axios"
],
"fixAvailable": true
},
"cross-spawn": {
"name": "cross-spawn",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1104663,
"name": "cross-spawn",
"dependency": "cross-spawn",
"title": "Regular Expression Denial of Service (ReDoS) in cross-spawn",
"url": "https://github.com/advisories/GHSA-3xgq-45jj-v275",
"severity": "high",
"cwe": [
"CWE-1333"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
},
"range": "<6.0.6"
}
],
"effects": [
"pre-commit"
],
"range": "<6.0.6",
"nodes": [
"node_modules/pre-commit/node_modules/cross-spawn"
],
"fixAvailable": {
"name": "pre-commit",
"version": "2.0.0",
"isSemVerMajor": true
}
},
"form-data": {
"name": "form-data",
"severity": "critical",
"isDirect": false,
"via": [
{
"source": 1109540,
"name": "form-data",
"dependency": "form-data",
"title": "form-data uses unsafe random function in form-data for choosing boundary",
"url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4",
"severity": "critical",
"cwe": [
"CWE-330"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<2.5.4"
}
],
"effects": [
"request"
],
"range": "<2.5.4",
"nodes": [
"node_modules/request/node_modules/form-data"
],
"fixAvailable": false
},
"istanbul-lib-processinfo": {
"name": "istanbul-lib-processinfo",
"severity": "moderate",
"isDirect": false,
"via": [
"uuid"
],
"effects": [
"nyc"
],
"range": "*",
"nodes": [
"node_modules/istanbul-lib-processinfo"
],
"fixAvailable": {
"name": "nyc",
"version": "14.1.1",
"isSemVerMajor": true
}
},
"limitation": {
"name": "limitation",
"severity": "moderate",
"isDirect": false,
"via": [
"wikimedia-kad-fork"
],
"effects": [
"service-runner"
],
"range": ">=0.2.3",
"nodes": [
"node_modules/limitation"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
},
"mocha": {
"name": "mocha",
"severity": "high",
"isDirect": true,
"via": [
"serialize-javascript"
],
"effects": [],
"range": "8.0.0 - 12.0.0-beta-2",
"nodes": [
"node_modules/mocha"
],
"fixAvailable": {
"name": "mocha",
"version": "7.2.0",
"isSemVerMajor": true
}
},
"ms": {
"name": "ms",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1109573,
"name": "ms",
"dependency": "ms",
"title": "Vercel ms Inefficient Regular Expression Complexity vulnerability",
"url": "https://github.com/advisories/GHSA-w9mr-4mfr-499f",
"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": "<2.0.0"
}
],
"effects": [
"wikimedia-kad-fork"
],
"range": "<2.0.0",
"nodes": [
"node_modules/wikimedia-kad-fork/node_modules/ms"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
},
"nyc": {
"name": "nyc",
"severity": "moderate",
"isDirect": true,
"via": [
"istanbul-lib-processinfo"
],
"effects": [],
"range": ">=15.0.0-alpha.0",
"nodes": [
"node_modules/nyc"
],
"fixAvailable": {
"name": "nyc",
"version": "14.1.1",
"isSemVerMajor": true
}
},
"pre-commit": {
"name": "pre-commit",
"severity": "high",
"isDirect": true,
"via": [
"cross-spawn"
],
"effects": [],
"range": "1.1.0 - 1.2.2",
"nodes": [
"node_modules/pre-commit"
],
"fixAvailable": {
"name": "pre-commit",
"version": "2.0.0",
"isSemVerMajor": true
}
},
"preq": {
"name": "preq",
"severity": "high",
"isDirect": true,
"via": [
"request",
"requestretry"
],
"effects": [],
"range": "*",
"nodes": [
"node_modules/preq"
],
"fixAvailable": false
},
"qs": {
"name": "qs",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1113719,
"name": "qs",
"dependency": "qs",
"title": "qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion",
"url": "https://github.com/advisories/GHSA-6rw7-vpxm-498p",
"severity": "moderate",
"cwe": [
"CWE-20"
],
"cvss": {
"score": 3.7,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L"
},
"range": "<6.14.1"
}
],
"effects": [
"request"
],
"range": "<6.14.1",
"nodes": [
"node_modules/request/node_modules/qs"
],
"fixAvailable": false
},
"request": {
"name": "request",
"severity": "critical",
"isDirect": false,
"via": [
{
"source": 1096727,
"name": "request",
"dependency": "request",
"title": "Server-Side Request Forgery in Request",
"url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
"severity": "moderate",
"cwe": [
"CWE-918"
],
"cvss": {
"score": 6.1,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
},
"range": "<=2.88.2"
},
"form-data",
"qs",
"tough-cookie",
"uuid"
],
"effects": [
"preq",
"requestretry"
],
"range": "*",
"nodes": [
"node_modules/request"
],
"fixAvailable": false
},
"requestretry": {
"name": "requestretry",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1090420,
"name": "requestretry",
"dependency": "requestretry",
"title": "Cookie exposure in requestretry",
"url": "https://github.com/advisories/GHSA-hjp8-2cm3-cc45",
"severity": "high",
"cwe": [
"CWE-200"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"
},
"range": "<7.0.0"
},
"request"
],
"effects": [
"preq"
],
"range": "<=7.1.0",
"nodes": [
"node_modules/requestretry"
],
"fixAvailable": false
},
"serialize-javascript": {
"name": "serialize-javascript",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1113686,
"name": "serialize-javascript",
"dependency": "serialize-javascript",
"title": "Serialize JavaScript is Vulnerable to RCE via RegExp.flags and Date.prototype.toISOString()",
"url": "https://github.com/advisories/GHSA-5c6j-r48x-rmvq",
"severity": "high",
"cwe": [
"CWE-96"
],
"cvss": {
"score": 8.1,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"
},
"range": "<=7.0.2"
},
{
"source": 1115723,
"name": "serialize-javascript",
"dependency": "serialize-javascript",
"title": "Serialize JavaScript has CPU Exhaustion Denial of Service via crafted array-like objects",
"url": "https://github.com/advisories/GHSA-qj8w-gfj5-8c6v",
"severity": "moderate",
"cwe": [
"CWE-400",
"CWE-834"
],
"cvss": {
"score": 5.9,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
},
"range": "<7.0.5"
}
],
"effects": [
"mocha"
],
"range": "<=7.0.4",
"nodes": [
"node_modules/serialize-javascript"
],
"fixAvailable": {
"name": "mocha",
"version": "7.2.0",
"isSemVerMajor": true
}
},
"service-runner": {
"name": "service-runner",
"severity": "high",
"isDirect": true,
"via": [
"limitation",
"tar"
],
"effects": [],
"range": ">=3.0.0",
"nodes": [
"node_modules/service-runner"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
},
"swagger-router": {
"name": "swagger-router",
"severity": "moderate",
"isDirect": true,
"via": [
"uuid"
],
"effects": [],
"range": ">=0.7.4",
"nodes": [
"node_modules/swagger-router"
],
"fixAvailable": {
"name": "swagger-router",
"version": "0.7.3",
"isSemVerMajor": true
}
},
"tar": {
"name": "tar",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1097493,
"name": "tar",
"dependency": "tar",
"title": "Denial of service while parsing a tar file due to lack of folders count validation",
"url": "https://github.com/advisories/GHSA-f5x3-32g6-xq36",
"severity": "moderate",
"cwe": [
"CWE-400"
],
"cvss": {
"score": 6.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H"
},
"range": "<6.2.1"
},
{
"source": 1112659,
"name": "tar",
"dependency": "tar",
"title": "node-tar Vulnerable to Arbitrary File Creation/Overwrite via Hardlink Path Traversal",
"url": "https://github.com/advisories/GHSA-34x7-hfp2-rc4v",
"severity": "high",
"cwe": [
"CWE-22",
"CWE-59"
],
"cvss": {
"score": 8.2,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:N"
},
"range": "<7.5.7"
},
{
"source": 1113300,
"name": "tar",
"dependency": "tar",
"title": "node-tar is Vulnerable to Arbitrary File Overwrite and Symlink Poisoning via Insufficient Path Sanitization",
"url": "https://github.com/advisories/GHSA-8qq5-rm4j-mr97",
"severity": "high",
"cwe": [
"CWE-22"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<=7.5.2"
},
{
"source": 1113375,
"name": "tar",
"dependency": "tar",
"title": "Arbitrary File Read/Write via Hardlink Target Escape Through Symlink Chain in node-tar Extraction",
"url": "https://github.com/advisories/GHSA-83g3-92jg-28cx",
"severity": "high",
"cwe": [
"CWE-22"
],
"cvss": {
"score": 7.1,
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N"
},
"range": "<7.5.8"
},
{
"source": 1114200,
"name": "tar",
"dependency": "tar",
"title": "tar has Hardlink Path Traversal via Drive-Relative Linkpath",
"url": "https://github.com/advisories/GHSA-qffp-2rhf-9h96",
"severity": "high",
"cwe": [
"CWE-22",
"CWE-59"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<=7.5.9"
},
{
"source": 1114302,
"name": "tar",
"dependency": "tar",
"title": "node-tar Symlink Path Traversal via Drive-Relative Linkpath",
"url": "https://github.com/advisories/GHSA-9ppj-qmqm-q256",
"severity": "high",
"cwe": [
"CWE-22"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<=7.5.10"
},
{
"source": 1114680,
"name": "tar",
"dependency": "tar",
"title": "Race Condition in node-tar Path Reservations via Unicode Ligature Collisions on macOS APFS",
"url": "https://github.com/advisories/GHSA-r6q2-hw4h-h46w",
"severity": "high",
"cwe": [
"CWE-176",
"CWE-367"
],
"cvss": {
"score": 8.8,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:H/A:L"
},
"range": "<=7.5.3"
}
],
"effects": [
"service-runner"
],
"range": "<=7.5.10",
"nodes": [
"node_modules/tar"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
},
"tough-cookie": {
"name": "tough-cookie",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1097682,
"name": "tough-cookie",
"dependency": "tough-cookie",
"title": "tough-cookie Prototype Pollution vulnerability",
"url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3",
"severity": "moderate",
"cwe": [
"CWE-1321"
],
"cvss": {
"score": 6.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
},
"range": "<4.1.3"
}
],
"effects": [
"request"
],
"range": "<4.1.3",
"nodes": [
"node_modules/tough-cookie"
],
"fixAvailable": false
},
"uuid": {
"name": "uuid",
"severity": "moderate",
"isDirect": true,
"via": [
{
"source": 1116970,
"name": "uuid",
"dependency": "uuid",
"title": "uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided",
"url": "https://github.com/advisories/GHSA-w5hq-g745-h8pq",
"severity": "moderate",
"cwe": [
"CWE-787",
"CWE-1285"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<14.0.0"
}
],
"effects": [
"istanbul-lib-processinfo",
"request",
"swagger-router"
],
"range": "<14.0.0",
"nodes": [
"node_modules/istanbul-lib-processinfo/node_modules/uuid",
"node_modules/request/node_modules/uuid",
"node_modules/swagger-router/node_modules/uuid",
"node_modules/uuid"
],
"fixAvailable": {
"name": "nyc",
"version": "14.1.1",
"isSemVerMajor": true
}
},
"wikimedia-kad-fork": {
"name": "wikimedia-kad-fork",
"severity": "moderate",
"isDirect": false,
"via": [
"ms"
],
"effects": [
"limitation"
],
"range": "*",
"nodes": [
"node_modules/wikimedia-kad-fork"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
}
},
"metadata": {
"vulnerabilities": {
"info": 0,
"low": 0,
"moderate": 9,
"high": 9,
"critical": 2,
"total": 20
},
"dependencies": {
"prod": 223,
"dev": 436,
"optional": 13,
"peer": 1,
"peerOptional": 0,
"total": 670
}
}
}
--- end ---
Attempting to npm audit fix
$ /usr/bin/npm audit fix --dry-run --only=dev --json
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
--- stdout ---
{
"added": 5,
"removed": 0,
"changed": 1,
"audited": 671,
"funding": 119,
"audit": {
"auditReportVersion": 2,
"vulnerabilities": {
"axios": {
"name": "axios",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1117574,
"name": "axios",
"dependency": "axios",
"title": "Axios: Authentication Bypass via Prototype Pollution Gadget in `validateStatus` Merge Strategy",
"url": "https://github.com/advisories/GHSA-w9j2-pvgh-6h63",
"severity": "moderate",
"cwe": [
"CWE-287",
"CWE-1321"
],
"cvss": {
"score": 4.8,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117576,
"name": "axios",
"dependency": "axios",
"title": "Axios: Incomplete Fix for CVE-2025-62718 — NO_PROXY Protection Bypassed via RFC 1122 Loopback Subnet (127.0.0.0/8) in Axios 1.15.0",
"url": "https://github.com/advisories/GHSA-pmwg-cvhr-8vh7",
"severity": "high",
"cwe": [
"CWE-183",
"CWE-441",
"CWE-918"
],
"cvss": {
"score": 7.2,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117577,
"name": "axios",
"dependency": "axios",
"title": "Axios: Invisible JSON Response Tampering via Prototype Pollution Gadget in `parseReviver`",
"url": "https://github.com/advisories/GHSA-3w6x-2g7m-8v23",
"severity": "moderate",
"cwe": [
"CWE-915",
"CWE-1321"
],
"cvss": {
"score": 6.5,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:N"
},
"range": ">=1.0.0 <1.15.2"
},
{
"source": 1117578,
"name": "axios",
"dependency": "axios",
"title": "Axios has prototype pollution read-side gadgets in HTTP adapter that allow credential injection and request hijacking",
"url": "https://github.com/advisories/GHSA-q8qp-cvcw-x6jj",
"severity": "high",
"cwe": [
"CWE-1321"
],
"cvss": {
"score": 7.4,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"
},
"range": ">=1.0.0 <1.15.2"
},
{
"source": 1117580,
"name": "axios",
"dependency": "axios",
"title": "Axios: Null Byte Injection via Reverse-Encoding in AxiosURLSearchParams",
"url": "https://github.com/advisories/GHSA-xhjh-pmcv-23jw",
"severity": "low",
"cwe": [
"CWE-116",
"CWE-626"
],
"cvss": {
"score": 3.7,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117581,
"name": "axios",
"dependency": "axios",
"title": "Axios: CRLF Injection in multipart/form-data body via unsanitized blob.type in formDataToStream",
"url": "https://github.com/advisories/GHSA-445q-vr5w-6q77",
"severity": "moderate",
"cwe": [
"CWE-93"
],
"cvss": {
"score": 5.3,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117583,
"name": "axios",
"dependency": "axios",
"title": "Axios: no_proxy bypass via IP alias allows SSRF",
"url": "https://github.com/advisories/GHSA-m7pr-hjqh-92cm",
"severity": "moderate",
"cwe": [
"CWE-918"
],
"cvss": {
"score": 6.8,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117585,
"name": "axios",
"dependency": "axios",
"title": "Axios: unbounded recursion in toFormData causes DoS via deeply nested request data",
"url": "https://github.com/advisories/GHSA-62hf-57xw-28j9",
"severity": "moderate",
"cwe": [
"CWE-674"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117587,
"name": "axios",
"dependency": "axios",
"title": "Axios' HTTP adapter-streamed uploads bypass maxBodyLength when maxRedirects: 0",
"url": "https://github.com/advisories/GHSA-5c9x-8gcm-mpgx",
"severity": "moderate",
"cwe": [
"CWE-770"
],
"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.0 <1.15.1"
},
{
"source": 1117589,
"name": "axios",
"dependency": "axios",
"title": "Axios: HTTP adapter streamed responses bypass maxContentLength",
"url": "https://github.com/advisories/GHSA-vf2m-468p-8v99",
"severity": "moderate",
"cwe": [
"CWE-770"
],
"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.0 <1.15.1"
},
{
"source": 1117591,
"name": "axios",
"dependency": "axios",
"title": "Axios: Prototype Pollution Gadgets - Response Tampering, Data Exfiltration, and Request Hijacking",
"url": "https://github.com/advisories/GHSA-pf86-5x62-jrwf",
"severity": "high",
"cwe": [
"CWE-1321"
],
"cvss": {
"score": 7.4,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117593,
"name": "axios",
"dependency": "axios",
"title": "Axios: Header Injection via Prototype Pollution",
"url": "https://github.com/advisories/GHSA-6chq-wfr3-2hj9",
"severity": "high",
"cwe": [
"CWE-113",
"CWE-1321"
],
"cvss": {
"score": 7.4,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"
},
"range": ">=1.0.0 <1.15.1"
},
{
"source": 1117595,
"name": "axios",
"dependency": "axios",
"title": "Axios: XSRF Token Cross-Origin Leakage via Prototype Pollution Gadget in `withXSRFToken` Boolean Coercion",
"url": "https://github.com/advisories/GHSA-xx6v-rp6x-q39c",
"severity": "moderate",
"cwe": [
"CWE-183",
"CWE-201"
],
"cvss": {
"score": 5.4,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N"
},
"range": ">=1.0.0 <1.15.1"
}
],
"effects": [],
"range": "1.0.0 - 1.15.1",
"nodes": [
""
],
"fixAvailable": true
},
"cross-spawn": {
"name": "cross-spawn",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1104663,
"name": "cross-spawn",
"dependency": "cross-spawn",
"title": "Regular Expression Denial of Service (ReDoS) in cross-spawn",
"url": "https://github.com/advisories/GHSA-3xgq-45jj-v275",
"severity": "high",
"cwe": [
"CWE-1333"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
},
"range": "<6.0.6"
}
],
"effects": [
"pre-commit"
],
"range": "<6.0.6",
"nodes": [
"node_modules/pre-commit/node_modules/cross-spawn"
],
"fixAvailable": {
"name": "pre-commit",
"version": "2.0.0",
"isSemVerMajor": true
}
},
"form-data": {
"name": "form-data",
"severity": "critical",
"isDirect": false,
"via": [
{
"source": 1109540,
"name": "form-data",
"dependency": "form-data",
"title": "form-data uses unsafe random function in form-data for choosing boundary",
"url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4",
"severity": "critical",
"cwe": [
"CWE-330"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<2.5.4"
}
],
"effects": [
"request"
],
"range": "<2.5.4",
"nodes": [
"node_modules/request/node_modules/form-data"
],
"fixAvailable": false
},
"istanbul-lib-processinfo": {
"name": "istanbul-lib-processinfo",
"severity": "moderate",
"isDirect": false,
"via": [
"uuid"
],
"effects": [
"nyc"
],
"range": "*",
"nodes": [
"node_modules/istanbul-lib-processinfo"
],
"fixAvailable": {
"name": "nyc",
"version": "14.1.1",
"isSemVerMajor": true
}
},
"limitation": {
"name": "limitation",
"severity": "moderate",
"isDirect": false,
"via": [
"wikimedia-kad-fork"
],
"effects": [
"service-runner"
],
"range": ">=0.2.3",
"nodes": [
"node_modules/limitation"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
},
"mocha": {
"name": "mocha",
"severity": "high",
"isDirect": true,
"via": [
"serialize-javascript"
],
"effects": [],
"range": "8.0.0 - 12.0.0-beta-2",
"nodes": [
"node_modules/mocha"
],
"fixAvailable": {
"name": "mocha",
"version": "7.2.0",
"isSemVerMajor": true
}
},
"ms": {
"name": "ms",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1109573,
"name": "ms",
"dependency": "ms",
"title": "Vercel ms Inefficient Regular Expression Complexity vulnerability",
"url": "https://github.com/advisories/GHSA-w9mr-4mfr-499f",
"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": "<2.0.0"
}
],
"effects": [
"wikimedia-kad-fork"
],
"range": "<2.0.0",
"nodes": [
"node_modules/wikimedia-kad-fork/node_modules/ms"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
},
"nyc": {
"name": "nyc",
"severity": "moderate",
"isDirect": true,
"via": [
"istanbul-lib-processinfo"
],
"effects": [],
"range": ">=15.0.0-alpha.0",
"nodes": [
"node_modules/nyc"
],
"fixAvailable": {
"name": "nyc",
"version": "14.1.1",
"isSemVerMajor": true
}
},
"pre-commit": {
"name": "pre-commit",
"severity": "high",
"isDirect": true,
"via": [
"cross-spawn"
],
"effects": [],
"range": "1.1.0 - 1.2.2",
"nodes": [
"node_modules/pre-commit"
],
"fixAvailable": {
"name": "pre-commit",
"version": "2.0.0",
"isSemVerMajor": true
}
},
"preq": {
"name": "preq",
"severity": "high",
"isDirect": true,
"via": [
"request",
"requestretry"
],
"effects": [],
"range": "*",
"nodes": [
"node_modules/preq"
],
"fixAvailable": false
},
"qs": {
"name": "qs",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1113719,
"name": "qs",
"dependency": "qs",
"title": "qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion",
"url": "https://github.com/advisories/GHSA-6rw7-vpxm-498p",
"severity": "moderate",
"cwe": [
"CWE-20"
],
"cvss": {
"score": 3.7,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L"
},
"range": "<6.14.1"
}
],
"effects": [
"request"
],
"range": "<6.14.1",
"nodes": [
"node_modules/request/node_modules/qs"
],
"fixAvailable": false
},
"request": {
"name": "request",
"severity": "critical",
"isDirect": false,
"via": [
{
"source": 1096727,
"name": "request",
"dependency": "request",
"title": "Server-Side Request Forgery in Request",
"url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
"severity": "moderate",
"cwe": [
"CWE-918"
],
"cvss": {
"score": 6.1,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
},
"range": "<=2.88.2"
},
"form-data",
"qs",
"tough-cookie",
"uuid"
],
"effects": [
"preq",
"requestretry"
],
"range": "*",
"nodes": [
"node_modules/request"
],
"fixAvailable": false
},
"requestretry": {
"name": "requestretry",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1090420,
"name": "requestretry",
"dependency": "requestretry",
"title": "Cookie exposure in requestretry",
"url": "https://github.com/advisories/GHSA-hjp8-2cm3-cc45",
"severity": "high",
"cwe": [
"CWE-200"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"
},
"range": "<7.0.0"
},
"request"
],
"effects": [
"preq"
],
"range": "<=7.1.0",
"nodes": [
"node_modules/requestretry"
],
"fixAvailable": false
},
"serialize-javascript": {
"name": "serialize-javascript",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1113686,
"name": "serialize-javascript",
"dependency": "serialize-javascript",
"title": "Serialize JavaScript is Vulnerable to RCE via RegExp.flags and Date.prototype.toISOString()",
"url": "https://github.com/advisories/GHSA-5c6j-r48x-rmvq",
"severity": "high",
"cwe": [
"CWE-96"
],
"cvss": {
"score": 8.1,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"
},
"range": "<=7.0.2"
},
{
"source": 1115723,
"name": "serialize-javascript",
"dependency": "serialize-javascript",
"title": "Serialize JavaScript has CPU Exhaustion Denial of Service via crafted array-like objects",
"url": "https://github.com/advisories/GHSA-qj8w-gfj5-8c6v",
"severity": "moderate",
"cwe": [
"CWE-400",
"CWE-834"
],
"cvss": {
"score": 5.9,
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
},
"range": "<7.0.5"
}
],
"effects": [
"mocha"
],
"range": "<=7.0.4",
"nodes": [
"node_modules/serialize-javascript"
],
"fixAvailable": {
"name": "mocha",
"version": "7.2.0",
"isSemVerMajor": true
}
},
"service-runner": {
"name": "service-runner",
"severity": "high",
"isDirect": true,
"via": [
"limitation",
"tar"
],
"effects": [],
"range": ">=3.0.0",
"nodes": [
"node_modules/service-runner"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
},
"swagger-router": {
"name": "swagger-router",
"severity": "moderate",
"isDirect": true,
"via": [
"uuid"
],
"effects": [],
"range": ">=0.7.4",
"nodes": [
"node_modules/swagger-router"
],
"fixAvailable": {
"name": "swagger-router",
"version": "0.7.3",
"isSemVerMajor": true
}
},
"tar": {
"name": "tar",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1097493,
"name": "tar",
"dependency": "tar",
"title": "Denial of service while parsing a tar file due to lack of folders count validation",
"url": "https://github.com/advisories/GHSA-f5x3-32g6-xq36",
"severity": "moderate",
"cwe": [
"CWE-400"
],
"cvss": {
"score": 6.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H"
},
"range": "<6.2.1"
},
{
"source": 1112659,
"name": "tar",
"dependency": "tar",
"title": "node-tar Vulnerable to Arbitrary File Creation/Overwrite via Hardlink Path Traversal",
"url": "https://github.com/advisories/GHSA-34x7-hfp2-rc4v",
"severity": "high",
"cwe": [
"CWE-22",
"CWE-59"
],
"cvss": {
"score": 8.2,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:N"
},
"range": "<7.5.7"
},
{
"source": 1113300,
"name": "tar",
"dependency": "tar",
"title": "node-tar is Vulnerable to Arbitrary File Overwrite and Symlink Poisoning via Insufficient Path Sanitization",
"url": "https://github.com/advisories/GHSA-8qq5-rm4j-mr97",
"severity": "high",
"cwe": [
"CWE-22"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<=7.5.2"
},
{
"source": 1113375,
"name": "tar",
"dependency": "tar",
"title": "Arbitrary File Read/Write via Hardlink Target Escape Through Symlink Chain in node-tar Extraction",
"url": "https://github.com/advisories/GHSA-83g3-92jg-28cx",
"severity": "high",
"cwe": [
"CWE-22"
],
"cvss": {
"score": 7.1,
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N"
},
"range": "<7.5.8"
},
{
"source": 1114200,
"name": "tar",
"dependency": "tar",
"title": "tar has Hardlink Path Traversal via Drive-Relative Linkpath",
"url": "https://github.com/advisories/GHSA-qffp-2rhf-9h96",
"severity": "high",
"cwe": [
"CWE-22",
"CWE-59"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<=7.5.9"
},
{
"source": 1114302,
"name": "tar",
"dependency": "tar",
"title": "node-tar Symlink Path Traversal via Drive-Relative Linkpath",
"url": "https://github.com/advisories/GHSA-9ppj-qmqm-q256",
"severity": "high",
"cwe": [
"CWE-22"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<=7.5.10"
},
{
"source": 1114680,
"name": "tar",
"dependency": "tar",
"title": "Race Condition in node-tar Path Reservations via Unicode Ligature Collisions on macOS APFS",
"url": "https://github.com/advisories/GHSA-r6q2-hw4h-h46w",
"severity": "high",
"cwe": [
"CWE-176",
"CWE-367"
],
"cvss": {
"score": 8.8,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:H/A:L"
},
"range": "<=7.5.3"
}
],
"effects": [
"service-runner"
],
"range": "<=7.5.10",
"nodes": [
"node_modules/tar"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
},
"tough-cookie": {
"name": "tough-cookie",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1097682,
"name": "tough-cookie",
"dependency": "tough-cookie",
"title": "tough-cookie Prototype Pollution vulnerability",
"url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3",
"severity": "moderate",
"cwe": [
"CWE-1321"
],
"cvss": {
"score": 6.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
},
"range": "<4.1.3"
}
],
"effects": [
"request"
],
"range": "<4.1.3",
"nodes": [
"node_modules/tough-cookie"
],
"fixAvailable": false
},
"uuid": {
"name": "uuid",
"severity": "moderate",
"isDirect": true,
"via": [
{
"source": 1116970,
"name": "uuid",
"dependency": "uuid",
"title": "uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided",
"url": "https://github.com/advisories/GHSA-w5hq-g745-h8pq",
"severity": "moderate",
"cwe": [
"CWE-787",
"CWE-1285"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": "<14.0.0"
}
],
"effects": [
"istanbul-lib-processinfo",
"request",
"swagger-router"
],
"range": "<14.0.0",
"nodes": [
"node_modules/istanbul-lib-processinfo/node_modules/uuid",
"node_modules/request/node_modules/uuid",
"node_modules/swagger-router/node_modules/uuid",
"node_modules/uuid"
],
"fixAvailable": {
"name": "nyc",
"version": "14.1.1",
"isSemVerMajor": true
}
},
"wikimedia-kad-fork": {
"name": "wikimedia-kad-fork",
"severity": "moderate",
"isDirect": false,
"via": [
"ms"
],
"effects": [
"limitation"
],
"range": "*",
"nodes": [
"node_modules/wikimedia-kad-fork"
],
"fixAvailable": {
"name": "service-runner",
"version": "2.9.0",
"isSemVerMajor": true
}
}
},
"metadata": {
"vulnerabilities": {
"info": 0,
"low": 0,
"moderate": 9,
"high": 9,
"critical": 2,
"total": 20
},
"dependencies": {
"prod": 223,
"dev": 436,
"optional": 13,
"peer": 1,
"peerOptional": 0,
"total": 670
}
}
}
}
--- end ---
{"added": 5, "removed": 0, "changed": 1, "audited": 671, "funding": 119, "audit": {"auditReportVersion": 2, "vulnerabilities": {"axios": {"name": "axios", "severity": "high", "isDirect": false, "via": [{"source": 1117574, "name": "axios", "dependency": "axios", "title": "Axios: Authentication Bypass via Prototype Pollution Gadget in `validateStatus` Merge Strategy", "url": "https://github.com/advisories/GHSA-w9j2-pvgh-6h63", "severity": "moderate", "cwe": ["CWE-287", "CWE-1321"], "cvss": {"score": 4.8, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N"}, "range": ">=1.0.0 <1.15.1"}, {"source": 1117576, "name": "axios", "dependency": "axios", "title": "Axios: Incomplete Fix for CVE-2025-62718 \u2014 NO_PROXY Protection Bypassed via RFC 1122 Loopback Subnet (127.0.0.0/8) in Axios 1.15.0", "url": "https://github.com/advisories/GHSA-pmwg-cvhr-8vh7", "severity": "high", "cwe": ["CWE-183", "CWE-441", "CWE-918"], "cvss": {"score": 7.2, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N"}, "range": ">=1.0.0 <1.15.1"}, {"source": 1117577, "name": "axios", "dependency": "axios", "title": "Axios: Invisible JSON Response Tampering via Prototype Pollution Gadget in `parseReviver`", "url": "https://github.com/advisories/GHSA-3w6x-2g7m-8v23", "severity": "moderate", "cwe": ["CWE-915", "CWE-1321"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:N"}, "range": ">=1.0.0 <1.15.2"}, {"source": 1117578, "name": "axios", "dependency": "axios", "title": "Axios has prototype pollution read-side gadgets in HTTP adapter that allow credential injection and request hijacking", "url": "https://github.com/advisories/GHSA-q8qp-cvcw-x6jj", "severity": "high", "cwe": ["CWE-1321"], "cvss": {"score": 7.4, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"}, "range": ">=1.0.0 <1.15.2"}, {"source": 1117580, "name": "axios", "dependency": "axios", "title": "Axios: Null Byte Injection via Reverse-Encoding in AxiosURLSearchParams", "url": "https://github.com/advisories/GHSA-xhjh-pmcv-23jw", "severity": "low", "cwe": ["CWE-116", "CWE-626"], "cvss": {"score": 3.7, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N"}, "range": ">=1.0.0 <1.15.1"}, {"source": 1117581, "name": "axios", "dependency": "axios", "title": "Axios: CRLF Injection in multipart/form-data body via unsanitized blob.type in formDataToStream", "url": "https://github.com/advisories/GHSA-445q-vr5w-6q77", "severity": "moderate", "cwe": ["CWE-93"], "cvss": {"score": 5.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N"}, "range": ">=1.0.0 <1.15.1"}, {"source": 1117583, "name": "axios", "dependency": "axios", "title": "Axios: no_proxy bypass via IP alias allows SSRF", "url": "https://github.com/advisories/GHSA-m7pr-hjqh-92cm", "severity": "moderate", "cwe": ["CWE-918"], "cvss": {"score": 6.8, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N"}, "range": ">=1.0.0 <1.15.1"}, {"source": 1117585, "name": "axios", "dependency": "axios", "title": "Axios: unbounded recursion in toFormData causes DoS via deeply nested request data", "url": "https://github.com/advisories/GHSA-62hf-57xw-28j9", "severity": "moderate", "cwe": ["CWE-674"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=1.0.0 <1.15.1"}, {"source": 1117587, "name": "axios", "dependency": "axios", "title": "Axios' HTTP adapter-streamed uploads bypass maxBodyLength when maxRedirects: 0", "url": "https://github.com/advisories/GHSA-5c9x-8gcm-mpgx", "severity": "moderate", "cwe": ["CWE-770"], "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.0 <1.15.1"}, {"source": 1117589, "name": "axios", "dependency": "axios", "title": "Axios: HTTP adapter streamed responses bypass maxContentLength", "url": "https://github.com/advisories/GHSA-vf2m-468p-8v99", "severity": "moderate", "cwe": ["CWE-770"], "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.0 <1.15.1"}, {"source": 1117591, "name": "axios", "dependency": "axios", "title": "Axios: Prototype Pollution Gadgets - Response Tampering, Data Exfiltration, and Request Hijacking", "url": "https://github.com/advisories/GHSA-pf86-5x62-jrwf", "severity": "high", "cwe": ["CWE-1321"], "cvss": {"score": 7.4, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"}, "range": ">=1.0.0 <1.15.1"}, {"source": 1117593, "name": "axios", "dependency": "axios", "title": "Axios: Header Injection via Prototype Pollution", "url": "https://github.com/advisories/GHSA-6chq-wfr3-2hj9", "severity": "high", "cwe": ["CWE-113", "CWE-1321"], "cvss": {"score": 7.4, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"}, "range": ">=1.0.0 <1.15.1"}, {"source": 1117595, "name": "axios", "dependency": "axios", "title": "Axios: XSRF Token Cross-Origin Leakage via Prototype Pollution Gadget in `withXSRFToken` Boolean Coercion", "url": "https://github.com/advisories/GHSA-xx6v-rp6x-q39c", "severity": "moderate", "cwe": ["CWE-183", "CWE-201"], "cvss": {"score": 5.4, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N"}, "range": ">=1.0.0 <1.15.1"}], "effects": [], "range": "1.0.0 - 1.15.1", "nodes": [""], "fixAvailable": true}, "cross-spawn": {"name": "cross-spawn", "severity": "high", "isDirect": false, "via": [{"source": 1104663, "name": "cross-spawn", "dependency": "cross-spawn", "title": "Regular Expression Denial of Service (ReDoS) in cross-spawn", "url": "https://github.com/advisories/GHSA-3xgq-45jj-v275", "severity": "high", "cwe": ["CWE-1333"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<6.0.6"}], "effects": ["pre-commit"], "range": "<6.0.6", "nodes": ["node_modules/pre-commit/node_modules/cross-spawn"], "fixAvailable": {"name": "pre-commit", "version": "2.0.0", "isSemVerMajor": true}}, "form-data": {"name": "form-data", "severity": "critical", "isDirect": false, "via": [{"source": 1109540, "name": "form-data", "dependency": "form-data", "title": "form-data uses unsafe random function in form-data for choosing boundary", "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4", "severity": "critical", "cwe": ["CWE-330"], "cvss": {"score": 0, "vectorString": null}, "range": "<2.5.4"}], "effects": ["request"], "range": "<2.5.4", "nodes": ["node_modules/request/node_modules/form-data"], "fixAvailable": false}, "istanbul-lib-processinfo": {"name": "istanbul-lib-processinfo", "severity": "moderate", "isDirect": false, "via": ["uuid"], "effects": ["nyc"], "range": "*", "nodes": ["node_modules/istanbul-lib-processinfo"], "fixAvailable": {"name": "nyc", "version": "14.1.1", "isSemVerMajor": true}}, "limitation": {"name": "limitation", "severity": "moderate", "isDirect": false, "via": ["wikimedia-kad-fork"], "effects": ["service-runner"], "range": ">=0.2.3", "nodes": ["node_modules/limitation"], "fixAvailable": {"name": "service-runner", "version": "2.9.0", "isSemVerMajor": true}}, "mocha": {"name": "mocha", "severity": "high", "isDirect": true, "via": ["serialize-javascript"], "effects": [], "range": "8.0.0 - 12.0.0-beta-2", "nodes": ["node_modules/mocha"], "fixAvailable": {"name": "mocha", "version": "7.2.0", "isSemVerMajor": true}}, "ms": {"name": "ms", "severity": "moderate", "isDirect": false, "via": [{"source": 1109573, "name": "ms", "dependency": "ms", "title": "Vercel ms Inefficient Regular Expression Complexity vulnerability", "url": "https://github.com/advisories/GHSA-w9mr-4mfr-499f", "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": "<2.0.0"}], "effects": ["wikimedia-kad-fork"], "range": "<2.0.0", "nodes": ["node_modules/wikimedia-kad-fork/node_modules/ms"], "fixAvailable": {"name": "service-runner", "version": "2.9.0", "isSemVerMajor": true}}, "nyc": {"name": "nyc", "severity": "moderate", "isDirect": true, "via": ["istanbul-lib-processinfo"], "effects": [], "range": ">=15.0.0-alpha.0", "nodes": ["node_modules/nyc"], "fixAvailable": {"name": "nyc", "version": "14.1.1", "isSemVerMajor": true}}, "pre-commit": {"name": "pre-commit", "severity": "high", "isDirect": true, "via": ["cross-spawn"], "effects": [], "range": "1.1.0 - 1.2.2", "nodes": ["node_modules/pre-commit"], "fixAvailable": {"name": "pre-commit", "version": "2.0.0", "isSemVerMajor": true}}, "preq": {"name": "preq", "severity": "high", "isDirect": true, "via": ["request", "requestretry"], "effects": [], "range": "*", "nodes": ["node_modules/preq"], "fixAvailable": false}, "qs": {"name": "qs", "severity": "moderate", "isDirect": false, "via": [{"source": 1113719, "name": "qs", "dependency": "qs", "title": "qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion", "url": "https://github.com/advisories/GHSA-6rw7-vpxm-498p", "severity": "moderate", "cwe": ["CWE-20"], "cvss": {"score": 3.7, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L"}, "range": "<6.14.1"}], "effects": ["request"], "range": "<6.14.1", "nodes": ["node_modules/request/node_modules/qs"], "fixAvailable": false}, "request": {"name": "request", "severity": "critical", "isDirect": false, "via": [{"source": 1096727, "name": "request", "dependency": "request", "title": "Server-Side Request Forgery in Request", "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6", "severity": "moderate", "cwe": ["CWE-918"], "cvss": {"score": 6.1, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"}, "range": "<=2.88.2"}, "form-data", "qs", "tough-cookie", "uuid"], "effects": ["preq", "requestretry"], "range": "*", "nodes": ["node_modules/request"], "fixAvailable": false}, "requestretry": {"name": "requestretry", "severity": "high", "isDirect": false, "via": [{"source": 1090420, "name": "requestretry", "dependency": "requestretry", "title": "Cookie exposure in requestretry", "url": "https://github.com/advisories/GHSA-hjp8-2cm3-cc45", "severity": "high", "cwe": ["CWE-200"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"}, "range": "<7.0.0"}, "request"], "effects": ["preq"], "range": "<=7.1.0", "nodes": ["node_modules/requestretry"], "fixAvailable": false}, "serialize-javascript": {"name": "serialize-javascript", "severity": "high", "isDirect": false, "via": [{"source": 1113686, "name": "serialize-javascript", "dependency": "serialize-javascript", "title": "Serialize JavaScript is Vulnerable to RCE via RegExp.flags and Date.prototype.toISOString()", "url": "https://github.com/advisories/GHSA-5c6j-r48x-rmvq", "severity": "high", "cwe": ["CWE-96"], "cvss": {"score": 8.1, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"}, "range": "<=7.0.2"}, {"source": 1115723, "name": "serialize-javascript", "dependency": "serialize-javascript", "title": "Serialize JavaScript has CPU Exhaustion Denial of Service via crafted array-like objects", "url": "https://github.com/advisories/GHSA-qj8w-gfj5-8c6v", "severity": "moderate", "cwe": ["CWE-400", "CWE-834"], "cvss": {"score": 5.9, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<7.0.5"}], "effects": ["mocha"], "range": "<=7.0.4", "nodes": ["node_modules/serialize-javascript"], "fixAvailable": {"name": "mocha", "version": "7.2.0", "isSemVerMajor": true}}, "service-runner": {"name": "service-runner", "severity": "high", "isDirect": true, "via": ["limitation", "tar"], "effects": [], "range": ">=3.0.0", "nodes": ["node_modules/service-runner"], "fixAvailable": {"name": "service-runner", "version": "2.9.0", "isSemVerMajor": true}}, "swagger-router": {"name": "swagger-router", "severity": "moderate", "isDirect": true, "via": ["uuid"], "effects": [], "range": ">=0.7.4", "nodes": ["node_modules/swagger-router"], "fixAvailable": {"name": "swagger-router", "version": "0.7.3", "isSemVerMajor": true}}, "tar": {"name": "tar", "severity": "high", "isDirect": false, "via": [{"source": 1097493, "name": "tar", "dependency": "tar", "title": "Denial of service while parsing a tar file due to lack of folders count validation", "url": "https://github.com/advisories/GHSA-f5x3-32g6-xq36", "severity": "moderate", "cwe": ["CWE-400"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H"}, "range": "<6.2.1"}, {"source": 1112659, "name": "tar", "dependency": "tar", "title": "node-tar Vulnerable to Arbitrary File Creation/Overwrite via Hardlink Path Traversal", "url": "https://github.com/advisories/GHSA-34x7-hfp2-rc4v", "severity": "high", "cwe": ["CWE-22", "CWE-59"], "cvss": {"score": 8.2, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:N"}, "range": "<7.5.7"}, {"source": 1113300, "name": "tar", "dependency": "tar", "title": "node-tar is Vulnerable to Arbitrary File Overwrite and Symlink Poisoning via Insufficient Path Sanitization", "url": "https://github.com/advisories/GHSA-8qq5-rm4j-mr97", "severity": "high", "cwe": ["CWE-22"], "cvss": {"score": 0, "vectorString": null}, "range": "<=7.5.2"}, {"source": 1113375, "name": "tar", "dependency": "tar", "title": "Arbitrary File Read/Write via Hardlink Target Escape Through Symlink Chain in node-tar Extraction", "url": "https://github.com/advisories/GHSA-83g3-92jg-28cx", "severity": "high", "cwe": ["CWE-22"], "cvss": {"score": 7.1, "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N"}, "range": "<7.5.8"}, {"source": 1114200, "name": "tar", "dependency": "tar", "title": "tar has Hardlink Path Traversal via Drive-Relative Linkpath", "url": "https://github.com/advisories/GHSA-qffp-2rhf-9h96", "severity": "high", "cwe": ["CWE-22", "CWE-59"], "cvss": {"score": 0, "vectorString": null}, "range": "<=7.5.9"}, {"source": 1114302, "name": "tar", "dependency": "tar", "title": "node-tar Symlink Path Traversal via Drive-Relative Linkpath", "url": "https://github.com/advisories/GHSA-9ppj-qmqm-q256", "severity": "high", "cwe": ["CWE-22"], "cvss": {"score": 0, "vectorString": null}, "range": "<=7.5.10"}, {"source": 1114680, "name": "tar", "dependency": "tar", "title": "Race Condition in node-tar Path Reservations via Unicode Ligature Collisions on macOS APFS", "url": "https://github.com/advisories/GHSA-r6q2-hw4h-h46w", "severity": "high", "cwe": ["CWE-176", "CWE-367"], "cvss": {"score": 8.8, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:H/A:L"}, "range": "<=7.5.3"}], "effects": ["service-runner"], "range": "<=7.5.10", "nodes": ["node_modules/tar"], "fixAvailable": {"name": "service-runner", "version": "2.9.0", "isSemVerMajor": true}}, "tough-cookie": {"name": "tough-cookie", "severity": "moderate", "isDirect": false, "via": [{"source": 1097682, "name": "tough-cookie", "dependency": "tough-cookie", "title": "tough-cookie Prototype Pollution vulnerability", "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3", "severity": "moderate", "cwe": ["CWE-1321"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"}, "range": "<4.1.3"}], "effects": ["request"], "range": "<4.1.3", "nodes": ["node_modules/tough-cookie"], "fixAvailable": false}, "uuid": {"name": "uuid", "severity": "moderate", "isDirect": true, "via": [{"source": 1116970, "name": "uuid", "dependency": "uuid", "title": "uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided", "url": "https://github.com/advisories/GHSA-w5hq-g745-h8pq", "severity": "moderate", "cwe": ["CWE-787", "CWE-1285"], "cvss": {"score": 0, "vectorString": null}, "range": "<14.0.0"}], "effects": ["istanbul-lib-processinfo", "request", "swagger-router"], "range": "<14.0.0", "nodes": ["node_modules/istanbul-lib-processinfo/node_modules/uuid", "node_modules/request/node_modules/uuid", "node_modules/swagger-router/node_modules/uuid", "node_modules/uuid"], "fixAvailable": {"name": "nyc", "version": "14.1.1", "isSemVerMajor": true}}, "wikimedia-kad-fork": {"name": "wikimedia-kad-fork", "severity": "moderate", "isDirect": false, "via": ["ms"], "effects": ["limitation"], "range": "*", "nodes": ["node_modules/wikimedia-kad-fork"], "fixAvailable": {"name": "service-runner", "version": "2.9.0", "isSemVerMajor": true}}}, "metadata": {"vulnerabilities": {"info": 0, "low": 0, "moderate": 9, "high": 9, "critical": 2, "total": 20}, "dependencies": {"prod": 223, "dev": 436, "optional": 13, "peer": 1, "peerOptional": 0, "total": 670}}}}
$ /usr/bin/npm audit fix --only=dev
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
--- stdout ---
changed 1 package, and audited 666 packages in 3s
119 packages are looking for funding
run `npm fund` for details
# npm audit report
cross-spawn <6.0.6
Severity: high
Regular Expression Denial of Service (ReDoS) in cross-spawn - https://github.com/advisories/GHSA-3xgq-45jj-v275
fix available via `npm audit fix --force`
Will install pre-commit@2.0.0, which is a breaking change
node_modules/pre-commit/node_modules/cross-spawn
pre-commit 1.1.0 - 1.2.2
Depends on vulnerable versions of cross-spawn
node_modules/pre-commit
form-data <2.5.4
Severity: critical
form-data uses unsafe random function in form-data for choosing boundary - https://github.com/advisories/GHSA-fjxv-7rqg-78g4
No fix available
node_modules/request/node_modules/form-data
request *
Depends on vulnerable versions of form-data
Depends on vulnerable versions of qs
Depends on vulnerable versions of tough-cookie
Depends on vulnerable versions of uuid
node_modules/request
preq *
Depends on vulnerable versions of request
Depends on vulnerable versions of requestretry
node_modules/preq
requestretry <=7.1.0
Depends on vulnerable versions of request
node_modules/requestretry
ms <2.0.0
Severity: moderate
Vercel ms Inefficient Regular Expression Complexity vulnerability - https://github.com/advisories/GHSA-w9mr-4mfr-499f
fix available via `npm audit fix --force`
Will install service-runner@2.9.0, which is a breaking change
node_modules/wikimedia-kad-fork/node_modules/ms
wikimedia-kad-fork *
Depends on vulnerable versions of ms
node_modules/wikimedia-kad-fork
limitation >=0.2.3
Depends on vulnerable versions of wikimedia-kad-fork
node_modules/limitation
service-runner >=3.0.0
Depends on vulnerable versions of limitation
Depends on vulnerable versions of tar
node_modules/service-runner
qs <6.14.1
Severity: moderate
qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion - https://github.com/advisories/GHSA-6rw7-vpxm-498p
No fix available
node_modules/request/node_modules/qs
serialize-javascript <=7.0.4
Severity: high
Serialize JavaScript is Vulnerable to RCE via RegExp.flags and Date.prototype.toISOString() - https://github.com/advisories/GHSA-5c6j-r48x-rmvq
Serialize JavaScript has CPU Exhaustion Denial of Service via crafted array-like objects - https://github.com/advisories/GHSA-qj8w-gfj5-8c6v
fix available via `npm audit fix --force`
Will install mocha@7.2.0, which is a breaking change
node_modules/serialize-javascript
mocha 8.0.0 - 12.0.0-beta-2
Depends on vulnerable versions of serialize-javascript
node_modules/mocha
tar <=7.5.10
Severity: high
Denial of service while parsing a tar file due to lack of folders count validation - https://github.com/advisories/GHSA-f5x3-32g6-xq36
node-tar Vulnerable to Arbitrary File Creation/Overwrite via Hardlink Path Traversal - https://github.com/advisories/GHSA-34x7-hfp2-rc4v
node-tar is Vulnerable to Arbitrary File Overwrite and Symlink Poisoning via Insufficient Path Sanitization - https://github.com/advisories/GHSA-8qq5-rm4j-mr97
Arbitrary File Read/Write via Hardlink Target Escape Through Symlink Chain in node-tar Extraction - https://github.com/advisories/GHSA-83g3-92jg-28cx
tar has Hardlink Path Traversal via Drive-Relative Linkpath - https://github.com/advisories/GHSA-qffp-2rhf-9h96
node-tar Symlink Path Traversal via Drive-Relative Linkpath - https://github.com/advisories/GHSA-9ppj-qmqm-q256
Race Condition in node-tar Path Reservations via Unicode Ligature Collisions on macOS APFS - https://github.com/advisories/GHSA-r6q2-hw4h-h46w
fix available via `npm audit fix --force`
Will install service-runner@2.9.0, which is a breaking change
node_modules/tar
tough-cookie <4.1.3
Severity: moderate
tough-cookie Prototype Pollution vulnerability - https://github.com/advisories/GHSA-72xf-g2v4-qvf3
No fix available
node_modules/tough-cookie
uuid <14.0.0
Severity: moderate
uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided - https://github.com/advisories/GHSA-w5hq-g745-h8pq
fix available via `npm audit fix --force`
Will install nyc@14.1.1, which is a breaking change
node_modules/istanbul-lib-processinfo/node_modules/uuid
node_modules/request/node_modules/uuid
node_modules/swagger-router/node_modules/uuid
node_modules/uuid
istanbul-lib-processinfo *
Depends on vulnerable versions of uuid
node_modules/istanbul-lib-processinfo
nyc >=15.0.0-alpha.0
Depends on vulnerable versions of istanbul-lib-processinfo
node_modules/nyc
swagger-router >=0.7.4
Depends on vulnerable versions of uuid
node_modules/swagger-router
19 vulnerabilities (9 moderate, 8 high, 2 critical)
To address all issues possible (including breaking changes), run:
npm audit fix --force
Some issues need review, and may require choosing
a different dependency.
--- end ---
Verifying that tests still pass
$ /usr/bin/npm ci
--- stderr ---
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated lodash.get@4.4.2: This package is deprecated. Use the optional chaining (?.) operator instead.
npm WARN deprecated kad-fs@0.0.4: This package is no longer maintained.
npm WARN deprecated rimraf@2.4.5: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated lodash.clone@4.5.0: This package is deprecated. Use structuredClone instead.
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated @humanwhocodes/config-array@0.11.14: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated kad-memstore@0.0.1: This package is no longer maintained.
npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@6.0.4: Glob versions prior to v9 are no longer supported
npm WARN deprecated preq@0.5.14: Deprecated as this is a wrapper around the deprecated request library. Preq can be replaced with fetch, which is available from Node 18 as an experimental feature.
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated eslint@8.57.0: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---
added 665 packages, and audited 666 packages in 10s
119 packages are looking for funding
run `npm fund` for details
19 vulnerabilities (9 moderate, 8 high, 2 critical)
To address all issues possible (including breaking changes), run:
npm audit fix --force
Some issues need review, and may require choosing
a different dependency.
Run `npm audit` for details.
--- end ---
$ /usr/bin/npm test
--- stderr ---
[baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
strict mode: missing type "object" for keyword "required" at "#/definitions/problem#" (strictTypes)
strict mode: missing type "object" for keyword "properties" at "#/definitions/problem#" (strictTypes)
--- stdout ---
> @wikimedia/wikifeeds@1.0.0 test
> npm run lint && PREQ_CONNECT_TIMEOUT=15 mocha --recursive
> @wikimedia/wikifeeds@1.0.0 lint
> eslint .
/src/repo/.eslintrc.json
1:1 warning Use the global form of 'use strict' strict
/src/repo/app.js
20:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
64:37 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
136:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
138:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
150:31 warning Found non-literal argument in require security/detect-non-literal-require
197:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
198:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
236:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
/src/repo/etc/dyk-sites.js
19:5 warning Missing JSDoc @return declaration jsdoc/require-returns
/src/repo/etc/news-sites.js
4:1 warning At most one access-control tag may be present on a JSDoc block jsdoc/check-access
5:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
6:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
50:1 warning Syntax error in type: {Object.<string, NewsSite>} jsdoc/valid-types
/src/repo/lib/announcements.js
30:1 warning Expected this semicolon to be at the end of the previous line semi-style
34:1 warning This line has a length of 123. Maximum allowed is 100 max-len
51:1 warning This line has a length of 134. Maximum allowed is 100 max-len
84:1 warning This line has a length of 119. Maximum allowed is 100 max-len
86:1 warning This line has a length of 118. Maximum allowed is 100 max-len
135:1 warning This line has a length of 123. Maximum allowed is 100 max-len
/src/repo/lib/api-util.js
297:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
/src/repo/lib/did-you-know.js
20:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
21:1 warning Missing JSDoc @param "lang" type jsdoc/require-param-type
41:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
42:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
82:12 warning 'si' is already declared in the upper scope on line 8 column 7 no-shadow
97:20 warning 'result' is already declared in the upper scope on line 88 column 19 no-shadow
/src/repo/lib/featured.js
136:12 warning 'si' is already declared in the upper scope on line 12 column 7 no-shadow
/src/repo/lib/imageinfo.js
30:1 warning The type 'Bool' is undefined jsdoc/no-undefined-types
85:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
132:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
203:43 warning Array.prototype.map() expects a return value from arrow function array-callback-return
280:1 warning Syntax error in type: [type] jsdoc/valid-types
282:1 warning Syntax error in type: [type] jsdoc/valid-types
/src/repo/lib/most-read.js
81:1 warning At most one access-control tag may be present on a JSDoc block jsdoc/check-access
82:1 warning @public should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
83:1 warning @public should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
100:1 warning This line has a length of 122. Maximum allowed is 100 max-len
115:28 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
116:1 warning This line has a length of 112. Maximum allowed is 100 max-len
145:19 warning 'pageviews' is already declared in the upper scope on line 10 column 7 no-shadow
161:25 warning Array.prototype.map() expects a return value from arrow function array-callback-return
202:1 warning This line has a length of 148. Maximum allowed is 100 max-len
212:1 warning This line has a length of 113. Maximum allowed is 100 max-len
/src/repo/lib/news.js
15:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
73:12 warning 'si' is already declared in the upper scope on line 8 column 7 no-shadow
96:20 warning 'result' is already declared in the upper scope on line 80 column 19 no-shadow
/src/repo/lib/on-this-day.js
34:1 warning The type 'Integer' is undefined jsdoc/no-undefined-types
122:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
123:1 warning The type 'Integer' is undefined jsdoc/no-undefined-types
128:12 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
141:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
151:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
172:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
184:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
207:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
253:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
270:1 warning The type 'Integer' is undefined jsdoc/no-undefined-types
309:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
320:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
321:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
342:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
360:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
380:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
412:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
426:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
440:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
454:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
468:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
483:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
484:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
543:1 warning Missing JSDoc @param "sendResponse" type jsdoc/require-param-type
/src/repo/lib/on-this-day.languages.js
28:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
30:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
32:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
60:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
62:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
64:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
100:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
102:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
104:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
128:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
130:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
132:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
156:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
158:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
160:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
189:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
191:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
193:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
217:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
219:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
221:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
245:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
247:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
249:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
273:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
275:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
277:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
301:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
303:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
305:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
335:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
337:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
339:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
362:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
364:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
366:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
390:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
392:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
418:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
420:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
422:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
/src/repo/lib/pageviews.js
36:1 warning At most one access-control tag may be present on a JSDoc block jsdoc/check-access
37:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
38:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
39:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
53:1 warning The type 'Platform' is undefined jsdoc/no-undefined-types
54:1 warning The type 'Agent' is undefined jsdoc/no-undefined-types
56:1 warning The type 'Granularity' is undefined jsdoc/no-undefined-types
71:1 warning The type 'Platform' is undefined jsdoc/no-undefined-types
/src/repo/lib/random.js
38:9 warning 'score' is already declared in the upper scope on line 31 column 10 no-shadow
55:1 warning Missing JSDoc @param "scoredResults" type jsdoc/require-param-type
/src/repo/lib/siteinfo.js
3:1 warning Use the global form of 'use strict' strict
10:29 warning Unsafe Regular Expression security/detect-unsafe-regex
/src/repo/lib/util.js
104:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
142:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
222:1 warning The type 'Router' is undefined jsdoc/no-undefined-types
280:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
293:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
306:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
378:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
450:34 warning Default parameters should be last default-param-last
/src/repo/package-lock.json
1:1 warning Use the global form of 'use strict' strict
/src/repo/package.json
1:1 warning Use the global form of 'use strict' strict
/src/repo/scripts/check-featured-feed.js
49:35 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
82:44 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
107:34 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
150:30 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
217:5 warning Don't use process.exit(); throw an error instead n/no-process-exit
/src/repo/spec.yaml
1030:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1035:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1040:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1045:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1050:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1055:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1058:1 warning This line has a length of 112. Maximum allowed is 100 max-len
1107:1 warning This line has a length of 109. Maximum allowed is 100 max-len
1124:1 warning This line has a length of 126. Maximum allowed is 100 max-len
1125:1 warning This line has a length of 107. Maximum allowed is 100 max-len
1131:1 warning This line has a length of 132. Maximum allowed is 100 max-len
1138:1 warning This line has a length of 127. Maximum allowed is 100 max-len
1140:1 warning This line has a length of 108. Maximum allowed is 100 max-len
1141:1 warning This line has a length of 113. Maximum allowed is 100 max-len
1142:1 warning This line has a length of 121. Maximum allowed is 100 max-len
1146:1 warning This line has a length of 121. Maximum allowed is 100 max-len
1150:1 warning This line has a length of 113. Maximum allowed is 100 max-len
1154:1 warning This line has a length of 111. Maximum allowed is 100 max-len
1160:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1164:1 warning This line has a length of 281. Maximum allowed is 100 max-len
1437:1 warning This line has a length of 106. Maximum allowed is 100 max-len
✖ 161 problems (0 errors, 161 warnings)
aggregated featured
starting test server
✔ should return 200 for a valid request (943ms)
✔ should return 404 for an invalid year
✔ should return 404 for an invalid month
✔ should return 404 for an invalid day
✔ should return only historic keys for past date (838ms)
✔ should return current keys for today (812ms)
✔ should return future keys for tomorrow (512ms)
aggregate onthisday
✔ should return 200 for a valid request (4143ms)
✔ should return 404 for an invalid month (78ms)
✔ should return 404 for an invalid day (85ms)
✔ should return objects with the expected keys (2845ms)
express app
✔ should get robots.txt
✔ should set CORS headers
✔ should set CSP headers
✔ should get static content gzipped
✔ should get static content uncompressed
Swagger spec
✔ get the spec
✔ spec validation
validate responses against schema
- random response should conform to schema
✔ featured article response should conform to schema (229ms)
✔ featured image response should conform to schema (206ms)
✔ most-read response should conform to schema (326ms)
✔ news response should conform to schema (102ms)
✔ announcements should conform to schema
✔ onthisday response should conform to schema (2957ms)
✔ featured article response should conform to schema (invalid lang, agg=true)
✔ featured image response should conform to schema (invalid date, agg=true)
✔ most-read response should conform to schema (invalid date, agg=true)
✔ news response (invalid language, agg=true) should be empty
✔ featured article request should fail for invalid language when !agg=true
✔ featured image request should fail for invalid date when !agg=true
✔ most-read request should fail for invalid date when !agg=true
✔ news request should fail for invalid language when !agg=true
validate spec examples
✔ spec from root
✔ retrieve service info
✔ Retrieve feed content availability from \'wikipedia.org\'
✔ Retrieve announcements
✔ retrieve selected events on January 15 (294ms)
✔ retrieve title of the featured article for April 29, 2025 (199ms)
✔ retrieve featured article info for unsupported site (with aggregated=true)
✔ retrieve featured image data for April 29, 2025 (154ms)
✔ retrieve the most-read articles for January 1, 2026 (360ms)
✔ retrieve the most-read articles for January 1, 2026 (with aggregated=true) (329ms)
✔ retrieve most-read articles for date with no data (with aggregated=true)
✔ get 'In the News' content (139ms)
✔ get "In the News" content for unsupported language (with aggregated=true)
✔ retrieve a random article title (75ms)
✔ retrieve configuration
✔ retrieve featured facts (79ms)
✔ retrieve aggregated featured content for April 29, 2025 (679ms)
did-you-know
✔ ar: results list should have expected properties (86ms)
✔ de: results list should have expected properties (83ms)
✔ en: results list should have expected properties (89ms)
✔ hi: results list should have expected properties (94ms)
✔ pt: results list should have expected properties (91ms)
✔ ru: results list should have expected properties (145ms)
✔ uk: results list should have expected properties (144ms)
featured
✔ incomplete date should return 404
✔ extra uri path parameter after date should return 404
✔ Missing TFA should return 204 (147ms)
✔ Missing TFA with aggregated=true should return 204 (130ms)
✔ featured article of an old date should return 404
featured-image-lang
✔ bg description (275ms)
✔ bn description (271ms)
✔ bs description (279ms)
✔ cs description (277ms)
✔ de description (181ms)
✔ el description (265ms)
✔ en description (216ms)
✔ fa description (258ms)
✔ he description (264ms)
✔ hu description (370ms)
✔ it description (280ms)
✔ ja description (287ms)
✔ la description (239ms)
✔ no description (252ms)
✔ sco description (280ms)
✔ sd description (315ms)
✔ sv description (272ms)
✔ tr description (226ms)
✔ ur description (247ms)
✔ vi description (266ms)
✔ zh description (276ms)
featured-image
✔ incomplete date should return 404
✔ extra uri path parameter after date should return 404
service information
✔ should get the service name
✔ should get the service version
✔ should redirect to the service home page
✔ should get the service info
most-read articles
✔ Should provide pageviews from day prior when aggregated flag is set (712ms)
✔ Should drop duplicate pageviews (408ms)
✔ Should filter out missing summaries (354ms)
✔ Should return 204 for fywiki requests
✔ main page filtering RegExp should handle all main page title chars
✔ Should filter out blocked titles from some languages, but not others
✔ Should filter out certain blocked titles from all wikis
most-read articles
✔ Should return 200 even if title has invalid utf8 encoding (321ms)
✔ Should filter-out invalid utf8 encoding
news headline selectors
✔ test news headlines should be general not categorical
✔ test news headline topics should be nonnull
✔ bs news headlines should be general not categorical
✔ bs news headline topics should be nonnull
✔ da news headlines should be general not categorical
✔ da news headline topics should be nonnull
✔ de news headlines should be general not categorical
✔ de news headline topics should be nonnull
✔ el news headlines should be general not categorical
✔ el news headline topics should be nonnull
✔ en news headlines should be general not categorical
✔ en news headline topics should be nonnull
✔ es news headlines should be general not categorical
✔ es news headline topics should be nonnull
✔ fi news headlines should be general not categorical
✔ fi news headline topics should be nonnull
✔ fr news headlines should be general not categorical
✔ fr news headline topics should be nonnull
✔ he news headlines should be general not categorical
✔ he news headline topics should be nonnull
✔ ko news headlines should be general not categorical
✔ ko news headline topics should be nonnull
✔ no news headlines should be general not categorical
✔ no news headline topics should be nonnull
✔ pl news headlines should be general not categorical
✔ pl news headline topics should be nonnull
✔ pt news headlines should be general not categorical
✔ pt news headline topics should be nonnull
✔ ru news headlines should be general not categorical
✔ ru news headline topics should be nonnull
✔ sco news headlines should be general not categorical
✔ sco news headline topics should be nonnull
✔ sv news headlines should be general not categorical
✔ sv news headline topics should be nonnull
✔ uk news headlines should be general not categorical
✔ uk news headline topics should be nonnull
✔ vi news headlines should be general not categorical
✔ vi news headline topics should be nonnull
✔ news headline topic should be the first bold link
✔ news headline topic should be the first link when no link is bolded
news
✔ test: results list should have expected properties (163ms)
✔ bs: results list should have expected properties (163ms)
✔ da: results list should have expected properties (162ms)
✔ de: results list should have expected properties (53ms)
✔ el: results list should have expected properties (112ms)
✔ en: results list should have expected properties (111ms)
✔ es: results list should have expected properties (204ms)
✔ fi: results list should have expected properties (193ms)
✔ fr: results list should have expected properties (369ms)
✔ he: results list should have expected properties (198ms)
✔ ko: results list should have expected properties (308ms)
✔ no: results list should have expected properties (75ms)
✔ pl: results list should have expected properties (193ms)
✔ pt: results list should have expected properties (2372ms)
✔ ru: results list should have expected properties (153ms)
✔ sco: results list should have expected properties (118ms)
✔ sv: results list should have expected properties (189ms)
✔ uk: results list should have expected properties (73ms)
✔ vi: results list should have expected properties (86ms)
onthisday
✔ all: unsupported language throws 404
✔ selected: unsupported language throws 404
✔ selected: fetches some results (350ms)
✔ births: unsupported language throws 404
✔ births: fetches some results (1213ms)
✔ deaths: unsupported language throws 404
✔ deaths: fetches some results (832ms)
✔ events: unsupported language throws 404
✔ events: fetches some results (921ms)
✔ holidays: unsupported language throws 404
✔ holidays: fetches some results (325ms)
✔ "all" fetches some results for births, deaths, events, holidays and selected (3495ms)
✔ verify contents in events (2816ms)
random/title
✔ pickBestResult should select best-scored title from sample
✔ redirects to the right format with random title - html (60ms)
✔ redirects to the right format with random title - invalid format
✔ returns 404 for yue.wikipedia.org
stopping test server
lib:announcements
✔ should return no announcement for inactive wiki
✔ should return one or more announcements for active wiki
lib:announcements:etc
✔ should return no image_url
✔ should return correct type
✔ countries is an array of strings
✔ should not deliver HTML in certain legacy iOS announcements fields
✔ iOS legacy fundraising announcement should have the proper platform ID
✔ iOS fundraising announcement should have the proper platform ID
✔ should deliver HTML in certain V2 announcements fields
✔ caption_HTML on iOS should be inside a paragraph
✔ caption_HTML on Android should not be inside a paragraph
✔ should return no image_url
✔ should return correct type
✔ countries is an array of strings
✔ should not deliver HTML in certain legacy iOS announcements fields
✔ iOS legacy fundraising announcement should have the proper platform ID
✔ iOS fundraising announcement should have the proper platform ID
✔ should deliver HTML in certain V2 announcements fields
✔ caption_HTML on iOS should be inside a paragraph
✔ caption_HTML on Android should not be inside a paragraph
✔ should return no image_url
✔ should return correct type
✔ countries is an array of strings
✔ should not deliver HTML in certain legacy iOS announcements fields
✔ iOS legacy fundraising announcement should have the proper platform ID
✔ iOS fundraising announcement should have the proper platform ID
✔ should deliver HTML in certain V2 announcements fields
✔ caption_HTML on iOS should be inside a paragraph
✔ caption_HTML on Android should not be inside a paragraph
✔ should return no image_url
✔ should return correct type
✔ countries is an array of strings
✔ should not deliver HTML in certain legacy iOS announcements fields
✔ iOS legacy fundraising announcement should have the proper platform ID
✔ iOS fundraising announcement should have the proper platform ID
✔ should deliver HTML in certain V2 announcements fields
✔ caption_HTML on iOS should be inside a paragraph
✔ caption_HTML on Android should not be inside a paragraph
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
.hasEnded
✔ invalid endTime
✔ endTime has passed
✔ endTime has not passed yet
announcements-unit-config
✔ all dates should be valid
MW core page HTML
✔ fetches the core page html output only with title in params
✔ fetches the core page html output with revision in params
featured-unit
✔ isSupported should return the correct boolean
✔ findPageTitle should find the first bold link: a inside b
✔ findPageTitle should find the first bold link: b inside a
✔ findPageTitle should return undefined if nothing found
featured-image-unit
✔ structureExtMetadataValue returns description for preferred lang if present
✔ structureExtMetadataValue falls back to en description if preferred lang not present
✔ structureExtMetadataValue returns lang undefined for type of value equals to string
✔ structureExtMetadataValue returns undefined for undefined input
news-unit
✔ news story constructed correctly (duplicate titles handled correctly)
✔ floating spans are removed
onthisday-unit
✔ eventsForYearListElements returns a WMFEvent for only year list elements
✔ Sort year list events in correct BC[E] aware manner
page title generation: titleForDayPageFromMonthDayNumberStrings
✔ 1 digit mm and 1 digit dd
✔ 0 padded mm and 1 digit dd
✔ 0 padded mm and 0 padded dd
day page URI generation: dayTitleForRequest
✔ returns expected title for 0 padded month and 2 digit day
✔ returns expected title for 2 digit month and 0 padded day
✔ returns expected title for 1 digit month and 1 digit day
selected page URI generation: selectedTitleForRequest
✔ returns expected title for 0 padded month and 2 digit day
✔ returns expected title for 2 digit month and 0 padded day
✔ returns expected title for 1 digit month and 1 digit day
anchor to WMFPage transforms: wmfPageFromAnchorElement
✔ WMFPage model object is correctly created from a topic anchor
✔ WMFPage model object is correctly created from a non-topic anchor
wmfEventFromListElement: WMFEvent model object is correctly created
✔ from a selected list element
✔ from a birth list element
✔ from an event list element
✔ from a death list element
✔ from a birth list element
✔ from a selected div element on zhwiki
✔ wmfEventFromListElement should return null for elements not describing events
wmfHolidayFromListElement: WMFHoliday model object is correctly created
✔ WMFHoliday model object is correctly created from a holiday list element
yearListElementRegEx
✔ rejects malformed BC strings
✔ accepts well formed BC strings
✔ accepts well formed BCE strings
✔ accepts well formed CE strings
✔ accepts well formed year strings (no BCE/AD/CE)
✔ accepts well formed AD strings
✔ extracts expected BC/BCE strings
✔ extracts expected BC/BCE strings in Chinese
✔ AD strings should not be negated
✔ rejects non year list strings
✔ rejects strings missing text
listElementsByHeadingID extracts expected number of births from
✔ DE fixture (47ms)
✔ EN fixture (61ms)
✔ AR fixture (39ms)
✔ BS fixture
nested list element handling
✔ listElementsByHeadingID extracts expected number of holidays from EN fixture
✔ expected textContent for a list item NOT nested within another list item
✔ expected textContent for a list item nested within another list item
✔ expected textContent for list items nested within a year-dash list item
✔ expected textContent for list items nested within a year list item (no dash)
addPrefixFromAncestorListElementsToListElement
✔ expected extraction from ancestor year element
✔ expected extraction from multiline ancestor year element
✔ expected extraction from ancestor year element with dash
✔ expected extraction from ancestor year element with dash space
✔ expected extraction from multiline ancestor year element with dash
✔ expected extraction from multiline non-year ancestor
✔ expected extraction from double-nested list element
✔ expected extraction from triple-nested list element
✔ expected extraction from nested Russian list element with "год"
✔ Prefixed text content from ancestor element is escaped
isAnchorForYear
✔ correctly identifies anchor linking to year article
✔ correctly rejects anchor linking article starting with a year
✔ correctly rejects anchor linking article starting with a number
✔ correctly rejects anchor linking article not starting with a year
✔ correctly identifies anchor linking to year article with an era string
✔ correctly identifies anchor linking to year article with era string w/o space
non-article urls should be excluded
✔ exclude external url from WMFHoliday pages
✔ exclude external url from WMFEvent pages
✔ exclude redlinks from WMFEvent pages
style tags should be dropped
✔ exclude style tags
random
✔ pickBestResult should select best-scored title from sample
util
✔ promiseAwaitAll, ignoreRejected
✔ promiseAwaitAll, propagate rejected
removeDuplicateTitles
✔ deduplicates and applies update function
299 passing (41s)
1 pending
--- end ---
{"1117574": {"source": 1117574, "name": "axios", "dependency": "axios", "title": "Axios: Authentication Bypass via Prototype Pollution Gadget in `validateStatus` Merge Strategy", "url": "https://github.com/advisories/GHSA-w9j2-pvgh-6h63", "severity": "moderate", "cwe": ["CWE-287", "CWE-1321"], "cvss": {"score": 4.8, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N"}, "range": ">=1.0.0 <1.15.1"}, "1117576": {"source": 1117576, "name": "axios", "dependency": "axios", "title": "Axios: Incomplete Fix for CVE-2025-62718 \u2014 NO_PROXY Protection Bypassed via RFC 1122 Loopback Subnet (127.0.0.0/8) in Axios 1.15.0", "url": "https://github.com/advisories/GHSA-pmwg-cvhr-8vh7", "severity": "high", "cwe": ["CWE-183", "CWE-441", "CWE-918"], "cvss": {"score": 7.2, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N"}, "range": ">=1.0.0 <1.15.1"}, "1117577": {"source": 1117577, "name": "axios", "dependency": "axios", "title": "Axios: Invisible JSON Response Tampering via Prototype Pollution Gadget in `parseReviver`", "url": "https://github.com/advisories/GHSA-3w6x-2g7m-8v23", "severity": "moderate", "cwe": ["CWE-915", "CWE-1321"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:N"}, "range": ">=1.0.0 <1.15.2"}, "1117578": {"source": 1117578, "name": "axios", "dependency": "axios", "title": "Axios has prototype pollution read-side gadgets in HTTP adapter that allow credential injection and request hijacking", "url": "https://github.com/advisories/GHSA-q8qp-cvcw-x6jj", "severity": "high", "cwe": ["CWE-1321"], "cvss": {"score": 7.4, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"}, "range": ">=1.0.0 <1.15.2"}, "1117580": {"source": 1117580, "name": "axios", "dependency": "axios", "title": "Axios: Null Byte Injection via Reverse-Encoding in AxiosURLSearchParams", "url": "https://github.com/advisories/GHSA-xhjh-pmcv-23jw", "severity": "low", "cwe": ["CWE-116", "CWE-626"], "cvss": {"score": 3.7, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N"}, "range": ">=1.0.0 <1.15.1"}, "1117581": {"source": 1117581, "name": "axios", "dependency": "axios", "title": "Axios: CRLF Injection in multipart/form-data body via unsanitized blob.type in formDataToStream", "url": "https://github.com/advisories/GHSA-445q-vr5w-6q77", "severity": "moderate", "cwe": ["CWE-93"], "cvss": {"score": 5.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N"}, "range": ">=1.0.0 <1.15.1"}, "1117583": {"source": 1117583, "name": "axios", "dependency": "axios", "title": "Axios: no_proxy bypass via IP alias allows SSRF", "url": "https://github.com/advisories/GHSA-m7pr-hjqh-92cm", "severity": "moderate", "cwe": ["CWE-918"], "cvss": {"score": 6.8, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N"}, "range": ">=1.0.0 <1.15.1"}, "1117585": {"source": 1117585, "name": "axios", "dependency": "axios", "title": "Axios: unbounded recursion in toFormData causes DoS via deeply nested request data", "url": "https://github.com/advisories/GHSA-62hf-57xw-28j9", "severity": "moderate", "cwe": ["CWE-674"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=1.0.0 <1.15.1"}, "1117587": {"source": 1117587, "name": "axios", "dependency": "axios", "title": "Axios' HTTP adapter-streamed uploads bypass maxBodyLength when maxRedirects: 0", "url": "https://github.com/advisories/GHSA-5c9x-8gcm-mpgx", "severity": "moderate", "cwe": ["CWE-770"], "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.0 <1.15.1"}, "1117589": {"source": 1117589, "name": "axios", "dependency": "axios", "title": "Axios: HTTP adapter streamed responses bypass maxContentLength", "url": "https://github.com/advisories/GHSA-vf2m-468p-8v99", "severity": "moderate", "cwe": ["CWE-770"], "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.0 <1.15.1"}, "1117591": {"source": 1117591, "name": "axios", "dependency": "axios", "title": "Axios: Prototype Pollution Gadgets - Response Tampering, Data Exfiltration, and Request Hijacking", "url": "https://github.com/advisories/GHSA-pf86-5x62-jrwf", "severity": "high", "cwe": ["CWE-1321"], "cvss": {"score": 7.4, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"}, "range": ">=1.0.0 <1.15.1"}, "1117593": {"source": 1117593, "name": "axios", "dependency": "axios", "title": "Axios: Header Injection via Prototype Pollution", "url": "https://github.com/advisories/GHSA-6chq-wfr3-2hj9", "severity": "high", "cwe": ["CWE-113", "CWE-1321"], "cvss": {"score": 7.4, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"}, "range": ">=1.0.0 <1.15.1"}, "1117595": {"source": 1117595, "name": "axios", "dependency": "axios", "title": "Axios: XSRF Token Cross-Origin Leakage via Prototype Pollution Gadget in `withXSRFToken` Boolean Coercion", "url": "https://github.com/advisories/GHSA-xx6v-rp6x-q39c", "severity": "moderate", "cwe": ["CWE-183", "CWE-201"], "cvss": {"score": 5.4, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N"}, "range": ">=1.0.0 <1.15.1"}}
Upgrading n:axios from 1.15.0 -> 1.16.0
$ package-lock-lint /src/repo/package-lock.json
--- stdout ---
Checking /src/repo/package-lock.json
--- end ---
build: Updating npm dependencies
* eslint-config-wikimedia: 0.32.3 → 0.32.4
* axios: 1.15.0 → 1.16.0
* https://github.com/advisories/GHSA-3w6x-2g7m-8v23
* https://github.com/advisories/GHSA-445q-vr5w-6q77
* https://github.com/advisories/GHSA-5c9x-8gcm-mpgx
* https://github.com/advisories/GHSA-62hf-57xw-28j9
* https://github.com/advisories/GHSA-6chq-wfr3-2hj9
* https://github.com/advisories/GHSA-m7pr-hjqh-92cm
* https://github.com/advisories/GHSA-pf86-5x62-jrwf
* https://github.com/advisories/GHSA-pmwg-cvhr-8vh7
* https://github.com/advisories/GHSA-q8qp-cvcw-x6jj
* https://github.com/advisories/GHSA-vf2m-468p-8v99
* https://github.com/advisories/GHSA-w9j2-pvgh-6h63
* https://github.com/advisories/GHSA-xhjh-pmcv-23jw
* https://github.com/advisories/GHSA-xx6v-rp6x-q39c
$ git add .
--- stdout ---
--- end ---
$ git commit -F /tmp/tmpi0alik97
--- stderr ---
[baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
/src/repo/.eslintrc.json
1:1 warning Use the global form of 'use strict' strict
/src/repo/app.js
20:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
64:37 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
136:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
138:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
150:31 warning Found non-literal argument in require security/detect-non-literal-require
197:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
198:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
236:1 warning The type 'bluebird' is undefined jsdoc/no-undefined-types
/src/repo/etc/dyk-sites.js
19:5 warning Missing JSDoc @return declaration jsdoc/require-returns
/src/repo/etc/news-sites.js
4:1 warning At most one access-control tag may be present on a JSDoc block jsdoc/check-access
5:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
6:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
50:1 warning Syntax error in type: {Object.<string, NewsSite>} jsdoc/valid-types
/src/repo/lib/announcements.js
30:1 warning Expected this semicolon to be at the end of the previous line semi-style
34:1 warning This line has a length of 123. Maximum allowed is 100 max-len
51:1 warning This line has a length of 134. Maximum allowed is 100 max-len
84:1 warning This line has a length of 119. Maximum allowed is 100 max-len
86:1 warning This line has a length of 118. Maximum allowed is 100 max-len
135:1 warning This line has a length of 123. Maximum allowed is 100 max-len
/src/repo/lib/api-util.js
297:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
/src/repo/lib/did-you-know.js
20:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
21:1 warning Missing JSDoc @param "lang" type jsdoc/require-param-type
41:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
42:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
82:12 warning 'si' is already declared in the upper scope on line 8 column 7 no-shadow
97:20 warning 'result' is already declared in the upper scope on line 88 column 19 no-shadow
/src/repo/lib/featured.js
136:12 warning 'si' is already declared in the upper scope on line 12 column 7 no-shadow
/src/repo/lib/imageinfo.js
30:1 warning The type 'Bool' is undefined jsdoc/no-undefined-types
85:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
132:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
203:43 warning Array.prototype.map() expects a return value from arrow function array-callback-return
280:1 warning Syntax error in type: [type] jsdoc/valid-types
282:1 warning Syntax error in type: [type] jsdoc/valid-types
/src/repo/lib/most-read.js
81:1 warning At most one access-control tag may be present on a JSDoc block jsdoc/check-access
82:1 warning @public should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
83:1 warning @public should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
100:1 warning This line has a length of 122. Maximum allowed is 100 max-len
115:28 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
116:1 warning This line has a length of 112. Maximum allowed is 100 max-len
145:19 warning 'pageviews' is already declared in the upper scope on line 10 column 7 no-shadow
161:25 warning Array.prototype.map() expects a return value from arrow function array-callback-return
202:1 warning This line has a length of 148. Maximum allowed is 100 max-len
212:1 warning This line has a length of 113. Maximum allowed is 100 max-len
/src/repo/lib/news.js
15:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
73:12 warning 'si' is already declared in the upper scope on line 8 column 7 no-shadow
96:20 warning 'result' is already declared in the upper scope on line 80 column 19 no-shadow
/src/repo/lib/on-this-day.js
34:1 warning The type 'Integer' is undefined jsdoc/no-undefined-types
122:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
123:1 warning The type 'Integer' is undefined jsdoc/no-undefined-types
128:12 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
141:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
151:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
172:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
184:1 warning The type 'AnchorElement' is undefined jsdoc/no-undefined-types
207:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
253:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
270:1 warning The type 'Integer' is undefined jsdoc/no-undefined-types
309:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
320:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
321:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
342:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
360:1 warning The type 'ListElement' is undefined jsdoc/no-undefined-types
380:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
412:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
426:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
440:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
454:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
468:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
483:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
484:1 warning The type 'Document' is undefined jsdoc/no-undefined-types
543:1 warning Missing JSDoc @param "sendResponse" type jsdoc/require-param-type
/src/repo/lib/on-this-day.languages.js
28:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
30:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
32:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
60:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
62:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
64:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
100:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
102:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
104:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
128:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
130:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
132:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
156:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
158:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
160:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
189:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
191:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
193:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
217:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
219:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
221:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
245:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
247:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
249:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
273:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
275:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
277:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
301:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
303:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
305:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
335:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
337:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
339:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
362:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
364:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
366:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
390:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
392:11 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
418:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
420:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
422:13 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
/src/repo/lib/pageviews.js
36:1 warning At most one access-control tag may be present on a JSDoc block jsdoc/check-access
37:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
38:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
39:1 warning @private should not have a bracketed type in "jsdoc" mode jsdoc/valid-types
53:1 warning The type 'Platform' is undefined jsdoc/no-undefined-types
54:1 warning The type 'Agent' is undefined jsdoc/no-undefined-types
56:1 warning The type 'Granularity' is undefined jsdoc/no-undefined-types
71:1 warning The type 'Platform' is undefined jsdoc/no-undefined-types
/src/repo/lib/random.js
38:9 warning 'score' is already declared in the upper scope on line 31 column 10 no-shadow
55:1 warning Missing JSDoc @param "scoredResults" type jsdoc/require-param-type
/src/repo/lib/siteinfo.js
3:1 warning Use the global form of 'use strict' strict
10:29 warning Unsafe Regular Expression security/detect-unsafe-regex
/src/repo/lib/util.js
104:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
142:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
222:1 warning The type 'Router' is undefined jsdoc/no-undefined-types
280:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
293:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
306:1 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check
378:1 warning The type 'Application' is undefined jsdoc/no-undefined-types
450:34 warning Default parameters should be last default-param-last
/src/repo/package-lock.json
1:1 warning Use the global form of 'use strict' strict
/src/repo/package.json
1:1 warning Use the global form of 'use strict' strict
/src/repo/scripts/check-featured-feed.js
49:35 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
82:44 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
107:34 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
150:30 warning 'feature' is already declared in the upper scope on line 212 column 7 no-shadow
217:5 warning Don't use process.exit(); throw an error instead n/no-process-exit
/src/repo/spec.yaml
1030:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1035:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1040:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1045:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1050:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1055:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1058:1 warning This line has a length of 112. Maximum allowed is 100 max-len
1107:1 warning This line has a length of 109. Maximum allowed is 100 max-len
1124:1 warning This line has a length of 126. Maximum allowed is 100 max-len
1125:1 warning This line has a length of 107. Maximum allowed is 100 max-len
1131:1 warning This line has a length of 132. Maximum allowed is 100 max-len
1138:1 warning This line has a length of 127. Maximum allowed is 100 max-len
1140:1 warning This line has a length of 108. Maximum allowed is 100 max-len
1141:1 warning This line has a length of 113. Maximum allowed is 100 max-len
1142:1 warning This line has a length of 121. Maximum allowed is 100 max-len
1146:1 warning This line has a length of 121. Maximum allowed is 100 max-len
1150:1 warning This line has a length of 113. Maximum allowed is 100 max-len
1154:1 warning This line has a length of 111. Maximum allowed is 100 max-len
1160:1 warning This line has a length of 124. Maximum allowed is 100 max-len
1164:1 warning This line has a length of 281. Maximum allowed is 100 max-len
1437:1 warning This line has a length of 106. Maximum allowed is 100 max-len
✖ 161 problems (0 errors, 161 warnings)
aggregated featured
starting test server
✔ should return 200 for a valid request (1102ms)
✔ should return 404 for an invalid year
✔ should return 404 for an invalid month
✔ should return 404 for an invalid day
✔ should return only historic keys for past date (628ms)
✔ should return current keys for today (817ms)
✔ should return future keys for tomorrow (459ms)
aggregate onthisday
✔ should return 200 for a valid request (3996ms)
✔ should return 404 for an invalid month (99ms)
✔ should return 404 for an invalid day (99ms)
✔ should return objects with the expected keys (3374ms)
express app
✔ should get robots.txt
✔ should set CORS headers
✔ should set CSP headers
✔ should get static content gzipped
✔ should get static content uncompressed
Swagger spec
✔ get the spec
✔ spec validation
validate responses against schema
- random response should conform to schema
✔ featured article response should conform to schema (203ms)
✔ featured image response should conform to schema (148ms)
✔ most-read response should conform to schema (317ms)
✔ news response should conform to schema (116ms)
✔ announcements should conform to schema
✔ onthisday response should conform to schema (2910ms)
✔ featured article response should conform to schema (invalid lang, agg=true)
✔ featured image response should conform to schema (invalid date, agg=true)
✔ most-read response should conform to schema (invalid date, agg=true)
✔ news response (invalid language, agg=true) should be empty
strict mode: missing type "object" for keyword "required" at "#/definitions/problem#" (strictTypes)
strict mode: missing type "object" for keyword "properties" at "#/definitions/problem#" (strictTypes)
✔ featured article request should fail for invalid language when !agg=true
✔ featured image request should fail for invalid date when !agg=true
✔ most-read request should fail for invalid date when !agg=true
✔ news request should fail for invalid language when !agg=true
validate spec examples
✔ spec from root
✔ retrieve service info
✔ Retrieve feed content availability from \'wikipedia.org\'
✔ Retrieve announcements
✔ retrieve selected events on January 15 (547ms)
✔ retrieve title of the featured article for April 29, 2025 (189ms)
✔ retrieve featured article info for unsupported site (with aggregated=true)
✔ retrieve featured image data for April 29, 2025 (178ms)
✔ retrieve the most-read articles for January 1, 2026 (336ms)
✔ retrieve the most-read articles for January 1, 2026 (with aggregated=true) (296ms)
✔ retrieve most-read articles for date with no data (with aggregated=true)
✔ get 'In the News' content (192ms)
✔ get "In the News" content for unsupported language (with aggregated=true)
✔ retrieve a random article title (55ms)
✔ retrieve configuration
✔ retrieve featured facts (63ms)
✔ retrieve aggregated featured content for April 29, 2025 (592ms)
did-you-know
✔ ar: results list should have expected properties (134ms)
✔ de: results list should have expected properties (92ms)
✔ en: results list should have expected properties (76ms)
✔ hi: results list should have expected properties (156ms)
✔ pt: results list should have expected properties (152ms)
✔ ru: results list should have expected properties (82ms)
✔ uk: results list should have expected properties (157ms)
featured
✔ incomplete date should return 404
✔ extra uri path parameter after date should return 404
✔ Missing TFA should return 204 (101ms)
✔ Missing TFA with aggregated=true should return 204 (184ms)
✔ featured article of an old date should return 404
featured-image-lang
✔ bg description (237ms)
✔ bn description (291ms)
✔ bs description (268ms)
✔ cs description (241ms)
✔ de description (215ms)
✔ el description (282ms)
✔ en description (177ms)
✔ fa description (251ms)
✔ he description (319ms)
✔ hu description (330ms)
✔ it description (315ms)
✔ ja description (258ms)
✔ la description (240ms)
✔ no description (242ms)
✔ sco description (249ms)
✔ sd description (268ms)
✔ sv description (253ms)
✔ tr description (237ms)
✔ ur description (225ms)
✔ vi description (237ms)
✔ zh description (283ms)
featured-image
✔ incomplete date should return 404
✔ extra uri path parameter after date should return 404
service information
✔ should get the service name
✔ should get the service version
✔ should redirect to the service home page
✔ should get the service info
most-read articles
✔ Should provide pageviews from day prior when aggregated flag is set (421ms)
✔ Should drop duplicate pageviews (321ms)
✔ Should filter out missing summaries (405ms)
✔ Should return 204 for fywiki requests
✔ main page filtering RegExp should handle all main page title chars
✔ Should filter out blocked titles from some languages, but not others
✔ Should filter out certain blocked titles from all wikis
most-read articles
✔ Should return 200 even if title has invalid utf8 encoding (301ms)
✔ Should filter-out invalid utf8 encoding
news headline selectors
✔ test news headlines should be general not categorical
✔ test news headline topics should be nonnull
✔ bs news headlines should be general not categorical
✔ bs news headline topics should be nonnull
✔ da news headlines should be general not categorical
✔ da news headline topics should be nonnull
✔ de news headlines should be general not categorical
✔ de news headline topics should be nonnull
✔ el news headlines should be general not categorical
✔ el news headline topics should be nonnull
✔ en news headlines should be general not categorical
✔ en news headline topics should be nonnull
✔ es news headlines should be general not categorical
✔ es news headline topics should be nonnull
✔ fi news headlines should be general not categorical
✔ fi news headline topics should be nonnull
✔ fr news headlines should be general not categorical
✔ fr news headline topics should be nonnull
✔ he news headlines should be general not categorical
✔ he news headline topics should be nonnull
✔ ko news headlines should be general not categorical
✔ ko news headline topics should be nonnull
✔ no news headlines should be general not categorical
✔ no news headline topics should be nonnull
✔ pl news headlines should be general not categorical
✔ pl news headline topics should be nonnull
✔ pt news headlines should be general not categorical
✔ pt news headline topics should be nonnull
✔ ru news headlines should be general not categorical
✔ ru news headline topics should be nonnull
✔ sco news headlines should be general not categorical
✔ sco news headline topics should be nonnull
✔ sv news headlines should be general not categorical
✔ sv news headline topics should be nonnull
✔ uk news headlines should be general not categorical
✔ uk news headline topics should be nonnull
✔ vi news headlines should be general not categorical
✔ vi news headline topics should be nonnull
✔ news headline topic should be the first bold link
✔ news headline topic should be the first link when no link is bolded
news
✔ test: results list should have expected properties (181ms)
✔ bs: results list should have expected properties (166ms)
✔ da: results list should have expected properties (152ms)
✔ de: results list should have expected properties (121ms)
✔ el: results list should have expected properties (94ms)
✔ en: results list should have expected properties (103ms)
✔ es: results list should have expected properties (130ms)
✔ fi: results list should have expected properties (210ms)
✔ fr: results list should have expected properties (435ms)
✔ he: results list should have expected properties (270ms)
✔ ko: results list should have expected properties (231ms)
✔ no: results list should have expected properties (159ms)
✔ pl: results list should have expected properties (178ms)
✔ pt: results list should have expected properties (2586ms)
✔ ru: results list should have expected properties (209ms)
✔ sco: results list should have expected properties (108ms)
✔ sv: results list should have expected properties (192ms)
✔ uk: results list should have expected properties (141ms)
✔ vi: results list should have expected properties (132ms)
onthisday
✔ all: unsupported language throws 404
✔ selected: unsupported language throws 404
✔ selected: fetches some results (314ms)
✔ births: unsupported language throws 404
✔ births: fetches some results (1148ms)
✔ deaths: unsupported language throws 404
✔ deaths: fetches some results (893ms)
✔ events: unsupported language throws 404
✔ events: fetches some results (920ms)
✔ holidays: unsupported language throws 404
✔ holidays: fetches some results (263ms)
✔ "all" fetches some results for births, deaths, events, holidays and selected (2373ms)
✔ verify contents in events (2654ms)
random/title
✔ pickBestResult should select best-scored title from sample
✔ redirects to the right format with random title - html (52ms)
✔ redirects to the right format with random title - invalid format
✔ returns 404 for yue.wikipedia.org
stopping test server
lib:announcements
✔ should return no announcement for inactive wiki
✔ should return one or more announcements for active wiki
lib:announcements:etc
✔ should return no image_url
✔ should return correct type
✔ countries is an array of strings
✔ should not deliver HTML in certain legacy iOS announcements fields
✔ iOS legacy fundraising announcement should have the proper platform ID
✔ iOS fundraising announcement should have the proper platform ID
✔ should deliver HTML in certain V2 announcements fields
✔ caption_HTML on iOS should be inside a paragraph
✔ caption_HTML on Android should not be inside a paragraph
✔ should return no image_url
✔ should return correct type
✔ countries is an array of strings
✔ should not deliver HTML in certain legacy iOS announcements fields
✔ iOS legacy fundraising announcement should have the proper platform ID
✔ iOS fundraising announcement should have the proper platform ID
✔ should deliver HTML in certain V2 announcements fields
✔ caption_HTML on iOS should be inside a paragraph
✔ caption_HTML on Android should not be inside a paragraph
✔ should return no image_url
✔ should return correct type
✔ countries is an array of strings
✔ should not deliver HTML in certain legacy iOS announcements fields
✔ iOS legacy fundraising announcement should have the proper platform ID
✔ iOS fundraising announcement should have the proper platform ID
✔ should deliver HTML in certain V2 announcements fields
✔ caption_HTML on iOS should be inside a paragraph
✔ caption_HTML on Android should not be inside a paragraph
✔ should return no image_url
✔ should return correct type
✔ countries is an array of strings
✔ should not deliver HTML in certain legacy iOS announcements fields
✔ iOS legacy fundraising announcement should have the proper platform ID
✔ iOS fundraising announcement should have the proper platform ID
✔ should deliver HTML in certain V2 announcements fields
✔ caption_HTML on iOS should be inside a paragraph
✔ caption_HTML on Android should not be inside a paragraph
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
✔ buildId should not return lower case characters
.hasEnded
✔ invalid endTime
✔ endTime has passed
✔ endTime has not passed yet
announcements-unit-config
✔ all dates should be valid
MW core page HTML
✔ fetches the core page html output only with title in params
✔ fetches the core page html output with revision in params
featured-unit
✔ isSupported should return the correct boolean
✔ findPageTitle should find the first bold link: a inside b
✔ findPageTitle should find the first bold link: b inside a
✔ findPageTitle should return undefined if nothing found
featured-image-unit
✔ structureExtMetadataValue returns description for preferred lang if present
✔ structureExtMetadataValue falls back to en description if preferred lang not present
✔ structureExtMetadataValue returns lang undefined for type of value equals to string
✔ structureExtMetadataValue returns undefined for undefined input
news-unit
✔ news story constructed correctly (duplicate titles handled correctly)
✔ floating spans are removed
onthisday-unit
✔ eventsForYearListElements returns a WMFEvent for only year list elements
✔ Sort year list events in correct BC[E] aware manner
page title generation: titleForDayPageFromMonthDayNumberStrings
✔ 1 digit mm and 1 digit dd
✔ 0 padded mm and 1 digit dd
✔ 0 padded mm and 0 padded dd
day page URI generation: dayTitleForRequest
✔ returns expected title for 0 padded month and 2 digit day
✔ returns expected title for 2 digit month and 0 padded day
✔ returns expected title for 1 digit month and 1 digit day
selected page URI generation: selectedTitleForRequest
✔ returns expected title for 0 padded month and 2 digit day
✔ returns expected title for 2 digit month and 0 padded day
✔ returns expected title for 1 digit month and 1 digit day
anchor to WMFPage transforms: wmfPageFromAnchorElement
✔ WMFPage model object is correctly created from a topic anchor
✔ WMFPage model object is correctly created from a non-topic anchor
wmfEventFromListElement: WMFEvent model object is correctly created
✔ from a selected list element
✔ from a birth list element
✔ from an event list element
✔ from a death list element
✔ from a birth list element
✔ from a selected div element on zhwiki
✔ wmfEventFromListElement should return null for elements not describing events
wmfHolidayFromListElement: WMFHoliday model object is correctly created
✔ WMFHoliday model object is correctly created from a holiday list element
yearListElementRegEx
✔ rejects malformed BC strings
✔ accepts well formed BC strings
✔ accepts well formed BCE strings
✔ accepts well formed CE strings
✔ accepts well formed year strings (no BCE/AD/CE)
✔ accepts well formed AD strings
✔ extracts expected BC/BCE strings
✔ extracts expected BC/BCE strings in Chinese
✔ AD strings should not be negated
✔ rejects non year list strings
✔ rejects strings missing text
listElementsByHeadingID extracts expected number of births from
✔ DE fixture (39ms)
✔ EN fixture (42ms)
✔ AR fixture (76ms)
✔ BS fixture
nested list element handling
✔ listElementsByHeadingID extracts expected number of holidays from EN fixture
✔ expected textContent for a list item NOT nested within another list item
✔ expected textContent for a list item nested within another list item
✔ expected textContent for list items nested within a year-dash list item
✔ expected textContent for list items nested within a year list item (no dash)
addPrefixFromAncestorListElementsToListElement
✔ expected extraction from ancestor year element
✔ expected extraction from multiline ancestor year element
✔ expected extraction from ancestor year element with dash
✔ expected extraction from ancestor year element with dash space
✔ expected extraction from multiline ancestor year element with dash
✔ expected extraction from multiline non-year ancestor
✔ expected extraction from double-nested list element
✔ expected extraction from triple-nested list element
✔ expected extraction from nested Russian list element with "год"
✔ Prefixed text content from ancestor element is escaped
isAnchorForYear
✔ correctly identifies anchor linking to year article
✔ correctly rejects anchor linking article starting with a year
✔ correctly rejects anchor linking article starting with a number
✔ correctly rejects anchor linking article not starting with a year
✔ correctly identifies anchor linking to year article with an era string
✔ correctly identifies anchor linking to year article with era string w/o space
non-article urls should be excluded
✔ exclude external url from WMFHoliday pages
✔ exclude external url from WMFEvent pages
✔ exclude redlinks from WMFEvent pages
style tags should be dropped
✔ exclude style tags
random
✔ pickBestResult should select best-scored title from sample
util
✔ promiseAwaitAll, ignoreRejected
✔ promiseAwaitAll, propagate rejected
removeDuplicateTitles
✔ deduplicates and applies update function
299 passing (40s)
1 pending
--- stdout ---
[master 39fc226] build: Updating npm dependencies
2 files changed, 245 insertions(+), 229 deletions(-)
--- end ---
$ git format-patch HEAD~1 --stdout
--- stdout ---
From 39fc226877768e381946ada48cda8575b8b1edb0 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Tue, 5 May 2026 06:40:56 +0000
Subject: [PATCH] build: Updating npm dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* eslint-config-wikimedia: 0.32.3 → 0.32.4
* axios: 1.15.0 → 1.16.0
* https://github.com/advisories/GHSA-3w6x-2g7m-8v23
* https://github.com/advisories/GHSA-445q-vr5w-6q77
* https://github.com/advisories/GHSA-5c9x-8gcm-mpgx
* https://github.com/advisories/GHSA-62hf-57xw-28j9
* https://github.com/advisories/GHSA-6chq-wfr3-2hj9
* https://github.com/advisories/GHSA-m7pr-hjqh-92cm
* https://github.com/advisories/GHSA-pf86-5x62-jrwf
* https://github.com/advisories/GHSA-pmwg-cvhr-8vh7
* https://github.com/advisories/GHSA-q8qp-cvcw-x6jj
* https://github.com/advisories/GHSA-vf2m-468p-8v99
* https://github.com/advisories/GHSA-w9j2-pvgh-6h63
* https://github.com/advisories/GHSA-xhjh-pmcv-23jw
* https://github.com/advisories/GHSA-xx6v-rp6x-q39c
Change-Id: I963742e488b8e92d0d1c0e2d88a8e04b7b66297b
---
package-lock.json | 472 ++++++++++++++++++++++++----------------------
package.json | 2 +-
2 files changed, 245 insertions(+), 229 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 0f2aa8e..cae76b0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -34,7 +34,7 @@
"ajv-formats": "^2.1.1",
"csv-parse": "^5.5.3",
"eslint": "8.57.0",
- "eslint-config-wikimedia": "0.32.3",
+ "eslint-config-wikimedia": "0.32.4",
"eslint-plugin-n": "^16.6.2",
"extend": "^3.0.2",
"mocha": "^10.3.0",
@@ -360,19 +360,32 @@
}
},
"node_modules/@es-joy/jsdoccomment": {
- "version": "0.76.0",
- "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.76.0.tgz",
- "integrity": "sha512-g+RihtzFgGTx2WYCuTHbdOXJeAlGnROws0TeALx9ow/ZmOROOZkVg5wp/B44n0WJgI4SQFP1eWM2iRPlU2Y14w==",
+ "version": "0.86.0",
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.86.0.tgz",
+ "integrity": "sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==",
"dev": true,
"dependencies": {
"@types/estree": "^1.0.8",
- "@typescript-eslint/types": "^8.46.0",
- "comment-parser": "1.4.1",
- "esquery": "^1.6.0",
- "jsdoc-type-pratt-parser": "~6.10.0"
+ "@typescript-eslint/types": "^8.58.0",
+ "comment-parser": "1.4.6",
+ "esquery": "^1.7.0",
+ "jsdoc-type-pratt-parser": "~7.2.0"
},
"engines": {
- "node": ">=20.11.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ }
+ },
+ "node_modules/@es-joy/jsdoccomment/node_modules/@typescript-eslint/types": {
+ "version": "8.59.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.2.tgz",
+ "integrity": "sha512-e82GVOE8Ps3E++Egvb6Y3Dw0S10u8NkQ9KXmtRhCWJJ8kDhOJTvtMAWnFL16kB1583goCWXsr0NieKCZMs2/0Q==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
"node_modules/@es-joy/resolve.exports": {
@@ -385,9 +398,9 @@
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
- "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
"dev": true,
"dependencies": {
"eslint-visitor-keys": "^3.4.3"
@@ -403,9 +416,9 @@
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
- "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
"dev": true,
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -703,9 +716,9 @@
}
},
"node_modules/@mdn/browser-compat-data": {
- "version": "5.7.6",
- "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.7.6.tgz",
- "integrity": "sha512-7xdrMX0Wk7grrTZQwAoy1GkvPMFoizStUoL+VmtUkAxegbCCec+3FKwOM6yc/uGU5+BEczQHXAlWiqvM8JeENg==",
+ "version": "6.1.5",
+ "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-6.1.5.tgz",
+ "integrity": "sha512-PzdZZzRhcXvKB0begee28n5lvwAcinGKYuLZOVxHAZm+n7y01ddEGfdS1ZXRuVcV+ndG6mSEAE8vgudom5UjYg==",
"dev": true
},
"node_modules/@nodelib/fs.scandir": {
@@ -878,20 +891,19 @@
"dev": true
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.0.tgz",
- "integrity": "sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz",
+ "integrity": "sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==",
"dev": true,
"dependencies": {
- "@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.46.0",
- "@typescript-eslint/type-utils": "8.46.0",
- "@typescript-eslint/utils": "8.46.0",
- "@typescript-eslint/visitor-keys": "8.46.0",
- "graphemer": "^1.4.0",
- "ignore": "^7.0.0",
+ "@eslint-community/regexpp": "^4.12.2",
+ "@typescript-eslint/scope-manager": "8.54.0",
+ "@typescript-eslint/type-utils": "8.54.0",
+ "@typescript-eslint/utils": "8.54.0",
+ "@typescript-eslint/visitor-keys": "8.54.0",
+ "ignore": "^7.0.5",
"natural-compare": "^1.4.0",
- "ts-api-utils": "^2.1.0"
+ "ts-api-utils": "^2.4.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -901,7 +913,7 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.46.0",
+ "@typescript-eslint/parser": "^8.54.0",
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
@@ -916,16 +928,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.0.tgz",
- "integrity": "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.54.0.tgz",
+ "integrity": "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "8.46.0",
- "@typescript-eslint/types": "8.46.0",
- "@typescript-eslint/typescript-estree": "8.46.0",
- "@typescript-eslint/visitor-keys": "8.46.0",
- "debug": "^4.3.4"
+ "@typescript-eslint/scope-manager": "8.54.0",
+ "@typescript-eslint/types": "8.54.0",
+ "@typescript-eslint/typescript-estree": "8.54.0",
+ "@typescript-eslint/visitor-keys": "8.54.0",
+ "debug": "^4.4.3"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -963,14 +975,14 @@
"dev": true
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.0.tgz",
- "integrity": "sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.54.0.tgz",
+ "integrity": "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==",
"dev": true,
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.46.0",
- "@typescript-eslint/types": "^8.46.0",
- "debug": "^4.3.4"
+ "@typescript-eslint/tsconfig-utils": "^8.54.0",
+ "@typescript-eslint/types": "^8.54.0",
+ "debug": "^4.4.3"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1007,13 +1019,13 @@
"dev": true
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz",
- "integrity": "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz",
+ "integrity": "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "8.46.0",
- "@typescript-eslint/visitor-keys": "8.46.0"
+ "@typescript-eslint/types": "8.54.0",
+ "@typescript-eslint/visitor-keys": "8.54.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1024,9 +1036,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz",
- "integrity": "sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz",
+ "integrity": "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==",
"dev": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1040,16 +1052,16 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.0.tgz",
- "integrity": "sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.54.0.tgz",
+ "integrity": "sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "8.46.0",
- "@typescript-eslint/typescript-estree": "8.46.0",
- "@typescript-eslint/utils": "8.46.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^2.1.0"
+ "@typescript-eslint/types": "8.54.0",
+ "@typescript-eslint/typescript-estree": "8.54.0",
+ "@typescript-eslint/utils": "8.54.0",
+ "debug": "^4.4.3",
+ "ts-api-utils": "^2.4.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1087,9 +1099,9 @@
"dev": true
},
"node_modules/@typescript-eslint/types": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.0.tgz",
- "integrity": "sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.54.0.tgz",
+ "integrity": "sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==",
"dev": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1100,21 +1112,20 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz",
- "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz",
+ "integrity": "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/project-service": "8.46.0",
- "@typescript-eslint/tsconfig-utils": "8.46.0",
- "@typescript-eslint/types": "8.46.0",
- "@typescript-eslint/visitor-keys": "8.46.0",
- "debug": "^4.3.4",
- "fast-glob": "^3.3.2",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^2.1.0"
+ "@typescript-eslint/project-service": "8.54.0",
+ "@typescript-eslint/tsconfig-utils": "8.54.0",
+ "@typescript-eslint/types": "8.54.0",
+ "@typescript-eslint/visitor-keys": "8.54.0",
+ "debug": "^4.4.3",
+ "minimatch": "^9.0.5",
+ "semver": "^7.7.3",
+ "tinyglobby": "^0.2.15",
+ "ts-api-utils": "^2.4.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1175,15 +1186,15 @@
"dev": true
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.0.tgz",
- "integrity": "sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.54.0.tgz",
+ "integrity": "sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==",
"dev": true,
"dependencies": {
- "@eslint-community/eslint-utils": "^4.7.0",
- "@typescript-eslint/scope-manager": "8.46.0",
- "@typescript-eslint/types": "8.46.0",
- "@typescript-eslint/typescript-estree": "8.46.0"
+ "@eslint-community/eslint-utils": "^4.9.1",
+ "@typescript-eslint/scope-manager": "8.54.0",
+ "@typescript-eslint/types": "8.54.0",
+ "@typescript-eslint/typescript-estree": "8.54.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1198,12 +1209,12 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz",
- "integrity": "sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz",
+ "integrity": "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "8.46.0",
+ "@typescript-eslint/types": "8.54.0",
"eslint-visitor-keys": "^4.2.1"
},
"engines": {
@@ -1253,9 +1264,9 @@
}
},
"node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -1430,6 +1441,12 @@
"@mdn/browser-compat-data": "^5.6.19"
}
},
+ "node_modules/ast-metadata-inferer/node_modules/@mdn/browser-compat-data": {
+ "version": "5.7.6",
+ "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.7.6.tgz",
+ "integrity": "sha512-7xdrMX0Wk7grrTZQwAoy1GkvPMFoizStUoL+VmtUkAxegbCCec+3FKwOM6yc/uGU5+BEczQHXAlWiqvM8JeENg==",
+ "dev": true
+ },
"node_modules/async": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
@@ -1454,11 +1471,11 @@
"integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw=="
},
"node_modules/axios": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
- "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz",
+ "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==",
"dependencies": {
- "follow-redirects": "^1.15.11",
+ "follow-redirects": "^1.16.0",
"form-data": "^4.0.5",
"proxy-from-env": "^2.1.0"
}
@@ -1968,9 +1985,9 @@
}
},
"node_modules/comment-parser": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz",
- "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
+ "version": "1.4.6",
+ "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.6.tgz",
+ "integrity": "sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==",
"dev": true,
"engines": {
"node": ">= 12.0.0"
@@ -2305,13 +2322,13 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.18.3",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz",
- "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==",
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz",
+ "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
+ "tapable": "^2.3.3"
},
"engines": {
"node": ">=10.13.0"
@@ -2479,34 +2496,36 @@
}
},
"node_modules/eslint-config-wikimedia": {
- "version": "0.32.3",
- "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.32.3.tgz",
- "integrity": "sha512-Ekz2/ozpCCjQl3VbC6dW7ChqoW7FRilLDxmJ+FJOZhIxxzZSZR5QqQOAGWSZAlG1ONkZbYV/TPwGLWZcrNxyaA==",
+ "version": "0.32.4",
+ "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.32.4.tgz",
+ "integrity": "sha512-zcHJYss2vo8HK5PzkFuaV9mzaSGRuhA+jFGoQ4rNIwWz0usZsuQ2LYpkKxrbCVX1CbV0PzG+jJ6p0cLI+G37JQ==",
"dev": true,
"dependencies": {
"@stylistic/eslint-plugin": "^3.1.0",
- "@typescript-eslint/eslint-plugin": "8.46.0",
- "@typescript-eslint/parser": "8.46.0",
+ "@typescript-eslint/eslint-plugin": "8.54.0",
+ "@typescript-eslint/parser": "8.54.0",
"browserslist-config-wikimedia": "^0.7.0",
- "eslint": "^8.57.0",
- "eslint-plugin-compat": "^6.0.2",
+ "eslint-plugin-compat": "^6.1.0",
"eslint-plugin-es-x": "^8.7.0",
- "eslint-plugin-jest": "^29.0.1",
- "eslint-plugin-jsdoc": "61.3.0",
+ "eslint-plugin-jest": "^29.12.2",
+ "eslint-plugin-jsdoc": "^62.9.0",
"eslint-plugin-json-es": "^1.6.0",
- "eslint-plugin-mediawiki": "^0.8.2",
+ "eslint-plugin-mediawiki": "^0.8.3",
"eslint-plugin-mocha": "^10.5.0",
- "eslint-plugin-n": "^17.23.1",
- "eslint-plugin-no-jquery": "^3.1.1",
- "eslint-plugin-qunit": "^8.2.5",
- "eslint-plugin-security": "^3.0.1",
+ "eslint-plugin-n": "^17.24.0",
+ "eslint-plugin-no-jquery": "^4.0.0",
+ "eslint-plugin-qunit": "^8.2.6",
+ "eslint-plugin-security": "^4.0.0",
"eslint-plugin-unicorn": "^56.0.1",
"eslint-plugin-vue": "^9.33.0",
- "eslint-plugin-wdio": "^9.16.2",
+ "eslint-plugin-wdio": "9.23.0",
"eslint-plugin-yml": "^1.19.0"
},
"engines": {
"node": ">=20 <25"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0"
}
},
"node_modules/eslint-config-wikimedia/node_modules/eslint-plugin-es-x": {
@@ -2546,9 +2565,9 @@
}
},
"node_modules/eslint-config-wikimedia/node_modules/eslint-plugin-n": {
- "version": "17.23.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.23.1.tgz",
- "integrity": "sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==",
+ "version": "17.24.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.24.0.tgz",
+ "integrity": "sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.5.0",
@@ -2605,15 +2624,14 @@
}
},
"node_modules/eslint-plugin-compat": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-6.0.2.tgz",
- "integrity": "sha512-1ME+YfJjmOz1blH0nPZpHgjMGK4kjgEeoYqGCqoBPQ/mGu/dJzdoP0f1C8H2jcWZjzhZjAMccbM/VdXhPORIfA==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-6.2.1.tgz",
+ "integrity": "sha512-gLKqUH+lQcCL+HzsROUjBDvakc5Zaga51Y4ZAkPCXc41pzKBfyluqTr2j8zOx8QQQb7zyglu1LVoL5aSNWf2SQ==",
"dev": true,
"dependencies": {
- "@mdn/browser-compat-data": "^5.5.35",
+ "@mdn/browser-compat-data": "^6.1.1",
"ast-metadata-inferer": "^0.8.1",
- "browserslist": "^4.24.2",
- "caniuse-lite": "^1.0.30001687",
+ "browserslist": "^4.25.2",
"find-up": "^5.0.0",
"globals": "^15.7.0",
"lodash.memoize": "^4.1.2",
@@ -2623,7 +2641,7 @@
"node": ">=18.x"
},
"peerDependencies": {
- "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0"
+ "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0"
}
},
"node_modules/eslint-plugin-compat/node_modules/globals": {
@@ -2689,31 +2707,31 @@
}
},
"node_modules/eslint-plugin-jsdoc": {
- "version": "61.3.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-61.3.0.tgz",
- "integrity": "sha512-E4m/5J5lrasd63Z74q4CCZ4PFnywnnrcvA7zZ98802NPhrZKKTp5NH+XAT+afcjXp2ps2/OQF5gPSWCT2XFCJg==",
+ "version": "62.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-62.9.0.tgz",
+ "integrity": "sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==",
"dev": true,
"dependencies": {
- "@es-joy/jsdoccomment": "~0.76.0",
+ "@es-joy/jsdoccomment": "~0.86.0",
"@es-joy/resolve.exports": "1.2.0",
"are-docs-informative": "^0.0.2",
- "comment-parser": "1.4.1",
+ "comment-parser": "1.4.6",
"debug": "^4.4.3",
"escape-string-regexp": "^4.0.0",
- "espree": "^10.4.0",
- "esquery": "^1.6.0",
+ "espree": "^11.2.0",
+ "esquery": "^1.7.0",
"html-entities": "^2.6.0",
"object-deep-merge": "^2.0.0",
"parse-imports-exports": "^0.2.4",
- "semver": "^7.7.3",
+ "semver": "^7.7.4",
"spdx-expression-parse": "^4.0.0",
"to-valid-identifier": "^1.0.0"
},
"engines": {
- "node": ">=20.11.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
+ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0"
}
},
"node_modules/eslint-plugin-jsdoc/node_modules/debug": {
@@ -2734,29 +2752,29 @@
}
},
"node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
"dev": true,
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint-plugin-jsdoc/node_modules/espree": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
- "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz",
+ "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==",
"dev": true,
"dependencies": {
- "acorn": "^8.15.0",
+ "acorn": "^8.16.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.1"
+ "eslint-visitor-keys": "^5.0.1"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -2782,9 +2800,9 @@
}
},
"node_modules/eslint-plugin-mediawiki": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.8.2.tgz",
- "integrity": "sha512-ydYrpkzm8IVVDQA96QPF3HnFd2xjkIEh7gixD2gvOqUbUZF0p36LtpWXOFAlPWAvHLePWbNNTD5ovd3d4hEtog==",
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.8.3.tgz",
+ "integrity": "sha512-RQKZd40C1taMDk5N9+aFLEBGBB95RNG7Gc54EsJ8pHsJu8//nIdpxNFWPtQz6RNxz6pZUXBnMCxzkMOLM3Mm1w==",
"dev": true,
"dependencies": {
"upath": "^2.0.1"
@@ -2839,31 +2857,34 @@
}
},
"node_modules/eslint-plugin-no-jquery": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.1.1.tgz",
- "integrity": "sha512-LTLO3jH/Tjr1pmxCEqtV6qmt+OChv8La4fwgG470JRpgxyFF4NOzoC9CRy92GIWD3Yjl0qLEgPmD2FLQWcNEjg==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-4.0.0.tgz",
+ "integrity": "sha512-ZR631D3qIQfgjKOAcgvYa5cB8xdTvFXAD5MbK5x5WltLSwFxmGnoaTXNtnptFU7py07ALrIe5dZRYncu4RD/Ug==",
"dev": true,
"peerDependencies": {
- "eslint": ">=8.0.0"
+ "eslint": ">=8.0.0 <9.0.0"
}
},
"node_modules/eslint-plugin-qunit": {
- "version": "8.2.5",
- "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-8.2.5.tgz",
- "integrity": "sha512-qr7RJCYImKQjB+39q4q46i1l7p1V3joHzBE5CAYfxn5tfVFjrnjn/tw7q/kDyweU9kAIcLul0Dx/KWVUCb3BgA==",
+ "version": "8.2.6",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-8.2.6.tgz",
+ "integrity": "sha512-S1jC/DIW9J8VtNX4uG1vlf5FZVrfQFlcuiYmvTHR2IICUhubHqpWA5o+qS1tujh+81Gs39omKV2D4OXfbSJE5g==",
"dev": true,
"dependencies": {
- "eslint-utils": "^3.0.0",
+ "@eslint-community/eslint-utils": "^4.4.0",
"requireindex": "^1.2.0"
},
"engines": {
"node": "^16.0.0 || ^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=8.38.0"
}
},
"node_modules/eslint-plugin-security": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-3.0.1.tgz",
- "integrity": "sha512-XjVGBhtDZJfyuhIxnQ/WMm385RbX3DBu7H1J7HNNhmB2tnGxMeqVSnYv79oAj992ayvIBZghsymwkYFS6cGH4Q==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-4.0.0.tgz",
+ "integrity": "sha512-tfuQT8K/Li1ZxhFzyD8wPIKtlzZxqBcPr9q0jFMQ77wWAbKBVEhaMPVQRTMTvCMUDhwBe5vPVqQPwAGk/ASfxQ==",
"dev": true,
"dependencies": {
"safe-regex": "^2.1.1"
@@ -2943,9 +2964,9 @@
}
},
"node_modules/eslint-plugin-wdio": {
- "version": "9.16.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-9.16.2.tgz",
- "integrity": "sha512-qkqsPgxN70OnUPWMjmzJbSbvm2+Q087JIGss53/OFI4Y46xKlV5VLhLiYealaAibAiXmnfWKd0tERjZAzVL87A==",
+ "version": "9.23.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-9.23.0.tgz",
+ "integrity": "sha512-8tcpupzp2Qmv+uSfhzeHi42LVA9PyjkpMBPclSIkPxBfXpj4fMrejwAHu1PROh1OmJN1VQcGQUTWvSzyRcV2vA==",
"dev": true,
"engines": {
"node": ">=18.20.0"
@@ -3142,9 +3163,9 @@
}
},
"node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
"dev": true,
"dependencies": {
"estraverse": "^5.1.0"
@@ -3254,34 +3275,6 @@
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
- "node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -4383,9 +4376,9 @@
"integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
},
"node_modules/jsdoc-type-pratt-parser": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-6.10.0.tgz",
- "integrity": "sha512-+LexoTRyYui5iOhJGn13N9ZazL23nAHGkXsa1p/C8yeq79WRfLBag6ZZ0FQG2aRoc9yfo59JT9EYCQonOkHKkQ==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.2.0.tgz",
+ "integrity": "sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==",
"dev": true,
"engines": {
"node": ">=20.0.0"
@@ -4672,15 +4665,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
@@ -4689,19 +4673,6 @@
"node": ">= 0.6"
}
},
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
"node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
@@ -6427,9 +6398,9 @@
}
},
"node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"bin": {
"semver": "bin/semver.js"
},
@@ -6934,9 +6905,9 @@
}
},
"node_modules/tapable": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
- "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz",
+ "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==",
"dev": true,
"engines": {
"node": ">=6"
@@ -7022,6 +6993,51 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "node_modules/tinyglobby": {
+ "version": "0.2.16",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
+ "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
+ "dev": true,
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -7071,9 +7087,9 @@
}
},
"node_modules/ts-api-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
- "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
"dev": true,
"engines": {
"node": ">=18.12"
diff --git a/package.json b/package.json
index 28fecc4..3c70b22 100644
--- a/package.json
+++ b/package.json
@@ -64,7 +64,7 @@
"ajv-formats": "^2.1.1",
"csv-parse": "^5.5.3",
"eslint": "8.57.0",
- "eslint-config-wikimedia": "0.32.3",
+ "eslint-config-wikimedia": "0.32.4",
"eslint-plugin-n": "^16.6.2",
"extend": "^3.0.2",
"mocha": "^10.3.0",
--
2.47.3
--- end ---