diff --git a/packages/mergebot/src/_tests/cachedQueries.js b/packages/mergebot/src/_tests/cachedQueries.js index 059b57e3e7..3a8c7d4618 100644 --- a/packages/mergebot/src/_tests/cachedQueries.js +++ b/packages/mergebot/src/_tests/cachedQueries.js @@ -7,6 +7,7 @@ module.exports = ((h) => ({ ["Waiting for Code Reviews (Blessed)", "e2dd54d5"], ["Waiting for Code Reviews", "98236657"], ["Needs Author Action", "d389394c"], + ["Waiting for Author to Merge (Blessed)", "a4b0585f"], ["Waiting for Author to Merge", "7da042bf"], ["Recently Merged", "fee515dc"], ["Other", "4ab7a682"], diff --git a/packages/mergebot/src/_tests/fixtures/45884/mutations.json b/packages/mergebot/src/_tests/fixtures/45884/mutations.json index 4c8cfe49bb..9492da3085 100644 --- a/packages/mergebot/src/_tests/fixtures/45884/mutations.json +++ b/packages/mergebot/src/_tests/fixtures/45884/mutations.json @@ -8,6 +8,19 @@ } } }, + { + "mutation": "mutation ($input: UpdateProjectV2ItemFieldValueInput!) {\n updateProjectV2ItemFieldValue(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "itemId": "MDExOlByb2plY3RDYXJkNDEyNTM4NTk=", + "projectId": "PVT_kwDOADeBNM4AkH1q", + "fieldId": "PVTSSF_lADOADeBNM4AkH1qzgcYOEM", + "value": { + "singleSelectOptionId": "a4b0585f" + } + } + } + }, { "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", "variables": { diff --git a/packages/mergebot/src/_tests/fixtures/45884/result.json b/packages/mergebot/src/_tests/fixtures/45884/result.json index 9c2a1ab9f1..9bf152b4d0 100644 --- a/packages/mergebot/src/_tests/fixtures/45884/result.json +++ b/packages/mergebot/src/_tests/fixtures/45884/result.json @@ -1,5 +1,5 @@ { - "projectColumn": "Waiting for Author to Merge", + "projectColumn": "Waiting for Author to Merge (Blessed)", "labels": [ "Owner Approved", "Untested Change", diff --git a/packages/mergebot/src/_tests/fixtures/45999/mutations.json b/packages/mergebot/src/_tests/fixtures/45999/mutations.json index d1aa51a57a..f80d301e1f 100644 --- a/packages/mergebot/src/_tests/fixtures/45999/mutations.json +++ b/packages/mergebot/src/_tests/fixtures/45999/mutations.json @@ -27,7 +27,7 @@ "projectId": "PVT_kwDOADeBNM4AkH1q", "fieldId": "PVTSSF_lADOADeBNM4AkH1qzgcYOEM", "value": { - "singleSelectOptionId": "7da042bf" + "singleSelectOptionId": "a4b0585f" } } } diff --git a/packages/mergebot/src/_tests/fixtures/45999/result.json b/packages/mergebot/src/_tests/fixtures/45999/result.json index ae1e65d9a0..0941f099a6 100644 --- a/packages/mergebot/src/_tests/fixtures/45999/result.json +++ b/packages/mergebot/src/_tests/fixtures/45999/result.json @@ -1,5 +1,5 @@ { - "projectColumn": "Waiting for Author to Merge", + "projectColumn": "Waiting for Author to Merge (Blessed)", "labels": [ "Critical package", "Owner Approved", diff --git a/packages/mergebot/src/_tests/fixtures/46008/mutations.json b/packages/mergebot/src/_tests/fixtures/46008/mutations.json index a1b27f3200..932ae0d821 100644 --- a/packages/mergebot/src/_tests/fixtures/46008/mutations.json +++ b/packages/mergebot/src/_tests/fixtures/46008/mutations.json @@ -27,7 +27,7 @@ "projectId": "PVT_kwDOADeBNM4AkH1q", "fieldId": "PVTSSF_lADOADeBNM4AkH1qzgcYOEM", "value": { - "singleSelectOptionId": "7da042bf" + "singleSelectOptionId": "a4b0585f" } } } diff --git a/packages/mergebot/src/_tests/fixtures/46008/result.json b/packages/mergebot/src/_tests/fixtures/46008/result.json index 3412667dc9..30ceeeac3b 100644 --- a/packages/mergebot/src/_tests/fixtures/46008/result.json +++ b/packages/mergebot/src/_tests/fixtures/46008/result.json @@ -1,5 +1,5 @@ { - "projectColumn": "Waiting for Author to Merge", + "projectColumn": "Waiting for Author to Merge (Blessed)", "labels": [ "Owner Approved", "Untested Change", diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/mutations.json b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/mutations.json index 6719c16535..e17a2400cb 100644 --- a/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/mutations.json +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/mutations.json @@ -28,7 +28,7 @@ "projectId": "PVT_kwDOADeBNM4AkH1q", "fieldId": "PVTSSF_lADOADeBNM4AkH1qzgcYOEM", "value": { - "singleSelectOptionId": "7da042bf" + "singleSelectOptionId": "a4b0585f" } } } diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/result.json b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/result.json index 65dae28dbd..6eb2233a75 100644 --- a/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/result.json +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/result.json @@ -1,5 +1,5 @@ { - "projectColumn": "Waiting for Author to Merge", + "projectColumn": "Waiting for Author to Merge (Blessed)", "labels": [ "Critical package", "Owner Approved", diff --git a/packages/mergebot/src/_tests/fixtures/52848/derived.json b/packages/mergebot/src/_tests/fixtures/52848/derived.json index 901596805f..be5cb5b85e 100644 --- a/packages/mergebot/src/_tests/fixtures/52848/derived.json +++ b/packages/mergebot/src/_tests/fixtures/52848/derived.json @@ -6,7 +6,8 @@ "headCommitOid": "14499debca98ea23cfc47a80a288d5bd32798cff", "mergeBaseOid": "master", "lastPushDate": "2021-05-10T07:57:17.000Z", - "lastActivityDate": "2021-05-10T07:59:10.000Z", + "lastActivityDate": "2021-05-10T15:42:52.000Z", + "maintainerBlessed": "Waiting for Author to Merge (Blessed)", "hasMergeConflict": false, "isFirstContribution": true, "tooManyFiles": false, diff --git a/packages/mergebot/src/_tests/fixtures/68510/mutations.json b/packages/mergebot/src/_tests/fixtures/68510/mutations.json index f214c11b88..8b8fd1d10c 100644 --- a/packages/mergebot/src/_tests/fixtures/68510/mutations.json +++ b/packages/mergebot/src/_tests/fixtures/68510/mutations.json @@ -4,7 +4,7 @@ "variables": { "input": { "subjectId": "PR_kwDOAFz6BM5mMibM", - "body": "@andrewbranch Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 0 packages in this PR\n\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68510&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 Most recent commit is approved by type definition owners, DT maintainers or others\n\nOnce every item on this list is checked, I'll ask you for permission to merge and publish the changes.\n\n----------------------\n... diagnostics scrubbed ...\n" + "body": "@andrewbranch Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 0 packages in this PR\n\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68510&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 Most recent commit is approved by a DT maintainer\n\nOnce every item on this list is checked, I'll ask you for permission to merge and publish the changes.\n\n----------------------\n... diagnostics scrubbed ...\n" } } }, diff --git a/packages/mergebot/src/_tests/fixtures/68510/result.json b/packages/mergebot/src/_tests/fixtures/68510/result.json index eeffce4ce9..333a2ef263 100644 --- a/packages/mergebot/src/_tests/fixtures/68510/result.json +++ b/packages/mergebot/src/_tests/fixtures/68510/result.json @@ -4,7 +4,7 @@ "responseComments": [ { "tag": "welcome", - "status": "@andrewbranch Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 0 packages in this PR\n\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68510&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 Most recent commit is approved by type definition owners, DT maintainers or others\n\nOnce every item on this list is checked, I'll ask you for permission to merge and publish the changes.\n\n----------------------\n... diagnostics scrubbed ..." + "status": "@andrewbranch Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 0 packages in this PR\n\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68510&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 Most recent commit is approved by a DT maintainer\n\nOnce every item on this list is checked, I'll ask you for permission to merge and publish the changes.\n\n----------------------\n... diagnostics scrubbed ..." }, { "tag": "pinging-reviewers-others", diff --git a/packages/mergebot/src/_tests/fixtures/70150/_downloads.json b/packages/mergebot/src/_tests/fixtures/70150/_downloads.json new file mode 100644 index 0000000000..0b4283e570 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/70150/_downloads.json @@ -0,0 +1,3 @@ +{ + "chrome": 3423683 +} diff --git a/packages/mergebot/src/_tests/fixtures/70150/_files.json b/packages/mergebot/src/_tests/fixtures/70150/_files.json new file mode 100644 index 0000000000..a3c72098fc --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/70150/_files.json @@ -0,0 +1,4 @@ +{ + "1d59977cdbcf917a961d68022373e42858d55b08:types/chrome/package.json": "{\n \"private\": true,\n \"name\": \"@types/chrome\",\n \"version\": \"0.0.9999\",\n \"projects\": [\n \"http://developer.chrome.com/extensions/\"\n ],\n \"dependencies\": {\n \"@types/filesystem\": \"*\",\n \"@types/har-format\": \"*\"\n },\n \"devDependencies\": {\n \"@types/chrome\": \"workspace:.\",\n \"@types/jquery\": \"*\",\n \"@types/jqueryui\": \"*\"\n },\n \"owners\": [\n {\n \"name\": \"Matthew Kimber\",\n \"githubUsername\": \"matthewkimber\"\n },\n {\n \"name\": \"otiai10\",\n \"githubUsername\": \"otiai10\"\n },\n {\n \"name\": \"sreimer15\",\n \"githubUsername\": \"sreimer15\"\n },\n {\n \"name\": \"MatCarlson\",\n \"githubUsername\": \"MatCarlson\"\n },\n {\n \"name\": \"ekinsol\",\n \"githubUsername\": \"ekinsol\"\n },\n {\n \"name\": \"Brian Wilson\",\n \"githubUsername\": \"echoabstract\"\n },\n {\n \"name\": \"Sebastiaan Pasma\",\n \"githubUsername\": \"spasma\"\n },\n {\n \"name\": \"bdbai\",\n \"githubUsername\": \"bdbai\"\n },\n {\n \"name\": \"pokutuna\",\n \"githubUsername\": \"pokutuna\"\n },\n {\n \"name\": \"Jason Xian\",\n \"githubUsername\": \"JasonXian\"\n },\n {\n \"name\": \"userTim\",\n \"githubUsername\": \"usertim\"\n },\n {\n \"name\": \"Idan Zeierman\",\n \"githubUsername\": \"idan315\"\n },\n {\n \"name\": \"Nicolas Rodriguez\",\n \"githubUsername\": \"nicolas377\"\n },\n {\n \"name\": \"Ido Salomon\",\n \"githubUsername\": \"idosal\"\n },\n {\n \"name\": \"Federico Brigante\",\n \"githubUsername\": \"fregante\"\n }\n ]\n}\n", + "22560146e216e1508aa2cd038b4c856d3a99d297:types/chrome/package.json": "{\n \"private\": true,\n \"name\": \"@types/chrome\",\n \"version\": \"0.0.9999\",\n \"projects\": [\n \"http://developer.chrome.com/extensions/\"\n ],\n \"dependencies\": {\n \"@types/filesystem\": \"*\",\n \"@types/har-format\": \"*\"\n },\n \"devDependencies\": {\n \"@types/chrome\": \"workspace:.\",\n \"@types/jquery\": \"*\",\n \"@types/jqueryui\": \"*\"\n },\n \"owners\": [\n {\n \"name\": \"Matthew Kimber\",\n \"githubUsername\": \"matthewkimber\"\n },\n {\n \"name\": \"otiai10\",\n \"githubUsername\": \"otiai10\"\n },\n {\n \"name\": \"sreimer15\",\n \"githubUsername\": \"sreimer15\"\n },\n {\n \"name\": \"MatCarlson\",\n \"githubUsername\": \"MatCarlson\"\n },\n {\n \"name\": \"ekinsol\",\n \"githubUsername\": \"ekinsol\"\n },\n {\n \"name\": \"Brian Wilson\",\n \"githubUsername\": \"echoabstract\"\n },\n {\n \"name\": \"Sebastiaan Pasma\",\n \"githubUsername\": \"spasma\"\n },\n {\n \"name\": \"bdbai\",\n \"githubUsername\": \"bdbai\"\n },\n {\n \"name\": \"pokutuna\",\n \"githubUsername\": \"pokutuna\"\n },\n {\n \"name\": \"Jason Xian\",\n \"githubUsername\": \"JasonXian\"\n },\n {\n \"name\": \"userTim\",\n \"githubUsername\": \"usertim\"\n },\n {\n \"name\": \"Idan Zeierman\",\n \"githubUsername\": \"idan315\"\n },\n {\n \"name\": \"Nicolas Rodriguez\",\n \"githubUsername\": \"nicolas377\"\n },\n {\n \"name\": \"Ido Salomon\",\n \"githubUsername\": \"idosal\"\n },\n {\n \"name\": \"Federico Brigante\",\n \"githubUsername\": \"fregante\"\n }\n ]\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/70150/_response.json b/packages/mergebot/src/_tests/fixtures/70150/_response.json new file mode 100644 index 0000000000..f46633569f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/70150/_response.json @@ -0,0 +1,275 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM52pmtc", + "title": "Fix getCurrent API return type", + "createdAt": "2024-07-27T18:32:13Z", + "author": { + "login": "sebasjm", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Popular package", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + }, + { + "name": "Unreviewed", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 70150, + "state": "OPEN", + "headRefOid": "22560146e216e1508aa2cd038b4c856d3a99d297", + "changedFiles": 1, + "additions": 1, + "deletions": 1, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "22560146e216e1508aa2cd038b4c856d3a99d297", + "parents": { + "nodes": [ + { + "oid": "1d59977cdbcf917a961d68022373e42858d55b08", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "commit": { + "oid": "22560146e216e1508aa2cd038b4c856d3a99d297", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2024-08-08T01:48:22Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/70150#pullrequestreview-2226663312", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 26499959468, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22560146e216e1508aa2cd038b4c856d3a99d297/checks?check_suite_id=26499959468", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22560146e216e1508aa2cd038b4c856d3a99d297/checks?check_suite_id=26499959468", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-07-27T18:32:16Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2024-07-27T18:27:23Z", + "committedDate": "2024-07-27T18:27:23Z", + "pushedDate": null, + "oid": "22560146e216e1508aa2cd038b4c856d3a99d297", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "IC_kwDOAFz6BM6GXLU7", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 2254222651, + "body": "@sebasjm Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 — I'm the local bot who will help you through the process of getting things through.\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `chrome` — [on npm](https://www.npmjs.com/package/chrome), [on unpkg](https://unpkg.com/browse/chrome@latest/)\n - owner-approval: @nicolas377\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed by a DT maintainer.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=70150&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * 🕐 Only a DT maintainer can approve changes [without tests](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-test-editing-an-existing-package)\n\nOnce every item on this list is checked, I'll ask you for permission to merge and publish the changes.\n\n## Inactive\n\nThis PR has been inactive for 12 days — please try to get reviewers!\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2024-07-27T18:32:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM6GXLVD", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 2254222659, + "body": "Hey @sebasjm,\n\n:unamused: Your PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Please consider [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-test-editing-an-existing-package) to cover the change you're making. Including tests allows this PR to be merged by yourself and the owners of this module.\n\n***This can potentially save days of time for you!***\n", + "createdAt": "2024-07-27T18:32:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM6GXLVH", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 2254222663, + "body": "🔔 @matthewkimber @otiai10 @sreimer15 @MatCarlson @ekinsol @echoabstract @spasma @bdbai @pokutuna @JasonXian @usertim @idan315 @nicolas377 @idosal @fregante — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/70150/files) in the next few days. Be sure to explicitly select **`Approve`** or **`Request Changes`** in the GitHub UI so I know what's going on.\n", + "createdAt": "2024-07-27T18:32:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM6HjFTU", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 2274120916, + "body": "Re-ping @matthewkimber, @otiai10, @sreimer15, @MatCarlson, @ekinsol, @echoabstract, @spasma, @bdbai, @pokutuna, @JasonXian, @usertim, @idan315, @idosal, @fregante:\n\nThis PR has been out for over a week, yet I haven't seen any reviews.\n\nCould someone please give it some attention? Thanks!\n", + "createdAt": "2024-08-07T18:46:14Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM6Hll8v", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 2274778927, + "body": ":hourglass_flowing_sand: Hi @sebasjm,\n\nIt's been a few days since this PR was approved by nicolas377 and we're waiting for a DT maintainer to give a review.\n\nIf you would like to short-circuit this wait, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package that verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review.\n", + "createdAt": "2024-08-08T01:48:58Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 1, + "nodes": [ + { + "path": "types/chrome/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectItems": { + "nodes": [ + { + "id": "PVTI_lADOADeBNM4AkH1qzgRRbnM", + "project": { + "id": "PVT_kwDOADeBNM4AkH1q", + "number": 1, + "__typename": "ProjectV2" + }, + "fieldValueByName": { + "name": "Waiting for Code Reviews (Blessed)", + "field": { + "id": "PVTSSF_lADOADeBNM4AkH1qzgcYOEM", + "__typename": "ProjectV2SingleSelectField" + }, + "__typename": "ProjectV2ItemFieldSingleSelectValue" + }, + "updatedAt": "2024-08-08T20:06:29Z", + "__typename": "ProjectV2Item" + } + ], + "__typename": "ProjectV2ItemConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/70150/derived.json b/packages/mergebot/src/_tests/fixtures/70150/derived.json new file mode 100644 index 0000000000..9f97a89c51 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/70150/derived.json @@ -0,0 +1,58 @@ +{ + "type": "info", + "now": "2024-08-08T20:06:31.899Z", + "pr_number": 70150, + "author": "sebasjm", + "headCommitOid": "22560146e216e1508aa2cd038b4c856d3a99d297", + "mergeBaseOid": "1d59977cdbcf917a961d68022373e42858d55b08", + "lastPushDate": "2024-07-27T18:32:13.000Z", + "lastActivityDate": "2024-08-08T01:48:22.000Z", + "maintainerBlessed": "Waiting for Code Reviews (Blessed)", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": "chrome", + "kind": "edit", + "files": [ + { + "path": "types/chrome/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "matthewkimber", + "otiai10", + "sreimer15", + "MatCarlson", + "ekinsol", + "echoabstract", + "spasma", + "bdbai", + "pokutuna", + "JasonXian", + "usertim", + "idan315", + "nicolas377", + "idosal", + "fregante" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "nicolas377", + "date": "2024-08-08T01:48:22.000Z", + "isMaintainer": false + } + ], + "mainBotCommentID": 2254222651, + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/70150/mutations.json b/packages/mergebot/src/_tests/fixtures/70150/mutations.json new file mode 100644 index 0000000000..dd63b88f52 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/70150/mutations.json @@ -0,0 +1,55 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM6GXLU7", + "body": "@sebasjm Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 — I'm the local bot who will help you through the process of getting things through.\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `chrome` — [on npm](https://www.npmjs.com/package/chrome), [on unpkg](https://unpkg.com/browse/chrome@latest/)\n - owner-approval: @nicolas377\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=70150&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ Most recent commit is approved by type definition owners or DT maintainers\n\nAll of the items on the list are green. **To merge, you need to post a comment including the string \"Ready to merge\"** to bring in your changes.\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2OTcwMTg5NzI=" + ], + "labelableId": "PR_kwDOAFz6BM52pmtc" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyNDYyODA0MzE1" + ], + "labelableId": "PR_kwDOAFz6BM52pmtc" + } + } + }, + { + "mutation": "mutation ($input: UpdateProjectV2ItemFieldValueInput!) {\n updateProjectV2ItemFieldValue(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "itemId": "PVTI_lADOADeBNM4AkH1qzgRRbnM", + "projectId": "PVT_kwDOADeBNM4AkH1q", + "fieldId": "PVTSSF_lADOADeBNM4AkH1qzgcYOEM", + "value": { + "singleSelectOptionId": "a4b0585f" + } + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "PR_kwDOAFz6BM52pmtc", + "body": "@sebasjm: Everything looks good here. I am ready to merge this PR (at 2256014) on your behalf whenever you think it's ready.\n\nIf you'd like that to happen, please post a comment saying:\n\n> Ready to merge\n\nand I'll merge this PR almost instantly. Thanks for helping out! :heart:\n\n(@matthewkimber, @otiai10, @sreimer15, @MatCarlson, @ekinsol, @echoabstract, @spasma, @bdbai, @pokutuna, @JasonXian, @usertim, @idan315, @nicolas377, @idosal, @fregante: you can do this too.)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/70150/result.json b/packages/mergebot/src/_tests/fixtures/70150/result.json new file mode 100644 index 0000000000..4d40a4b6bb --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/70150/result.json @@ -0,0 +1,26 @@ +{ + "projectColumn": "Waiting for Author to Merge (Blessed)", + "labels": [ + "Popular package", + "Owner Approved", + "Untested Change", + "Self Merge" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @sebasjm,\n\n:unamused: Your PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Please consider [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-test-editing-an-existing-package) to cover the change you're making. Including tests allows this PR to be merged by yourself and the owners of this module.\n\n***This can potentially save days of time for you!***" + }, + { + "tag": "welcome", + "status": "@sebasjm Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 — I'm the local bot who will help you through the process of getting things through.\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `chrome` — [on npm](https://www.npmjs.com/package/chrome), [on unpkg](https://unpkg.com/browse/chrome@latest/)\n - owner-approval: @nicolas377\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=70150&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ Most recent commit is approved by type definition owners or DT maintainers\n\nAll of the items on the list are green. **To merge, you need to post a comment including the string \"Ready to merge\"** to bring in your changes.\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "merge-offer", + "status": "@sebasjm: Everything looks good here. I am ready to merge this PR (at 2256014) on your behalf whenever you think it's ready.\n\nIf you'd like that to happen, please post a comment saying:\n\n> Ready to merge\n\nand I'll merge this PR almost instantly. Thanks for helping out! :heart:\n\n(@matthewkimber, @otiai10, @sreimer15, @MatCarlson, @ekinsol, @echoabstract, @spasma, @bdbai, @pokutuna, @JasonXian, @usertim, @idan315, @nicolas377, @idosal, @fregante: you can do this too.)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/70242/_downloads.json b/packages/mergebot/src/_tests/fixtures/70242/_downloads.json new file mode 100644 index 0000000000..27c8363368 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/70242/_downloads.json @@ -0,0 +1,5 @@ +{ + "polygon-lookup": 20317, + "rbush": 231302, + "which-polygon": 8788 +} diff --git a/packages/mergebot/src/_tests/fixtures/70242/_files.json b/packages/mergebot/src/_tests/fixtures/70242/_files.json new file mode 100644 index 0000000000..6e3a78d0bd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/70242/_files.json @@ -0,0 +1,10 @@ +{ + "4bd59ac2f21f5dac3d449669d50e03e7fbd0855b:attw.json": "{\n \"ignoreRules\": [\n \"no-resolution\",\n \"cjs-only-exports-default\",\n \"unexpected-module-syntax\",\n \"cjs-resolves-to-esm\"\n ],\n \"failingPackages\": [\n \"absolute\",\n \"acc-wizard\",\n \"activex-access\",\n \"activex-adodb\",\n \"activex-adox\",\n \"activex-dao\",\n \"activex-diskquota\",\n \"activex-excel\",\n \"activex-faxcomexlib\",\n \"activex-infopath\",\n \"activex-interop\",\n \"activex-iwshruntimelibrary\",\n \"activex-libreoffice\",\n \"activex-msforms\",\n \"activex-mshtml\",\n \"activex-msxml2\",\n \"activex-office\",\n \"activex-outlook\",\n \"activex-powerpoint\",\n \"activex-scripting\",\n \"activex-shdocvw\",\n \"activex-shell\",\n \"activex-stdole\",\n \"activex-vbide\",\n \"activex-wia\",\n \"activex-word\",\n \"add2home\",\n \"af-utils__react-table\",\n \"af-utils__react-virtual-headless\",\n \"af-utils__react-virtual-list\",\n \"ahoy.js\",\n \"akamai-edgeworkers\",\n \"akumina-core\",\n \"akumina-core/v4\",\n \"alcides\",\n \"alipayjssdk\",\n \"allure-js-commons\",\n \"alpinejs\",\n \"amap-js-api-arrival-range\",\n \"amap-js-api-autocomplete\",\n \"amap-js-api-city-search\",\n \"amap-js-api-control-bar\",\n \"amap-js-api-district-search\",\n \"amap-js-api-driving\",\n \"amap-js-api-geocoder\",\n \"amap-js-api-geolocation\",\n \"amap-js-api-heatmap\",\n \"amap-js-api-indoor-map\",\n \"amap-js-api-line-search\",\n \"amap-js-api-map-type\",\n \"amap-js-api-map3d\",\n \"amap-js-api-overview\",\n \"amap-js-api-place-search\",\n \"amap-js-api-riding\",\n \"amap-js-api-scale\",\n \"amap-js-api-station-search\",\n \"amap-js-api-tool-bar\",\n \"amap-js-api-transfer\",\n \"amap-js-api\",\n \"amap-js-sdk\",\n \"amcharts\",\n \"amplifier\",\n \"amplify-deferred\",\n \"amplify\",\n \"amqplib\",\n \"angular-agility\",\n \"angular-bootstrap-calendar\",\n \"angular-dialog-service\",\n \"angular-gridster\",\n \"angular-httpi\",\n \"angular-idle\",\n \"angular-meteor\",\n \"angular-notifications\",\n \"angular-notify\",\n \"angular-odata-resources\",\n \"angular-q-spread\",\n \"angular-ui-notification\",\n \"angular-ui-router\",\n \"angular-ui-tree\",\n \"angular.throttle\",\n \"angularfire\",\n \"angularlocalstorage\",\n \"ansicolors\",\n \"antlr4\",\n \"aos\",\n \"apca-w3\",\n \"apigee-access\",\n \"app-module-path\",\n \"app-root-dir\",\n \"appframework\",\n \"apple-mapkit-js-browser\",\n \"apple-music-api\",\n \"apple-signin-api\",\n \"applepayjs\",\n \"appletvjs\",\n \"arangodb\",\n \"arbiter\",\n \"arcgis-rest-api\",\n \"architect\",\n \"array-sort\",\n \"assertsharp\",\n \"async-polling\",\n \"async-retry\",\n \"atmosphere.js\",\n \"atom\",\n \"atpl\",\n \"atvlegacycontentkit\",\n \"auth0.widget\",\n \"aws-cloudfront-function\",\n \"aws-sdk2-types\",\n \"aws-synthetics-puppeteer\",\n \"axios-cancel\",\n \"azdata\",\n \"azure-mobile-services-client\",\n \"azure-sb\",\n \"babel-plugin-syntax-jsx\",\n \"babel-types\",\n \"babylon-walk\",\n \"backbone.localstorage\",\n \"backgrid\",\n \"backstopjs\",\n \"baidu-app\",\n \"baidumap-web-sdk\",\n \"barnard59-base\",\n \"barnard59-core\",\n \"barnard59-graph-store\",\n \"barnard59-validate-shacl\",\n \"barnard59\",\n \"bbcode-to-react\",\n \"behavior3\",\n \"better-curry\",\n \"better-scroll\",\n \"beyonk__gdpr-cookie-consent-banner\",\n \"bezier-js\",\n \"bgiframe\",\n \"bidirectional-map\",\n \"big.js\",\n \"bigint\",\n \"bignum\",\n \"bitcoin-computer__lib\",\n \"blazor__javascript-interop\",\n \"blissfuljs\",\n \"bluebird-global\",\n \"bmapgl-browser\",\n \"boolify-string\",\n \"bootstrap-maxlength\",\n \"bootstrap-switch\",\n \"bootstrap-touchspin\",\n \"bootstrap-treeview\",\n \"bootstrap.paginator\",\n \"bootstrap.timepicker\",\n \"bootstrap.v3.datetimepicker\",\n \"bootstrap.v3.datetimepicker/v3\",\n \"box2d\",\n \"brainhubeu__react-carousel\",\n \"bramus__pagination-sequence\",\n \"breeze\",\n \"browserify\",\n \"bundle-id\",\n \"bundle-name\",\n \"bunyan-blackhole\",\n \"bwip-js\",\n \"byte-size\",\n \"call-bind\",\n \"calq\",\n \"cannon\",\n \"canvasjs\",\n \"carbon__layout\",\n \"carbon__motion\",\n \"carbon__themes\",\n \"carbon__type\",\n \"casperjs\",\n \"chai-datetime\",\n \"chai\",\n \"channel-io\",\n \"chartjs-plugin-colorschemes\",\n \"chartjs-plugin-doughnutlabel-rebourne\",\n \"chayns\",\n \"chess.js\",\n \"chessboardjs\",\n \"chocolatechipjs\",\n \"chrome-apps\",\n \"chromecast-caf-receiver\",\n \"chromecast-caf-sender\",\n \"chui\",\n \"cldr\",\n \"clearbladejs-client\",\n \"clearbladejs-node\",\n \"clearbladejs-server\",\n \"closure-compiler\",\n \"cloudflare-apps\",\n \"cloudflare-turnstile\",\n \"cloudfour__simple-svg-placeholder\",\n \"cloudinary-uploadwidget-browser\",\n \"cls-hooked\",\n \"cobe\",\n \"colab\",\n \"collectionsjs\",\n \"color/v0\",\n \"com.wikitude.phonegap.wikitudeplugin\",\n \"combine-reducers\",\n \"commangular\",\n \"compose-function\",\n \"conditional\",\n \"configs-overload\",\n \"connect-flash\",\n \"consumer-data-standards\",\n \"content-type\",\n \"contextjs\",\n \"cookiebot-sdk\",\n \"cookieclicker\",\n \"cordova-ionic\",\n \"cordova-plugin-background-mode\",\n \"cordova-plugin-canvascamera\",\n \"cordova-plugin-email-composer\",\n \"cordova-plugin-ibeacon\",\n \"cordova-plugin-mapsforge\",\n \"cordova-plugin-ms-adal\",\n \"cornerstone-core\",\n \"countdown\",\n \"country-flag-icons\",\n \"country-list/v1\",\n \"cradle\",\n \"crc\",\n \"createjs-lib\",\n \"critters-webpack-plugin\",\n \"crossfilter\",\n \"crossroads\",\n \"crypto-ld\",\n \"cryptojs\",\n \"css-declaration-sorter\",\n \"css-font-loading-module\",\n \"css-modules\",\n \"css-tree\",\n \"css\",\n \"csso\",\n \"culori\",\n \"custom-functions-runtime\",\n \"cybozulabs-md5\",\n \"cyclonedx\",\n \"d3-array\",\n \"d3-axis\",\n \"d3-box\",\n \"d3-brush\",\n \"d3-chord\",\n \"d3-color\",\n \"d3-contour\",\n \"d3-delaunay\",\n \"d3-dispatch\",\n \"d3-drag\",\n \"d3-dsv\",\n \"d3-ease\",\n \"d3-fetch\",\n \"d3-force\",\n \"d3-format\",\n \"d3-geo\",\n \"d3-hierarchy\",\n \"d3-indirections\",\n \"d3-interpolate\",\n \"d3-path\",\n \"d3-polygon\",\n \"d3-quadtree\",\n \"d3-random\",\n \"d3-scale-chromatic\",\n \"d3-scale\",\n \"d3-selection\",\n \"d3-shape\",\n \"d3-time-format\",\n \"d3-time\",\n \"d3-timer\",\n \"d3-tip\",\n \"d3-transition\",\n \"d3-zoom\",\n \"d3.slider\",\n \"d3\",\n \"dadata-api\",\n \"data-driven\",\n \"dateformat\",\n \"daum-postcode\",\n \"db-migrate-base\",\n \"db-migrate-pg\",\n \"decorum\",\n \"deep-freeze\",\n \"deezer-sdk\",\n \"default-browser-id\",\n \"default-gateway\",\n \"deku\",\n \"delaunator\",\n \"delowar__react-circle-progressbar\",\n \"deoxxa-content-type\",\n \"deployjava\",\n \"desmos\",\n \"devexpress-aspnetcore-bootstrap\",\n \"devexpress-web\",\n \"devexpress-web/v161\",\n \"devexpress-web/v162\",\n \"devexpress-web/v171\",\n \"devexpress-web/v172\",\n \"devexpress-web/v181\",\n \"devexpress-web/v182\",\n \"devexpress-web/v191\",\n \"devexpress-web/v192\",\n \"devexpress-web/v201\",\n \"df-visible\",\n \"dhtmlxgantt\",\n \"dhtmlxscheduler\",\n \"dialogify-browser\",\n \"digital-goods-browser\",\n \"doccookies\",\n \"dock-spawn\",\n \"documentdb-server\",\n \"dom-background-sync\",\n \"dom-chromium-installation-events\",\n \"dom-inputevent\",\n \"dom-mediacapture-record\",\n \"dom-mediacapture-transform\",\n \"dom-navigation-preload\",\n \"dom-navigation\",\n \"dom-screen-wake-lock\",\n \"dom-serial\",\n \"dom-speech-recognition\",\n \"dom-to-image\",\n \"dom-trust-token\",\n \"dom-view-transitions\",\n \"dom-webcodecs\",\n \"domurl\",\n \"dotenv-flow\",\n \"double-ended-queue\",\n \"doubleclick-gpt\",\n \"dplayer\",\n \"draggabilly\",\n \"drawflow\",\n \"dropbox-chooser\",\n \"dropboxjs\",\n \"dts-bundle\",\n \"duo_web_sdk\",\n \"durandal\",\n \"durandal/v1\",\n \"dvtng-jss\",\n \"dw-bxslider-4\",\n \"dygraphs\",\n \"dymo-label-framework\",\n \"dynatable\",\n \"dynmap\",\n \"easy-api-request\",\n \"easy-jsend\",\n \"easy-speech\",\n \"easy-xapi-utils\",\n \"easy-xapi\",\n \"editorjs__header\",\n \"egg.js\",\n \"ej.web.all\",\n \"ejs-locals\",\n \"email-prompt\",\n \"ember__application\",\n \"ember__array\",\n \"ember__component\",\n \"ember__controller\",\n \"ember__debug\",\n \"ember__destroyable\",\n \"ember__destroyable/v3\",\n \"ember__engine\",\n \"ember__error\",\n \"ember__error/v3\",\n \"ember__helper\",\n \"ember__modifier\",\n \"ember__object\",\n \"ember__ordered-set\",\n \"ember__ordered-set/v3\",\n \"ember__owner\",\n \"ember__polyfills\",\n \"ember__polyfills/v3\",\n \"ember__routing\",\n \"ember__runloop\",\n \"ember__service\",\n \"ember__string/v2\",\n \"ember__template\",\n \"ember__template/v3\",\n \"ember__test\",\n \"ember__utils\",\n \"ember__utils/v3\",\n \"ember-changeset-validations\",\n \"ember-data__adapter\",\n \"ember-data__adapter/v3\",\n \"ember-data__model\",\n \"ember-data__model/v3\",\n \"ember-data__serializer\",\n \"ember-data__serializer/v3\",\n \"ember-data__store\",\n \"ember-data__store/v3\",\n \"ember-data\",\n \"ember-data/v2\",\n \"ember-data/v3\",\n \"ember-feature-flags\",\n \"ember-feature-flags/v3\",\n \"ember-task-scheduler\",\n \"ember-test-helpers\",\n \"ember-test-helpers/v0\",\n \"ember-testing-helpers\",\n \"ember\",\n \"ember/v1\",\n \"ember/v2\",\n \"ember/v3\",\n \"emissary\",\n \"emscripten\",\n \"encoding-down\",\n \"engine-check\",\n \"epub\",\n \"eq.js\",\n \"error-cause\",\n \"es-get-iterator\",\n \"es6-weak-map\",\n \"esbuild-copy-static-files\",\n \"esbuild-plugin-import-map\",\n \"eslint__eslintrc\",\n \"eslint-utils\",\n \"espruino\",\n \"estree-jsx\",\n \"estree\",\n \"evaporate\",\n \"express-async-wrap\",\n \"express-brute-memcached\",\n \"express-serve-static-core\",\n \"express-socket.io-session\",\n \"express-status-monitor\",\n \"express-wechat-access\",\n \"extensible-duck\",\n \"extjs\",\n \"eyevinn-iaf\",\n \"facebook-instant-games\",\n \"facebook-js-sdk\",\n \"facebook-pixel\",\n \"falcor-http-datasource\",\n \"famous\",\n \"fancade-editor\",\n \"fancybox\",\n \"farbtastic\",\n \"fast-levenshtein\",\n \"favico.js\",\n \"feather-route-matcher\",\n \"featherlight\",\n \"feathersjs__authentication-client\",\n \"feathersjs__authentication-jwt\",\n \"feathersjs__authentication-local\",\n \"feathersjs__authentication-oauth1\",\n \"feathersjs__authentication-oauth2\",\n \"feathersjs__authentication\",\n \"feathersjs__configuration\",\n \"feathersjs__express\",\n \"feathersjs__primus-client\",\n \"feathersjs__primus\",\n \"feathersjs__rest-client\",\n \"feathersjs__socketio-client\",\n \"fetch-meta-tags\",\n \"fetch.io\",\n \"ffi\",\n \"ffmpeg__libav-core\",\n \"ffmpeg\",\n \"fhir\",\n \"fibjs\",\n \"figma\",\n \"filemaker-webviewer\",\n \"filesystem\",\n \"filewriter\",\n \"finch\",\n \"find-unused-sass-variables\",\n \"firefox-webext-browser\",\n \"firemonkey-browser\",\n \"flashpoint-launcher\",\n \"flight\",\n \"flipsnap\",\n \"float-equal\",\n \"flot\",\n \"flowdoc\",\n \"flowjs\",\n \"fm-websync\",\n \"fontkit\",\n \"fontoxml\",\n \"forge-viewer\",\n \"formidable\",\n \"formol\",\n \"foundation\",\n \"frctl__fractal\",\n \"frecency\",\n \"frida-gum\",\n \"friendly-errors-webpack-plugin\",\n \"fs-extra\",\n \"fslightbox-react\",\n \"ftdomdelegate\",\n \"fuzzy-finder\",\n \"gae.channel.api\",\n \"gamequery\",\n \"gandi-livedns\",\n \"gapi.analytics\",\n \"gapi.auth2\",\n \"gapi.calendar\",\n \"gapi.client.abusiveexperiencereport-v1\",\n \"gapi.client.acceleratedmobilepageurl-v1\",\n \"gapi.client.accessapproval-v1\",\n \"gapi.client.accesscontextmanager-v1\",\n \"gapi.client.accesscontextmanager-v1beta\",\n \"gapi.client.acmedns-v1\",\n \"gapi.client.adexchangebuyer2-v2beta1\",\n \"gapi.client.adexperiencereport-v1\",\n \"gapi.client.admin-datatransfer_v1\",\n \"gapi.client.admin-directory_v1\",\n \"gapi.client.admin-reports_v1\",\n \"gapi.client.admob-v1\",\n \"gapi.client.admob-v1beta\",\n \"gapi.client.adsense-v2\",\n \"gapi.client.adsensehost-v4.1\",\n \"gapi.client.advisorynotifications-v1\",\n \"gapi.client.alertcenter-v1beta1\",\n \"gapi.client.analytics-v3\",\n \"gapi.client.analyticsadmin-v1alpha\",\n \"gapi.client.analyticsadmin-v1beta\",\n \"gapi.client.analyticsdata-v1beta\",\n \"gapi.client.analyticshub-v1\",\n \"gapi.client.analyticshub-v1beta1\",\n \"gapi.client.analyticsreporting-v4\",\n \"gapi.client.androiddeviceprovisioning-v1\",\n \"gapi.client.androidenterprise-v1\",\n \"gapi.client.androidmanagement-v1\",\n \"gapi.client.androidpublisher-v3\",\n \"gapi.client.apigateway-v1\",\n \"gapi.client.apigateway-v1beta\",\n \"gapi.client.apigeeregistry-v1\",\n \"gapi.client.apikeys-v2\",\n \"gapi.client.appengine-v1\",\n \"gapi.client.appengine-v1alpha\",\n \"gapi.client.appengine-v1beta\",\n \"gapi.client.area120tables-v1alpha1\",\n \"gapi.client.artifactregistry-v1\",\n \"gapi.client.artifactregistry-v1beta1\",\n \"gapi.client.artifactregistry-v1beta2\",\n \"gapi.client.assuredworkloads-v1\",\n \"gapi.client.assuredworkloads-v1beta1\",\n \"gapi.client.authorizedbuyersmarketplace-v1\",\n \"gapi.client.baremetalsolution-v2\",\n \"gapi.client.batch-v1\",\n \"gapi.client.beyondcorp-v1\",\n \"gapi.client.beyondcorp-v1alpha\",\n \"gapi.client.bigquery-v2\",\n \"gapi.client.bigqueryconnection-v1beta1\",\n \"gapi.client.bigquerydatatransfer-v1\",\n \"gapi.client.bigqueryreservation-v1\",\n \"gapi.client.bigtableadmin-v2\",\n \"gapi.client.billingbudgets-v1\",\n \"gapi.client.billingbudgets-v1beta1\",\n \"gapi.client.binaryauthorization-v1\",\n \"gapi.client.binaryauthorization-v1beta1\",\n \"gapi.client.blogger-v2\",\n \"gapi.client.blogger-v3\",\n \"gapi.client.books-v1\",\n \"gapi.client.businessprofileperformance-v1\",\n \"gapi.client.calendar-v3\",\n \"gapi.client.certificatemanager-v1\",\n \"gapi.client.chat-v1\",\n \"gapi.client.chromemanagement-v1\",\n \"gapi.client.chromepolicy-v1\",\n \"gapi.client.chromeuxreport-v1\",\n \"gapi.client.civicinfo-v2\",\n \"gapi.client.classroom-v1\",\n \"gapi.client.cloudasset-v1\",\n \"gapi.client.cloudasset-v1beta1\",\n \"gapi.client.cloudasset-v1p1beta1\",\n \"gapi.client.cloudasset-v1p5beta1\",\n \"gapi.client.cloudasset-v1p7beta1\",\n \"gapi.client.cloudbilling-v1\",\n \"gapi.client.cloudbilling-v1beta\",\n \"gapi.client.cloudbuild-v1\",\n \"gapi.client.cloudchannel-v1\",\n \"gapi.client.clouddeploy-v1\",\n \"gapi.client.clouderrorreporting-v1beta1\",\n \"gapi.client.cloudfunctions-v1\",\n \"gapi.client.cloudfunctions-v2\",\n \"gapi.client.cloudfunctions-v2alpha\",\n \"gapi.client.cloudfunctions-v2beta\",\n \"gapi.client.cloudidentity-v1\",\n \"gapi.client.cloudidentity-v1beta1\",\n \"gapi.client.cloudiot-v1\",\n \"gapi.client.cloudkms-v1\",\n \"gapi.client.cloudprofiler-v2\",\n \"gapi.client.cloudresourcemanager-v1\",\n \"gapi.client.cloudresourcemanager-v1beta1\",\n \"gapi.client.cloudresourcemanager-v2\",\n \"gapi.client.cloudresourcemanager-v2beta1\",\n \"gapi.client.cloudresourcemanager-v3\",\n \"gapi.client.cloudscheduler-v1\",\n \"gapi.client.cloudscheduler-v1beta1\",\n \"gapi.client.cloudsearch-v1\",\n \"gapi.client.cloudshell-v1\",\n \"gapi.client.cloudsupport-v2beta\",\n \"gapi.client.cloudtasks-v2\",\n \"gapi.client.cloudtasks-v2beta2\",\n \"gapi.client.cloudtasks-v2beta3\",\n \"gapi.client.cloudtrace-v1\",\n \"gapi.client.cloudtrace-v2\",\n \"gapi.client.cloudtrace-v2beta1\",\n \"gapi.client.composer-v1\",\n \"gapi.client.composer-v1beta1\",\n \"gapi.client.compute-alpha\",\n \"gapi.client.compute-beta\",\n \"gapi.client.compute-v1\",\n \"gapi.client.connectors-v1\",\n \"gapi.client.connectors-v2\",\n \"gapi.client.contactcenteraiplatform-v1alpha1\",\n \"gapi.client.contactcenterinsights-v1\",\n \"gapi.client.container-v1\",\n \"gapi.client.container-v1beta1\",\n \"gapi.client.containeranalysis-v1\",\n \"gapi.client.containeranalysis-v1alpha1\",\n \"gapi.client.containeranalysis-v1beta1\",\n \"gapi.client.content-v2.1\",\n \"gapi.client.contentwarehouse-v1\",\n \"gapi.client.customsearch-v1\",\n \"gapi.client.datacatalog-v1\",\n \"gapi.client.datacatalog-v1beta1\",\n \"gapi.client.dataflow-v1b3\",\n \"gapi.client.dataform-v1beta1\",\n \"gapi.client.datafusion-v1\",\n \"gapi.client.datafusion-v1beta1\",\n \"gapi.client.datalabeling-v1beta1\",\n \"gapi.client.datalineage-v1\",\n \"gapi.client.datamigration-v1\",\n \"gapi.client.datamigration-v1beta1\",\n \"gapi.client.datapipelines-v1\",\n \"gapi.client.dataplex-v1\",\n \"gapi.client.dataproc-v1\",\n \"gapi.client.datastore-v1\",\n \"gapi.client.datastore-v1beta1\",\n \"gapi.client.datastore-v1beta3\",\n \"gapi.client.datastream-v1\",\n \"gapi.client.datastream-v1alpha1\",\n \"gapi.client.deploymentmanager-alpha\",\n \"gapi.client.deploymentmanager-v2\",\n \"gapi.client.deploymentmanager-v2beta\",\n \"gapi.client.dfareporting-v3.5\",\n \"gapi.client.dfareporting-v4\",\n \"gapi.client.dialogflow-v2\",\n \"gapi.client.dialogflow-v2beta1\",\n \"gapi.client.dialogflow-v3\",\n \"gapi.client.dialogflow-v3beta1\",\n \"gapi.client.digitalassetlinks-v1\",\n \"gapi.client.discovery-v1\",\n \"gapi.client.discoveryengine-v1alpha\",\n \"gapi.client.discoveryengine-v1beta\",\n \"gapi.client.displayvideo-v1\",\n \"gapi.client.displayvideo-v2\",\n \"gapi.client.dlp-v2\",\n \"gapi.client.dns-v1\",\n \"gapi.client.dns-v1beta2\",\n \"gapi.client.docs-v1\",\n \"gapi.client.documentai-v1\",\n \"gapi.client.documentai-v1beta2\",\n \"gapi.client.documentai-v1beta3\",\n \"gapi.client.domains-v1\",\n \"gapi.client.domains-v1alpha2\",\n \"gapi.client.domains-v1beta1\",\n \"gapi.client.domainsrdap-v1\",\n \"gapi.client.doubleclickbidmanager-v1.1\",\n \"gapi.client.doubleclickbidmanager-v2\",\n \"gapi.client.doubleclicksearch-v2\",\n \"gapi.client.drive-v2\",\n \"gapi.client.drive-v3\",\n \"gapi.client.driveactivity-v2\",\n \"gapi.client.drivelabels-v2\",\n \"gapi.client.drivelabels-v2beta\",\n \"gapi.client.essentialcontacts-v1\",\n \"gapi.client.eventarc-v1\",\n \"gapi.client.eventarc-v1beta1\",\n \"gapi.client.factchecktools-v1alpha1\",\n \"gapi.client.fcm-v1\",\n \"gapi.client.fcmdata-v1beta1\",\n \"gapi.client.file-v1\",\n \"gapi.client.file-v1beta1\",\n \"gapi.client.firebase-v1beta1\",\n \"gapi.client.firebaseappcheck-v1\",\n \"gapi.client.firebaseappcheck-v1beta\",\n \"gapi.client.firebaseappdistribution-v1\",\n \"gapi.client.firebasedatabase-v1beta\",\n \"gapi.client.firebasedynamiclinks-v1\",\n \"gapi.client.firebasehosting-v1\",\n \"gapi.client.firebasehosting-v1beta1\",\n \"gapi.client.firebaseml-v1\",\n \"gapi.client.firebaseml-v1beta2\",\n \"gapi.client.firebaserules-v1\",\n \"gapi.client.firebasestorage-v1beta\",\n \"gapi.client.firestore-v1\",\n \"gapi.client.firestore-v1beta1\",\n \"gapi.client.firestore-v1beta2\",\n \"gapi.client.fitness-v1\",\n \"gapi.client.forms-v1\",\n \"gapi.client.games_configuration-v1configuration\",\n \"gapi.client.games_management-v1management\",\n \"gapi.client.games-v1\",\n \"gapi.client.gameservices-v1\",\n \"gapi.client.gameservices-v1beta\",\n \"gapi.client.genomics-v2alpha1\",\n \"gapi.client.gkebackup-v1\",\n \"gapi.client.gkehub-v1\",\n \"gapi.client.gkehub-v1alpha\",\n \"gapi.client.gkehub-v1alpha2\",\n \"gapi.client.gkehub-v1beta\",\n \"gapi.client.gkehub-v1beta1\",\n \"gapi.client.gkehub-v2alpha\",\n \"gapi.client.gmail-v1\",\n \"gapi.client.gmailpostmastertools-v1\",\n \"gapi.client.gmailpostmastertools-v1beta1\",\n \"gapi.client.googleads-v10\",\n \"gapi.client.googleads-v11\",\n \"gapi.client.googleads-v12\",\n \"gapi.client.googleads-v13\",\n \"gapi.client.googleads-v4\",\n \"gapi.client.googleads-v5\",\n \"gapi.client.googleads-v6\",\n \"gapi.client.googleads-v7\",\n \"gapi.client.googleads-v8\",\n \"gapi.client.googleads-v9\",\n \"gapi.client.groupsmigration-v1\",\n \"gapi.client.groupssettings-v1\",\n \"gapi.client.healthcare-v1\",\n \"gapi.client.healthcare-v1beta1\",\n \"gapi.client.homegraph-v1\",\n \"gapi.client.iam-v1\",\n \"gapi.client.iam-v2\",\n \"gapi.client.iam-v2beta\",\n \"gapi.client.iamcredentials-v1\",\n \"gapi.client.iap-v1\",\n \"gapi.client.iap-v1beta1\",\n \"gapi.client.identitytoolkit-v1\",\n \"gapi.client.identitytoolkit-v2\",\n \"gapi.client.identitytoolkit-v3\",\n \"gapi.client.ids-v1\",\n \"gapi.client.indexing-v3\",\n \"gapi.client.integrations-v1alpha\",\n \"gapi.client.jobs-v3\",\n \"gapi.client.jobs-v3p1beta1\",\n \"gapi.client.jobs-v4\",\n \"gapi.client.keep-v1\",\n \"gapi.client.kgsearch-v1\",\n \"gapi.client.kmsinventory-v1\",\n \"gapi.client.language-v1\",\n \"gapi.client.language-v1beta2\",\n \"gapi.client.libraryagent-v1\",\n \"gapi.client.licensing-v1\",\n \"gapi.client.lifesciences-v2beta\",\n \"gapi.client.localservices-v1\",\n \"gapi.client.logging-v2\",\n \"gapi.client.managedidentities-v1\",\n \"gapi.client.managedidentities-v1alpha1\",\n \"gapi.client.managedidentities-v1beta1\",\n \"gapi.client.manufacturers-v1\",\n \"gapi.client.memcache-v1\",\n \"gapi.client.memcache-v1beta2\",\n \"gapi.client.metastore-v1\",\n \"gapi.client.metastore-v1alpha\",\n \"gapi.client.metastore-v1beta\",\n \"gapi.client.migrationcenter-v1alpha1\",\n \"gapi.client.ml-v1\",\n \"gapi.client.monitoring-v1\",\n \"gapi.client.monitoring-v3\",\n \"gapi.client.mybusinessaccountmanagement-v1\",\n \"gapi.client.mybusinessbusinesscalls-v1\",\n \"gapi.client.mybusinessbusinessinformation-v1\",\n \"gapi.client.mybusinesslodging-v1\",\n \"gapi.client.mybusinessnotifications-v1\",\n \"gapi.client.mybusinessplaceactions-v1\",\n \"gapi.client.mybusinessqanda-v1\",\n \"gapi.client.mybusinessverifications-v1\",\n \"gapi.client.networkconnectivity-v1\",\n \"gapi.client.networkconnectivity-v1alpha1\",\n \"gapi.client.networkmanagement-v1\",\n \"gapi.client.networkmanagement-v1beta1\",\n \"gapi.client.networksecurity-v1\",\n \"gapi.client.networksecurity-v1beta1\",\n \"gapi.client.networkservices-v1\",\n \"gapi.client.networkservices-v1beta1\",\n \"gapi.client.notebooks-v1\",\n \"gapi.client.notebooks-v2\",\n \"gapi.client.oauth2-v2\",\n \"gapi.client.ondemandscanning-v1\",\n \"gapi.client.ondemandscanning-v1beta1\",\n \"gapi.client.orgpolicy-v2\",\n \"gapi.client.osconfig-v1\",\n \"gapi.client.osconfig-v1alpha\",\n \"gapi.client.osconfig-v1beta\",\n \"gapi.client.oslogin-v1\",\n \"gapi.client.oslogin-v1alpha\",\n \"gapi.client.oslogin-v1beta\",\n \"gapi.client.pagespeedonline-v5\",\n \"gapi.client.paymentsresellersubscription-v1\",\n \"gapi.client.people-v1\",\n \"gapi.client.playcustomapp-v1\",\n \"gapi.client.playdeveloperreporting-v1alpha1\",\n \"gapi.client.playdeveloperreporting-v1beta1\",\n \"gapi.client.playintegrity-v1\",\n \"gapi.client.policyanalyzer-v1\",\n \"gapi.client.policyanalyzer-v1beta1\",\n \"gapi.client.policysimulator-v1\",\n \"gapi.client.policysimulator-v1alpha\",\n \"gapi.client.policysimulator-v1beta\",\n \"gapi.client.policytroubleshooter-v1\",\n \"gapi.client.policytroubleshooter-v1beta\",\n \"gapi.client.poly-v1\",\n \"gapi.client.privateca-v1\",\n \"gapi.client.privateca-v1beta1\",\n \"gapi.client.prod_tt_sasportal-v1alpha1\",\n \"gapi.client.publicca-v1alpha1\",\n \"gapi.client.publicca-v1beta1\",\n \"gapi.client.pubsub-v1\",\n \"gapi.client.pubsub-v1beta1a\",\n \"gapi.client.pubsub-v1beta2\",\n \"gapi.client.pubsublite-v1\",\n \"gapi.client.readerrevenuesubscriptionlinking-v1\",\n \"gapi.client.realtimebidding-v1\",\n \"gapi.client.realtimebidding-v1alpha\",\n \"gapi.client.recaptchaenterprise-v1\",\n \"gapi.client.recommendationengine-v1beta1\",\n \"gapi.client.recommender-v1\",\n \"gapi.client.recommender-v1beta1\",\n \"gapi.client.redis-v1\",\n \"gapi.client.redis-v1beta1\",\n \"gapi.client.reseller-v1\",\n \"gapi.client.resourcesettings-v1\",\n \"gapi.client.retail-v2\",\n \"gapi.client.retail-v2alpha\",\n \"gapi.client.retail-v2beta\",\n \"gapi.client.run-v1\",\n \"gapi.client.run-v2\",\n \"gapi.client.runtimeconfig-v1\",\n \"gapi.client.runtimeconfig-v1beta1\",\n \"gapi.client.safebrowsing-v4\",\n \"gapi.client.sasportal-v1alpha1\",\n \"gapi.client.script-v1\",\n \"gapi.client.searchads360-v0\",\n \"gapi.client.searchconsole-v1\",\n \"gapi.client.secretmanager-v1\",\n \"gapi.client.secretmanager-v1beta1\",\n \"gapi.client.securitycenter-v1\",\n \"gapi.client.securitycenter-v1beta1\",\n \"gapi.client.securitycenter-v1beta2\",\n \"gapi.client.serviceconsumermanagement-v1\",\n \"gapi.client.serviceconsumermanagement-v1beta1\",\n \"gapi.client.servicecontrol-v1\",\n \"gapi.client.servicecontrol-v2\",\n \"gapi.client.servicedirectory-v1\",\n \"gapi.client.servicedirectory-v1beta1\",\n \"gapi.client.servicemanagement-v1\",\n \"gapi.client.servicenetworking-v1\",\n \"gapi.client.servicenetworking-v1beta\",\n \"gapi.client.serviceusage-v1\",\n \"gapi.client.serviceusage-v1beta1\",\n \"gapi.client.sheets-v4\",\n \"gapi.client.site_verification-v1\",\n \"gapi.client.slides-v1\",\n \"gapi.client.smartdevicemanagement-v1\",\n \"gapi.client.sourcerepo-v1\",\n \"gapi.client.spanner-v1\",\n \"gapi.client.speech-v1\",\n \"gapi.client.speech-v1p1beta1\",\n \"gapi.client.sqladmin-v1\",\n \"gapi.client.sqladmin-v1beta4\",\n \"gapi.client.storage-v1\",\n \"gapi.client.storagetransfer-v1\",\n \"gapi.client.streetviewpublish-v1\",\n \"gapi.client.sts-v1\",\n \"gapi.client.sts-v1beta\",\n \"gapi.client.tagmanager-v1\",\n \"gapi.client.tagmanager-v2\",\n \"gapi.client.tasks-v1\",\n \"gapi.client.testing-v1\",\n \"gapi.client.texttospeech-v1\",\n \"gapi.client.texttospeech-v1beta1\",\n \"gapi.client.toolresults-v1beta3\",\n \"gapi.client.tpu-v1\",\n \"gapi.client.tpu-v1alpha1\",\n \"gapi.client.tpu-v2\",\n \"gapi.client.tpu-v2alpha1\",\n \"gapi.client.trafficdirector-v2\",\n \"gapi.client.transcoder-v1\",\n \"gapi.client.translate-v2\",\n \"gapi.client.translate-v3\",\n \"gapi.client.translate-v3beta1\",\n \"gapi.client.travelimpactmodel-v1\",\n \"gapi.client.vault-v1\",\n \"gapi.client.verifiedaccess-v1\",\n \"gapi.client.verifiedaccess-v2\",\n \"gapi.client.versionhistory-v1\",\n \"gapi.client.videointelligence-v1\",\n \"gapi.client.videointelligence-v1beta2\",\n \"gapi.client.videointelligence-v1p1beta1\",\n \"gapi.client.videointelligence-v1p2beta1\",\n \"gapi.client.videointelligence-v1p3beta1\",\n \"gapi.client.vision-v1\",\n \"gapi.client.vision-v1p1beta1\",\n \"gapi.client.vision-v1p2beta1\",\n \"gapi.client.vmmigration-v1\",\n \"gapi.client.vmmigration-v1alpha1\",\n \"gapi.client.vpcaccess-v1\",\n \"gapi.client.vpcaccess-v1beta1\",\n \"gapi.client.webfonts-v1\",\n \"gapi.client.webrisk-v1\",\n \"gapi.client.websecurityscanner-v1\",\n \"gapi.client.websecurityscanner-v1alpha\",\n \"gapi.client.websecurityscanner-v1beta\",\n \"gapi.client.workflowexecutions-v1\",\n \"gapi.client.workflowexecutions-v1beta\",\n \"gapi.client.workflows-v1\",\n \"gapi.client.workflows-v1beta\",\n \"gapi.client.workloadmanager-v1\",\n \"gapi.client.workstations-v1beta\",\n \"gapi.client.youtube_analytics-v2\",\n \"gapi.client.youtube-v3\",\n \"gapi.client.youtubereporting-v1\",\n \"gapi.client\",\n \"gapi.drive\",\n \"gapi.pagespeedonline\",\n \"gapi.people\",\n \"gapi.plus\",\n \"gapi.translate\",\n \"gapi.urlshortener\",\n \"gapi.youtube\",\n \"gapi.youtubeanalytics\",\n \"gaugejs\",\n \"generic-functions\",\n \"gensync\",\n \"gently\",\n \"geodesy\",\n \"geojson\",\n \"geometry-dom\",\n \"get-emoji\",\n \"get-folder-size\",\n \"get-sass-vars\",\n \"get-symbol-description\",\n \"git\",\n \"github-label-sync\",\n \"gldatepicker\",\n \"glidejs__glide\",\n \"glidejs\",\n \"go\",\n \"golang-wasm-exec\",\n \"google-ads-scripts\",\n \"google-adwords-scripts\",\n \"google-apps-script-oauth2\",\n \"google-cloud__datastore\",\n \"google-drive-realtime-api\",\n \"google-earth\",\n \"google-libphonenumber\",\n \"google-one-tap\",\n \"google-publisher-tag\",\n \"google.accounts\",\n \"google.analytics\",\n \"google.feeds\",\n \"google.fonts\",\n \"google.geolocation\",\n \"google.maps\",\n \"google.picker\",\n \"google.script.client-side\",\n \"google.visualization\",\n \"googlefc\",\n \"googlemaps.infobubble\",\n \"googlepay\",\n \"googletag\",\n \"gorilla-engine\",\n \"graphql-resolve-batch\",\n \"greasemonkey\",\n \"greasemonkey/v3\",\n \"grecaptcha\",\n \"grecaptcha/v0\",\n \"gregorian-calendar\",\n \"growing-io\",\n \"gsi\",\n \"gtag.js\",\n \"guacamole-common-js\",\n \"guid\",\n \"gulp-changed\",\n \"gulp-cheerio\",\n \"gulp-coffeeify\",\n \"gulp-dtsm\",\n \"gulp-espower\",\n \"gulp-help-doc\",\n \"gulp-imagemin\",\n \"gulp-load-plugins\",\n \"gulp-mocha\",\n \"gulp-ng-annotate\",\n \"gulp-remember\",\n \"gulp-sourcemaps\",\n \"gulp-task-listing\",\n \"gun\",\n \"har-format\",\n \"hard-source-webpack-plugin\",\n \"has-ansi\",\n \"has-package-exports\",\n \"hasher\",\n \"hashset\",\n \"hashtable\",\n \"hast\",\n \"hast/v2\",\n \"hasura\",\n \"haxball-headless-browser\",\n \"headroom\",\n \"hellosign-embedded\",\n \"hellosign-sdk\",\n \"heredatalens\",\n \"heremaps\",\n \"heroku-logger\",\n \"hl7\",\n \"hmscore__react-native-hms-push\",\n \"hookrouter\",\n \"html-escaper\",\n \"html-minifier-terser\",\n \"html-to-draftjs\",\n \"html-to-text\",\n \"html5plus\",\n \"htmlbars-inline-precompile\",\n \"htmltojsx\",\n \"hubspot-pace\",\n \"hummer-env\",\n \"hyperscript\",\n \"hypertext-application-language\",\n \"i18next-fs-backend\",\n \"i18next-sprintf-postprocessor\",\n \"iab-vpaid\",\n \"ibm_db\",\n \"ibm-mobilefirst\",\n \"identicon.js\",\n \"image-blob-reduce\",\n \"imagemagick\",\n \"imagemapster\",\n \"imagemin-svgo\",\n \"imagemin-upng\",\n \"imagemin-webp\",\n \"imgur-rest-api\",\n \"inboxsdk\",\n \"ineum\",\n \"inherits\",\n \"iniparser\",\n \"input-moment\",\n \"inputmask\",\n \"intercom-web\",\n \"intercomjs\",\n \"intl-unofficial-duration-unit-format\",\n \"invity-api\",\n \"ion-rangeslider/v1\",\n \"ioredis-mock\",\n \"iost-contract\",\n \"ipaiva\",\n \"iput\",\n \"is-gif\",\n \"is-touch-device\",\n \"isomorphic-fetch\",\n \"istanbul-middleware\",\n \"itemsjs\",\n \"itowns\",\n \"ix.js\",\n \"jackrabbit\",\n \"jake\",\n \"jasmine-enzyme\",\n \"jasmine-jquery\",\n \"jasmine\",\n \"jasmine/v1\",\n \"java-applet\",\n \"javascript-astar\",\n \"javascript-bignum\",\n \"javascript-time-ago\",\n \"jcof\",\n \"jdataview\",\n \"jee-jsf\",\n \"jest\",\n \"jfp\",\n \"jitsi-meet\",\n \"jqgrid\",\n \"jquery-alertable\",\n \"jquery-backstretch\",\n \"jquery-cropbox\",\n \"jquery-deferred\",\n \"jquery-deparam\",\n \"jquery-fullscreen\",\n \"jquery-galleria\",\n \"jquery-handsontable\",\n \"jquery-jcrop\",\n \"jquery-monthpicker\",\n \"jquery-timeentry\",\n \"jquery-toastmessage-plugin\",\n \"jquery-truncate-html\",\n \"jquery-urlparam\",\n \"jquery.address\",\n \"jquery.are-you-sure\",\n \"jquery.autosize\",\n \"jquery.base64\",\n \"jquery.bbq\",\n \"jquery.blockui\",\n \"jquery.bootstrap.wizard\",\n \"jquery.cleditor\",\n \"jquery.clientsidelogging\",\n \"jquery.color\",\n \"jquery.colorbox\",\n \"jquery.colorpicker\",\n \"jquery.contextmenu\",\n \"jquery.customselect\",\n \"jquery.cycle\",\n \"jquery.dropotron\",\n \"jquery.dynatree\",\n \"jquery.elang\",\n \"jquery.fancytree\",\n \"jquery.fileupload\",\n \"jquery.filtertable\",\n \"jquery.finger\",\n \"jquery.flagstrap\",\n \"jquery.form\",\n \"jquery.fullscreen\",\n \"jquery.gridster\",\n \"jquery.highlight-bartaz\",\n \"jquery.jnotify\",\n \"jquery.joyride\",\n \"jquery.jsignature\",\n \"jquery.leanmodal\",\n \"jquery.livestampjs\",\n \"jquery.menuaim\",\n \"jquery.mmenu\",\n \"jquery.notify\",\n \"jquery.notifybar\",\n \"jquery.noty\",\n \"jquery.pjax\",\n \"jquery.placeholder\",\n \"jquery.pnotify\",\n \"jquery.postmessage\",\n \"jquery.prettyphoto\",\n \"jquery.qrcode\",\n \"jquery.rowgrid\",\n \"jquery.simplemodal\",\n \"jquery.simplepagination\",\n \"jquery.simulate\",\n \"jquery.sortelements\",\n \"jquery.stickem\",\n \"jquery.superlink\",\n \"jquery.tagsmanager\",\n \"jquery.tile\",\n \"jquery.timeago\",\n \"jquery.timepicker\",\n \"jquery.timer\",\n \"jquery.tinycarousel\",\n \"jquery.tinyscrollbar\",\n \"jquery.tipsy\",\n \"jquery.tools\",\n \"jquery.total-storage\",\n \"jquery.ui.datetimepicker\",\n \"jquery.ui.layout\",\n \"jquery.uniform\",\n \"jquery.validation\",\n \"jquery.watermark\",\n \"jquery.window\",\n \"jquery/v1\",\n \"jquery/v2\",\n \"jquerymobile\",\n \"js-clipper\",\n \"js-schema\",\n \"js-url\",\n \"js.spec\",\n \"jsbn\",\n \"jsdeferred\",\n \"jsfl\",\n \"jsftp\",\n \"jslib-html5-camera-photo\",\n \"json-editor\",\n \"json-merge-patch\",\n \"json-patch\",\n \"json-pointer\",\n \"json-schema-faker\",\n \"json-schema\",\n \"json2csv__formatters\",\n \"json2csv__node\",\n \"json2csv__plainjs\",\n \"json2csv__transforms\",\n \"json2csv__whatwg\",\n \"jsoneditor-for-react\",\n \"jsoneditor\",\n \"jsoneditoronline\",\n \"jsonpath-plus\",\n \"jsonstream\",\n \"jsqrcode\",\n \"jstorage\",\n \"justifiedgallery\",\n \"jwplayer\",\n \"jxon\",\n \"k6\",\n \"kakao-js-sdk\",\n \"kakao-pixel\",\n \"kakaomaps\",\n \"kamailio-kemi\",\n \"kap-plugin\",\n \"katex\",\n \"keccak\",\n \"keep-network__tbtc.js\",\n \"kendo-ui\",\n \"kik-browser\",\n \"kineticjs\",\n \"knockback\",\n \"knockout-amd-helpers\",\n \"knockout-postbox\",\n \"knockout-secure-binding\",\n \"knockout.deferred.updates\",\n \"knockout.editables\",\n \"knockout.es5\",\n \"knockout.kogrid\",\n \"knockout.mapper\",\n \"knockout.mapping\",\n \"knockout.projections\",\n \"knockout.rx\",\n \"knockout.validation\",\n \"knockout.viewmodel\",\n \"knockstrap\",\n \"knuddels-userapp-backend-api\",\n \"knuddels-userapps-api\",\n \"knuddels-webapp-frontend-api\",\n \"koa-proxy\",\n \"koa\",\n \"kolite\",\n \"konami.js\",\n \"kos-core\",\n \"kss\",\n \"kythe\",\n \"latlon-geohash\",\n \"lazypipe\",\n \"leadfoot\",\n \"leaflet-areaselect\",\n \"leaflet-curve\",\n \"leaflet-editable/v0\",\n \"leaflet-gpx\",\n \"leaflet-label\",\n \"leaflet-offline\",\n \"leaflet.awesome-markers/v0\",\n \"leapmotionts\",\n \"lestate\",\n \"level-sublevel\",\n \"leveldown\",\n \"line-reader\",\n \"lint-staged\",\n \"lls\",\n \"loadable__webpack-plugin\",\n \"localizejs-library\",\n \"locutus\",\n \"logg\",\n \"login-with-amazon-sdk-browser\",\n \"lowlight\",\n \"ltx\",\n \"luxon\",\n \"macaca-circular-json\",\n \"magic-number\",\n \"magicmirror-module\",\n \"maildev\",\n \"mapbox__mapbox-sdk\",\n \"mapbox\",\n \"mapboxgl-spiderifier\",\n \"mapsjs\",\n \"markdown-it-lazy-headers\",\n \"markitup\",\n \"marv\",\n \"maskedinput\",\n \"material-ui-pagination\",\n \"material-ui-phone-number\",\n \"material-ui\",\n \"mathjax\",\n \"maxmsp\",\n \"mcustomscrollbar\",\n \"mdast\",\n \"mdx\",\n \"megajs\",\n \"mem-cache\",\n \"memdown\",\n \"mercadopago-sdk-js\",\n \"merge-img\",\n \"merge-stream\",\n \"mergerino\",\n \"messenger\",\n \"metascraper\",\n \"meteor-accounts-phone\",\n \"meteor-collection-hooks\",\n \"meteor-dburles-collection-helpers\",\n \"meteor-jboulhous-dev\",\n \"meteor-percolate-migrations\",\n \"meteor-persistent-session\",\n \"meteor-prime8consulting-oauth2\",\n \"meteor-publish-composite\",\n \"meteor-roles\",\n \"meteor-sjobs\",\n \"method-override\",\n \"mfiles\",\n \"micromodal\",\n \"microservice-utilities\",\n \"microsoft-ajax\",\n \"microsoft-graph\",\n \"microsoft-live-connect\",\n \"microsoft-sdk-soap\",\n \"microsoftteams\",\n \"milliseconds\",\n \"mimetext\",\n \"mina\",\n \"minapp-env\",\n \"minify\",\n \"miniprogram-wxs\",\n \"miniprogram\",\n \"mithril-global\",\n \"mixpanel-browser\",\n \"mixpanel\",\n \"mixto\",\n \"ml-classify-text\",\n \"mobile-messaging-cordova\",\n \"modular-scale\",\n \"module-deps\",\n \"mojang-gametest\",\n \"mojang-minecraft-server-admin\",\n \"mojang-minecraft-ui\",\n \"mojang-minecraft\",\n \"mojang-net\",\n \"moment-business\",\n \"moment-precise-range-plugin\",\n \"mongoose-autopopulate\",\n \"mongoose-deep-populate\",\n \"mongoose-promise\",\n \"motor-hat\",\n \"mpv-script\",\n \"ms.macro\",\n \"msgpack\",\n \"mu2\",\n \"mudder\",\n \"multiparty\",\n \"musickit-js\",\n \"musicmatch\",\n \"mysql-import\",\n \"name-initials\",\n \"natural-drag-animation-rbdnd\",\n \"natural-sort\",\n \"naver-whale\",\n \"navermaps\",\n \"nedb-logger\",\n \"neo4j\",\n \"netease-captcha\",\n \"netlify-auth-providers\",\n \"new-relic-browser\",\n \"next-nprogress\",\n \"ng-command\",\n \"ng-facebook\",\n \"ng-flow\",\n \"ng-grid\",\n \"ng-i18next\",\n \"ngbootbox\",\n \"ngprogress-lite\",\n \"ngreact\",\n \"ngtoaster\",\n \"ngwysiwyg\",\n \"nlcst\",\n \"nlcst/v1\",\n \"noble-mac\",\n \"node_redis\",\n \"node-fetch-cache\",\n \"node-fibers\",\n \"node-mysql-wrapper\",\n \"node-osc\",\n \"node-sass-middleware\",\n \"node-uuid\",\n \"nodegit\",\n \"nodeunit\",\n \"noisejs\",\n \"nomnom\",\n \"noteflight-client\",\n \"notie\",\n \"notify\",\n \"notifyjs-browser\",\n \"nova-editor-node\",\n \"nova-editor\",\n \"npm\",\n \"nunjucks-date\",\n \"nw.gui\",\n \"nw.js\",\n \"oauth.js\",\n \"object.groupby\",\n \"obs-studio\",\n \"office-js-preview\",\n \"office-js\",\n \"office-runtime\",\n \"offscreencanvas\",\n \"oidc-token-manager\",\n \"omit-empty\",\n \"onflow__flow-js-testing\",\n \"onscan.js\",\n \"opencc-js\",\n \"openfin\",\n \"openfin/v50\",\n \"openjscad\",\n \"openlayers/v2\",\n \"openrct2\",\n \"openssi-websdk\",\n \"opentok\",\n \"openui5\",\n \"optimist\",\n \"osmtogeojson\",\n \"ovenplayer\",\n \"paddle-js-browser\",\n \"page-flip\",\n \"pako\",\n \"paralleljs\",\n \"parcel-env\",\n \"parse-listing\",\n \"parse/v1\",\n \"passport-discord\",\n \"passport-github2\",\n \"passport-strategy\",\n \"passport-vkontakte\",\n \"passport\",\n \"pathfinding\",\n \"paypal-cordova-plugin\",\n \"payu-emea-sdk\",\n \"pebblekitjs\",\n \"pendo-io-browser\",\n \"pexrtc\",\n \"phoenix\",\n \"phonegap-facebook-plugin\",\n \"phonegap-nfc\",\n \"phonegap-plugin-barcodescanner\",\n \"phonegap\",\n \"photoshop\",\n \"pi-spi\",\n \"pinterest-sdk\",\n \"places\",\n \"plaid-link\",\n \"playerframework\",\n \"playmusic\",\n \"plupload\",\n \"plv8-internal\",\n \"polylabel\",\n \"polymer\",\n \"poool-access\",\n \"popcorn\",\n \"postcss-functions\",\n \"postcss-js\",\n \"posterus\",\n \"pouch-redux-middleware\",\n \"pouchdb-http\",\n \"preact-i18n\",\n \"precise\",\n \"preloadjs\",\n \"pretty-proptypes\",\n \"prismic-dom\",\n \"progressjs\",\n \"promise-fn-retry\",\n \"promise-pg\",\n \"promise-pool\",\n \"promise-sftp\",\n \"proper-url-join\",\n \"proposal-relative-indexing-method\",\n \"pump\",\n \"purl\",\n \"q-retry\",\n \"qlik-engineapi\",\n \"qlik-visualizationextensions\",\n \"query-string-params\",\n \"quicksettings\",\n \"qunit/v1\",\n \"rabbit.js\",\n \"radium\",\n \"radius\",\n \"random-string\",\n \"rangy\",\n \"raphael\",\n \"rappid\",\n \"rasa-webchat\",\n \"raty\",\n \"raygun4js\",\n \"rc-switch\",\n \"rc-tooltip\",\n \"react-add-to-calendar\",\n \"react-animals\",\n \"react-animate-on-scroll\",\n \"react-animated-modal\",\n \"react-aria-modal\",\n \"react-avatar-editor\",\n \"react-better-password\",\n \"react-bootstrap-range-slider\",\n \"react-cache\",\n \"react-calendar-heatmap\",\n \"react-canvas-draw\",\n \"react-coinhive\",\n \"react-color\",\n \"react-column-resizer\",\n \"react-compass\",\n \"react-cookiebot\",\n \"react-custom-scroll\",\n \"react-cytoscapejs\",\n \"react-date-range/v0\",\n \"react-document-meta\",\n \"react-document-title\",\n \"react-dom\",\n \"react-dual-listbox\",\n \"react-dynamic-number\",\n \"react-email-editor\",\n \"react-embed-gist\",\n \"react-facebook-login-component\",\n \"react-facebook-login\",\n \"react-flags-select\",\n \"react-github-button\",\n \"react-google-maps-loader\",\n \"react-google-places-suggest\",\n \"react-gtm-module\",\n \"react-highcharts\",\n \"react-highlight\",\n \"react-hint\",\n \"react-holder\",\n \"react-howler\",\n \"react-html5-camera-photo\",\n \"react-icofont\",\n \"react-icon-base\",\n \"react-image-gallery\",\n \"react-imgpro\",\n \"react-infinite\",\n \"react-input-mask\",\n \"react-input-mask/v1\",\n \"react-instantsearch\",\n \"react-js-table-with-csv-dl\",\n \"react-jsonschema-form\",\n \"react-key-handler\",\n \"react-leaflet-markercluster\",\n \"react-linkify\",\n \"react-loadable-visibility\",\n \"react-mailchimp-subscribe\",\n \"react-maskedinput\",\n \"react-native-bcrypt\",\n \"react-native-bluetooth-serial\",\n \"react-native-honeywell-scanner\",\n \"react-native-huawei-protected-apps\",\n \"react-native-material-ui\",\n \"react-native-modalbox\",\n \"react-native-modern-datepicker\",\n \"react-native-multi-slider\",\n \"react-native-orientation\",\n \"react-native-qrcode\",\n \"react-native-scrollable-tab-view\",\n \"react-native-signature-capture\",\n \"react-native-svg-animated-linear-gradient\",\n \"react-native-toast-native\",\n \"react-native\",\n \"react-native/v0.63\",\n \"react-native/v0.64\",\n \"react-native/v0.65\",\n \"react-native/v0.66\",\n \"react-native/v0.67\",\n \"react-native/v0.68\",\n \"react-native/v0.69\",\n \"react-native/v0.70\",\n \"react-native/v0.71\",\n \"react-no-ssr\",\n \"react-notifications-component\",\n \"react-onsenui\",\n \"react-outside-click-handler\",\n \"react-paginate\",\n \"react-paginate/v5\",\n \"react-payment-inputs\",\n \"react-phone-number-input\",\n \"react-pie-menu\",\n \"react-plyr\",\n \"react-pointable\",\n \"react-recaptcha-v3\",\n \"react-recompose\",\n \"react-responsive-spritesheet\",\n \"react-router-navigation-core\",\n \"react-router-navigation\",\n \"react-router-redux\",\n \"react-rte\",\n \"react-s-alert\",\n \"react-show-more\",\n \"react-sidebar\",\n \"react-signature-canvas\",\n \"react-sortable-tree-theme-file-explorer\",\n \"react-sortable-tree\",\n \"react-splitter-layout\",\n \"react-sticky-el\",\n \"react-svg-radar-chart\",\n \"react-swf\",\n \"react-switch-case\",\n \"react-syntax-highlighter\",\n \"react-tag-autocomplete\",\n \"react-tag-autocomplete/v5\",\n \"react-tag-input\",\n \"react-tap-event-plugin\",\n \"react-text-mask\",\n \"react-text-truncate\",\n \"react-touch\",\n \"react-transition-group\",\n \"react-type-animation\",\n \"react-typical\",\n \"react-typing-effect\",\n \"react-user-tour\",\n \"react-widgets-moment\",\n \"react-window-size\",\n \"react-world-flags\",\n \"react-youtube-embed\",\n \"readline-transform\",\n \"readmore-js\",\n \"recharts-scale\",\n \"recompose\",\n \"recurly__recurly-js\",\n \"redux-cablecar\",\n \"redux-form/v7\",\n \"redux-localstorage-debounce\",\n \"redux-localstorage\",\n \"redux-mock-store/v0\",\n \"redux-persist-transform-encrypt\",\n \"redux-storage\",\n \"remote-git-tags\",\n \"remotedev-serialize\",\n \"require-hacker\",\n \"resize-observer-browser\",\n \"resolve\",\n \"rest\",\n \"restful.js\",\n \"resx\",\n \"rewire\",\n \"rickshaw\",\n \"riderize__passport-strava-oauth2\",\n \"riot-api-nodejs\",\n \"riot-games-api\",\n \"riotjs\",\n \"rison\",\n \"rn-fetch-blob\",\n \"rocksdb\",\n \"roll-a-die\",\n \"rollup-plugin-node-globals\",\n \"rollup-plugin-progress\",\n \"rollup-plugin-svelte-svg\",\n \"rollup-plugin-url\",\n \"rosie\",\n \"route-parser\",\n \"routie\",\n \"royalslider\",\n \"run-sequence\",\n \"rx-jquery\",\n \"rx-node\",\n \"s3-uploader\",\n \"safari-extension-content\",\n \"safari-extension\",\n \"sammy\",\n \"sarif\",\n \"sat\",\n \"satnav\",\n \"scaleway-functions\",\n \"schluessel\",\n \"scorm-browser\",\n \"screeps-arena\",\n \"scriptable-ios\",\n \"scriptjs\",\n \"scrollbooster\",\n \"scroller\",\n \"scrollreveal\",\n \"scrolltofixed\",\n \"segment-analytics\",\n \"sencha_touch\",\n \"sequencify\",\n \"serverless\",\n \"servicenow-london\",\n \"servicenow\",\n \"sfdx-faye\",\n \"shakacode__recompose\",\n \"sharepoint\",\n \"shexj\",\n \"short-hash\",\n \"shortid\",\n \"siema\",\n \"sigmajs\",\n \"signalfx-collect\",\n \"signalr/v1\",\n \"simpl-schema\",\n \"simple-cw-node\",\n \"simple-url-cache\",\n \"simple-xml\",\n \"simpleddp\",\n \"sinon\",\n \"sipml\",\n \"siren-parser\",\n \"six-runtime\",\n \"sketchapp\",\n \"ski\",\n \"sleep\",\n \"slice-ansi\",\n \"smallwei__avue\",\n \"smart-fox-server\",\n \"snapchat-lens-studio\",\n \"snowpack-env\",\n \"socket.io.users\",\n \"solid-auth-client\",\n \"soundjs\",\n \"space-pen\",\n \"spectrum\",\n \"sphere-engine-browser\",\n \"sphere-engine-browser/v1\",\n \"splitpanes/v1\",\n \"spotify-web-playback-sdk\",\n \"spreedly-iframe-browser\",\n \"srtparsejs\",\n \"stampit\",\n \"stamplay-js-sdk\",\n \"stream-meter\",\n \"stream-series\",\n \"stream-to-array/v0\",\n \"strip-final-newline\",\n \"stripe-v2\",\n \"stripe-v3\",\n \"stripejs\",\n \"stronghold-pay-js\",\n \"struct\",\n \"styled-components-react-native\",\n \"styled-components\",\n \"styled-components/v3\",\n \"styled-react-modal\",\n \"stylenames\",\n \"stylis\",\n \"succinct\",\n \"suitescript\",\n \"svg-arc-to-cubic-bezier\",\n \"svg-injector\",\n \"svg-maps__common\",\n \"svgjs.draggable\",\n \"svgjs.resize\",\n \"swagger-schema-official\",\n \"swagger2openapi\",\n \"swig\",\n \"swipe\",\n \"swipeview\",\n \"switchery\",\n \"swiz\",\n \"sylvester\",\n \"systemjs\",\n \"tableau-js-api\",\n \"tableau\",\n \"tampermonkey\",\n \"tap\",\n \"tape\",\n \"tasker-js-runner\",\n \"tea-merge\",\n \"teechart\",\n \"telegram-web-app\",\n \"tern\",\n \"throttle-debounce\",\n \"thunderbird-webext-browser\",\n \"timed-cache\",\n \"timelinejs\",\n \"timezone-js\",\n \"tinajs__tina-redux\",\n \"titanium\",\n \"tizen-accessory\",\n \"to-title-case-gouch\",\n \"tooltipster\",\n \"topojson-specification\",\n \"topojson\",\n \"torrent-stream\",\n \"tpdirect\",\n \"trayballoon\",\n \"trie-prefix-tree\",\n \"trim\",\n \"tryghost__content-api\",\n \"twine-sugarcube\",\n \"twitch-browser\",\n \"twitch-ext\",\n \"twitter-for-web\",\n \"typography\",\n \"tz-format\",\n \"uikit\",\n \"umami-browser\",\n \"umbraco\",\n \"underscore-ko\",\n \"underscore.string\",\n \"underscore\",\n \"unescape-js\",\n \"ungap__structured-clone\",\n \"uni-app\",\n \"unist\",\n \"unist/v2\",\n \"unity-webapi\",\n \"unpaginated\",\n \"url-format-lax\",\n \"url-join/v0\",\n \"url-parse-lax\",\n \"url-state\",\n \"urlparser\",\n \"urlrouter\",\n \"usage\",\n \"use-combined-reducers\",\n \"use-global-hook\",\n \"use-persisted-state\",\n \"use-sync-external-store\",\n \"user-event\",\n \"utils-merge\",\n \"uws\",\n \"valdr-message\",\n \"valerie-browser\",\n \"vanillajs-datepicker\",\n \"venn\",\n \"verovio\",\n \"video.js\",\n \"videojs-contrib-quality-levels\",\n \"viewporter\",\n \"vinyl-paths\",\n \"vision/v4\",\n \"vk-openapi\",\n \"vortex-web-client\",\n \"vscode-notebook-renderer\",\n \"vscode-webview\",\n \"vscode\",\n \"vue-datetime\",\n \"vue-json-compare\",\n \"vue-ls\",\n \"vue-scroll-up\",\n \"vue-select\",\n \"vue-splitpane\",\n \"vue-tel-input\",\n \"vue2-editor\",\n \"w3c-css-typed-object-model-level-1\",\n \"w3c-generic-sensor\",\n \"w3c-image-capture\",\n \"w3c-web-hid\",\n \"w3c-web-nfc\",\n \"w3c-web-serial\",\n \"w3c-web-usb\",\n \"wait-please\",\n \"waitme\",\n \"wallabyjs\",\n \"wampy\",\n \"weapp-api\",\n \"web-app-manifest\",\n \"web-ie11\",\n \"web-locks-api\",\n \"webappsec-credential-management\",\n \"webassembly-web-api\",\n \"webcl\",\n \"webcrypto\",\n \"webgl-ext\",\n \"webgl2-compute\",\n \"webgl2\",\n \"webidl2\",\n \"webos-service\",\n \"webpack-env\",\n \"webscopeio__react-textarea-autocomplete\",\n \"webscreens-window-placement\",\n \"websql\",\n \"webvr-api\",\n \"webxr\",\n \"wechat-miniprogram-xmly\",\n \"wechat-miniprogram\",\n \"wegame-api\",\n \"weixin-app\",\n \"wepy-redux\",\n \"when\",\n \"wicg-entries-api\",\n \"wicg-file-system-access\",\n \"wicg-js-self-profiling\",\n \"wicg-mediasession\",\n \"wicg-web-app-launch\",\n \"wiiu\",\n \"winbox\",\n \"windows-script-host\",\n \"winjs/v1\",\n \"winjs/v2\",\n \"winrt-uwp\",\n \"winrt\",\n \"winston-dynamodb\",\n \"wistia-player-browser\",\n \"wnumb\",\n \"wonder.js\",\n \"woosmap.map\",\n \"wordpress__admin\",\n \"wordpress__customize-browser\",\n \"wordwrapjs\",\n \"workerb-api\",\n \"workgrid-core\",\n \"workgrid-toolbar\",\n \"wrap-ansi\",\n \"wrench\",\n \"write-file-webpack-plugin\",\n \"wx-js-sdk-browser\",\n \"wx-js-sdk-dt\",\n \"xast\",\n \"xast/v1\",\n \"xelib\",\n \"xk6-sql-browser\",\n \"xmltojson\",\n \"xmpp__jid\",\n \"xrm\",\n \"xrm/v6\",\n \"xrm/v7\",\n \"xrm/v8\",\n \"xsockets\",\n \"xss-filters\",\n \"yandex-maps\",\n \"yandex-metrika-tag\",\n \"yandex-money-sdk\",\n \"yargs-parser\",\n \"yargs-parser/v20\",\n \"yargs/v16\",\n \"yargs/v16\",\n \"ydn-db\",\n \"yelp-fusion-plus\",\n \"youtube-player\",\n \"zchat-browser\",\n \"zedit__upf\",\n \"zengin-code\",\n \"zip.js\",\n \"zmq\",\n \"zumly\",\n \"zwjsbridge\",\n \"zwlog-browser\"\n ]\n}\n", + "74fbc3d0e182be4e15cd85cf84dc0d02ba6b78f3:attw.json": "{\n \"ignoreRules\": [\n \"no-resolution\",\n \"cjs-only-exports-default\",\n \"unexpected-module-syntax\",\n \"cjs-resolves-to-esm\"\n ],\n \"failingPackages\": [\n \"absolute\",\n \"acc-wizard\",\n \"activex-access\",\n \"activex-adodb\",\n \"activex-adox\",\n \"activex-dao\",\n \"activex-diskquota\",\n \"activex-excel\",\n \"activex-faxcomexlib\",\n \"activex-infopath\",\n \"activex-interop\",\n \"activex-iwshruntimelibrary\",\n \"activex-libreoffice\",\n \"activex-msforms\",\n \"activex-mshtml\",\n \"activex-msxml2\",\n \"activex-office\",\n \"activex-outlook\",\n \"activex-powerpoint\",\n \"activex-scripting\",\n \"activex-shdocvw\",\n \"activex-shell\",\n \"activex-stdole\",\n \"activex-vbide\",\n \"activex-wia\",\n \"activex-word\",\n \"add2home\",\n \"af-utils__react-table\",\n \"af-utils__react-virtual-headless\",\n \"af-utils__react-virtual-list\",\n \"ahoy.js\",\n \"akamai-edgeworkers\",\n \"akumina-core\",\n \"akumina-core/v4\",\n \"alcides\",\n \"alipayjssdk\",\n \"allure-js-commons\",\n \"alpinejs\",\n \"amap-js-api-arrival-range\",\n \"amap-js-api-autocomplete\",\n \"amap-js-api-city-search\",\n \"amap-js-api-control-bar\",\n \"amap-js-api-district-search\",\n \"amap-js-api-driving\",\n \"amap-js-api-geocoder\",\n \"amap-js-api-geolocation\",\n \"amap-js-api-heatmap\",\n \"amap-js-api-indoor-map\",\n \"amap-js-api-line-search\",\n \"amap-js-api-map-type\",\n \"amap-js-api-map3d\",\n \"amap-js-api-overview\",\n \"amap-js-api-place-search\",\n \"amap-js-api-riding\",\n \"amap-js-api-scale\",\n \"amap-js-api-station-search\",\n \"amap-js-api-tool-bar\",\n \"amap-js-api-transfer\",\n \"amap-js-api\",\n \"amap-js-sdk\",\n \"amcharts\",\n \"amplifier\",\n \"amplify-deferred\",\n \"amplify\",\n \"amqplib\",\n \"angular-agility\",\n \"angular-bootstrap-calendar\",\n \"angular-dialog-service\",\n \"angular-gridster\",\n \"angular-httpi\",\n \"angular-idle\",\n \"angular-meteor\",\n \"angular-notifications\",\n \"angular-notify\",\n \"angular-odata-resources\",\n \"angular-q-spread\",\n \"angular-ui-notification\",\n \"angular-ui-router\",\n \"angular-ui-tree\",\n \"angular.throttle\",\n \"angularfire\",\n \"angularlocalstorage\",\n \"ansicolors\",\n \"antlr4\",\n \"aos\",\n \"apca-w3\",\n \"apigee-access\",\n \"app-module-path\",\n \"app-root-dir\",\n \"appframework\",\n \"apple-mapkit-js-browser\",\n \"apple-music-api\",\n \"apple-signin-api\",\n \"applepayjs\",\n \"appletvjs\",\n \"arangodb\",\n \"arbiter\",\n \"arcgis-rest-api\",\n \"architect\",\n \"array-sort\",\n \"assertsharp\",\n \"async-polling\",\n \"async-retry\",\n \"atmosphere.js\",\n \"atom\",\n \"atpl\",\n \"atvlegacycontentkit\",\n \"auth0.widget\",\n \"aws-cloudfront-function\",\n \"aws-sdk2-types\",\n \"aws-synthetics-puppeteer\",\n \"axios-cancel\",\n \"azdata\",\n \"azure-mobile-services-client\",\n \"azure-sb\",\n \"babel-plugin-syntax-jsx\",\n \"babel-types\",\n \"babylon-walk\",\n \"backbone.localstorage\",\n \"backgrid\",\n \"backstopjs\",\n \"baidu-app\",\n \"baidumap-web-sdk\",\n \"barnard59-base\",\n \"barnard59-core\",\n \"barnard59-graph-store\",\n \"barnard59-validate-shacl\",\n \"barnard59\",\n \"bbcode-to-react\",\n \"behavior3\",\n \"better-curry\",\n \"better-scroll\",\n \"beyonk__gdpr-cookie-consent-banner\",\n \"bezier-js\",\n \"bgiframe\",\n \"bidirectional-map\",\n \"big.js\",\n \"bigint\",\n \"bignum\",\n \"bitcoin-computer__lib\",\n \"blazor__javascript-interop\",\n \"blissfuljs\",\n \"bluebird-global\",\n \"bmapgl-browser\",\n \"boolify-string\",\n \"bootstrap-maxlength\",\n \"bootstrap-switch\",\n \"bootstrap-touchspin\",\n \"bootstrap-treeview\",\n \"bootstrap.paginator\",\n \"bootstrap.timepicker\",\n \"bootstrap.v3.datetimepicker\",\n \"bootstrap.v3.datetimepicker/v3\",\n \"box2d\",\n \"brainhubeu__react-carousel\",\n \"bramus__pagination-sequence\",\n \"breeze\",\n \"browserify\",\n \"bundle-id\",\n \"bundle-name\",\n \"bunyan-blackhole\",\n \"bwip-js\",\n \"byte-size\",\n \"call-bind\",\n \"calq\",\n \"cannon\",\n \"canvasjs\",\n \"carbon__layout\",\n \"carbon__motion\",\n \"carbon__themes\",\n \"carbon__type\",\n \"casperjs\",\n \"chai-datetime\",\n \"chai\",\n \"channel-io\",\n \"chartjs-plugin-colorschemes\",\n \"chartjs-plugin-doughnutlabel-rebourne\",\n \"chayns\",\n \"chess.js\",\n \"chessboardjs\",\n \"chocolatechipjs\",\n \"chrome-apps\",\n \"chromecast-caf-receiver\",\n \"chromecast-caf-sender\",\n \"chui\",\n \"cldr\",\n \"clearbladejs-client\",\n \"clearbladejs-node\",\n \"clearbladejs-server\",\n \"closure-compiler\",\n \"cloudflare-apps\",\n \"cloudflare-turnstile\",\n \"cloudfour__simple-svg-placeholder\",\n \"cloudinary-uploadwidget-browser\",\n \"cls-hooked\",\n \"cobe\",\n \"colab\",\n \"collectionsjs\",\n \"color/v0\",\n \"com.wikitude.phonegap.wikitudeplugin\",\n \"combine-reducers\",\n \"commangular\",\n \"compose-function\",\n \"conditional\",\n \"configs-overload\",\n \"connect-flash\",\n \"consumer-data-standards\",\n \"content-type\",\n \"contextjs\",\n \"cookiebot-sdk\",\n \"cookieclicker\",\n \"cordova-ionic\",\n \"cordova-plugin-background-mode\",\n \"cordova-plugin-canvascamera\",\n \"cordova-plugin-email-composer\",\n \"cordova-plugin-ibeacon\",\n \"cordova-plugin-mapsforge\",\n \"cordova-plugin-ms-adal\",\n \"cornerstone-core\",\n \"countdown\",\n \"country-flag-icons\",\n \"country-list/v1\",\n \"cradle\",\n \"crc\",\n \"createjs-lib\",\n \"critters-webpack-plugin\",\n \"crossfilter\",\n \"crossroads\",\n \"crypto-ld\",\n \"cryptojs\",\n \"css-declaration-sorter\",\n \"css-font-loading-module\",\n \"css-modules\",\n \"css-tree\",\n \"css\",\n \"csso\",\n \"culori\",\n \"custom-functions-runtime\",\n \"cybozulabs-md5\",\n \"cyclonedx\",\n \"d3-array\",\n \"d3-axis\",\n \"d3-box\",\n \"d3-brush\",\n \"d3-chord\",\n \"d3-color\",\n \"d3-contour\",\n \"d3-delaunay\",\n \"d3-dispatch\",\n \"d3-drag\",\n \"d3-dsv\",\n \"d3-ease\",\n \"d3-fetch\",\n \"d3-force\",\n \"d3-format\",\n \"d3-geo\",\n \"d3-hierarchy\",\n \"d3-indirections\",\n \"d3-interpolate\",\n \"d3-path\",\n \"d3-polygon\",\n \"d3-quadtree\",\n \"d3-random\",\n \"d3-scale-chromatic\",\n \"d3-scale\",\n \"d3-selection\",\n \"d3-shape\",\n \"d3-time-format\",\n \"d3-time\",\n \"d3-timer\",\n \"d3-tip\",\n \"d3-transition\",\n \"d3-zoom\",\n \"d3.slider\",\n \"d3\",\n \"dadata-api\",\n \"data-driven\",\n \"dateformat\",\n \"daum-postcode\",\n \"db-migrate-base\",\n \"db-migrate-pg\",\n \"decorum\",\n \"deep-freeze\",\n \"deezer-sdk\",\n \"default-browser-id\",\n \"default-gateway\",\n \"deku\",\n \"delaunator\",\n \"delowar__react-circle-progressbar\",\n \"deoxxa-content-type\",\n \"deployjava\",\n \"desmos\",\n \"devexpress-aspnetcore-bootstrap\",\n \"devexpress-web\",\n \"devexpress-web/v161\",\n \"devexpress-web/v162\",\n \"devexpress-web/v171\",\n \"devexpress-web/v172\",\n \"devexpress-web/v181\",\n \"devexpress-web/v182\",\n \"devexpress-web/v191\",\n \"devexpress-web/v192\",\n \"devexpress-web/v201\",\n \"df-visible\",\n \"dhtmlxgantt\",\n \"dhtmlxscheduler\",\n \"dialogify-browser\",\n \"digital-goods-browser\",\n \"doccookies\",\n \"dock-spawn\",\n \"documentdb-server\",\n \"dom-background-sync\",\n \"dom-chromium-installation-events\",\n \"dom-inputevent\",\n \"dom-mediacapture-record\",\n \"dom-mediacapture-transform\",\n \"dom-navigation-preload\",\n \"dom-navigation\",\n \"dom-screen-wake-lock\",\n \"dom-serial\",\n \"dom-speech-recognition\",\n \"dom-to-image\",\n \"dom-trust-token\",\n \"dom-view-transitions\",\n \"dom-webcodecs\",\n \"domurl\",\n \"dotenv-flow\",\n \"double-ended-queue\",\n \"doubleclick-gpt\",\n \"dplayer\",\n \"draggabilly\",\n \"drawflow\",\n \"dropbox-chooser\",\n \"dropboxjs\",\n \"dts-bundle\",\n \"duo_web_sdk\",\n \"durandal\",\n \"durandal/v1\",\n \"dvtng-jss\",\n \"dw-bxslider-4\",\n \"dygraphs\",\n \"dymo-label-framework\",\n \"dynatable\",\n \"dynmap\",\n \"easy-api-request\",\n \"easy-jsend\",\n \"easy-speech\",\n \"easy-xapi-utils\",\n \"easy-xapi\",\n \"editorjs__header\",\n \"egg.js\",\n \"ej.web.all\",\n \"ejs-locals\",\n \"email-prompt\",\n \"ember__application\",\n \"ember__array\",\n \"ember__component\",\n \"ember__controller\",\n \"ember__debug\",\n \"ember__destroyable\",\n \"ember__destroyable/v3\",\n \"ember__engine\",\n \"ember__error\",\n \"ember__error/v3\",\n \"ember__helper\",\n \"ember__modifier\",\n \"ember__object\",\n \"ember__ordered-set\",\n \"ember__ordered-set/v3\",\n \"ember__owner\",\n \"ember__polyfills\",\n \"ember__polyfills/v3\",\n \"ember__routing\",\n \"ember__runloop\",\n \"ember__service\",\n \"ember__string/v2\",\n \"ember__template\",\n \"ember__template/v3\",\n \"ember__test\",\n \"ember__utils\",\n \"ember__utils/v3\",\n \"ember-changeset-validations\",\n \"ember-data__adapter\",\n \"ember-data__adapter/v3\",\n \"ember-data__model\",\n \"ember-data__model/v3\",\n \"ember-data__serializer\",\n \"ember-data__serializer/v3\",\n \"ember-data__store\",\n \"ember-data__store/v3\",\n \"ember-data\",\n \"ember-data/v2\",\n \"ember-data/v3\",\n \"ember-feature-flags\",\n \"ember-feature-flags/v3\",\n \"ember-task-scheduler\",\n \"ember-test-helpers\",\n \"ember-test-helpers/v0\",\n \"ember-testing-helpers\",\n \"ember\",\n \"ember/v1\",\n \"ember/v2\",\n \"ember/v3\",\n \"emissary\",\n \"emscripten\",\n \"encoding-down\",\n \"engine-check\",\n \"epub\",\n \"eq.js\",\n \"error-cause\",\n \"es-get-iterator\",\n \"es6-weak-map\",\n \"esbuild-copy-static-files\",\n \"esbuild-plugin-import-map\",\n \"eslint__eslintrc\",\n \"eslint-utils\",\n \"espruino\",\n \"estree-jsx\",\n \"estree\",\n \"evaporate\",\n \"express-async-wrap\",\n \"express-brute-memcached\",\n \"express-serve-static-core\",\n \"express-socket.io-session\",\n \"express-status-monitor\",\n \"express-wechat-access\",\n \"extensible-duck\",\n \"extjs\",\n \"eyevinn-iaf\",\n \"facebook-instant-games\",\n \"facebook-js-sdk\",\n \"facebook-pixel\",\n \"falcor-http-datasource\",\n \"famous\",\n \"fancade-editor\",\n \"fancybox\",\n \"farbtastic\",\n \"fast-levenshtein\",\n \"favico.js\",\n \"feather-route-matcher\",\n \"featherlight\",\n \"feathersjs__authentication-client\",\n \"feathersjs__authentication-jwt\",\n \"feathersjs__authentication-local\",\n \"feathersjs__authentication-oauth1\",\n \"feathersjs__authentication-oauth2\",\n \"feathersjs__authentication\",\n \"feathersjs__configuration\",\n \"feathersjs__express\",\n \"feathersjs__primus-client\",\n \"feathersjs__primus\",\n \"feathersjs__rest-client\",\n \"feathersjs__socketio-client\",\n \"fetch-meta-tags\",\n \"fetch.io\",\n \"ffi\",\n \"ffmpeg__libav-core\",\n \"ffmpeg\",\n \"fhir\",\n \"fibjs\",\n \"figma\",\n \"filemaker-webviewer\",\n \"filesystem\",\n \"filewriter\",\n \"finch\",\n \"find-unused-sass-variables\",\n \"firefox-webext-browser\",\n \"firemonkey-browser\",\n \"flashpoint-launcher\",\n \"flight\",\n \"flipsnap\",\n \"float-equal\",\n \"flot\",\n \"flowdoc\",\n \"flowjs\",\n \"fm-websync\",\n \"fontkit\",\n \"fontoxml\",\n \"forge-viewer\",\n \"formidable\",\n \"formol\",\n \"foundation\",\n \"frctl__fractal\",\n \"frecency\",\n \"frida-gum\",\n \"friendly-errors-webpack-plugin\",\n \"fs-extra\",\n \"fslightbox-react\",\n \"ftdomdelegate\",\n \"fuzzy-finder\",\n \"gae.channel.api\",\n \"gamequery\",\n \"gandi-livedns\",\n \"gapi.analytics\",\n \"gapi.auth2\",\n \"gapi.calendar\",\n \"gapi.client.abusiveexperiencereport-v1\",\n \"gapi.client.acceleratedmobilepageurl-v1\",\n \"gapi.client.accessapproval-v1\",\n \"gapi.client.accesscontextmanager-v1\",\n \"gapi.client.accesscontextmanager-v1beta\",\n \"gapi.client.acmedns-v1\",\n \"gapi.client.adexchangebuyer2-v2beta1\",\n \"gapi.client.adexperiencereport-v1\",\n \"gapi.client.admin-datatransfer_v1\",\n \"gapi.client.admin-directory_v1\",\n \"gapi.client.admin-reports_v1\",\n \"gapi.client.admob-v1\",\n \"gapi.client.admob-v1beta\",\n \"gapi.client.adsense-v2\",\n \"gapi.client.adsensehost-v4.1\",\n \"gapi.client.advisorynotifications-v1\",\n \"gapi.client.alertcenter-v1beta1\",\n \"gapi.client.analytics-v3\",\n \"gapi.client.analyticsadmin-v1alpha\",\n \"gapi.client.analyticsadmin-v1beta\",\n \"gapi.client.analyticsdata-v1beta\",\n \"gapi.client.analyticshub-v1\",\n \"gapi.client.analyticshub-v1beta1\",\n \"gapi.client.analyticsreporting-v4\",\n \"gapi.client.androiddeviceprovisioning-v1\",\n \"gapi.client.androidenterprise-v1\",\n \"gapi.client.androidmanagement-v1\",\n \"gapi.client.androidpublisher-v3\",\n \"gapi.client.apigateway-v1\",\n \"gapi.client.apigateway-v1beta\",\n \"gapi.client.apigeeregistry-v1\",\n \"gapi.client.apikeys-v2\",\n \"gapi.client.appengine-v1\",\n \"gapi.client.appengine-v1alpha\",\n \"gapi.client.appengine-v1beta\",\n \"gapi.client.area120tables-v1alpha1\",\n \"gapi.client.artifactregistry-v1\",\n \"gapi.client.artifactregistry-v1beta1\",\n \"gapi.client.artifactregistry-v1beta2\",\n \"gapi.client.assuredworkloads-v1\",\n \"gapi.client.assuredworkloads-v1beta1\",\n \"gapi.client.authorizedbuyersmarketplace-v1\",\n \"gapi.client.baremetalsolution-v2\",\n \"gapi.client.batch-v1\",\n \"gapi.client.beyondcorp-v1\",\n \"gapi.client.beyondcorp-v1alpha\",\n \"gapi.client.bigquery-v2\",\n \"gapi.client.bigqueryconnection-v1beta1\",\n \"gapi.client.bigquerydatatransfer-v1\",\n \"gapi.client.bigqueryreservation-v1\",\n \"gapi.client.bigtableadmin-v2\",\n \"gapi.client.billingbudgets-v1\",\n \"gapi.client.billingbudgets-v1beta1\",\n \"gapi.client.binaryauthorization-v1\",\n \"gapi.client.binaryauthorization-v1beta1\",\n \"gapi.client.blogger-v2\",\n \"gapi.client.blogger-v3\",\n \"gapi.client.books-v1\",\n \"gapi.client.businessprofileperformance-v1\",\n \"gapi.client.calendar-v3\",\n \"gapi.client.certificatemanager-v1\",\n \"gapi.client.chat-v1\",\n \"gapi.client.chromemanagement-v1\",\n \"gapi.client.chromepolicy-v1\",\n \"gapi.client.chromeuxreport-v1\",\n \"gapi.client.civicinfo-v2\",\n \"gapi.client.classroom-v1\",\n \"gapi.client.cloudasset-v1\",\n \"gapi.client.cloudasset-v1beta1\",\n \"gapi.client.cloudasset-v1p1beta1\",\n \"gapi.client.cloudasset-v1p5beta1\",\n \"gapi.client.cloudasset-v1p7beta1\",\n \"gapi.client.cloudbilling-v1\",\n \"gapi.client.cloudbilling-v1beta\",\n \"gapi.client.cloudbuild-v1\",\n \"gapi.client.cloudchannel-v1\",\n \"gapi.client.clouddeploy-v1\",\n \"gapi.client.clouderrorreporting-v1beta1\",\n \"gapi.client.cloudfunctions-v1\",\n \"gapi.client.cloudfunctions-v2\",\n \"gapi.client.cloudfunctions-v2alpha\",\n \"gapi.client.cloudfunctions-v2beta\",\n \"gapi.client.cloudidentity-v1\",\n \"gapi.client.cloudidentity-v1beta1\",\n \"gapi.client.cloudiot-v1\",\n \"gapi.client.cloudkms-v1\",\n \"gapi.client.cloudprofiler-v2\",\n \"gapi.client.cloudresourcemanager-v1\",\n \"gapi.client.cloudresourcemanager-v1beta1\",\n \"gapi.client.cloudresourcemanager-v2\",\n \"gapi.client.cloudresourcemanager-v2beta1\",\n \"gapi.client.cloudresourcemanager-v3\",\n \"gapi.client.cloudscheduler-v1\",\n \"gapi.client.cloudscheduler-v1beta1\",\n \"gapi.client.cloudsearch-v1\",\n \"gapi.client.cloudshell-v1\",\n \"gapi.client.cloudsupport-v2beta\",\n \"gapi.client.cloudtasks-v2\",\n \"gapi.client.cloudtasks-v2beta2\",\n \"gapi.client.cloudtasks-v2beta3\",\n \"gapi.client.cloudtrace-v1\",\n \"gapi.client.cloudtrace-v2\",\n \"gapi.client.cloudtrace-v2beta1\",\n \"gapi.client.composer-v1\",\n \"gapi.client.composer-v1beta1\",\n \"gapi.client.compute-alpha\",\n \"gapi.client.compute-beta\",\n \"gapi.client.compute-v1\",\n \"gapi.client.connectors-v1\",\n \"gapi.client.connectors-v2\",\n \"gapi.client.contactcenteraiplatform-v1alpha1\",\n \"gapi.client.contactcenterinsights-v1\",\n \"gapi.client.container-v1\",\n \"gapi.client.container-v1beta1\",\n \"gapi.client.containeranalysis-v1\",\n \"gapi.client.containeranalysis-v1alpha1\",\n \"gapi.client.containeranalysis-v1beta1\",\n \"gapi.client.content-v2.1\",\n \"gapi.client.contentwarehouse-v1\",\n \"gapi.client.customsearch-v1\",\n \"gapi.client.datacatalog-v1\",\n \"gapi.client.datacatalog-v1beta1\",\n \"gapi.client.dataflow-v1b3\",\n \"gapi.client.dataform-v1beta1\",\n \"gapi.client.datafusion-v1\",\n \"gapi.client.datafusion-v1beta1\",\n \"gapi.client.datalabeling-v1beta1\",\n \"gapi.client.datalineage-v1\",\n \"gapi.client.datamigration-v1\",\n \"gapi.client.datamigration-v1beta1\",\n \"gapi.client.datapipelines-v1\",\n \"gapi.client.dataplex-v1\",\n \"gapi.client.dataproc-v1\",\n \"gapi.client.datastore-v1\",\n \"gapi.client.datastore-v1beta1\",\n \"gapi.client.datastore-v1beta3\",\n \"gapi.client.datastream-v1\",\n \"gapi.client.datastream-v1alpha1\",\n \"gapi.client.deploymentmanager-alpha\",\n \"gapi.client.deploymentmanager-v2\",\n \"gapi.client.deploymentmanager-v2beta\",\n \"gapi.client.dfareporting-v3.5\",\n \"gapi.client.dfareporting-v4\",\n \"gapi.client.dialogflow-v2\",\n \"gapi.client.dialogflow-v2beta1\",\n \"gapi.client.dialogflow-v3\",\n \"gapi.client.dialogflow-v3beta1\",\n \"gapi.client.digitalassetlinks-v1\",\n \"gapi.client.discovery-v1\",\n \"gapi.client.discoveryengine-v1alpha\",\n \"gapi.client.discoveryengine-v1beta\",\n \"gapi.client.displayvideo-v1\",\n \"gapi.client.displayvideo-v2\",\n \"gapi.client.dlp-v2\",\n \"gapi.client.dns-v1\",\n \"gapi.client.dns-v1beta2\",\n \"gapi.client.docs-v1\",\n \"gapi.client.documentai-v1\",\n \"gapi.client.documentai-v1beta2\",\n \"gapi.client.documentai-v1beta3\",\n \"gapi.client.domains-v1\",\n \"gapi.client.domains-v1alpha2\",\n \"gapi.client.domains-v1beta1\",\n \"gapi.client.domainsrdap-v1\",\n \"gapi.client.doubleclickbidmanager-v1.1\",\n \"gapi.client.doubleclickbidmanager-v2\",\n \"gapi.client.doubleclicksearch-v2\",\n \"gapi.client.drive-v2\",\n \"gapi.client.drive-v3\",\n \"gapi.client.driveactivity-v2\",\n \"gapi.client.drivelabels-v2\",\n \"gapi.client.drivelabels-v2beta\",\n \"gapi.client.essentialcontacts-v1\",\n \"gapi.client.eventarc-v1\",\n \"gapi.client.eventarc-v1beta1\",\n \"gapi.client.factchecktools-v1alpha1\",\n \"gapi.client.fcm-v1\",\n \"gapi.client.fcmdata-v1beta1\",\n \"gapi.client.file-v1\",\n \"gapi.client.file-v1beta1\",\n \"gapi.client.firebase-v1beta1\",\n \"gapi.client.firebaseappcheck-v1\",\n \"gapi.client.firebaseappcheck-v1beta\",\n \"gapi.client.firebaseappdistribution-v1\",\n \"gapi.client.firebasedatabase-v1beta\",\n \"gapi.client.firebasedynamiclinks-v1\",\n \"gapi.client.firebasehosting-v1\",\n \"gapi.client.firebasehosting-v1beta1\",\n \"gapi.client.firebaseml-v1\",\n \"gapi.client.firebaseml-v1beta2\",\n \"gapi.client.firebaserules-v1\",\n \"gapi.client.firebasestorage-v1beta\",\n \"gapi.client.firestore-v1\",\n \"gapi.client.firestore-v1beta1\",\n \"gapi.client.firestore-v1beta2\",\n \"gapi.client.fitness-v1\",\n \"gapi.client.forms-v1\",\n \"gapi.client.games_configuration-v1configuration\",\n \"gapi.client.games_management-v1management\",\n \"gapi.client.games-v1\",\n \"gapi.client.gameservices-v1\",\n \"gapi.client.gameservices-v1beta\",\n \"gapi.client.genomics-v2alpha1\",\n \"gapi.client.gkebackup-v1\",\n \"gapi.client.gkehub-v1\",\n \"gapi.client.gkehub-v1alpha\",\n \"gapi.client.gkehub-v1alpha2\",\n \"gapi.client.gkehub-v1beta\",\n \"gapi.client.gkehub-v1beta1\",\n \"gapi.client.gkehub-v2alpha\",\n \"gapi.client.gmail-v1\",\n \"gapi.client.gmailpostmastertools-v1\",\n \"gapi.client.gmailpostmastertools-v1beta1\",\n \"gapi.client.googleads-v10\",\n \"gapi.client.googleads-v11\",\n \"gapi.client.googleads-v12\",\n \"gapi.client.googleads-v13\",\n \"gapi.client.googleads-v4\",\n \"gapi.client.googleads-v5\",\n \"gapi.client.googleads-v6\",\n \"gapi.client.googleads-v7\",\n \"gapi.client.googleads-v8\",\n \"gapi.client.googleads-v9\",\n \"gapi.client.groupsmigration-v1\",\n \"gapi.client.groupssettings-v1\",\n \"gapi.client.healthcare-v1\",\n \"gapi.client.healthcare-v1beta1\",\n \"gapi.client.homegraph-v1\",\n \"gapi.client.iam-v1\",\n \"gapi.client.iam-v2\",\n \"gapi.client.iam-v2beta\",\n \"gapi.client.iamcredentials-v1\",\n \"gapi.client.iap-v1\",\n \"gapi.client.iap-v1beta1\",\n \"gapi.client.identitytoolkit-v1\",\n \"gapi.client.identitytoolkit-v2\",\n \"gapi.client.identitytoolkit-v3\",\n \"gapi.client.ids-v1\",\n \"gapi.client.indexing-v3\",\n \"gapi.client.integrations-v1alpha\",\n \"gapi.client.jobs-v3\",\n \"gapi.client.jobs-v3p1beta1\",\n \"gapi.client.jobs-v4\",\n \"gapi.client.keep-v1\",\n \"gapi.client.kgsearch-v1\",\n \"gapi.client.kmsinventory-v1\",\n \"gapi.client.language-v1\",\n \"gapi.client.language-v1beta2\",\n \"gapi.client.libraryagent-v1\",\n \"gapi.client.licensing-v1\",\n \"gapi.client.lifesciences-v2beta\",\n \"gapi.client.localservices-v1\",\n \"gapi.client.logging-v2\",\n \"gapi.client.managedidentities-v1\",\n \"gapi.client.managedidentities-v1alpha1\",\n \"gapi.client.managedidentities-v1beta1\",\n \"gapi.client.manufacturers-v1\",\n \"gapi.client.memcache-v1\",\n \"gapi.client.memcache-v1beta2\",\n \"gapi.client.metastore-v1\",\n \"gapi.client.metastore-v1alpha\",\n \"gapi.client.metastore-v1beta\",\n \"gapi.client.migrationcenter-v1alpha1\",\n \"gapi.client.ml-v1\",\n \"gapi.client.monitoring-v1\",\n \"gapi.client.monitoring-v3\",\n \"gapi.client.mybusinessaccountmanagement-v1\",\n \"gapi.client.mybusinessbusinesscalls-v1\",\n \"gapi.client.mybusinessbusinessinformation-v1\",\n \"gapi.client.mybusinesslodging-v1\",\n \"gapi.client.mybusinessnotifications-v1\",\n \"gapi.client.mybusinessplaceactions-v1\",\n \"gapi.client.mybusinessqanda-v1\",\n \"gapi.client.mybusinessverifications-v1\",\n \"gapi.client.networkconnectivity-v1\",\n \"gapi.client.networkconnectivity-v1alpha1\",\n \"gapi.client.networkmanagement-v1\",\n \"gapi.client.networkmanagement-v1beta1\",\n \"gapi.client.networksecurity-v1\",\n \"gapi.client.networksecurity-v1beta1\",\n \"gapi.client.networkservices-v1\",\n \"gapi.client.networkservices-v1beta1\",\n \"gapi.client.notebooks-v1\",\n \"gapi.client.notebooks-v2\",\n \"gapi.client.oauth2-v2\",\n \"gapi.client.ondemandscanning-v1\",\n \"gapi.client.ondemandscanning-v1beta1\",\n \"gapi.client.orgpolicy-v2\",\n \"gapi.client.osconfig-v1\",\n \"gapi.client.osconfig-v1alpha\",\n \"gapi.client.osconfig-v1beta\",\n \"gapi.client.oslogin-v1\",\n \"gapi.client.oslogin-v1alpha\",\n \"gapi.client.oslogin-v1beta\",\n \"gapi.client.pagespeedonline-v5\",\n \"gapi.client.paymentsresellersubscription-v1\",\n \"gapi.client.people-v1\",\n \"gapi.client.playcustomapp-v1\",\n \"gapi.client.playdeveloperreporting-v1alpha1\",\n \"gapi.client.playdeveloperreporting-v1beta1\",\n \"gapi.client.playintegrity-v1\",\n \"gapi.client.policyanalyzer-v1\",\n \"gapi.client.policyanalyzer-v1beta1\",\n \"gapi.client.policysimulator-v1\",\n \"gapi.client.policysimulator-v1alpha\",\n \"gapi.client.policysimulator-v1beta\",\n \"gapi.client.policytroubleshooter-v1\",\n \"gapi.client.policytroubleshooter-v1beta\",\n \"gapi.client.poly-v1\",\n \"gapi.client.privateca-v1\",\n \"gapi.client.privateca-v1beta1\",\n \"gapi.client.prod_tt_sasportal-v1alpha1\",\n \"gapi.client.publicca-v1alpha1\",\n \"gapi.client.publicca-v1beta1\",\n \"gapi.client.pubsub-v1\",\n \"gapi.client.pubsub-v1beta1a\",\n \"gapi.client.pubsub-v1beta2\",\n \"gapi.client.pubsublite-v1\",\n \"gapi.client.readerrevenuesubscriptionlinking-v1\",\n \"gapi.client.realtimebidding-v1\",\n \"gapi.client.realtimebidding-v1alpha\",\n \"gapi.client.recaptchaenterprise-v1\",\n \"gapi.client.recommendationengine-v1beta1\",\n \"gapi.client.recommender-v1\",\n \"gapi.client.recommender-v1beta1\",\n \"gapi.client.redis-v1\",\n \"gapi.client.redis-v1beta1\",\n \"gapi.client.reseller-v1\",\n \"gapi.client.resourcesettings-v1\",\n \"gapi.client.retail-v2\",\n \"gapi.client.retail-v2alpha\",\n \"gapi.client.retail-v2beta\",\n \"gapi.client.run-v1\",\n \"gapi.client.run-v2\",\n \"gapi.client.runtimeconfig-v1\",\n \"gapi.client.runtimeconfig-v1beta1\",\n \"gapi.client.safebrowsing-v4\",\n \"gapi.client.sasportal-v1alpha1\",\n \"gapi.client.script-v1\",\n \"gapi.client.searchads360-v0\",\n \"gapi.client.searchconsole-v1\",\n \"gapi.client.secretmanager-v1\",\n \"gapi.client.secretmanager-v1beta1\",\n \"gapi.client.securitycenter-v1\",\n \"gapi.client.securitycenter-v1beta1\",\n \"gapi.client.securitycenter-v1beta2\",\n \"gapi.client.serviceconsumermanagement-v1\",\n \"gapi.client.serviceconsumermanagement-v1beta1\",\n \"gapi.client.servicecontrol-v1\",\n \"gapi.client.servicecontrol-v2\",\n \"gapi.client.servicedirectory-v1\",\n \"gapi.client.servicedirectory-v1beta1\",\n \"gapi.client.servicemanagement-v1\",\n \"gapi.client.servicenetworking-v1\",\n \"gapi.client.servicenetworking-v1beta\",\n \"gapi.client.serviceusage-v1\",\n \"gapi.client.serviceusage-v1beta1\",\n \"gapi.client.sheets-v4\",\n \"gapi.client.site_verification-v1\",\n \"gapi.client.slides-v1\",\n \"gapi.client.smartdevicemanagement-v1\",\n \"gapi.client.sourcerepo-v1\",\n \"gapi.client.spanner-v1\",\n \"gapi.client.speech-v1\",\n \"gapi.client.speech-v1p1beta1\",\n \"gapi.client.sqladmin-v1\",\n \"gapi.client.sqladmin-v1beta4\",\n \"gapi.client.storage-v1\",\n \"gapi.client.storagetransfer-v1\",\n \"gapi.client.streetviewpublish-v1\",\n \"gapi.client.sts-v1\",\n \"gapi.client.sts-v1beta\",\n \"gapi.client.tagmanager-v1\",\n \"gapi.client.tagmanager-v2\",\n \"gapi.client.tasks-v1\",\n \"gapi.client.testing-v1\",\n \"gapi.client.texttospeech-v1\",\n \"gapi.client.texttospeech-v1beta1\",\n \"gapi.client.toolresults-v1beta3\",\n \"gapi.client.tpu-v1\",\n \"gapi.client.tpu-v1alpha1\",\n \"gapi.client.tpu-v2\",\n \"gapi.client.tpu-v2alpha1\",\n \"gapi.client.trafficdirector-v2\",\n \"gapi.client.transcoder-v1\",\n \"gapi.client.translate-v2\",\n \"gapi.client.translate-v3\",\n \"gapi.client.translate-v3beta1\",\n \"gapi.client.travelimpactmodel-v1\",\n \"gapi.client.vault-v1\",\n \"gapi.client.verifiedaccess-v1\",\n \"gapi.client.verifiedaccess-v2\",\n \"gapi.client.versionhistory-v1\",\n \"gapi.client.videointelligence-v1\",\n \"gapi.client.videointelligence-v1beta2\",\n \"gapi.client.videointelligence-v1p1beta1\",\n \"gapi.client.videointelligence-v1p2beta1\",\n \"gapi.client.videointelligence-v1p3beta1\",\n \"gapi.client.vision-v1\",\n \"gapi.client.vision-v1p1beta1\",\n \"gapi.client.vision-v1p2beta1\",\n \"gapi.client.vmmigration-v1\",\n \"gapi.client.vmmigration-v1alpha1\",\n \"gapi.client.vpcaccess-v1\",\n \"gapi.client.vpcaccess-v1beta1\",\n \"gapi.client.webfonts-v1\",\n \"gapi.client.webrisk-v1\",\n \"gapi.client.websecurityscanner-v1\",\n \"gapi.client.websecurityscanner-v1alpha\",\n \"gapi.client.websecurityscanner-v1beta\",\n \"gapi.client.workflowexecutions-v1\",\n \"gapi.client.workflowexecutions-v1beta\",\n \"gapi.client.workflows-v1\",\n \"gapi.client.workflows-v1beta\",\n \"gapi.client.workloadmanager-v1\",\n \"gapi.client.workstations-v1beta\",\n \"gapi.client.youtube_analytics-v2\",\n \"gapi.client.youtube-v3\",\n \"gapi.client.youtubereporting-v1\",\n \"gapi.client\",\n \"gapi.drive\",\n \"gapi.pagespeedonline\",\n \"gapi.people\",\n \"gapi.plus\",\n \"gapi.translate\",\n \"gapi.urlshortener\",\n \"gapi.youtube\",\n \"gapi.youtubeanalytics\",\n \"gaugejs\",\n \"generic-functions\",\n \"gensync\",\n \"gently\",\n \"geodesy\",\n \"geojson\",\n \"geometry-dom\",\n \"get-emoji\",\n \"get-folder-size\",\n \"get-sass-vars\",\n \"get-symbol-description\",\n \"git\",\n \"github-label-sync\",\n \"gldatepicker\",\n \"glidejs__glide\",\n \"glidejs\",\n \"go\",\n \"golang-wasm-exec\",\n \"google-ads-scripts\",\n \"google-adwords-scripts\",\n \"google-apps-script-oauth2\",\n \"google-cloud__datastore\",\n \"google-drive-realtime-api\",\n \"google-earth\",\n \"google-libphonenumber\",\n \"google-one-tap\",\n \"google-publisher-tag\",\n \"google.accounts\",\n \"google.analytics\",\n \"google.feeds\",\n \"google.fonts\",\n \"google.geolocation\",\n \"google.maps\",\n \"google.picker\",\n \"google.script.client-side\",\n \"google.visualization\",\n \"googlefc\",\n \"googlemaps.infobubble\",\n \"googlepay\",\n \"googletag\",\n \"gorilla-engine\",\n \"graphql-resolve-batch\",\n \"greasemonkey\",\n \"greasemonkey/v3\",\n \"grecaptcha\",\n \"grecaptcha/v0\",\n \"gregorian-calendar\",\n \"growing-io\",\n \"gsi\",\n \"gtag.js\",\n \"guacamole-common-js\",\n \"guid\",\n \"gulp-changed\",\n \"gulp-cheerio\",\n \"gulp-coffeeify\",\n \"gulp-dtsm\",\n \"gulp-espower\",\n \"gulp-help-doc\",\n \"gulp-imagemin\",\n \"gulp-load-plugins\",\n \"gulp-mocha\",\n \"gulp-ng-annotate\",\n \"gulp-remember\",\n \"gulp-sourcemaps\",\n \"gulp-task-listing\",\n \"gun\",\n \"har-format\",\n \"hard-source-webpack-plugin\",\n \"has-ansi\",\n \"has-package-exports\",\n \"hasher\",\n \"hashset\",\n \"hashtable\",\n \"hast\",\n \"hast/v2\",\n \"hasura\",\n \"haxball-headless-browser\",\n \"headroom\",\n \"hellosign-embedded\",\n \"hellosign-sdk\",\n \"heredatalens\",\n \"heremaps\",\n \"heroku-logger\",\n \"hl7\",\n \"hmscore__react-native-hms-push\",\n \"hookrouter\",\n \"html-escaper\",\n \"html-minifier-terser\",\n \"html-to-draftjs\",\n \"html-to-text\",\n \"html5plus\",\n \"htmlbars-inline-precompile\",\n \"htmltojsx\",\n \"hubspot-pace\",\n \"hummer-env\",\n \"hyperscript\",\n \"hypertext-application-language\",\n \"i18next-fs-backend\",\n \"i18next-sprintf-postprocessor\",\n \"iab-vpaid\",\n \"ibm_db\",\n \"ibm-mobilefirst\",\n \"identicon.js\",\n \"image-blob-reduce\",\n \"imagemagick\",\n \"imagemapster\",\n \"imagemin-svgo\",\n \"imagemin-upng\",\n \"imagemin-webp\",\n \"imgur-rest-api\",\n \"inboxsdk\",\n \"ineum\",\n \"inherits\",\n \"iniparser\",\n \"input-moment\",\n \"inputmask\",\n \"intercom-web\",\n \"intercomjs\",\n \"intl-unofficial-duration-unit-format\",\n \"invity-api\",\n \"ion-rangeslider/v1\",\n \"ioredis-mock\",\n \"iost-contract\",\n \"ipaiva\",\n \"iput\",\n \"is-gif\",\n \"is-touch-device\",\n \"isomorphic-fetch\",\n \"istanbul-middleware\",\n \"itemsjs\",\n \"itowns\",\n \"ix.js\",\n \"jackrabbit\",\n \"jake\",\n \"jasmine-enzyme\",\n \"jasmine-jquery\",\n \"jasmine\",\n \"jasmine/v1\",\n \"java-applet\",\n \"javascript-astar\",\n \"javascript-bignum\",\n \"javascript-time-ago\",\n \"jcof\",\n \"jdataview\",\n \"jee-jsf\",\n \"jest\",\n \"jfp\",\n \"jitsi-meet\",\n \"jqgrid\",\n \"jquery-alertable\",\n \"jquery-backstretch\",\n \"jquery-cropbox\",\n \"jquery-deferred\",\n \"jquery-deparam\",\n \"jquery-fullscreen\",\n \"jquery-galleria\",\n \"jquery-handsontable\",\n \"jquery-jcrop\",\n \"jquery-monthpicker\",\n \"jquery-timeentry\",\n \"jquery-toastmessage-plugin\",\n \"jquery-truncate-html\",\n \"jquery-urlparam\",\n \"jquery.address\",\n \"jquery.are-you-sure\",\n \"jquery.autosize\",\n \"jquery.base64\",\n \"jquery.bbq\",\n \"jquery.blockui\",\n \"jquery.bootstrap.wizard\",\n \"jquery.cleditor\",\n \"jquery.clientsidelogging\",\n \"jquery.color\",\n \"jquery.colorbox\",\n \"jquery.colorpicker\",\n \"jquery.contextmenu\",\n \"jquery.customselect\",\n \"jquery.cycle\",\n \"jquery.dropotron\",\n \"jquery.dynatree\",\n \"jquery.elang\",\n \"jquery.fancytree\",\n \"jquery.fileupload\",\n \"jquery.filtertable\",\n \"jquery.finger\",\n \"jquery.flagstrap\",\n \"jquery.form\",\n \"jquery.fullscreen\",\n \"jquery.gridster\",\n \"jquery.highlight-bartaz\",\n \"jquery.jnotify\",\n \"jquery.joyride\",\n \"jquery.jsignature\",\n \"jquery.leanmodal\",\n \"jquery.livestampjs\",\n \"jquery.menuaim\",\n \"jquery.mmenu\",\n \"jquery.notify\",\n \"jquery.notifybar\",\n \"jquery.noty\",\n \"jquery.pjax\",\n \"jquery.placeholder\",\n \"jquery.pnotify\",\n \"jquery.postmessage\",\n \"jquery.prettyphoto\",\n \"jquery.qrcode\",\n \"jquery.rowgrid\",\n \"jquery.simplemodal\",\n \"jquery.simplepagination\",\n \"jquery.simulate\",\n \"jquery.sortelements\",\n \"jquery.stickem\",\n \"jquery.superlink\",\n \"jquery.tagsmanager\",\n \"jquery.tile\",\n \"jquery.timeago\",\n \"jquery.timepicker\",\n \"jquery.timer\",\n \"jquery.tinycarousel\",\n \"jquery.tinyscrollbar\",\n \"jquery.tipsy\",\n \"jquery.tools\",\n \"jquery.total-storage\",\n \"jquery.ui.datetimepicker\",\n \"jquery.ui.layout\",\n \"jquery.uniform\",\n \"jquery.validation\",\n \"jquery.watermark\",\n \"jquery.window\",\n \"jquery/v1\",\n \"jquery/v2\",\n \"jquerymobile\",\n \"js-clipper\",\n \"js-schema\",\n \"js-url\",\n \"js.spec\",\n \"jsbn\",\n \"jsdeferred\",\n \"jsfl\",\n \"jsftp\",\n \"jslib-html5-camera-photo\",\n \"json-editor\",\n \"json-merge-patch\",\n \"json-patch\",\n \"json-pointer\",\n \"json-schema-faker\",\n \"json-schema\",\n \"json2csv__formatters\",\n \"json2csv__node\",\n \"json2csv__plainjs\",\n \"json2csv__transforms\",\n \"json2csv__whatwg\",\n \"jsoneditor-for-react\",\n \"jsoneditor\",\n \"jsoneditoronline\",\n \"jsonpath-plus\",\n \"jsonstream\",\n \"jsqrcode\",\n \"jstorage\",\n \"justifiedgallery\",\n \"jwplayer\",\n \"jxon\",\n \"k6\",\n \"kakao-js-sdk\",\n \"kakao-pixel\",\n \"kakaomaps\",\n \"kamailio-kemi\",\n \"kap-plugin\",\n \"katex\",\n \"keccak\",\n \"keep-network__tbtc.js\",\n \"kendo-ui\",\n \"kik-browser\",\n \"kineticjs\",\n \"knockback\",\n \"knockout-amd-helpers\",\n \"knockout-postbox\",\n \"knockout-secure-binding\",\n \"knockout.deferred.updates\",\n \"knockout.editables\",\n \"knockout.es5\",\n \"knockout.kogrid\",\n \"knockout.mapper\",\n \"knockout.mapping\",\n \"knockout.projections\",\n \"knockout.rx\",\n \"knockout.validation\",\n \"knockout.viewmodel\",\n \"knockstrap\",\n \"knuddels-userapp-backend-api\",\n \"knuddels-userapps-api\",\n \"knuddels-webapp-frontend-api\",\n \"koa-proxy\",\n \"koa\",\n \"kolite\",\n \"konami.js\",\n \"kos-core\",\n \"kss\",\n \"kythe\",\n \"latlon-geohash\",\n \"lazypipe\",\n \"leadfoot\",\n \"leaflet-areaselect\",\n \"leaflet-curve\",\n \"leaflet-editable/v0\",\n \"leaflet-gpx\",\n \"leaflet-label\",\n \"leaflet-offline\",\n \"leaflet.awesome-markers/v0\",\n \"leapmotionts\",\n \"lestate\",\n \"level-sublevel\",\n \"leveldown\",\n \"line-reader\",\n \"lint-staged\",\n \"lls\",\n \"loadable__webpack-plugin\",\n \"localizejs-library\",\n \"locutus\",\n \"logg\",\n \"login-with-amazon-sdk-browser\",\n \"lowlight\",\n \"ltx\",\n \"luxon\",\n \"macaca-circular-json\",\n \"magic-number\",\n \"magicmirror-module\",\n \"maildev\",\n \"mapbox__mapbox-sdk\",\n \"mapbox\",\n \"mapboxgl-spiderifier\",\n \"mapsjs\",\n \"markdown-it-lazy-headers\",\n \"markitup\",\n \"marv\",\n \"maskedinput\",\n \"material-ui-pagination\",\n \"material-ui-phone-number\",\n \"material-ui\",\n \"mathjax\",\n \"maxmsp\",\n \"mcustomscrollbar\",\n \"mdast\",\n \"mdx\",\n \"megajs\",\n \"mem-cache\",\n \"memdown\",\n \"mercadopago-sdk-js\",\n \"merge-img\",\n \"merge-stream\",\n \"mergerino\",\n \"messenger\",\n \"metascraper\",\n \"meteor-accounts-phone\",\n \"meteor-collection-hooks\",\n \"meteor-dburles-collection-helpers\",\n \"meteor-jboulhous-dev\",\n \"meteor-percolate-migrations\",\n \"meteor-persistent-session\",\n \"meteor-prime8consulting-oauth2\",\n \"meteor-publish-composite\",\n \"meteor-roles\",\n \"meteor-sjobs\",\n \"method-override\",\n \"mfiles\",\n \"micromodal\",\n \"microservice-utilities\",\n \"microsoft-ajax\",\n \"microsoft-graph\",\n \"microsoft-live-connect\",\n \"microsoft-sdk-soap\",\n \"microsoftteams\",\n \"milliseconds\",\n \"mimetext\",\n \"mina\",\n \"minapp-env\",\n \"minify\",\n \"miniprogram-wxs\",\n \"miniprogram\",\n \"mithril-global\",\n \"mixpanel-browser\",\n \"mixpanel\",\n \"mixto\",\n \"ml-classify-text\",\n \"mobile-messaging-cordova\",\n \"modular-scale\",\n \"module-deps\",\n \"mojang-gametest\",\n \"mojang-minecraft-server-admin\",\n \"mojang-minecraft-ui\",\n \"mojang-minecraft\",\n \"mojang-net\",\n \"moment-business\",\n \"moment-precise-range-plugin\",\n \"mongoose-autopopulate\",\n \"mongoose-deep-populate\",\n \"mongoose-promise\",\n \"motor-hat\",\n \"mpv-script\",\n \"ms.macro\",\n \"msgpack\",\n \"mu2\",\n \"mudder\",\n \"multiparty\",\n \"musickit-js\",\n \"musicmatch\",\n \"mysql-import\",\n \"name-initials\",\n \"natural-drag-animation-rbdnd\",\n \"natural-sort\",\n \"naver-whale\",\n \"navermaps\",\n \"nedb-logger\",\n \"neo4j\",\n \"netease-captcha\",\n \"netlify-auth-providers\",\n \"new-relic-browser\",\n \"next-nprogress\",\n \"ng-command\",\n \"ng-facebook\",\n \"ng-flow\",\n \"ng-grid\",\n \"ng-i18next\",\n \"ngbootbox\",\n \"ngprogress-lite\",\n \"ngreact\",\n \"ngtoaster\",\n \"ngwysiwyg\",\n \"nlcst\",\n \"nlcst/v1\",\n \"noble-mac\",\n \"node_redis\",\n \"node-fetch-cache\",\n \"node-fibers\",\n \"node-mysql-wrapper\",\n \"node-osc\",\n \"node-sass-middleware\",\n \"node-uuid\",\n \"nodegit\",\n \"nodeunit\",\n \"noisejs\",\n \"nomnom\",\n \"noteflight-client\",\n \"notie\",\n \"notify\",\n \"notifyjs-browser\",\n \"nova-editor-node\",\n \"nova-editor\",\n \"npm\",\n \"nunjucks-date\",\n \"nw.gui\",\n \"nw.js\",\n \"oauth.js\",\n \"object.groupby\",\n \"obs-studio\",\n \"office-js-preview\",\n \"office-js\",\n \"office-runtime\",\n \"offscreencanvas\",\n \"oidc-token-manager\",\n \"omit-empty\",\n \"onflow__flow-js-testing\",\n \"onscan.js\",\n \"opencc-js\",\n \"openfin\",\n \"openfin/v50\",\n \"openjscad\",\n \"openlayers/v2\",\n \"openrct2\",\n \"openssi-websdk\",\n \"opentok\",\n \"openui5\",\n \"optimist\",\n \"osmtogeojson\",\n \"ovenplayer\",\n \"paddle-js-browser\",\n \"page-flip\",\n \"pako\",\n \"paralleljs\",\n \"parcel-env\",\n \"parse-listing\",\n \"parse/v1\",\n \"passport-discord\",\n \"passport-github2\",\n \"passport-strategy\",\n \"passport-vkontakte\",\n \"passport\",\n \"pathfinding\",\n \"paypal-cordova-plugin\",\n \"payu-emea-sdk\",\n \"pebblekitjs\",\n \"pendo-io-browser\",\n \"pexrtc\",\n \"phoenix\",\n \"phonegap-facebook-plugin\",\n \"phonegap-nfc\",\n \"phonegap-plugin-barcodescanner\",\n \"phonegap\",\n \"photoshop\",\n \"pi-spi\",\n \"pinterest-sdk\",\n \"places\",\n \"plaid-link\",\n \"playerframework\",\n \"playmusic\",\n \"plupload\",\n \"plv8-internal\",\n \"polylabel\",\n \"polymer\",\n \"poool-access\",\n \"popcorn\",\n \"postcss-functions\",\n \"postcss-js\",\n \"posterus\",\n \"pouch-redux-middleware\",\n \"pouchdb-http\",\n \"preact-i18n\",\n \"precise\",\n \"preloadjs\",\n \"pretty-proptypes\",\n \"prismic-dom\",\n \"progressjs\",\n \"promise-fn-retry\",\n \"promise-pg\",\n \"promise-pool\",\n \"promise-sftp\",\n \"proper-url-join\",\n \"proposal-relative-indexing-method\",\n \"pump\",\n \"purl\",\n \"q-retry\",\n \"qlik-engineapi\",\n \"qlik-visualizationextensions\",\n \"query-string-params\",\n \"quicksettings\",\n \"qunit/v1\",\n \"rabbit.js\",\n \"radium\",\n \"radius\",\n \"random-string\",\n \"rangy\",\n \"raphael\",\n \"rappid\",\n \"rasa-webchat\",\n \"raty\",\n \"raygun4js\",\n \"rbush\",\n \"rc-switch\",\n \"rc-tooltip\",\n \"react-add-to-calendar\",\n \"react-animals\",\n \"react-animate-on-scroll\",\n \"react-animated-modal\",\n \"react-aria-modal\",\n \"react-avatar-editor\",\n \"react-better-password\",\n \"react-bootstrap-range-slider\",\n \"react-cache\",\n \"react-calendar-heatmap\",\n \"react-canvas-draw\",\n \"react-coinhive\",\n \"react-color\",\n \"react-column-resizer\",\n \"react-compass\",\n \"react-cookiebot\",\n \"react-custom-scroll\",\n \"react-cytoscapejs\",\n \"react-date-range/v0\",\n \"react-document-meta\",\n \"react-document-title\",\n \"react-dom\",\n \"react-dual-listbox\",\n \"react-dynamic-number\",\n \"react-email-editor\",\n \"react-embed-gist\",\n \"react-facebook-login-component\",\n \"react-facebook-login\",\n \"react-flags-select\",\n \"react-github-button\",\n \"react-google-maps-loader\",\n \"react-google-places-suggest\",\n \"react-gtm-module\",\n \"react-highcharts\",\n \"react-highlight\",\n \"react-hint\",\n \"react-holder\",\n \"react-howler\",\n \"react-html5-camera-photo\",\n \"react-icofont\",\n \"react-icon-base\",\n \"react-image-gallery\",\n \"react-imgpro\",\n \"react-infinite\",\n \"react-input-mask\",\n \"react-input-mask/v1\",\n \"react-instantsearch\",\n \"react-js-table-with-csv-dl\",\n \"react-jsonschema-form\",\n \"react-key-handler\",\n \"react-leaflet-markercluster\",\n \"react-linkify\",\n \"react-loadable-visibility\",\n \"react-mailchimp-subscribe\",\n \"react-maskedinput\",\n \"react-native-bcrypt\",\n \"react-native-bluetooth-serial\",\n \"react-native-honeywell-scanner\",\n \"react-native-huawei-protected-apps\",\n \"react-native-material-ui\",\n \"react-native-modalbox\",\n \"react-native-modern-datepicker\",\n \"react-native-multi-slider\",\n \"react-native-orientation\",\n \"react-native-qrcode\",\n \"react-native-scrollable-tab-view\",\n \"react-native-signature-capture\",\n \"react-native-svg-animated-linear-gradient\",\n \"react-native-toast-native\",\n \"react-native\",\n \"react-native/v0.63\",\n \"react-native/v0.64\",\n \"react-native/v0.65\",\n \"react-native/v0.66\",\n \"react-native/v0.67\",\n \"react-native/v0.68\",\n \"react-native/v0.69\",\n \"react-native/v0.70\",\n \"react-native/v0.71\",\n \"react-no-ssr\",\n \"react-notifications-component\",\n \"react-onsenui\",\n \"react-outside-click-handler\",\n \"react-paginate\",\n \"react-paginate/v5\",\n \"react-payment-inputs\",\n \"react-phone-number-input\",\n \"react-pie-menu\",\n \"react-plyr\",\n \"react-pointable\",\n \"react-recaptcha-v3\",\n \"react-recompose\",\n \"react-responsive-spritesheet\",\n \"react-router-navigation-core\",\n \"react-router-navigation\",\n \"react-router-redux\",\n \"react-rte\",\n \"react-s-alert\",\n \"react-show-more\",\n \"react-sidebar\",\n \"react-signature-canvas\",\n \"react-sortable-tree-theme-file-explorer\",\n \"react-sortable-tree\",\n \"react-splitter-layout\",\n \"react-sticky-el\",\n \"react-svg-radar-chart\",\n \"react-swf\",\n \"react-switch-case\",\n \"react-syntax-highlighter\",\n \"react-tag-autocomplete\",\n \"react-tag-autocomplete/v5\",\n \"react-tag-input\",\n \"react-tap-event-plugin\",\n \"react-text-mask\",\n \"react-text-truncate\",\n \"react-touch\",\n \"react-transition-group\",\n \"react-type-animation\",\n \"react-typical\",\n \"react-typing-effect\",\n \"react-user-tour\",\n \"react-widgets-moment\",\n \"react-window-size\",\n \"react-world-flags\",\n \"react-youtube-embed\",\n \"readline-transform\",\n \"readmore-js\",\n \"recharts-scale\",\n \"recompose\",\n \"recurly__recurly-js\",\n \"redux-cablecar\",\n \"redux-form/v7\",\n \"redux-localstorage-debounce\",\n \"redux-localstorage\",\n \"redux-mock-store/v0\",\n \"redux-persist-transform-encrypt\",\n \"redux-storage\",\n \"remote-git-tags\",\n \"remotedev-serialize\",\n \"require-hacker\",\n \"resize-observer-browser\",\n \"resolve\",\n \"rest\",\n \"restful.js\",\n \"resx\",\n \"rewire\",\n \"rickshaw\",\n \"riderize__passport-strava-oauth2\",\n \"riot-api-nodejs\",\n \"riot-games-api\",\n \"riotjs\",\n \"rison\",\n \"rn-fetch-blob\",\n \"rocksdb\",\n \"roll-a-die\",\n \"rollup-plugin-node-globals\",\n \"rollup-plugin-progress\",\n \"rollup-plugin-svelte-svg\",\n \"rollup-plugin-url\",\n \"rosie\",\n \"route-parser\",\n \"routie\",\n \"royalslider\",\n \"run-sequence\",\n \"rx-jquery\",\n \"rx-node\",\n \"s3-uploader\",\n \"safari-extension-content\",\n \"safari-extension\",\n \"sammy\",\n \"sarif\",\n \"sat\",\n \"satnav\",\n \"scaleway-functions\",\n \"schluessel\",\n \"scorm-browser\",\n \"screeps-arena\",\n \"scriptable-ios\",\n \"scriptjs\",\n \"scrollbooster\",\n \"scroller\",\n \"scrollreveal\",\n \"scrolltofixed\",\n \"segment-analytics\",\n \"sencha_touch\",\n \"sequencify\",\n \"serverless\",\n \"servicenow-london\",\n \"servicenow\",\n \"sfdx-faye\",\n \"shakacode__recompose\",\n \"sharepoint\",\n \"shexj\",\n \"short-hash\",\n \"shortid\",\n \"siema\",\n \"sigmajs\",\n \"signalfx-collect\",\n \"signalr/v1\",\n \"simpl-schema\",\n \"simple-cw-node\",\n \"simple-url-cache\",\n \"simple-xml\",\n \"simpleddp\",\n \"sinon\",\n \"sipml\",\n \"siren-parser\",\n \"six-runtime\",\n \"sketchapp\",\n \"ski\",\n \"sleep\",\n \"slice-ansi\",\n \"smallwei__avue\",\n \"smart-fox-server\",\n \"snapchat-lens-studio\",\n \"snowpack-env\",\n \"socket.io.users\",\n \"solid-auth-client\",\n \"soundjs\",\n \"space-pen\",\n \"spectrum\",\n \"sphere-engine-browser\",\n \"sphere-engine-browser/v1\",\n \"splitpanes/v1\",\n \"spotify-web-playback-sdk\",\n \"spreedly-iframe-browser\",\n \"srtparsejs\",\n \"stampit\",\n \"stamplay-js-sdk\",\n \"stream-meter\",\n \"stream-series\",\n \"stream-to-array/v0\",\n \"strip-final-newline\",\n \"stripe-v2\",\n \"stripe-v3\",\n \"stripejs\",\n \"stronghold-pay-js\",\n \"struct\",\n \"styled-components-react-native\",\n \"styled-components\",\n \"styled-components/v3\",\n \"styled-react-modal\",\n \"stylenames\",\n \"stylis\",\n \"succinct\",\n \"suitescript\",\n \"svg-arc-to-cubic-bezier\",\n \"svg-injector\",\n \"svg-maps__common\",\n \"svgjs.draggable\",\n \"svgjs.resize\",\n \"swagger-schema-official\",\n \"swagger2openapi\",\n \"swig\",\n \"swipe\",\n \"swipeview\",\n \"switchery\",\n \"swiz\",\n \"sylvester\",\n \"systemjs\",\n \"tableau-js-api\",\n \"tableau\",\n \"tampermonkey\",\n \"tap\",\n \"tape\",\n \"tasker-js-runner\",\n \"tea-merge\",\n \"teechart\",\n \"telegram-web-app\",\n \"tern\",\n \"throttle-debounce\",\n \"thunderbird-webext-browser\",\n \"timed-cache\",\n \"timelinejs\",\n \"timezone-js\",\n \"tinajs__tina-redux\",\n \"titanium\",\n \"tizen-accessory\",\n \"to-title-case-gouch\",\n \"tooltipster\",\n \"topojson-specification\",\n \"topojson\",\n \"torrent-stream\",\n \"tpdirect\",\n \"trayballoon\",\n \"trie-prefix-tree\",\n \"trim\",\n \"tryghost__content-api\",\n \"twine-sugarcube\",\n \"twitch-browser\",\n \"twitch-ext\",\n \"twitter-for-web\",\n \"typography\",\n \"tz-format\",\n \"uikit\",\n \"umami-browser\",\n \"umbraco\",\n \"underscore-ko\",\n \"underscore.string\",\n \"underscore\",\n \"unescape-js\",\n \"ungap__structured-clone\",\n \"uni-app\",\n \"unist\",\n \"unist/v2\",\n \"unity-webapi\",\n \"unpaginated\",\n \"url-format-lax\",\n \"url-join/v0\",\n \"url-parse-lax\",\n \"url-state\",\n \"urlparser\",\n \"urlrouter\",\n \"usage\",\n \"use-combined-reducers\",\n \"use-global-hook\",\n \"use-persisted-state\",\n \"use-sync-external-store\",\n \"user-event\",\n \"utils-merge\",\n \"uws\",\n \"valdr-message\",\n \"valerie-browser\",\n \"vanillajs-datepicker\",\n \"venn\",\n \"verovio\",\n \"video.js\",\n \"videojs-contrib-quality-levels\",\n \"viewporter\",\n \"vinyl-paths\",\n \"vision/v4\",\n \"vk-openapi\",\n \"vortex-web-client\",\n \"vscode-notebook-renderer\",\n \"vscode-webview\",\n \"vscode\",\n \"vue-datetime\",\n \"vue-json-compare\",\n \"vue-ls\",\n \"vue-scroll-up\",\n \"vue-select\",\n \"vue-splitpane\",\n \"vue-tel-input\",\n \"vue2-editor\",\n \"w3c-css-typed-object-model-level-1\",\n \"w3c-generic-sensor\",\n \"w3c-image-capture\",\n \"w3c-web-hid\",\n \"w3c-web-nfc\",\n \"w3c-web-serial\",\n \"w3c-web-usb\",\n \"wait-please\",\n \"waitme\",\n \"wallabyjs\",\n \"wampy\",\n \"weapp-api\",\n \"web-app-manifest\",\n \"web-ie11\",\n \"web-locks-api\",\n \"webappsec-credential-management\",\n \"webassembly-web-api\",\n \"webcl\",\n \"webcrypto\",\n \"webgl-ext\",\n \"webgl2-compute\",\n \"webgl2\",\n \"webidl2\",\n \"webos-service\",\n \"webpack-env\",\n \"webscopeio__react-textarea-autocomplete\",\n \"webscreens-window-placement\",\n \"websql\",\n \"webvr-api\",\n \"webxr\",\n \"wechat-miniprogram-xmly\",\n \"wechat-miniprogram\",\n \"wegame-api\",\n \"weixin-app\",\n \"wepy-redux\",\n \"when\",\n \"wicg-entries-api\",\n \"wicg-file-system-access\",\n \"wicg-js-self-profiling\",\n \"wicg-mediasession\",\n \"wicg-web-app-launch\",\n \"wiiu\",\n \"winbox\",\n \"windows-script-host\",\n \"winjs/v1\",\n \"winjs/v2\",\n \"winrt-uwp\",\n \"winrt\",\n \"winston-dynamodb\",\n \"wistia-player-browser\",\n \"wnumb\",\n \"wonder.js\",\n \"woosmap.map\",\n \"wordpress__admin\",\n \"wordpress__customize-browser\",\n \"wordwrapjs\",\n \"workerb-api\",\n \"workgrid-core\",\n \"workgrid-toolbar\",\n \"wrap-ansi\",\n \"wrench\",\n \"write-file-webpack-plugin\",\n \"wx-js-sdk-browser\",\n \"wx-js-sdk-dt\",\n \"xast\",\n \"xast/v1\",\n \"xelib\",\n \"xk6-sql-browser\",\n \"xmltojson\",\n \"xmpp__jid\",\n \"xrm\",\n \"xrm/v6\",\n \"xrm/v7\",\n \"xrm/v8\",\n \"xsockets\",\n \"xss-filters\",\n \"yandex-maps\",\n \"yandex-metrika-tag\",\n \"yandex-money-sdk\",\n \"yargs-parser\",\n \"yargs-parser/v20\",\n \"yargs/v16\",\n \"yargs/v16\",\n \"ydn-db\",\n \"yelp-fusion-plus\",\n \"youtube-player\",\n \"zchat-browser\",\n \"zedit__upf\",\n \"zengin-code\",\n \"zip.js\",\n \"zmq\",\n \"zumly\",\n \"zwjsbridge\",\n \"zwlog-browser\"\n ]\n}\n", + "74fbc3d0e182be4e15cd85cf84dc0d02ba6b78f3:types/polygon-lookup/package.json": "{\n \"private\": true,\n \"name\": \"@types/polygon-lookup\",\n \"version\": \"2.6.9999\",\n \"projects\": [\n \"https://github.com/pelias/polygon-lookup\"\n ],\n \"dependencies\": {\n \"@types/geojson\": \"*\",\n \"@types/rbush\": \"*\"\n },\n \"devDependencies\": {\n \"@types/polygon-lookup\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Florian Keller\",\n \"githubUsername\": \"ffflorian\"\n }\n ]\n}\n", + "4bd59ac2f21f5dac3d449669d50e03e7fbd0855b:types/polygon-lookup/package.json": "{\n \"private\": true,\n \"name\": \"@types/polygon-lookup\",\n \"version\": \"2.6.9999\",\n \"projects\": [\n \"https://github.com/pelias/polygon-lookup\"\n ],\n \"dependencies\": {\n \"@types/geojson\": \"*\",\n \"@types/rbush\": \"*\"\n },\n \"devDependencies\": {\n \"@types/polygon-lookup\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Florian Keller\",\n \"githubUsername\": \"ffflorian\"\n }\n ]\n}\n", + "74fbc3d0e182be4e15cd85cf84dc0d02ba6b78f3:types/rbush/package.json": "{\n \"private\": true,\n \"name\": \"@types/rbush\",\n \"version\": \"3.0.9999\",\n \"projects\": [\n \"https://github.com/mourner/rbush\"\n ],\n \"devDependencies\": {\n \"@types/rbush\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Dan Vanderkam\",\n \"githubUsername\": \"danvk\"\n },\n {\n \"name\": \"Chris Lewis\",\n \"githubUsername\": \"cmslewis\"\n }\n ]\n}\n", + "4bd59ac2f21f5dac3d449669d50e03e7fbd0855b:types/rbush/package.json": "{\n \"private\": true,\n \"name\": \"@types/rbush\",\n \"version\": \"3.0.9999\",\n \"projects\": [\n \"https://github.com/mourner/rbush\"\n ],\n \"devDependencies\": {\n \"@types/rbush\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Dan Vanderkam\",\n \"githubUsername\": \"danvk\"\n },\n {\n \"name\": \"Chris Lewis\",\n \"githubUsername\": \"cmslewis\"\n }\n ]\n}\n", + "74fbc3d0e182be4e15cd85cf84dc0d02ba6b78f3:types/which-polygon/package.json": "{\n \"private\": true,\n \"name\": \"@types/which-polygon\",\n \"version\": \"2.2.9999\",\n \"projects\": [\n \"https://github.com/mapbox/which-polygon\"\n ],\n \"dependencies\": {\n \"@types/geojson\": \"*\",\n \"@types/rbush\": \"*\"\n },\n \"devDependencies\": {\n \"@types/which-polygon\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Kyle Hensel\",\n \"githubUsername\": \"k-yle\"\n }\n ]\n}\n", + "4bd59ac2f21f5dac3d449669d50e03e7fbd0855b:types/which-polygon/package.json": "{\n \"private\": true,\n \"name\": \"@types/which-polygon\",\n \"version\": \"2.2.9999\",\n \"projects\": [\n \"https://github.com/mapbox/which-polygon\"\n ],\n \"dependencies\": {\n \"@types/geojson\": \"*\",\n \"@types/rbush\": \"*\"\n },\n \"devDependencies\": {\n \"@types/which-polygon\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Kyle Hensel\",\n \"githubUsername\": \"k-yle\"\n }\n ]\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/70242/_response.json b/packages/mergebot/src/_tests/fixtures/70242/_response.json new file mode 100644 index 0000000000..35367fa4e2 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/70242/_response.json @@ -0,0 +1,309 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM53uVmH", + "title": "Fix attw for rbush", + "createdAt": "2024-08-07T14:50:19Z", + "author": { + "login": "mfedderly", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Popular package", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Edits multiple packages", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 70242, + "state": "OPEN", + "headRefOid": "4bd59ac2f21f5dac3d449669d50e03e7fbd0855b", + "changedFiles": 4, + "additions": 15, + "deletions": 12, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "68d9f5250a0d2cac52a121ced169896dd12a8e6b", + "parents": { + "nodes": [ + { + "oid": "74fbc3d0e182be4e15cd85cf84dc0d02ba6b78f3", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "4bd59ac2f21f5dac3d449669d50e03e7fbd0855b", + "parents": { + "nodes": [ + { + "oid": "68d9f5250a0d2cac52a121ced169896dd12a8e6b", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "ffflorian", + "__typename": "User" + }, + "commit": { + "oid": "4bd59ac2f21f5dac3d449669d50e03e7fbd0855b", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "COLLABORATOR", + "state": "APPROVED", + "submittedAt": "2024-08-08T17:56:06Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/70242#pullrequestreview-2228526321", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 26910504715, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4bd59ac2f21f5dac3d449669d50e03e7fbd0855b/checks?check_suite_id=26910504715", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4bd59ac2f21f5dac3d449669d50e03e7fbd0855b/checks?check_suite_id=26910504715", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-08-07T14:57:44Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2024-08-07T14:57:29Z", + "committedDate": "2024-08-07T14:57:29Z", + "pushedDate": null, + "oid": "4bd59ac2f21f5dac3d449669d50e03e7fbd0855b", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "IC_kwDOAFz6BM6HhVto", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 2273663848, + "body": "@mfedderly Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 3 packages in this PR\n\n* `polygon-lookup` — [on npm](https://www.npmjs.com/package/polygon-lookup), [on unpkg](https://unpkg.com/browse/polygon-lookup@latest/)\n - owner-approval: @ffflorian\n* `rbush` — [on npm](https://www.npmjs.com/package/rbush), [on unpkg](https://unpkg.com/browse/rbush@latest/)\n* `which-polygon` — [on npm](https://www.npmjs.com/package/which-polygon), [on unpkg](https://unpkg.com/browse/which-polygon@latest/)\n\n## Code Reviews\n\nBecause this PR edits multiple packages, it can be merged once it's reviewed by a DT maintainer.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=70242&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * 🕐 A DT maintainer needs to approve changes that affect more than one package\n\nOnce every item on this list is checked, I'll ask you for permission to merge and publish the changes.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2024-08-07T14:50:55Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM6HhVus", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 2273663916, + "body": "Hey @mfedderly,\n\n:unamused: Your PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Please consider [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-test-editing-an-existing-package) to cover the change you're making. Including tests allows this PR to be merged by yourself and the owners of this module.\n\n***This can potentially save days of time for you!***\n", + "createdAt": "2024-08-07T14:50:57Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM6HhVvL", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 2273663947, + "body": "🔔 @ffflorian @danvk @cmslewis @k-yle — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/70242/files) in the next few days. Be sure to explicitly select **`Approve`** or **`Request Changes`** in the GitHub UI so I know what's going on.\n", + "createdAt": "2024-08-07T14:50:57Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM6HhXDU", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 2273669332, + "body": "@mfedderly The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/68d9f5250a0d2cac52a121ced169896dd12a8e6b/checks?check_suite_id=26910149818).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds that are failing do not end up on the list of PRs for the DT maintainers to review.**\n", + "createdAt": "2024-08-07T14:53:28Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM6Hrp2i", + "author": { + "login": "ffflorian", + "__typename": "User" + }, + "databaseId": 2276367778, + "body": "LGTM for package `polygon-lookup`.", + "createdAt": "2024-08-08T17:55:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 4, + "nodes": [ + { + "path": "attw.json", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/polygon-lookup/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/rbush/index.d.ts", + "additions": 13, + "deletions": 9, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/which-polygon/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "NA", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectItems": { + "nodes": [ + { + "id": "PVTI_lADOADeBNM4AkH1qzgRnZjQ", + "project": { + "id": "PVT_kwDOADeBNM4AkH1q", + "number": 1, + "__typename": "ProjectV2" + }, + "fieldValueByName": { + "name": "Waiting for Code Reviews (Blessed)", + "field": { + "id": "PVTSSF_lADOADeBNM4AkH1qzgcYOEM", + "__typename": "ProjectV2SingleSelectField" + }, + "__typename": "ProjectV2ItemFieldSingleSelectValue" + }, + "updatedAt": "2024-08-08T19:44:41Z", + "__typename": "ProjectV2Item" + } + ], + "__typename": "ProjectV2ItemConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/70242/derived.json b/packages/mergebot/src/_tests/fixtures/70242/derived.json new file mode 100644 index 0000000000..8103cfaee5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/70242/derived.json @@ -0,0 +1,92 @@ +{ + "type": "info", + "now": "2024-08-08T19:44:45.603Z", + "pr_number": 70242, + "author": "mfedderly", + "headCommitOid": "4bd59ac2f21f5dac3d449669d50e03e7fbd0855b", + "mergeBaseOid": "74fbc3d0e182be4e15cd85cf84dc0d02ba6b78f3", + "lastPushDate": "2024-08-07T14:50:19.000Z", + "lastActivityDate": "2024-08-08T17:56:06.000Z", + "maintainerBlessed": "Waiting for Code Reviews (Blessed)", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": null, + "kind": "edit", + "files": [ + { + "path": "attw.json", + "kind": "infrastructure" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical", + "isSafeInfrastructureEdit": true + }, + { + "name": "polygon-lookup", + "kind": "edit", + "files": [ + { + "path": "types/polygon-lookup/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "ffflorian" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + }, + { + "name": "rbush", + "kind": "edit", + "files": [ + { + "path": "types/rbush/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "danvk", + "cmslewis" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + }, + { + "name": "which-polygon", + "kind": "edit", + "files": [ + { + "path": "types/which-polygon/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "k-yle" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "ffflorian", + "date": "2024-08-08T17:56:06.000Z", + "isMaintainer": false + } + ], + "mainBotCommentID": 2273663848, + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/70242/mutations.json b/packages/mergebot/src/_tests/fixtures/70242/mutations.json new file mode 100644 index 0000000000..3ee741d042 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/70242/mutations.json @@ -0,0 +1,11 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM6HhVto", + "body": "@mfedderly Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 3 packages in this PR\n\n* `polygon-lookup` — [on npm](https://www.npmjs.com/package/polygon-lookup), [on unpkg](https://unpkg.com/browse/polygon-lookup@latest/)\n - owner-approval: @ffflorian\n* `rbush` — [on npm](https://www.npmjs.com/package/rbush), [on unpkg](https://unpkg.com/browse/rbush@latest/)\n* `which-polygon` — [on npm](https://www.npmjs.com/package/which-polygon), [on unpkg](https://unpkg.com/browse/which-polygon@latest/)\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=70242&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * 🕐 Type definition owners or DT maintainers needs to approve changes that affect more than one package\n\nOnce every item on this list is checked, I'll ask you for permission to merge and publish the changes.\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/70242/result.json b/packages/mergebot/src/_tests/fixtures/70242/result.json new file mode 100644 index 0000000000..d02471d2c2 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/70242/result.json @@ -0,0 +1,22 @@ +{ + "projectColumn": "Waiting for Code Reviews (Blessed)", + "labels": [ + "Popular package", + "Owner Approved", + "Edits multiple packages", + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @mfedderly,\n\n:unamused: Your PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Please consider [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-test-editing-an-existing-package) to cover the change you're making. Including tests allows this PR to be merged by yourself and the owners of this module.\n\n***This can potentially save days of time for you!***" + }, + { + "tag": "welcome", + "status": "@mfedderly Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 3 packages in this PR\n\n* `polygon-lookup` — [on npm](https://www.npmjs.com/package/polygon-lookup), [on unpkg](https://unpkg.com/browse/polygon-lookup@latest/)\n - owner-approval: @ffflorian\n* `rbush` — [on npm](https://www.npmjs.com/package/rbush), [on unpkg](https://unpkg.com/browse/rbush@latest/)\n* `which-polygon` — [on npm](https://www.npmjs.com/package/which-polygon), [on unpkg](https://unpkg.com/browse/which-polygon@latest/)\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=70242&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * 🕐 Type definition owners or DT maintainers needs to approve changes that affect more than one package\n\nOnce every item on this list is checked, I'll ask you for permission to merge and publish the changes.\n\n----------------------\n... diagnostics scrubbed ..." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/basic.ts b/packages/mergebot/src/basic.ts index e2806eff8c..293c424040 100644 --- a/packages/mergebot/src/basic.ts +++ b/packages/mergebot/src/basic.ts @@ -9,7 +9,21 @@ export type ColumnName = | BlessedColumnName | "*REMOVE*"; // special value: indicates closing the PR -export type BlessedColumnName = "Waiting for Code Reviews (Blessed)"; +export type BlessedColumnName = (typeof blessedColumnNames)[number]; + +const blessedColumnNames = [ + "Waiting for Code Reviews (Blessed)", + "Waiting for Author to Merge (Blessed)", +] as const; + +export function isBlessedColumnName(column: string): column is BlessedColumnName { + return blessedColumnNames.includes(column as BlessedColumnName); +} + +export const columnNameToBlessed: { [K in ColumnName]?: BlessedColumnName } = { + "Waiting for Code Reviews": "Waiting for Code Reviews (Blessed)", + "Waiting for Author to Merge": "Waiting for Author to Merge (Blessed)", +}; export type PopularityLevel = "Well-liked by everyone" | "Popular" | "Critical"; @@ -51,7 +65,13 @@ export const labelNames = [ ...stalenessKinds, ] as const; -export type ApproverKind = "maintainer" | "owner" | "other"; +export type ApproverKind = (typeof approverKindOrder)[number]; + +const approverKindOrder = ["other", "owner", "maintainer"] as const; + +export function getMaxApproverKind(...kinds: ApproverKind[]): ApproverKind { + return approverKindOrder[kinds.reduce((max, kind) => Math.max(max, approverKindOrder.indexOf(kind)), 0)]!; +} // https://github.com/orgs/DefinitelyTyped/projects/1 export const projectBoardNumber = 1; diff --git a/packages/mergebot/src/compute-pr-actions.ts b/packages/mergebot/src/compute-pr-actions.ts index 21729068c4..a9ebdfc60d 100644 --- a/packages/mergebot/src/compute-pr-actions.ts +++ b/packages/mergebot/src/compute-pr-actions.ts @@ -1,8 +1,8 @@ -import { ColumnName, LabelName, StalenessKind, ApproverKind } from "./basic"; +import { ColumnName, LabelName, StalenessKind, ApproverKind, getMaxApproverKind } from "./basic"; import * as Comments from "./comments"; import * as emoji from "./emoji"; import * as urls from "./urls"; -import { PrInfo, BotResult, FileInfo, ReviewInfo } from "./pr-info"; +import { PrInfo, BotResult, FileInfo, ReviewInfo, PackageInfo } from "./pr-info"; import { noNullish, flatten, unique, sameUser, min, sha256, abbrOid, txt } from "./util/util"; import dayjs from "dayjs"; import advancedFormat from "dayjs/plugin/advancedFormat"; @@ -114,9 +114,7 @@ function extendPrInfo(info: PrInfo): ExtendedPrInfo { const changereqReviews = info.reviews.filter((r) => r.type === "changereq") as ExtendedPrInfo["changereqReviews"]; const staleReviews = info.reviews.filter((r) => r.type === "stale") as ExtendedPrInfo["staleReviews"]; const hasChangereqs = changereqReviews.length > 0; - const approvedBy = getApprovedBy(); - const pendingCriticalPackages = getPendingCriticalPackages(); - const approverKind = getApproverKind(); + const maxApproverKind = getMaxApproverKind(...info.pkgInfo.map(getApproverKind)); const approved = getApproved(); const failedCI = info.ciResult === "fail"; const blockedCI = info.ciResult === "action_required"; @@ -145,9 +143,9 @@ function extendPrInfo(info: PrInfo): ExtendedPrInfo { editsOwners, canBeSelfMerged, hasValidMergeRequest, - pendingCriticalPackages, + pendingCriticalPackages: getPendingCriticalPackages(), approved, - approverKind, + approverKind: maxApproverKind, requireMaintainer, blessable, blessed, @@ -166,7 +164,7 @@ function extendPrInfo(info: PrInfo): ExtendedPrInfo { approvedReviews, changereqReviews, staleReviews, - approvedBy, + approvedBy: getApprovedBy(), hasChangereqs, needsAuthorAction, reviewColumn, @@ -199,7 +197,7 @@ function extendPrInfo(info: PrInfo): ExtendedPrInfo { } function isBlessed(): boolean { - return info.maintainerBlessed === "Waiting for Code Reviews (Blessed)"; + return !!info.maintainerBlessed; } function getApprovedBy() { @@ -220,7 +218,7 @@ function extendPrInfo(info: PrInfo): ExtendedPrInfo { ); } - function getApproverKind() { + function getApproverKind(pkg: PackageInfo): ApproverKind { const who: ApproverKind = requireMaintainer ? "maintainer" : ( @@ -229,17 +227,24 @@ function extendPrInfo(info: PrInfo): ExtendedPrInfo { Popular: "owner", Critical: "maintainer", } as const - )[info.popularityLevel]; + )[pkg.popularityLevel]; return who === "maintainer" && blessed ? "owner" : who === "owner" && noOtherOwners ? "maintainer" : who; } function getApproved() { - if (approvedBy.includes("maintainer")) return true; // maintainer approval => no need for anything else - return ( - pendingCriticalPackages.length === 0 && - approvedBy.length > 0 && - (approverKind === "other" || approvedBy.includes("maintainer") || approvedBy.includes(approverKind)) - ); + if (hasChangereqs) return false; + if (approvedReviews.some((r) => r.isMaintainer)) return true; // maintainer approval => no need for anything else + + return info.pkgInfo.every((pkg) => { + const requiredApproverKind = getApproverKind(pkg); + for (const r of approvedReviews) { + const approverKind = pkg.owners.some((o) => sameUser(o, r.reviewer)) ? "owner" : "other"; + if (getMaxApproverKind(approverKind, requiredApproverKind) === approverKind) { + return true; + } + } + return false; + }) } function getReviewColumn(): ColumnName { @@ -247,7 +252,7 @@ function extendPrInfo(info: PrInfo): ExtendedPrInfo { // E.g. let people review, but fall back to the DT maintainers based on the access rights above return blessed ? "Waiting for Code Reviews (Blessed)" - : approverKind !== "maintainer" + : maxApproverKind !== "maintainer" ? "Waiting for Code Reviews" : blessable ? "Needs Maintainer Review" @@ -379,7 +384,7 @@ export function process(prInfo: BotResult, extendedCallback: (info: ExtendedPrIn actions.shouldMerge = true; actions.projectColumn = "Recently Merged"; } else { - actions.projectColumn = "Waiting for Author to Merge"; + actions.projectColumn = prInfo.maintainerBlessed ? "Waiting for Author to Merge (Blessed)" : "Waiting for Author to Merge"; } } // Ping stale reviewers if any diff --git a/packages/mergebot/src/pr-info.ts b/packages/mergebot/src/pr-info.ts index 3ce6b98927..1eed6846fc 100644 --- a/packages/mergebot/src/pr-info.ts +++ b/packages/mergebot/src/pr-info.ts @@ -1,4 +1,4 @@ -import { BlessedColumnName, ColumnName, PopularityLevel, projectBoardNumber } from "./basic"; +import { BlessedColumnName, ColumnName, columnNameToBlessed, isBlessedColumnName, PopularityLevel, projectBoardNumber } from "./basic"; import { PR_repository_pullRequest, PR_repository_pullRequest_commits_nodes_commit_checkSuites, @@ -309,7 +309,7 @@ function getLastMaintainerBlessing( const card = pr.projectItems.nodes?.find((card) => card?.project.number === projectBoardNumber); const columnName = card?.fieldValueByName?.__typename === "ProjectV2ItemFieldSingleSelectValue" && card.fieldValueByName.name; - if (columnName === "Waiting for Code Reviews (Blessed)" && card?.updatedAt) { + if (columnName && isBlessedColumnName(columnName) && card?.updatedAt) { // Normally relying on the updatedAt of the card is not reliable, but in this case it's fine // becuase the bot will never move the card into the blessed state, only out of it. // If the card is already in a blessed state, the bot will not mutate the card. @@ -330,8 +330,9 @@ function getLastMaintainerBlessing( const d = new Date(item.createdAt); if (d <= after) return undefined; const columnName = item.projectColumnName as ColumnName; - if (columnName === "Waiting for Code Reviews") { - return { date: d, column: "Waiting for Code Reviews (Blessed)" }; + const blessedColumnName = columnNameToBlessed[columnName]; + if (blessedColumnName) { + return { date: d, column: blessedColumnName }; } return undefined; }) || undefined