From 5264aea6ca3dc851aadee3a80abe9c6f8ac048b6 Mon Sep 17 00:00:00 2001 From: yousefhindy Date: Tue, 15 Oct 2024 14:57:36 -0700 Subject: [PATCH] add test file --- package.json | 7 +-- src/main.ts | 114 ++++++++++++++++++++++++------------------- src/test.ts | 38 +++++++++++++++ yarn.lock | 133 +++++++++++++++++++++++---------------------------- 4 files changed, 166 insertions(+), 126 deletions(-) create mode 100644 src/test.ts diff --git a/package.json b/package.json index 5ec57c8..c694e17 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,10 @@ }, "dependencies": { "@actions/core": "^1.10.0", - "@octokit/rest": "^19.0.7", - "minimatch": "^7.4.2", - "openai": "^4.20.1", + "@octokit/rest": "^19.0.13", + "dotenv": "^16.4.5", + "minimatch": "^7.4.6", + "openai": "^4.67.3", "parse-diff": "^0.11.1", "ts-node": "^10.9.1" }, diff --git a/src/main.ts b/src/main.ts index dd15608..3d25fd4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,12 +1,13 @@ import { readFileSync } from "fs"; + import * as core from "@actions/core"; import OpenAI from "openai"; import { Octokit } from "@octokit/rest"; import parseDiff, { Chunk, File } from "parse-diff"; import minimatch from "minimatch"; -const GITHUB_TOKEN: string = core.getInput("GITHUB_TOKEN"); -const OPENAI_API_KEY: string = core.getInput("OPENAI_API_KEY"); +const GITHUB_TOKEN: string = core.getInput("GITHUB_TOKEN") || process.env.GITHUB_TOKEN || ""; +const OPENAI_API_KEY: string = core.getInput("OPENAI_API_KEY") || process.env.OPENAI_API_KEY || ""; const OPENAI_API_MODEL: string = core.getInput("OPENAI_API_MODEL"); const octokit = new Octokit({ auth: GITHUB_TOKEN }); @@ -24,7 +25,7 @@ interface PRDetails { } const MAX_LINES_TO_REVIEW: number = 250; -const INCLUDE_PATHS: string[] = core.getInput("INCLUDE_PATHS").split(",").map(p => p.trim()); +const INCLUDE_PATHS: string[] = (core.getInput("INCLUDE_PATHS") || process.env.INCLUDE_PATHS || "").split(",").map(p => p.trim()); async function getPRDetails(): Promise { try { @@ -89,11 +90,11 @@ async function getPRDetails(): Promise { } } -async function getDiff( +export async function getDiff( owner: string, repo: string, pull_number: number -): Promise { +): Promise { try { const response = await octokit.pulls.get({ owner, @@ -102,21 +103,63 @@ async function getDiff( mediaType: { format: "diff" }, }); - // Check if the response is a string (diff content) - if (typeof response.data === 'string') { - const diffContent = response.data; - console.log("Raw diff content sample:", diffContent); - return diffContent; - } else { - console.error("Unexpected response format. Expected string, got:", typeof response.data); + // Explicitly assert the type of response.data + const diffContent = response.data as unknown as string; + + if (typeof diffContent !== 'string') { + console.error("Unexpected response format. Expected string, got:", typeof diffContent); return null; } + + console.log("Raw diff content sample:", diffContent.substring(0, 200)); + + const parsedDiff = parseDiff(diffContent); + console.log("Parsed diff length:", parsedDiff.length); + + // Filter the diff to only include files that match the include paths + console.log("Filtering diff based on include paths:", INCLUDE_PATHS); + const filteredDiff = parsedDiff.filter(file => { + const matchesPattern = INCLUDE_PATHS.some(pattern => minimatch(file.to || "", pattern)); + console.log(`File ${file.to}: ${matchesPattern ? 'included' : 'excluded'}`); + return matchesPattern; + }); + console.log("Filtered diff files:", filteredDiff.map(file => file.to)); + console.log("Filtered diff length:", filteredDiff.length); + + // Log the string representation of the filtered diff + console.log("Filtered diff string:\n", diffToString(filteredDiff)); + + return filteredDiff; } catch (error) { console.error("Error fetching diff:", error); return null; } } +export function diffToString(files: File[]): string { + return files.map(fileToString).join('\n\n'); +} + +function fileToString(file: File): string { + const header = `diff --git a/${file.from} b/${file.to} +${file.index ? `index ${file.index}\n` : ''}${file.deleted ? '--- ' + file.from : ''} +${file.new ? '+++ ' + file.to : ''}`; + + const chunks = file.chunks.map(chunkToString).join('\n'); + + return `${header}\n${chunks}`; +} + +function chunkToString(chunk: Chunk): string { + const header = `@@ -${chunk.oldStart},${chunk.oldLines} +${chunk.newStart},${chunk.newLines} @@`; + const changes = chunk.changes.map(change => { + const prefix = change.type === 'add' ? '+' : (change.type === 'del' ? '-' : ' '); + return prefix + change.content; + }).join('\n'); + + return `${header}\n${changes}`; +} + async function analyzeEntirePR( files: File[], prDetails: PRDetails @@ -240,53 +283,23 @@ async function createReviewComment( }); } -async function main() { +export async function main() { console.info("Starting main function"); const prDetails = await getPRDetails(); console.info("PR Details:", prDetails); - const diff = await getDiff( + const filteredDiff = await getDiff( prDetails.owner, prDetails.repo, prDetails.pull_number ); - if (!diff) { + if (!filteredDiff) { console.log("No diff found"); return; } - console.log("Diff length:", diff.length); - - const parsedDiff = parseDiff(diff); - console.log("Parsed diff length:", parsedDiff.length); - - // Filter the diff to only include files that match the include paths - console.log("Filtering diff based on include paths:", INCLUDE_PATHS); - const filteredDiff = parsedDiff.filter(file => { - const matchesPattern = INCLUDE_PATHS.some(pattern => minimatch(file.to || "", pattern)); - console.log(`File ${file.to}: ${matchesPattern ? 'included' : 'excluded'}`); - return matchesPattern; - }); - console.log("Filtered diff files:", filteredDiff.map(file => file.to)); console.log("Filtered diff length:", filteredDiff.length); - // Check if the PR is too long - const totalChangedLines = filteredDiff.reduce((total, file) => { - return total + file.additions + file.deletions; - }, 0); - - if (totalChangedLines > MAX_LINES_TO_REVIEW) { - console.log("PR is too long. Adding general comment and exiting."); - await octokit.pulls.createReview({ - owner: prDetails.owner, - repo: prDetails.repo, - pull_number: prDetails.pull_number, - body: `LLM reviewer will not review this as the PR is too long (${totalChangedLines} lines). Please consider splitting it up to make it more readable for humans too!`, - event: "COMMENT" - }); - return; - } - const comments = await analyzeEntirePR(filteredDiff, prDetails); console.log("Generated comments:", comments.length); @@ -322,7 +335,10 @@ async function main() { console.log("Main function completed"); } -main().catch((error) => { - console.error("Error in main function:", error); - process.exit(1); -}); \ No newline at end of file +// Add this condition to prevent automatic execution when imported +if (require.main === module) { + main().catch((error) => { + console.error("Error in main function:", error); + process.exit(1); + }); +} diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..c9f66eb --- /dev/null +++ b/src/test.ts @@ -0,0 +1,38 @@ +import { Octokit } from "@octokit/rest"; +import OpenAI from "openai"; +import parseDiff, { File } from "parse-diff"; +import minimatch from "minimatch"; +import dotenv from "dotenv"; +import { getDiff, diffToString } from "./main"; // Import the functions from main.ts + +// Load environment variables +dotenv.config(); + +const GITHUB_TOKEN = process.env.GITHUB_TOKEN; +const OPENAI_API_KEY = process.env.OPENAI_API_KEY; +const INCLUDE_PATHS = process.env.INCLUDE_PATHS?.split(",").map(p => p.trim()) || []; + +const octokit = new Octokit({ auth: GITHUB_TOKEN }); + +// const openai = new OpenAI({ +// apiKey: OPENAI_API_KEY, +// }); + +// Copy the necessary functions from your main.ts file +// Include getDiff, diffToString, fileToString, chunkToString, etc. + +async function testGetDiff() { + const owner = "yousef-hindy-ai"; + const repo = "diffusion_demos"; + const pull_number = 5; // Replace with an actual PR number + + const diff = await getDiff(owner, repo, pull_number); + if (diff) { + console.log("Filtered diff:"); + console.log(diffToString(diff)); + } else { + console.log("No diff found"); + } +} + +testGetDiff().catch(console.error); diff --git a/yarn.lock b/yarn.lock index ef138cb..ff60787 100644 --- a/yarn.lock +++ b/yarn.lock @@ -49,10 +49,10 @@ dependencies: "@octokit/types" "^9.0.0" -"@octokit/core@^4.1.0", "@octokit/core@>=3", "@octokit/core@>=4": - "integrity" "sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==" - "resolved" "https://registry.npmjs.org/@octokit/core/-/core-4.2.0.tgz" - "version" "4.2.0" +"@octokit/core@^4.2.1", "@octokit/core@>=3", "@octokit/core@>=4": + "integrity" "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==" + "resolved" "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz" + "version" "4.2.4" dependencies: "@octokit/auth-token" "^3.0.0" "@octokit/graphql" "^5.0.0" @@ -85,25 +85,30 @@ "resolved" "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz" "version" "16.0.0" -"@octokit/plugin-paginate-rest@^6.0.0": - "integrity" "sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz" - "version" "6.0.0" +"@octokit/openapi-types@^18.0.0": + "integrity" "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==" + "resolved" "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz" + "version" "18.1.1" + +"@octokit/plugin-paginate-rest@^6.1.2": + "integrity" "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==" + "resolved" "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz" + "version" "6.1.2" dependencies: - "@octokit/types" "^9.0.0" + "@octokit/tsconfig" "^1.0.2" + "@octokit/types" "^9.2.3" "@octokit/plugin-request-log@^1.0.4": "integrity" "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==" "resolved" "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" "version" "1.0.4" -"@octokit/plugin-rest-endpoint-methods@^7.0.0": - "integrity" "sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz" - "version" "7.0.1" +"@octokit/plugin-rest-endpoint-methods@^7.1.2": + "integrity" "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==" + "resolved" "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz" + "version" "7.2.3" dependencies: - "@octokit/types" "^9.0.0" - "deprecation" "^2.3.1" + "@octokit/types" "^10.0.0" "@octokit/request-error@^3.0.0": "integrity" "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==" @@ -126,15 +131,27 @@ "node-fetch" "^2.6.7" "universal-user-agent" "^6.0.0" -"@octokit/rest@^19.0.7": - "integrity" "sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA==" - "resolved" "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.7.tgz" - "version" "19.0.7" +"@octokit/rest@^19.0.13": + "integrity" "sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA==" + "resolved" "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.13.tgz" + "version" "19.0.13" dependencies: - "@octokit/core" "^4.1.0" - "@octokit/plugin-paginate-rest" "^6.0.0" + "@octokit/core" "^4.2.1" + "@octokit/plugin-paginate-rest" "^6.1.2" "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^7.0.0" + "@octokit/plugin-rest-endpoint-methods" "^7.1.2" + +"@octokit/tsconfig@^1.0.2": + "integrity" "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==" + "resolved" "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz" + "version" "1.0.2" + +"@octokit/types@^10.0.0": + "integrity" "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==" + "resolved" "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz" + "version" "10.0.0" + dependencies: + "@octokit/openapi-types" "^18.0.0" "@octokit/types@^9.0.0": "integrity" "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==" @@ -143,6 +160,13 @@ dependencies: "@octokit/openapi-types" "^16.0.0" +"@octokit/types@^9.2.3": + "integrity" "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==" + "resolved" "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz" + "version" "9.3.2" + dependencies: + "@octokit/openapi-types" "^18.0.0" + "@tsconfig/node10@^1.0.7": "integrity" "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" "resolved" "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" @@ -220,11 +244,6 @@ "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" "version" "1.0.2" -"base-64@^0.1.0": - "integrity" "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" - "resolved" "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz" - "version" "0.1.0" - "before-after-hook@^2.2.0": "integrity" "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" "resolved" "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" @@ -237,11 +256,6 @@ dependencies: "balanced-match" "^1.0.0" -"charenc@0.0.2": - "integrity" "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" - "resolved" "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" - "version" "0.0.2" - "combined-stream@^1.0.8": "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" @@ -254,17 +268,12 @@ "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" "version" "1.1.1" -"crypt@0.0.2": - "integrity" "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" - "resolved" "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" - "version" "0.0.2" - "delayed-stream@~1.0.0": "integrity" "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" "version" "1.0.0" -"deprecation@^2.0.0", "deprecation@^2.3.1": +"deprecation@^2.0.0": "integrity" "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" "resolved" "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" "version" "2.3.1" @@ -274,13 +283,10 @@ "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" "version" "4.0.2" -"digest-fetch@^1.3.0": - "integrity" "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==" - "resolved" "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "base-64" "^0.1.0" - "md5" "^2.3.0" +"dotenv@^16.4.5": + "integrity" "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" + "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz" + "version" "16.4.5" "event-target-shim@^5.0.0": "integrity" "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" @@ -316,11 +322,6 @@ dependencies: "ms" "^2.0.0" -"is-buffer@~1.1.6": - "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - "version" "1.1.6" - "is-plain-object@^5.0.0": "integrity" "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" @@ -331,15 +332,6 @@ "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" "version" "1.3.6" -"md5@^2.3.0": - "integrity" "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==" - "resolved" "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "charenc" "0.0.2" - "crypt" "0.0.2" - "is-buffer" "~1.1.6" - "mime-db@1.52.0": "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" @@ -352,10 +344,10 @@ dependencies: "mime-db" "1.52.0" -"minimatch@^7.4.2": - "integrity" "sha512-xy4q7wou3vUoC9k1xGTXc+awNdGaGVHtFUaey8tiX4H1QRc04DZ/rmDFwNm2EBsuYEhAZ6SgMmYf3InGY6OauA==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-7.4.2.tgz" - "version" "7.4.2" +"minimatch@^7.4.6": + "integrity" "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz" + "version" "7.4.6" dependencies: "brace-expansion" "^2.0.1" @@ -383,20 +375,18 @@ dependencies: "wrappy" "1" -"openai@^4.20.1": - "integrity" "sha512-Dd3q8EvINfganZFtg6V36HjrMaihqRgIcKiHua4Nq9aw/PxOP48dhbsk8x5klrxajt5Lpnc1KTOG5i1S6BKAJA==" - "resolved" "https://registry.npmjs.org/openai/-/openai-4.20.1.tgz" - "version" "4.20.1" +"openai@^4.67.3": + "integrity" "sha512-HT2tZgjLgRqbLQNKmYtjdF/4TQuiBvg1oGvTDhwpSEQzxo6/oM1us8VQ53vBK2BiKvCxFuq6gKGG70qfwrNhKg==" + "resolved" "https://registry.npmjs.org/openai/-/openai-4.67.3.tgz" + "version" "4.67.3" dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4" "abort-controller" "^3.0.0" "agentkeepalive" "^4.2.1" - "digest-fetch" "^1.3.0" "form-data-encoder" "1.7.2" "formdata-node" "^4.3.2" "node-fetch" "^2.6.7" - "web-streams-polyfill" "^3.2.1" "parse-diff@^0.11.1": "integrity" "sha512-Oq4j8LAOPOcssanQkIjxosjATBIEJhCxMCxPhMu+Ci4wdNmAEdx0O+a7gzbR2PyKXgKPvRLIN5g224+dJAsKHA==" @@ -457,11 +447,6 @@ "resolved" "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" "version" "3.0.1" -"web-streams-polyfill@^3.2.1": - "integrity" "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" - "resolved" "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz" - "version" "3.2.1" - "web-streams-polyfill@4.0.0-beta.3": "integrity" "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==" "resolved" "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz"