From f475a8c572109cc34fdebc33f7c8b9dce1a969b4 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 20 Feb 2024 12:31:54 +0700 Subject: [PATCH 01/15] docs: update license type to ISC --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2f6e9c0..179f81a 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,10 @@ This GitHub Automaton is a Probot-based application that automates various actio Environment Variables To use this application, set the following environment variables in a .env file: -APP_ID: Your GitHub App's ID. -PRIVATE_KEY: Your GitHub App's private key. -CLIENT_ID: Your GitHub App's client ID. -CLIENT_SECRET: Your GitHub App's client secret. +- APP_ID: Your GitHub App's ID. +- PRIVATE_KEY: Your GitHub App's private key. +- CLIENT_ID: Your GitHub App's client ID. +- CLIENT_SECRET: Your GitHub App's client secret. ## Usage To use this application, install the dependencies and configure the environment variables. Run the application using the appropriate command `npm run build:start`. @@ -24,4 +24,4 @@ To use this application, install the dependencies and configure the environment Contributions are welcome! Please see this **Contribution Guide** and adhere to **Code Of Conduct**. If you have any improvements, feel free to submit a pull request. ## License -This project is licensed under the MIT License. +This project is licensed under the ISC License. From 8eee5b90abbfc010c8ea5831f0acb640575229f8 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 27 Feb 2024 22:03:57 +0700 Subject: [PATCH 02/15] build: upgrade checkout and setup-node --- .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 37b1d58..5f845f1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,9 +13,9 @@ jobs: matrix: node-version: [18.19.0] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - name: Install npm diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 3fa1a52..4570ad8 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -13,9 +13,9 @@ jobs: matrix: node-version: [18.19.0] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - name: Install npm From 4fb62be8669e0a6230b8a12caa6c9b87ddde5231 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 27 Feb 2024 22:07:52 +0700 Subject: [PATCH 03/15] build: change branches to development --- .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 5f845f1..420a608 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,9 +2,9 @@ name: Run TypeScript Compiler on: push: - branches: [ develop ] + branches: [ development ] pull_request: - branches: [ develop ] + branches: [ development ] jobs: lint: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 4570ad8..5cf876e 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -2,9 +2,9 @@ name: Run ESLint Linter on: push: - branches: [ develop ] + branches: [ development ] pull_request: - branches: [ develop ] + branches: [ development ] jobs: lint: From 225b9eed3faf1e5e2991fad00872c33950033eb7 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Fri, 1 Mar 2024 15:32:46 +0700 Subject: [PATCH 04/15] build: change jobs to build --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 420a608..3a23fd8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,7 +7,7 @@ on: branches: [ development ] jobs: - lint: + build: runs-on: windows-latest strategy: matrix: From 75457c5a8bc18569e092e3e72c87846064f6d111 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 12 Mar 2024 18:58:29 +0700 Subject: [PATCH 05/15] style: add parentheses in arrow functions --- src/class/prsOpen.ts | 4 ++-- src/class/prsReview.ts | 20 ++++++++++---------- src/class/prsSynchronize.ts | 8 ++++---- src/class/workflowCheck.ts | 2 +- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/class/prsOpen.ts b/src/class/prsOpen.ts index e663b28..a64cbe2 100644 --- a/src/class/prsOpen.ts +++ b/src/class/prsOpen.ts @@ -61,7 +61,7 @@ export default class PullRequestOpen { repo: "github-AutoResponse", pull_number: this.context.payload.number }).then(async (res) => { - const listFiles = res.data.map(a => a.filename); + const listFiles = res.data.map((a) => a.filename); for (let i = 0; i < listFiles.length; i++) { if (/src\/index/i.test(listFiles[i])) { fileLabels.push("Core"); @@ -79,7 +79,7 @@ export default class PullRequestOpen { } if (fileLabels.length > 0) { - new Set(fileLabels).forEach(a => filteredlabels.push(a)); + new Set(fileLabels).forEach((a) => filteredlabels.push(a)); await this.context.octokit.issues.addLabels( this.context.issue({ labels: filteredlabels diff --git a/src/class/prsReview.ts b/src/class/prsReview.ts index 8b538db..da984fa 100644 --- a/src/class/prsReview.ts +++ b/src/class/prsReview.ts @@ -37,7 +37,7 @@ export default class PullRequestReview { body: `@${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`, event: "COMMENT" }); - if (this.context.payload.pull_request.labels.find(a => a.name == "Requested Changes")) { + if (this.context.payload.pull_request.labels.find((a) => a.name == "Requested Changes")) { await this.context.octokit.issues.removeLabel( this.context.issue({ name: "Requested Changes" @@ -76,7 +76,7 @@ export default class PullRequestReview { body: `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!`, event: "COMMENT" }); - if (this.context.payload.pull_request.labels.find(a => a.name == "Approved")) { + if (this.context.payload.pull_request.labels.find((a) => a.name == "Approved")) { await this.context.octokit.issues.removeLabel( this.context.issue({ name: "Approved" @@ -117,7 +117,7 @@ export default class PullRequestReview { body: `@${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`, event: "COMMENT" }); - if (this.context.payload.pull_request.labels.find(a => a.name == "Requested Changes")) { + if (this.context.payload.pull_request.labels.find((a) => a.name == "Requested Changes")) { await this.context.octokit.issues.removeLabel( this.context.issue({ name: "Requested Changes" @@ -156,7 +156,7 @@ export default class PullRequestReview { body: `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!`, event: "COMMENT" }); - if (this.context.payload.pull_request.labels.find(a => a.name == "Approved")) { + if (this.context.payload.pull_request.labels.find((a) => a.name == "Approved")) { await this.context.octokit.issues.removeLabel( this.context.issue({ name: "Approved" @@ -198,7 +198,7 @@ export default class PullRequestReview { body: `@${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`, event: "COMMENT" }); - if (this.context.payload.pull_request.labels.find(a => a.name == "Requested Changes")) { + if (this.context.payload.pull_request.labels.find((a) => a.name == "Requested Changes")) { await this.context.octokit.issues.removeLabel( this.context.issue({ name: "Requested Changes" @@ -268,7 +268,7 @@ export default class PullRequestReview { body: `@${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}`, event: "COMMENT" }); - if (this.context.payload.pull_request.labels.find(a => a.name == "Requested Changes")) { + if (this.context.payload.pull_request.labels.find((a) => a.name == "Requested Changes")) { await this.context.octokit.issues.removeLabel( this.context.issue({ name: "Requested Changes" @@ -307,7 +307,7 @@ export default class PullRequestReview { body: `@${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!`, event: "COMMENT" }); - if (this.context.payload.pull_request.labels.find(a => a.name == "Approved")) { + if (this.context.payload.pull_request.labels.find((a) => a.name == "Approved")) { await this.context.octokit.issues.removeLabel( this.context.issue({ name: "Approved" @@ -348,7 +348,7 @@ export default class PullRequestReview { body: `@${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}`, event: "COMMENT" }); - if (this.context.payload.pull_request.labels.find(a => a.name == "Requested Changes")) { + if (this.context.payload.pull_request.labels.find((a) => a.name == "Requested Changes")) { await this.context.octokit.issues.removeLabel( this.context.issue({ name: "Requested Changes" @@ -387,7 +387,7 @@ export default class PullRequestReview { body: `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!`, event: "COMMENT" }); - if (this.context.payload.pull_request.labels.find(a => a.name == "Approved")) { + if (this.context.payload.pull_request.labels.find((a) => a.name == "Approved")) { await this.context.octokit.issues.removeLabel( this.context.issue({ name: "Approved" @@ -429,7 +429,7 @@ export default class PullRequestReview { body: `@${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`, event: "COMMENT" }); - if (this.context.payload.pull_request.labels.find(a => a.name == "Requested Changes")) { + if (this.context.payload.pull_request.labels.find((a) => a.name == "Requested Changes")) { await this.context.octokit.issues.removeLabel( this.context.issue({ name: "Requested Changes" diff --git a/src/class/prsSynchronize.ts b/src/class/prsSynchronize.ts index 2e02ca0..814e06b 100644 --- a/src/class/prsSynchronize.ts +++ b/src/class/prsSynchronize.ts @@ -33,7 +33,7 @@ export default class PullRequestSynchronize { 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; + 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, @@ -48,8 +48,8 @@ export default class PullRequestSynchronize { "CHANGES_REQUESTED", "APPROVED" ]; - if (res.data[i].state == datastate.find(a => a == res.data[i].state)) { - if (res.data[i].user?.login != reviewersArray.find(a => a == res.data[i].user?.login)) { + if (res.data[i].state == datastate.find((a) => a == res.data[i].state)) { + if (res.data[i].user?.login != reviewersArray.find((a) => a == res.data[i].user?.login)) { const username: string = res.data[i].user?.login || ""; reviewersArray.push(username); tagReviewers.push("@" + username); @@ -124,7 +124,7 @@ export default class PullRequestSynchronize { 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")) { + if (res.data.find((a) => a.name == "Config Invalid")) { await this.context.octokit.issues.removeLabel( this.context.issue({ name: "Config Invalid" diff --git a/src/class/workflowCheck.ts b/src/class/workflowCheck.ts index edda649..b802681 100644 --- a/src/class/workflowCheck.ts +++ b/src/class/workflowCheck.ts @@ -68,7 +68,7 @@ export default class WorkflowCheck { repo: this.context.payload.repository.name, pull_number: prsNumber }).then(async (res) => { - if (res.data.labels.find(a => a.name == "CI Failed")) { + 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, From d3824fbb48c858d616c327cb3654b5949adb27c9 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 12 Mar 2024 19:00:29 +0700 Subject: [PATCH 06/15] test(linter): add arrow-parens rules --- .eslintrc.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.json b/.eslintrc.json index 8a9f115..8be52d4 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -18,6 +18,7 @@ "@typescript-eslint" ], "rules": { + "arrow-parens": ["warn", "always"], "brace-style": ["warn", "1tbs"], "camelcase": ["warn", { "properties": "never", From c4b23f9ab23870eae582a303edfc8c20bf7ef52b Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 18 Mar 2024 18:47:45 +0700 Subject: [PATCH 07/15] refactor: createReview() function to reduce redundancy --- src/class/prsReview.ts | 464 +++++++---------------------------------- 1 file changed, 77 insertions(+), 387 deletions(-) diff --git a/src/class/prsReview.ts b/src/class/prsReview.ts index da984fa..8ac7663 100644 --- a/src/class/prsReview.ts +++ b/src/class/prsReview.ts @@ -23,6 +23,40 @@ export default class PullRequestReview { /** * @private + * @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, + body, + event: "COMMENT" + }); + + await this.context.octokit.issues.addLabels( + this.context.issue({ + labels: labels + }) + ); + + if (removeLabel) { + for (let i = 0; i < removeLabel.length; i++) { + await this.context.octokit.issues.removeLabel( + this.context.issue({ + name: removeLabel[i] + }) + ); + } + } + } + + /** + * @public * @async * @returns {Promise} */ @@ -30,230 +64,58 @@ export default class PullRequestReview { if (this.context.payload.sender.login == this.context.payload.repository.owner.login) { // Owner if (this.context.payload.review.state == "approved") { - 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: `@${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`, - event: "COMMENT" - }); + 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.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Requested Changes" - }) - ); - console.log("Label removed"); - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Approved"] - }) - ); - console.log("PRs Approved"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Approved"], ["Requested Changes", "Pending"]); } else { - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Approved"] - }) - ); - console.log("PRs Approved"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } } else if (this.context.payload.review.state == "changes_requested") { - 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: `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!`, - event: "COMMENT" - }); + 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.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Approved" - }) - ); - console.log("Label removed"); - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Requested Changes"] - }) - ); - console.log("PRs Requested Changes"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Requested Changes"] - }) - ); - console.log("PRs Requested Changes"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Requested Changes"], ["Pending"]); } } } else if (this.context.payload.pull_request.author_association == "MEMBER" || this.context.payload.pull_request.author_association == "COLLABORATOR") { if (this.context.payload.review.state == "approved") { - 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: `@${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`, - event: "COMMENT" - }); + 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.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Requested Changes" - }) - ); - console.log("Label removed"); - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Approved"] - }) - ); - console.log("PRs Approved"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Approved"], ["Requested Changes", "Pending"]); } else { - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Approved"] - }) - ); - console.log("PRs Approved"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } } else if (this.context.payload.review.state == "changes_requested") { - 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: `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!`, - event: "COMMENT" - }); + 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.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Approved" - }) - ); - console.log("Label removed"); - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Requested Changes"] - }) - ); - console.log("PRs Requested Changes"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Requested Changes"] - }) - ); - console.log("PRs Requested Changes"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Requested Changes"], ["Pending"]); } } } else { // Others Approved if (this.context.payload.review.state == "approved") { - 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: `@${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`, - event: "COMMENT" - }); + 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.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Requested Changes" - }) - ); - console.log("Label removed"); - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Others Approved"] - }) - ); - console.log("PRs Approved"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Others Approved"], ["Requested Changes", "Pending"]); } else { - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Others Approved"] - }) - ); - console.log("PRs Approved"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Others Approved"], ["Pending"]); } } else if (this.context.payload.review.state == "changes_requested") { - 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: `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!`, - event: "COMMENT" - }); - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Requested Changes"] - }) - ); - console.log("PRs Requested Changes"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + 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"]); + } } } } /** - * @private + * @public * @async * @returns {Promise} */ @@ -261,224 +123,52 @@ export default class PullRequestReview { if (this.context.payload.sender.login == this.context.payload.repository.owner.login) { // Owner if (this.context.payload.review.state == "approved") { - 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: `@${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}`, - event: "COMMENT" - }); + 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.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Requested Changes" - }) - ); - console.log("Label removed"); - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Approved"] - }) - ); - console.log("PRs Approved"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Approved"], ["Requested Changes", "Pending"]); } else { - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Approved"] - }) - ); - console.log("PRs Approved"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } } else if (this.context.payload.review.state == "changes_requested") { - 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: `@${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!`, - event: "COMMENT" - }); + 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!`; if (this.context.payload.pull_request.labels.find((a) => a.name == "Approved")) { - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Approved" - }) - ); - console.log("Label removed"); - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Requested Changes"] - }) - ); - console.log("PRs Requested Changes"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Requested Changes"] - }) - ); - console.log("PRs Requested Changes"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Requested Changes"], ["Pending"]); } } } else if (this.context.payload.pull_request.author_association == "MEMBER" || this.context.payload.pull_request.author_association == "COLLABORATOR") { if (this.context.payload.review.state == "approved") { - 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: `@${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}`, - event: "COMMENT" - }); + 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.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Requested Changes" - }) - ); - console.log("Label removed"); - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Approved"] - }) - ); - console.log("PRs Approved"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Approved"], ["Requested Changes", "Pending"]); } else { - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Approved"] - }) - ); - console.log("PRs Approved"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Approved"], ["Pending"]); } } else if (this.context.payload.review.state == "changes_requested") { - 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: `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!`, - event: "COMMENT" - }); + 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!`; if (this.context.payload.pull_request.labels.find((a) => a.name == "Approved")) { - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Approved" - }) - ); - console.log("Label removed"); - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Requested Changes"] - }) - ); - console.log("PRs Requested Changes"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Requested Changes"], ["Approved", "Pending"]); } else { - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Requested Changes"] - }) - ); - console.log("PRs Requested Changes"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Requested Changes"], ["Pending"]); } } } else { // Others Approved if (this.context.payload.review.state == "approved") { - 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: `@${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`, - event: "COMMENT" - }); + 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.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Requested Changes" - }) - ); - console.log("Label removed"); - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Others Approved"] - }) - ); - console.log("PRs Approved"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Others Approved"], ["Requested Changes", "Pending"]); } else { - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Others Approved"] - }) - ); - console.log("PRs Approved"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + await this.createReview(reviewMessage, ["Others Approved"], ["Pending"]); } } else if (this.context.payload.review.state == "changes_requested") { - 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: `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!`, - event: "COMMENT" - }); - await this.context.octokit.issues.addLabels( - this.context.issue({ - labels: ["Requested Changes"] - }) - ); - console.log("PRs Requested Changes"); - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: "Pending" - }) - ); + 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"]); + } } } } From ebc631c39f43caf93e14daa9d04f0c4b04eef1c7 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Wed, 3 Apr 2024 16:30:04 +0700 Subject: [PATCH 08/15] refactor: removeLabel using forEach --- src/class/prsReview.ts | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/class/prsReview.ts b/src/class/prsReview.ts index 8ac7663..f3b2c46 100644 --- a/src/class/prsReview.ts +++ b/src/class/prsReview.ts @@ -6,7 +6,6 @@ import Context from "../index"; * @exports */ export default class PullRequestReview { - /** * @private * @type Context<"pull_request_review.submitted"> @@ -34,7 +33,7 @@ export default class PullRequestReview { repo: this.context.payload.repository.name, owner: this.context.payload.repository.owner.login, pull_number: this.context.payload.pull_request.number, - body, + body: body, event: "COMMENT" }); @@ -45,13 +44,21 @@ export default class PullRequestReview { ); if (removeLabel) { - for (let i = 0; i < removeLabel.length; i++) { - await this.context.octokit.issues.removeLabel( - this.context.issue({ - name: removeLabel[i] - }) - ); - } + removeLabel.forEach((label) => { + new Promise((resolve, reject) => { + this.context.octokit.issues.removeLabel( + this.context.issue({ + name: label + }) + ).then(() => { + resolve(); + }).catch((err) => { + reject(err); + }); + }).catch((err) => { + console.error(err); + }); + }); } } @@ -172,5 +179,4 @@ export default class PullRequestReview { } } } - } From 9c4eb0d328723f796bebfca049ca59a863d49119 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Thu, 18 Apr 2024 22:21:45 +0700 Subject: [PATCH 09/15] feat: create comment for prs author --- src/class/prsSynchronize.ts | 45 ++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/src/class/prsSynchronize.ts b/src/class/prsSynchronize.ts index 814e06b..d29f221 100644 --- a/src/class/prsSynchronize.ts +++ b/src/class/prsSynchronize.ts @@ -33,7 +33,7 @@ export default class PullRequestSynchronize { 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; + 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, @@ -43,13 +43,13 @@ export default class PullRequestSynchronize { const reviewersArray: string[] = []; const tagReviewers: string[] = []; for (i = 0; i < res.data.length; i++) { - if (res.data[i].user?.type == "User") { + if (res.data[i].user?.type === "User") { const datastate: string[] = [ "CHANGES_REQUESTED", "APPROVED" ]; - if (res.data[i].state == datastate.find((a) => a == res.data[i].state)) { - if (res.data[i].user?.login != reviewersArray.find((a) => a == res.data[i].user?.login)) { + if (res.data[i].state === datastate.find((a) => a === res.data[i].state)) { + if (res.data[i].user?.login !== reviewersArray.find((a) => a === res.data[i].user?.login)) { const username: string = res.data[i].user?.login || ""; reviewersArray.push(username); tagReviewers.push("@" + username); @@ -76,19 +76,28 @@ export default class PullRequestSynchronize { continue; } } - 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({ - name: prsLabels - }) - ); + 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({ + name: prsLabels + }) + ); + } else { + await this.context.octokit.issues.removeLabel( + this.context.issue({ + name: prsLabels + }) + ); + return; + } }); } else { return; @@ -124,7 +133,7 @@ export default class PullRequestSynchronize { 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")) { + if (res.data.find((a) => a.name === "Config Invalid")) { await this.context.octokit.issues.removeLabel( this.context.issue({ name: "Config Invalid" From 7d40349eab88198bd9563790e94a1d0ae6cc57b0 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 23 Apr 2024 07:19:08 +0700 Subject: [PATCH 10/15] refactor: using strict equality operator check --- src/class/issuesComment.ts | 20 +++++++------- src/class/prsOpen.ts | 2 +- src/class/prsReview.ts | 56 +++++++++++++++++++------------------- src/class/prsStale.ts | 8 +++--- src/class/push.ts | 16 +++++------ src/class/workflowCheck.ts | 8 +++--- src/index.ts | 18 ++++++------ 7 files changed, 64 insertions(+), 64 deletions(-) diff --git a/src/class/issuesComment.ts b/src/class/issuesComment.ts index 804a242..7b30d1a 100644 --- a/src/class/issuesComment.ts +++ b/src/class/issuesComment.ts @@ -27,17 +27,17 @@ export default class IssuesComment { * @returns {Promise} */ public async userPRsComment(): Promise { - if (this.context.payload.comment.body.toLowerCase() == "ready to merge") { + 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 (res.data.mergeable_state.toLowerCase() === "clean" || res.data.mergeable === true) { + 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") { + if (this.context.payload.issue.labels[i].name === "Approved") { console.log("Merging"); await this.context.octokit.pulls.merge({ repo: this.context.payload.repository.name, @@ -53,7 +53,7 @@ export default class IssuesComment { }) ); 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({ @@ -68,7 +68,7 @@ export default class IssuesComment { } else { return; } - } else if (res.data.mergeable_state.toLowerCase() == "dirty" || res.data.mergeable == false) { + } 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}` @@ -84,8 +84,8 @@ export default class IssuesComment { }); } - if (this.context.payload.comment.body.toLowerCase() == "merge") { - if (this.context.payload.sender.login == this.context.payload.repository.owner.login) { + 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, @@ -140,8 +140,8 @@ 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) { + 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, diff --git a/src/class/prsOpen.ts b/src/class/prsOpen.ts index a64cbe2..449823b 100644 --- a/src/class/prsOpen.ts +++ b/src/class/prsOpen.ts @@ -98,7 +98,7 @@ export default class PullRequestOpen { */ public async open(): 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) { 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` }); diff --git a/src/class/prsReview.ts b/src/class/prsReview.ts index f3b2c46..617a213 100644 --- a/src/class/prsReview.ts +++ b/src/class/prsReview.ts @@ -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") { + 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.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") { + } 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")) { + 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.pull_request.author_association == "MEMBER" || this.context.payload.pull_request.author_association == "COLLABORATOR") { - if (this.context.payload.review.state == "approved") { + } else if (this.context.payload.pull_request.author_association === "MEMBER" || this.context.payload.pull_request.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")) { + 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") { + } 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")) { + 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") { + 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.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") { + } 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")) { + 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,34 +127,34 @@ export default class PullRequestReview { * @returns {Promise} */ public async botPRs(): 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") { + 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.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") { + } 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!`; - if (this.context.payload.pull_request.labels.find((a) => a.name == "Approved")) { + 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.pull_request.author_association == "MEMBER" || this.context.payload.pull_request.author_association == "COLLABORATOR") { - if (this.context.payload.review.state == "approved") { + } else if (this.context.payload.pull_request.author_association === "MEMBER" || this.context.payload.pull_request.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")) { + 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") { + } 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!`; - if (this.context.payload.pull_request.labels.find((a) => a.name == "Approved")) { + 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"]); @@ -162,16 +162,16 @@ export default class PullRequestReview { } } else { // Others Approved - if (this.context.payload.review.state == "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.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") { + } 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")) { + 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 a7b9712..e48a851 100644 --- a/src/class/prsStale.ts +++ b/src/class/prsStale.ts @@ -34,8 +34,8 @@ export default class PRsStale { const currentRepo = res.data[i].base.repo.name; const currentOwner = res.data[i].base.repo.owner.login; const currentPRs = res.data[i].number; - if (res.data[i].state.toLowerCase() == "open" && res.data[i].draft == false) { - if (res.data[i].user?.type.toLowerCase() == "user") { + if (res.data[i].state.toLowerCase() === "open" && res.data[i].draft === false) { + if (res.data[i].user?.type.toLowerCase() === "user") { await octokit.rest.pulls.listCommits({ owner: currentOwner, repo: currentRepo, @@ -53,7 +53,7 @@ export default class PRsStale { pull_number: currentPRs, state: "closed" }).then(async (res) => { - if (res.data.labels.find((a) => a.name == "Stale")) { + if (res.data.labels.find((a) => a.name === "Stale")) { await octokit.rest.issues.addLabels({ owner: res.data.base.repo.owner.login, repo: res.data.base.repo.name, @@ -88,7 +88,7 @@ export default class PRsStale { repo: currentRepo, pull_number: currentPRs }).then(async (res) => { - if (res.data.labels.find((a) => a.name == "Stale")) { + if (res.data.labels.find((a) => a.name === "Stale")) { return; } else { const prsReviewers: string[] = []; diff --git a/src/class/push.ts b/src/class/push.ts index 1079cbc..78bf164 100644 --- a/src/class/push.ts +++ b/src/class/push.ts @@ -47,11 +47,11 @@ export default class Push { }).then((res: [getEvent]) => { let i: number; for (i = 0; i < res.length; i++) { - if (res[i].type == "PushEvent") { + if (res[i].type === "PushEvent") { if (arrayActivity.userData.length < 5) { let commitsI: number; for (commitsI = 0; commitsI < res[i].payload.commits.length; commitsI++) { - if (res[i].payload.commits[commitsI].author.name == "Muunatic") { + if (res[i].payload.commits[commitsI].author.name === "Muunatic") { if (arrayActivity.userData.length < 5) { arrayActivity.userData.push({ event: `Commit on [${res[i].payload.commits[commitsI].sha.slice(0, 7)}](https://github.com/${res[i].repo.name}/commit/${res[i].payload.commits[commitsI].sha}) in [${res[i].repo.name}](https://github.com/${res[i].repo.name})` }); } else { @@ -64,9 +64,9 @@ export default class Push { } else { break; } - } else if (res[i].type == "PullRequestEvent") { + } else if (res[i].type === "PullRequestEvent") { if (arrayActivity.userData.length < 5) { - if (res[i].payload.pull_request.user.login == "Muunatic") { + if (res[i].payload.pull_request.user.login === "Muunatic") { arrayActivity.userData.push({ event: `Pull Request on [\#${res[i].payload.pull_request.number.toString()}](https://github.com/${res[i].repo.name}/pull/${res[i].payload.pull_request.number}) in [${res[i].repo.name}](https://github.com/${res[i].repo.name})` }); } else { continue; @@ -82,8 +82,8 @@ 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({ owner: "Muunatic", @@ -106,8 +106,8 @@ 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", diff --git a/src/class/workflowCheck.ts b/src/class/workflowCheck.ts index b802681..2daf35d 100644 --- a/src/class/workflowCheck.ts +++ b/src/class/workflowCheck.ts @@ -27,7 +27,7 @@ export default class WorkflowCheck { * @returns {Promise} */ public async checkCI(): Promise { - if (this.context.payload.workflow_run.conclusion == "failure") { + if (this.context.payload.workflow_run.conclusion === "failure") { await this.context.octokit.issues.addLabels( this.context.issue({ owner: this.context.payload.repository.owner.login, @@ -62,13 +62,13 @@ export default class WorkflowCheck { 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") { + 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, pull_number: prsNumber }).then(async (res) => { - if (res.data.labels.find((a) => a.name == "CI Failed")) { + 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, @@ -82,7 +82,7 @@ export default class WorkflowCheck { 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({ diff --git a/src/index.ts b/src/index.ts index ca6ad48..0e327ce 100644 --- a/src/index.ts +++ b/src/index.ts @@ -30,7 +30,7 @@ module.exports = (app: Probot) => { }); 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(); @@ -45,7 +45,7 @@ module.exports = (app: Probot) => { }); app.on("issues.closed", async (context): Promise => { - if (context.payload.issue.state_reason == "not_planned") { + if (context.payload.issue.state_reason === "not_planned") { await new IssuesClose(context).invalid(); } else { await new IssuesClose(context).closed(); @@ -53,8 +53,8 @@ module.exports = (app: Probot) => { }); app.on("pull_request.opened", async (context): Promise => { - if (context.payload.sender.type == "User") { - if (context.payload.repository.html_url == "https://github.com/Typeslint/github-AutoResponse") { + if (context.payload.sender.type === "User") { + if (context.payload.repository.html_url === "https://github.com/Typeslint/github-AutoResponse") { await new PullRequestOpen(context).openCore(); } else { await new PullRequestOpen(context).open(); @@ -65,7 +65,7 @@ module.exports = (app: Probot) => { }); app.on("pull_request_review.submitted", async (context): Promise => { - if (context.payload.sender.type == "User") { + if (context.payload.sender.type === "User") { switch (context.payload.pull_request.user.type) { case "User": await new PullRequestReview(context).userPRs(); @@ -80,8 +80,8 @@ module.exports = (app: Probot) => { }); app.on("pull_request.synchronize", async (context): Promise => { - if (context.payload.pull_request.user.type == "User") { - if (context.payload.repository.homepage == "https://github.com/Typeslint/github-AutoResponse") { + if (context.payload.pull_request.user.type === "User") { + if (context.payload.repository.homepage === "https://github.com/Typeslint/github-AutoResponse") { await new PullRequestSynchronize(context).synchronizeCore(); } await new PullRequestSynchronize(context).sync(); @@ -91,8 +91,8 @@ module.exports = (app: Probot) => { }); app.on("workflow_run.completed", async (context): Promise => { - if (context.payload.workflow_run.event == "pull_request") { - if (context.payload.sender.type == "User") { + if (context.payload.workflow_run.event === "pull_request") { + if (context.payload.sender.type === "User") { await new WorkflowCheck(context).checkUserCI(); } else { await new WorkflowCheck(context).checkCI(); From 233d35fa7efbaa1e2b2078e59c4fa60826dfb643 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Tue, 23 Apr 2024 07:19:17 +0700 Subject: [PATCH 11/15] test(linter): add eqeqeq and object-shorthand rules --- .eslintrc.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.eslintrc.json b/.eslintrc.json index 8be52d4..0948fef 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -33,6 +33,7 @@ "curly": ["error", "all"], "default-case": 1, "eol-last": ["warn", "always"], + "eqeqeq": ["error", "smart"], "indent": ["warn", 4, { "SwitchCase": 1 }], @@ -55,6 +56,7 @@ "objectsInObjects": true, "arraysInObjects": true }], + "object-shorthand": ["warn", "consistent"], "quotes": ["warn", "double", { "avoidEscape": false }], From 37d02cf8551f755965304d5eb08739501b7e918e Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 10 Jun 2024 09:58:06 +0700 Subject: [PATCH 12/15] fix(prsReview): adjust author_association payload --- 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 617a213..f8a7f29 100644 --- a/src/class/prsReview.ts +++ b/src/class/prsReview.ts @@ -85,7 +85,7 @@ export default class PullRequestReview { await this.createReview(reviewMessage, ["Requested Changes"], ["Pending"]); } } - } else if (this.context.payload.pull_request.author_association === "MEMBER" || this.context.payload.pull_request.author_association === "COLLABORATOR") { + } 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")) { @@ -144,7 +144,7 @@ export default class PullRequestReview { await this.createReview(reviewMessage, ["Requested Changes"], ["Pending"]); } } - } else if (this.context.payload.pull_request.author_association === "MEMBER" || this.context.payload.pull_request.author_association === "COLLABORATOR") { + } 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")) { From 7e9df0c344c66c031776b93b49ac6c1b3717a2fa Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 8 Jul 2024 07:13:12 +0700 Subject: [PATCH 13/15] chore: rename env to .env --- env.example => .env.example | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename env.example => .env.example (100%) diff --git a/env.example b/.env.example similarity index 100% rename from env.example rename to .env.example From 07fffb23f509eb31afe9916b1c1b6896e2fdaa9d Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 8 Jul 2024 07:15:45 +0700 Subject: [PATCH 14/15] feat(env): add CLIENT_ID and CLIENT_SECRET --- .env.example | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 696edf8..398c7da 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,8 @@ # Recommended to run npm start first! -WEBHOOK_PROXY_URL= -APP_ID= +WEBHOOK_PROXY_URL="" +APP_ID="" PRIVATE_KEY="" -WEBHOOK_SECRET= \ No newline at end of file +WEBHOOK_SECRET="" +CLIENT_ID="" +CLIENT_SECRET="" \ No newline at end of file From 959391676d0edc4f7c121b437ce7e22577655898 Mon Sep 17 00:00:00 2001 From: Muunatic Date: Mon, 8 Jul 2024 07:22:57 +0700 Subject: [PATCH 15/15] chore(release): 3.0.1 Release --- package-lock.json | 646 ++++++++++++++++++++++++++++++---------------- package.json | 22 +- 2 files changed, 433 insertions(+), 235 deletions(-) diff --git a/package-lock.json b/package-lock.json index e59d190..3361727 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,26 +1,26 @@ { "name": "typeslint-cli", - "version": "3.0.0", + "version": "3.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "typeslint-cli", - "version": "3.0.0", + "version": "3.0.1", "license": "ISC", "dependencies": { - "dotenv": "^16.3.1", - "octokit": "^3.1.2", - "probot": "^12.3.3", - "smee-client": "^2.0.0" + "dotenv": "^16.4.5", + "octokit": "^3.2.1", + "probot": "^12.4.0", + "smee-client": "^2.0.1" }, "devDependencies": { - "@octokit/auth-app": "^6.0.2", - "@octokit/rest": "^20.0.2", - "@types/node": "^18.19.3", - "@typescript-eslint/eslint-plugin": "^6.16.0", - "@typescript-eslint/parser": "^6.16.0", - "eslint": "^8.56.0", + "@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": { @@ -107,9 +107,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "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" @@ -121,13 +121,13 @@ "integrity": "sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q==" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "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.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -170,9 +170,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "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": { @@ -228,33 +228,46 @@ } }, "node_modules/@octokit/auth-app": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-6.0.2.tgz", - "integrity": "sha512-HYuRX3Fvhs2y9i7a4F8f+A5HWfacRWmpERHGBEOtgvKVjJkOQZKUY2v6HiSszYecHAF8Ojqngp2iraSP3SvNpQ==", - "dependencies": { - "@octokit/auth-oauth-app": "^7.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "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.1", + "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.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-7.0.1.tgz", - "integrity": "sha512-RE0KK0DCjCHXHlQBoubwlLijXEKfhMhKm9gO56xYvFmP1QTMb+vvwRPmQLLx0V+5AvV9N9I3lr1WyTzwL3rMDg==", + "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.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^12.0.0", + "@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" @@ -263,29 +276,55 @@ "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.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-6.0.1.tgz", - "integrity": "sha512-yxU0rkL65QkjbqQedgVx3gmW7YM5fF+r5uaSj9tM/cQGVqloXcqP2xK90eTyYvl29arFVCW8Vz4H/t47mL0ELw==", + "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.0.0", - "@octokit/request": "^8.0.0", - "@octokit/types": "^12.0.0", + "@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.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-4.0.1.tgz", - "integrity": "sha512-N94wWW09d0hleCnrO5wt5MxekatqEJ4zf+1vSe8MKMrhZ7gAXKFOKrDEZW2INltvBWJCyDUELgGRv8gfErH1Iw==", + "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.0.0", - "@octokit/oauth-methods": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^12.0.0", + "@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" }, @@ -293,6 +332,19 @@ "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", @@ -382,20 +434,33 @@ } }, "node_modules/@octokit/oauth-methods": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-4.0.1.tgz", - "integrity": "sha512-1NdTGCoBHyD6J0n2WGXg9+yDLZrRNZ0moTEex/LSPr49m530WNKcCfXDghofYptr3st3eTii+EHoG5k/o+vbtw==", + "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.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "@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", @@ -471,17 +536,30 @@ } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.2.0.tgz", - "integrity": "sha512-ePbgBMYtGoRNXDyKGvr9cyHjQ163PbwD0y1MkDJCpkO2YH4OeXX40c4wYHKikHGZcpGPbcRLuy0unPUuafco8Q==", + "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": "^12.3.0" + "@octokit/types": "^13.5.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@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": { @@ -516,13 +594,13 @@ } }, "node_modules/@octokit/request": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.6.tgz", - "integrity": "sha512-YhPaGml3ncZC1NfXpP3WZ7iliL1ap6tLkAp6MvbK2fTTPytzVUyUesBBogcdMm86uRYO5rHaM1xIWxigWZ17MQ==", + "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.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -530,11 +608,11 @@ } }, "node_modules/@octokit/request-error": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", - "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "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": "^12.0.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, @@ -542,19 +620,75 @@ "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.0.2", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.0.2.tgz", - "integrity": "sha512-Ux8NDgEraQ/DMAU1PlAohyfBBXDwhnX2j33Z1nJNziqAfHi70PuxkFYIcIt8aIAxtRE7KVuKp8lSR8pA0J5iOQ==", + "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.0", - "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/core": "^5.0.2", + "@octokit/plugin-paginate-rest": "11.3.1", "@octokit/plugin-request-log": "^4.0.0", - "@octokit/plugin-rest-endpoint-methods": "^10.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": { @@ -790,9 +924,9 @@ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "node_modules/@types/node": { - "version": "18.19.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", - "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", + "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" } @@ -845,9 +979,9 @@ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "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": { @@ -870,16 +1004,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.16.0.tgz", - "integrity": "sha512-O5f7Kv5o4dLWQtPX4ywPPa+v9G+1q1x8mz0Kr0pXUtKsevo+gIJHLkGc8RxaZWtP8RrhwhSNIWThnW42K9/0rQ==", + "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.16.0", - "@typescript-eslint/type-utils": "6.16.0", - "@typescript-eslint/utils": "6.16.0", - "@typescript-eslint/visitor-keys": "6.16.0", + "@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", @@ -905,15 +1039,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.16.0.tgz", - "integrity": "sha512-H2GM3eUo12HpKZU9njig3DF5zJ58ja6ahj1GoHEHOgQvYxzoFJJEvC1MQ7T2l9Ha+69ZSOn7RTxOdpC/y3ikMw==", + "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.16.0", - "@typescript-eslint/types": "6.16.0", - "@typescript-eslint/typescript-estree": "6.16.0", - "@typescript-eslint/visitor-keys": "6.16.0", + "@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": { @@ -933,13 +1067,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.16.0.tgz", - "integrity": "sha512-0N7Y9DSPdaBQ3sqSCwlrm9zJwkpOuc6HYm7LpzLAPqBL7dmzAUimr4M29dMkOP/tEwvOCC/Cxo//yOfJD3HUiw==", + "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.16.0", - "@typescript-eslint/visitor-keys": "6.16.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -950,13 +1084,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.16.0.tgz", - "integrity": "sha512-ThmrEOcARmOnoyQfYkHw/DX2SEYBalVECmoldVuH6qagKROp/jMnfXpAU/pAIWub9c4YTxga+XwgAkoA0pxfmg==", + "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.16.0", - "@typescript-eslint/utils": "6.16.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -977,9 +1111,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.16.0.tgz", - "integrity": "sha512-hvDFpLEvTJoHutVl87+MG/c5C8I6LOgEx05zExTSJDEVU7hhR3jhV8M5zuggbdFCw98+HhZWPHZeKS97kS3JoQ==", + "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" @@ -990,13 +1124,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.16.0.tgz", - "integrity": "sha512-VTWZuixh/vr7nih6CfrdpmFNLEnoVBF1skfjdyGnNwXOH1SLeHItGdZDHhhAIzd3ACazyY2Fg76zuzOVTaknGA==", + "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.16.0", - "@typescript-eslint/visitor-keys": "6.16.0", + "@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", @@ -1018,17 +1152,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.16.0.tgz", - "integrity": "sha512-T83QPKrBm6n//q9mv7oiSvy/Xq/7Hyw9SzSEhMHJwznEmQayfBM87+oAlkNAMEO7/MjIwKyOHgBJbxB0s7gx2A==", + "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.16.0", - "@typescript-eslint/types": "6.16.0", - "@typescript-eslint/typescript-estree": "6.16.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": { @@ -1043,12 +1177,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.16.0.tgz", - "integrity": "sha512-QSFQLruk7fhs91a/Ep/LqRdbJCZ1Rq03rqBdKT5Ky17Sz8zRLUksqIe9DW0pKtg/Z35/ztbLQ6qpOCN6rOC11A==", + "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.16.0", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -1277,12 +1411,12 @@ "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "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.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -1290,7 +1424,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -1326,12 +1460,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "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.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -1356,13 +1490,18 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "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.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1539,16 +1678,19 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "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": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "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": { @@ -1606,14 +1748,14 @@ } }, "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "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://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/ecdsa-sig-formatter": { @@ -1653,6 +1795,25 @@ "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", @@ -1671,16 +1832,16 @@ } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "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.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@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", @@ -1863,16 +2024,16 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "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.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -1917,9 +2078,9 @@ } }, "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -2026,9 +2187,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "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" @@ -2138,15 +2299,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "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" } @@ -2279,20 +2444,20 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "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": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "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" }, @@ -2901,20 +3066,20 @@ } }, "node_modules/octokit": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-3.1.2.tgz", - "integrity": "sha512-MG5qmrTL5y8KYwFgE1A4JWmgfQBaIETE/lOlfwNYx1QOtCQHGVxkRJmdUJltFc1HVn73d61TlMhMyNTOtMl+ng==", + "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": "^9.0.0", - "@octokit/plugin-rest-endpoint-methods": "^10.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": "^12.0.0" + "@octokit/types": "^13.0.0" }, "engines": { "node": ">= 18" @@ -3223,6 +3388,33 @@ "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", @@ -3562,11 +3754,11 @@ } }, "node_modules/probot": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/probot/-/probot-12.3.3.tgz", - "integrity": "sha512-cdtKd+xISzi8sw6++BYBXleRknCA6hqUMoHj/sJqQBrjbNxQLhfeFCq9O2d0Z4eShsy5YFRR3MWwDKJ9uAE0CA==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/probot/-/probot-12.4.0.tgz", + "integrity": "sha512-DbW4ME9rzGVwnsFjoWWxKtRvnxPlFaCg726ge1sYHwZ3UzMlcF3B8Qf7MptfhGRyFw8sSCqsbgzb0E5d/BrQEA==", "dependencies": { - "@octokit/core": "^3.2.4", + "@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", @@ -3591,8 +3783,8 @@ "ioredis": "^4.27.8", "js-yaml": "^3.14.1", "lru-cache": "^6.0.0", - "octokit-auth-probot": "^1.2.2", - "pino": "^6.7.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", @@ -3998,9 +4190,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "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", @@ -4193,9 +4385,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "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" }, @@ -4273,14 +4465,16 @@ } }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "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.1", - "get-intrinsic": "^1.2.1", + "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.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4313,13 +4507,17 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "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.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "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" @@ -4335,11 +4533,11 @@ } }, "node_modules/smee-client": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/smee-client/-/smee-client-2.0.0.tgz", - "integrity": "sha512-LqJAAU4uayG909u8q3lBQZma9TDsQl2pOoXCqrsAda58oxy2o81yQAeBvFc2ilexgQDJc3YPDoPgViBM26M8vw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/smee-client/-/smee-client-2.0.1.tgz", + "integrity": "sha512-s2+eG9vNMWQQvu8Jz+SfAiihpYsmaMtcyPnHtBuZEhaAAQOQV63xSSL9StWv2p08xKgvSC8pEZ28rXoy41FhLg==", "dependencies": { - "commander": "^11.1.0", + "commander": "^12.0.0", "eventsource": "^2.0.2", "validator": "^13.11.0" }, @@ -4348,11 +4546,11 @@ } }, "node_modules/smee-client/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "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": ">=16" + "node": ">=18" } }, "node_modules/sonic-boom": { @@ -4491,12 +4689,12 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "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.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" @@ -4574,12 +4772,12 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/universal-github-app-jwt": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", + "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.0" + "jsonwebtoken": "^9.0.2" } }, "node_modules/universal-user-agent": { diff --git a/package.json b/package.json index 1f8a22f..67e2010 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeslint-cli", - "version": "3.0.0", + "version": "3.0.1", "private": true, "description": "GitHub Workflow Apps", "homepage": "https://typeslint.com/github-autoresponse", @@ -15,18 +15,18 @@ "lint:fix": "npx eslint src/**/*.ts --fix" }, "dependencies": { - "dotenv": "^16.3.1", - "octokit": "^3.1.2", - "probot": "^12.3.3", - "smee-client": "^2.0.0" + "dotenv": "^16.4.5", + "octokit": "^3.2.1", + "probot": "^12.4.0", + "smee-client": "^2.0.1" }, "devDependencies": { - "@octokit/auth-app": "^6.0.2", - "@octokit/rest": "^20.0.2", - "@types/node": "^18.19.3", - "@typescript-eslint/eslint-plugin": "^6.16.0", - "@typescript-eslint/parser": "^6.16.0", - "eslint": "^8.56.0", + "@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": {