From 59ffee7a2c5f08abec86d9a7cc9d31a0acd8b7ec Mon Sep 17 00:00:00 2001 From: Muunatic Date: Fri, 6 Sep 2024 21:50:03 +0700 Subject: [PATCH 01/27] feat(prs): tag maintainers for non user prs --- src/class/prsReview.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/class/prsReview.ts b/src/class/prsReview.ts index f8a7f29..b420c14 100644 --- a/src/class/prsReview.ts +++ b/src/class/prsReview.ts @@ -127,6 +127,19 @@ export default class PullRequestReview { * @returns {Promise} */ public async botPRs(): Promise { + const maintainers:string[] = []; + await this.context.octokit.pulls.listReviews({ + owner: this.context.payload.repository.owner.login, + repo: this.context.payload.repository.name, + pull_number: this.context.payload.pull_request.number + }).then((a) => { + a.data.forEach((data) => { + if (data.user?.login && !maintainers.includes(`@${data.user.login}`) && this.context.payload.review.user.login !== data.user.login && data.user.type.toLowerCase() !== "bot" && (data.author_association === "COLLABORATOR" || data.author_association === "MEMBER" || data.author_association === "OWNER")) { + maintainers.push(`@${data.user.login}`); + } + }); + }); + if (this.context.payload.sender.login === this.context.payload.repository.owner.login) { // Owner if (this.context.payload.review.state === "approved") { @@ -137,7 +150,7 @@ export default class PullRequestReview { await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } } else if (this.context.payload.review.state === "changes_requested") { - const reviewMessage = `@${this.context.payload.pull_request.user.login} your pull request has requested changes by \`[OWNER]\`@${this.context.payload.review.user.login}. Please address their comments before I'm merging this PR, thanks!`; + const reviewMessage = `@${this.context.payload.pull_request.user.login} pull request has requested changes by \`[OWNER]\`@${this.context.payload.review.user.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; if (this.context.payload.pull_request.labels.find((a) => a.name === "Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { @@ -153,7 +166,7 @@ export default class PullRequestReview { await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } } else if (this.context.payload.review.state === "changes_requested") { - const reviewMessage = `Pull request has requested changes by \`[MAINTAINER]\`@${this.context.payload.review.user.login}. PING! @${this.context.payload.pull_request.user.login} Please address their comments before I"m merging this PR, thanks!`; + const reviewMessage = `Pull request has requested changes by \`[MAINTAINER]\`@${this.context.payload.review.user.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; if (this.context.payload.pull_request.labels.find((a) => a.name === "Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { @@ -170,7 +183,7 @@ export default class PullRequestReview { await this.createReview(reviewMessage, ["Others Approved"], ["Pending"]); } } else if (this.context.payload.review.state === "changes_requested") { - const reviewMessage = `Pull request has requested changes by @${this.context.payload.review.user.login}. PING! @${this.context.payload.pull_request.user.login} Please address their comments before I'm merging this PR, thanks!`; + const reviewMessage = `Pull request has requested changes by @${this.context.payload.review.user.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; if (this.context.payload.pull_request.labels.find((a) => a.name === "Others Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Others Approved", "Pending"]); } else { From 95b98e8e11edcf2d9d1a7591c4b204d5abd018d1 Mon Sep 17 00:00:00 2001 From: wakame Date: Thu, 12 Sep 2024 19:30:01 +0700 Subject: [PATCH 02/27] refactor: use map method Co-authored-by: Haruyaki <52639021+HarunamiYaki@users.noreply.github.com> --- src/class/prsReview.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/class/prsReview.ts b/src/class/prsReview.ts index b420c14..3b31b2a 100644 --- a/src/class/prsReview.ts +++ b/src/class/prsReview.ts @@ -127,19 +127,20 @@ export default class PullRequestReview { * @returns {Promise} */ public async botPRs(): Promise { - const maintainers:string[] = []; - await this.context.octokit.pulls.listReviews({ + const maintainers: ReadonlyArray = await this.context.octokit.pulls.listReviews({ owner: this.context.payload.repository.owner.login, repo: this.context.payload.repository.name, pull_number: this.context.payload.pull_request.number - }).then((a) => { - a.data.forEach((data) => { - if (data.user?.login && !maintainers.includes(`@${data.user.login}`) && this.context.payload.review.user.login !== data.user.login && data.user.type.toLowerCase() !== "bot" && (data.author_association === "COLLABORATOR" || data.author_association === "MEMBER" || data.author_association === "OWNER")) { - maintainers.push(`@${data.user.login}`); - } + }).then((response) => { + return response.data.filter((data) => + data.user?.login && + this.context.payload.review.user.login !== data.user.login && + data.user.type.toLowerCase() !== "bot" && + ["COLLABORATOR", "MEMBER", "OWNER"].includes(data.author_association) + ).map((data) => { + return `@${data.user?.login}`; }); }); - if (this.context.payload.sender.login === this.context.payload.repository.owner.login) { // Owner if (this.context.payload.review.state === "approved") { From eae0f12a0d44a3c19cd469dc112c9d2329fee73c Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 1 Oct 2024 21:48:04 +0700 Subject: [PATCH 03/27] refactor: improve tsconfig validation to report missing rules --- src/class/prsOpen.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/class/prsOpen.ts b/src/class/prsOpen.ts index 449823b..72715e5 100644 --- a/src/class/prsOpen.ts +++ b/src/class/prsOpen.ts @@ -157,8 +157,18 @@ export default class PullRequestOpen { path: "tsconfig.json" }).then(async (res) => { if ("content" in res.data) { - const textContent:string = res.data.content; - const decodeContent:string = Buffer.from(textContent, "base64").toString("utf-8"); + const textContent: string = res.data.content; + const decodeContent: string = Buffer.from(textContent, "base64").toString("utf-8"); + + const requiredRules = { + noImplicitAny: "\"noImplicitAny\": true", + noImplicitThis: "\"noImplicitThis\": true", + strictFunctionTypes: "\"strictFunctionTypes\": true", + strictNullChecks: "\"strictNullChecks\": true" + }; + + const missingRules = Object.values(requiredRules).filter((a) => !decodeContent.includes(a)); + if (decodeContent.includes("\"noImplicitAny\": true") && decodeContent.includes("\"noImplicitThis\": true") && decodeContent.includes("\"strictFunctionTypes\": true") && decodeContent.includes("\"strictNullChecks\": true")) { return; } else { @@ -168,7 +178,7 @@ export default class PullRequestOpen { }) ); const configInvalid = this.context.issue({ - body: `[tsconfig](${res.data.html_url}) need [*noImplicitAny*, *noImplicitThis*, *strictFunctionTypes*, *strictNullChecks*] to true value` + body: `[tsconfig](${res.data.html_url}) needs the following rules to be set to true: ${missingRules.join(", ")}` }); await this.context.octokit.issues.createComment(configInvalid); } From a50fdea83b5759f43c10b29a01b5d886f2e27595 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 15 Oct 2024 08:15:04 +0700 Subject: [PATCH 04/27] style: change naming convention --- src/class/push.ts | 6 +++--- src/index.ts | 4 ++-- src/structures/type.ts | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/class/push.ts b/src/class/push.ts index 78bf164..db79b47 100644 --- a/src/class/push.ts +++ b/src/class/push.ts @@ -1,4 +1,4 @@ -import Context, { getEvent, getUserData, octokit, token } from "../index"; +import Context, { GetEvent, GetUserData, octokit, token } from "../index"; /** * @class @@ -34,7 +34,7 @@ export default class Push { * @returns {Promise} */ async function userActivity(): Promise { - const arrayActivity: getUserData = { "userData": [] }; + const arrayActivity: GetUserData = { "userData": [] }; await fetch("https://api.github.com/users/Muunatic/events/public", { method: "GET", headers: { @@ -44,7 +44,7 @@ export default class Push { } }).then((res: Response) => { return res.json(); - }).then((res: [getEvent]) => { + }).then((res: [GetEvent]) => { let i: number; for (i = 0; i < res.length; i++) { if (res[i].type === "PushEvent") { diff --git a/src/index.ts b/src/index.ts index 0e327ce..fe15c50 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,7 +3,7 @@ import { Octokit } from "octokit"; import { createAppAuth } from "@octokit/auth-app"; import { token } from "./data/config"; import { IssuesClose, IssuesComment, IssuesOpen, PRsStale, PullRequestOpen, PullRequestReview, PullRequestSynchronize, Push, WorkflowCheck } from "./structures/constant"; -import { getEvent, getUserData } from "./structures/type"; +import { GetEvent, GetUserData } from "./structures/type"; import "./structures/listener"; import dotenv from "dotenv"; dotenv.config(); @@ -114,4 +114,4 @@ setInterval(() => { export default Context; export { octokit, token }; -export type { getEvent, getUserData }; +export type { GetEvent, GetUserData }; diff --git a/src/structures/type.ts b/src/structures/type.ts index ce31806..2d466df 100644 --- a/src/structures/type.ts +++ b/src/structures/type.ts @@ -1,12 +1,12 @@ -export type getUserData = { - userData: userDataInterface[]; +export type GetUserData = { + userData: UserDataInterface[]; } -type userDataInterface = { +type UserDataInterface = { event: string; } -export type getEvent = { +export type GetEvent = { id: string; type: string; From 91d0b27c0a4f6d61049fcf2a3851ab24399e7bea Mon Sep 17 00:00:00 2001 From: Muunatic Date: Fri, 18 Oct 2024 21:53:54 +0700 Subject: [PATCH 05/27] refactor(prsOpen): using forEach instead of for loop --- src/class/prsOpen.ts | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/class/prsOpen.ts b/src/class/prsOpen.ts index 72715e5..466287d 100644 --- a/src/class/prsOpen.ts +++ b/src/class/prsOpen.ts @@ -34,9 +34,9 @@ export default class PullRequestOpen { pull_number: this.context.payload.number }).then(async (res) => { const filterFiles = res.data.filter((a) => a.filename !== "package.json" && a.filename !== "package-lock.json"); - for (let i = 0; i < filterFiles.length; i++) { - totalChanges += filterFiles[i].changes; - } + filterFiles.forEach((file) => { + totalChanges += file.changes; + }); if (totalChanges > 1000) { await this.context.octokit.issues.addLabels( @@ -62,21 +62,19 @@ export default class PullRequestOpen { pull_number: this.context.payload.number }).then(async (res) => { const listFiles = res.data.map((a) => a.filename); - for (let i = 0; i < listFiles.length; i++) { - if (/src\/index/i.test(listFiles[i])) { + listFiles.forEach((file) => { + if (/src\/index/i.test(file)) { fileLabels.push("Core"); - } else if (/src\/class\/prs/i.test(listFiles[i])) { + } else if (/src\/class\/prs/i.test(file)) { fileLabels.push("lib: Pull Request"); - } else if (/src\/class\/issues/i.test(listFiles[i])) { + } else if (/src\/class\/issues/i.test(file)) { fileLabels.push("lib: Issues"); - } else if (/src\/class\/push/i.test(listFiles[i])) { + } else if (/src\/class\/push/i.test(file)) { fileLabels.push("lib: Push"); - } else if (/src\/class\/workflow/i.test(listFiles[i])) { + } else if (/src\/class\/workflow/i.test(file)) { fileLabels.push("lib: Workflow"); - } else { - continue; } - } + }); if (fileLabels.length > 0) { new Set(fileLabels).forEach((a) => filteredlabels.push(a)); From d84a597e142c35ac33e7dd3c366e81c0d4188f3f Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 14 Apr 2025 11:11:41 +0700 Subject: [PATCH 06/27] build(tsconfig): update typescript module system to node16 for ESM support --- tsconfig.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index b8b9db1..d41109a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,10 +1,10 @@ { "compilerOptions": { - "module": "commonjs", - "target": "ES2021", + "module": "Node16", + "target": "ES2023", "outDir": "dist", "lib": [ - "ES2021", + "ES2023", "dom" ], "alwaysStrict": true, @@ -14,7 +14,7 @@ "forceConsistentCasingInFileNames": true, "inlineSourceMap": true, "inlineSources": true, - "moduleResolution": "node", + "moduleResolution": "node16", "noEmitOnError": true, "noImplicitAny": true, "noImplicitOverride": true, From 828a72010ceeecbaf562adddf870e91e2dfb1e67 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Wed, 16 Apr 2025 10:18:34 +0700 Subject: [PATCH 07/27] chore(package): remove package-lock.json --- package-lock.json | 4916 --------------------------------------------- 1 file changed, 4916 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 3361727..0000000 --- a/package-lock.json +++ /dev/null @@ -1,4916 +0,0 @@ -{ - "name": "typeslint-cli", - "version": "3.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "typeslint-cli", - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "octokit": "^3.2.1", - "probot": "^12.4.0", - "smee-client": "^2.0.1" - }, - "devDependencies": { - "@octokit/auth-app": "^6.1.1", - "@octokit/rest": "^20.1.1", - "@types/node": "^18.19.39", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "eslint": "^8.57.0", - "typescript": "5.3.3" - }, - "engines": { - "node": ">=18.19.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@hapi/bourne": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.1.0.tgz", - "integrity": "sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q==" - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@octokit/app": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-14.0.2.tgz", - "integrity": "sha512-NCSCktSx+XmjuSUVn2dLfqQ9WIYePGP95SDJs4I9cn/0ZkeXcPkaoCLl64Us3dRKL2ozC7hArwze5Eu+/qt1tg==", - "dependencies": { - "@octokit/auth-app": "^6.0.0", - "@octokit/auth-unauthenticated": "^5.0.0", - "@octokit/core": "^5.0.0", - "@octokit/oauth-app": "^6.0.0", - "@octokit/plugin-paginate-rest": "^9.0.0", - "@octokit/types": "^12.0.0", - "@octokit/webhooks": "^12.0.4" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/auth-app": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-6.1.1.tgz", - "integrity": "sha512-VrTtzRpyuT5nYGUWeGWQqH//hqEZDV+/yb6+w5wmWpmmUA1Tx950XsAc2mBBfvusfcdF2E7w8jZ1r1WwvfZ9pA==", - "dependencies": { - "@octokit/auth-oauth-app": "^7.1.0", - "@octokit/auth-oauth-user": "^4.1.0", - "@octokit/request": "^8.3.1", - "@octokit/request-error": "^5.1.0", - "@octokit/types": "^13.1.0", - "deprecation": "^2.3.1", - "lru-cache": "^10.0.0", - "universal-github-app-jwt": "^1.1.2", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/auth-app/node_modules/@octokit/openapi-types": { - "version": "22.0.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.0.1.tgz", - "integrity": "sha512-1yN5m1IMNXthoBDUXFF97N1gHop04B3H8ws7wtOr8GgRyDO1gKALjwMHARNBoMBiB/2vEe/vxstrApcJZzQbnQ==" - }, - "node_modules/@octokit/auth-app/node_modules/@octokit/types": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.4.0.tgz", - "integrity": "sha512-WlMegy3lPXYWASe3k9Jslc5a0anrYAYMWtsFrxBTdQjS70hvLH6C+PGvHbOsgy3RA3LouGJoU/vAt4KarecQLQ==", - "dependencies": { - "@octokit/openapi-types": "^22.0.1" - } - }, - "node_modules/@octokit/auth-oauth-app": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz", - "integrity": "sha512-w+SyJN/b0l/HEb4EOPRudo7uUOSW51jcK1jwLa+4r7PA8FPFpoxEnHBHMITqCsc/3Vo2qqFjgQfz/xUUvsSQnA==", - "dependencies": { - "@octokit/auth-oauth-device": "^6.1.0", - "@octokit/auth-oauth-user": "^4.1.0", - "@octokit/request": "^8.3.1", - "@octokit/types": "^13.0.0", - "@types/btoa-lite": "^1.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/openapi-types": { - "version": "22.0.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.0.1.tgz", - "integrity": "sha512-1yN5m1IMNXthoBDUXFF97N1gHop04B3H8ws7wtOr8GgRyDO1gKALjwMHARNBoMBiB/2vEe/vxstrApcJZzQbnQ==" - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/types": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.4.0.tgz", - "integrity": "sha512-WlMegy3lPXYWASe3k9Jslc5a0anrYAYMWtsFrxBTdQjS70hvLH6C+PGvHbOsgy3RA3LouGJoU/vAt4KarecQLQ==", - "dependencies": { - "@octokit/openapi-types": "^22.0.1" - } - }, - "node_modules/@octokit/auth-oauth-device": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz", - "integrity": "sha512-FNQ7cb8kASufd6Ej4gnJ3f1QB5vJitkoV1O0/g6e6lUsQ7+VsSNRHRmFScN2tV4IgKA12frrr/cegUs0t+0/Lw==", - "dependencies": { - "@octokit/oauth-methods": "^4.1.0", - "@octokit/request": "^8.3.1", - "@octokit/types": "^13.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/openapi-types": { - "version": "22.0.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.0.1.tgz", - "integrity": "sha512-1yN5m1IMNXthoBDUXFF97N1gHop04B3H8ws7wtOr8GgRyDO1gKALjwMHARNBoMBiB/2vEe/vxstrApcJZzQbnQ==" - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/types": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.4.0.tgz", - "integrity": "sha512-WlMegy3lPXYWASe3k9Jslc5a0anrYAYMWtsFrxBTdQjS70hvLH6C+PGvHbOsgy3RA3LouGJoU/vAt4KarecQLQ==", - "dependencies": { - "@octokit/openapi-types": "^22.0.1" - } - }, - "node_modules/@octokit/auth-oauth-user": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz", - "integrity": "sha512-FrEp8mtFuS/BrJyjpur+4GARteUCrPeR/tZJzD8YourzoVhRics7u7we/aDcKv+yywRNwNi/P4fRi631rG/OyQ==", - "dependencies": { - "@octokit/auth-oauth-device": "^6.1.0", - "@octokit/oauth-methods": "^4.1.0", - "@octokit/request": "^8.3.1", - "@octokit/types": "^13.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/openapi-types": { - "version": "22.0.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.0.1.tgz", - "integrity": "sha512-1yN5m1IMNXthoBDUXFF97N1gHop04B3H8ws7wtOr8GgRyDO1gKALjwMHARNBoMBiB/2vEe/vxstrApcJZzQbnQ==" - }, - "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/types": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.4.0.tgz", - "integrity": "sha512-WlMegy3lPXYWASe3k9Jslc5a0anrYAYMWtsFrxBTdQjS70hvLH6C+PGvHbOsgy3RA3LouGJoU/vAt4KarecQLQ==", - "dependencies": { - "@octokit/openapi-types": "^22.0.1" - } - }, - "node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/auth-unauthenticated": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz", - "integrity": "sha512-oxeWzmBFxWd+XolxKTc4zr+h3mt+yofn4r7OfoIkR/Cj/o70eEGmPsFbueyJE2iBAGpjgTnEOKM3pnuEGVmiqg==", - "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/core": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.2.tgz", - "integrity": "sha512-cZUy1gUvd4vttMic7C0lwPed8IYXWYp8kHIMatyhY8t8n3Cpw2ILczkV5pGMPqef7v0bLo0pOHrEHarsau2Ydg==", - "dependencies": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/endpoint": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.4.tgz", - "integrity": "sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==", - "dependencies": { - "@octokit/types": "^12.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/graphql": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", - "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", - "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^12.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/oauth-app": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-6.0.0.tgz", - "integrity": "sha512-bNMkS+vJ6oz2hCyraT9ZfTpAQ8dZNqJJQVNaKjPLx4ue5RZiFdU1YWXguOPR8AaSHS+lKe+lR3abn2siGd+zow==", - "dependencies": { - "@octokit/auth-oauth-app": "^7.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/auth-unauthenticated": "^5.0.0", - "@octokit/core": "^5.0.0", - "@octokit/oauth-authorization-url": "^6.0.2", - "@octokit/oauth-methods": "^4.0.0", - "@types/aws-lambda": "^8.10.83", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/oauth-authorization-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz", - "integrity": "sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA==", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/oauth-methods": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz", - "integrity": "sha512-4tuKnCRecJ6CG6gr0XcEXdZtkTDbfbnD5oaHBmLERTjTMZNi2CbfEHZxPU41xXLDG4DfKf+sonu00zvKI9NSbw==", - "dependencies": { - "@octokit/oauth-authorization-url": "^6.0.2", - "@octokit/request": "^8.3.1", - "@octokit/request-error": "^5.1.0", - "@octokit/types": "^13.0.0", - "btoa-lite": "^1.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": { - "version": "22.0.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.0.1.tgz", - "integrity": "sha512-1yN5m1IMNXthoBDUXFF97N1gHop04B3H8ws7wtOr8GgRyDO1gKALjwMHARNBoMBiB/2vEe/vxstrApcJZzQbnQ==" - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/types": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.4.0.tgz", - "integrity": "sha512-WlMegy3lPXYWASe3k9Jslc5a0anrYAYMWtsFrxBTdQjS70hvLH6C+PGvHbOsgy3RA3LouGJoU/vAt4KarecQLQ==", - "dependencies": { - "@octokit/openapi-types": "^22.0.1" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.1.0.tgz", - "integrity": "sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==" - }, - "node_modules/@octokit/plugin-enterprise-compatibility": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-compatibility/-/plugin-enterprise-compatibility-1.3.0.tgz", - "integrity": "sha512-h34sMGdEOER/OKrZJ55v26ntdHb9OPfR1fwOx6Q4qYyyhWA104o11h9tFxnS/l41gED6WEI41Vu2G2zHDVC5lQ==", - "dependencies": { - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/plugin-enterprise-compatibility/node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "node_modules/@octokit/plugin-enterprise-compatibility/node_modules/@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "node_modules/@octokit/plugin-enterprise-compatibility/node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/@octokit/plugin-paginate-graphql": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.0.tgz", - "integrity": "sha512-7HcYW5tP7/Z6AETAPU14gp5H5KmCPT3hmJrS/5tO7HIgbwenYmgw4OY9Ma54FDySuxMwD+wsJlxtuGWwuZuItA==", - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" - } - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.1.5.tgz", - "integrity": "sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==", - "dependencies": { - "@octokit/types": "^12.4.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.0.tgz", - "integrity": "sha512-2uJI1COtYCq8Z4yNSnM231TgH50bRkheQ9+aH8TnZanB6QilOnx8RMD2qsnamSOXtDj0ilxvevf5fGsBhBBzKA==", - "dev": true, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", - "integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==", - "dependencies": { - "@octokit/types": "^13.5.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "^5" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", - "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" - }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", - "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", - "dependencies": { - "@octokit/openapi-types": "^22.2.0" - } - }, - "node_modules/@octokit/plugin-retry": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.1.tgz", - "integrity": "sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==", - "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" - } - }, - "node_modules/@octokit/plugin-throttling": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.1.3.tgz", - "integrity": "sha512-pfyqaqpc0EXh5Cn4HX9lWYsZ4gGbjnSmUILeu4u2gnuM50K/wIk9s1Pxt3lVeVwekmITgN/nJdoh43Ka+vye8A==", - "dependencies": { - "@octokit/types": "^12.2.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "^5.0.0" - } - }, - "node_modules/@octokit/request": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", - "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", - "dependencies": { - "@octokit/endpoint": "^9.0.1", - "@octokit/request-error": "^5.1.0", - "@octokit/types": "^13.1.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/request-error": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", - "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", - "dependencies": { - "@octokit/types": "^13.1.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { - "version": "22.0.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.0.1.tgz", - "integrity": "sha512-1yN5m1IMNXthoBDUXFF97N1gHop04B3H8ws7wtOr8GgRyDO1gKALjwMHARNBoMBiB/2vEe/vxstrApcJZzQbnQ==" - }, - "node_modules/@octokit/request-error/node_modules/@octokit/types": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.4.0.tgz", - "integrity": "sha512-WlMegy3lPXYWASe3k9Jslc5a0anrYAYMWtsFrxBTdQjS70hvLH6C+PGvHbOsgy3RA3LouGJoU/vAt4KarecQLQ==", - "dependencies": { - "@octokit/openapi-types": "^22.0.1" - } - }, - "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { - "version": "22.0.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.0.1.tgz", - "integrity": "sha512-1yN5m1IMNXthoBDUXFF97N1gHop04B3H8ws7wtOr8GgRyDO1gKALjwMHARNBoMBiB/2vEe/vxstrApcJZzQbnQ==" - }, - "node_modules/@octokit/request/node_modules/@octokit/types": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.4.0.tgz", - "integrity": "sha512-WlMegy3lPXYWASe3k9Jslc5a0anrYAYMWtsFrxBTdQjS70hvLH6C+PGvHbOsgy3RA3LouGJoU/vAt4KarecQLQ==", - "dependencies": { - "@octokit/openapi-types": "^22.0.1" - } - }, - "node_modules/@octokit/rest": { - "version": "20.1.1", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.1.tgz", - "integrity": "sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==", - "dev": true, - "dependencies": { - "@octokit/core": "^5.0.2", - "@octokit/plugin-paginate-rest": "11.3.1", - "@octokit/plugin-request-log": "^4.0.0", - "@octokit/plugin-rest-endpoint-methods": "13.2.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/rest/node_modules/@octokit/openapi-types": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", - "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", - "dev": true - }, - "node_modules/@octokit/rest/node_modules/@octokit/plugin-paginate-rest": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", - "integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==", - "dev": true, - "dependencies": { - "@octokit/types": "^13.5.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "5" - } - }, - "node_modules/@octokit/rest/node_modules/@octokit/types": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", - "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", - "dev": true, - "dependencies": { - "@octokit/openapi-types": "^22.2.0" - } - }, - "node_modules/@octokit/types": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.4.0.tgz", - "integrity": "sha512-FLWs/AvZllw/AGVs+nJ+ELCDZZJk+kY0zMen118xhL2zD0s1etIUHm1odgjP7epxYU1ln7SZxEUWYop5bhsdgQ==", - "dependencies": { - "@octokit/openapi-types": "^19.1.0" - } - }, - "node_modules/@octokit/webhooks": { - "version": "12.0.10", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-12.0.10.tgz", - "integrity": "sha512-Q8d26l7gZ3L1SSr25NFbbP0B431sovU5r0tIqcvy8Z4PrD1LBv0cJEjvDLOieouzPSTzSzufzRIeXD7S+zAESA==", - "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/webhooks-methods": "^4.0.0", - "@octokit/webhooks-types": "7.1.0", - "aggregate-error": "^3.1.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/webhooks-methods": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-4.0.0.tgz", - "integrity": "sha512-M8mwmTXp+VeolOS/kfRvsDdW+IO0qJ8kYodM/sAysk093q6ApgmBXwK1ZlUvAwXVrp/YVHp6aArj4auAxUAOFw==", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/webhooks-types": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-7.1.0.tgz", - "integrity": "sha512-y92CpG4kFFtBBjni8LHoV12IegJ+KFxLgKRengrVjKmGE5XMeCuGvlfRe75lTRrgXaG6XIWJlFpIDTlkoJsU8w==" - }, - "node_modules/@probot/get-private-key": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@probot/get-private-key/-/get-private-key-1.1.2.tgz", - "integrity": "sha512-yVgyCdTyooGX6+czDLkJahEcwgBWZsKH9xbjvjDNVFjY3QtiI/tHRiB3zjgJCQMZehXxv2CFHZQSpWRXdr6CeQ==" - }, - "node_modules/@probot/octokit-plugin-config": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@probot/octokit-plugin-config/-/octokit-plugin-config-1.1.6.tgz", - "integrity": "sha512-L29wmnFvilzSfWn9tUgItxdLv0LJh2ICjma3FmLr80Spu3wZ9nHyRrKMo9R5/K2m7VuWmgoKnkgRt2zPzAQBEQ==", - "dependencies": { - "@types/js-yaml": "^4.0.5", - "js-yaml": "^4.1.0" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@probot/pino": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@probot/pino/-/pino-2.3.5.tgz", - "integrity": "sha512-IiyiNZonMw1dHC4EAdD55y5owV733d9Gll/IKsrLikB7EJ54+eMCOtL/qo+OmgWN9XV3NTDfziEQF2og/OBKog==", - "dependencies": { - "@sentry/node": "^6.0.0", - "pino-pretty": "^6.0.0", - "pump": "^3.0.0", - "readable-stream": "^3.6.0", - "split2": "^4.0.0" - }, - "bin": { - "pino-probot": "cli.js" - } - }, - "node_modules/@sentry/core": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.7.tgz", - "integrity": "sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==", - "dependencies": { - "@sentry/hub": "6.19.7", - "@sentry/minimal": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.7.tgz", - "integrity": "sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==", - "dependencies": { - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.7.tgz", - "integrity": "sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==", - "dependencies": { - "@sentry/hub": "6.19.7", - "@sentry/types": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.19.7.tgz", - "integrity": "sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg==", - "dependencies": { - "@sentry/core": "6.19.7", - "@sentry/hub": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/types": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz", - "integrity": "sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.7.tgz", - "integrity": "sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==", - "dependencies": { - "@sentry/types": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@types/aws-lambda": { - "version": "8.10.130", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.130.tgz", - "integrity": "sha512-HxTfLeGvD1wTJqIGwcBCpNmHKenja+We1e0cuzeIDFfbEj3ixnlTInyPR/81zAe0Ss/Ip12rFK6XNeMLVucOSg==" - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/btoa-lite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.2.tgz", - "integrity": "sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==" - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" - }, - "node_modules/@types/ioredis": { - "version": "4.28.10", - "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.28.10.tgz", - "integrity": "sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/js-yaml": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", - "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", - "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" - }, - "node_modules/@types/node": { - "version": "18.19.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", - "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/pino": { - "version": "6.3.12", - "resolved": "https://registry.npmjs.org/@types/pino/-/pino-6.3.12.tgz", - "integrity": "sha512-dsLRTq8/4UtVSpJgl9aeqHvbh6pzdmjYD3C092SYgLD2TyoCqHpTJk6vp8DvCTGGc7iowZ2MoiYiVUUCcu7muw==", - "dependencies": { - "@types/node": "*", - "@types/pino-pretty": "*", - "@types/pino-std-serializers": "*", - "sonic-boom": "^2.1.0" - } - }, - "node_modules/@types/pino-http": { - "version": "5.8.4", - "resolved": "https://registry.npmjs.org/@types/pino-http/-/pino-http-5.8.4.tgz", - "integrity": "sha512-UTYBQ2acmJ2eK0w58vVtgZ9RAicFFndfrnWC1w5cBTf8zwn/HEy8O+H7psc03UZgTzHmlcuX8VkPRnRDEj+FUQ==", - "dependencies": { - "@types/pino": "6.3" - } - }, - "node_modules/@types/pino-pretty": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/pino-pretty/-/pino-pretty-5.0.0.tgz", - "integrity": "sha512-N1uzqSzioqz8R3AkDbSJwcfDWeI3YMPNapSQQhnB2ISU4NYgUIcAh+hYT5ygqBM+klX4htpEhXMmoJv3J7GrdA==", - "deprecated": "This is a stub types definition. pino-pretty provides its own type definitions, so you do not need this installed.", - "dependencies": { - "pino-pretty": "*" - } - }, - "node_modules/@types/pino-std-serializers": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", - "integrity": "sha512-gXfUZx2xIBbFYozGms53fT0nvkacx/+62c8iTxrEqH5PkIGAQvDbXg2774VWOycMPbqn5YJBQ3BMsg4Li3dWbg==", - "deprecated": "This is a stub types definition. pino-std-serializers provides its own type definitions, so you do not need this installed.", - "dependencies": { - "pino-std-serializers": "*" - } - }, - "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/args": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/args/-/args-5.0.3.tgz", - "integrity": "sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==", - "dependencies": { - "camelcase": "5.0.0", - "chalk": "2.4.2", - "leven": "2.1.0", - "mri": "1.1.4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/args/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/args/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/args/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/args/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/args/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/args/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/args/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==" - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventsource": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", - "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express-handlebars": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.7.tgz", - "integrity": "sha512-iYeMFpc/hMD+E6FNAZA5fgWeXnXr4rslOSPkeEV6TwdmpJ5lEXuWX0u9vFYs31P2MURctQq2batR09oeNj0LIg==", - "dependencies": { - "glob": "^8.1.0", - "graceful-fs": "^4.2.10", - "handlebars": "^4.7.7" - }, - "engines": { - "node": ">=v12.22.9" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "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.4" - }, - "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", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-redact": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz", - "integrity": "sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatstr": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", - "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" - }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ioredis": { - "version": "4.28.5", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.28.5.tgz", - "integrity": "sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==", - "dependencies": { - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.1", - "denque": "^1.1.0", - "lodash.defaults": "^4.2.0", - "lodash.flatten": "^4.4.0", - "lodash.isarguments": "^3.1.0", - "p-map": "^2.1.0", - "redis-commands": "1.7.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha512-+kHj8HXArPfpPEKGLZ+kB5ONRTCiGQXo8RQYL0hH8t6pWXUBBK5KkkQmTNOwKK4LEsd0yTsgtjJVm4UBSZea4w==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/joycon": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/load-json-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", - "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^4.0.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0", - "type-fest": "^0.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/load-json-file/node_modules/type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" - }, - "node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "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", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "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", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mri": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", - "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/octokit": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-3.2.1.tgz", - "integrity": "sha512-u+XuSejhe3NdIvty3Jod00JvTdAE/0/+XbhIDhefHbu+2OcTRHd80aCiH6TX19ZybJmwPQBKFQmHGxp0i9mJrg==", - "dependencies": { - "@octokit/app": "^14.0.2", - "@octokit/core": "^5.0.0", - "@octokit/oauth-app": "^6.0.0", - "@octokit/plugin-paginate-graphql": "^4.0.0", - "@octokit/plugin-paginate-rest": "11.3.1", - "@octokit/plugin-rest-endpoint-methods": "13.2.2", - "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^8.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^13.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/octokit-auth-probot": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/octokit-auth-probot/-/octokit-auth-probot-1.2.9.tgz", - "integrity": "sha512-mMjw6Y760EwJnW2tSVooJK8BMdsG6D40SoCclnefVf/5yWjaNVquEu8NREBVWb60OwbpnMEz4vREXHB5xdMFYQ==", - "dependencies": { - "@octokit/auth-app": "^4.0.2", - "@octokit/auth-token": "^3.0.0", - "@octokit/auth-unauthenticated": "^3.0.0", - "@octokit/types": "^8.0.0" - }, - "peerDependencies": { - "@octokit/core": ">=3.2" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-app": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.13.tgz", - "integrity": "sha512-NBQkmR/Zsc+8fWcVIFrwDgNXS7f4XDrkd9LHdi9DPQw1NdGHLviLzRO2ZBwTtepnwHXW5VTrVU9eFGijMUqllg==", - "dependencies": { - "@octokit/auth-oauth-app": "^5.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "deprecation": "^2.3.1", - "lru-cache": "^9.0.0", - "universal-github-app-jwt": "^1.1.1", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-app/node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==" - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-app/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-oauth-app": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.6.tgz", - "integrity": "sha512-SxyfIBfeFcWd9Z/m1xa4LENTQ3l1y6Nrg31k2Dcb1jS5ov7pmwMJZ6OGX8q3K9slRgVpeAjNA1ipOAMHkieqyw==", - "dependencies": { - "@octokit/auth-oauth-device": "^4.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "@types/btoa-lite": "^1.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-oauth-app/node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==" - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-oauth-app/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-oauth-device": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.5.tgz", - "integrity": "sha512-XyhoWRTzf2ZX0aZ52a6Ew5S5VBAfwwx1QnC2Np6Et3MWQpZjlREIcbcvVZtkNuXp6Z9EeiSLSDUqm3C+aMEHzQ==", - "dependencies": { - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-oauth-device/node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==" - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-oauth-device/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-oauth-user": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.2.tgz", - "integrity": "sha512-kkRqNmFe7s5GQcojE3nSlF+AzYPpPv7kvP/xYEnE57584pixaFBH8Vovt+w5Y3E4zWUEOxjdLItmBTFAWECPAg==", - "dependencies": { - "@octokit/auth-oauth-device": "^4.0.0", - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-oauth-user/node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==" - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-oauth-user/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-token": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", - "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-unauthenticated": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.5.tgz", - "integrity": "sha512-yH2GPFcjrTvDWPwJWWCh0tPPtTL5SMgivgKPA+6v/XmYN6hGQkAto8JtZibSKOpf8ipmeYhLNWQ2UgW0GYILCw==", - "dependencies": { - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-unauthenticated/node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==" - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/auth-unauthenticated/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==" - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/endpoint/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/oauth-authorization-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz", - "integrity": "sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/oauth-methods": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.6.tgz", - "integrity": "sha512-l9Uml2iGN2aTWLZcm8hV+neBiFXAQ9+3sKiQe/sgumHlL6HDg0AQ8/l16xX/5jJvfxueqTW5CWbzd0MjnlfHZw==", - "dependencies": { - "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/request": "^6.2.3", - "@octokit/request-error": "^3.0.3", - "@octokit/types": "^9.0.0", - "btoa-lite": "^1.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==" - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/oauth-methods/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/openapi-types": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", - "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==" - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/request-error/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/request/node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==" - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/request/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/octokit-auth-probot/node_modules/@octokit/types": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.2.1.tgz", - "integrity": "sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw==", - "dependencies": { - "@octokit/openapi-types": "^14.0.0" - } - }, - "node_modules/octokit-auth-probot/node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/octokit/node_modules/@octokit/openapi-types": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", - "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" - }, - "node_modules/octokit/node_modules/@octokit/plugin-paginate-rest": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", - "integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==", - "dependencies": { - "@octokit/types": "^13.5.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "5" - } - }, - "node_modules/octokit/node_modules/@octokit/types": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", - "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", - "dependencies": { - "@octokit/openapi-types": "^22.2.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pino": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.14.0.tgz", - "integrity": "sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==", - "dependencies": { - "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.8", - "flatstr": "^1.0.12", - "pino-std-serializers": "^3.1.0", - "process-warning": "^1.0.0", - "quick-format-unescaped": "^4.0.3", - "sonic-boom": "^1.0.2" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/pino-http": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/pino-http/-/pino-http-5.8.0.tgz", - "integrity": "sha512-YwXiyRb9y0WCD1P9PcxuJuh3Dc5qmXde/paJE86UGYRdiFOi828hR9iUGmk5gaw6NBT9gLtKANOHFimvh19U5w==", - "dependencies": { - "fast-url-parser": "^1.1.3", - "pino": "^6.13.0", - "pino-std-serializers": "^4.0.0" - } - }, - "node_modules/pino-http/node_modules/pino-std-serializers": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", - "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==" - }, - "node_modules/pino-pretty": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-6.0.0.tgz", - "integrity": "sha512-jyeR2fXXWc68st1DTTM5NhkHlx8p+1fKZMfm84Jwq+jSw08IwAjNaZBZR6ts69hhPOfOjg/NiE1HYW7vBRPL3A==", - "dependencies": { - "@hapi/bourne": "^2.0.0", - "args": "^5.0.1", - "colorette": "^1.3.0", - "dateformat": "^4.5.1", - "fast-safe-stringify": "^2.0.7", - "jmespath": "^0.15.0", - "joycon": "^3.0.0", - "pump": "^3.0.0", - "readable-stream": "^3.6.0", - "rfdc": "^1.3.0", - "split2": "^3.1.1", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "pino-pretty": "bin.js" - } - }, - "node_modules/pino-pretty/node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/pino-std-serializers": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", - "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" - }, - "node_modules/pino/node_modules/pino-std-serializers": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", - "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==" - }, - "node_modules/pino/node_modules/sonic-boom": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", - "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", - "dependencies": { - "atomic-sleep": "^1.0.0", - "flatstr": "^1.0.12" - } - }, - "node_modules/pkg-conf": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", - "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", - "dependencies": { - "find-up": "^3.0.0", - "load-json-file": "^5.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/probot": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/probot/-/probot-12.4.0.tgz", - "integrity": "sha512-DbW4ME9rzGVwnsFjoWWxKtRvnxPlFaCg726ge1sYHwZ3UzMlcF3B8Qf7MptfhGRyFw8sSCqsbgzb0E5d/BrQEA==", - "dependencies": { - "@octokit/core": "^3.6.0", - "@octokit/plugin-enterprise-compatibility": "^1.2.8", - "@octokit/plugin-paginate-rest": "^2.6.2", - "@octokit/plugin-rest-endpoint-methods": "^5.0.1", - "@octokit/plugin-retry": "^3.0.6", - "@octokit/plugin-throttling": "^3.3.4", - "@octokit/types": "^8.0.0", - "@octokit/webhooks": "^9.26.3", - "@probot/get-private-key": "^1.1.0", - "@probot/octokit-plugin-config": "^1.0.0", - "@probot/pino": "^2.2.0", - "@types/express": "^4.17.9", - "@types/ioredis": "^4.27.1", - "@types/pino": "^6.3.4", - "@types/pino-http": "^5.0.6", - "commander": "^6.2.0", - "deepmerge": "^4.2.2", - "deprecation": "^2.3.1", - "dotenv": "^8.2.0", - "eventsource": "^2.0.2", - "express": "^4.17.1", - "express-handlebars": "^6.0.3", - "ioredis": "^4.27.8", - "js-yaml": "^3.14.1", - "lru-cache": "^6.0.0", - "octokit-auth-probot": "^1.2.6", - "pino": "^6.14.0", - "pino-http": "^5.3.0", - "pkg-conf": "^3.1.0", - "resolve": "^1.19.0", - "semver": "^7.3.4", - "update-dotenv": "^1.1.1", - "uuid": "^8.3.2" - }, - "bin": { - "probot": "bin/probot.js" - }, - "engines": { - "node": ">=10.21" - } - }, - "node_modules/probot/node_modules/@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "dependencies": { - "@octokit/types": "^6.0.3" - } - }, - "node_modules/probot/node_modules/@octokit/auth-token/node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "node_modules/probot/node_modules/@octokit/auth-token/node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/probot/node_modules/@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/probot/node_modules/@octokit/core/node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "node_modules/probot/node_modules/@octokit/core/node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/probot/node_modules/@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/probot/node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "node_modules/probot/node_modules/@octokit/endpoint/node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/probot/node_modules/@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", - "dependencies": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/probot/node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "node_modules/probot/node_modules/@octokit/graphql/node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/probot/node_modules/@octokit/openapi-types": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", - "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" - }, - "node_modules/probot/node_modules/@octokit/plugin-paginate-rest": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", - "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", - "dependencies": { - "@octokit/types": "^6.40.0" - }, - "peerDependencies": { - "@octokit/core": ">=2" - } - }, - "node_modules/probot/node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "node_modules/probot/node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/probot/node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", - "dependencies": { - "@octokit/types": "^6.39.0", - "deprecation": "^2.3.1" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/probot/node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "node_modules/probot/node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/probot/node_modules/@octokit/plugin-retry": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz", - "integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==", - "dependencies": { - "@octokit/types": "^6.0.3", - "bottleneck": "^2.15.3" - } - }, - "node_modules/probot/node_modules/@octokit/plugin-retry/node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "node_modules/probot/node_modules/@octokit/plugin-retry/node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/probot/node_modules/@octokit/plugin-throttling": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.7.0.tgz", - "integrity": "sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==", - "dependencies": { - "@octokit/types": "^6.0.1", - "bottleneck": "^2.15.3" - }, - "peerDependencies": { - "@octokit/core": "^3.5.0" - } - }, - "node_modules/probot/node_modules/@octokit/plugin-throttling/node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "node_modules/probot/node_modules/@octokit/plugin-throttling/node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/probot/node_modules/@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", - "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/probot/node_modules/@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "node_modules/probot/node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "node_modules/probot/node_modules/@octokit/request-error/node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/probot/node_modules/@octokit/request/node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "node_modules/probot/node_modules/@octokit/request/node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/probot/node_modules/@octokit/types": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.2.1.tgz", - "integrity": "sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw==", - "dependencies": { - "@octokit/openapi-types": "^14.0.0" - } - }, - "node_modules/probot/node_modules/@octokit/webhooks": { - "version": "9.26.3", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-9.26.3.tgz", - "integrity": "sha512-DLGk+gzeVq5oK89Bo601txYmyrelMQ7Fi5EnjHE0Xs8CWicy2xkmnJMKptKJrBJpstqbd/9oeDFi/Zj2pudBDQ==", - "dependencies": { - "@octokit/request-error": "^2.0.2", - "@octokit/webhooks-methods": "^2.0.0", - "@octokit/webhooks-types": "5.8.0", - "aggregate-error": "^3.1.0" - } - }, - "node_modules/probot/node_modules/@octokit/webhooks-methods": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-2.0.0.tgz", - "integrity": "sha512-35cfQ4YWlnZnmZKmIxlGPUPLtbkF8lr/A/1Sk1eC0ddLMwQN06dOuLc+dI3YLQS+T+MoNt3DIQ0NynwgKPilig==" - }, - "node_modules/probot/node_modules/@octokit/webhooks-types": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-5.8.0.tgz", - "integrity": "sha512-8adktjIb76A7viIdayQSFuBEwOzwhDC+9yxZpKNHjfzrlostHCw0/N7JWpWMObfElwvJMk2fY2l1noENCk9wmw==" - }, - "node_modules/probot/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/probot/node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "engines": { - "node": ">=10" - } - }, - "node_modules/probot/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/probot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/process-warning": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", - "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/redis-commands": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", - "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==" - }, - "node_modules/redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/smee-client": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/smee-client/-/smee-client-2.0.1.tgz", - "integrity": "sha512-s2+eG9vNMWQQvu8Jz+SfAiihpYsmaMtcyPnHtBuZEhaAAQOQV63xSSL9StWv2p08xKgvSC8pEZ28rXoy41FhLg==", - "dependencies": { - "commander": "^12.0.0", - "eventsource": "^2.0.2", - "validator": "^13.11.0" - }, - "bin": { - "smee": "bin/smee.js" - } - }, - "node_modules/smee-client/node_modules/commander": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", - "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", - "engines": { - "node": ">=18" - } - }, - "node_modules/sonic-boom": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", - "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/universal-github-app-jwt": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.2.tgz", - "integrity": "sha512-t1iB2FmLFE+yyJY9+3wMx0ejB+MQpEVkH0gQv7dR6FZyltyq+ZZO0uDpbopxhrZ3SLEO4dCEkIujOMldEQ2iOA==", - "dependencies": { - "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.2" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-dotenv": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-dotenv/-/update-dotenv-1.1.1.tgz", - "integrity": "sha512-3cIC18In/t0X/yH793c00qqxcKD8jVCgNOPif/fGQkFpYMGecM9YAc+kaAKXuZsM2dE9I9wFI7KvAuNX22SGMQ==", - "peerDependencies": { - "dotenv": "*" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validator": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", - "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} From 4975d7bc00db4639ac32fee094de7cfe64e75474 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Wed, 16 Apr 2025 10:19:53 +0700 Subject: [PATCH 08/27] chore(deps): bump eslint to v9 --- package.json | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 67e2010..ee120c8 100644 --- a/package.json +++ b/package.json @@ -24,10 +24,12 @@ "@octokit/auth-app": "^6.1.1", "@octokit/rest": "^20.1.1", "@types/node": "^18.19.39", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "eslint": "^8.57.0", - "typescript": "5.3.3" + "@stylistic/eslint-plugin-ts": "^4.2.0", + "@typescript-eslint/eslint-plugin": "^8.29.1", + "@typescript-eslint/parser": "^8.29.1", + "eslint": "^9.24.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.29.1" }, "engines": { "node": ">=18.19.0", From 5b90c9b3105bcc5a0300228541405c4b4d2e510f Mon Sep 17 00:00:00 2001 From: Muunatic Date: Wed, 16 Apr 2025 10:20:54 +0700 Subject: [PATCH 09/27] test(linter): migrate eslint linter to v9 --- .eslintignore | 5 -- .eslintrc.json | 88 ----------------------------- eslint.config.mjs | 137 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 137 insertions(+), 93 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.json create mode 100644 eslint.config.mjs diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 2c18351..0000000 --- a/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -# modules -node_modules - -# dist -dist \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 0948fef..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "env": { - "es2021": true, - "node": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-type-checked" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 12, - "sourceType": "module", - "project": true - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - "arrow-parens": ["warn", "always"], - "brace-style": ["warn", "1tbs"], - "camelcase": ["warn", { - "properties": "never", - "ignoreImports": true - }], - "comma-dangle": ["error", "never"], - "comma-spacing": ["warn", { - "after": true, - "before": false - }], - "comma-style": ["warn", "last"], - "curly": ["error", "all"], - "default-case": 1, - "eol-last": ["warn", "always"], - "eqeqeq": ["error", "smart"], - "indent": ["warn", 4, { - "SwitchCase": 1 - }], - "key-spacing": ["warn", { - "mode": "strict" - }], - "keyword-spacing": ["warn", { - "after": true, - "before": true - }], - "lines-between-class-members": ["warn", "always"], - "no-multi-spaces": 1, - "no-multiple-empty-lines": ["warn", { - "max": 1 - }], - "no-trailing-spaces": 1, - "no-unused-vars": 1, - "no-useless-escape": 0, - "object-curly-spacing": ["error", "always", { - "objectsInObjects": true, - "arraysInObjects": true - }], - "object-shorthand": ["warn", "consistent"], - "quotes": ["warn", "double", { - "avoidEscape": false - }], - "semi": "error", - "semi-style": ["warn", "last"], - "sort-imports": ["warn", { - "ignoreCase": false, - "ignoreDeclarationSort": true - }], - "@typescript-eslint/explicit-function-return-type": ["warn", { - "allowExpressions": true - }], - "@typescript-eslint/member-delimiter-style": ["warn", { - "multiline": { - "delimiter": "semi", - "requireLast": true - }, - "singleline": { - "delimiter": "semi", - "requireLast": false - }, - "multilineDetection": "brackets" - }], - "@typescript-eslint/no-unnecessary-condition": 2, - "@typescript-eslint/no-require-imports": 2, - "@typescript-eslint/no-var-requires": 1 - }, - "ignorePatterns": ["dist/*.js", "dist/**/*.js"] -} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..7af613b --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,137 @@ +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import tsPlugin from '@typescript-eslint/eslint-plugin'; +import tsParser from '@typescript-eslint/parser'; +import stylisticTs from '@stylistic/eslint-plugin-ts'; + +export default tseslint.config( + eslint.configs.recommended, + tseslint.configs.recommended, + tseslint.configs.recommendedTypeChecked, + + { + files: ["**/*.ts"], + languageOptions: { + ecmaVersion: 14, + parser: tsParser, + parserOptions: { + ecmaVersion: 14, + sourceType: "module", + project: true + } + }, + plugins: { + "@typescript-eslint": tsPlugin, + "@stylistic/ts": stylisticTs + }, + extends: [ + eslint.configs.recommended, + tseslint.configs.recommended, + tseslint.configs.recommendedTypeChecked + ], + rules: { + "arrow-parens": ["warn", "always"], + "brace-style": ["warn", "1tbs"], + "camelcase": ["warn", { + "properties": "never", + "ignoreImports": true + }], + "comma-dangle": ["error", "never"], + "comma-spacing": ["warn", { + "after": true, + "before": false + }], + "comma-style": ["warn", "last"], + "curly": ["error", "all"], + "default-case": 1, + "eol-last": ["warn", "always"], + "eqeqeq": ["error", "smart"], + "indent": ["warn", 4, { + "SwitchCase": 1 + }], + "key-spacing": ["warn", { + "mode": "strict" + }], + "keyword-spacing": ["warn", { + "after": true, + "before": true + }], + "lines-between-class-members": ["warn", "always"], + "no-multi-spaces": 1, + "no-multiple-empty-lines": ["warn", { + "max": 1 + }], + "no-trailing-spaces": 1, + "no-unused-vars": 1, + "no-useless-escape": 0, + "object-curly-spacing": ["error", "always", { + "objectsInObjects": true, + "arraysInObjects": true + }], + "object-shorthand": ["warn", "consistent"], + "quotes": ["warn", "double", { + "avoidEscape": false + }], + "semi": "error", + "semi-style": ["warn", "last"], + "sort-imports": ["warn", { + "ignoreCase": false, + "ignoreDeclarationSort": true + }], + "@typescript-eslint/naming-convention": [ "warn", + { + "selector": "default", + "format": ["camelCase"] + }, + { + "selector": "classProperty", + "modifiers": ["private"], + "format": ["camelCase"], + "leadingUnderscore": "require" + }, + { + "selector": "property", + "format": null + }, + { + "selector": "import", + "format": ["camelCase", "PascalCase"] + }, + { + "selector": "memberLike", + "format": ["camelCase"] + }, + { + "selector": "variableLike", + "format": ["camelCase"] + }, + { + "selector": "typeLike", + "format": ["PascalCase"] + } + ], + "@typescript-eslint/explicit-function-return-type": ["warn", { + "allowExpressions": true + }], + "@stylistic/ts/member-delimiter-style": ["warn", { + "multiline": { + "delimiter": "semi", + "requireLast": true + }, + "singleline": { + "delimiter": "semi", + "requireLast": false + }, + "multilineDetection": "brackets" + }], + "@typescript-eslint/no-unnecessary-condition": 2, + "@typescript-eslint/no-unused-expressions": 0, + "@typescript-eslint/no-require-imports": 2, + "@typescript-eslint/no-var-requires": 1 + }, + ignores: [ + "node_modules", + "dist" + ] + } +); From 5584dac2054e7e7de82efad3c29b95f98c285828 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Wed, 16 Apr 2025 10:22:26 +0700 Subject: [PATCH 10/27] build(CI): upgrade node version and npm --- .github/workflows/build.yml | 4 ++-- .github/workflows/lint.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3a23fd8..efa6bf4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,7 +11,7 @@ jobs: runs-on: windows-latest strategy: matrix: - node-version: [18.19.0] + node-version: [20.19.0] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} @@ -19,7 +19,7 @@ jobs: with: node-version: ${{ matrix.node-version }} - name: Install npm - run: npm install npm@10.2.3 -g + run: npm install npm@10.8.2 -g - name: Install dependencies run: npm ci - name: Run typescript compiler diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 5cf876e..5021830 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -11,7 +11,7 @@ jobs: runs-on: windows-latest strategy: matrix: - node-version: [18.19.0] + node-version: [20.19.0] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} @@ -19,7 +19,7 @@ jobs: with: node-version: ${{ matrix.node-version }} - name: Install npm - run: npm install npm@10.2.3 -g + run: npm install npm@10.8.2 -g - name: Install dependencies run: npm ci - name: Run lint From 3e131091c58539f296f5bae2373a67f50aee03ca Mon Sep 17 00:00:00 2001 From: Muunatic Date: Wed, 16 Apr 2025 10:26:17 +0700 Subject: [PATCH 11/27] fix(CI): run install command --- .github/workflows/build.yml | 2 +- .github/workflows/lint.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index efa6bf4..77a7abd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,6 +21,6 @@ jobs: - name: Install npm run: npm install npm@10.8.2 -g - name: Install dependencies - run: npm ci + run: npm i - name: Run typescript compiler run: npm run build --if-present diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 5021830..7c93cd4 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,6 +21,6 @@ jobs: - name: Install npm run: npm install npm@10.8.2 -g - name: Install dependencies - run: npm ci + run: npm i - name: Run lint run: npm run lint --if-present From 0fa9f074ed224dee942b91625069b7c926ff8973 Mon Sep 17 00:00:00 2001 From: Haruyaki <52639021+HarunamiYaki@users.noreply.github.com> Date: Wed, 16 Apr 2025 13:29:37 +0700 Subject: [PATCH 12/27] fix: Resolve promise rejection error --- src/class/prsReview.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/class/prsReview.ts b/src/class/prsReview.ts index 3b31b2a..6cb2f14 100644 --- a/src/class/prsReview.ts +++ b/src/class/prsReview.ts @@ -55,8 +55,8 @@ export default class PullRequestReview { }).catch((err) => { reject(err); }); - }).catch((err) => { - console.error(err); + }).catch((err: Error) => { + return reject(new Error(err.name)); }); }); } From 61b075b1db8b6c2715d7b65546cde9325d01b1d4 Mon Sep 17 00:00:00 2001 From: Haruyaki <52639021+HarunamiYaki@users.noreply.github.com> Date: Wed, 16 Apr 2025 13:31:18 +0700 Subject: [PATCH 13/27] fix: Resolve promise rejection error --- src/class/prsReview.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/class/prsReview.ts b/src/class/prsReview.ts index 6cb2f14..11d6593 100644 --- a/src/class/prsReview.ts +++ b/src/class/prsReview.ts @@ -52,11 +52,11 @@ export default class PullRequestReview { }) ).then(() => { resolve(); - }).catch((err) => { - reject(err); + }).catch((err: Error) => { + return reject(new Error(err.name)); }); - }).catch((err: Error) => { - return reject(new Error(err.name)); + }).catch((err) => { + console.error(err); }); }); } From 71b814d053e6a4493298954f4c7c308be1bfc38d Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 21 Apr 2025 10:10:42 +0700 Subject: [PATCH 14/27] test(linter): update config pattern --- eslint.config.mjs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eslint.config.mjs b/eslint.config.mjs index 7af613b..3e8249b 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -129,6 +129,8 @@ export default tseslint.config( "@typescript-eslint/no-require-imports": 2, "@typescript-eslint/no-var-requires": 1 }, + }, + { ignores: [ "node_modules", "dist" From a74f27799c422f2260cfc5ec94121d6937382efb Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 6 May 2025 00:59:35 +0700 Subject: [PATCH 15/27] feat!: rewrite to node16 module --- src/class/issuesClose.ts | 42 ++++----- src/class/issuesComment.ts | 166 ++++++++++++++++++------------------ src/class/issuesOpen.ts | 18 ++-- src/class/prsOpen.ts | 90 ++++++++++--------- src/class/prsReview.ts | 119 +++++++++++++------------- src/class/prsStale.ts | 2 +- src/class/prsSynchronize.ts | 78 ++++++++--------- src/class/push.ts | 22 ++--- src/class/workflowCheck.ts | 75 ++++++++-------- src/index.ts | 26 +++--- src/structures/constant.ts | 18 ++-- 11 files changed, 327 insertions(+), 329 deletions(-) diff --git a/src/class/issuesClose.ts b/src/class/issuesClose.ts index daa6b32..973ca9b 100644 --- a/src/class/issuesClose.ts +++ b/src/class/issuesClose.ts @@ -1,4 +1,4 @@ -import Context from "../index"; +import { Context } from "../index.js"; /** * @class @@ -11,14 +11,14 @@ export default class IssuesClose { * @private * @type Context<"issues.closed"> */ - private context: Context<"issues.closed">; + private _context: Context<"issues.closed">; /** * @constructor * @param {Context<"issues.closed">} context */ constructor(context: Context<"issues.closed">) { - this.context = context; + this._context = context; } /** @@ -27,18 +27,18 @@ export default class IssuesClose { * @returns {Promise} */ public async closed(): Promise { - const issueClosed = this.context.issue({ - body: `Issue closed by @${this.context.payload.sender.login}.` + const issueClosed = this._context.issue({ + body: `Issue closed by @${this._context.payload.sender.login}.` }); console.log("Issues closed"); - await this.context.octokit.issues.addLabels( - this.context.issue({ + await this._context.octokit.issues.addLabels( + this._context.issue({ labels: ["Closed"] }) ); - await this.context.octokit.issues.createComment(issueClosed); - await this.context.octokit.issues.removeLabel( - this.context.issue({ + await this._context.octokit.issues.createComment(issueClosed); + await this._context.octokit.issues.removeLabel( + this._context.issue({ name: "Pending" }) ); @@ -50,25 +50,25 @@ export default class IssuesClose { * @returns {Promise} */ public async invalid(): Promise { - const issueClosed = this.context.issue({ - body: `Issue closed as invalid by @${this.context.payload.sender.login}.` + const issueClosed = this._context.issue({ + body: `Issue closed as invalid by @${this._context.payload.sender.login}.` }); console.log("Issues closed"); - await this.context.octokit.issues.addLabels( - this.context.issue({ + await this._context.octokit.issues.addLabels( + this._context.issue({ labels: ["Closed", "Invalid"] }) ); - await this.context.octokit.issues.createComment(issueClosed); - await this.context.octokit.issues.removeLabel( - this.context.issue({ + await this._context.octokit.issues.createComment(issueClosed); + await this._context.octokit.issues.removeLabel( + this._context.issue({ name: "Pending" }) ); - await this.context.octokit.issues.lock({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, - issue_number: this.context.payload.issue.number, + await this._context.octokit.issues.lock({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, + issue_number: this._context.payload.issue.number, lock_reason: "off-topic" }); } diff --git a/src/class/issuesComment.ts b/src/class/issuesComment.ts index 7b30d1a..cf86ae9 100644 --- a/src/class/issuesComment.ts +++ b/src/class/issuesComment.ts @@ -1,4 +1,4 @@ -import Context from "../index"; +import { Context } from "../index.js"; /** * @class @@ -11,14 +11,14 @@ export default class IssuesComment { * @private * @type Context<"issue_comment.created"> */ - private context: Context<"issue_comment.created">; + private _context: Context<"issue_comment.created">; /** * @constructor * @param {Context<"issue_comment.created">} context */ constructor(context: Context<"issue_comment.created">) { - this.context = context; + this._context = context; } /** @@ -27,37 +27,37 @@ export default class IssuesComment { * @returns {Promise} */ public async userPRsComment(): Promise { - if (this.context.payload.comment.body.toLowerCase() === "ready to merge") { - await this.context.octokit.pulls.get({ - repo: this.context.payload.repository.name, - owner: this.context.payload.repository.owner.login, - pull_number: this.context.payload.issue.number + if (this._context.payload.comment.body.toLowerCase() === "ready to merge") { + await this._context.octokit.pulls.get({ + repo: this._context.payload.repository.name, + owner: this._context.payload.repository.owner.login, + pull_number: this._context.payload.issue.number }).then(async (res) => { if (res.data.mergeable_state.toLowerCase() === "clean" || res.data.mergeable === true) { - if (this.context.payload.issue.user.login === this.context.payload.comment.user.login) { + if (this._context.payload.issue.user.login === this._context.payload.comment.user.login) { let i: number; - for (i = 0; i < this.context.payload.issue.labels.length; i++) { - if (this.context.payload.issue.labels[i].name === "Approved") { + for (i = 0; i < this._context.payload.issue.labels.length; i++) { + if (this._context.payload.issue.labels[i].name === "Approved") { console.log("Merging"); - await this.context.octokit.pulls.merge({ - repo: this.context.payload.repository.name, - owner: this.context.payload.repository.owner.login, - pull_number: this.context.payload.issue.number, - commit_title: `Merge PR #${this.context.payload.issue.number} ${this.context.payload.issue.title}`, - commit_message: this.context.payload.issue.title + await this._context.octokit.pulls.merge({ + repo: this._context.payload.repository.name, + owner: this._context.payload.repository.owner.login, + pull_number: this._context.payload.issue.number, + commit_title: `Merge PR #${this._context.payload.issue.number} ${this._context.payload.issue.title}`, + commit_message: this._context.payload.issue.title }); console.log("Merged!"); - await this.context.octokit.issues.createComment( - this.context.issue({ - body: `Merged by ${this.context.payload.comment.user.login}!` + await this._context.octokit.issues.createComment( + this._context.issue({ + body: `Merged by ${this._context.payload.comment.user.login}!` }) ); break; - } else if (this.context.payload.issue.labels[i].name === "Requested Changes") { + } else if (this._context.payload.issue.labels[i].name === "Requested Changes") { console.log("PRs Blocked"); - await this.context.octokit.issues.createComment( - this.context.issue({ - body: `Merging blocked because PRs has requested changes! @${this.context.payload.comment.user.login}` + await this._context.octokit.issues.createComment( + this._context.issue({ + body: `Merging blocked because PRs has requested changes! @${this._context.payload.comment.user.login}` }) ); break; @@ -69,14 +69,14 @@ export default class IssuesComment { return; } } else if (res.data.mergeable_state.toLowerCase() === "dirty" || res.data.mergeable === false) { - await this.context.octokit.issues.createComment( - this.context.issue({ - body: `Merging blocked because PRs has merge conflict! @${this.context.payload.comment.user.login}` + await this._context.octokit.issues.createComment( + this._context.issue({ + body: `Merging blocked because PRs has merge conflict! @${this._context.payload.comment.user.login}` }) ); } else { - await this.context.octokit.issues.createComment( - this.context.issue({ + await this._context.octokit.issues.createComment( + this._context.issue({ body: "We apologize for the inconvenience, but it seems that Automaton processes are currently unable to proceed with merging your commit. Please wait for a moment and try merging it again." }) ); @@ -84,48 +84,48 @@ export default class IssuesComment { }); } - if (this.context.payload.comment.body.toLowerCase() === "merge") { - if (this.context.payload.sender.login === this.context.payload.repository.owner.login) { - await this.context.octokit.pulls.merge({ - repo: this.context.payload.repository.name, - owner: this.context.payload.repository.owner.login, - pull_number: this.context.payload.issue.number, - commit_title: `Merge PR #${this.context.payload.issue.number} ${this.context.payload.issue.title}`, - commit_message: this.context.payload.issue.title + if (this._context.payload.comment.body.toLowerCase() === "merge") { + if (this._context.payload.sender.login === this._context.payload.repository.owner.login) { + await this._context.octokit.pulls.merge({ + repo: this._context.payload.repository.name, + owner: this._context.payload.repository.owner.login, + pull_number: this._context.payload.issue.number, + commit_title: `Merge PR #${this._context.payload.issue.number} ${this._context.payload.issue.title}`, + commit_message: this._context.payload.issue.title }); console.log("Merged!"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ + await this._context.octokit.issues.removeLabel( + this._context.issue({ name: "Pending" }) ); - await this.context.octokit.issues.createComment( - this.context.issue({ - body: `Merged by \`[OWNER]\`${this.context.payload.comment.user.login}!` + await this._context.octokit.issues.createComment( + this._context.issue({ + body: `Merged by \`[OWNER]\`${this._context.payload.comment.user.login}!` }) ); - await this.context.octokit.issues.addLabels( - this.context.issue({ + await this._context.octokit.issues.addLabels( + this._context.issue({ labels: ["Owner Merge"] }) ); - } else if (this.context.payload.issue.author_association === "MEMBER" || this.context.payload.issue.author_association === "COLLABORATOR") { - await this.context.octokit.pulls.merge({ - repo: this.context.payload.repository.name, - owner: this.context.payload.repository.owner.login, - pull_number: this.context.payload.issue.number, - commit_title: `Merge PR #${this.context.payload.issue.number} ${this.context.payload.issue.title}`, - commit_message: this.context.payload.issue.title + } else if (this._context.payload.issue.author_association === "MEMBER" || this._context.payload.issue.author_association === "COLLABORATOR") { + await this._context.octokit.pulls.merge({ + repo: this._context.payload.repository.name, + owner: this._context.payload.repository.owner.login, + pull_number: this._context.payload.issue.number, + commit_title: `Merge PR #${this._context.payload.issue.number} ${this._context.payload.issue.title}`, + commit_message: this._context.payload.issue.title }); console.log("Merged!"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ + await this._context.octokit.issues.removeLabel( + this._context.issue({ name: "Pending" }) ); - await this.context.octokit.issues.createComment( - this.context.issue({ - body: `Merged by \`[MAINTAINER]\`${this.context.payload.comment.user.login}!` + await this._context.octokit.issues.createComment( + this._context.issue({ + body: `Merged by \`[MAINTAINER]\`${this._context.payload.comment.user.login}!` }) ); } else { @@ -140,48 +140,48 @@ export default class IssuesComment { * @returns {Promise} */ public async botPRsComment(): Promise { - if (this.context.payload.comment.body.toLowerCase() === "merge") { - if (this.context.payload.sender.login === this.context.payload.repository.owner.login) { - await this.context.octokit.pulls.merge({ - repo: this.context.payload.repository.name, - owner: this.context.payload.repository.owner.login, - pull_number: this.context.payload.issue.number, - commit_title: `Merge PR #${this.context.payload.issue.number} ${this.context.payload.issue.title}`, - commit_message: this.context.payload.issue.title + if (this._context.payload.comment.body.toLowerCase() === "merge") { + if (this._context.payload.sender.login === this._context.payload.repository.owner.login) { + await this._context.octokit.pulls.merge({ + repo: this._context.payload.repository.name, + owner: this._context.payload.repository.owner.login, + pull_number: this._context.payload.issue.number, + commit_title: `Merge PR #${this._context.payload.issue.number} ${this._context.payload.issue.title}`, + commit_message: this._context.payload.issue.title }); console.log("Merged!"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ + await this._context.octokit.issues.removeLabel( + this._context.issue({ name: "Pending" }) ); - await this.context.octokit.issues.createComment( - this.context.issue({ - body: `Merged by \`[OWNER]\`${this.context.payload.comment.user.login}!` + await this._context.octokit.issues.createComment( + this._context.issue({ + body: `Merged by \`[OWNER]\`${this._context.payload.comment.user.login}!` }) ); - await this.context.octokit.issues.addLabels( - this.context.issue({ + await this._context.octokit.issues.addLabels( + this._context.issue({ labels: ["Owner Merge"] }) ); - } else if (this.context.payload.issue.author_association === "MEMBER" || this.context.payload.issue.author_association === "COLLABORATOR") { - await this.context.octokit.pulls.merge({ - repo: this.context.payload.repository.name, - owner: this.context.payload.repository.owner.login, - pull_number: this.context.payload.issue.number, - commit_title: `Merge PR #${this.context.payload.issue.number} ${this.context.payload.issue.title}`, - commit_message: this.context.payload.issue.title + } else if (this._context.payload.issue.author_association === "MEMBER" || this._context.payload.issue.author_association === "COLLABORATOR") { + await this._context.octokit.pulls.merge({ + repo: this._context.payload.repository.name, + owner: this._context.payload.repository.owner.login, + pull_number: this._context.payload.issue.number, + commit_title: `Merge PR #${this._context.payload.issue.number} ${this._context.payload.issue.title}`, + commit_message: this._context.payload.issue.title }); console.log("Merged!"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ + await this._context.octokit.issues.removeLabel( + this._context.issue({ name: "Pending" }) ); - await this.context.octokit.issues.createComment( - this.context.issue({ - body: `Merged by \`[MAINTAINER]\`${this.context.payload.comment.user.login}!` + await this._context.octokit.issues.createComment( + this._context.issue({ + body: `Merged by \`[MAINTAINER]\`${this._context.payload.comment.user.login}!` }) ); } else { diff --git a/src/class/issuesOpen.ts b/src/class/issuesOpen.ts index 2ea6046..1834c73 100644 --- a/src/class/issuesOpen.ts +++ b/src/class/issuesOpen.ts @@ -1,4 +1,4 @@ -import Context from "../index"; +import { Context } from "../index.js"; /** * @class @@ -11,14 +11,14 @@ export default class IssuesOpen { * @private * @type Context<"issues.opened"> */ - private context: Context<"issues.opened">; + private _context: Context<"issues.opened">; /** * @constructor * @param {Context<"issues.opened">} context */ constructor(context: Context<"issues.opened">) { - this.context = context; + this._context = context; } /** @@ -27,17 +27,17 @@ export default class IssuesOpen { * @returns {Promise} */ public async open(): Promise { - if (this.context.payload.sender.login !== "Muunatic") { - const issueComment = this.context.issue({ - body: `Hello @${this.context.payload.sender.login} Thank you for submitting Issue, please wait for next notification after we review your Issue.` + if (this._context.payload.sender.login !== "Muunatic") { + const issueComment = this._context.issue({ + body: `Hello @${this._context.payload.sender.login} Thank you for submitting Issue, please wait for next notification after we review your Issue.` }); console.log("Issues created"); - await this.context.octokit.issues.addLabels( - this.context.issue({ + await this._context.octokit.issues.addLabels( + this._context.issue({ labels: ["Pending"] }) ); - await this.context.octokit.issues.createComment(issueComment); + await this._context.octokit.issues.createComment(issueComment); } else { return; } diff --git a/src/class/prsOpen.ts b/src/class/prsOpen.ts index 72715e5..a5cf8d9 100644 --- a/src/class/prsOpen.ts +++ b/src/class/prsOpen.ts @@ -1,4 +1,4 @@ -import Context, { octokit } from "../index"; +import { Context, octokit } from "../index.js"; /** * @class @@ -11,14 +11,14 @@ export default class PullRequestOpen { * @private * @type Context<"pull_request.opened"> */ - private context: Context<"pull_request.opened">; + private _context: Context<"pull_request.opened">; /** * @constructor * @param {Context<"pull_request.opened">} context */ constructor(context: Context<"pull_request.opened">) { - this.context = context; + this._context = context; } /** @@ -28,19 +28,19 @@ export default class PullRequestOpen { */ private async checkChanges(): Promise { let totalChanges: number = 0; - await this.context.octokit.pulls.listFiles({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, - pull_number: this.context.payload.number + await this._context.octokit.pulls.listFiles({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, + pull_number: this._context.payload.number }).then(async (res) => { const filterFiles = res.data.filter((a) => a.filename !== "package.json" && a.filename !== "package-lock.json"); - for (let i = 0; i < filterFiles.length; i++) { - totalChanges += filterFiles[i].changes; - } + filterFiles.forEach((file) => { + totalChanges += file.changes; + }); if (totalChanges > 1000) { - await this.context.octokit.issues.addLabels( - this.context.issue({ + await this._context.octokit.issues.addLabels( + this._context.issue({ labels: ["Huge Changes"] }) ); @@ -56,32 +56,30 @@ export default class PullRequestOpen { private async giveLabels(): Promise { const fileLabels: string[] = []; const filteredlabels: string[] = []; - await this.context.octokit.pulls.listFiles({ + await this._context.octokit.pulls.listFiles({ owner: "Typeslint", repo: "github-AutoResponse", - pull_number: this.context.payload.number + pull_number: this._context.payload.number }).then(async (res) => { const listFiles = res.data.map((a) => a.filename); - for (let i = 0; i < listFiles.length; i++) { - if (/src\/index/i.test(listFiles[i])) { + listFiles.forEach((file) => { + if (/src\/index/i.test(file)) { fileLabels.push("Core"); - } else if (/src\/class\/prs/i.test(listFiles[i])) { + } else if (/src\/class\/prs/i.test(file)) { fileLabels.push("lib: Pull Request"); - } else if (/src\/class\/issues/i.test(listFiles[i])) { + } else if (/src\/class\/issues/i.test(file)) { fileLabels.push("lib: Issues"); - } else if (/src\/class\/push/i.test(listFiles[i])) { + } else if (/src\/class\/push/i.test(file)) { fileLabels.push("lib: Push"); - } else if (/src\/class\/workflow/i.test(listFiles[i])) { + } else if (/src\/class\/workflow/i.test(file)) { fileLabels.push("lib: Workflow"); - } else { - continue; } - } + }); if (fileLabels.length > 0) { new Set(fileLabels).forEach((a) => filteredlabels.push(a)); - await this.context.octokit.issues.addLabels( - this.context.issue({ + await this._context.octokit.issues.addLabels( + this._context.issue({ labels: filteredlabels }) ); @@ -98,26 +96,26 @@ export default class PullRequestOpen { */ public async open(): Promise { - if (this.context.payload.sender.login !== this.context.payload.repository.owner.login) { - const propened = this.context.issue({ - body: `Hello @${this.context.payload.sender.login} Thank you for submitting Pull Request, please wait for next notification after we review your Pull Request` + if (this._context.payload.sender.login !== this._context.payload.repository.owner.login) { + const propened = this._context.issue({ + body: `Hello @${this._context.payload.sender.login} Thank you for submitting Pull Request, please wait for next notification after we review your Pull Request` }); console.log("Pull request opened"); - await this.context.octokit.issues.createComment(propened); - await this.context.octokit.issues.addLabels( - this.context.issue({ + await this._context.octokit.issues.createComment(propened); + await this._context.octokit.issues.addLabels( + this._context.issue({ labels: ["Pending"] }) ); await this.checkChanges(); } else { - const propened = this.context.issue({ - body: `PRs by \`[OWNER]\`${this.context.payload.pull_request.user.login}!` + const propened = this._context.issue({ + body: `PRs by \`[OWNER]\`${this._context.payload.pull_request.user.login}!` }); console.log("Pull request opened"); - await this.context.octokit.issues.createComment(propened); - await this.context.octokit.issues.addLabels( - this.context.issue({ + await this._context.octokit.issues.createComment(propened); + await this._context.octokit.issues.addLabels( + this._context.issue({ labels: ["Pending"] }) ); @@ -131,13 +129,13 @@ export default class PullRequestOpen { * @returns {Promise} */ public async openCore(): Promise { - const propened = this.context.issue({ - body: `Hello @${this.context.payload.sender.login} Thank you for submitting Pull Request, please wait for next notification after we review your Pull Request` + const propened = this._context.issue({ + body: `Hello @${this._context.payload.sender.login} Thank you for submitting Pull Request, please wait for next notification after we review your Pull Request` }); console.log("Pull request opened"); - await this.context.octokit.issues.createComment(propened); - await this.context.octokit.issues.addLabels( - this.context.issue({ + await this._context.octokit.issues.createComment(propened); + await this._context.octokit.issues.addLabels( + this._context.issue({ labels: ["Pending"] }) ); @@ -147,7 +145,7 @@ export default class PullRequestOpen { await octokit.rest.pulls.get({ owner: "Typeslint", repo: "github-AutoResponse", - pull_number: this.context.payload.number + pull_number: this._context.payload.number }).then(async (res) => { shaRef = res.data.head.sha; await octokit.rest.repos.getContent({ @@ -172,15 +170,15 @@ export default class PullRequestOpen { if (decodeContent.includes("\"noImplicitAny\": true") && decodeContent.includes("\"noImplicitThis\": true") && decodeContent.includes("\"strictFunctionTypes\": true") && decodeContent.includes("\"strictNullChecks\": true")) { return; } else { - await this.context.octokit.issues.addLabels( - this.context.issue({ + await this._context.octokit.issues.addLabels( + this._context.issue({ labels: ["Config Invalid"] }) ); - const configInvalid = this.context.issue({ + const configInvalid = this._context.issue({ body: `[tsconfig](${res.data.html_url}) needs the following rules to be set to true: ${missingRules.join(", ")}` }); - await this.context.octokit.issues.createComment(configInvalid); + await this._context.octokit.issues.createComment(configInvalid); } } else { return; diff --git a/src/class/prsReview.ts b/src/class/prsReview.ts index 3b31b2a..73dffef 100644 --- a/src/class/prsReview.ts +++ b/src/class/prsReview.ts @@ -1,4 +1,4 @@ -import Context from "../index"; +import { Context } from "../index.js"; /** * @class @@ -10,35 +10,35 @@ export default class PullRequestReview { * @private * @type Context<"pull_request_review.submitted"> */ - private context: Context<"pull_request_review.submitted">; + private _context: Context<"pull_request_review.submitted">; /** * @constructor * @param {Context<"pull_request_review.submitted">} context */ constructor(context: Context<"pull_request_review.submitted">) { - this.context = context; + this._context = context; } /** * @private + * @async * @param {string} body * @param {string[]} labels * @param {string[]} [removeLabel] - * @async * @returns {Promise} */ private async createReview(body: string, labels: string[], removeLabel?: string[]): Promise { - await this.context.octokit.pulls.createReview({ - repo: this.context.payload.repository.name, - owner: this.context.payload.repository.owner.login, - pull_number: this.context.payload.pull_request.number, + await this._context.octokit.pulls.createReview({ + repo: this._context.payload.repository.name, + owner: this._context.payload.repository.owner.login, + pull_number: this._context.payload.pull_request.number, body: body, event: "COMMENT" }); - await this.context.octokit.issues.addLabels( - this.context.issue({ + await this._context.octokit.issues.addLabels( + this._context.issue({ labels: labels }) ); @@ -46,14 +46,14 @@ export default class PullRequestReview { if (removeLabel) { removeLabel.forEach((label) => { new Promise((resolve, reject) => { - this.context.octokit.issues.removeLabel( - this.context.issue({ + this._context.octokit.issues.removeLabel( + this._context.issue({ name: label }) ).then(() => { resolve(); - }).catch((err) => { - reject(err); + }).catch((err: Error) => { + return reject(new Error(err.name)); }); }).catch((err) => { console.error(err); @@ -68,34 +68,34 @@ export default class PullRequestReview { * @returns {Promise} */ public async userPRs(): Promise { - if (this.context.payload.sender.login === this.context.payload.repository.owner.login) { + if (this._context.payload.sender.login === this._context.payload.repository.owner.login) { // Owner - if (this.context.payload.review.state === "approved") { - const reviewMessage = `@${this.context.payload.pull_request.user.login} your pull request has been approved by @${this.context.payload.review.user.login}, please type \`Ready to merge\` for merging`; - if (this.context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { + if (this._context.payload.review.state === "approved") { + const reviewMessage = `@${this._context.payload.pull_request.user.login} your pull request has been approved by @${this._context.payload.review.user.login}, please type \`Ready to merge\` for merging`; + if (this._context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { await this.createReview(reviewMessage, ["Approved"], ["Requested Changes", "Pending"]); } else { await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } - } else if (this.context.payload.review.state === "changes_requested") { - const reviewMessage = `Pull request has requested changes by @${this.context.payload.review.user.login}. PING! @${this.context.payload.pull_request.user.login} Please address their comments before I'm merging this PR, thanks!`; - if (this.context.payload.pull_request.labels.find((a) => a.name === "Approved")) { + } else if (this._context.payload.review.state === "changes_requested") { + const reviewMessage = `Pull request has requested changes by @${this._context.payload.review.user.login}. PING! @${this._context.payload.pull_request.user.login} Please address their comments before I'm merging this PR, thanks!`; + if (this._context.payload.pull_request.labels.find((a) => a.name === "Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { await this.createReview(reviewMessage, ["Requested Changes"], ["Pending"]); } } - } else if (this.context.payload.review.author_association === "MEMBER" || this.context.payload.review.author_association === "COLLABORATOR") { - if (this.context.payload.review.state === "approved") { - const reviewMessage = `@${this.context.payload.pull_request.user.login} your pull request has been approved by \`[MAINTAINER]\`@${this.context.payload.review.user.login}, please type \`Ready to merge\` for merging`; - if (this.context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { + } else if (this._context.payload.review.author_association === "MEMBER" || this._context.payload.review.author_association === "COLLABORATOR") { + if (this._context.payload.review.state === "approved") { + const reviewMessage = `@${this._context.payload.pull_request.user.login} your pull request has been approved by \`[MAINTAINER]\`@${this._context.payload.review.user.login}, please type \`Ready to merge\` for merging`; + if (this._context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { await this.createReview(reviewMessage, ["Approved"], ["Requested Changes", "Pending"]); } else { await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } - } else if (this.context.payload.review.state === "changes_requested") { - const reviewMessage = `Pull request has requested changes by @${this.context.payload.review.user.login}. PING! @${this.context.payload.pull_request.user.login} Please address their comments before I'm merging this PR, thanks!`; - if (this.context.payload.pull_request.labels.find((a) => a.name === "Approved")) { + } else if (this._context.payload.review.state === "changes_requested") { + const reviewMessage = `Pull request has requested changes by @${this._context.payload.review.user.login}. PING! @${this._context.payload.pull_request.user.login} Please address their comments before I'm merging this PR, thanks!`; + if (this._context.payload.pull_request.labels.find((a) => a.name === "Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { await this.createReview(reviewMessage, ["Requested Changes"], ["Pending"]); @@ -103,16 +103,16 @@ export default class PullRequestReview { } } else { // Others Approved - if (this.context.payload.review.state === "approved") { - const reviewMessage = `@${this.context.payload.pull_request.user.login} your pull request has been approved by @${this.context.payload.review.user.login}, even though please wait for the \`MAINTAINERS\`/\`CODEOWNERS\` to review`; - if (this.context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { + if (this._context.payload.review.state === "approved") { + const reviewMessage = `@${this._context.payload.pull_request.user.login} your pull request has been approved by @${this._context.payload.review.user.login}, even though please wait for the \`MAINTAINERS\`/\`CODEOWNERS\` to review`; + if (this._context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { await this.createReview(reviewMessage, ["Others Approved"], ["Requested Changes", "Pending"]); } else { await this.createReview(reviewMessage, ["Others Approved"], ["Pending"]); } - } else if (this.context.payload.review.state === "changes_requested") { - const reviewMessage = `Pull request has requested changes by @${this.context.payload.review.user.login}. PING! @${this.context.payload.pull_request.user.login} Please address their comments before I'm merging this PR, thanks!`; - if (this.context.payload.pull_request.labels.find((a) => a.name === "Others Approved")) { + } else if (this._context.payload.review.state === "changes_requested") { + const reviewMessage = `Pull request has requested changes by @${this._context.payload.review.user.login}. PING! @${this._context.payload.pull_request.user.login} Please address their comments before I'm merging this PR, thanks!`; + if (this._context.payload.pull_request.labels.find((a) => a.name === "Others Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Others Approved", "Pending"]); } else { await this.createReview(reviewMessage, ["Requested Changes"], ["Pending"]); @@ -127,48 +127,49 @@ export default class PullRequestReview { * @returns {Promise} */ public async botPRs(): Promise { - const maintainers: ReadonlyArray = await this.context.octokit.pulls.listReviews({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, - pull_number: this.context.payload.pull_request.number + const maintainers: ReadonlyArray = await this._context.octokit.pulls.listReviews({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, + pull_number: this._context.payload.pull_request.number }).then((response) => { return response.data.filter((data) => data.user?.login && - this.context.payload.review.user.login !== data.user.login && + this._context.payload.review.user.login !== data.user.login && data.user.type.toLowerCase() !== "bot" && ["COLLABORATOR", "MEMBER", "OWNER"].includes(data.author_association) ).map((data) => { return `@${data.user?.login}`; }); }); - if (this.context.payload.sender.login === this.context.payload.repository.owner.login) { + + if (this._context.payload.sender.login === this._context.payload.repository.owner.login) { // Owner - if (this.context.payload.review.state === "approved") { - const reviewMessage = `@${this.context.payload.pull_request.user.login} Pull request has been approved by \`[OWNER]\`@${this.context.payload.review.user.login}, please type \`Merge\` for merging @${this.context.payload.review.user.login}`; - if (this.context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { + if (this._context.payload.review.state === "approved") { + const reviewMessage = `@${this._context.payload.pull_request.user.login} Pull request has been approved by \`[OWNER]\`@${this._context.payload.review.user.login}, please type \`Merge\` for merging @${this._context.payload.review.user.login}`; + if (this._context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { await this.createReview(reviewMessage, ["Approved"], ["Requested Changes", "Pending"]); } else { await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } - } else if (this.context.payload.review.state === "changes_requested") { - const reviewMessage = `@${this.context.payload.pull_request.user.login} pull request has requested changes by \`[OWNER]\`@${this.context.payload.review.user.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; - if (this.context.payload.pull_request.labels.find((a) => a.name === "Approved")) { + } else if (this._context.payload.review.state === "changes_requested") { + const reviewMessage = `@${this._context.payload.pull_request.user.login} pull request has requested changes by \`[OWNER]\`@${this._context.payload.review.user.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; + if (this._context.payload.pull_request.labels.find((a) => a.name === "Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { await this.createReview(reviewMessage, ["Requested Changes"], ["Pending"]); } } - } else if (this.context.payload.review.author_association === "MEMBER" || this.context.payload.review.author_association === "COLLABORATOR") { - if (this.context.payload.review.state === "approved") { - const reviewMessage = `@${this.context.payload.pull_request.user.login} Pull request has been approved by \`[MAINTAINER]\`@${this.context.payload.review.user.login}, please type \`Merge\` for merging @${this.context.payload.review.user.login}`; - if (this.context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { + } else if (this._context.payload.review.author_association === "MEMBER" || this._context.payload.review.author_association === "COLLABORATOR") { + if (this._context.payload.review.state === "approved") { + const reviewMessage = `@${this._context.payload.pull_request.user.login} Pull request has been approved by \`[MAINTAINER]\`@${this._context.payload.review.user.login}, please type \`Merge\` for merging @${this._context.payload.review.user.login}`; + if (this._context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { await this.createReview(reviewMessage, ["Approved"], ["Requested Changes", "Pending"]); } else { await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } - } else if (this.context.payload.review.state === "changes_requested") { - const reviewMessage = `Pull request has requested changes by \`[MAINTAINER]\`@${this.context.payload.review.user.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; - if (this.context.payload.pull_request.labels.find((a) => a.name === "Approved")) { + } else if (this._context.payload.review.state === "changes_requested") { + const reviewMessage = `Pull request has requested changes by \`[MAINTAINER]\`@${this._context.payload.review.user.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; + if (this._context.payload.pull_request.labels.find((a) => a.name === "Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { await this.createReview(reviewMessage, ["Requested Changes"], ["Pending"]); @@ -176,16 +177,16 @@ export default class PullRequestReview { } } else { // Others Approved - if (this.context.payload.review.state === "approved") { - const reviewMessage = `@${this.context.payload.pull_request.user.login} your pull request has been approved by @${this.context.payload.review.user.login}, even though please wait for the \`MAINTAINERS\`/\`CODEOWNERS\` to review`; - if (this.context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { + if (this._context.payload.review.state === "approved") { + const reviewMessage = `@${this._context.payload.pull_request.user.login} your pull request has been approved by @${this._context.payload.review.user.login}, even though please wait for the \`MAINTAINERS\`/\`CODEOWNERS\` to review`; + if (this._context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { await this.createReview(reviewMessage, ["Others Approved"], ["Requested Changes", "Pending"]); } else { await this.createReview(reviewMessage, ["Others Approved"], ["Pending"]); } - } else if (this.context.payload.review.state === "changes_requested") { - const reviewMessage = `Pull request has requested changes by @${this.context.payload.review.user.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; - if (this.context.payload.pull_request.labels.find((a) => a.name === "Others Approved")) { + } else if (this._context.payload.review.state === "changes_requested") { + const reviewMessage = `Pull request has requested changes by @${this._context.payload.review.user.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; + if (this._context.payload.pull_request.labels.find((a) => a.name === "Others Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Others Approved", "Pending"]); } else { await this.createReview(reviewMessage, ["Requested Changes"], ["Pending"]); diff --git a/src/class/prsStale.ts b/src/class/prsStale.ts index e48a851..09fee19 100644 --- a/src/class/prsStale.ts +++ b/src/class/prsStale.ts @@ -1,4 +1,4 @@ -import { octokit } from "../index"; +import { octokit } from "../index.js"; /** * @class diff --git a/src/class/prsSynchronize.ts b/src/class/prsSynchronize.ts index d29f221..f1e1420 100644 --- a/src/class/prsSynchronize.ts +++ b/src/class/prsSynchronize.ts @@ -1,4 +1,4 @@ -import Context, { octokit } from "../index"; +import { Context, octokit } from "../index.js"; /** * @class @@ -11,14 +11,14 @@ export default class PullRequestSynchronize { * @private * @type Context<"pull_request.synchronize"> */ - private context: Context<"pull_request.synchronize">; + private _context: Context<"pull_request.synchronize">; /** * @constructor * @param {Context<"pull_request.synchronize">} context */ constructor(context: Context<"pull_request.synchronize">) { - this.context = context; + this._context = context; } /** @@ -27,18 +27,18 @@ export default class PullRequestSynchronize { * @returns {Promise} */ public async sync(): Promise { - await this.context.octokit.issues.listLabelsOnIssue({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, - issue_number: this.context.payload.pull_request.number + await this._context.octokit.issues.listLabelsOnIssue({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, + issue_number: this._context.payload.pull_request.number }).then(async (res) => { let i: number; const prsLabels = res.data.find((a) => a.name === "Requested Changes" || a.name === "Approved")?.name; if (prsLabels) { - await this.context.octokit.pulls.listReviews({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, - pull_number: this.context.payload.pull_request.number + await this._context.octokit.pulls.listReviews({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, + pull_number: this._context.payload.pull_request.number }).then(async (res) => { const reviewersArray: string[] = []; const tagReviewers: string[] = []; @@ -53,17 +53,17 @@ export default class PullRequestSynchronize { const username: string = res.data[i].user?.login || ""; reviewersArray.push(username); tagReviewers.push("@" + username); - await this.context.octokit.pulls.dismissReview({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, - pull_number: this.context.payload.pull_request.number, + await this._context.octokit.pulls.dismissReview({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, + pull_number: this._context.payload.pull_request.number, review_id: res.data[i].id, message: "This review is stale and has been dismissed." }); - await this.context.octokit.pulls.requestReviewers({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, - pull_number: this.context.payload.pull_request.number, + await this._context.octokit.pulls.requestReviewers({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, + pull_number: this._context.payload.pull_request.number, reviewers: [username] }); } else { @@ -76,23 +76,23 @@ export default class PullRequestSynchronize { continue; } } - if (this.context.payload.sender.login === this.context.payload.pull_request.user.login) { - await this.context.octokit.issues.createComment( - this.context.issue({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, - issue_number: this.context.payload.pull_request.number, - body: `PING! ${tagReviewers.join(", ")}. The author has pushed new commits since your last review. please review @${this.context.payload.sender.login} new commit before merge, thanks!` + if (this._context.payload.sender.login === this._context.payload.pull_request.user.login) { + await this._context.octokit.issues.createComment( + this._context.issue({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, + issue_number: this._context.payload.pull_request.number, + body: `PING! ${tagReviewers.join(", ")}. The author has pushed new commits since your last review. please review @${this._context.payload.sender.login} new commit before merge, thanks!` }) ); - await this.context.octokit.issues.removeLabel( - this.context.issue({ + await this._context.octokit.issues.removeLabel( + this._context.issue({ name: prsLabels }) ); } else { - await this.context.octokit.issues.removeLabel( - this.context.issue({ + await this._context.octokit.issues.removeLabel( + this._context.issue({ name: prsLabels }) ); @@ -115,7 +115,7 @@ export default class PullRequestSynchronize { await octokit.rest.pulls.get({ owner: "Typeslint", repo: "github-AutoResponse", - pull_number: this.context.payload.number + pull_number: this._context.payload.number }).then(async (res) => { shaRef = res.data.head.sha; await octokit.rest.repos.getContent({ @@ -128,14 +128,14 @@ export default class PullRequestSynchronize { const textContent:string = res.data.content; const decodeContent:string = Buffer.from(textContent, "base64").toString("utf-8"); if (decodeContent.includes("\"noImplicitAny\": true") && decodeContent.includes("\"noImplicitThis\": true") && decodeContent.includes("\"strictFunctionTypes\": true") && decodeContent.includes("\"strictNullChecks\": true")) { - await this.context.octokit.issues.listLabelsOnIssue({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, - issue_number: this.context.payload.pull_request.number + await this._context.octokit.issues.listLabelsOnIssue({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, + issue_number: this._context.payload.pull_request.number }).then(async (res) => { if (res.data.find((a) => a.name === "Config Invalid")) { - await this.context.octokit.issues.removeLabel( - this.context.issue({ + await this._context.octokit.issues.removeLabel( + this._context.issue({ name: "Config Invalid" }) ); @@ -144,10 +144,10 @@ export default class PullRequestSynchronize { } }); } else { - const configInvalid = this.context.issue({ + const configInvalid = this._context.issue({ body: `[tsconfig](${res.data.html_url}) need [*noImplicitAny*, *noImplicitThis*, *strictFunctionTypes*, *strictNullChecks*] to true value` }); - await this.context.octokit.issues.createComment(configInvalid); + await this._context.octokit.issues.createComment(configInvalid); } } else { return; diff --git a/src/class/push.ts b/src/class/push.ts index db79b47..73c3d9c 100644 --- a/src/class/push.ts +++ b/src/class/push.ts @@ -1,4 +1,4 @@ -import Context, { GetEvent, GetUserData, octokit, token } from "../index"; +import { Context, GetEvent, GetUserData, octokit, token } from "../index.js"; /** * @class @@ -11,14 +11,14 @@ export default class Push { * @private * @type Context<"push"> */ - private context: Context<"push">; + private _context: Context<"push">; /** * @constructor * @param {Context<"push">} context */ constructor(context: Context<"push">) { - this.context = context; + this._context = context; } /** @@ -82,10 +82,10 @@ export default class Push { return; }); } - if (this.context.payload.repository.owner.login === "Muunatic") { - if (this.context.payload.sender.login === "Muunatic") { + if (this._context.payload.repository.owner.login === "Muunatic") { + if (this._context.payload.sender.login === "Muunatic") { await userActivity(); - await this.context.octokit.repos.getContent({ + await this._context.octokit.repos.getContent({ owner: "Muunatic", repo: "Muunatic", path: "README.md", @@ -93,7 +93,7 @@ export default class Push { }).then(async (res) => { if ("sha" in res.data) { const textcontent = `# ɢɪᴛʜᴜʙ sᴛᴀᴛs

\nUpdated ${new Date().toUTCString()} \n\n1. ${event1}\n2. ${event2}\n3. ${event3}\n4. ${event4}\n5. ${event5}`; - await this.context.octokit.repos.createOrUpdateFileContents({ + await this._context.octokit.repos.createOrUpdateFileContents({ content: Buffer.from(textcontent, "utf-8").toString("base64"), path: "README.md", message: "Update Readme.md", @@ -106,13 +106,13 @@ export default class Push { return; } }); - } else if (this.context.payload.sender.login === "typeslint-cli[bot]") { - if (this.context.payload.repository.name === "Muunatic") { + } else if (this._context.payload.sender.login === "typeslint-cli[bot]") { + if (this._context.payload.repository.name === "Muunatic") { await octokit.rest.checks.create({ owner: "Muunatic", repo: "Muunatic", name: "typeslint/ci", - head_sha: this.context.payload.head_commit?.id as string, + head_sha: this._context.payload.head_commit?.id as string, status: "in_progress" }).then(async (resId) => { await octokit.rest.checks.update({ @@ -124,7 +124,7 @@ export default class Push { conclusion: "success", output: { title: "Update Activities ✔️", - summary: "@" + this.context.payload.sender.login + " README Update" + summary: "@" + this._context.payload.sender.login + " README Update" } }); }); diff --git a/src/class/workflowCheck.ts b/src/class/workflowCheck.ts index 2daf35d..7fcd10d 100644 --- a/src/class/workflowCheck.ts +++ b/src/class/workflowCheck.ts @@ -1,4 +1,4 @@ -import Context, { octokit } from "../index"; +import { Context, octokit } from "../index.js"; /** * @class @@ -11,14 +11,14 @@ export default class WorkflowCheck { * @private * @type Context<"workflow_run.completed"> */ - private context: Context<"workflow_run.completed">; + private _context: Context<"workflow_run.completed">; /** * @constructor * @param {Context<"workflow_run.completed">} context */ constructor(context: Context<"workflow_run.completed">) { - this.context = context; + this._context = context; } /** @@ -27,21 +27,21 @@ export default class WorkflowCheck { * @returns {Promise} */ public async checkCI(): Promise { - if (this.context.payload.workflow_run.conclusion === "failure") { - await this.context.octokit.issues.addLabels( - this.context.issue({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, - issue_number: this.context.payload.workflow_run.pull_requests[0].number, + if (this._context.payload.workflow_run.conclusion === "failure") { + await this._context.octokit.issues.addLabels( + this._context.issue({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, + issue_number: this._context.payload.workflow_run.pull_requests[0].number, labels: ["CI Failed"] }) ); - await this.context.octokit.issues.createComment( - this.context.issue({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, - issue_number: this.context.payload.workflow_run.pull_requests[0].number, - body: `CI build failed! for more information please review the [logs](${this.context.payload.workflow_run.html_url}).` + await this._context.octokit.issues.createComment( + this._context.issue({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, + issue_number: this._context.payload.workflow_run.pull_requests[0].number, + body: `CI build failed! for more information please review the [logs](${this._context.payload.workflow_run.html_url}).` }) ); } else { @@ -56,48 +56,47 @@ export default class WorkflowCheck { */ public async checkUserCI(): Promise { await octokit.rest.pulls.list({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, - head: `${this.context.payload.workflow_run.actor.login}:${this.context.payload.workflow_run.head_branch}`, + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, state: "open" }).then(async (res) => { - const prsNumber = res.data.find((a) => a.head.sha === this.context.payload.workflow_run.head_sha)?.number as number; - if (this.context.payload.workflow_run.conclusion === "success") { - await this.context.octokit.pulls.get({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, + const prsNumber = res.data.find((a) => a.head.sha === this._context.payload.workflow_run.head_sha)?.number as number; + if (this._context.payload.workflow_run.conclusion === "success") { + console.log(this._context.payload.repository.owner.login, this._context.payload.repository.name, prsNumber); + await this._context.octokit.pulls.get({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, pull_number: prsNumber }).then(async (res) => { if (res.data.labels.find((a) => a.name === "CI Failed")) { - await this.context.octokit.issues.removeLabel( - this.context.issue({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, + await this._context.octokit.issues.removeLabel( + this._context.issue({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, issue_number: prsNumber, name: "CI Failed" }) ); - console.log("CI Passed!"); } else { return; } }); - } else if (this.context.payload.workflow_run.conclusion === "failure") { + } else if (this._context.payload.workflow_run.conclusion === "failure") { console.log("CI Failure!"); - await this.context.octokit.issues.addLabels( - this.context.issue({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, + await this._context.octokit.issues.addLabels( + this._context.issue({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, issue_number: prsNumber, labels: ["CI Failed"] }) ); - await this.context.octokit.issues.createComment( - this.context.issue({ - owner: this.context.payload.repository.owner.login, - repo: this.context.payload.repository.name, + await this._context.octokit.issues.createComment( + this._context.issue({ + owner: this._context.payload.repository.owner.login, + repo: this._context.payload.repository.name, issue_number: prsNumber, - body: `CI build failed! for more information please review the [logs](${this.context.payload.workflow_run.html_url}).` + body: `CI build failed! for more information please review the [logs](${this._context.payload.workflow_run.html_url}).` }) ); } else { diff --git a/src/index.ts b/src/index.ts index fe15c50..743d956 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,10 +1,10 @@ import { Context, Probot } from "probot"; import { Octokit } from "octokit"; import { createAppAuth } from "@octokit/auth-app"; -import { token } from "./data/config"; -import { IssuesClose, IssuesComment, IssuesOpen, PRsStale, PullRequestOpen, PullRequestReview, PullRequestSynchronize, Push, WorkflowCheck } from "./structures/constant"; -import { GetEvent, GetUserData } from "./structures/type"; -import "./structures/listener"; +import { token } from "./data/config.js"; +import { IssuesClose, IssuesComment, IssuesOpen, PRsStale, PullRequestOpen, PullRequestReview, PullRequestSynchronize, Push, WorkflowCheck } from "./structures/constant.js"; +import { GetEvent, GetUserData } from "./structures/type.js"; +import "./structures/listener.js"; import dotenv from "dotenv"; dotenv.config(); @@ -19,7 +19,7 @@ const octokit = new Octokit({ } }); -module.exports = (app: Probot) => { +export default (app: Probot): void => { app.on("push", async (context): Promise => { await new Push(context).push(); @@ -45,10 +45,13 @@ module.exports = (app: Probot) => { }); app.on("issues.closed", async (context): Promise => { - if (context.payload.issue.state_reason === "not_planned") { - await new IssuesClose(context).invalid(); - } else { - await new IssuesClose(context).closed(); + switch (context.payload.issue.state_reason?.toLowerCase()) { + case "not_planned": + await new IssuesClose(context).invalid(); + break; + default: + await new IssuesClose(context).closed(); + break; } }); @@ -59,8 +62,6 @@ module.exports = (app: Probot) => { } else { await new PullRequestOpen(context).open(); } - } else { - return; } }); @@ -112,6 +113,5 @@ setInterval(() => { }); }, 3600000); -export default Context; -export { octokit, token }; +export { Context, octokit, token }; export type { GetEvent, GetUserData }; diff --git a/src/structures/constant.ts b/src/structures/constant.ts index 54a2b8a..c9aa557 100644 --- a/src/structures/constant.ts +++ b/src/structures/constant.ts @@ -1,12 +1,12 @@ -import IssuesClose from "../class/issuesClose"; -import IssuesComment from "../class/issuesComment"; -import IssuesOpen from "../class/issuesOpen"; -import PullRequestOpen from "../class/prsOpen"; -import PullRequestReview from "../class/prsReview"; -import PullRequestSynchronize from "../class/prsSynchronize"; -import Push from "../class/push"; -import WorkflowCheck from "../class/workflowCheck"; -import PRsStale from "../class/prsStale"; +import IssuesClose from "../class/issuesClose.js"; +import IssuesComment from "../class/issuesComment.js"; +import IssuesOpen from "../class/issuesOpen.js"; +import PullRequestOpen from "../class/prsOpen.js"; +import PullRequestReview from "../class/prsReview.js"; +import PullRequestSynchronize from "../class/prsSynchronize.js"; +import Push from "../class/push.js"; +import WorkflowCheck from "../class/workflowCheck.js"; +import PRsStale from "../class/prsStale.js"; export { IssuesClose, From 7aaa9e9377f54eef3af6b16c97d2721b9aa8305e Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 24 Nov 2025 16:00:57 +0700 Subject: [PATCH 16/27] test(linter): update linter rules --- .eslintignore | 5 -- .eslintrc.json | 88 ------------------------------ eslint.config.ts | 136 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 136 insertions(+), 93 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.json create mode 100644 eslint.config.ts diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 2c18351..0000000 --- a/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -# modules -node_modules - -# dist -dist \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 0948fef..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "env": { - "es2021": true, - "node": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-type-checked" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 12, - "sourceType": "module", - "project": true - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - "arrow-parens": ["warn", "always"], - "brace-style": ["warn", "1tbs"], - "camelcase": ["warn", { - "properties": "never", - "ignoreImports": true - }], - "comma-dangle": ["error", "never"], - "comma-spacing": ["warn", { - "after": true, - "before": false - }], - "comma-style": ["warn", "last"], - "curly": ["error", "all"], - "default-case": 1, - "eol-last": ["warn", "always"], - "eqeqeq": ["error", "smart"], - "indent": ["warn", 4, { - "SwitchCase": 1 - }], - "key-spacing": ["warn", { - "mode": "strict" - }], - "keyword-spacing": ["warn", { - "after": true, - "before": true - }], - "lines-between-class-members": ["warn", "always"], - "no-multi-spaces": 1, - "no-multiple-empty-lines": ["warn", { - "max": 1 - }], - "no-trailing-spaces": 1, - "no-unused-vars": 1, - "no-useless-escape": 0, - "object-curly-spacing": ["error", "always", { - "objectsInObjects": true, - "arraysInObjects": true - }], - "object-shorthand": ["warn", "consistent"], - "quotes": ["warn", "double", { - "avoidEscape": false - }], - "semi": "error", - "semi-style": ["warn", "last"], - "sort-imports": ["warn", { - "ignoreCase": false, - "ignoreDeclarationSort": true - }], - "@typescript-eslint/explicit-function-return-type": ["warn", { - "allowExpressions": true - }], - "@typescript-eslint/member-delimiter-style": ["warn", { - "multiline": { - "delimiter": "semi", - "requireLast": true - }, - "singleline": { - "delimiter": "semi", - "requireLast": false - }, - "multilineDetection": "brackets" - }], - "@typescript-eslint/no-unnecessary-condition": 2, - "@typescript-eslint/no-require-imports": 2, - "@typescript-eslint/no-var-requires": 1 - }, - "ignorePatterns": ["dist/*.js", "dist/**/*.js"] -} diff --git a/eslint.config.ts b/eslint.config.ts new file mode 100644 index 0000000..4ca2802 --- /dev/null +++ b/eslint.config.ts @@ -0,0 +1,136 @@ +import { defineConfig } from "eslint/config"; +import eslint from "@eslint/js"; +import tseslint, { parser, plugin } from "typescript-eslint"; +import stylistic from "@stylistic/eslint-plugin"; + +export default defineConfig( + { + files: ["**/*.ts"], + languageOptions: { + ecmaVersion: 15, + parser: parser, + parserOptions: { + ecmaVersion: 15, + sourceType: "module", + project: true + } + }, + plugins: { + "@typescript-eslint": plugin, + "@stylistic": stylistic + }, + extends: [ + eslint.configs.recommended, + tseslint.configs.recommended, + tseslint.configs.recommendedTypeChecked + ], + rules: { + "camelcase": ["warn", { + "properties": "never", + "ignoreImports": true + }], + "curly": ["error", "all"], + "default-case": 1, + "eqeqeq": ["error", "smart"], + "no-unreachable": 2, + "no-useless-escape": 0, + "sort-imports": ["warn", { + "ignoreCase": false, + "ignoreDeclarationSort": true + }], + "@stylistic/arrow-parens": ["warn", "always"], + "@stylistic/brace-style": ["warn", "1tbs"], + "@stylistic/comma-dangle": ["error", "never"], + "@stylistic/comma-spacing": ["warn", { + "after": true, + "before": false + }], + "@stylistic/comma-style": ["warn", "last"], + "@stylistic/eol-last": ["warn", "always"], + "@stylistic/indent": ["warn", 4, { + "SwitchCase": 1 + }], + "@stylistic/key-spacing": ["warn", { + "mode": "strict" + }], + "@stylistic/keyword-spacing": ["warn", { + "after": true, + "before": true + }], + "@stylistic/lines-between-class-members": ["warn", "always"], + "@stylistic/no-extra-semi": 2, + "@stylistic/no-multi-spaces": 1, + "@stylistic/no-multiple-empty-lines": ["warn", { + "max": 1 + }], + "@stylistic/no-tabs": 1, + "@stylistic/no-trailing-spaces": 1, + "@stylistic/object-curly-spacing": ["error", "always", { + "arraysInObjects": true, + "objectsInObjects": true + }], + "@stylistic/quotes": ["warn", "double", { + "avoidEscape": false + }], + "@stylistic/semi": 2, + "@stylistic/semi-style": ["warn", "last"], + "@stylistic/member-delimiter-style": ["warn", { + "multiline": { + "delimiter": "semi", + "requireLast": true + }, + "singleline": { + "delimiter": "semi", + "requireLast": false + }, + "multilineDetection": "brackets" + }], + "@typescript-eslint/naming-convention": ["warn", + { + "selector": "default", + "format": ["camelCase"] + }, + { + "selector": "classProperty", + "modifiers": ["private"], + "format": ["camelCase"], + "leadingUnderscore": "require" + }, + { + "selector": "property", + "format": null + }, + { + "selector": "import", + "format": ["camelCase", "PascalCase"] + }, + { + "selector": "memberLike", + "format": ["camelCase"] + }, + { + "selector": "variableLike", + "format": ["camelCase"] + }, + { + "selector": "typeLike", + "format": ["PascalCase"] + } + ], + "@typescript-eslint/explicit-function-return-type": ["warn", { + "allowExpressions": true + }], + "@typescript-eslint/no-unnecessary-condition": 2, + "@typescript-eslint/no-unused-expressions": 0, + "@typescript-eslint/no-unused-vars": 2, + "@typescript-eslint/no-require-imports": 2, + "@typescript-eslint/no-var-requires": 1 + } + }, + { + ignores: [ + "node_modules", + "dist" + ] + } +); From 5a712600d46a4f0a40bb246a762642aa24e8fd20 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 24 Nov 2025 16:02:33 +0700 Subject: [PATCH 17/27] build(tsconfig)!: use ESM module --- tsconfig.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index b8b9db1..349e9ba 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,10 +1,10 @@ { "compilerOptions": { - "module": "commonjs", - "target": "ES2021", + "module": "Node16", + "target": "ES2024", "outDir": "dist", "lib": [ - "ES2021", + "ES2024", "dom" ], "alwaysStrict": true, @@ -14,7 +14,7 @@ "forceConsistentCasingInFileNames": true, "inlineSourceMap": true, "inlineSources": true, - "moduleResolution": "node", + "moduleResolution": "node16", "noEmitOnError": true, "noImplicitAny": true, "noImplicitOverride": true, @@ -31,7 +31,8 @@ "strictNullChecks": true }, "include": [ - "src/" + "src/", + "eslint.config.ts" ], "exclude": [ "node_modules" From b7aaa4424fd21d9aa249fb6ac0b58b071caae64e Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 8 Dec 2025 10:48:25 +0700 Subject: [PATCH 18/27] chore: delete eslint mjs config --- eslint.config.mjs | 139 ---------------------------------------------- 1 file changed, 139 deletions(-) delete mode 100644 eslint.config.mjs diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index 3e8249b..0000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,139 +0,0 @@ -import eslint from '@eslint/js'; -import tseslint from 'typescript-eslint'; -import tsPlugin from '@typescript-eslint/eslint-plugin'; -import tsParser from '@typescript-eslint/parser'; -import stylisticTs from '@stylistic/eslint-plugin-ts'; - -export default tseslint.config( - eslint.configs.recommended, - tseslint.configs.recommended, - tseslint.configs.recommendedTypeChecked, - - { - files: ["**/*.ts"], - languageOptions: { - ecmaVersion: 14, - parser: tsParser, - parserOptions: { - ecmaVersion: 14, - sourceType: "module", - project: true - } - }, - plugins: { - "@typescript-eslint": tsPlugin, - "@stylistic/ts": stylisticTs - }, - extends: [ - eslint.configs.recommended, - tseslint.configs.recommended, - tseslint.configs.recommendedTypeChecked - ], - rules: { - "arrow-parens": ["warn", "always"], - "brace-style": ["warn", "1tbs"], - "camelcase": ["warn", { - "properties": "never", - "ignoreImports": true - }], - "comma-dangle": ["error", "never"], - "comma-spacing": ["warn", { - "after": true, - "before": false - }], - "comma-style": ["warn", "last"], - "curly": ["error", "all"], - "default-case": 1, - "eol-last": ["warn", "always"], - "eqeqeq": ["error", "smart"], - "indent": ["warn", 4, { - "SwitchCase": 1 - }], - "key-spacing": ["warn", { - "mode": "strict" - }], - "keyword-spacing": ["warn", { - "after": true, - "before": true - }], - "lines-between-class-members": ["warn", "always"], - "no-multi-spaces": 1, - "no-multiple-empty-lines": ["warn", { - "max": 1 - }], - "no-trailing-spaces": 1, - "no-unused-vars": 1, - "no-useless-escape": 0, - "object-curly-spacing": ["error", "always", { - "objectsInObjects": true, - "arraysInObjects": true - }], - "object-shorthand": ["warn", "consistent"], - "quotes": ["warn", "double", { - "avoidEscape": false - }], - "semi": "error", - "semi-style": ["warn", "last"], - "sort-imports": ["warn", { - "ignoreCase": false, - "ignoreDeclarationSort": true - }], - "@typescript-eslint/naming-convention": [ "warn", - { - "selector": "default", - "format": ["camelCase"] - }, - { - "selector": "classProperty", - "modifiers": ["private"], - "format": ["camelCase"], - "leadingUnderscore": "require" - }, - { - "selector": "property", - "format": null - }, - { - "selector": "import", - "format": ["camelCase", "PascalCase"] - }, - { - "selector": "memberLike", - "format": ["camelCase"] - }, - { - "selector": "variableLike", - "format": ["camelCase"] - }, - { - "selector": "typeLike", - "format": ["PascalCase"] - } - ], - "@typescript-eslint/explicit-function-return-type": ["warn", { - "allowExpressions": true - }], - "@stylistic/ts/member-delimiter-style": ["warn", { - "multiline": { - "delimiter": "semi", - "requireLast": true - }, - "singleline": { - "delimiter": "semi", - "requireLast": false - }, - "multilineDetection": "brackets" - }], - "@typescript-eslint/no-unnecessary-condition": 2, - "@typescript-eslint/no-unused-expressions": 0, - "@typescript-eslint/no-require-imports": 2, - "@typescript-eslint/no-var-requires": 1 - }, - }, - { - ignores: [ - "node_modules", - "dist" - ] - } -); From 0f51a3765222115e317c60f19210c4eb7c37511e Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 8 Dec 2025 10:49:42 +0700 Subject: [PATCH 19/27] chore(deps): bump octokit to v5 --- package.json | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index ee120c8..ad15edf 100644 --- a/package.json +++ b/package.json @@ -1,35 +1,36 @@ { "name": "typeslint-cli", "version": "3.0.1", + "type": "module", "private": true, "description": "GitHub Workflow Apps", "homepage": "https://typeslint.com/github-autoresponse", "author": "Typeslint", "license": "ISC", "scripts": { - "build": "tsc --build --verbose", - "build:start": "tsc --build --verbose && probot run ./dist/index.js", - "start": "probot run ./dist/index.js", + "build": "tsc --build --clean && tsc --build --force --verbose", + "build:start": "tsc --build --clean && tsc --build --force --verbose && probot run ./dist/src/index.js", + "start": "probot run ./dist/src/index.js", "test": "eslint .", "lint": "npx eslint src/**/*.ts", "lint:fix": "npx eslint src/**/*.ts --fix" }, "dependencies": { - "dotenv": "^16.4.5", - "octokit": "^3.2.1", - "probot": "^12.4.0", - "smee-client": "^2.0.1" + "@octokit/auth-app": "^8.1.2", + "@octokit/rest": "^22.0.1", + "dotenv": "^16.6.1", + "octokit": "^5.0.5", + "probot": "^14.2.4", + "smee-client": "^5.0.0" }, "devDependencies": { "@octokit/auth-app": "^6.1.1", "@octokit/rest": "^20.1.1", "@types/node": "^18.19.39", - "@stylistic/eslint-plugin-ts": "^4.2.0", - "@typescript-eslint/eslint-plugin": "^8.29.1", - "@typescript-eslint/parser": "^8.29.1", - "eslint": "^9.24.0", - "typescript": "~5.8.3", - "typescript-eslint": "^8.29.1" + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "eslint": "^8.57.0", + "typescript": "5.3.3" }, "engines": { "node": ">=18.19.0", From 604198d913f3fb876ff335cb0d8f25331b6c48ff Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 8 Dec 2025 10:50:24 +0700 Subject: [PATCH 20/27] feat!: migrate octokit to v5 --- src/class/issuesClose.ts | 14 +++++----- src/class/issuesComment.ts | 52 ++++++++++++++++++------------------- src/class/issuesOpen.ts | 4 +-- src/class/prsOpen.ts | 24 ++++++++--------- src/class/prsReview.ts | 34 ++++++++++++------------ src/class/prsSynchronize.ts | 22 ++++++++-------- src/class/push.ts | 14 +++++----- src/class/workflowCheck.ts | 16 ++++++------ src/index.ts | 8 +++--- 9 files changed, 94 insertions(+), 94 deletions(-) diff --git a/src/class/issuesClose.ts b/src/class/issuesClose.ts index 973ca9b..1457b01 100644 --- a/src/class/issuesClose.ts +++ b/src/class/issuesClose.ts @@ -31,13 +31,13 @@ export default class IssuesClose { body: `Issue closed by @${this._context.payload.sender.login}.` }); console.log("Issues closed"); - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.addLabels( this._context.issue({ labels: ["Closed"] }) ); - await this._context.octokit.issues.createComment(issueClosed); - await this._context.octokit.issues.removeLabel( + await this._context.octokit.rest.issues.createComment(issueClosed); + await this._context.octokit.rest.issues.removeLabel( this._context.issue({ name: "Pending" }) @@ -54,18 +54,18 @@ export default class IssuesClose { body: `Issue closed as invalid by @${this._context.payload.sender.login}.` }); console.log("Issues closed"); - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.addLabels( this._context.issue({ labels: ["Closed", "Invalid"] }) ); - await this._context.octokit.issues.createComment(issueClosed); - await this._context.octokit.issues.removeLabel( + await this._context.octokit.rest.issues.createComment(issueClosed); + await this._context.octokit.rest.issues.removeLabel( this._context.issue({ name: "Pending" }) ); - await this._context.octokit.issues.lock({ + await this._context.octokit.rest.issues.lock({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, issue_number: this._context.payload.issue.number, diff --git a/src/class/issuesComment.ts b/src/class/issuesComment.ts index cf86ae9..9a6b26b 100644 --- a/src/class/issuesComment.ts +++ b/src/class/issuesComment.ts @@ -28,18 +28,18 @@ export default class IssuesComment { */ public async userPRsComment(): Promise { if (this._context.payload.comment.body.toLowerCase() === "ready to merge") { - await this._context.octokit.pulls.get({ + await this._context.octokit.rest.pulls.get({ repo: this._context.payload.repository.name, owner: this._context.payload.repository.owner.login, pull_number: this._context.payload.issue.number }).then(async (res) => { if (res.data.mergeable_state.toLowerCase() === "clean" || res.data.mergeable === true) { - if (this._context.payload.issue.user.login === this._context.payload.comment.user.login) { + if (this._context.payload.issue.user.login === this._context.payload.comment.user?.login) { let i: number; for (i = 0; i < this._context.payload.issue.labels.length; i++) { if (this._context.payload.issue.labels[i].name === "Approved") { console.log("Merging"); - await this._context.octokit.pulls.merge({ + await this._context.octokit.rest.pulls.merge({ repo: this._context.payload.repository.name, owner: this._context.payload.repository.owner.login, pull_number: this._context.payload.issue.number, @@ -47,7 +47,7 @@ export default class IssuesComment { commit_message: this._context.payload.issue.title }); console.log("Merged!"); - await this._context.octokit.issues.createComment( + await this._context.octokit.rest.issues.createComment( this._context.issue({ body: `Merged by ${this._context.payload.comment.user.login}!` }) @@ -55,7 +55,7 @@ export default class IssuesComment { break; } else if (this._context.payload.issue.labels[i].name === "Requested Changes") { console.log("PRs Blocked"); - await this._context.octokit.issues.createComment( + await this._context.octokit.rest.issues.createComment( this._context.issue({ body: `Merging blocked because PRs has requested changes! @${this._context.payload.comment.user.login}` }) @@ -69,13 +69,13 @@ export default class IssuesComment { return; } } else if (res.data.mergeable_state.toLowerCase() === "dirty" || res.data.mergeable === false) { - await this._context.octokit.issues.createComment( + await this._context.octokit.rest.issues.createComment( this._context.issue({ - body: `Merging blocked because PRs has merge conflict! @${this._context.payload.comment.user.login}` + body: `Merging blocked because PRs has merge conflict! @${this._context.payload.comment.user?.login}` }) ); } else { - await this._context.octokit.issues.createComment( + await this._context.octokit.rest.issues.createComment( this._context.issue({ body: "We apologize for the inconvenience, but it seems that Automaton processes are currently unable to proceed with merging your commit. Please wait for a moment and try merging it again." }) @@ -86,7 +86,7 @@ export default class IssuesComment { if (this._context.payload.comment.body.toLowerCase() === "merge") { if (this._context.payload.sender.login === this._context.payload.repository.owner.login) { - await this._context.octokit.pulls.merge({ + await this._context.octokit.rest.pulls.merge({ repo: this._context.payload.repository.name, owner: this._context.payload.repository.owner.login, pull_number: this._context.payload.issue.number, @@ -94,23 +94,23 @@ export default class IssuesComment { commit_message: this._context.payload.issue.title }); console.log("Merged!"); - await this._context.octokit.issues.removeLabel( + await this._context.octokit.rest.issues.removeLabel( this._context.issue({ name: "Pending" }) ); - await this._context.octokit.issues.createComment( + await this._context.octokit.rest.issues.createComment( this._context.issue({ - body: `Merged by \`[OWNER]\`${this._context.payload.comment.user.login}!` + body: `Merged by \`[OWNER]\`${this._context.payload.comment.user?.login}!` }) ); - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.addLabels( this._context.issue({ labels: ["Owner Merge"] }) ); } else if (this._context.payload.issue.author_association === "MEMBER" || this._context.payload.issue.author_association === "COLLABORATOR") { - await this._context.octokit.pulls.merge({ + await this._context.octokit.rest.pulls.merge({ repo: this._context.payload.repository.name, owner: this._context.payload.repository.owner.login, pull_number: this._context.payload.issue.number, @@ -118,14 +118,14 @@ export default class IssuesComment { commit_message: this._context.payload.issue.title }); console.log("Merged!"); - await this._context.octokit.issues.removeLabel( + await this._context.octokit.rest.issues.removeLabel( this._context.issue({ name: "Pending" }) ); - await this._context.octokit.issues.createComment( + await this._context.octokit.rest.issues.createComment( this._context.issue({ - body: `Merged by \`[MAINTAINER]\`${this._context.payload.comment.user.login}!` + body: `Merged by \`[MAINTAINER]\`${this._context.payload.comment.user?.login}!` }) ); } else { @@ -142,7 +142,7 @@ export default class IssuesComment { public async botPRsComment(): Promise { if (this._context.payload.comment.body.toLowerCase() === "merge") { if (this._context.payload.sender.login === this._context.payload.repository.owner.login) { - await this._context.octokit.pulls.merge({ + await this._context.octokit.rest.pulls.merge({ repo: this._context.payload.repository.name, owner: this._context.payload.repository.owner.login, pull_number: this._context.payload.issue.number, @@ -150,23 +150,23 @@ export default class IssuesComment { commit_message: this._context.payload.issue.title }); console.log("Merged!"); - await this._context.octokit.issues.removeLabel( + await this._context.octokit.rest.issues.removeLabel( this._context.issue({ name: "Pending" }) ); - await this._context.octokit.issues.createComment( + await this._context.octokit.rest.issues.createComment( this._context.issue({ - body: `Merged by \`[OWNER]\`${this._context.payload.comment.user.login}!` + body: `Merged by \`[OWNER]\`${this._context.payload.comment.user?.login}!` }) ); - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.addLabels( this._context.issue({ labels: ["Owner Merge"] }) ); } else if (this._context.payload.issue.author_association === "MEMBER" || this._context.payload.issue.author_association === "COLLABORATOR") { - await this._context.octokit.pulls.merge({ + await this._context.octokit.rest.pulls.merge({ repo: this._context.payload.repository.name, owner: this._context.payload.repository.owner.login, pull_number: this._context.payload.issue.number, @@ -174,14 +174,14 @@ export default class IssuesComment { commit_message: this._context.payload.issue.title }); console.log("Merged!"); - await this._context.octokit.issues.removeLabel( + await this._context.octokit.rest.issues.removeLabel( this._context.issue({ name: "Pending" }) ); - await this._context.octokit.issues.createComment( + await this._context.octokit.rest.issues.createComment( this._context.issue({ - body: `Merged by \`[MAINTAINER]\`${this._context.payload.comment.user.login}!` + body: `Merged by \`[MAINTAINER]\`${this._context.payload.comment.user?.login}!` }) ); } else { diff --git a/src/class/issuesOpen.ts b/src/class/issuesOpen.ts index 1834c73..f8338d3 100644 --- a/src/class/issuesOpen.ts +++ b/src/class/issuesOpen.ts @@ -32,12 +32,12 @@ export default class IssuesOpen { body: `Hello @${this._context.payload.sender.login} Thank you for submitting Issue, please wait for next notification after we review your Issue.` }); console.log("Issues created"); - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.addLabels( this._context.issue({ labels: ["Pending"] }) ); - await this._context.octokit.issues.createComment(issueComment); + await this._context.octokit.rest.issues.createComment(issueComment); } else { return; } diff --git a/src/class/prsOpen.ts b/src/class/prsOpen.ts index a5cf8d9..e8eb716 100644 --- a/src/class/prsOpen.ts +++ b/src/class/prsOpen.ts @@ -28,7 +28,7 @@ export default class PullRequestOpen { */ private async checkChanges(): Promise { let totalChanges: number = 0; - await this._context.octokit.pulls.listFiles({ + await this._context.octokit.rest.pulls.listFiles({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, pull_number: this._context.payload.number @@ -39,7 +39,7 @@ export default class PullRequestOpen { }); if (totalChanges > 1000) { - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.addLabels( this._context.issue({ labels: ["Huge Changes"] }) @@ -56,7 +56,7 @@ export default class PullRequestOpen { private async giveLabels(): Promise { const fileLabels: string[] = []; const filteredlabels: string[] = []; - await this._context.octokit.pulls.listFiles({ + await this._context.octokit.rest.pulls.listFiles({ owner: "Typeslint", repo: "github-AutoResponse", pull_number: this._context.payload.number @@ -78,7 +78,7 @@ export default class PullRequestOpen { if (fileLabels.length > 0) { new Set(fileLabels).forEach((a) => filteredlabels.push(a)); - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.addLabels( this._context.issue({ labels: filteredlabels }) @@ -101,8 +101,8 @@ export default class PullRequestOpen { body: `Hello @${this._context.payload.sender.login} Thank you for submitting Pull Request, please wait for next notification after we review your Pull Request` }); console.log("Pull request opened"); - await this._context.octokit.issues.createComment(propened); - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.createComment(propened); + await this._context.octokit.rest.issues.addLabels( this._context.issue({ labels: ["Pending"] }) @@ -113,8 +113,8 @@ export default class PullRequestOpen { body: `PRs by \`[OWNER]\`${this._context.payload.pull_request.user.login}!` }); console.log("Pull request opened"); - await this._context.octokit.issues.createComment(propened); - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.createComment(propened); + await this._context.octokit.rest.issues.addLabels( this._context.issue({ labels: ["Pending"] }) @@ -133,8 +133,8 @@ export default class PullRequestOpen { body: `Hello @${this._context.payload.sender.login} Thank you for submitting Pull Request, please wait for next notification after we review your Pull Request` }); console.log("Pull request opened"); - await this._context.octokit.issues.createComment(propened); - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.createComment(propened); + await this._context.octokit.rest.issues.addLabels( this._context.issue({ labels: ["Pending"] }) @@ -170,7 +170,7 @@ export default class PullRequestOpen { if (decodeContent.includes("\"noImplicitAny\": true") && decodeContent.includes("\"noImplicitThis\": true") && decodeContent.includes("\"strictFunctionTypes\": true") && decodeContent.includes("\"strictNullChecks\": true")) { return; } else { - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.addLabels( this._context.issue({ labels: ["Config Invalid"] }) @@ -178,7 +178,7 @@ export default class PullRequestOpen { const configInvalid = this._context.issue({ body: `[tsconfig](${res.data.html_url}) needs the following rules to be set to true: ${missingRules.join(", ")}` }); - await this._context.octokit.issues.createComment(configInvalid); + await this._context.octokit.rest.issues.createComment(configInvalid); } } else { return; diff --git a/src/class/prsReview.ts b/src/class/prsReview.ts index 73dffef..0fd3d1f 100644 --- a/src/class/prsReview.ts +++ b/src/class/prsReview.ts @@ -29,7 +29,7 @@ export default class PullRequestReview { * @returns {Promise} */ private async createReview(body: string, labels: string[], removeLabel?: string[]): Promise { - await this._context.octokit.pulls.createReview({ + await this._context.octokit.rest.pulls.createReview({ repo: this._context.payload.repository.name, owner: this._context.payload.repository.owner.login, pull_number: this._context.payload.pull_request.number, @@ -37,7 +37,7 @@ export default class PullRequestReview { event: "COMMENT" }); - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.addLabels( this._context.issue({ labels: labels }) @@ -46,7 +46,7 @@ export default class PullRequestReview { if (removeLabel) { removeLabel.forEach((label) => { new Promise((resolve, reject) => { - this._context.octokit.issues.removeLabel( + this._context.octokit.rest.issues.removeLabel( this._context.issue({ name: label }) @@ -71,14 +71,14 @@ export default class PullRequestReview { if (this._context.payload.sender.login === this._context.payload.repository.owner.login) { // Owner if (this._context.payload.review.state === "approved") { - const reviewMessage = `@${this._context.payload.pull_request.user.login} your pull request has been approved by @${this._context.payload.review.user.login}, please type \`Ready to merge\` for merging`; + const reviewMessage = `@${this._context.payload.pull_request.user?.login} your pull request has been approved by @${this._context.payload.review.user?.login}, please type \`Ready to merge\` for merging`; if (this._context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { await this.createReview(reviewMessage, ["Approved"], ["Requested Changes", "Pending"]); } else { await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } } else if (this._context.payload.review.state === "changes_requested") { - const reviewMessage = `Pull request has requested changes by @${this._context.payload.review.user.login}. PING! @${this._context.payload.pull_request.user.login} Please address their comments before I'm merging this PR, thanks!`; + const reviewMessage = `Pull request has requested changes by @${this._context.payload.review.user?.login}. PING! @${this._context.payload.pull_request.user?.login} Please address their comments before I'm merging this PR, thanks!`; if (this._context.payload.pull_request.labels.find((a) => a.name === "Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { @@ -87,14 +87,14 @@ export default class PullRequestReview { } } else if (this._context.payload.review.author_association === "MEMBER" || this._context.payload.review.author_association === "COLLABORATOR") { if (this._context.payload.review.state === "approved") { - const reviewMessage = `@${this._context.payload.pull_request.user.login} your pull request has been approved by \`[MAINTAINER]\`@${this._context.payload.review.user.login}, please type \`Ready to merge\` for merging`; + const reviewMessage = `@${this._context.payload.pull_request.user?.login} your pull request has been approved by \`[MAINTAINER]\`@${this._context.payload.review.user?.login}, please type \`Ready to merge\` for merging`; if (this._context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { await this.createReview(reviewMessage, ["Approved"], ["Requested Changes", "Pending"]); } else { await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } } else if (this._context.payload.review.state === "changes_requested") { - const reviewMessage = `Pull request has requested changes by @${this._context.payload.review.user.login}. PING! @${this._context.payload.pull_request.user.login} Please address their comments before I'm merging this PR, thanks!`; + const reviewMessage = `Pull request has requested changes by @${this._context.payload.review.user?.login}. PING! @${this._context.payload.pull_request.user?.login} Please address their comments before I'm merging this PR, thanks!`; if (this._context.payload.pull_request.labels.find((a) => a.name === "Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { @@ -104,14 +104,14 @@ export default class PullRequestReview { } else { // Others Approved if (this._context.payload.review.state === "approved") { - const reviewMessage = `@${this._context.payload.pull_request.user.login} your pull request has been approved by @${this._context.payload.review.user.login}, even though please wait for the \`MAINTAINERS\`/\`CODEOWNERS\` to review`; + const reviewMessage = `@${this._context.payload.pull_request.user?.login} your pull request has been approved by @${this._context.payload.review.user?.login}, even though please wait for the \`MAINTAINERS\`/\`CODEOWNERS\` to review`; if (this._context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { await this.createReview(reviewMessage, ["Others Approved"], ["Requested Changes", "Pending"]); } else { await this.createReview(reviewMessage, ["Others Approved"], ["Pending"]); } } else if (this._context.payload.review.state === "changes_requested") { - const reviewMessage = `Pull request has requested changes by @${this._context.payload.review.user.login}. PING! @${this._context.payload.pull_request.user.login} Please address their comments before I'm merging this PR, thanks!`; + const reviewMessage = `Pull request has requested changes by @${this._context.payload.review.user?.login}. PING! @${this._context.payload.pull_request.user?.login} Please address their comments before I'm merging this PR, thanks!`; if (this._context.payload.pull_request.labels.find((a) => a.name === "Others Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Others Approved", "Pending"]); } else { @@ -127,14 +127,14 @@ export default class PullRequestReview { * @returns {Promise} */ public async botPRs(): Promise { - const maintainers: ReadonlyArray = await this._context.octokit.pulls.listReviews({ + const maintainers: ReadonlyArray = await this._context.octokit.rest.pulls.listReviews({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, pull_number: this._context.payload.pull_request.number }).then((response) => { return response.data.filter((data) => data.user?.login && - this._context.payload.review.user.login !== data.user.login && + this._context.payload.review.user?.login !== data.user.login && data.user.type.toLowerCase() !== "bot" && ["COLLABORATOR", "MEMBER", "OWNER"].includes(data.author_association) ).map((data) => { @@ -145,14 +145,14 @@ export default class PullRequestReview { if (this._context.payload.sender.login === this._context.payload.repository.owner.login) { // Owner if (this._context.payload.review.state === "approved") { - const reviewMessage = `@${this._context.payload.pull_request.user.login} Pull request has been approved by \`[OWNER]\`@${this._context.payload.review.user.login}, please type \`Merge\` for merging @${this._context.payload.review.user.login}`; + const reviewMessage = `@${this._context.payload.pull_request.user?.login} Pull request has been approved by \`[OWNER]\`@${this._context.payload.review.user?.login}, please type \`Merge\` for merging @${this._context.payload.review.user?.login}`; if (this._context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { await this.createReview(reviewMessage, ["Approved"], ["Requested Changes", "Pending"]); } else { await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } } else if (this._context.payload.review.state === "changes_requested") { - const reviewMessage = `@${this._context.payload.pull_request.user.login} pull request has requested changes by \`[OWNER]\`@${this._context.payload.review.user.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; + const reviewMessage = `@${this._context.payload.pull_request.user?.login} pull request has requested changes by \`[OWNER]\`@${this._context.payload.review.user?.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; if (this._context.payload.pull_request.labels.find((a) => a.name === "Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { @@ -161,14 +161,14 @@ export default class PullRequestReview { } } else if (this._context.payload.review.author_association === "MEMBER" || this._context.payload.review.author_association === "COLLABORATOR") { if (this._context.payload.review.state === "approved") { - const reviewMessage = `@${this._context.payload.pull_request.user.login} Pull request has been approved by \`[MAINTAINER]\`@${this._context.payload.review.user.login}, please type \`Merge\` for merging @${this._context.payload.review.user.login}`; + const reviewMessage = `@${this._context.payload.pull_request.user?.login} Pull request has been approved by \`[MAINTAINER]\`@${this._context.payload.review.user?.login}, please type \`Merge\` for merging @${this._context.payload.review.user?.login}`; if (this._context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { await this.createReview(reviewMessage, ["Approved"], ["Requested Changes", "Pending"]); } else { await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } } else if (this._context.payload.review.state === "changes_requested") { - const reviewMessage = `Pull request has requested changes by \`[MAINTAINER]\`@${this._context.payload.review.user.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; + const reviewMessage = `Pull request has requested changes by \`[MAINTAINER]\`@${this._context.payload.review.user?.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; if (this._context.payload.pull_request.labels.find((a) => a.name === "Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { @@ -178,14 +178,14 @@ export default class PullRequestReview { } else { // Others Approved if (this._context.payload.review.state === "approved") { - const reviewMessage = `@${this._context.payload.pull_request.user.login} your pull request has been approved by @${this._context.payload.review.user.login}, even though please wait for the \`MAINTAINERS\`/\`CODEOWNERS\` to review`; + const reviewMessage = `@${this._context.payload.pull_request.user?.login} your pull request has been approved by @${this._context.payload.review.user?.login}, even though please wait for the \`MAINTAINERS\`/\`CODEOWNERS\` to review`; if (this._context.payload.pull_request.labels.find((a) => a.name === "Requested Changes")) { await this.createReview(reviewMessage, ["Others Approved"], ["Requested Changes", "Pending"]); } else { await this.createReview(reviewMessage, ["Others Approved"], ["Pending"]); } } else if (this._context.payload.review.state === "changes_requested") { - const reviewMessage = `Pull request has requested changes by @${this._context.payload.review.user.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; + const reviewMessage = `Pull request has requested changes by @${this._context.payload.review.user?.login}. ${maintainers.join(", ")} please address their comments before I'm merging this PR, thanks!`; if (this._context.payload.pull_request.labels.find((a) => a.name === "Others Approved")) { await this.createReview(reviewMessage, ["Requested Changes"], ["Others Approved", "Pending"]); } else { diff --git a/src/class/prsSynchronize.ts b/src/class/prsSynchronize.ts index f1e1420..f300ca3 100644 --- a/src/class/prsSynchronize.ts +++ b/src/class/prsSynchronize.ts @@ -27,7 +27,7 @@ export default class PullRequestSynchronize { * @returns {Promise} */ public async sync(): Promise { - await this._context.octokit.issues.listLabelsOnIssue({ + await this._context.octokit.rest.issues.listLabelsOnIssue({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, issue_number: this._context.payload.pull_request.number @@ -35,7 +35,7 @@ export default class PullRequestSynchronize { let i: number; const prsLabels = res.data.find((a) => a.name === "Requested Changes" || a.name === "Approved")?.name; if (prsLabels) { - await this._context.octokit.pulls.listReviews({ + await this._context.octokit.rest.pulls.listReviews({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, pull_number: this._context.payload.pull_request.number @@ -53,14 +53,14 @@ export default class PullRequestSynchronize { const username: string = res.data[i].user?.login || ""; reviewersArray.push(username); tagReviewers.push("@" + username); - await this._context.octokit.pulls.dismissReview({ + await this._context.octokit.rest.pulls.dismissReview({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, pull_number: this._context.payload.pull_request.number, review_id: res.data[i].id, message: "This review is stale and has been dismissed." }); - await this._context.octokit.pulls.requestReviewers({ + await this._context.octokit.rest.pulls.requestReviewers({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, pull_number: this._context.payload.pull_request.number, @@ -76,8 +76,8 @@ export default class PullRequestSynchronize { continue; } } - if (this._context.payload.sender.login === this._context.payload.pull_request.user.login) { - await this._context.octokit.issues.createComment( + if (this._context.payload.sender.login === this._context.payload.pull_request.user?.login) { + await this._context.octokit.rest.issues.createComment( this._context.issue({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, @@ -85,13 +85,13 @@ export default class PullRequestSynchronize { body: `PING! ${tagReviewers.join(", ")}. The author has pushed new commits since your last review. please review @${this._context.payload.sender.login} new commit before merge, thanks!` }) ); - await this._context.octokit.issues.removeLabel( + await this._context.octokit.rest.issues.removeLabel( this._context.issue({ name: prsLabels }) ); } else { - await this._context.octokit.issues.removeLabel( + await this._context.octokit.rest.issues.removeLabel( this._context.issue({ name: prsLabels }) @@ -128,13 +128,13 @@ export default class PullRequestSynchronize { const textContent:string = res.data.content; const decodeContent:string = Buffer.from(textContent, "base64").toString("utf-8"); if (decodeContent.includes("\"noImplicitAny\": true") && decodeContent.includes("\"noImplicitThis\": true") && decodeContent.includes("\"strictFunctionTypes\": true") && decodeContent.includes("\"strictNullChecks\": true")) { - await this._context.octokit.issues.listLabelsOnIssue({ + await this._context.octokit.rest.issues.listLabelsOnIssue({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, issue_number: this._context.payload.pull_request.number }).then(async (res) => { if (res.data.find((a) => a.name === "Config Invalid")) { - await this._context.octokit.issues.removeLabel( + await this._context.octokit.rest.issues.removeLabel( this._context.issue({ name: "Config Invalid" }) @@ -147,7 +147,7 @@ export default class PullRequestSynchronize { const configInvalid = this._context.issue({ body: `[tsconfig](${res.data.html_url}) need [*noImplicitAny*, *noImplicitThis*, *strictFunctionTypes*, *strictNullChecks*] to true value` }); - await this._context.octokit.issues.createComment(configInvalid); + await this._context.octokit.rest.issues.createComment(configInvalid); } } else { return; diff --git a/src/class/push.ts b/src/class/push.ts index 73c3d9c..4471b2e 100644 --- a/src/class/push.ts +++ b/src/class/push.ts @@ -82,18 +82,18 @@ export default class Push { return; }); } - if (this._context.payload.repository.owner.login === "Muunatic") { - if (this._context.payload.sender.login === "Muunatic") { + if (this._context.payload.repository.owner?.login === "Muunatic") { + if (this._context.payload.sender?.login === "Muunatic") { await userActivity(); - await this._context.octokit.repos.getContent({ + await this._context.octokit.rest.repos.getContent({ owner: "Muunatic", repo: "Muunatic", path: "README.md", ref: "main" }).then(async (res) => { if ("sha" in res.data) { - const textcontent = `# ɢɪᴛʜᴜʙ sᴛᴀᴛs

\nUpdated ${new Date().toUTCString()} \n\n1. ${event1}\n2. ${event2}\n3. ${event3}\n4. ${event4}\n5. ${event5}`; - await this._context.octokit.repos.createOrUpdateFileContents({ + const textcontent = `# ɢɪᴛʜᴜʙ sᴛᴀᴛs

\nUpdated ${new Date().toUTCString()} \n\n1. ${event1}\n2. ${event2}\n3. ${event3}\n4. ${event4}\n5. ${event5}`; + await this._context.octokit.rest.repos.createOrUpdateFileContents({ content: Buffer.from(textcontent, "utf-8").toString("base64"), path: "README.md", message: "Update Readme.md", @@ -106,7 +106,7 @@ export default class Push { return; } }); - } else if (this._context.payload.sender.login === "typeslint-cli[bot]") { + } else if (this._context.payload.sender?.login === "typeslint-cli[bot]") { if (this._context.payload.repository.name === "Muunatic") { await octokit.rest.checks.create({ owner: "Muunatic", @@ -124,7 +124,7 @@ export default class Push { conclusion: "success", output: { title: "Update Activities ✔️", - summary: "@" + this._context.payload.sender.login + " README Update" + summary: "@" + this._context.payload.sender?.login + " README Update" } }); }); diff --git a/src/class/workflowCheck.ts b/src/class/workflowCheck.ts index 7fcd10d..7fe30d2 100644 --- a/src/class/workflowCheck.ts +++ b/src/class/workflowCheck.ts @@ -28,19 +28,19 @@ export default class WorkflowCheck { */ public async checkCI(): Promise { if (this._context.payload.workflow_run.conclusion === "failure") { - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.addLabels( this._context.issue({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, - issue_number: this._context.payload.workflow_run.pull_requests[0].number, + issue_number: this._context.payload.workflow_run.pull_requests[0]?.number, labels: ["CI Failed"] }) ); - await this._context.octokit.issues.createComment( + await this._context.octokit.rest.issues.createComment( this._context.issue({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, - issue_number: this._context.payload.workflow_run.pull_requests[0].number, + issue_number: this._context.payload.workflow_run.pull_requests[0]?.number, body: `CI build failed! for more information please review the [logs](${this._context.payload.workflow_run.html_url}).` }) ); @@ -63,13 +63,13 @@ export default class WorkflowCheck { const prsNumber = res.data.find((a) => a.head.sha === this._context.payload.workflow_run.head_sha)?.number as number; if (this._context.payload.workflow_run.conclusion === "success") { console.log(this._context.payload.repository.owner.login, this._context.payload.repository.name, prsNumber); - await this._context.octokit.pulls.get({ + await this._context.octokit.rest.pulls.get({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, pull_number: prsNumber }).then(async (res) => { if (res.data.labels.find((a) => a.name === "CI Failed")) { - await this._context.octokit.issues.removeLabel( + await this._context.octokit.rest.issues.removeLabel( this._context.issue({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, @@ -83,7 +83,7 @@ export default class WorkflowCheck { }); } else if (this._context.payload.workflow_run.conclusion === "failure") { console.log("CI Failure!"); - await this._context.octokit.issues.addLabels( + await this._context.octokit.rest.issues.addLabels( this._context.issue({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, @@ -91,7 +91,7 @@ export default class WorkflowCheck { labels: ["CI Failed"] }) ); - await this._context.octokit.issues.createComment( + await this._context.octokit.rest.issues.createComment( this._context.issue({ owner: this._context.payload.repository.owner.login, repo: this._context.payload.repository.name, diff --git a/src/index.ts b/src/index.ts index 743d956..a675a72 100644 --- a/src/index.ts +++ b/src/index.ts @@ -15,7 +15,7 @@ const octokit = new Octokit({ privateKey: process.env.PRIVATE_KEY, clientId: process.env.CLIENT_ID, clientSecret: process.env.CLIENT_SECRET, - installationId: 12345678 // env not working + installationId: process.env.INSTALLATION_ID } }); @@ -30,7 +30,7 @@ export default (app: Probot): void => { }); app.on("issue_comment.created", async (context): Promise => { - if (context.payload.comment.user.type === "User") { + if (context.payload.comment.user?.type === "User") { switch (context.payload.issue.user.type) { case "User": await new IssuesComment(context).userPRsComment(); @@ -67,7 +67,7 @@ export default (app: Probot): void => { app.on("pull_request_review.submitted", async (context): Promise => { if (context.payload.sender.type === "User") { - switch (context.payload.pull_request.user.type) { + switch (context.payload.pull_request.user?.type) { case "User": await new PullRequestReview(context).userPRs(); break; @@ -81,7 +81,7 @@ export default (app: Probot): void => { }); app.on("pull_request.synchronize", async (context): Promise => { - if (context.payload.pull_request.user.type === "User") { + if (context.payload.pull_request.user?.type === "User") { if (context.payload.repository.homepage === "https://github.com/Typeslint/github-AutoResponse") { await new PullRequestSynchronize(context).synchronizeCore(); } From 2a6f642f6c8ce8be03bb109a4f22e35d8d8361b5 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 8 Dec 2025 10:50:51 +0700 Subject: [PATCH 21/27] style: add semicolons --- src/structures/type.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/structures/type.ts b/src/structures/type.ts index 2d466df..447b114 100644 --- a/src/structures/type.ts +++ b/src/structures/type.ts @@ -1,10 +1,10 @@ export type GetUserData = { userData: UserDataInterface[]; -} +}; type UserDataInterface = { event: string; -} +}; export type GetEvent = { id: string; @@ -56,4 +56,4 @@ export type GetEvent = { public: boolean; created_at: string; }; -} +}; From 0fcd24afb5ac1a0cc14eb1e8d123556dcc29a3f9 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 8 Dec 2025 11:00:49 +0700 Subject: [PATCH 22/27] chore(deps): bump typescript and typescript linter --- package.json | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index ad15edf..bf0fc36 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeslint-cli", - "version": "3.0.1", + "version": "4.0.0", "type": "module", "private": true, "description": "GitHub Workflow Apps", @@ -26,11 +26,12 @@ "devDependencies": { "@octokit/auth-app": "^6.1.1", "@octokit/rest": "^20.1.1", - "@types/node": "^18.19.39", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "eslint": "^8.57.0", - "typescript": "5.3.3" + "@stylistic/eslint-plugin": "^5.6.1", + "@types/node": "^22.19.1", + "eslint": "^9.39.1", + "jiti": "^2.6.1", + "typescript": "~5.9.3", + "typescript-eslint": "^8.48.1" }, "engines": { "node": ">=18.19.0", From 5be7f76864decd4dfff6612f376bba72c41ea7be Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 9 Dec 2025 11:09:18 +0700 Subject: [PATCH 23/27] chore(env): add installation_id env --- .env.example | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 398c7da..24b97f6 100644 --- a/.env.example +++ b/.env.example @@ -5,4 +5,5 @@ APP_ID="" PRIVATE_KEY="" WEBHOOK_SECRET="" CLIENT_ID="" -CLIENT_SECRET="" \ No newline at end of file +CLIENT_SECRET="" +INSTALLATION_ID="" \ No newline at end of file From 5eb55bf498a19d93d86e0f84259b12d985a2bdbc Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 9 Dec 2025 11:10:21 +0700 Subject: [PATCH 24/27] chore(release): 4.0.0 Release --- package.json | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index bf0fc36..6db93e1 100644 --- a/package.json +++ b/package.json @@ -24,18 +24,16 @@ "smee-client": "^5.0.0" }, "devDependencies": { - "@octokit/auth-app": "^6.1.1", - "@octokit/rest": "^20.1.1", "@stylistic/eslint-plugin": "^5.6.1", - "@types/node": "^22.19.1", + "@types/node": "^22.19.2", "eslint": "^9.39.1", "jiti": "^2.6.1", "typescript": "~5.9.3", - "typescript-eslint": "^8.48.1" + "typescript-eslint": "^8.49.0" }, "engines": { - "node": ">=18.19.0", - "npm": ">=10.2.3" + "node": ">=22.21.1", + "npm": ">=10.9.4" }, "repository": { "type": "git", From 2a4b9ebf3d382e8e8b48b5e24a31f458694793cd Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 9 Dec 2025 11:44:19 +0700 Subject: [PATCH 25/27] chore(gitignore): ignore .cache and package-lock --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 5587554..0164fa8 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ npm-debug.log coverage lib dist +.vscode +package-lock.json +.cache From d34c57fbba808e0d487eb07c422ca1eedc84db8b Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 9 Dec 2025 11:45:11 +0700 Subject: [PATCH 26/27] build(CI): upgrade node and npm version --- .github/workflows/build.yml | 4 ++-- .github/workflows/lint.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 77a7abd..7fc3a5d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,7 +11,7 @@ jobs: runs-on: windows-latest strategy: matrix: - node-version: [20.19.0] + node-version: [22.21.1] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} @@ -19,7 +19,7 @@ jobs: with: node-version: ${{ matrix.node-version }} - name: Install npm - run: npm install npm@10.8.2 -g + run: npm install npm@10.9.4 -g - name: Install dependencies run: npm i - name: Run typescript compiler diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 7c93cd4..b062ba3 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -11,7 +11,7 @@ jobs: runs-on: windows-latest strategy: matrix: - node-version: [20.19.0] + node-version: [22.21.1] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} @@ -19,7 +19,7 @@ jobs: with: node-version: ${{ matrix.node-version }} - name: Install npm - run: npm install npm@10.8.2 -g + run: npm install npm@10.9.4 -g - name: Install dependencies run: npm i - name: Run lint From ff973b898beeb82c024c9fccb17755674772e480 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Wed, 4 Feb 2026 21:59:16 +0700 Subject: [PATCH 27/27] build(CI): upgrade node and npm --- .github/workflows/build.yml | 6 +++--- .github/workflows/lint.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 77a7abd..df343a9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,10 +8,10 @@ on: jobs: build: - runs-on: windows-latest + runs-on: ubuntu-22.04 strategy: matrix: - node-version: [20.19.0] + node-version: [22.21.1] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} @@ -19,7 +19,7 @@ jobs: with: node-version: ${{ matrix.node-version }} - name: Install npm - run: npm install npm@10.8.2 -g + run: npm install npm@10.9.4 -g - name: Install dependencies run: npm i - name: Run typescript compiler diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 7c93cd4..db168be 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -8,10 +8,10 @@ on: jobs: lint: - runs-on: windows-latest + runs-on: ubuntu-22.04 strategy: matrix: - node-version: [20.19.0] + node-version: [22.21.1] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} @@ -19,7 +19,7 @@ jobs: with: node-version: ${{ matrix.node-version }} - name: Install npm - run: npm install npm@10.8.2 -g + run: npm install npm@10.9.4 -g - name: Install dependencies run: npm i - name: Run lint