From 97abc80422160914f279a1bc793c47dda83cc0c1 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Mon, 1 Jul 2024 11:07:14 -0700 Subject: [PATCH] Add mergebot (#1023) * Copy code from dt-mergebot Unmodified as yet * Remove mistaken file, add missed one, update task list * update dt-mergebot repo and copy new files * Update dependencies * Add workflows and adjust for new repo * change name dt-mergebot -> mergebot * lint according to dt-tools rules * pnpm run format * address code review * update pnpm-lock.yaml Restore to version from main, then install using the local version of pnpm. * Fix compile errors 1. Name conflict from changing TOO_MANY_FILES to tooManyFiles. Renamed again. 2. Placeholder tsconfig for mergebot test doesn't exist. There is no separate tconfig for tests! * Make knip pass Add entrypoints, ignore graphql, remove unused devDeps * update pnpm-lock.yaml * remove test.yml * More PR comments 1. Add test.yml steps to ci.yml. 2. Some fixes to deploy.yml. 2. jest now runs mergebot tests * Ignore **/dist/** in knip No error on my machine, but maybe it'll help CI --- .eslintignore | 1 + .github/workflows/ci.yml | 6 +- .github/workflows/daily.yml | 33 + .github/workflows/deploy.yml | 83 + .knip.jsonc | 7 +- .npmrc | 2 +- jest.config.js | 2 +- packages/mergebot/.eslintignore | 2 + packages/mergebot/README.md | 142 + packages/mergebot/apollo.config.js | 17 + .../mergebot/docs/dt-mergebot-lifecycle.svg | 175 + packages/mergebot/docs/how-it-works.md | 55 + packages/mergebot/docs/policy.md | 64 + packages/mergebot/host.json | 22 + packages/mergebot/local.settings.json | 8 + packages/mergebot/package.json | 79 + .../mergebot/src/_tests/cachedQueries.json | 322 ++ .../mergebot/src/_tests/discussions.test.ts | 28 + .../src/_tests/fixturedActions.test.ts | 64 + .../src/_tests/fixtures/38979/_downloads.json | 3 + .../src/_tests/fixtures/38979/_files.json | 4 + .../src/_tests/fixtures/38979/_response.json | 2495 +++++++++++++ .../src/_tests/fixtures/38979/derived.json | 339 ++ .../src/_tests/fixtures/38979/mutations.json | 70 + .../src/_tests/fixtures/38979/result.json | 30 + .../src/_tests/fixtures/43136/_downloads.json | 3 + .../src/_tests/fixtures/43136/_files.json | 4 + .../src/_tests/fixtures/43136/_notes.txt | 1 + .../src/_tests/fixtures/43136/_response.json | 336 ++ .../src/_tests/fixtures/43136/derived.json | 46 + .../src/_tests/fixtures/43136/mutations.json | 61 + .../src/_tests/fixtures/43136/result.json | 23 + .../src/_tests/fixtures/43144/_downloads.json | 3 + .../src/_tests/fixtures/43144/_files.json | 4 + .../src/_tests/fixtures/43144/_notes.txt | 1 + .../src/_tests/fixtures/43144/_response.json | 277 ++ .../src/_tests/fixtures/43144/derived.json | 46 + .../src/_tests/fixtures/43144/mutations.json | 40 + .../src/_tests/fixtures/43144/result.json | 20 + .../src/_tests/fixtures/43151/_downloads.json | 3 + .../src/_tests/fixtures/43151/_files.json | 3 + .../src/_tests/fixtures/43151/_notes.txt | 1 + .../src/_tests/fixtures/43151/_response.json | 221 ++ .../src/_tests/fixtures/43151/derived.json | 48 + .../src/_tests/fixtures/43151/mutations.json | 51 + .../src/_tests/fixtures/43151/result.json | 20 + .../src/_tests/fixtures/43160/_downloads.json | 3 + .../src/_tests/fixtures/43160/_files.json | 4 + .../src/_tests/fixtures/43160/_notes.txt | 1 + .../src/_tests/fixtures/43160/_response.json | 214 ++ .../src/_tests/fixtures/43160/derived.json | 46 + .../src/_tests/fixtures/43160/mutations.json | 49 + .../src/_tests/fixtures/43160/result.json | 25 + .../src/_tests/fixtures/43175/_downloads.json | 3 + .../src/_tests/fixtures/43175/_files.json | 4 + .../src/_tests/fixtures/43175/_notes.txt | 1 + .../src/_tests/fixtures/43175/_response.json | 277 ++ .../src/_tests/fixtures/43175/derived.json | 51 + .../src/_tests/fixtures/43175/mutations.json | 47 + .../src/_tests/fixtures/43175/result.json | 28 + .../src/_tests/fixtures/43235/_downloads.json | 3 + .../src/_tests/fixtures/43235/_files.json | 4 + .../src/_tests/fixtures/43235/_notes.txt | 1 + .../src/_tests/fixtures/43235/_response.json | 139 + .../src/_tests/fixtures/43235/derived.json | 40 + .../src/_tests/fixtures/43235/mutations.json | 29 + .../src/_tests/fixtures/43235/result.json | 17 + .../src/_tests/fixtures/43314/_downloads.json | 3 + .../src/_tests/fixtures/43314/_files.json | 3 + .../src/_tests/fixtures/43314/_response.json | 260 ++ .../src/_tests/fixtures/43314/derived.json | 48 + .../src/_tests/fixtures/43314/mutations.json | 40 + .../src/_tests/fixtures/43314/result.json | 20 + .../43695-duplicate-comment/_downloads.json | 3 + .../43695-duplicate-comment/_files.json | 3 + .../43695-duplicate-comment/_response.json | 1266 +++++++ .../43695-duplicate-comment/derived.json | 61 + .../43695-duplicate-comment/mutations.json | 69 + .../43695-duplicate-comment/result.json | 29 + .../43695-post-review/_downloads.json | 3 + .../fixtures/43695-post-review/_files.json | 3 + .../fixtures/43695-post-review/_response.json | 780 ++++ .../fixtures/43695-post-review/derived.json | 60 + .../fixtures/43695-post-review/mutations.json | 40 + .../fixtures/43695-post-review/result.json | 21 + .../src/_tests/fixtures/43695/_downloads.json | 3 + .../src/_tests/fixtures/43695/_files.json | 3 + .../src/_tests/fixtures/43695/_response.json | 416 +++ .../src/_tests/fixtures/43695/derived.json | 54 + .../src/_tests/fixtures/43695/mutations.json | 40 + .../src/_tests/fixtures/43695/result.json | 21 + .../fixtures/43960-post-close/_downloads.json | 1 + .../fixtures/43960-post-close/_files.json | 3 + .../fixtures/43960-post-close/_response.json | 561 +++ .../fixtures/43960-post-close/derived.json | 6 + .../fixtures/43960-post-close/mutations.json | 10 + .../fixtures/43960-post-close/result.json | 8 + .../src/_tests/fixtures/43960/_downloads.json | 3 + .../src/_tests/fixtures/43960/_files.json | 4 + .../src/_tests/fixtures/43960/_response.json | 466 +++ .../src/_tests/fixtures/43960/derived.json | 46 + .../src/_tests/fixtures/43960/mutations.json | 31 + .../src/_tests/fixtures/43960/result.json | 20 + .../src/_tests/fixtures/44105/_downloads.json | 1 + .../src/_tests/fixtures/44105/_files.json | 1 + .../src/_tests/fixtures/44105/_response.json | 453 +++ .../src/_tests/fixtures/44105/derived.json | 5 + .../src/_tests/fixtures/44105/mutations.json | 10 + .../src/_tests/fixtures/44105/result.json | 8 + .../src/_tests/fixtures/44256/_downloads.json | 1 + .../src/_tests/fixtures/44256/_files.json | 1 + .../src/_tests/fixtures/44256/_response.json | 553 +++ .../src/_tests/fixtures/44256/derived.json | 6 + .../src/_tests/fixtures/44256/mutations.json | 10 + .../src/_tests/fixtures/44256/result.json | 8 + .../src/_tests/fixtures/44267/_downloads.json | 3 + .../src/_tests/fixtures/44267/_files.json | 4 + .../src/_tests/fixtures/44267/_response.json | 269 ++ .../src/_tests/fixtures/44267/derived.json | 50 + .../src/_tests/fixtures/44267/mutations.json | 51 + .../src/_tests/fixtures/44267/result.json | 20 + .../src/_tests/fixtures/44282/_downloads.json | 3 + .../src/_tests/fixtures/44282/_files.json | 4 + .../src/_tests/fixtures/44282/_response.json | 392 ++ .../src/_tests/fixtures/44282/derived.json | 39 + .../src/_tests/fixtures/44282/mutations.json | 31 + .../src/_tests/fixtures/44282/result.json | 20 + .../src/_tests/fixtures/44288/_downloads.json | 3 + .../src/_tests/fixtures/44288/_files.json | 4 + .../src/_tests/fixtures/44288/_response.json | 204 + .../src/_tests/fixtures/44288/derived.json | 39 + .../src/_tests/fixtures/44288/mutations.json | 20 + .../src/_tests/fixtures/44288/result.json | 17 + .../src/_tests/fixtures/44290/_downloads.json | 1 + .../src/_tests/fixtures/44290/_files.json | 1 + .../src/_tests/fixtures/44290/_response.json | 353 ++ .../src/_tests/fixtures/44290/derived.json | 6 + .../src/_tests/fixtures/44290/mutations.json | 1 + .../src/_tests/fixtures/44290/result.json | 8 + .../fixtures/44299-with-files/_downloads.json | 3 + .../fixtures/44299-with-files/_files.json | 4 + .../fixtures/44299-with-files/_response.json | 299 ++ .../fixtures/44299-with-files/derived.json | 52 + .../fixtures/44299-with-files/mutations.json | 40 + .../fixtures/44299-with-files/result.json | 20 + .../src/_tests/fixtures/44299/_downloads.json | 3 + .../src/_tests/fixtures/44299/_files.json | 3 + .../src/_tests/fixtures/44299/_response.json | 299 ++ .../src/_tests/fixtures/44299/derived.json | 52 + .../src/_tests/fixtures/44299/mutations.json | 40 + .../src/_tests/fixtures/44299/result.json | 20 + .../src/_tests/fixtures/44316/_downloads.json | 3 + .../src/_tests/fixtures/44316/_files.json | 4 + .../src/_tests/fixtures/44316/_response.json | 322 ++ .../src/_tests/fixtures/44316/derived.json | 43 + .../src/_tests/fixtures/44316/mutations.json | 31 + .../src/_tests/fixtures/44316/result.json | 20 + .../44343-pending-travis/_downloads.json | 3 + .../fixtures/44343-pending-travis/_files.json | 4 + .../44343-pending-travis/_response.json | 303 ++ .../44343-pending-travis/derived.json | 35 + .../44343-pending-travis/mutations.json | 31 + .../fixtures/44343-pending-travis/result.json | 17 + .../fixtures/44343-pre-travis/_downloads.json | 3 + .../fixtures/44343-pre-travis/_files.json | 4 + .../fixtures/44343-pre-travis/_response.json | 278 ++ .../fixtures/44343-pre-travis/derived.json | 35 + .../fixtures/44343-pre-travis/mutations.json | 31 + .../fixtures/44343-pre-travis/result.json | 17 + .../src/_tests/fixtures/44343/_downloads.json | 3 + .../src/_tests/fixtures/44343/_files.json | 4 + .../src/_tests/fixtures/44343/_response.json | 303 ++ .../src/_tests/fixtures/44343/derived.json | 35 + .../src/_tests/fixtures/44343/mutations.json | 31 + .../src/_tests/fixtures/44343/result.json | 17 + .../src/_tests/fixtures/44402/_downloads.json | 1 + .../src/_tests/fixtures/44402/_files.json | 1 + .../src/_tests/fixtures/44402/_response.json | 298 ++ .../src/_tests/fixtures/44402/derived.json | 69 + .../src/_tests/fixtures/44402/mutations.json | 41 + .../src/_tests/fixtures/44402/result.json | 22 + .../src/_tests/fixtures/44411/_downloads.json | 3 + .../src/_tests/fixtures/44411/_files.json | 4 + .../src/_tests/fixtures/44411/_response.json | 249 ++ .../src/_tests/fixtures/44411/derived.json | 59 + .../src/_tests/fixtures/44411/mutations.json | 31 + .../src/_tests/fixtures/44411/result.json | 20 + .../_downloads.json | 3 + .../_files.json | 4 + .../_response.json | 791 ++++ .../derived.json | 438 +++ .../mutations.json | 32 + .../result.json | 22 + .../_downloads.json | 3 + .../44424-2-after-travis-second/_files.json | 4 + .../_response.json | 791 ++++ .../44424-2-after-travis-second/derived.json | 438 +++ .../mutations.json | 23 + .../44424-2-after-travis-second/result.json | 22 + .../src/_tests/fixtures/44437/_downloads.json | 3 + .../src/_tests/fixtures/44437/_files.json | 4 + .../src/_tests/fixtures/44437/_response.json | 339 ++ .../src/_tests/fixtures/44437/derived.json | 53 + .../src/_tests/fixtures/44437/mutations.json | 31 + .../src/_tests/fixtures/44437/result.json | 22 + .../src/_tests/fixtures/44439/_downloads.json | 3 + .../src/_tests/fixtures/44439/_files.json | 4 + .../src/_tests/fixtures/44439/_response.json | 312 ++ .../src/_tests/fixtures/44439/derived.json | 56 + .../src/_tests/fixtures/44439/mutations.json | 31 + .../src/_tests/fixtures/44439/result.json | 20 + .../src/_tests/fixtures/44631/_downloads.json | 3 + .../src/_tests/fixtures/44631/_files.json | 4 + .../src/_tests/fixtures/44631/_response.json | 272 ++ .../src/_tests/fixtures/44631/derived.json | 48 + .../src/_tests/fixtures/44631/mutations.json | 59 + .../src/_tests/fixtures/44631/result.json | 20 + .../src/_tests/fixtures/44857/_downloads.json | 3 + .../src/_tests/fixtures/44857/_files.json | 4 + .../src/_tests/fixtures/44857/_response.json | 1047 ++++++ .../src/_tests/fixtures/44857/derived.json | 160 + .../src/_tests/fixtures/44857/mutations.json | 42 + .../src/_tests/fixtures/44857/result.json | 29 + .../fixtures/44989-14days/_downloads.json | 3 + .../_tests/fixtures/44989-14days/_files.json | 4 + .../fixtures/44989-14days/_response.json | 448 +++ .../_tests/fixtures/44989-14days/derived.json | 75 + .../fixtures/44989-14days/mutations.json | 40 + .../_tests/fixtures/44989-14days/result.json | 26 + .../fixtures/44989-32days/_downloads.json | 3 + .../_tests/fixtures/44989-32days/_files.json | 4 + .../fixtures/44989-32days/_response.json | 448 +++ .../_tests/fixtures/44989-32days/derived.json | 75 + .../fixtures/44989-32days/mutations.json | 56 + .../_tests/fixtures/44989-32days/result.json | 26 + .../fixtures/44989-3days/_downloads.json | 3 + .../_tests/fixtures/44989-3days/_files.json | 4 + .../fixtures/44989-3days/_response.json | 448 +++ .../_tests/fixtures/44989-3days/derived.json | 75 + .../fixtures/44989-3days/mutations.json | 20 + .../_tests/fixtures/44989-3days/result.json | 21 + .../fixtures/44989-7days/_downloads.json | 3 + .../_tests/fixtures/44989-7days/_files.json | 4 + .../fixtures/44989-7days/_response.json | 448 +++ .../_tests/fixtures/44989-7days/derived.json | 75 + .../fixtures/44989-7days/mutations.json | 20 + .../_tests/fixtures/44989-7days/result.json | 21 + .../src/_tests/fixtures/45137/_downloads.json | 3 + .../src/_tests/fixtures/45137/_files.json | 4 + .../src/_tests/fixtures/45137/_response.json | 311 ++ .../src/_tests/fixtures/45137/derived.json | 74 + .../src/_tests/fixtures/45137/mutations.json | 41 + .../src/_tests/fixtures/45137/result.json | 28 + .../src/_tests/fixtures/45627/_downloads.json | 3 + .../src/_tests/fixtures/45627/_files.json | 4 + .../src/_tests/fixtures/45627/_response.json | 324 ++ .../src/_tests/fixtures/45627/derived.json | 68 + .../src/_tests/fixtures/45627/mutations.json | 78 + .../src/_tests/fixtures/45627/result.json | 32 + .../src/_tests/fixtures/45836/_downloads.json | 4 + .../src/_tests/fixtures/45836/_files.json | 6 + .../src/_tests/fixtures/45836/_response.json | 569 +++ .../src/_tests/fixtures/45836/derived.json | 74 + .../src/_tests/fixtures/45836/mutations.json | 60 + .../src/_tests/fixtures/45836/result.json | 21 + .../src/_tests/fixtures/45884/_downloads.json | 3 + .../src/_tests/fixtures/45884/_files.json | 4 + .../src/_tests/fixtures/45884/_response.json | 302 ++ .../src/_tests/fixtures/45884/derived.json | 53 + .../src/_tests/fixtures/45884/mutations.json | 29 + .../src/_tests/fixtures/45884/result.json | 25 + .../src/_tests/fixtures/45888/_downloads.json | 3 + .../src/_tests/fixtures/45888/_files.json | 4 + .../src/_tests/fixtures/45888/_response.json | 254 ++ .../src/_tests/fixtures/45888/derived.json | 46 + .../src/_tests/fixtures/45888/mutations.json | 20 + .../src/_tests/fixtures/45888/result.json | 24 + .../src/_tests/fixtures/45890/_downloads.json | 3 + .../src/_tests/fixtures/45890/_files.json | 3 + .../src/_tests/fixtures/45890/_response.json | 384 ++ .../src/_tests/fixtures/45890/derived.json | 55 + .../src/_tests/fixtures/45890/mutations.json | 40 + .../src/_tests/fixtures/45890/result.json | 21 + .../src/_tests/fixtures/45946/_downloads.json | 3 + .../src/_tests/fixtures/45946/_files.json | 3 + .../src/_tests/fixtures/45946/_response.json | 226 ++ .../src/_tests/fixtures/45946/derived.json | 63 + .../src/_tests/fixtures/45946/mutations.json | 51 + .../src/_tests/fixtures/45946/result.json | 21 + .../src/_tests/fixtures/45982/_downloads.json | 3 + .../src/_tests/fixtures/45982/_files.json | 3 + .../src/_tests/fixtures/45982/_response.json | 287 ++ .../src/_tests/fixtures/45982/derived.json | 6 + .../src/_tests/fixtures/45982/mutations.json | 44 + .../src/_tests/fixtures/45982/result.json | 15 + .../src/_tests/fixtures/45999/_downloads.json | 3 + .../src/_tests/fixtures/45999/_files.json | 4 + .../src/_tests/fixtures/45999/_response.json | 517 +++ .../src/_tests/fixtures/45999/derived.json | 75 + .../src/_tests/fixtures/45999/mutations.json | 40 + .../src/_tests/fixtures/45999/result.json | 21 + .../src/_tests/fixtures/46008/_downloads.json | 3 + .../src/_tests/fixtures/46008/_files.json | 4 + .../src/_tests/fixtures/46008/_response.json | 364 ++ .../src/_tests/fixtures/46008/derived.json | 44 + .../src/_tests/fixtures/46008/mutations.json | 49 + .../src/_tests/fixtures/46008/result.json | 25 + .../src/_tests/fixtures/46019/_downloads.json | 3 + .../src/_tests/fixtures/46019/_files.json | 4 + .../src/_tests/fixtures/46019/_response.json | 293 ++ .../src/_tests/fixtures/46019/derived.json | 57 + .../src/_tests/fixtures/46019/mutations.json | 31 + .../src/_tests/fixtures/46019/result.json | 22 + .../src/_tests/fixtures/46120/_downloads.json | 3 + .../src/_tests/fixtures/46120/_files.json | 4 + .../src/_tests/fixtures/46120/_response.json | 2260 +++++++++++ .../src/_tests/fixtures/46120/derived.json | 56 + .../src/_tests/fixtures/46120/mutations.json | 38 + .../src/_tests/fixtures/46120/result.json | 26 + .../src/_tests/fixtures/46191/_downloads.json | 3 + .../src/_tests/fixtures/46191/_files.json | 8 + .../src/_tests/fixtures/46191/_response.json | 304 ++ .../src/_tests/fixtures/46191/derived.json | 46 + .../src/_tests/fixtures/46191/mutations.json | 52 + .../src/_tests/fixtures/46191/result.json | 29 + .../src/_tests/fixtures/46196/_downloads.json | 3 + .../src/_tests/fixtures/46196/_files.json | 7 + .../src/_tests/fixtures/46196/_response.json | 261 ++ .../src/_tests/fixtures/46196/derived.json | 48 + .../src/_tests/fixtures/46196/mutations.json | 11 + .../src/_tests/fixtures/46196/result.json | 19 + .../src/_tests/fixtures/46279/_downloads.json | 3 + .../src/_tests/fixtures/46279/_files.json | 4 + .../src/_tests/fixtures/46279/_response.json | 179 + .../src/_tests/fixtures/46279/derived.json | 36 + .../src/_tests/fixtures/46279/mutations.json | 29 + .../src/_tests/fixtures/46279/result.json | 25 + .../src/_tests/fixtures/46804/_downloads.json | 3 + .../src/_tests/fixtures/46804/_files.json | 4 + .../src/_tests/fixtures/46804/_response.json | 348 ++ .../src/_tests/fixtures/46804/derived.json | 38 + .../src/_tests/fixtures/46804/mutations.json | 31 + .../src/_tests/fixtures/46804/result.json | 23 + .../src/_tests/fixtures/46879/_downloads.json | 3 + .../src/_tests/fixtures/46879/_files.json | 4 + .../src/_tests/fixtures/46879/_response.json | 211 ++ .../src/_tests/fixtures/46879/derived.json | 44 + .../src/_tests/fixtures/46879/mutations.json | 31 + .../src/_tests/fixtures/46879/result.json | 19 + .../_downloads.json | 4 + .../47017-blessed-and-one-owner/_files.json | 6 + .../_response.json | 354 ++ .../47017-blessed-and-one-owner/derived.json | 78 + .../mutations.json | 11 + .../47017-blessed-and-one-owner/result.json | 16 + .../_downloads.json | 4 + .../47017-blessed-and-two-owner/_files.json | 6 + .../_response.json | 354 ++ .../47017-blessed-and-two-owner/derived.json | 78 + .../mutations.json | 41 + .../47017-blessed-and-two-owner/result.json | 22 + .../fixtures/47017-blessed/_downloads.json | 4 + .../_tests/fixtures/47017-blessed/_files.json | 6 + .../fixtures/47017-blessed/_response.json | 333 ++ .../fixtures/47017-blessed/derived.json | 71 + .../fixtures/47017-blessed/mutations.json | 11 + .../_tests/fixtures/47017-blessed/result.json | 20 + .../src/_tests/fixtures/47017/_downloads.json | 4 + .../src/_tests/fixtures/47017/_files.json | 6 + .../src/_tests/fixtures/47017/_response.json | 324 ++ .../src/_tests/fixtures/47017/derived.json | 70 + .../src/_tests/fixtures/47017/mutations.json | 20 + .../src/_tests/fixtures/47017/result.json | 20 + .../src/_tests/fixtures/48216/_downloads.json | 3 + .../src/_tests/fixtures/48216/_files.json | 6 + .../src/_tests/fixtures/48216/_response.json | 221 ++ .../src/_tests/fixtures/48216/derived.json | 40 + .../src/_tests/fixtures/48216/mutations.json | 31 + .../src/_tests/fixtures/48216/result.json | 17 + .../src/_tests/fixtures/48236/_downloads.json | 3 + .../src/_tests/fixtures/48236/_files.json | 6 + .../src/_tests/fixtures/48236/_response.json | 362 ++ .../src/_tests/fixtures/48236/derived.json | 55 + .../src/_tests/fixtures/48236/mutations.json | 52 + .../src/_tests/fixtures/48236/result.json | 24 + .../48652-merge-offer/_downloads.json | 1 + .../fixtures/48652-merge-offer/_files.json | 6 + .../fixtures/48652-merge-offer/_response.json | 770 ++++ .../fixtures/48652-merge-offer/derived.json | 92 + .../fixtures/48652-merge-offer/mutations.json | 49 + .../fixtures/48652-merge-offer/result.json | 26 + .../fixtures/48652-prereq/_downloads.json | 1 + .../_tests/fixtures/48652-prereq/_files.json | 6 + .../fixtures/48652-prereq/_response.json | 770 ++++ .../_tests/fixtures/48652-prereq/derived.json | 94 + .../fixtures/48652-prereq/mutations.json | 58 + .../_tests/fixtures/48652-prereq/result.json | 30 + .../_downloads.json | 1 + .../_files.json | 6 + .../_response.json | 798 ++++ .../derived.json | 94 + .../mutations.json | 71 + .../result.json | 24 + .../48652-retract-merge-offer/_downloads.json | 1 + .../48652-retract-merge-offer/_files.json | 6 + .../48652-retract-merge-offer/_response.json | 784 ++++ .../48652-retract-merge-offer/derived.json | 92 + .../48652-retract-merge-offer/mutations.json | 62 + .../48652-retract-merge-offer/result.json | 20 + .../src/_tests/fixtures/48708/_downloads.json | 3 + .../src/_tests/fixtures/48708/_files.json | 4 + .../src/_tests/fixtures/48708/_response.json | 366 ++ .../src/_tests/fixtures/48708/derived.json | 71 + .../src/_tests/fixtures/48708/mutations.json | 32 + .../src/_tests/fixtures/48708/result.json | 26 + .../src/_tests/fixtures/48945/_downloads.json | 3 + .../src/_tests/fixtures/48945/_files.json | 4 + .../src/_tests/fixtures/48945/_response.json | 366 ++ .../src/_tests/fixtures/48945/derived.json | 55 + .../src/_tests/fixtures/48945/mutations.json | 31 + .../src/_tests/fixtures/48945/result.json | 20 + .../src/_tests/fixtures/49417/_downloads.json | 1 + .../src/_tests/fixtures/49417/_files.json | 4 + .../src/_tests/fixtures/49417/_response.json | 742 ++++ .../src/_tests/fixtures/49417/derived.json | 57 + .../src/_tests/fixtures/49417/mutations.json | 44 + .../src/_tests/fixtures/49417/result.json | 25 + .../src/_tests/fixtures/49548/_downloads.json | 3 + .../src/_tests/fixtures/49548/_files.json | 4 + .../src/_tests/fixtures/49548/_response.json | 377 ++ .../src/_tests/fixtures/49548/derived.json | 40 + .../src/_tests/fixtures/49548/mutations.json | 31 + .../src/_tests/fixtures/49548/result.json | 25 + .../src/_tests/fixtures/49575/_downloads.json | 1 + .../src/_tests/fixtures/49575/_files.json | 1 + .../src/_tests/fixtures/49575/_response.json | 751 ++++ .../src/_tests/fixtures/49575/derived.json | 77 + .../src/_tests/fixtures/49575/mutations.json | 51 + .../src/_tests/fixtures/49575/result.json | 24 + .../src/_tests/fixtures/49841/_downloads.json | 1 + .../src/_tests/fixtures/49841/_files.json | 5 + .../src/_tests/fixtures/49841/_response.json | 173 + .../src/_tests/fixtures/49841/derived.json | 47 + .../src/_tests/fixtures/49841/mutations.json | 62 + .../src/_tests/fixtures/49841/result.json | 25 + .../src/_tests/fixtures/50429/_downloads.json | 3 + .../src/_tests/fixtures/50429/_files.json | 5 + .../src/_tests/fixtures/50429/_response.json | 276 ++ .../src/_tests/fixtures/50429/derived.json | 59 + .../src/_tests/fixtures/50429/mutations.json | 49 + .../src/_tests/fixtures/50429/result.json | 25 + .../src/_tests/fixtures/50443/_downloads.json | 1 + .../src/_tests/fixtures/50443/_files.json | 1 + .../src/_tests/fixtures/50443/_response.json | 869 +++++ .../src/_tests/fixtures/50443/derived.json | 56 + .../src/_tests/fixtures/50443/mutations.json | 31 + .../src/_tests/fixtures/50443/result.json | 22 + .../src/_tests/fixtures/51338/_downloads.json | 3 + .../src/_tests/fixtures/51338/_files.json | 6 + .../src/_tests/fixtures/51338/_response.json | 308 ++ .../src/_tests/fixtures/51338/derived.json | 53 + .../src/_tests/fixtures/51338/mutations.json | 40 + .../src/_tests/fixtures/51338/result.json | 32 + .../52579-edits-infra/_downloads.json | 3 + .../fixtures/52579-edits-infra/_files.json | 5 + .../fixtures/52579-edits-infra/_response.json | 234 ++ .../fixtures/52579-edits-infra/derived.json | 60 + .../fixtures/52579-edits-infra/mutations.json | 33 + .../fixtures/52579-edits-infra/result.json | 22 + .../src/_tests/fixtures/52579/_downloads.json | 3 + .../src/_tests/fixtures/52579/_files.json | 5 + .../src/_tests/fixtures/52579/_response.json | 234 ++ .../src/_tests/fixtures/52579/derived.json | 51 + .../src/_tests/fixtures/52579/mutations.json | 35 + .../src/_tests/fixtures/52579/result.json | 23 + .../src/_tests/fixtures/52848/_downloads.json | 1 + .../src/_tests/fixtures/52848/_files.json | 1 + .../src/_tests/fixtures/52848/_response.json | 245 ++ .../src/_tests/fixtures/52848/derived.json | 35 + .../src/_tests/fixtures/52848/mutations.json | 29 + .../src/_tests/fixtures/52848/result.json | 19 + .../src/_tests/fixtures/53121/_downloads.json | 3 + .../src/_tests/fixtures/53121/_files.json | 4 + .../src/_tests/fixtures/53121/_response.json | 213 ++ .../src/_tests/fixtures/53121/derived.json | 46 + .../src/_tests/fixtures/53121/mutations.json | 11 + .../src/_tests/fixtures/53121/result.json | 19 + .../src/_tests/fixtures/55035/_downloads.json | 3 + .../src/_tests/fixtures/55035/_files.json | 4 + .../src/_tests/fixtures/55035/_response.json | 348 ++ .../src/_tests/fixtures/55035/derived.json | 58 + .../src/_tests/fixtures/55035/mutations.json | 29 + .../src/_tests/fixtures/55035/result.json | 35 + .../src/_tests/fixtures/55210/_downloads.json | 3 + .../src/_tests/fixtures/55210/_files.json | 8 + .../src/_tests/fixtures/55210/_response.json | 454 +++ .../src/_tests/fixtures/55210/derived.json | 90 + .../src/_tests/fixtures/55210/mutations.json | 29 + .../src/_tests/fixtures/55210/result.json | 26 + .../src/_tests/fixtures/55508/_downloads.json | 3 + .../src/_tests/fixtures/55508/_files.json | 4 + .../src/_tests/fixtures/55508/_response.json | 735 ++++ .../src/_tests/fixtures/55508/derived.json | 64 + .../src/_tests/fixtures/55508/mutations.json | 20 + .../src/_tests/fixtures/55508/result.json | 25 + .../src/_tests/fixtures/55512/_downloads.json | 3 + .../src/_tests/fixtures/55512/_files.json | 4 + .../src/_tests/fixtures/55512/_response.json | 239 ++ .../src/_tests/fixtures/55512/derived.json | 55 + .../src/_tests/fixtures/55512/mutations.json | 20 + .../src/_tests/fixtures/55512/result.json | 25 + .../src/_tests/fixtures/55741/_downloads.json | 3 + .../src/_tests/fixtures/55741/_files.json | 5 + .../src/_tests/fixtures/55741/_response.json | 293 ++ .../src/_tests/fixtures/55741/derived.json | 49 + .../src/_tests/fixtures/55741/mutations.json | 31 + .../src/_tests/fixtures/55741/result.json | 20 + .../src/_tests/fixtures/58632/_downloads.json | 1 + .../src/_tests/fixtures/58632/_files.json | 1 + .../src/_tests/fixtures/58632/_response.json | 325 ++ .../src/_tests/fixtures/58632/derived.json | 6 + .../src/_tests/fixtures/58632/mutations.json | 1 + .../src/_tests/fixtures/58632/result.json | 8 + .../src/_tests/fixtures/58764/_downloads.json | 11 + .../src/_tests/fixtures/58764/_files.json | 20 + .../src/_tests/fixtures/58764/_response.json | 302 ++ .../src/_tests/fixtures/58764/derived.json | 225 ++ .../src/_tests/fixtures/58764/mutations.json | 31 + .../src/_tests/fixtures/58764/result.json | 22 + .../src/_tests/fixtures/59628/_downloads.json | 3 + .../src/_tests/fixtures/59628/_files.json | 3 + .../src/_tests/fixtures/59628/_response.json | 357 ++ .../src/_tests/fixtures/59628/derived.json | 86 + .../src/_tests/fixtures/59628/mutations.json | 42 + .../src/_tests/fixtures/59628/result.json | 24 + .../src/_tests/fixtures/66742/_downloads.json | 3 + .../src/_tests/fixtures/66742/_files.json | 4 + .../src/_tests/fixtures/66742/_response.json | 406 ++ .../src/_tests/fixtures/66742/derived.json | 53 + .../src/_tests/fixtures/66742/mutations.json | 22 + .../src/_tests/fixtures/66742/result.json | 19 + .../src/_tests/fixtures/66757/_downloads.json | 3 + .../src/_tests/fixtures/66757/_files.json | 4 + .../src/_tests/fixtures/66757/_response.json | 323 ++ .../src/_tests/fixtures/66757/derived.json | 44 + .../src/_tests/fixtures/66757/mutations.json | 31 + .../src/_tests/fixtures/66757/result.json | 30 + .../src/_tests/fixtures/66979/_downloads.json | 3 + .../src/_tests/fixtures/66979/_files.json | 4 + .../src/_tests/fixtures/66979/_response.json | 355 ++ .../src/_tests/fixtures/66979/derived.json | 57 + .../src/_tests/fixtures/66979/mutations.json | 31 + .../src/_tests/fixtures/66979/result.json | 29 + .../src/_tests/fixtures/67090/_downloads.json | 5 + .../src/_tests/fixtures/67090/_files.json | 12 + .../src/_tests/fixtures/67090/_response.json | 435 +++ .../src/_tests/fixtures/67090/derived.json | 138 + .../src/_tests/fixtures/67090/mutations.json | 20 + .../src/_tests/fixtures/67090/result.json | 26 + .../src/_tests/fixtures/68381/_downloads.json | 3 + .../src/_tests/fixtures/68381/_files.json | 4 + .../src/_tests/fixtures/68381/_response.json | 347 ++ .../src/_tests/fixtures/68381/derived.json | 41 + .../src/_tests/fixtures/68381/mutations.json | 31 + .../src/_tests/fixtures/68381/result.json | 24 + .../src/_tests/fixtures/68386/_downloads.json | 1 + .../src/_tests/fixtures/68386/_files.json | 1 + .../src/_tests/fixtures/68386/_response.json | 582 +++ .../src/_tests/fixtures/68386/derived.json | 6 + .../src/_tests/fixtures/68386/mutations.json | 1 + .../src/_tests/fixtures/68386/result.json | 8 + .../src/_tests/fixtures/68510/_downloads.json | 1 + .../src/_tests/fixtures/68510/_files.json | 4 + .../src/_tests/fixtures/68510/_response.json | 179 + .../src/_tests/fixtures/68510/derived.json | 34 + .../src/_tests/fixtures/68510/mutations.json | 29 + .../src/_tests/fixtures/68510/result.json | 17 + .../src/_tests/fixtures/68511/_downloads.json | 1 + .../src/_tests/fixtures/68511/_files.json | 4 + .../src/_tests/fixtures/68511/_response.json | 179 + .../src/_tests/fixtures/68511/derived.json | 34 + .../src/_tests/fixtures/68511/mutations.json | 40 + .../src/_tests/fixtures/68511/result.json | 19 + .../src/_tests/fixtures/68512/_downloads.json | 1 + .../src/_tests/fixtures/68512/_files.json | 3 + .../src/_tests/fixtures/68512/_response.json | 179 + .../src/_tests/fixtures/68512/derived.json | 34 + .../src/_tests/fixtures/68512/mutations.json | 40 + .../src/_tests/fixtures/68512/result.json | 19 + .../src/_tests/fixtures/68772/_downloads.json | 3 + .../src/_tests/fixtures/68772/_files.json | 6 + .../src/_tests/fixtures/68772/_response.json | 250 ++ .../src/_tests/fixtures/68772/derived.json | 60 + .../src/_tests/fixtures/68772/mutations.json | 22 + .../src/_tests/fixtures/68772/result.json | 23 + .../src/_tests/fixtures/68908/_downloads.json | 3 + .../src/_tests/fixtures/68908/_files.json | 14 + .../src/_tests/fixtures/68908/_response.json | 2414 ++++++++++++ .../src/_tests/fixtures/68908/derived.json | 1480 ++++++++ .../src/_tests/fixtures/68908/mutations.json | 11 + .../src/_tests/fixtures/68908/result.json | 21 + .../src/_tests/fixtures/69589/_downloads.json | 3 + .../src/_tests/fixtures/69589/_files.json | 4 + .../src/_tests/fixtures/69589/_response.json | 351 ++ .../src/_tests/fixtures/69589/derived.json | 46 + .../src/_tests/fixtures/69589/mutations.json | 22 + .../src/_tests/fixtures/69589/result.json | 24 + .../mergebot/src/_tests/testEnvironment.js | 10 + packages/mergebot/src/basic.ts | 53 + .../mergebot/src/commands/create-fixture.ts | 104 + .../src/commands/update-all-fixtures.ts | 29 + .../mergebot/src/commands/update-test-data.ts | 40 + packages/mergebot/src/comments.ts | 209 ++ packages/mergebot/src/compute-pr-actions.ts | 672 ++++ packages/mergebot/src/discussions.ts | 11 + packages/mergebot/src/emoji.ts | 20 + packages/mergebot/src/execute-pr-actions.ts | 202 + packages/mergebot/src/functions/api.ts | 42 + .../src/functions/discussions-trigger.ts | 195 + .../mergebot/src/functions/httpTrigger.ts | 15 + packages/mergebot/src/functions/index.ts | 4 + packages/mergebot/src/functions/pr-trigger.ts | 172 + packages/mergebot/src/graphql-client.ts | 44 + packages/mergebot/src/pr-info.ts | 647 ++++ .../mergebot/src/queries/SHA1-to-PR-query.ts | 50 + .../src/queries/all-open-prs-query.ts | 47 + .../src/queries/card-id-to-pr-query.ts | 34 + packages/mergebot/src/queries/file-query.ts | 18 + .../src/queries/label-columns-queries.ts | 59 + packages/mergebot/src/queries/pr-query.ts | 279 ++ .../src/queries/projectboard-cards.ts | 69 + .../mergebot/src/queries/schema/CardIdToPr.ts | 295 ++ .../queries/schema/GetAllOpenPRsAndCardIDs.ts | 83 + .../src/queries/schema/GetFileContent.ts | 53 + .../mergebot/src/queries/schema/GetLabels.ts | 67 + .../src/queries/schema/GetPRForSHA1.ts | 49 + .../queries/schema/GetProjectBoardCards.ts | 87 + .../src/queries/schema/GetProjectColumns.ts | 59 + packages/mergebot/src/queries/schema/PR.ts | 753 ++++ .../mergebot/src/queries/schema/PRFiles.ts | 80 + .../queries/schema/graphql-global-types.ts | 93 + packages/mergebot/src/run.ts | 178 + .../src/scripts/updateJSONFixtures.ts | 39 + .../src/side-effects/merge-codeowner-prs.ts | 26 + packages/mergebot/src/types/discussions.d.ts | 42 + packages/mergebot/src/urls.ts | 17 + packages/mergebot/src/util/cachedQueries.ts | 19 + packages/mergebot/src/util/comment.ts | 16 + packages/mergebot/src/util/fetchFile.ts | 22 + packages/mergebot/src/util/io.ts | 4 + packages/mergebot/src/util/npm.ts | 13 + packages/mergebot/src/util/reply.ts | 6 + packages/mergebot/src/util/util.ts | 88 + packages/mergebot/src/util/verify.ts | 42 + packages/mergebot/tsconfig.json | 19 + pnpm-lock.yaml | 3296 ++++++++++++++++- tsconfig.json | 1 + tsconfig.test.json | 1 + 658 files changed, 67927 insertions(+), 82 deletions(-) create mode 100644 .github/workflows/daily.yml create mode 100644 .github/workflows/deploy.yml create mode 100644 packages/mergebot/.eslintignore create mode 100644 packages/mergebot/README.md create mode 100644 packages/mergebot/apollo.config.js create mode 100644 packages/mergebot/docs/dt-mergebot-lifecycle.svg create mode 100644 packages/mergebot/docs/how-it-works.md create mode 100644 packages/mergebot/docs/policy.md create mode 100644 packages/mergebot/host.json create mode 100644 packages/mergebot/local.settings.json create mode 100644 packages/mergebot/package.json create mode 100644 packages/mergebot/src/_tests/cachedQueries.json create mode 100644 packages/mergebot/src/_tests/discussions.test.ts create mode 100644 packages/mergebot/src/_tests/fixturedActions.test.ts create mode 100644 packages/mergebot/src/_tests/fixtures/38979/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/38979/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/38979/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/38979/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/38979/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/38979/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/43136/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/43136/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/43136/_notes.txt create mode 100644 packages/mergebot/src/_tests/fixtures/43136/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/43136/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/43136/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/43136/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/43144/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/43144/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/43144/_notes.txt create mode 100644 packages/mergebot/src/_tests/fixtures/43144/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/43144/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/43144/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/43144/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/43151/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/43151/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/43151/_notes.txt create mode 100644 packages/mergebot/src/_tests/fixtures/43151/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/43151/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/43151/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/43151/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/43160/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/43160/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/43160/_notes.txt create mode 100644 packages/mergebot/src/_tests/fixtures/43160/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/43160/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/43160/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/43160/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/43175/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/43175/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/43175/_notes.txt create mode 100644 packages/mergebot/src/_tests/fixtures/43175/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/43175/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/43175/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/43175/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/43235/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/43235/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/43235/_notes.txt create mode 100644 packages/mergebot/src/_tests/fixtures/43235/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/43235/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/43235/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/43235/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/43314/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/43314/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/43314/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/43314/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/43314/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/43314/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695-post-review/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695-post-review/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695-post-review/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695-post-review/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695-post-review/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695-post-review/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/43695/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/43960-post-close/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/43960-post-close/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/43960-post-close/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/43960-post-close/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/43960-post-close/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/43960-post-close/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/43960/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/43960/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/43960/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/43960/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/43960/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/43960/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44105/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44105/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44105/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44105/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44105/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44105/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44256/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44256/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44256/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44256/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44256/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44256/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44267/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44267/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44267/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44267/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44267/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44267/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44282/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44282/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44282/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44282/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44282/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44282/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44288/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44288/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44288/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44288/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44288/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44288/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44290/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44290/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44290/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44290/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44290/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44290/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44299-with-files/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44299-with-files/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44299-with-files/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44299-with-files/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44299-with-files/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44299-with-files/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44299/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44299/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44299/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44299/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44299/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44299/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44316/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44316/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44316/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44316/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44316/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44316/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343-pending-travis/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343-pending-travis/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343-pending-travis/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343-pending-travis/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343-pending-travis/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343-pending-travis/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343-pre-travis/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343-pre-travis/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343-pre-travis/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343-pre-travis/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343-pre-travis/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343-pre-travis/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44343/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44402/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44402/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44402/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44402/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44402/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44402/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44411/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44411/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44411/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44411/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44411/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44411/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44437/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44437/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44437/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44437/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44437/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44437/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44439/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44439/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44439/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44439/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44439/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44439/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44631/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44631/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44631/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44631/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44631/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44631/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44857/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44857/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44857/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44857/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44857/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44857/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-14days/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-14days/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-14days/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-14days/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-14days/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-14days/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-32days/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-32days/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-32days/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-32days/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-32days/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-32days/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-3days/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-3days/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-3days/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-3days/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-3days/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-3days/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-7days/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-7days/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-7days/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-7days/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-7days/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/44989-7days/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/45137/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/45137/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/45137/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/45137/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/45137/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/45137/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/45627/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/45627/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/45627/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/45627/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/45627/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/45627/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/45836/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/45836/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/45836/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/45836/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/45836/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/45836/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/45884/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/45884/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/45884/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/45884/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/45884/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/45884/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/45888/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/45888/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/45888/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/45888/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/45888/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/45888/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/45890/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/45890/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/45890/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/45890/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/45890/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/45890/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/45946/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/45946/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/45946/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/45946/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/45946/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/45946/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/45982/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/45982/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/45982/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/45982/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/45982/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/45982/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/45999/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/45999/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/45999/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/45999/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/45999/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/45999/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/46008/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/46008/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/46008/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/46008/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/46008/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/46008/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/46019/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/46019/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/46019/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/46019/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/46019/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/46019/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/46120/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/46120/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/46120/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/46120/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/46120/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/46120/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/46191/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/46191/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/46191/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/46191/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/46191/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/46191/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/46196/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/46196/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/46196/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/46196/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/46196/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/46196/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/46279/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/46279/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/46279/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/46279/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/46279/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/46279/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/46804/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/46804/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/46804/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/46804/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/46804/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/46804/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/46879/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/46879/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/46879/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/46879/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/46879/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/46879/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017-blessed/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/47017/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/48216/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/48216/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/48216/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/48216/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/48216/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/48216/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/48236/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/48236/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/48236/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/48236/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/48236/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/48236/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-merge-offer/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-merge-offer/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-merge-offer/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-merge-offer/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-merge-offer/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-merge-offer/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-prereq/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-prereq/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-prereq/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-prereq/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-prereq/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-prereq/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/48708/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/48708/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/48708/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/48708/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/48708/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/48708/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/48945/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/48945/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/48945/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/48945/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/48945/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/48945/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/49417/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/49417/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/49417/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/49417/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/49417/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/49417/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/49548/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/49548/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/49548/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/49548/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/49548/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/49548/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/49575/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/49575/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/49575/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/49575/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/49575/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/49575/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/49841/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/49841/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/49841/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/49841/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/49841/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/49841/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/50429/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/50429/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/50429/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/50429/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/50429/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/50429/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/50443/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/50443/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/50443/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/50443/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/50443/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/50443/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/51338/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/51338/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/51338/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/51338/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/51338/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/51338/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/52579-edits-infra/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/52579-edits-infra/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/52579-edits-infra/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/52579-edits-infra/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/52579-edits-infra/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/52579-edits-infra/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/52579/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/52579/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/52579/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/52579/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/52579/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/52579/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/52848/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/52848/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/52848/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/52848/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/52848/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/52848/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/53121/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/53121/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/53121/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/53121/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/53121/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/53121/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/55035/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/55035/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/55035/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/55035/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/55035/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/55035/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/55210/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/55210/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/55210/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/55210/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/55210/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/55210/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/55508/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/55508/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/55508/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/55508/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/55508/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/55508/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/55512/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/55512/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/55512/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/55512/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/55512/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/55512/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/55741/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/55741/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/55741/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/55741/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/55741/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/55741/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/58632/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/58632/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/58632/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/58632/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/58632/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/58632/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/58764/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/58764/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/58764/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/58764/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/58764/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/58764/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/59628/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/59628/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/59628/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/59628/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/59628/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/59628/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/66742/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/66742/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/66742/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/66742/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/66742/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/66742/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/66757/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/66757/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/66757/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/66757/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/66757/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/66757/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/66979/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/66979/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/66979/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/66979/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/66979/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/66979/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/67090/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/67090/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/67090/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/67090/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/67090/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/67090/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/68381/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/68381/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/68381/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/68381/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/68381/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/68381/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/68386/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/68386/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/68386/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/68386/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/68386/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/68386/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/68510/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/68510/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/68510/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/68510/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/68510/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/68510/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/68511/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/68511/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/68511/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/68511/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/68511/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/68511/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/68512/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/68512/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/68512/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/68512/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/68512/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/68512/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/68772/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/68772/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/68772/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/68772/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/68772/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/68772/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/68908/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/68908/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/68908/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/68908/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/68908/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/68908/result.json create mode 100644 packages/mergebot/src/_tests/fixtures/69589/_downloads.json create mode 100644 packages/mergebot/src/_tests/fixtures/69589/_files.json create mode 100644 packages/mergebot/src/_tests/fixtures/69589/_response.json create mode 100644 packages/mergebot/src/_tests/fixtures/69589/derived.json create mode 100644 packages/mergebot/src/_tests/fixtures/69589/mutations.json create mode 100644 packages/mergebot/src/_tests/fixtures/69589/result.json create mode 100644 packages/mergebot/src/_tests/testEnvironment.js create mode 100644 packages/mergebot/src/basic.ts create mode 100644 packages/mergebot/src/commands/create-fixture.ts create mode 100644 packages/mergebot/src/commands/update-all-fixtures.ts create mode 100644 packages/mergebot/src/commands/update-test-data.ts create mode 100644 packages/mergebot/src/comments.ts create mode 100644 packages/mergebot/src/compute-pr-actions.ts create mode 100644 packages/mergebot/src/discussions.ts create mode 100644 packages/mergebot/src/emoji.ts create mode 100644 packages/mergebot/src/execute-pr-actions.ts create mode 100644 packages/mergebot/src/functions/api.ts create mode 100644 packages/mergebot/src/functions/discussions-trigger.ts create mode 100644 packages/mergebot/src/functions/httpTrigger.ts create mode 100644 packages/mergebot/src/functions/index.ts create mode 100644 packages/mergebot/src/functions/pr-trigger.ts create mode 100644 packages/mergebot/src/graphql-client.ts create mode 100644 packages/mergebot/src/pr-info.ts create mode 100644 packages/mergebot/src/queries/SHA1-to-PR-query.ts create mode 100644 packages/mergebot/src/queries/all-open-prs-query.ts create mode 100644 packages/mergebot/src/queries/card-id-to-pr-query.ts create mode 100644 packages/mergebot/src/queries/file-query.ts create mode 100644 packages/mergebot/src/queries/label-columns-queries.ts create mode 100644 packages/mergebot/src/queries/pr-query.ts create mode 100644 packages/mergebot/src/queries/projectboard-cards.ts create mode 100644 packages/mergebot/src/queries/schema/CardIdToPr.ts create mode 100644 packages/mergebot/src/queries/schema/GetAllOpenPRsAndCardIDs.ts create mode 100644 packages/mergebot/src/queries/schema/GetFileContent.ts create mode 100644 packages/mergebot/src/queries/schema/GetLabels.ts create mode 100644 packages/mergebot/src/queries/schema/GetPRForSHA1.ts create mode 100644 packages/mergebot/src/queries/schema/GetProjectBoardCards.ts create mode 100644 packages/mergebot/src/queries/schema/GetProjectColumns.ts create mode 100644 packages/mergebot/src/queries/schema/PR.ts create mode 100644 packages/mergebot/src/queries/schema/PRFiles.ts create mode 100644 packages/mergebot/src/queries/schema/graphql-global-types.ts create mode 100755 packages/mergebot/src/run.ts create mode 100644 packages/mergebot/src/scripts/updateJSONFixtures.ts create mode 100644 packages/mergebot/src/side-effects/merge-codeowner-prs.ts create mode 100644 packages/mergebot/src/types/discussions.d.ts create mode 100644 packages/mergebot/src/urls.ts create mode 100644 packages/mergebot/src/util/cachedQueries.ts create mode 100644 packages/mergebot/src/util/comment.ts create mode 100644 packages/mergebot/src/util/fetchFile.ts create mode 100644 packages/mergebot/src/util/io.ts create mode 100644 packages/mergebot/src/util/npm.ts create mode 100644 packages/mergebot/src/util/reply.ts create mode 100644 packages/mergebot/src/util/util.ts create mode 100644 packages/mergebot/src/util/verify.ts create mode 100644 packages/mergebot/tsconfig.json diff --git a/.eslintignore b/.eslintignore index 23d0f6d147..7613c6d937 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,3 +5,4 @@ packages/publisher/output **/testsource/** **/fixtures/** packages/eslint-plugin/test/fixtures +packages/mergebot/src/queries/schema diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 119dfd1dbc..03ca9c259e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,12 +39,16 @@ jobs: run: pnpm build - name: test run: pnpm test + - name: Bundle mergebot + working-directory: packages/mergebot + run: pnpm run bundle + - name: Check mergebot bundle + run: BOT_AUTH_TOKEN=secret node packages/mergebot/dist/functions/index.js - name: knip run: pnpm knip check-parse-results: needs: build_and_test uses: ./.github/workflows/check-parse-results.yml - changesets: name: changesets runs-on: ubuntu-latest diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml new file mode 100644 index 0000000000..a5bd712c0d --- /dev/null +++ b/.github/workflows/daily.yml @@ -0,0 +1,33 @@ +name: Daily Open PR Sync + +on: + workflow_dispatch: ~ + schedule: + - cron: '37 */6 * * *' + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + with: + node-version: '20.x' + - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0 + - run: pnpm install + - run: pnpm run build + + # Go through all open PRs and run the bot over them + - run: node packages/mergebot/dist/run.js + env: + TYPESCRIPT_BOT_TOKEN: ${{ secrets.TYPESCRIPT_BOT_TOKEN }} + + keepalive-job: + name: Keepalive Workflow + runs-on: ubuntu-latest + permissions: + actions: write + steps: + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + - uses: gautamkrishnar/keepalive-workflow@05456e7809058d586d96392e99217726ccc10076 # v2.0.5 diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000000..b5c7308ba2 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,83 @@ +name: Deploy mergebot to Azure + +on: + push: + branches: + - main + workflow_dispatch: + +env: + NODE_VERSION: '18.x' # set this to the node version to use (supports 8.x, 10.x, 12.x) + RESOURCE_GROUP_NAME: dtmergebot3 + FUNCTION_APP_NAME: dtmergebot3 + STORAGE_ACCOUNT_NAME: dtmergebot3b1b7 + STORAGE_CONTAINER_NAME: deployment + FUNCTION_ZIP_NAME: function.zip + +defaults: + run: + shell: bash + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + + - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + with: + node-version: ${{ env.NODE_VERSION }} + + - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0 + + - name: Install and test + run: | + pnpm install + pnpm run --if-present build + pnpm run --if-present test + - name: Bundle + working-directory: packages/mergebot + run: pnpm run bundle + + - name: Check bundle + run: BOT_AUTH_TOKEN=secret node packages/mergebot/dist/functions/index.js + + - name: Create zip + working-directory: packages/mergebot + run: zip -r ${{ env.GITHUB_WORKSPACE }}/${{ env.FUNCTION_ZIP_NAME }} dist host.json package.json + + - name: Upload artifact for deployment job + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 + with: + name: node-app + path: ${{ env.FUNCTION_ZIP_NAME }} + + deploy: + runs-on: ubuntu-latest + needs: build + environment: + name: 'Production' + permissions: + contents: read + id-token: write + + steps: + - name: Download artifact from build job + uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 + with: + name: node-app + + - uses: azure/login@6c251865b4e6290e7b78be643ea2d005bc51f69a # v2.1.1 + with: + client-id: ${{ secrets.AZURE_CLIENT_ID }} + tenant-id: ${{ secrets.AZURE_TENANT_ID }} + subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + + - name: Upload blob + run: az storage blob upload -f ${{ env.FUNCTION_ZIP_NAME }} --account-name ${{ env.STORAGE_ACCOUNT_NAME }} -c ${{ env.STORAGE_CONTAINER_NAME }} -n ${{ env.FUNCTION_ZIP_NAME }} --overwrite true --auth-mode login + + # - name: Set package path + # run: az functionapp config appsettings set -g ${{ env.RESOURCE_GROUP_NAME }} -n ${{ env.FUNCTION_APP_NAME }} --settings WEBSITE_RUN_FROM_PACKAGE="https://${{ env.STORAGE_ACCOUNT_NAME }}.blob.core.windows.net/${{ env.STORAGE_CONTAINER_NAME }}/${{ env.FUNCTION_ZIP_NAME }}" + + - name: Restart app + run: az functionapp restart -g ${{ env.RESOURCE_GROUP_NAME }} -n ${{ env.FUNCTION_APP_NAME }} diff --git a/.knip.jsonc b/.knip.jsonc index 8df6c85b5a..22d3f9eeb7 100644 --- a/.knip.jsonc +++ b/.knip.jsonc @@ -76,8 +76,13 @@ "entry": ["src/index.ts", "src/types/*.ts"], "project": "**/*.ts", "ignoreDependencies": ["@qiwi/npm-types"] + }, + "packages/mergebot": { + "entry": ["src/functions/index.ts", "src/run.ts", "src/commands/create-fixture.ts", "src/commands/update-all-fixtures.ts", "src/commands/update-test-data.ts", "src/scripts/updateJSONFixtures.ts"], + "project": "**/*.ts", + "ignore": ["src/queries/schema/graphql-global-types.ts"] } }, - "ignore": ["**/fixtures/**", "**/testsource/**", "**/dtslint/test/*/**", "**/*.d.ts"], + "ignore": ["**/dist/**", "**/fixtures/**", "**/testsource/**", "**/dtslint/test/*/**", "**/*.d.ts"], "ignoreExportsUsedInFile": true } diff --git a/.npmrc b/.npmrc index af154f5a4e..d40bed4541 100644 --- a/.npmrc +++ b/.npmrc @@ -1,3 +1,3 @@ prefer-workspace-packages=true -engine-strict=true +engine-strict=false disallow-workspace-cycles=true diff --git a/jest.config.js b/jest.config.js index 0fe2e38275..bc196b0cb2 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,7 +2,7 @@ module.exports = { preset: "ts-jest", testEnvironment: "node", modulePathIgnorePatterns: ["packages\\/publisher\\/output", "testsource", "fixtures"], - testMatch: ["/packages/*/test/**/*.test.ts", "/packages/dts-critic/index.test.ts"], + testMatch: ["/packages/*/test/**/*.test.ts", "/packages/dts-critic/index.test.ts", "/packages/mergebot/src/_tests/*.test.ts"], transform: { "^.+\\.tsx?$": [ "ts-jest", diff --git a/packages/mergebot/.eslintignore b/packages/mergebot/.eslintignore new file mode 100644 index 0000000000..5ac96163cc --- /dev/null +++ b/packages/mergebot/.eslintignore @@ -0,0 +1,2 @@ +/dist/ +/src/queries/schema/ diff --git a/packages/mergebot/README.md b/packages/mergebot/README.md new file mode 100644 index 0000000000..48805151b4 --- /dev/null +++ b/packages/mergebot/README.md @@ -0,0 +1,142 @@ +This is the bot that controls the workflow of Definitely Typed PRs. + +## Meta + +* __State:__ Production +* __Dashboard:__ [Azure](https://ms.portal.azure.com/#@72f988bf-86f1-41af-91ab-2d7cd011db47/resource/subscriptions/57bfeeed-c34a-4ffd-a06b-ccff27ac91b8/resourceGroups/dtmergebot/providers/Microsoft.Web/sites/DTMergeBot) — [Logs](https://ms.portal.azure.com/#blade/WebsitesExtension/FunctionsIFrameBlade/id/%2Fsubscriptions%2F57bfeeed-c34a-4ffd-a06b-ccff27ac91b8%2FresourceGroups%2Fdtmergebot%2Fproviders%2FMicrosoft.Web%2Fsites%2FDTMergeBot) — [GH Actions](https://github.com/microsoft/DefinitelyTyped-tools/actions) — [GH Webhook](https://github.com/DefinitelyTyped/DefinitelyTyped/settings/hooks/193097250) + +TODO: Update these links for dtmergebot2 + +It is both a series of command line scripts which you can use to test different states, and an Azure Function App which handles incoming webhooks from the DefinitelyTyped repo. + +This repo is deployed to Azure on every push to master. +To ensure we can handle timeouts on older PRs, there is a [GitHub Action](https://github.com/microsoft/DefinitelyTyped-tools/actions) that runs the bot every 6 hours against [all open PRs](./src/run.ts), and has a bunch of useful flags for running manually too. + +# Setup + +```sh +# Clone it +git clone https://github.com/microsoft/DefinitelyTyped-tools.git +cd DefinitelyTyped-tools + +# Deps +pnpm install + +# Validate it works +pnpm test +``` + +# How the app works + +There are three main stages once the app has a PR number: + +* Query the GitHub GraphQL API for PR metadata ([`pr-info`](src/pr-info.ts)) +* Create a PR actions metadata object ([`compute-pr-actions`](src/compute-pr-actions.ts)) +* Do work based on the resulting actions ([`execute-pr-actions`](src/execute-pr-actions.ts)) + +# How the bot works + +There is an Azure function in `PR-Trigger` that receives webhooks; this function's job is to find the PR number then it runs the above steps. + +# Running Locally + +You _probably_ don't need to do this. Use test to validate any change inside the src dir against integration tests. + +However, you need to have a GitHub API access key in either: `DT_BOT_AUTH_TOKEN`, `BOT_AUTH_TOKEN` or `AUTH_TOKEN`. +Ask Ryan for the bot's auth token (TypeScript team members: Look in the team OneNote). +Don't run the bot under your own auth token as this will generate a bunch of spam from duplicate comments. + +```sh +# Windows +set BOT_AUTH_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxx + +# *nix +export BOT_AUTH_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxx +``` + +Then to run locally you'll need to install the [Azure Functions cli](https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local?tabs=macos%2Ccsharp%2Cbash). + +# Development + +```sh +# Build +pnpm run build + +# Run the CLI to see what would happen to an existing PR +pnpm run single-info -- [PR_NUM] +# or +pnpm run single-info-debug -- [PR_NUM] +``` + +### If you update any queries + +Run this to update the generate types: + +```sh +# Code-gen the schema +pnpm run graphql-schema +``` + +### If you change project columns or labels + +Run this to update the cached values: + +```sh +# Regenerate src/_tests/cachedQueries.json +pnpm run update-test-data +``` + +# Tests + +```sh +# Run tests, TypeScript is transpiled at runtime +pnpm test +``` + +Most of the tests run against a fixtured PR, these are high level integration tests that store the PR info and then re-run the latter two phases of the app. + +To create fixtures of a current PR: + +```sh +# To create a fixture for PR 43161 +pnpm run create-fixture -- 43161 +``` + +Then you can work against these fixtures offline with: + +```sh +# Watch mode for all tests +pnpm test -- --watch +# Just run fixtures for one PR +pnpm test -- --testNamePattern 44299 +``` + +Run a test with the debugger: + +```sh +node --inspect --inspect-brk ./node_modules/.bin/jest -i --runInBand --testNamePattern 44299 +``` + +Then use "Attach to Process ID" to connect to that test runner + +If your changes require re-creating all fixtures: + +```sh +pnpm run update-all-fixtures +``` + +Be careful with this, because PRs may now be in a different state e.g. it's now merged and it used to be a specific +weird state. + +## Running with real webhooks + +You need a tool like [ngrok](https://ngrok.com) to expose a URL from the [webhooks section](https://github.com/DefinitelyTyped/DefinitelyTyped/settings/hooks/new) on DT. + +Start two terminal sessions with: + +- `yarn watch` (for TypeScript changes) +- `yarn start` (for the app) + +Then start a third with your localhost router like ngrok: + +- `ngrok http 7071` diff --git a/packages/mergebot/apollo.config.js b/packages/mergebot/apollo.config.js new file mode 100644 index 0000000000..2ee42a0af2 --- /dev/null +++ b/packages/mergebot/apollo.config.js @@ -0,0 +1,17 @@ +module.exports = { + client: { + includes: ["src/queries/**"], + service: { + name: "github", + url: "https://api.github.com/graphql", + headers: { + authorization: `Bearer ${ + process.env["DT_BOT_AUTH_TOKEN"] || + process.env["BOT_AUTH_TOKEN"] || + process.env["AUTH_TOKEN"] + }`, + accept: "application/vnd.github.starfox-preview+json, application/vnd.github.bane-preview+json", + }, + } + } +}; diff --git a/packages/mergebot/docs/dt-mergebot-lifecycle.svg b/packages/mergebot/docs/dt-mergebot-lifecycle.svg new file mode 100644 index 0000000000..045a56de04 --- /dev/null +++ b/packages/mergebot/docs/dt-mergebot-lifecycle.svg @@ -0,0 +1,175 @@ + + + + + + + PR is created + + + bot pings up to 50 package owners + + + DT Maintainer Queue + + + DT Maintainer Queue + + + Ping at 3 weeks of no activity + + + Ping 1.5 weeks after last push + + + Ping 1 week after merge offer + + + Waiting for Code Reviews + + + Needs Author Action + + + Needs Author Action + + + Edits 1 package with tests + + + Abandoned + + + Unreviewed + + + Unmerged + + + Red review + + + New commits + + + No + + + Yes + + + Edits un-safe config > 1 packages edited No Test Changes Edits DT infra No other owners Critically used package + + + Maintainer accepts that it can go to peer review & be auto merged + + + Maintainer reviews + + + Maintainer reviews and merges + + + Maintainer reviews and merges + + + DT Maintainer Responsibilities + + + Stale + + + The lifecycle of a Pull Request to DefinitelyTyped/DefinitelyTyped + + + Self Service + + + Accurate as of December 2020 + + + + + Reviews from contributors or DT maintainers + + + new commits deprecating reviews + + + Based on + + + microsoft/DefinitelyTyped-tools/packages/mergebot/src/compute-pr-actions.ts + + + Times are approximated + + + PR author, or package owner tells bot to merge + + + No reviews, make stale + + + + + + + Merged + + + + Close after one month + + + + + Merged + + + + Merged + + + + + Waiting for Author to Merge + + + + + + + + + + Mergable, and green? + + + Looks at PR + + + + + + + Golden path + + + GH Project Board + + + Step + + + + Key + + + + + Close after one month + + + + diff --git a/packages/mergebot/docs/how-it-works.md b/packages/mergebot/docs/how-it-works.md new file mode 100644 index 0000000000..04a083442e --- /dev/null +++ b/packages/mergebot/docs/how-it-works.md @@ -0,0 +1,55 @@ +_Disclaimer: This could be out of date, the source of truth is always [compute-pr-actions]_ + + + + +### What PRs does the bot ignore + +- Draft PRs +- Closed PRs + +### What type of PRs need to be reviewed by a DT maintainer + +- PRs that affect DT infrastructure +- PRs that affect more than 50 Definition Owners +- PRs that affect extremely popular packages (5m downloads per month) +- PRs that add new packages +- PRs that change DT types with no tests +- PRs that change DT types and there are no other Definition Owners +- PRs that change a DT module's infra (`tsconfig.json` etc) + +PRs that are blessed (see `info.blessingKind`) as `review` are excluded +when possible, and PRs that are blessed as `merge` can be merged without +reviews. + +### Stale PRs + +There are several categories for PRs getting stale: "Unmerged" (good to go, but +author+owners didn't request to merge them), "Abandoned" (bad CI, change +requests), "Unreviewed" (got no reviews). Each of these starts a day countdown +at a configurable point, and goes through several states at configurable day +counts: + +- `fresh`: just entered the corresponding staleness timeline, nothing done. +- `attention`: the inactivity is now shown on the welcome message with a brief + explanation. +- `nearly`: a comment is posted and a label with the staleness category is + added. +- `done`: the timeline is done, either move the PR to a column (unreviewed) or + close it (the other). + +See the `getStaleness` definition in [compute-pr-actions] for the current +configuration (conditions, count start, day counts, and final action). + +The explanations for `attention` and the posted comments are defined in +`StalenessExplanations` and `StalenessComment` respectively (in [comments]). + +### Cleanup + +The [`run` script](../src/run.ts) is running every 6 hours, cutting the +`Recently Merged` column to 50. It also removes closed PRs from other columns +as a safeguard in case the bot missed a PR closing event. + + +[compute-pr-actions]: +[comments]: diff --git a/packages/mergebot/docs/policy.md b/packages/mergebot/docs/policy.md new file mode 100644 index 0000000000..9748254924 --- /dev/null +++ b/packages/mergebot/docs/policy.md @@ -0,0 +1,64 @@ + +DefinitelyTyped PRs are now subject to the following constraints to improve throughput and reduce latency. + +## Terms + +### Unmergeable + +A PR is *unmergeable* if any of the following are true: + * It contains merge conflicts (the `Has Merge Conflict` label will be applied) + * It is failing the CI build (the `The CI build failed` label will be applied) + * It has unaddressed comments from code reviewers (the `Revision needed`) will be applied + +### Mergeable + +A PR is *mergeable* if it is not *unmergeable*. + +### Passing Code Review + +A user has submitted a *passing code review* if they: + * :+1: `dt-bot`'s comment + * Post a comment containing :+1: + * Use GitHub's "review" feature and Approve + +### Definition Author + +A *definition author* is a user listed in the `index.d.ts` file authors list. +These users are assumed to have appropriate knowledge of the file and are considered trustworthy reviewers. + +DT maintainers may treat themselves as definition authors at their discretion. + +### Express Merge + +A PR is available to *express merge* if: + * The PR is *mergeable* + * The PR has a *passing review* from a *definition author* + +An *express merge* may occur immediately and automatically. + +### LGTM Merge + +A PR is available to *LGTM merge* if: + * The PR is *mergeable* + * The PR has a *passing review* from anyone + * Three days have elapsed since the PR code was last changed + +*LGTM merges* will occur manually at DT maintainers' discretion. + +### YSYL (You Snooze You Lose) Merge + +A PR is available to *YSYL merge* if: + * The PR is *mergeable* + * No one has left a review with concrete next steps + * Five days have elapsed since the PR code was last changed + +*YSYL merges* will occur manually at DT maintainers' discretion. + +### Abandoned + +A PR is *abandoned* if: + * It is *unmergeable* + * The author has not commented on the PR in seven days + * The author has not pushed commits to the PR in seven days + +Abandoned PRs will be automatically closed. diff --git a/packages/mergebot/host.json b/packages/mergebot/host.json new file mode 100644 index 0000000000..71d4370019 --- /dev/null +++ b/packages/mergebot/host.json @@ -0,0 +1,22 @@ +{ + "version": "2.0", + "logging": { + "applicationInsights": { + "samplingSettings": { + "isEnabled": true, + "excludedTypes": "Request" + } + } + }, + "singleton": { + "lockPeriod": "00:00:15", + "listenerLockPeriod": "00:01:00", + "listenerLockRecoveryPollingInterval": "00:01:00", + "lockAcquisitionTimeout": "00:01:00", + "lockAcquisitionPollingInterval": "00:00:03" + }, + "extensionBundle": { + "id": "Microsoft.Azure.Functions.ExtensionBundle", + "version": "[3.15.0, 4.0.0)" + } +} diff --git a/packages/mergebot/local.settings.json b/packages/mergebot/local.settings.json new file mode 100644 index 0000000000..6beb0236ad --- /dev/null +++ b/packages/mergebot/local.settings.json @@ -0,0 +1,8 @@ +{ + "IsEncrypted": false, + "Values": { + "FUNCTIONS_WORKER_RUNTIME": "node", + "AzureWebJobsFeatureFlags": "EnableWorkerIndexing", + "AzureWebJobsStorage": "" + } +} diff --git a/packages/mergebot/package.json b/packages/mergebot/package.json new file mode 100644 index 0000000000..127dc213c3 --- /dev/null +++ b/packages/mergebot/package.json @@ -0,0 +1,79 @@ +{ + "name": "@definitelytyped/mergebot", + "private": true, + "version": "0.1.12", + "description": "The bot that manages DefinitelyTyped PRs.", + "author": "DT Maintainers", + "homepage": "https://github.com/microsoft/definitelytyped-tools#readme", + "main": "dist/functions/index.js", + "repository": { + "type": "git", + "url": "https://github.com/microsoft/definitelytyped-tools.git", + "directory": "packages/mergebot" + }, + "bugs": { + "url": "https://github.com/microsoft/definitelytyped-tools/issues" + }, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "dependencies": { + "@apollo/client": "^3.10.3", + "@azure/functions": "^4.4.0", + "@definitelytyped/old-header-parser": "npm:@definitelytyped/header-parser@0.0.178", + "@definitelytyped/utils": "workspace:*", + "@octokit/webhooks-methods": "^4.1.0", + "dayjs": "^1.11.11", + "fast-json-patch": "^3.1.1", + "graphql": "15.8.0", + "prettyjson": "^1.2.5", + "yargs": "^17.7.2" + }, + "devDependencies": { + "@octokit/graphql-schema": "^14.58.0", + "@octokit/webhooks-types": "^7.5.1", + "@types/node": "^18.19.33", + "@types/prettyjson": "^0.0.33", + "@types/yargs": "^17.0.32", + "apollo": "^2.34.0", + "azure-functions-core-tools": "^4.0.5700", + "esbuild": "^0.21.5", + "eslint": "^8.57.0", + "jest": "^29.7.0", + "jest-file-snapshot": "^0.5.0", + "knip": "^5.15.1", + "rimraf": "^5.0.7", + "ts-jest": "^29.1.2", + "typescript": "^5.4.5" + }, + "overrides": { + "apollo": { + "graphql": "15.8.0" + }, + "apollo-language-server": { + "graphql": "15.8.0" + } + }, + "scripts": { + "prestart": "pnpm run build", + "prepublishOnly": "pnpm run build", + "build": "tsc", + "bundle": "rimraf dist && esbuild --bundle --platform=node --format=cjs --target=node18 --external:@azure/functions-core --outfile=dist/functions/index.js src/functions/index.ts", + "watch": "tsc --watch", + "graphql-schema": "apollo client:codegen schema --target typescript --globalTypesFile=src/queries/schema/graphql-global-types.ts", + "create-fixture": "pnpm run build && node dist/commands/create-fixture.js", + "update-test-data": "pnpm run build && node dist/commands/update-test-data.js", + "update-all-fixtures": "pnpm run build && node dist/commands/update-all-fixtures.js", + "start": "func start", + "lint": "eslint --report-unused-disable-directives . --ext .ts", + "test": "jest" + }, + "jest": { + "preset": "ts-jest", + "testPathIgnorePatterns": [ + "/node_modules/", + "/dist/" + ] + } +} diff --git a/packages/mergebot/src/_tests/cachedQueries.json b/packages/mergebot/src/_tests/cachedQueries.json new file mode 100644 index 0000000000..a62dac9a64 --- /dev/null +++ b/packages/mergebot/src/_tests/cachedQueries.json @@ -0,0 +1,322 @@ +{ + "comment": "Generate & update with `pnpm run update-test-data`", + "getProjectBoardColumns": [ + { + "__typename": "ProjectColumn", + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action" + }, + { + "__typename": "ProjectColumn", + "id": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2", + "name": "Needs Maintainer Action" + }, + { + "__typename": "ProjectColumn", + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy", + "name": "Needs Maintainer Review" + }, + { + "__typename": "ProjectColumn", + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI2", + "name": "Other" + }, + { + "__typename": "ProjectColumn", + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI1", + "name": "Recently Merged" + }, + { + "__typename": "ProjectColumn", + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz", + "name": "Waiting for Author to Merge" + }, + { + "__typename": "ProjectColumn", + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews" + } + ], + "getLabels": [ + { + "id": "MDU6TGFiZWw0MDUzNDEwNjk=", + "name": "@types", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw2NDQxMTYxNzA=", + "name": "Abandoned", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw3OTg3Mzc0Nzg=", + "name": "Author is Owner", + "__typename": "Label" + }, + { + "id": "LA_kwDOAFz6BM7QXorW", + "name": "Blocked upstream", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyMTU0ODE2NTQ5", + "name": "Check Config", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwxNjA4NjM0NDg0", + "name": "Critical package", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwxNTY4Nzg5MA==", + "name": "Definition:Bug", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw4ODk3OTYxOA==", + "name": "Definition:Creating", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwxNTY4Nzg5Mg==", + "name": "Definition:Enhancement", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyOTM4NjAwOA==", + "name": "Definition:Missing", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyMzcwODQxMw==", + "name": "Definition:Request", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyMTg2MTM4MjI0", + "name": "dependencies", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw1NjcxNzAyMQ==", + "name": "Discussion", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw3NTcxMTk0Ng==", + "name": "Documents", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwzMDI2OTUyNQ==", + "name": "Duplicate", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwxNjA4MjA4ODM1", + "name": "Edits Infrastructure", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwxNjA4MjEwODMz", + "name": "Edits multiple packages", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyNDk1OTc2ODI5", + "name": "Edits Owners", + "__typename": "Label" + }, + { + "id": "LA_kwDOAFz6BM71Jg4R", + "name": "github_actions", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw1ODMyOTQ0NzQ=", + "name": "Has Merge Conflict", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwzMzUzMTYyNTAy", + "name": "Huge Change", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwzMDI2OTc0NQ==", + "name": "Infrastructure", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwzMDI2OTUzOA==", + "name": "invalid", + "__typename": "Label" + }, + { + "id": "LA_kwDOAFz6BM8AAAABXw1nPg", + "name": "javascript", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw1NjcxNDU5MQ==", + "name": "Level:Advanced", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw1NjcxNDU3Mg==", + "name": "Level:Intermediate", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw1NjcxNDU3MQ==", + "name": "Level:Starter", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwxNjA4NTUyNDEw", + "name": "Maintainer Approved", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyMTk3MzU2OTA1", + "name": "Mergebot Error", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyNTI5Mjc2Njc2", + "name": "Multiple Languages", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw2NDY3ODg4ODg=", + "name": "New Definition", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyMTU0ODU3ODAw", + "name": "No Other Owners", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw1ODYxNzcwNjM=", + "name": "Other Approved", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw5MDUzMzQwOTU=", + "name": "Owner Approved", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwxNTk2MTk1ODI0", + "name": "Perf: Better", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwxNTk2MTk4NTgw", + "name": "Perf: Mixed", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwxNTk2MTk0NzQ0", + "name": "Perf: Same", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwxNTk2MTk5Mjg2", + "name": "Perf: Worse", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw2ODQzMjE1NzY=", + "name": "Popular package", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyOTUzOTk4NzE4", + "name": "Possibly Edits Infrastructure", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwxNTY4Nzg5NA==", + "name": "Question", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwzOTU2NzkwNTk=", + "name": "Revision needed", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw2OTcwMTg5NzI=", + "name": "Self Merge", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw1NjcxNDI1Mg==", + "name": "Target:Browser", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw1NjcxNDI0NQ==", + "name": "Target:NodeJS", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyMDk2NzQzNjAw", + "name": "The CI failed", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyOTUzOTk2NDAx", + "name": "The CI is blocked", + "__typename": "Label" + }, + { + "id": "LA_kwDOAFz6BM8AAAABEGgY4Q", + "name": "Too Many Files", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyMTU2MzIyMzcx", + "name": "Too Many Owners", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwzMjAzMjg3Mg==", + "name": "TypeScript-Core", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw2NDQwOTUzNDI=", + "name": "Unmergeable", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw2NDQwOTU4ODI=", + "name": "Unmerged", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWw2NDY3ODkyMDU=", + "name": "Unowned", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyNDYyODA0MzE1", + "name": "Unreviewed", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyMTU0NzUwNDcz", + "name": "Untested Change", + "__typename": "Label" + }, + { + "id": "MDU6TGFiZWwyMDk2NzQ1NzQx", + "name": "Where is GH Actions?", + "__typename": "Label" + } + ] +} diff --git a/packages/mergebot/src/_tests/discussions.test.ts b/packages/mergebot/src/_tests/discussions.test.ts new file mode 100644 index 0000000000..7b1ece19a1 --- /dev/null +++ b/packages/mergebot/src/_tests/discussions.test.ts @@ -0,0 +1,28 @@ +/// +import { canHandleRequest, extractNPMReference } from "../discussions"; + +describe(canHandleRequest, () => { + const eventActions = [ + ["discussion", "created", true], + ["discussion", "edited", true], + ["discussion", "updated", false], + ["pull_request", "created", false], + ] as const; + + test.concurrent.each(eventActions)("(%s, %s) is %s", async (event, action, expected) => { + expect(canHandleRequest(event, action)).toEqual(expected); + }); +}); + +describe(extractNPMReference, () => { + const eventActions = [ + ["[node] my thingy", "node"], + ["OK [react]", "react"], + ["I think [@typescript/twoslash] need improving ", "@typescript/twoslash"], + ["[@types/node] needs X", "node"], + ] as const; + + test.concurrent.each(eventActions)("(%s, %s) is %s", async (title, result) => { + expect(extractNPMReference({ title })).toEqual(result); + }); +}); diff --git a/packages/mergebot/src/_tests/fixturedActions.test.ts b/packages/mergebot/src/_tests/fixturedActions.test.ts new file mode 100644 index 0000000000..d2add80b55 --- /dev/null +++ b/packages/mergebot/src/_tests/fixturedActions.test.ts @@ -0,0 +1,64 @@ +import { ApolloQueryResult } from "@apollo/client/core"; +import { readdirSync } from "fs"; +import { join } from "path"; +import { toMatchFile } from "jest-file-snapshot"; +import { process } from "../compute-pr-actions"; +import { deriveStateForPR } from "../pr-info"; +import { PR } from "../queries/schema/PR"; +import { readJsonSync, scrubDiagnosticDetails } from "../util/util"; +import * as cachedQueries from "./cachedQueries.json"; +jest.mock("../util/cachedQueries", () => ({ + getProjectBoardColumns: jest.fn(() => cachedQueries.getProjectBoardColumns), + getLabels: jest.fn(() => cachedQueries.getLabels), +})); +import { executePrActions } from "../execute-pr-actions"; + +expect.extend({ toMatchFile }); + +/* You can use the following command to add/update fixtures with an existing PR + * + * BOT_AUTH_TOKEN=XYZ pnpm run create-fixture -- 43164 + */ + +async function testFixture(dir: string) { + // _foo.json are input files, except for Date.now from derived.json + const responsePath = join(dir, "_response.json"); + const filesPath = join(dir, "_files.json"); + const downloadsPath = join(dir, "_downloads.json"); + const derivedPath = join(dir, "derived.json"); + const resultPath = join(dir, "result.json"); + const mutationsPath = join(dir, "mutations.json"); + + const jsonString = (value: any) => scrubDiagnosticDetails(JSON.stringify(value, null, " ") + "\n"); + + const response: ApolloQueryResult = readJsonSync(responsePath); + const files = readJsonSync(filesPath); + const downloads = readJsonSync(downloadsPath); + + const prInfo = response.data.repository?.pullRequest; + if (!prInfo) throw new Error("Should never happen"); + + const derived = await deriveStateForPR( + prInfo, + (expr: string) => Promise.resolve(files[expr] as string), + (name: string, _until?: Date) => (name in downloads ? downloads[name] : 0), + new Date(readJsonSync(derivedPath).now), + ); + + const action = process(derived); + + expect(jsonString(action)).toMatchFile(resultPath); + expect(jsonString(derived)).toMatchFile(derivedPath); + + const mutations = await executePrActions(action, prInfo, /*dry*/ true); + expect(jsonString(mutations)).toMatchFile(mutationsPath); +} + +describe("Test fixtures", () => { + const fixturesFolder = join(__dirname, "fixtures"); + readdirSync(fixturesFolder, { withFileTypes: true }).forEach((dirent) => { + if (dirent.isDirectory()) { + it(`Fixture: ${dirent.name}`, async () => testFixture(join(fixturesFolder, dirent.name))); + } + }); +}); diff --git a/packages/mergebot/src/_tests/fixtures/38979/_downloads.json b/packages/mergebot/src/_tests/fixtures/38979/_downloads.json new file mode 100644 index 0000000000..f67d186b94 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/38979/_downloads.json @@ -0,0 +1,3 @@ +{ + "es-abstract": 8537567 +} diff --git a/packages/mergebot/src/_tests/fixtures/38979/_files.json b/packages/mergebot/src/_tests/fixtures/38979/_files.json new file mode 100644 index 0000000000..eeb6dbf43c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/38979/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/es-abstract/index.d.ts": "// Type definitions for es-abstract 1.16\n// Project: https://github.com/ljharb/es-abstract\n// Definitions by: RReverser \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.6\n\n FAKE CONTENT TO MATCH PREVIOUS OWNERS.JSON \n", + "222334139e52fc16369464cfb5dc95c82f71192f:types/es-abstract/index.d.ts": "// Type definitions for es-abstract 1.16\n// Project: https://github.com/ljharb/es-abstract\n// Definitions by: RReverser \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.6\n\n FAKE CONTENT TO MATCH PREVIOUS OWNERS.JSON \n" +} diff --git a/packages/mergebot/src/_tests/fixtures/38979/_response.json b/packages/mergebot/src/_tests/fixtures/38979/_response.json new file mode 100644 index 0000000000..1741d93e73 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/38979/_response.json @@ -0,0 +1,2495 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0MzI1ODk5Njc0", + "title": "feat: Add `es‑abstract` [WIP]", + "lastEditedAt": "2019-10-22T21:40:07Z", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2019-10-08T18:19:50Z", + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + }, + { + "name": "Other Approved", + "__typename": "Label" + }, + { + "name": "Check Config", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 38979, + "state": "OPEN", + "headRefOid": "222334139e52fc16369464cfb5dc95c82f71192f", + "changedFiles": 72, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2019-10-08T18:22:32Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2019-10-15T01:26:04Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2019-10-17T21:31:10Z" + }, + { + "__typename": "ReadyForReviewEvent", + "createdAt": "2019-10-18T22:52:06Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2019-10-18T23:06:50Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2019-10-19T14:41:07Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "ljharb", + "__typename": "User" + }, + "createdAt": "2019-10-19T15:26:36Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2019-10-22T21:39:56Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2019-10-22T22:31:54Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2019-11-07T13:40:31Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2019-11-07T13:53:10Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "ljharb", + "__typename": "User" + }, + "createdAt": "2019-12-30T21:53:58Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-12T04:12:41Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-12T04:12:42Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-12T04:12:43Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-12T04:12:43Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-12T04:12:44Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-12T04:12:45Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "ljharb", + "__typename": "User" + }, + "createdAt": "2020-05-12T04:51:03Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "sandersn", + "__typename": "User" + }, + "createdAt": "2020-05-12T15:11:44Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "orta", + "__typename": "User" + }, + "createdAt": "2020-05-12T15:13:19Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "commit": { + "oid": "efd85c46cbcbd5a8652425ab5fe15d1a2adb2935", + "abbreviatedOid": "efd85c4", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "createdAt": "2019-10-09T16:06:14Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "createdAt": "2019-10-09T16:08:14Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-09T16:09:08Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-299527429", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "commit": { + "oid": "efd85c46cbcbd5a8652425ab5fe15d1a2adb2935", + "abbreviatedOid": "efd85c4", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2019-10-09T16:13:23Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-09T16:13:23Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-299531875", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "commit": { + "oid": "efd85c46cbcbd5a8652425ab5fe15d1a2adb2935", + "abbreviatedOid": "efd85c4", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2019-10-09T16:14:17Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-09T16:14:17Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-299532394", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "commit": { + "oid": "efd85c46cbcbd5a8652425ab5fe15d1a2adb2935", + "abbreviatedOid": "efd85c4", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "createdAt": "2019-10-09T16:16:48Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-09T16:16:48Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-299533922", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "commit": { + "oid": "efd85c46cbcbd5a8652425ab5fe15d1a2adb2935", + "abbreviatedOid": "efd85c4", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2019-10-09T16:19:18Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-09T16:19:19Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-299535415", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "commit": { + "oid": "efd85c46cbcbd5a8652425ab5fe15d1a2adb2935", + "abbreviatedOid": "efd85c4", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "createdAt": "2019-10-09T16:21:37Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-09T16:21:37Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-299536732", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "commit": { + "oid": "efd85c46cbcbd5a8652425ab5fe15d1a2adb2935", + "abbreviatedOid": "efd85c4", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2019-10-09T16:29:00Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-09T16:29:00Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-299541130", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "weswigham", + "__typename": "User" + }, + "commit": { + "oid": "0e6e7f4d543b37e7862868499883a4afb3f59e5c", + "abbreviatedOid": "0e6e7f4", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "weswigham", + "__typename": "User" + }, + "createdAt": "2019-10-22T21:42:08Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "DISMISSED", + "submittedAt": "2019-10-22T21:43:25Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-305526346", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "commit": { + "oid": "0e6e7f4d543b37e7862868499883a4afb3f59e5c", + "abbreviatedOid": "0e6e7f4", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2019-10-22T22:13:30Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-22T22:13:30Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-305539323", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "weswigham", + "__typename": "User" + }, + "commit": { + "oid": "0e6e7f4d543b37e7862868499883a4afb3f59e5c", + "abbreviatedOid": "0e6e7f4", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "weswigham", + "__typename": "User" + }, + "createdAt": "2019-10-22T22:17:22Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2019-10-22T22:17:22Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-305540662", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "weswigham", + "__typename": "User" + }, + "commit": { + "oid": "0e6e7f4d543b37e7862868499883a4afb3f59e5c", + "abbreviatedOid": "0e6e7f4", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "weswigham", + "__typename": "User" + }, + "createdAt": "2019-10-22T22:20:54Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2019-10-22T22:20:55Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-305541896", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "commit": { + "oid": "e40b41f143dd741340b23fe88184a42b881775e5", + "abbreviatedOid": "e40b41f", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "createdAt": "2019-10-22T22:34:25Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "createdAt": "2019-10-22T22:36:11Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "createdAt": "2019-10-22T22:37:27Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-22T22:38:44Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-305546461", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "commit": { + "oid": "e40b41f143dd741340b23fe88184a42b881775e5", + "abbreviatedOid": "e40b41f", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2019-10-22T22:40:47Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-22T22:40:47Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-305548491", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "commit": { + "oid": "e40b41f143dd741340b23fe88184a42b881775e5", + "abbreviatedOid": "e40b41f", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2019-10-22T22:49:50Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-22T22:49:50Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-305551320", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "commit": { + "oid": "44403f972f64bf11ba9f1c724f8ad6505b4cf0eb", + "abbreviatedOid": "44403f9", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "createdAt": "2019-10-22T22:50:52Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-22T22:50:52Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-305551653", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "commit": { + "oid": "44403f972f64bf11ba9f1c724f8ad6505b4cf0eb", + "abbreviatedOid": "44403f9", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "createdAt": "2019-10-22T22:51:49Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-22T22:51:50Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-305551943", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "commit": { + "oid": "f2c94a555651e7aa8a9f344c26caae3a3020377e", + "abbreviatedOid": "f2c94a5", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2019-10-22T22:54:33Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-22T22:54:33Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-305552800", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "sandersn", + "__typename": "User" + }, + "commit": { + "oid": "3aba5ac906488433b92621605ef1eaceff29679b", + "abbreviatedOid": "3aba5ac", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "sandersn", + "__typename": "User" + }, + "createdAt": "2019-10-22T22:56:08Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2019-10-22T22:56:09Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-305553285", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "commit": { + "oid": "3aba5ac906488433b92621605ef1eaceff29679b", + "abbreviatedOid": "3aba5ac", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "createdAt": "2019-10-22T23:00:36Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-22T23:00:36Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-305554734", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "commit": { + "oid": "3aba5ac906488433b92621605ef1eaceff29679b", + "abbreviatedOid": "3aba5ac", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2019-10-22T23:00:52Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2019-10-22T23:00:52Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-305554810", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ljharb", + "__typename": "User" + }, + "commit": { + "oid": "222334139e52fc16369464cfb5dc95c82f71192f", + "abbreviatedOid": "2223341", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-05-12T04:51:52Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979#pullrequestreview-409696628", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 24, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2019-10-08T18:20:00Z", + "committedDate": "2019-10-18T22:50:53Z", + "pushedDate": null, + "abbreviatedOid": "c44bcfe", + "oid": "c44bcfef5ae7fb71d20e57ebc4430d5cf412b1d2", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2019-10-09T15:20:00Z", + "committedDate": "2019-10-18T22:50:53Z", + "pushedDate": null, + "abbreviatedOid": "5cc1196", + "oid": "5cc1196c37e559f3e33c6711c4a1996d24d3f870", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2019-10-09T15:30:00Z", + "committedDate": "2019-10-18T22:50:54Z", + "pushedDate": null, + "abbreviatedOid": "70d9fdb", + "oid": "70d9fdb8edd51c440d402b323c60ddbabf63b59b", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2019-10-09T16:30:00Z", + "committedDate": "2019-10-18T22:50:54Z", + "pushedDate": null, + "abbreviatedOid": "6451603", + "oid": "6451603e54acd1841b18b27187d24f5da07a5428", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/813d6fe0021b1437dcf408a39c34c54ac608ce9b/checks?check_suite_id=271785749", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/813d6fe0021b1437dcf408a39c34c54ac608ce9b/checks?check_suite_id=271785749", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/599887222?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-10-10T01:00:00Z", + "committedDate": "2019-10-18T22:50:54Z", + "pushedDate": "2019-10-18T22:51:19Z", + "abbreviatedOid": "813d6fe", + "oid": "813d6fe0021b1437dcf408a39c34c54ac608ce9b", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/b634ec7b05383b2bc8aa730c5a7a6e336c0af4b4/checks?check_suite_id=272146733", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/b634ec7b05383b2bc8aa730c5a7a6e336c0af4b4/checks?check_suite_id=272146733", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/600015754?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-10-19T11:20:00Z", + "committedDate": "2019-10-19T11:19:33Z", + "pushedDate": "2019-10-19T11:19:22Z", + "abbreviatedOid": "b634ec7", + "oid": "b634ec7b05383b2bc8aa730c5a7a6e336c0af4b4", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4e2290d0ac9388f6a0376721818f5bf046d122e5/checks?check_suite_id=272318377", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4e2290d0ac9388f6a0376721818f5bf046d122e5/checks?check_suite_id=272318377", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/600095152?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-10-19T16:45:00Z", + "committedDate": "2019-10-19T16:48:31Z", + "pushedDate": "2019-10-19T16:48:50Z", + "abbreviatedOid": "4e2290d", + "oid": "4e2290d0ac9388f6a0376721818f5bf046d122e5", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/0e6e7f4d543b37e7862868499883a4afb3f59e5c/checks?check_suite_id=272389644", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/0e6e7f4d543b37e7862868499883a4afb3f59e5c/checks?check_suite_id=272389644", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/600130297?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-10-19T19:00:00Z", + "committedDate": "2019-10-19T19:06:12Z", + "pushedDate": "2019-10-19T19:06:02Z", + "abbreviatedOid": "0e6e7f4", + "oid": "0e6e7f4d543b37e7862868499883a4afb3f59e5c", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/e40b41f143dd741340b23fe88184a42b881775e5/checks?check_suite_id=276777519", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e40b41f143dd741340b23fe88184a42b881775e5/checks?check_suite_id=276777519", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/601529680?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-10-22T22:20:00Z", + "committedDate": "2019-10-22T22:21:56Z", + "pushedDate": "2019-10-22T22:21:42Z", + "abbreviatedOid": "e40b41f", + "oid": "e40b41f143dd741340b23fe88184a42b881775e5", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/44403f972f64bf11ba9f1c724f8ad6505b4cf0eb/checks?check_suite_id=276806822", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/44403f972f64bf11ba9f1c724f8ad6505b4cf0eb/checks?check_suite_id=276806822", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/601540406?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-10-22T22:50:00Z", + "committedDate": "2019-10-22T22:50:15Z", + "pushedDate": "2019-10-22T22:49:56Z", + "abbreviatedOid": "44403f9", + "oid": "44403f972f64bf11ba9f1c724f8ad6505b4cf0eb", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/f2c94a555651e7aa8a9f344c26caae3a3020377e/checks?check_suite_id=276809299", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f2c94a555651e7aa8a9f344c26caae3a3020377e/checks?check_suite_id=276809299", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/601541095?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-10-22T22:52:03Z", + "committedDate": "2019-10-22T22:52:03Z", + "pushedDate": "2019-10-22T22:52:05Z", + "abbreviatedOid": "f2c94a5", + "oid": "f2c94a555651e7aa8a9f344c26caae3a3020377e", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3aba5ac906488433b92621605ef1eaceff29679b/checks?check_suite_id=276813151", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3aba5ac906488433b92621605ef1eaceff29679b/checks?check_suite_id=276813151", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/601542258?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-10-22T22:55:00Z", + "committedDate": "2019-10-22T22:56:14Z", + "pushedDate": "2019-10-22T22:55:52Z", + "abbreviatedOid": "3aba5ac", + "oid": "3aba5ac906488433b92621605ef1eaceff29679b", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/5a99874ff448082aeadcba0723cc8416fe7534cb/checks?check_suite_id=297546363", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/5a99874ff448082aeadcba0723cc8416fe7534cb/checks?check_suite_id=297546363", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/607942118?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-11-06T00:00:00Z", + "committedDate": "2019-11-06T00:23:00Z", + "pushedDate": "2019-11-06T00:23:08Z", + "abbreviatedOid": "5a99874", + "oid": "5a99874ff448082aeadcba0723cc8416fe7534cb", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/f5fd25dd9379af21d7c01eec72e657d74a5d8e0c/checks?check_suite_id=297550993", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f5fd25dd9379af21d7c01eec72e657d74a5d8e0c/checks?check_suite_id=297550993", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/607943349?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-11-06T00:15:00Z", + "committedDate": "2019-11-06T00:23:25Z", + "pushedDate": "2019-11-06T00:28:06Z", + "abbreviatedOid": "f5fd25d", + "oid": "f5fd25dd9379af21d7c01eec72e657d74a5d8e0c", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/f0cd302ecc80ac2cc4f2cd0db999c4dab6b5304c/checks?check_suite_id=297756777", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f0cd302ecc80ac2cc4f2cd0db999c4dab6b5304c/checks?check_suite_id=297756777", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/608004514?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-11-06T04:30:00Z", + "committedDate": "2019-11-06T04:32:41Z", + "pushedDate": "2019-11-06T04:32:21Z", + "abbreviatedOid": "f0cd302", + "oid": "f0cd302ecc80ac2cc4f2cd0db999c4dab6b5304c", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/aa67527d028642223f41c7fe8ea12da62c274a8e/checks?check_suite_id=299365122", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/aa67527d028642223f41c7fe8ea12da62c274a8e/checks?check_suite_id=299365122", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/608474743?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-11-06T23:20:00Z", + "committedDate": "2019-11-06T23:22:19Z", + "pushedDate": "2019-11-06T23:22:12Z", + "abbreviatedOid": "aa67527", + "oid": "aa67527d028642223f41c7fe8ea12da62c274a8e", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/719b3f5b38290caf6b88a55d8894c228afb2d772/checks?check_suite_id=300279910", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/719b3f5b38290caf6b88a55d8894c228afb2d772/checks?check_suite_id=300279910", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/608736737?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-11-07T13:40:00Z", + "committedDate": "2019-11-07T13:35:47Z", + "pushedDate": "2019-11-07T13:40:20Z", + "abbreviatedOid": "719b3f5", + "oid": "719b3f5b38290caf6b88a55d8894c228afb2d772", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9d7b5b983c5b5e0a8ca344cf2af70bd8ad6ea5ec/checks?check_suite_id=302704861", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9d7b5b983c5b5e0a8ca344cf2af70bd8ad6ea5ec/checks?check_suite_id=302704861", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/609413580?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-11-08T20:30:00Z", + "committedDate": "2019-11-08T20:56:06Z", + "pushedDate": "2019-11-08T20:55:48Z", + "abbreviatedOid": "9d7b5b9", + "oid": "9d7b5b983c5b5e0a8ca344cf2af70bd8ad6ea5ec", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/b4716bc3817ee2b38b9c3bc87eee49c033e0d4ed/checks?check_suite_id=302711560", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/b4716bc3817ee2b38b9c3bc87eee49c033e0d4ed/checks?check_suite_id=302711560", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/609415396?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-11-08T21:00:00Z", + "committedDate": "2019-11-08T21:01:23Z", + "pushedDate": "2019-11-08T21:01:06Z", + "abbreviatedOid": "b4716bc", + "oid": "b4716bc3817ee2b38b9c3bc87eee49c033e0d4ed", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2019-11-09T21:30:00Z", + "committedDate": "2019-11-15T23:44:04Z", + "pushedDate": null, + "abbreviatedOid": "818f2a0", + "oid": "818f2a0623c2f40afac0952f7a7b8906a1324353", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2019-11-15T23:45:00Z", + "committedDate": "2019-11-16T00:47:00Z", + "pushedDate": null, + "abbreviatedOid": "a663913", + "oid": "a663913be284b6f8d23897cb433fc9c8c0be7629", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3f2372fc8ea2626bbbe6c013b7c8f2676c5a8edf/checks?check_suite_id=313826891", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3f2372fc8ea2626bbbe6c013b7c8f2676c5a8edf/checks?check_suite_id=313826891", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/612655404?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-11-16T00:45:00Z", + "committedDate": "2019-11-16T00:48:00Z", + "pushedDate": "2019-11-16T00:48:39Z", + "abbreviatedOid": "3f2372f", + "oid": "3f2372fc8ea2626bbbe6c013b7c8f2676c5a8edf", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/0164b400a2ec441554cecbd6718a238d42fd80fc/checks?check_suite_id=379105709", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/0164b400a2ec441554cecbd6718a238d42fd80fc/checks?check_suite_id=379105709", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/631093486?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2019-12-30T21:45:00Z", + "committedDate": "2019-12-30T21:47:34Z", + "pushedDate": "2019-12-30T21:46:51Z", + "abbreviatedOid": "0164b40", + "oid": "0164b400a2ec441554cecbd6718a238d42fd80fc", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/222334139e52fc16369464cfb5dc95c82f71192f/checks?check_suite_id=383650012", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/222334139e52fc16369464cfb5dc95c82f71192f/checks?check_suite_id=383650012", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/632446617?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-01-03T21:00:00Z", + "committedDate": "2020-01-03T21:03:00Z", + "pushedDate": "2020-01-03T21:02:41Z", + "abbreviatedOid": "2223341", + "oid": "222334139e52fc16369464cfb5dc95c82f71192f", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 20, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDUzOTY0MDI1OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@ExE-Boss Thank you for submitting this PR!\n \nBecause this is a new definition, a DefinitelyTyped maintainer will be reviewing this PR in the next few days once the Travis CI build passes.\n \nIn the meantime, if the build fails or a merge conflict occurs, I'll let you know. Have a nice day!\r\n", + "createdAt": "2019-10-08T18:22:32Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU0MTk5NTIxNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\nAfter 5 days, no one has reviewed the PR 😞. A maintainer will be reviewing the PR in the next few days and will either merge it or request revisions. Thank you for your patience!\r\n", + "createdAt": "2019-10-15T01:26:04Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU0MzM3MDM4OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@ExE-Boss One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits or comments. Thank you!\r\n", + "createdAt": "2019-10-17T21:31:10Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "ExE-Boss", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU0Mzk5Njg3NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\nThese typings are for a package that doesn’t yet exist on master, so I don’t have anything to compare against yet! In the future, I’ll be able to compare PRs to es-abstract with its source on master.\n\n\n
\nComparison details 📊\n\n| **Batch compilation** | |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |\n| Type count | 4493 |\n| Assignability cache size | 925 |\n| | |\n| **Language service measurements** | |\n| Samples taken | 910 |\n| Identifiers in tests | 910 |\n| **`getCompletionsAtPosition`** | |\n|     Mean duration (ms) | 125.1 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 15.4% |\n|     Worst duration (ms) | 202.9 |\n|     Worst identifier | [CheckObjectCoercible](/DefinitelyTyped/DefinitelyTyped/blob/cdd01901cad98ae8fd150bfc5c51907d51abe6a2/types/es-abstract/test/es5.test.ts#L39) |\n| **`getQuickInfoAtPosition`** | |\n|     Mean duration (ms) | 125.8 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 17.5% |\n|     Worst duration (ms) | 191.2 |\n|     Worst identifier | [Call](/DefinitelyTyped/DefinitelyTyped/blob/cdd01901cad98ae8fd150bfc5c51907d51abe6a2/types/es-abstract/test/es2015.test.ts#L12) |\n| | |\n| **System information** | |\n| Node version | v10.16.3 |\n| CPU count | 2 |\n| CPU speed | 2.294 GHz |\n| CPU model | Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz |\n| CPU Architecture | x64 |\n| Memory | 6.8 GiB |\n| Platform | linux |\n| Release | 4.15.0-1059-azure |\n\n\n
\n", + "createdAt": "2019-10-18T23:06:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU0NDE1MzI5Mw==", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "body": "needinfo?(@ljharb): Should I also add types for utilities in the `helpers` directory?", + "createdAt": "2019-10-19T14:41:07Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU0NDE1OTkwOA==", + "author": { + "login": "ljharb", + "__typename": "User" + }, + "body": "everything reachable is part of the public api, so probably yes.", + "createdAt": "2019-10-19T15:26:36Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "ExE-Boss", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU0NTE2Nzc5Mg==", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "body": "review?(@ljharb): I have now added type definitions for all reachable files.", + "createdAt": "2019-10-22T21:39:56Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU0NTE4NDEyMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n🔔 @weswigham - Thanks for your review of this PR! Can you please look at the new code and update your review status if appropriate?\r\n", + "createdAt": "2019-10-22T22:31:54Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU1MTA4MzEzNQ==", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "body": "These types are still very much a work in progress.", + "createdAt": "2019-11-07T13:40:31Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU1MTA4ODE3NQ==", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "body": "Also, it’s likely that I’ll soon have to update this to v2.0 because of https://github.com/ljharb/es-abstract/issues/62, https://github.com/ljharb/es-abstract/issues/66, https://github.com/ljharb/es-abstract/pull/67, https://github.com/ljharb/es-abstract/pull/68 and https://github.com/ljharb/es-abstract/pull/69.", + "createdAt": "2019-11-07T13:53:10Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU2OTgwNzIzMg==", + "author": { + "login": "ljharb", + "__typename": "User" + }, + "body": "I wouldn't wait for v2; it'd be more useful to get v1.17 out.", + "createdAt": "2019-12-30T21:53:58Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyNzA5NzAxMg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@ExE-Boss Thank you for submitting this PR! \n\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n- [es-abstract on npm](https://www.npmjs.com/package/es-abstract)\n - [es-abstract on unpkg](https://unpkg.com/browse/es-abstract@latest//)\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ Only a DT maintainer can approve changes when there are new packages added\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": "2020-05-12T04:12:41Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyNzA5NzAxNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@sandersn Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-05-12T04:12:42Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyNzA5NzAyMg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@ljharb Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-05-12T04:12:43Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyNzA5NzAyNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@ljharb Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-05-12T04:12:43Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyNzA5NzAzMQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@weswigham Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-05-12T04:12:44Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyNzA5NzAzMg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@ljharb Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-05-12T04:12:45Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyNzEwNjI1Ng==", + "author": { + "login": "ljharb", + "__typename": "User" + }, + "body": "… why do i need 3 pings", + "createdAt": "2020-05-12T04:51:03Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyNzQwNzIzOA==", + "author": { + "login": "sandersn", + "__typename": "User" + }, + "body": "@ljharb the bot is now running asynchrono\r\n@orta you wanted to know about bad behaviour like this I think.\r\nusly!", + "createdAt": "2020-05-12T15:11:44Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyNzQwODIxMg==", + "author": { + "login": "orta", + "__typename": "User" + }, + "body": "Thanks, that is definitely suspicious", + "createdAt": "2020-05-12T15:13:19Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/es-abstract/GetIntrinsic.d.ts", + "additions": 138, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/es2015.d.ts", + "additions": 234, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/es2016.d.ts", + "additions": 36, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/es2017.d.ts", + "additions": 42, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/es2018.d.ts", + "additions": 47, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/es2019.d.ts", + "additions": 63, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/es5.d.ts", + "additions": 88, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/es6.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/es7.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/assertRecord.d.ts", + "additions": 21, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/assign.d.ts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/callBind.d.ts", + "additions": 137, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/callBound.d.ts", + "additions": 21, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/every.d.ts", + "additions": 5, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/forEach.d.ts", + "additions": 12, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/getInferredName.d.ts", + "additions": 9, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/getIteratorMethod.d.ts", + "additions": 12, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/getProto.d.ts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/getSymbolDescription.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/isFinite.d.ts", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/isNaN.d.ts", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/isPrefixOf.d.ts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/isPrimitive.d.ts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/isPropertyDescriptor.d.ts", + "additions": 16, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/isSamePropertyDescriptor.d.ts", + "additions": 9, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/maxSafeInteger.d.ts", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/mod.d.ts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/regexTester.d.ts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/setProto.d.ts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/helpers/sign.d.ts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/index.d.ts", + "additions": 56, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/operations/2015.d.ts", + "additions": 13, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/operations/2016.d.ts", + "additions": 164, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/operations/2017.d.ts", + "additions": 58, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/operations/2018.d.ts", + "additions": 43, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/operations/2019.d.ts", + "additions": 15, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/GetIntrinsic.test.ts", + "additions": 451, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/es2015.test.ts", + "additions": 108, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/es2016.test.ts", + "additions": 21, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/es2017.test.ts", + "additions": 36, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/es2018.test.ts", + "additions": 19, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/es2019.test.ts", + "additions": 17, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/es5.test.ts", + "additions": 53, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/assertRecord.test.ts", + "additions": 10, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/assign.test.ts", + "additions": 4, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/callBind.test.ts", + "additions": 12, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/callBound.test.ts", + "additions": 15, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/every.test.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/forEach.test.ts", + "additions": 22, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/getInferredName.test.ts", + "additions": 9, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/getIteratorMethod.test.ts", + "additions": 15, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/getProto.test.ts", + "additions": 7, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/getSymbolDescription.test.ts", + "additions": 4, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/isFinite.test.ts", + "additions": 5, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/isNaN.test.ts", + "additions": 5, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/isPrefixOf.test.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/isPrimitive.test.ts", + "additions": 9, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/isPropertyDescriptor.test.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/isSamePropertyDescriptor.test.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/maxSafeInteger.test.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/mod.test.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/regexTester.test.ts", + "additions": 4, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/setProto.test.ts", + "additions": 10, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/helpers/sign.test.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/index.test.ts", + "additions": 36, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/operations/2015.test.ts", + "additions": 234, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/operations/2016.test.ts", + "additions": 477, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/operations/2017.test.ts", + "additions": 413, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/operations/2018.test.ts", + "additions": 432, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/test/operations/2019.test.ts", + "additions": 402, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/tsconfig.json", + "additions": 52, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/es-abstract/tslint.json", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 72 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMjc1MTM1NTA=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW4yNTYxMzU5", + "name": "Needs Author Attention", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/38979/derived.json b/packages/mergebot/src/_tests/fixtures/38979/derived.json new file mode 100644 index 0000000000..c3709569d2 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/38979/derived.json @@ -0,0 +1,339 @@ +{ + "type": "info", + "now": "2020-05-12T19:14:42.000Z", + "pr_number": 38979, + "author": "ExE-Boss", + "headCommitOid": "222334139e52fc16369464cfb5dc95c82f71192f", + "mergeBaseOid": "master", + "lastPushDate": "2020-01-03T21:02:41.000Z", + "lastActivityDate": "2020-05-12T15:13:19.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "es-abstract", + "kind": "edit", + "files": [ + { + "path": "types/es-abstract/GetIntrinsic.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/es2015.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/es2016.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/es2017.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/es2018.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/es2019.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/es5.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/es6.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/es7.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/assertRecord.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/assign.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/callBind.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/callBound.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/every.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/forEach.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/getInferredName.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/getIteratorMethod.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/getProto.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/getSymbolDescription.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/isFinite.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/isNaN.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/isPrefixOf.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/isPrimitive.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/isPropertyDescriptor.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/isSamePropertyDescriptor.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/maxSafeInteger.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/mod.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/regexTester.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/setProto.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/helpers/sign.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/index.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/operations/2015.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/operations/2016.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/operations/2017.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/operations/2018.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/operations/2019.d.ts", + "kind": "definition" + }, + { + "path": "types/es-abstract/test/GetIntrinsic.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/es2015.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/es2016.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/es2017.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/es2018.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/es2019.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/es5.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/assertRecord.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/assign.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/callBind.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/callBound.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/every.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/forEach.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/getInferredName.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/getIteratorMethod.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/getProto.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/getSymbolDescription.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/isFinite.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/isNaN.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/isPrefixOf.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/isPrimitive.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/isPropertyDescriptor.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/isSamePropertyDescriptor.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/maxSafeInteger.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/mod.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/regexTester.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/setProto.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/helpers/sign.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/index.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/operations/2015.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/operations/2016.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/operations/2017.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/operations/2018.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/test/operations/2019.test.ts", + "kind": "test" + }, + { + "path": "types/es-abstract/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/es-abstract/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [ + "RReverser" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "ljharb", + "date": "2020-05-12T04:51:52.000Z", + "isMaintainer": false + }, + { + "type": "stale", + "reviewer": "sandersn", + "date": "2019-10-22T22:56:09.000Z", + "abbrOid": "3aba5ac" + }, + { + "type": "stale", + "reviewer": "weswigham", + "date": "2019-10-22T22:20:55.000Z", + "abbrOid": "0e6e7f4" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/38979/mutations.json b/packages/mergebot/src/_tests/fixtures/38979/mutations.json new file mode 100644 index 0000000000..ff5a5fa15d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/38979/mutations.json @@ -0,0 +1,70 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyNzA5NzAxMg==", + "body": "@ExE-Boss Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `es-abstract` — [on npm](https://www.npmjs.com/package/es-abstract), [on unpkg](https://unpkg.com/browse/es-abstract@latest/)\n - Config files to check:\n - [`es-abstract/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979/files/222334139e52fc16369464cfb5dc95c82f71192f#diff-1eda518cd7bfbcd5fa96a7f844b631954cbc9db9ff168fc3731abb874369a4f6): edited\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=38979&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 module config files\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 129 days — it is *still* unreviewed!\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwxNjA4NjM0NDg0", + "MDU6TGFiZWwyNDYyODA0MzE1" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0MzI1ODk5Njc0" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2NDY3ODg4ODg=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0MzI1ODk5Njc0" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0MzI1ODk5Njc0", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0MzI1ODk5Njc0", + "body": "🔔 @RReverser — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979/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" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0MzI1ODk5Njc0", + "body": "@sandersn, @weswigham Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0MzI1ODk5Njc0", + "body": "It has been more than two weeks and this PR still has no reviews.\n\nI'll bump it to the DT maintainer queue. Thank you for your patience, @ExE-Boss.\n\n(Ping @RReverser.)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/38979/result.json b/packages/mergebot/src/_tests/fixtures/38979/result.json new file mode 100644 index 0000000000..e829dfa863 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/38979/result.json @@ -0,0 +1,30 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "Critical package", + "Other Approved", + "Check Config", + "Unreviewed" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@ExE-Boss Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `es-abstract` — [on npm](https://www.npmjs.com/package/es-abstract), [on unpkg](https://unpkg.com/browse/es-abstract@latest/)\n - Config files to check:\n - [`es-abstract/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979/files/222334139e52fc16369464cfb5dc95c82f71192f#diff-1eda518cd7bfbcd5fa96a7f844b631954cbc9db9ff168fc3731abb874369a4f6): edited\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=38979&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 module config files\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 129 days — it is *still* unreviewed!\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @RReverser — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38979/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." + }, + { + "tag": "stale-ping-764528-0e6e7f4", + "status": "@sandersn, @weswigham Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?" + }, + { + "tag": "Unreviewed:done", + "status": "It has been more than two weeks and this PR still has no reviews.\n\nI'll bump it to the DT maintainer queue. Thank you for your patience, @ExE-Boss.\n\n(Ping @RReverser.)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/43136/_downloads.json b/packages/mergebot/src/_tests/fixtures/43136/_downloads.json new file mode 100644 index 0000000000..5606856ee6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43136/_downloads.json @@ -0,0 +1,3 @@ +{ + "estree": 8537567 +} diff --git a/packages/mergebot/src/_tests/fixtures/43136/_files.json b/packages/mergebot/src/_tests/fixtures/43136/_files.json new file mode 100644 index 0000000000..d1310c88aa --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43136/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/estree/index.d.ts": "// Type definitions for ESTree AST specification\n// Project: https://github.com/estree/estree\n// Definitions by: RReverser \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n// This definition file follows a somewhat unusual format. ESTree allows\n// runtime type checks based on the `type` parameter. In order to explain this\n// to typescript we want to use discriminated union types:\n// https://github.com/Microsoft/TypeScript/pull/9163\n//\n// For ESTree this is a bit tricky because the high level interfaces like\n// Node or Function are pulling double duty. We want to pass common fields down\n// to the interfaces that extend them (like Identifier or\n// ArrowFunctionExpression), but you can't extend a type union or enforce\n// common fields on them. So we've split the high level interfaces into two\n// types, a base type which passes down inhereted fields, and a type union of\n// all types which extend the base type. Only the type union is exported, and\n// the union is how other types refer to the collection of inheriting types.\n//\n// This makes the definitions file here somewhat more difficult to maintain,\n// but it has the notable advantage of making ESTree much easier to use as\n// an end user.\n\ninterface BaseNodeWithoutComments {\n // Every leaf interface that extends BaseNode must specify a type property.\n // The type property should be a string literal. For example, Identifier\n // has: `type: \"Identifier\"`\n type: string;\n loc?: SourceLocation | null;\n range?: [number, number];\n}\n\ninterface BaseNode extends BaseNodeWithoutComments {\n leadingComments?: Array;\n trailingComments?: Array;\n}\n\nexport type Node =\n Identifier | Literal | Program | Function | SwitchCase | CatchClause |\n VariableDeclarator | Statement | Expression | Property |\n AssignmentProperty | Super | TemplateElement | SpreadElement | Pattern |\n ClassBody | Class | MethodDefinition | ModuleDeclaration | ModuleSpecifier;\n\nexport interface Comment extends BaseNodeWithoutComments {\n type: \"Line\" | \"Block\";\n value: string;\n}\n\ninterface SourceLocation {\n source?: string | null;\n start: Position;\n end: Position;\n}\n\nexport interface Position {\n /** >= 1 */\n line: number;\n /** >= 0 */\n column: number;\n}\n\nexport interface Program extends BaseNode {\n type: \"Program\";\n sourceType: \"script\" | \"module\";\n body: Array;\n comments?: Array;\n}\n\nexport interface Directive extends BaseNode {\n type: \"ExpressionStatement\";\n expression: Literal;\n directive: string;\n}\n\ninterface BaseFunction extends BaseNode {\n params: Array;\n generator?: boolean;\n async?: boolean;\n // The body is either BlockStatement or Expression because arrow functions\n // can have a body that's either. FunctionDeclarations and\n // FunctionExpressions have only BlockStatement bodies.\n body: BlockStatement | Expression;\n}\n\nexport type Function =\n FunctionDeclaration | FunctionExpression | ArrowFunctionExpression;\n\nexport type Statement =\n ExpressionStatement | BlockStatement | EmptyStatement |\n DebuggerStatement | WithStatement | ReturnStatement | LabeledStatement |\n BreakStatement | ContinueStatement | IfStatement | SwitchStatement |\n ThrowStatement | TryStatement | WhileStatement | DoWhileStatement |\n ForStatement | ForInStatement | ForOfStatement | Declaration;\n\ninterface BaseStatement extends BaseNode { }\n\nexport interface EmptyStatement extends BaseStatement {\n type: \"EmptyStatement\";\n}\n\nexport interface BlockStatement extends BaseStatement {\n type: \"BlockStatement\";\n body: Array;\n innerComments?: Array;\n}\n\nexport interface ExpressionStatement extends BaseStatement {\n type: \"ExpressionStatement\";\n expression: Expression;\n}\n\nexport interface IfStatement extends BaseStatement {\n type: \"IfStatement\";\n test: Expression;\n consequent: Statement;\n alternate?: Statement | null;\n}\n\nexport interface LabeledStatement extends BaseStatement {\n type: \"LabeledStatement\";\n label: Identifier;\n body: Statement;\n}\n\nexport interface BreakStatement extends BaseStatement {\n type: \"BreakStatement\";\n label?: Identifier | null;\n}\n\nexport interface ContinueStatement extends BaseStatement {\n type: \"ContinueStatement\";\n label?: Identifier | null;\n}\n\nexport interface WithStatement extends BaseStatement {\n type: \"WithStatement\";\n object: Expression;\n body: Statement;\n}\n\nexport interface SwitchStatement extends BaseStatement {\n type: \"SwitchStatement\";\n discriminant: Expression;\n cases: Array;\n}\n\nexport interface ReturnStatement extends BaseStatement {\n type: \"ReturnStatement\";\n argument?: Expression | null;\n}\n\nexport interface ThrowStatement extends BaseStatement {\n type: \"ThrowStatement\";\n argument: Expression;\n}\n\nexport interface TryStatement extends BaseStatement {\n type: \"TryStatement\";\n block: BlockStatement;\n handler?: CatchClause | null;\n finalizer?: BlockStatement | null;\n}\n\nexport interface WhileStatement extends BaseStatement {\n type: \"WhileStatement\";\n test: Expression;\n body: Statement;\n}\n\nexport interface DoWhileStatement extends BaseStatement {\n type: \"DoWhileStatement\";\n body: Statement;\n test: Expression;\n}\n\nexport interface ForStatement extends BaseStatement {\n type: \"ForStatement\";\n init?: VariableDeclaration | Expression | null;\n test?: Expression | null;\n update?: Expression | null;\n body: Statement;\n}\n\ninterface BaseForXStatement extends BaseStatement {\n left: VariableDeclaration | Pattern;\n right: Expression;\n body: Statement;\n}\n\nexport interface ForInStatement extends BaseForXStatement {\n type: \"ForInStatement\";\n}\n\nexport interface DebuggerStatement extends BaseStatement {\n type: \"DebuggerStatement\";\n}\n\nexport type Declaration =\n FunctionDeclaration | VariableDeclaration | ClassDeclaration;\n\ninterface BaseDeclaration extends BaseStatement { }\n\nexport interface FunctionDeclaration extends BaseFunction, BaseDeclaration {\n type: \"FunctionDeclaration\";\n /** It is null when a function declaration is a part of the `export default function` statement */\n id: Identifier | null;\n body: BlockStatement;\n}\n\nexport interface VariableDeclaration extends BaseDeclaration {\n type: \"VariableDeclaration\";\n declarations: Array;\n kind: \"var\" | \"let\" | \"const\";\n}\n\nexport interface VariableDeclarator extends BaseNode {\n type: \"VariableDeclarator\";\n id: Pattern;\n init?: Expression | null;\n}\n\ntype Expression =\n ThisExpression | ArrayExpression | ObjectExpression | FunctionExpression |\n ArrowFunctionExpression | YieldExpression | Literal | UnaryExpression |\n UpdateExpression | BinaryExpression | AssignmentExpression |\n LogicalExpression | MemberExpression | ConditionalExpression |\n CallExpression | NewExpression | SequenceExpression | TemplateLiteral |\n TaggedTemplateExpression | ClassExpression | MetaProperty | Identifier |\n AwaitExpression | ImportExpression | ChainExpression;\n\nexport interface BaseExpression extends BaseNode { }\n\ntype ChainElement = SimpleCallExpression | MemberExpression;\n\nexport interface ChainExpression extends BaseExpression {\n type: \"ChainExpression\";\n expression: ChainElement;\n}\n\nexport interface ThisExpression extends BaseExpression {\n type: \"ThisExpression\";\n}\n\nexport interface ArrayExpression extends BaseExpression {\n type: \"ArrayExpression\";\n elements: Array;\n}\n\nexport interface ObjectExpression extends BaseExpression {\n type: \"ObjectExpression\";\n properties: Array;\n}\n\nexport interface Property extends BaseNode {\n type: \"Property\";\n key: Expression;\n value: Expression | Pattern; // Could be an AssignmentProperty\n kind: \"init\" | \"get\" | \"set\";\n method: boolean;\n shorthand: boolean;\n computed: boolean;\n}\n\nexport interface FunctionExpression extends BaseFunction, BaseExpression {\n id?: Identifier | null;\n type: \"FunctionExpression\";\n body: BlockStatement;\n}\n\nexport interface SequenceExpression extends BaseExpression {\n type: \"SequenceExpression\";\n expressions: Array;\n}\n\nexport interface UnaryExpression extends BaseExpression {\n type: \"UnaryExpression\";\n operator: UnaryOperator;\n prefix: true;\n argument: Expression;\n}\n\nexport interface BinaryExpression extends BaseExpression {\n type: \"BinaryExpression\";\n operator: BinaryOperator;\n left: Expression;\n right: Expression;\n}\n\nexport interface AssignmentExpression extends BaseExpression {\n type: \"AssignmentExpression\";\n operator: AssignmentOperator;\n left: Pattern | MemberExpression;\n right: Expression;\n}\n\nexport interface UpdateExpression extends BaseExpression {\n type: \"UpdateExpression\";\n operator: UpdateOperator;\n argument: Expression;\n prefix: boolean;\n}\n\nexport interface LogicalExpression extends BaseExpression {\n type: \"LogicalExpression\";\n operator: LogicalOperator;\n left: Expression;\n right: Expression;\n}\n\nexport interface ConditionalExpression extends BaseExpression {\n type: \"ConditionalExpression\";\n test: Expression;\n alternate: Expression;\n consequent: Expression;\n}\n\ninterface BaseCallExpression extends BaseExpression {\n callee: Expression | Super;\n arguments: Array;\n}\nexport type CallExpression = SimpleCallExpression | NewExpression;\n\nexport interface SimpleCallExpression extends BaseCallExpression {\n type: \"CallExpression\";\n optional: boolean;\n}\n\nexport interface NewExpression extends BaseCallExpression {\n type: \"NewExpression\";\n}\n\nexport interface MemberExpression extends BaseExpression, BasePattern {\n type: \"MemberExpression\";\n object: Expression | Super;\n property: Expression;\n computed: boolean;\n optional: boolean;\n}\n\nexport type Pattern =\n Identifier | ObjectPattern | ArrayPattern | RestElement |\n AssignmentPattern | MemberExpression;\n\ninterface BasePattern extends BaseNode { }\n\nexport interface SwitchCase extends BaseNode {\n type: \"SwitchCase\";\n test?: Expression | null;\n consequent: Array;\n}\n\nexport interface CatchClause extends BaseNode {\n type: \"CatchClause\";\n param: Pattern | null;\n body: BlockStatement;\n}\n\nexport interface Identifier extends BaseNode, BaseExpression, BasePattern {\n type: \"Ide", + "e6863537248bbfee8f0ef8c636bb00c25cf40b96:types/estree/index.d.ts": "// Type definitions for ESTree AST specification\n// Project: https://github.com/estree/estree\n// Definitions by: RReverser \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n// This definition file follows a somewhat unusual format. ESTree allows\n// runtime type checks based on the `type` parameter. In order to explain this\n// to typescript we want to use discriminated union types:\n// https://github.com/Microsoft/TypeScript/pull/9163\n//\n// For ESTree this is a bit tricky because the high level interfaces like\n// Node or Function are pulling double duty. We want to pass common fields down\n// to the interfaces that extend them (like Identifier or\n// ArrowFunctionExpression), but you can't extend a type union or enforce\n// common fields on them. So we've split the high level interfaces into two\n// types, a base type which passes down inhereted fields, and a type union of\n// all types which extend the base type. Only the type union is exported, and\n// the union is how other types refer to the collection of inheriting types.\n//\n// This makes the definitions file here somewhat more difficult to maintain,\n// but it has the notable advantage of making ESTree much easier to use as\n// an end user.\n\ninterface BaseNodeWithoutComments {\n // Every leaf interface that extends BaseNode must specify a type property.\n // The type property should be a string literal. For example, Identifier\n // has: `type: \"Identifier\"`\n type: string;\n loc?: SourceLocation | null;\n range?: [number, number];\n}\n\ninterface BaseNode extends BaseNodeWithoutComments {\n leadingComments?: Array;\n trailingComments?: Array;\n}\n\nexport type Node =\n Identifier | Literal | Program | Function | SwitchCase | CatchClause |\n VariableDeclarator | Statement | Expression | Property |\n AssignmentProperty | Super | TemplateElement | SpreadElement | Pattern |\n ClassBody | Class | MethodDefinition | ModuleDeclaration | ModuleSpecifier;\n\nexport interface Comment extends BaseNodeWithoutComments {\n type: \"Line\" | \"Block\";\n value: string;\n}\n\ninterface SourceLocation {\n source?: string | null;\n start: Position;\n end: Position;\n}\n\nexport interface Position {\n /** >= 1 */\n line: number;\n /** >= 0 */\n column: number;\n}\n\nexport interface Program extends BaseNode {\n type: \"Program\";\n sourceType: \"script\" | \"module\";\n body: Array;\n comments?: Array;\n}\n\nexport interface Directive extends BaseNode {\n type: \"ExpressionStatement\";\n expression: Literal;\n directive: string;\n}\n\ninterface BaseFunction extends BaseNode {\n params: Array;\n generator?: boolean;\n async?: boolean;\n // The body is either BlockStatement or Expression because arrow functions\n // can have a body that's either. FunctionDeclarations and\n // FunctionExpressions have only BlockStatement bodies.\n body: BlockStatement | Expression;\n}\n\nexport type Function =\n FunctionDeclaration | FunctionExpression | ArrowFunctionExpression;\n\nexport type Statement =\n ExpressionStatement | BlockStatement | EmptyStatement |\n DebuggerStatement | WithStatement | ReturnStatement | LabeledStatement |\n BreakStatement | ContinueStatement | IfStatement | SwitchStatement |\n ThrowStatement | TryStatement | WhileStatement | DoWhileStatement |\n ForStatement | ForInStatement | ForOfStatement | Declaration;\n\ninterface BaseStatement extends BaseNode { }\n\nexport interface EmptyStatement extends BaseStatement {\n type: \"EmptyStatement\";\n}\n\nexport interface BlockStatement extends BaseStatement {\n type: \"BlockStatement\";\n body: Array;\n innerComments?: Array;\n}\n\nexport interface ExpressionStatement extends BaseStatement {\n type: \"ExpressionStatement\";\n expression: Expression;\n}\n\nexport interface IfStatement extends BaseStatement {\n type: \"IfStatement\";\n test: Expression;\n consequent: Statement;\n alternate?: Statement | null;\n}\n\nexport interface LabeledStatement extends BaseStatement {\n type: \"LabeledStatement\";\n label: Identifier;\n body: Statement;\n}\n\nexport interface BreakStatement extends BaseStatement {\n type: \"BreakStatement\";\n label?: Identifier | null;\n}\n\nexport interface ContinueStatement extends BaseStatement {\n type: \"ContinueStatement\";\n label?: Identifier | null;\n}\n\nexport interface WithStatement extends BaseStatement {\n type: \"WithStatement\";\n object: Expression;\n body: Statement;\n}\n\nexport interface SwitchStatement extends BaseStatement {\n type: \"SwitchStatement\";\n discriminant: Expression;\n cases: Array;\n}\n\nexport interface ReturnStatement extends BaseStatement {\n type: \"ReturnStatement\";\n argument?: Expression | null;\n}\n\nexport interface ThrowStatement extends BaseStatement {\n type: \"ThrowStatement\";\n argument: Expression;\n}\n\nexport interface TryStatement extends BaseStatement {\n type: \"TryStatement\";\n block: BlockStatement;\n handler?: CatchClause | null;\n finalizer?: BlockStatement | null;\n}\n\nexport interface WhileStatement extends BaseStatement {\n type: \"WhileStatement\";\n test: Expression;\n body: Statement;\n}\n\nexport interface DoWhileStatement extends BaseStatement {\n type: \"DoWhileStatement\";\n body: Statement;\n test: Expression;\n}\n\nexport interface ForStatement extends BaseStatement {\n type: \"ForStatement\";\n init?: VariableDeclaration | Expression | null;\n test?: Expression | null;\n update?: Expression | null;\n body: Statement;\n}\n\ninterface BaseForXStatement extends BaseStatement {\n left: VariableDeclaration | Pattern;\n right: Expression;\n body: Statement;\n}\n\nexport interface ForInStatement extends BaseForXStatement {\n type: \"ForInStatement\";\n}\n\nexport interface DebuggerStatement extends BaseStatement {\n type: \"DebuggerStatement\";\n}\n\nexport type Declaration =\n FunctionDeclaration | VariableDeclaration | ClassDeclaration;\n\ninterface BaseDeclaration extends BaseStatement { }\n\nexport interface FunctionDeclaration extends BaseFunction, BaseDeclaration {\n type: \"FunctionDeclaration\";\n /** It is null when a function declaration is a part of the `export default function` statement */\n id: Identifier | null;\n body: BlockStatement;\n}\n\nexport interface VariableDeclaration extends BaseDeclaration {\n type: \"VariableDeclaration\";\n declarations: Array;\n kind: \"var\" | \"let\" | \"const\";\n}\n\nexport interface VariableDeclarator extends BaseNode {\n type: \"VariableDeclarator\";\n id: Pattern;\n init?: Expression | null;\n}\n\ntype Expression =\n ThisExpression | ArrayExpression | ObjectExpression | FunctionExpression |\n ArrowFunctionExpression | YieldExpression | Literal | UnaryExpression |\n UpdateExpression | BinaryExpression | AssignmentExpression |\n LogicalExpression | MemberExpression | ConditionalExpression |\n CallExpression | NewExpression | SequenceExpression | TemplateLiteral |\n TaggedTemplateExpression | ClassExpression | MetaProperty | Identifier |\n AwaitExpression | ImportExpression | ChainExpression;\n\nexport interface BaseExpression extends BaseNode { }\n\ntype ChainElement = SimpleCallExpression | MemberExpression;\n\nexport interface ChainExpression extends BaseExpression {\n type: \"ChainExpression\";\n expression: ChainElement;\n}\n\nexport interface ThisExpression extends BaseExpression {\n type: \"ThisExpression\";\n}\n\nexport interface ArrayExpression extends BaseExpression {\n type: \"ArrayExpression\";\n elements: Array;\n}\n\nexport interface ObjectExpression extends BaseExpression {\n type: \"ObjectExpression\";\n properties: Array;\n}\n\nexport interface Property extends BaseNode {\n type: \"Property\";\n key: Expression;\n value: Expression | Pattern; // Could be an AssignmentProperty\n kind: \"init\" | \"get\" | \"set\";\n method: boolean;\n shorthand: boolean;\n computed: boolean;\n}\n\nexport interface FunctionExpression extends BaseFunction, BaseExpression {\n id?: Identifier | null;\n type: \"FunctionExpression\";\n body: BlockStatement;\n}\n\nexport interface SequenceExpression extends BaseExpression {\n type: \"SequenceExpression\";\n expressions: Array;\n}\n\nexport interface UnaryExpression extends BaseExpression {\n type: \"UnaryExpression\";\n operator: UnaryOperator;\n prefix: true;\n argument: Expression;\n}\n\nexport interface BinaryExpression extends BaseExpression {\n type: \"BinaryExpression\";\n operator: BinaryOperator;\n left: Expression;\n right: Expression;\n}\n\nexport interface AssignmentExpression extends BaseExpression {\n type: \"AssignmentExpression\";\n operator: AssignmentOperator;\n left: Pattern | MemberExpression;\n right: Expression;\n}\n\nexport interface UpdateExpression extends BaseExpression {\n type: \"UpdateExpression\";\n operator: UpdateOperator;\n argument: Expression;\n prefix: boolean;\n}\n\nexport interface LogicalExpression extends BaseExpression {\n type: \"LogicalExpression\";\n operator: LogicalOperator;\n left: Expression;\n right: Expression;\n}\n\nexport interface ConditionalExpression extends BaseExpression {\n type: \"ConditionalExpression\";\n test: Expression;\n alternate: Expression;\n consequent: Expression;\n}\n\ninterface BaseCallExpression extends BaseExpression {\n callee: Expression | Super;\n arguments: Array;\n}\nexport type CallExpression = SimpleCallExpression | NewExpression;\n\nexport interface SimpleCallExpression extends BaseCallExpression {\n type: \"CallExpression\";\n optional: boolean;\n}\n\nexport interface NewExpression extends BaseCallExpression {\n type: \"NewExpression\";\n}\n\nexport interface MemberExpression extends BaseExpression, BasePattern {\n type: \"MemberExpression\";\n object: Expression | Super;\n property: Expression;\n computed: boolean;\n optional: boolean;\n}\n\nexport type Pattern =\n Identifier | ObjectPattern | ArrayPattern | RestElement |\n AssignmentPattern | MemberExpression;\n\ninterface BasePattern extends BaseNode { }\n\nexport interface SwitchCase extends BaseNode {\n type: \"SwitchCase\";\n test?: Expression | null;\n consequent: Array;\n}\n\nexport interface CatchClause extends BaseNode {\n type: \"CatchClause\";\n param: Pattern | null;\n body: BlockStatement;\n}\n\nexport interface Identifier extends BaseNode, BaseExpression, BasePattern {\n type: \"Ide" +} diff --git a/packages/mergebot/src/_tests/fixtures/43136/_notes.txt b/packages/mergebot/src/_tests/fixtures/43136/_notes.txt new file mode 100644 index 0000000000..8e86d044e8 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43136/_notes.txt @@ -0,0 +1 @@ +This should be a "wait" - while the reviewer did approve, there was a new commit since then diff --git a/packages/mergebot/src/_tests/fixtures/43136/_response.json b/packages/mergebot/src/_tests/fixtures/43136/_response.json new file mode 100644 index 0000000000..030ed3c09a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43136/_response.json @@ -0,0 +1,336 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0Mzg4MzgyMzYy", + "title": "estree: Object expressions may contain spread elements", + "lastEditedAt": null, + "author": { + "login": "larsrh", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-03-14T17:52:19Z", + "labels": { + "nodes": [ + { + "name": "Merge:Express", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "mergeable": "MERGEABLE", + "number": 43136, + "state": "OPEN", + "headRefOid": "e6863537248bbfee8f0ef8c636bb00c25cf40b96", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "37d784d0adbacbfc8fc730c5db4754e1338c611e", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestReview", + "author": { + "login": "RReverser", + "__typename": "User" + }, + "state": "APPROVED" + }, + { + "__typename": "PullRequestReview", + "author": { + "login": "RReverser", + "__typename": "User" + }, + "state": "COMMENTED" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "e6863537248bbfee8f0ef8c636bb00c25cf40b96", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "RReverser", + "__typename": "User" + }, + "commit": { + "oid": "37d784d0adbacbfc8fc730c5db4754e1338c611e", + "abbreviatedOid": "37d784d", + "__typename": "Commit" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-03-14T19:22:34Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43136#pullrequestreview-374748227", + "__typename": "PullRequestReview", + "comments": { + "nodes": [] + } + }, + { + "author": { + "login": "RReverser", + "__typename": "User" + }, + "commit": { + "oid": "37d784d0adbacbfc8fc730c5db4754e1338c611e", + "abbreviatedOid": "37d784d", + "__typename": "Commit" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-03-14T19:23:36Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43136#pullrequestreview-374748276", + "__typename": "PullRequestReview", + "comments": { + "nodes": [] + } + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/662465373?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-03-14T17:46:41Z", + "committedDate": "2020-03-14T17:46:41Z", + "pushedDate": "2020-03-14T17:48:51Z", + "abbreviatedOid": "37d784d", + "oid": "37d784d0adbacbfc8fc730c5db4754e1338c611e", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/663088472?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-03-16T14:24:20Z", + "committedDate": "2020-03-16T14:24:20Z", + "pushedDate": "2020-03-16T14:26:42Z", + "abbreviatedOid": "e686353", + "oid": "e6863537248bbfee8f0ef8c636bb00c25cf40b96", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDU5OTExNTQwNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@larsrh Thank you for submitting this PR!\n\n🔔 @RReverser — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43136/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\nIf no reviewer appears after a week, a DefinitelyTyped maintainer will review the PR instead.\r\n", + "createdAt": "2020-03-14T18:22:40Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU5OTEzMDcwMA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\nA definition owner has approved this PR ⭐️. A maintainer will merge this PR shortly. If it shouldn't be merged yet, please leave a comment saying so and we'll wait. Thank you for your contribution to DefinitelyTyped!\r\n", + "createdAt": "2020-03-14T20:22:41Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU5OTU2NTg2NA==", + "author": { + "login": "larsrh", + "__typename": "User" + }, + "body": "@RReverser Done!", + "createdAt": "2020-03-16T14:26:59Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU5OTU2ODgyNA==", + "author": { + "login": "RReverser", + "__typename": "User" + }, + "body": "@larsrh Thanks! Can you update tests as well like you did for SpreadProperty?", + "createdAt": "2020-03-16T14:31:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU5OTU2OTExMA==", + "author": { + "login": "larsrh", + "__typename": "User" + }, + "body": "There were no tests for that, apparently (lint and test ran locally just fine, and apparently on Travis CI too)", + "createdAt": "2020-03-16T14:31:40Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/estree/estree-tests.ts", + "additions": 3, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/estree/index.d.ts", + "additions": 2, + "deletions": 2, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzQ1ODYyMzY=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW4yNTYxMzUy", + "name": "Check and Merge", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/43136/derived.json b/packages/mergebot/src/_tests/fixtures/43136/derived.json new file mode 100644 index 0000000000..a86091b894 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43136/derived.json @@ -0,0 +1,46 @@ +{ + "type": "info", + "now": "2020-03-19T19:14:42.000Z", + "pr_number": 43136, + "author": "larsrh", + "headCommitOid": "e6863537248bbfee8f0ef8c636bb00c25cf40b96", + "mergeBaseOid": "master", + "lastPushDate": "2020-03-16T14:26:42.000Z", + "lastActivityDate": "2020-03-16T14:31:40.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "estree", + "kind": "edit", + "files": [ + { + "path": "types/estree/estree-tests.ts", + "kind": "test" + }, + { + "path": "types/estree/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "RReverser" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [ + { + "type": "stale", + "reviewer": "RReverser", + "date": "2020-03-14T19:23:36.000Z", + "abbrOid": "37d784d" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/43136/mutations.json b/packages/mergebot/src/_tests/fixtures/43136/mutations.json new file mode 100644 index 0000000000..e30577f6ca --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43136/mutations.json @@ -0,0 +1,61 @@ +[ + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg4MzgyMzYy", + "body": "@larsrh 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* `estree` — [on npm](https://www.npmjs.com/package/estree), [on unpkg](https://unpkg.com/browse/estree@latest/)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=43136&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 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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwxNjA4NjM0NDg0" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0Mzg4MzgyMzYy" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw5MDUzMzQwOTU=", + "MDU6TGFiZWw2ODQzMjE1NzY=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0Mzg4MzgyMzYy" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0Mzg4MzgyMzYy", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg4MzgyMzYy", + "body": "🔔 @RReverser — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43136/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" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg4MzgyMzYy", + "body": "@RReverser Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/43136/result.json b/packages/mergebot/src/_tests/fixtures/43136/result.json new file mode 100644 index 0000000000..06ddbee86c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43136/result.json @@ -0,0 +1,23 @@ +{ + "projectColumn": "Needs Maintainer Review", + "labels": [ + "Critical package" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@larsrh 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* `estree` — [on npm](https://www.npmjs.com/package/estree), [on unpkg](https://unpkg.com/browse/estree@latest/)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=43136&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 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", + "status": "🔔 @RReverser — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43136/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." + }, + { + "tag": "stale-ping-f5a3ad-37d784d", + "status": "@RReverser Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/43144/_downloads.json b/packages/mergebot/src/_tests/fixtures/43144/_downloads.json new file mode 100644 index 0000000000..5133421222 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43144/_downloads.json @@ -0,0 +1,3 @@ +{ + "mailcheck": 10455 +} diff --git a/packages/mergebot/src/_tests/fixtures/43144/_files.json b/packages/mergebot/src/_tests/fixtures/43144/_files.json new file mode 100644 index 0000000000..2d8b253b6d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43144/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/mailcheck/index.d.ts": "// Type definitions for Mailcheck 1.1\n// Project: https://github.com/mailcheck/mailcheck\n// Definitions by: Paulo Cesar \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.8\n\n/// \n\ndeclare var Mailcheck: MailcheckModule.Static;\n\ndeclare namespace MailcheckModule {\n\n export interface IDistanceFunction {\n (s1: string, s2: string): number;\n }\n\n export interface ISuggestFunction {\n (email: string, domains?: string[], topLevelDomains?: string[], distanceFunction?: IDistanceFunction):void;\n }\n\n export interface IJQuerySuggested {\n (element: JQuery, suggested: ISuggestion): void;\n }\n\n export interface IJQueryEmpty {\n (element: JQuery): void;\n }\n\n export interface IEmpty {\n (): void;\n }\n\n export interface ISuggested {\n (suggested: ISuggestion): void;\n }\n\n export interface ISplitEmail {\n topLevelDomain?: string;\n domain?: string;\n address?: string;\n }\n\n export interface ISuggestion {\n address: string;\n domain: string;\n full: string;\n }\n\n export interface IAsynchronousOptions {\n email: string;\n domains?: string[];\n secondLevelDomains?: string[];\n topLevelDomains?: string[];\n distanceFunction?: IDistanceFunction;\n suggested: ISuggested | IJQuerySuggested;\n empty?: IEmpty | IJQueryEmpty;\n }\n export interface ISynchronousOptions {\n email: string;\n domains?: string[];\n secondLevelDomains?: string[];\n topLevelDomains?: string[];\n distanceFunction?: IDistanceFunction;\n\n }\n export interface Static {\n defaultDomains: string[];\n defaultSecondLevelDomains: string[];\n defaultTopLevelDomains: string[];\n domainThreshold: number;\n topLevelThreshold: number;\n run(opts: IAsynchronousOptions):void;\n run(opts: ISynchronousOptions):ISuggestion | undefined;\n suggest: ISuggestFunction;\n encodeEmail(email: string): string;\n splitEmail(email: string): ISplitEmail;\n sift3Distance(s1: string, s2: string): number;\n findClosestDomain(domain: string, domains: string[], distanceFunction?: IDistanceFunction, threshold?: number): boolean|string;\n }\n\n}\n\ninterface JQuery {\n mailcheck(opts: MailcheckModule.IAsynchronousOptions):void;\n mailcheck(opts: MailcheckModule.ISynchronousOptions):MailcheckModule.ISuggestion | void;\n}\n\ndeclare module 'mailcheck' {\n export = Mailcheck;\n}\n", + "f1f5c4bb0ae553f56766882f6458d2e22baa87c7:types/mailcheck/index.d.ts": "// Type definitions for Mailcheck 1.1\n// Project: https://github.com/mailcheck/mailcheck\n// Definitions by: Paulo Cesar \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.8\n\n/// \n\ndeclare var Mailcheck: MailcheckModule.Static;\n\ndeclare namespace MailcheckModule {\n\n export interface IDistanceFunction {\n (s1: string, s2: string): number;\n }\n\n export interface ISuggestFunction {\n (email: string, domains?: string[], topLevelDomains?: string[], distanceFunction?: IDistanceFunction):void;\n }\n\n export interface IJQuerySuggested {\n (element: JQuery, suggested: ISuggestion): void;\n }\n\n export interface IJQueryEmpty {\n (element: JQuery): void;\n }\n\n export interface IEmpty {\n (): void;\n }\n\n export interface ISuggested {\n (suggested: ISuggestion): void;\n }\n\n export interface ISplitEmail {\n topLevelDomain?: string;\n domain?: string;\n address?: string;\n }\n\n export interface ISuggestion {\n address: string;\n domain: string;\n full: string;\n }\n\n export interface IAsynchronousOptions {\n email: string;\n domains?: string[];\n secondLevelDomains?: string[];\n topLevelDomains?: string[];\n distanceFunction?: IDistanceFunction;\n suggested: ISuggested | IJQuerySuggested;\n empty?: IEmpty | IJQueryEmpty;\n }\n export interface ISynchronousOptions {\n email: string;\n domains?: string[];\n secondLevelDomains?: string[];\n topLevelDomains?: string[];\n distanceFunction?: IDistanceFunction;\n\n }\n export interface Static {\n defaultDomains: string[];\n defaultSecondLevelDomains: string[];\n defaultTopLevelDomains: string[];\n domainThreshold: number;\n topLevelThreshold: number;\n run(opts: IAsynchronousOptions):void;\n run(opts: ISynchronousOptions):ISuggestion | undefined;\n suggest: ISuggestFunction;\n encodeEmail(email: string): string;\n splitEmail(email: string): ISplitEmail;\n sift3Distance(s1: string, s2: string): number;\n findClosestDomain(domain: string, domains: string[], distanceFunction?: IDistanceFunction, threshold?: number): boolean|string;\n }\n\n}\n\ninterface JQuery {\n mailcheck(opts: MailcheckModule.IAsynchronousOptions):void;\n mailcheck(opts: MailcheckModule.ISynchronousOptions):MailcheckModule.ISuggestion | void;\n}\n\ndeclare module 'mailcheck' {\n export = Mailcheck;\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/43144/_notes.txt b/packages/mergebot/src/_tests/fixtures/43144/_notes.txt new file mode 100644 index 0000000000..1ec7f405db --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43144/_notes.txt @@ -0,0 +1 @@ +This is a PR which is ready to go diff --git a/packages/mergebot/src/_tests/fixtures/43144/_response.json b/packages/mergebot/src/_tests/fixtures/43144/_response.json new file mode 100644 index 0000000000..f528a23e1e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43144/_response.json @@ -0,0 +1,277 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0Mzg4NDkxOTI2", + "title": "Mailcheck: Add support for Synchronous mode", + "lastEditedAt": "2020-03-15T00:08:41Z", + "author": { + "login": "jeffreymeng", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-03-15T00:08:32Z", + "labels": { + "nodes": [ + { + "name": "Merge:Express", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "mergeable": "MERGEABLE", + "number": 43144, + "state": "OPEN", + "headRefOid": "f1f5c4bb0ae553f56766882f6458d2e22baa87c7", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "016519e482209abe1df81c91023bb582ccb1b1bd", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "fc3968c884f46212f5a6f34f15f92059b59409d1", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "f1f5c4bb0ae553f56766882f6458d2e22baa87c7", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestReview", + "author": { + "login": "pocesar", + "__typename": "User" + }, + "state": "APPROVED" + }, + { + "__typename": "IssueComment" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "pocesar", + "__typename": "User" + }, + "commit": { + "oid": "f1f5c4bb0ae553f56766882f6458d2e22baa87c7", + "abbreviatedOid": "f1f5c4b", + "__typename": "Commit" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-03-15T01:29:09Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43144#pullrequestreview-374764862", + "__typename": "PullRequestReview", + "comments": { + "nodes": [] + } + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-03-15T00:01:59Z", + "committedDate": "2020-03-15T00:01:59Z", + "pushedDate": "2020-03-15T00:03:46Z", + "abbreviatedOid": "016519e", + "oid": "016519e482209abe1df81c91023bb582ccb1b1bd", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "FAILURE", + "contexts": [ + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/662562053?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-03-15T00:06:50Z", + "committedDate": "2020-03-15T00:06:50Z", + "pushedDate": "2020-03-15T00:07:02Z", + "abbreviatedOid": "fc3968c", + "oid": "fc3968c884f46212f5a6f34f15f92059b59409d1", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/662562615?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-03-15T00:11:35Z", + "committedDate": "2020-03-15T00:11:35Z", + "pushedDate": "2020-03-15T00:11:48Z", + "abbreviatedOid": "f1f5c4b", + "oid": "f1f5c4bb0ae553f56766882f6458d2e22baa87c7", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 2, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDU5OTE1MTM2Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@jeffreymeng Thank you for submitting this PR!\n\n🔔 @pocesar — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43144/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\nIf no reviewer appears after a week, a DefinitelyTyped maintainer will review the PR instead.\r\n", + "createdAt": "2020-03-15T00:22:28Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU5OTE1ODg5MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\nA definition owner has approved this PR ⭐️. A maintainer will merge this PR shortly. If it shouldn't be merged yet, please leave a comment saying so and we'll wait. Thank you for your contribution to DefinitelyTyped!\r\n", + "createdAt": "2020-03-15T02:22:34Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/mailcheck/index.d.ts", + "additions": 14, + "deletions": 5, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/mailcheck/mailcheck-tests.ts", + "additions": 14, + "deletions": 2, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzQ1OTI2MjI=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW4yNTYxMzUy", + "name": "Check and Merge", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/43144/derived.json b/packages/mergebot/src/_tests/fixtures/43144/derived.json new file mode 100644 index 0000000000..27920c12cc --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43144/derived.json @@ -0,0 +1,46 @@ +{ + "type": "info", + "now": "2020-03-19T04:59:48.000Z", + "pr_number": 43144, + "author": "jeffreymeng", + "headCommitOid": "f1f5c4bb0ae553f56766882f6458d2e22baa87c7", + "mergeBaseOid": "master", + "lastPushDate": "2020-03-15T00:11:48.000Z", + "lastActivityDate": "2020-03-15T01:29:09.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "mailcheck", + "kind": "edit", + "files": [ + { + "path": "types/mailcheck/index.d.ts", + "kind": "definition" + }, + { + "path": "types/mailcheck/mailcheck-tests.ts", + "kind": "test" + } + ], + "owners": [ + "pocesar" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "pocesar", + "date": "2020-03-15T01:29:09.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/43144/mutations.json b/packages/mergebot/src/_tests/fixtures/43144/mutations.json new file mode 100644 index 0000000000..79693a2e81 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43144/mutations.json @@ -0,0 +1,40 @@ +[ + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg4NDkxOTI2", + "body": "@jeffreymeng Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `mailcheck` — [on npm](https://www.npmjs.com/package/mailcheck), [on unpkg](https://unpkg.com/browse/mailcheck@latest/)\n - owner-approval: @pocesar\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=43144&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, DT maintainers or others\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": "MDExOlB1bGxSZXF1ZXN0Mzg4NDkxOTI2" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0Mzg4NDkxOTI2", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg4NDkxOTI2", + "body": "@jeffreymeng: Everything looks good here. I am ready to merge this PR (at f1f5c4b) 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(@pocesar: you can do this too.)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/43144/result.json b/packages/mergebot/src/_tests/fixtures/43144/result.json new file mode 100644 index 0000000000..bb6e593408 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43144/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Owner Approved", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@jeffreymeng Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `mailcheck` — [on npm](https://www.npmjs.com/package/mailcheck), [on unpkg](https://unpkg.com/browse/mailcheck@latest/)\n - owner-approval: @pocesar\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=43144&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, DT maintainers or others\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": "@jeffreymeng: Everything looks good here. I am ready to merge this PR (at f1f5c4b) 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(@pocesar: you can do this too.)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/43151/_downloads.json b/packages/mergebot/src/_tests/fixtures/43151/_downloads.json new file mode 100644 index 0000000000..1d53b93cff --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43151/_downloads.json @@ -0,0 +1,3 @@ +{ + "gaze": 197887 +} diff --git a/packages/mergebot/src/_tests/fixtures/43151/_files.json b/packages/mergebot/src/_tests/fixtures/43151/_files.json new file mode 100644 index 0000000000..8b742a5fb9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43151/_files.json @@ -0,0 +1,3 @@ +{ + "bb6d3150b485cd203d265e06ca910262256e523e:types/gaze/index.d.ts": "// Type definitions for gaze 1.1\n// Project: https://github.com/shama/gaze\n// Definitions by: Adam Zerella \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// Minimum TypeScript Version: 3.1\n\ntype Mode = 'auto' | 'watch' | 'poll';\n\ninterface Options {\n /**\n * Interval to pass to fs.watchFile.\n */\n interval?: number;" +} diff --git a/packages/mergebot/src/_tests/fixtures/43151/_notes.txt b/packages/mergebot/src/_tests/fixtures/43151/_notes.txt new file mode 100644 index 0000000000..7f169f14cf --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43151/_notes.txt @@ -0,0 +1 @@ +This PR is a new package, which required a DT maintainer to validate diff --git a/packages/mergebot/src/_tests/fixtures/43151/_response.json b/packages/mergebot/src/_tests/fixtures/43151/_response.json new file mode 100644 index 0000000000..4dec8b182a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43151/_response.json @@ -0,0 +1,221 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0Mzg4Njk0NDU5", + "title": "[gaze] Add typing for gaze", + "lastEditedAt": "2020-03-15T12:56:20Z", + "author": { + "login": "adamzerella", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-03-15T12:51:25Z", + "labels": { + "nodes": [ + { + "name": "Awaiting reviewer feedback", + "__typename": "Label" + }, + { + "name": "New Definition", + "__typename": "Label" + }, + { + "name": "Other Approved", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "mergeable": "MERGEABLE", + "number": 43151, + "state": "OPEN", + "headRefOid": "bb6d3150b485cd203d265e06ca910262256e523e", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "bb6d3150b485cd203d265e06ca910262256e523e", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/662694783?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-03-15T12:49:20Z", + "committedDate": "2020-03-15T12:49:20Z", + "pushedDate": "2020-03-15T12:50:20Z", + "abbreviatedOid": "bb6d315", + "oid": "bb6d3150b485cd203d265e06ca910262256e523e", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDU5OTIwNjY0MA==", + "author": { + "login": "adamzerella", + "__typename": "User" + }, + "body": "@shama I'm looking to add some DT definitions here if that's ok ?", + "createdAt": "2020-03-15T12:54:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU5OTIwOTg2Mw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@adamzerella Thank you for submitting this PR!\n \nBecause this is a new definition, a DefinitelyTyped maintainer will be reviewing this PR in the next few days once the Travis CI build passes.\n \nIn the meantime, if the build fails or a merge conflict occurs, I'll let you know. Have a nice day!\r\n", + "createdAt": "2020-03-15T13:22:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU5OTI0NDkwNA==", + "author": { + "login": "shama", + "__typename": "User" + }, + "body": "@adamzerella 👍 Thanks!", + "createdAt": "2020-03-15T18:11:57Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/gaze/gaze-tests.ts", + "additions": 29, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/gaze/index.d.ts", + "additions": 75, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/gaze/tsconfig.json", + "additions": 25, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/gaze/tslint.json", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzQ2MDI3MDA=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW4yNTYxMzU2", + "name": "Review", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/43151/derived.json b/packages/mergebot/src/_tests/fixtures/43151/derived.json new file mode 100644 index 0000000000..204eaab8cc --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43151/derived.json @@ -0,0 +1,48 @@ +{ + "type": "info", + "now": "2020-03-19T17:38:20.000Z", + "pr_number": 43151, + "author": "adamzerella", + "headCommitOid": "bb6d3150b485cd203d265e06ca910262256e523e", + "mergeBaseOid": "master", + "lastPushDate": "2020-03-15T12:50:20.000Z", + "lastActivityDate": "2020-03-15T18:11:57.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "gaze", + "kind": "add", + "files": [ + { + "path": "types/gaze/gaze-tests.ts", + "kind": "test" + }, + { + "path": "types/gaze/index.d.ts", + "kind": "definition" + }, + { + "path": "types/gaze/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/gaze/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [ + "adamzerella" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/43151/mutations.json b/packages/mergebot/src/_tests/fixtures/43151/mutations.json new file mode 100644 index 0000000000..22120fc6c2 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43151/mutations.json @@ -0,0 +1,51 @@ +[ + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg4Njk0NDU5", + "body": "@adamzerella Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `gaze` (*new!*) — [on npm](https://www.npmjs.com/package/gaze), [on unpkg](https://unpkg.com/browse/gaze@latest/)\n - 1 added owner: ✎@adamzerella\n - Config files to check:\n - [`gaze/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43151/files/bb6d3150b485cd203d265e06ca910262256e523e#diff-a0512397f95f6b7994f9713c8ceb6144061e7cf0d81618a2a9a90cceda075f80): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=43151&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 when there are new packages added\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0Mzg4Njk0NDU5" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw1ODYxNzcwNjM=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0Mzg4Njk0NDU5" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0Mzg4Njk0NDU5", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg4Njk0NDU5", + "body": "🔔 @adamzerella — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43151/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/43151/result.json b/packages/mergebot/src/_tests/fixtures/43151/result.json new file mode 100644 index 0000000000..71ccf45f04 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43151/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "New Definition", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@adamzerella Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `gaze` (*new!*) — [on npm](https://www.npmjs.com/package/gaze), [on unpkg](https://unpkg.com/browse/gaze@latest/)\n - 1 added owner: ✎@adamzerella\n - Config files to check:\n - [`gaze/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43151/files/bb6d3150b485cd203d265e06ca910262256e523e#diff-a0512397f95f6b7994f9713c8ceb6144061e7cf0d81618a2a9a90cceda075f80): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=43151&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 when there are new packages added\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", + "status": "🔔 @adamzerella — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43151/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/43160/_downloads.json b/packages/mergebot/src/_tests/fixtures/43160/_downloads.json new file mode 100644 index 0000000000..a692cfca22 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43160/_downloads.json @@ -0,0 +1,3 @@ +{ + "dagre": 119291 +} diff --git a/packages/mergebot/src/_tests/fixtures/43160/_files.json b/packages/mergebot/src/_tests/fixtures/43160/_files.json new file mode 100644 index 0000000000..9d35f12a43 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43160/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/dagre/index.d.ts": "// Type definitions for dagre 0.7\n// Project: https://github.com/dagrejs/dagre\n// Definitions by: Qinfeng Chen \n// Lisa Vallfors \n// Pete Vilter \n// David Newell \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.2\n\nexport as namespace dagre;\n", + "6d5d2a85b41d287f97c9d331a9ff6a9824e2f1ff:types/dagre/index.d.ts": "// Type definitions for dagre 0.7\n// Project: https://github.com/dagrejs/dagre\n// Definitions by: Qinfeng Chen \n// Lisa Vallfors \n// Pete Vilter \n// David Newell \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.2\n\nexport as namespace dagre;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/43160/_notes.txt b/packages/mergebot/src/_tests/fixtures/43160/_notes.txt new file mode 100644 index 0000000000..dbf5c195d8 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43160/_notes.txt @@ -0,0 +1 @@ +This PR is red, but got an accept - the output is wrong here because the PR was accepted - only CI failed diff --git a/packages/mergebot/src/_tests/fixtures/43160/_response.json b/packages/mergebot/src/_tests/fixtures/43160/_response.json new file mode 100644 index 0000000000..a6ceba7bb1 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43160/_response.json @@ -0,0 +1,214 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0Mzg5MDYwOTQ4", + "title": "Make graph generic", + "lastEditedAt": null, + "author": { + "login": "rikkertkoppes", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-03-16T08:15:54Z", + "labels": { + "nodes": [ + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "The Travis CI build failed", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "mergeable": "MERGEABLE", + "number": 43160, + "state": "OPEN", + "headRefOid": "6d5d2a85b41d287f97c9d331a9ff6a9824e2f1ff", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "6d5d2a85b41d287f97c9d331a9ff6a9824e2f1ff", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestReview", + "author": { + "login": "rustedgrail", + "__typename": "User" + }, + "state": "APPROVED" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "rustedgrail", + "__typename": "User" + }, + "commit": { + "oid": "6d5d2a85b41d287f97c9d331a9ff6a9824e2f1ff", + "abbreviatedOid": "6d5d2a8", + "__typename": "Commit" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-03-17T14:33:47Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43160#pullrequestreview-376092132", + "__typename": "PullRequestReview", + "comments": { + "nodes": [] + } + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "FAILURE", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "FAILURE", + "contexts": [ + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/662962786?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-03-16T08:13:52Z", + "committedDate": "2020-03-16T08:13:52Z", + "pushedDate": "2020-03-16T08:14:50Z", + "abbreviatedOid": "6d5d2a8", + "oid": "6d5d2a85b41d287f97c9d331a9ff6a9824e2f1ff", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 2, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDU5OTQwMzQzMA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@rikkertkoppes Thank you for submitting this PR!\n\n🔔 @qinfchen @Frankrike @vilterp @rustedgrail — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43160/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\nIf no reviewer appears after a week, a DefinitelyTyped maintainer will review the PR instead.\r\n", + "createdAt": "2020-03-16T08:22:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU5OTQwMzQzNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@rikkertkoppes The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/662962786?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\r\n", + "createdAt": "2020-03-16T08:22:31Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/dagre/index.d.ts", + "additions": 8, + "deletions": 9, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 1 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzQ2MzEzMzI=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW4yNTYxMzU5", + "name": "Needs Author Attention", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/43160/derived.json b/packages/mergebot/src/_tests/fixtures/43160/derived.json new file mode 100644 index 0000000000..97a6d2a776 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43160/derived.json @@ -0,0 +1,46 @@ +{ + "type": "info", + "now": "2020-03-19T13:02:50.000Z", + "pr_number": 43160, + "author": "rikkertkoppes", + "headCommitOid": "6d5d2a85b41d287f97c9d331a9ff6a9824e2f1ff", + "mergeBaseOid": "master", + "lastPushDate": "2020-03-16T08:14:50.000Z", + "lastActivityDate": "2020-03-17T14:33:47.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "dagre", + "kind": "edit", + "files": [ + { + "path": "types/dagre/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "qinfchen", + "Frankrike", + "vilterp", + "rustedgrail" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "rustedgrail", + "date": "2020-03-17T14:33:47.000Z", + "isMaintainer": false + } + ], + "ciResult": "fail", + "ciUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306" +} diff --git a/packages/mergebot/src/_tests/fixtures/43160/mutations.json b/packages/mergebot/src/_tests/fixtures/43160/mutations.json new file mode 100644 index 0000000000..a61a29aad3 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43160/mutations.json @@ -0,0 +1,49 @@ +[ + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg5MDYwOTQ4", + "body": "@rikkertkoppes 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* `dagre` — [on npm](https://www.npmjs.com/package/dagre), [on unpkg](https://unpkg.com/browse/dagre@latest/)\n - owner-approval: @rustedgrail\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=43160&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\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----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMDk2NzQzNjAw" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0Mzg5MDYwOTQ4" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0Mzg5MDYwOTQ4", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg5MDYwOTQ4", + "body": "Hey @rikkertkoppes,\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" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg5MDYwOTQ4", + "body": "@rikkertkoppes The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306).\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/43160/result.json b/packages/mergebot/src/_tests/fixtures/43160/result.json new file mode 100644 index 0000000000..cf4968f3c9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43160/result.json @@ -0,0 +1,25 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "The CI failed", + "Owner Approved", + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @rikkertkoppes,\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": "@rikkertkoppes 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* `dagre` — [on npm](https://www.npmjs.com/package/dagre), [on unpkg](https://unpkg.com/browse/dagre@latest/)\n - owner-approval: @rustedgrail\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=43160&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\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----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "gh-actions-complaint-6d5d2a8", + "status": "@rikkertkoppes The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306).\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.**" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/43175/_downloads.json b/packages/mergebot/src/_tests/fixtures/43175/_downloads.json new file mode 100644 index 0000000000..062b9757fd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43175/_downloads.json @@ -0,0 +1,3 @@ +{ + "chrome": 298025 +} diff --git a/packages/mergebot/src/_tests/fixtures/43175/_files.json b/packages/mergebot/src/_tests/fixtures/43175/_files.json new file mode 100644 index 0000000000..0f7d81103e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43175/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/chrome/index.d.ts": "// Type definitions for Chrome extension development\n// Project: http://developer.chrome.com/extensions/\n// Definitions by: Matthew Kimber \n// otiai10 \n// couven92 \n// RReverser \n// sreimer15 \n// MatCarlson \n// ekinsol \n// Thierry Régagnon \n// Brian Wilson \n// Sebastiaan Pasma \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.4\n\n/// \n\n", + "b4b3bc8a617e2e0810d60e389415818d903e6362:types/chrome/index.d.ts": "// Type definitions for Chrome extension development\n// Project: http://developer.chrome.com/extensions/\n// Definitions by: Matthew Kimber \n// otiai10 \n// couven92 \n// RReverser \n// sreimer15 \n// MatCarlson \n// ekinsol \n// Thierry Régagnon \n// Brian Wilson \n// Sebastiaan Pasma \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.4\n\n/// \n\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/43175/_notes.txt b/packages/mergebot/src/_tests/fixtures/43175/_notes.txt new file mode 100644 index 0000000000..dae4499e35 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43175/_notes.txt @@ -0,0 +1 @@ +This is a PR which is mostly ready, but requires a human to say yes diff --git a/packages/mergebot/src/_tests/fixtures/43175/_response.json b/packages/mergebot/src/_tests/fixtures/43175/_response.json new file mode 100644 index 0000000000..a9b7cb1841 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43175/_response.json @@ -0,0 +1,277 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0Mzg5NzQ2Mjcx", + "title": "Add function getAutoLockDelay to chrome.idle", + "lastEditedAt": null, + "author": { + "login": "ankhler", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-03-17T10:20:28Z", + "labels": { + "nodes": [ + { + "name": "Awaiting reviewer feedback", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "mergeable": "MERGEABLE", + "number": 43175, + "state": "OPEN", + "headRefOid": "b4b3bc8a617e2e0810d60e389415818d903e6362", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "767a7507319a934b05f285f80b780abaa5273537", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestReview", + "author": { + "login": "couven92", + "__typename": "User" + }, + "state": "COMMENTED" + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "b4b3bc8a617e2e0810d60e389415818d903e6362", + "__typename": "Commit" + } + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "couven92", + "__typename": "User" + }, + "commit": { + "oid": "767a7507319a934b05f285f80b780abaa5273537", + "abbreviatedOid": "767a750", + "__typename": "Commit" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-03-17T13:29:17Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43175#pullrequestreview-376024679", + "__typename": "PullRequestReview", + "comments": { + "nodes": [] + } + }, + { + "author": { + "login": "ankhler", + "__typename": "User" + }, + "commit": { + "oid": "b4b3bc8a617e2e0810d60e389415818d903e6362", + "abbreviatedOid": "b4b3bc8", + "__typename": "Commit" + }, + "authorAssociation": "NONE", + "state": "COMMENTED", + "submittedAt": "2020-03-17T13:54:18Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43175#pullrequestreview-376054940", + "__typename": "PullRequestReview", + "comments": { + "nodes": [] + } + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/767a7507319a934b05f285f80b780abaa5273537/checks?check_suite_id=526679606", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/767a7507319a934b05f285f80b780abaa5273537/checks?check_suite_id=526679606", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/663437102?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-03-17T10:17:24Z", + "committedDate": "2020-03-17T10:17:24Z", + "pushedDate": "2020-03-17T10:17:28Z", + "abbreviatedOid": "767a750", + "oid": "767a7507319a934b05f285f80b780abaa5273537", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/b4b3bc8a617e2e0810d60e389415818d903e6362/checks?check_suite_id=527143042", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/b4b3bc8a617e2e0810d60e389415818d903e6362/checks?check_suite_id=527143042", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/663511348?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-03-17T13:51:00Z", + "committedDate": "2020-03-17T13:51:00Z", + "pushedDate": "2020-03-17T13:51:37Z", + "abbreviatedOid": "b4b3bc8", + "oid": "b4b3bc8a617e2e0810d60e389415818d903e6362", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 1, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDU5OTk5MTc2Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@ankhler Thank you for submitting this PR!\n\n🔔 @matthewkimber @otiai10 @couven92 @rreverser @sreimer15 @MatCarlson @ekinsol @tregagnon @echoabstract @spasma — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43175/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\nIf no reviewer appears after a week, a DefinitelyTyped maintainer will review the PR instead.\r\n", + "createdAt": "2020-03-17T10:22:32Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/chrome/index.d.ts", + "additions": 7, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 1 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzQ3MDIzNTk=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW4yNTYxMzU3", + "name": "Waiting for Reviewers", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/43175/derived.json b/packages/mergebot/src/_tests/fixtures/43175/derived.json new file mode 100644 index 0000000000..1247f54728 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43175/derived.json @@ -0,0 +1,51 @@ +{ + "type": "info", + "now": "2020-03-19T18:39:37.000Z", + "pr_number": 43175, + "author": "ankhler", + "headCommitOid": "b4b3bc8a617e2e0810d60e389415818d903e6362", + "mergeBaseOid": "master", + "lastPushDate": "2020-03-17T13:51:37.000Z", + "lastActivityDate": "2020-03-17T13:51:37.000Z", + "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", + "couven92", + "rreverser", + "sreimer15", + "MatCarlson", + "ekinsol", + "tregagnon", + "echoabstract", + "spasma" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "stale", + "reviewer": "couven92", + "date": "2020-03-17T13:29:17.000Z", + "abbrOid": "767a750" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/43175/mutations.json b/packages/mergebot/src/_tests/fixtures/43175/mutations.json new file mode 100644 index 0000000000..798058f4be --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43175/mutations.json @@ -0,0 +1,47 @@ +[ + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg5NzQ2Mjcx", + "body": "@ankhler 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\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=43175&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----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0Mzg5NzQ2Mjcx", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg5NzQ2Mjcx", + "body": "Hey @ankhler,\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" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg5NzQ2Mjcx", + "body": "🔔 @matthewkimber @otiai10 @couven92 @rreverser @sreimer15 @MatCarlson @ekinsol @tregagnon @echoabstract @spasma — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43175/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" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0Mzg5NzQ2Mjcx", + "body": "@couven92 Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/43175/result.json b/packages/mergebot/src/_tests/fixtures/43175/result.json new file mode 100644 index 0000000000..af077507d7 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43175/result.json @@ -0,0 +1,28 @@ +{ + "projectColumn": "Needs Maintainer Review", + "labels": [ + "Popular package", + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @ankhler,\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": "@ankhler 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\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=43175&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----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @matthewkimber @otiai10 @couven92 @rreverser @sreimer15 @MatCarlson @ekinsol @tregagnon @echoabstract @spasma — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43175/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." + }, + { + "tag": "stale-ping-bbb366-767a750", + "status": "@couven92 Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/43235/_downloads.json b/packages/mergebot/src/_tests/fixtures/43235/_downloads.json new file mode 100644 index 0000000000..13f6197d70 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43235/_downloads.json @@ -0,0 +1,3 @@ +{ + "arcgis-js-api": 30242 +} diff --git a/packages/mergebot/src/_tests/fixtures/43235/_files.json b/packages/mergebot/src/_tests/fixtures/43235/_files.json new file mode 100644 index 0000000000..2bd82369b1 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43235/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/arcgis-js-api/index.d.ts": "// Type definitions for ArcGIS API for JavaScript 4.15\n// Project: http://js.arcgis.com\n// Definitions by: Esri \n// Bjorn Svensson \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.7\n\ntype HashMap = Record;\ntype IPromise = Promise;\n\ninterface IHandle {\n remove(): void;\n}\n\ndeclare namespace __esri {\n export class Accessor {\n constructor(obj?: any);\n\n destroyed: boolean;\n initialized: boolean;\n declaredClass: string;\n destroy(): void;\n\n get(propertyName: string): T;\n get(propertyName: string): any;\n set(propertyName: string, value: T): this;\n set(props: HashMap): this;\n watch(path: string | string[], callback: WatchCallback, sync?: boolean): WatchHandle;\n\n protected notifyChange(propertyName: string): void;\n protected _get(propertyName: string): any;\n protected _get(propertyName: string): T;\n protected _set(propertyName: string, value: T): this;\n }\n\n export interface AnonymousAccessor extends Object {\n get?(propertyName: string): T;\n get?(propertyName: string): any;\n set?(propertyName: string, value: T): this;\n set?(props: HashMap): this;\n watch?(path: string | string[], callback: WatchCallback, sync?: boolean): WatchHandle;\n }\n\n export type ItemCallback = (item: T, index: number) => void;\n\n export type ItemCompareCallback = (firstItem: T, secondItem: T) => number;\n\n export type ItemMapCallback = (item: T, index: number) => R;\n\n export type ItemReduceCallback = (previousValue: R, currentValue: T, index: number) => R;\n\n export type ItemTestCallback = (item: T, index: number) => boolean;\n\n export type CollectionAfterAddEventHandler = (event: CollectionAfterEvent) => void;\n\n export type CollectionAfterChangesEventHandler = (event: CollectionAfterChangesEvent) => void;\n\n export type CollectionAfterRemoveEventHandler = (event: CollectionAfterEvent) => void;\n\n export type CollectionChangeEventHandler = (event: CollectionChangeEvent) => void;\n\n export type CollectionBeforeAddEventHandler = (event: CollectionBeforeEvent) => void;\n\n export type CollectionBeforeChangesEventHandler = (event: CollectionBeforeEvent) => void;\n\n export type CollectionBeforeRemoveEventHandler = (event: CollectionBeforeEvent) => void;\n\n export interface CollectionAfterEvent {\n item: T;\n }\n\n export interface CollectionAfterChangesEvent {}\n\n export interface CollectionBeforeEvent {\n item: T;\n preventDefault(): void;\n }\n\n export interface CollectionChangeEvent {\n added: T[];\n removed: T[];\n moved: T[];\n }\n\n interface Collection extends Evented {\n on(type: \"after-add\", listener: CollectionAfterAddEventHandler): IHandle;\n on(type: \"after-changes\", listener: CollectionAfterChangesEventHandler): IHandle;\n on(type: \"after-remove\", listener: CollectionAfterRemoveEventHandler): IHandle;\n on(type: \"before-add\", listener: CollectionBeforeAddEventHandler): IHandle;\n on(type: \"before-changes\", listener: CollectionBeforeChangesEventHandler): IHandle;\n on(type: \"before-remove\", listener: CollectionBeforeRemoveEventHandler): IHandle;\n on(type: \"change\", listener: CollectionChangeEventHandler): IHandle;\n on(type: string, listener: (event: any) => void): IHandle;\n }\n\n type Constructor = new (...params: any[]) => T;\n\n interface Types {\n key: string | ((obj: any) => string);\n base: Constructor | Function;\n typeMap: HashMap>;\n }\n\n export class Collection extends Accessor {\n constructor(values?: any[] | Collection);\n\n readonly length: number;\n\n add(item: T, index?: number): void;\n addMany(items: T[] | Collection, index?: number): void;\n clone(): Collection;\n concat(value: T[] | Collection): Collection;\n every(callback: ItemTestCallback): boolean;\n filter(callback: ItemTestCallback): Collection;\n filter(callback: (item: T, index: number) => item is S): Collection;\n find(callback: ItemTestCallback): T;\n findIndex(callback: ItemTestCallback): number;\n flatten(callback: (item: T, index: number) => T[] | Collection): Collection;\n flatten(callback: (item: U, index: number) => U[] | Collection): Collection;\n forEach(callback: ItemCallback): void;\n getItemAt(index: number): T;\n includes(searchElement: T): boolean;\n indexOf(searchElement: T, fromIndex?: number): number;\n join(separator?: string): string;\n lastIndexOf(searchElement: T, fromIndex?: number): number;\n map(callback: ItemMapCallback): Collection;\n pop(): T;\n push(item: T): number;\n reduce(callback: ItemReduceCallback, initialValue?: R): R;\n reduceRight(callback: ItemReduceCallback, initialValue?: R): R;\n remove(item: T): void;\n removeAll(): void;\n removeAt(index: number): any;\n removeMany(items: T[] | Collection): T[];\n reorder(item: T, index: number): T;\n reverse(): Collection;\n shift(): T;\n slice(begin?: number, end?: number): Collection;\n some(callback: ItemCallback): boolean;\n sort(compareFunction?: ItemCompareCallback): void;\n splice(start: number, deleteCount: number, ...items: T[]): T[];\n toArray(): T[];\n unshift(...items: T[]): number;\n\n static isCollection(value: any | Collection): value is Collection;\n\n static ofType(\n type: Constructor | Types\n ): new (items?: (T[] | Collection) | { items?: T[] | Collection }) => Collection;\n }\n\n type CollectionProperties = T[] | Collection;\n\n type DateProperties = number | string | Date;\n\n export type BaseDynamicLayerLayerviewCreateErrorEventHandler = (\n event: BaseDynamicLayerLayerviewCreateErrorEvent\n ) => void;\n\n export type BaseDynamicLayerLayerviewCreateEventHandler = (event: BaseDynamicLayerLayerviewCreateEvent) => void;\n\n export type BaseDynamicLayerLayerviewDestroyEventHandler = (event: BaseDynamicLayerLayerviewDestroyEvent) => void;\n\n export type BaseElevationLayerLayerviewCreateErrorEventHandler = (\n event: BaseElevationLayerLayerviewCreateErrorEvent\n ) => void;\n\n export type BaseElevationLayerLayerviewCreateEventHandler = (event: BaseElevationLayerLayerviewCreateEvent) => void;\n\n export type BaseElevationLayerLayerviewDestroyEventHandler = (event: BaseElevationLayerLayerviewDestroyEvent) => void;\n\n export type BasemapLayerListTriggerActionEventHandler = (event: BasemapLayerListTriggerActionEvent) => void;\n\n export type BasemapToggleToggleEventHandler = (event: BasemapToggleToggleEvent) => void;\n\n export type BaseTileLayerLayerviewCreateErrorEventHandler = (event: BaseTileLayerLayerviewCreateErrorEvent) => void;\n\n export type BaseTileLayerLayerviewCreateEventHandler = (event: BaseTileLayerLayerviewCreateEvent) => void;\n\n export type BaseTileLayerLayerviewDestroyEventHandler = (event: BaseTileLayerLayerviewDestroyEvent) => void;\n\n export type BingMapsLayerLayerviewCreateErrorEventHandler = (event: BingMapsLayerLayerviewCreateErrorEvent) => void;\n\n export type BingMapsLayerLayerviewCreateEventHandler = (event: BingMapsLayerLayerviewCreateEvent) => void;\n\n export type BingMapsLayerLayerviewDestroyEventHandler = (event: BingMapsLayerLayerviewDestroyEvent) => void;\n\n export type BookmarksSelectBookmarkEventHandler = (event: BookmarksSelectBookmarkEvent) => void;\n\n export type BuildingSceneLayerLayerviewCreateErrorEventHandler = (\n event: BuildingSceneLayerLayerviewCreateErrorEvent\n ) => void;\n\n export type BuildingSceneLayerLayerviewCreateEventHandler = (event: BuildingSceneLayerLayerviewCreateEvent) => void;\n\n export type BuildingSceneLayerLayerviewDestroyEventHandler = (event: BuildingSceneLayerLayerviewDestroyEvent) => void;\n\n export type ClassedColorSliderMaxChangeEventHandler = (event: ClassedColorSliderMaxChangeEvent) => void;\n\n export type ClassedColorSliderMinChangeEventHandler = (event: ClassedColorSliderMinChangeEvent) => void;\n\n export type ClassedColorSliderThumbChangeEventHandler = (event: ClassedColorSliderThumbChangeEvent) => void;\n\n export type ClassedColorSliderThumbDragEventHandler = (event: ClassedColorSliderThumbDragEvent) => void;\n\n export type ClassedColorSliderViewModelMaxChangeEventHandler = (\n event: ClassedColorSliderViewModelMaxChangeEvent\n ) => void;\n\n export type ClassedColorSliderViewModelMinChangeEventHandler = (\n event: ClassedColorSliderViewModelMinChangeEvent\n ) => void;\n\n export type ClassedSizeSliderMaxChangeEventHandler = (event: ClassedSizeSliderMaxChangeEvent) => void;\n\n export type ClassedSizeSliderMinChangeEventHandler = (event: ClassedSizeSliderMinChangeEvent) => void;\n\n export type ClassedSizeSliderThumbChangeEventHandler = (event: ClassedSizeSliderThumbChangeEvent) => void;\n\n export type ClassedSizeSliderThumbDragEventHandler = (event: ClassedSizeSliderThumbDragEvent) => void;\n\n export type ClassedSizeSliderViewModelMaxChangeEventHandler = (\n event: ClassedSizeSliderViewModelMaxChangeEvent\n ) => void;\n\n export type ClassedSizeSliderViewModelMinChangeEventHandler = (\n event: ClassedSizeSliderViewModelMinChangeEvent\n ) => void;\n\n export type ColorSizeSliderMaxChangeEventHandler = (event: ColorSizeSliderMaxChangeEvent) => void;\n\n export type ColorSizeSliderMinChangeEventHandler = (event: ColorSizeSliderMinChangeEvent) => void;\n\n export type ColorSizeSliderThumbChangeEventHandler = (event: ColorSizeSliderThumbChangeEvent) => void;\n\n export type ColorSizeSliderThumbDragEventHandler = (event: ColorSizeSliderThumbDragEvent) => void;\n\n export type ColorSizeSliderViewModelMaxChangeEventHandler = (event: ColorSizeSliderViewModelMaxChangeEvent) => void;\n\n export type ColorSizeSliderViewModelMinChangeEventHandler = (event: ColorSizeSliderViewModelMinChangeEvent) => void;\n\n export type ColorSliderMaxChangeEventHandler = (event: ColorSliderMaxChangeEvent) => void;\n\n export type ColorSliderMinChangeEventHandle", + "933d8d81859cea3cb2df640bd099ef80bee3d691:types/arcgis-js-api/index.d.ts": "// Type definitions for ArcGIS API for JavaScript 4.15\n// Project: http://js.arcgis.com\n// Definitions by: Esri \n// Bjorn Svensson \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.7\n\ntype HashMap = Record;\ntype IPromise = Promise;\n\ninterface IHandle {\n remove(): void;\n}\n\ndeclare namespace __esri {\n export class Accessor {\n constructor(obj?: any);\n\n destroyed: boolean;\n initialized: boolean;\n declaredClass: string;\n destroy(): void;\n\n get(propertyName: string): T;\n get(propertyName: string): any;\n set(propertyName: string, value: T): this;\n set(props: HashMap): this;\n watch(path: string | string[], callback: WatchCallback, sync?: boolean): WatchHandle;\n\n protected notifyChange(propertyName: string): void;\n protected _get(propertyName: string): any;\n protected _get(propertyName: string): T;\n protected _set(propertyName: string, value: T): this;\n }\n\n export interface AnonymousAccessor extends Object {\n get?(propertyName: string): T;\n get?(propertyName: string): any;\n set?(propertyName: string, value: T): this;\n set?(props: HashMap): this;\n watch?(path: string | string[], callback: WatchCallback, sync?: boolean): WatchHandle;\n }\n\n export type ItemCallback = (item: T, index: number) => void;\n\n export type ItemCompareCallback = (firstItem: T, secondItem: T) => number;\n\n export type ItemMapCallback = (item: T, index: number) => R;\n\n export type ItemReduceCallback = (previousValue: R, currentValue: T, index: number) => R;\n\n export type ItemTestCallback = (item: T, index: number) => boolean;\n\n export type CollectionAfterAddEventHandler = (event: CollectionAfterEvent) => void;\n\n export type CollectionAfterChangesEventHandler = (event: CollectionAfterChangesEvent) => void;\n\n export type CollectionAfterRemoveEventHandler = (event: CollectionAfterEvent) => void;\n\n export type CollectionChangeEventHandler = (event: CollectionChangeEvent) => void;\n\n export type CollectionBeforeAddEventHandler = (event: CollectionBeforeEvent) => void;\n\n export type CollectionBeforeChangesEventHandler = (event: CollectionBeforeEvent) => void;\n\n export type CollectionBeforeRemoveEventHandler = (event: CollectionBeforeEvent) => void;\n\n export interface CollectionAfterEvent {\n item: T;\n }\n\n export interface CollectionAfterChangesEvent {}\n\n export interface CollectionBeforeEvent {\n item: T;\n preventDefault(): void;\n }\n\n export interface CollectionChangeEvent {\n added: T[];\n removed: T[];\n moved: T[];\n }\n\n interface Collection extends Evented {\n on(type: \"after-add\", listener: CollectionAfterAddEventHandler): IHandle;\n on(type: \"after-changes\", listener: CollectionAfterChangesEventHandler): IHandle;\n on(type: \"after-remove\", listener: CollectionAfterRemoveEventHandler): IHandle;\n on(type: \"before-add\", listener: CollectionBeforeAddEventHandler): IHandle;\n on(type: \"before-changes\", listener: CollectionBeforeChangesEventHandler): IHandle;\n on(type: \"before-remove\", listener: CollectionBeforeRemoveEventHandler): IHandle;\n on(type: \"change\", listener: CollectionChangeEventHandler): IHandle;\n on(type: string, listener: (event: any) => void): IHandle;\n }\n\n type Constructor = new (...params: any[]) => T;\n\n interface Types {\n key: string | ((obj: any) => string);\n base: Constructor | Function;\n typeMap: HashMap>;\n }\n\n export class Collection extends Accessor {\n constructor(values?: any[] | Collection);\n\n readonly length: number;\n\n add(item: T, index?: number): void;\n addMany(items: T[] | Collection, index?: number): void;\n clone(): Collection;\n concat(value: T[] | Collection): Collection;\n every(callback: ItemTestCallback): boolean;\n filter(callback: ItemTestCallback): Collection;\n filter(callback: (item: T, index: number) => item is S): Collection;\n find(callback: ItemTestCallback): T;\n findIndex(callback: ItemTestCallback): number;\n flatten(callback: (item: T, index: number) => T[] | Collection): Collection;\n flatten(callback: (item: U, index: number) => U[] | Collection): Collection;\n forEach(callback: ItemCallback): void;\n getItemAt(index: number): T;\n includes(searchElement: T): boolean;\n indexOf(searchElement: T, fromIndex?: number): number;\n join(separator?: string): string;\n lastIndexOf(searchElement: T, fromIndex?: number): number;\n map(callback: ItemMapCallback): Collection;\n pop(): T;\n push(item: T): number;\n reduce(callback: ItemReduceCallback, initialValue?: R): R;\n reduceRight(callback: ItemReduceCallback, initialValue?: R): R;\n remove(item: T): void;\n removeAll(): void;\n removeAt(index: number): any;\n removeMany(items: T[] | Collection): T[];\n reorder(item: T, index: number): T;\n reverse(): Collection;\n shift(): T;\n slice(begin?: number, end?: number): Collection;\n some(callback: ItemCallback): boolean;\n sort(compareFunction?: ItemCompareCallback): void;\n splice(start: number, deleteCount: number, ...items: T[]): T[];\n toArray(): T[];\n unshift(...items: T[]): number;\n\n static isCollection(value: any | Collection): value is Collection;\n\n static ofType(\n type: Constructor | Types\n ): new (items?: (T[] | Collection) | { items?: T[] | Collection }) => Collection;\n }\n\n type CollectionProperties = T[] | Collection;\n\n type DateProperties = number | string | Date;\n\n export type BaseDynamicLayerLayerviewCreateErrorEventHandler = (\n event: BaseDynamicLayerLayerviewCreateErrorEvent\n ) => void;\n\n export type BaseDynamicLayerLayerviewCreateEventHandler = (event: BaseDynamicLayerLayerviewCreateEvent) => void;\n\n export type BaseDynamicLayerLayerviewDestroyEventHandler = (event: BaseDynamicLayerLayerviewDestroyEvent) => void;\n\n export type BaseElevationLayerLayerviewCreateErrorEventHandler = (\n event: BaseElevationLayerLayerviewCreateErrorEvent\n ) => void;\n\n export type BaseElevationLayerLayerviewCreateEventHandler = (event: BaseElevationLayerLayerviewCreateEvent) => void;\n\n export type BaseElevationLayerLayerviewDestroyEventHandler = (event: BaseElevationLayerLayerviewDestroyEvent) => void;\n\n export type BasemapLayerListTriggerActionEventHandler = (event: BasemapLayerListTriggerActionEvent) => void;\n\n export type BasemapToggleToggleEventHandler = (event: BasemapToggleToggleEvent) => void;\n\n export type BaseTileLayerLayerviewCreateErrorEventHandler = (event: BaseTileLayerLayerviewCreateErrorEvent) => void;\n\n export type BaseTileLayerLayerviewCreateEventHandler = (event: BaseTileLayerLayerviewCreateEvent) => void;\n\n export type BaseTileLayerLayerviewDestroyEventHandler = (event: BaseTileLayerLayerviewDestroyEvent) => void;\n\n export type BingMapsLayerLayerviewCreateErrorEventHandler = (event: BingMapsLayerLayerviewCreateErrorEvent) => void;\n\n export type BingMapsLayerLayerviewCreateEventHandler = (event: BingMapsLayerLayerviewCreateEvent) => void;\n\n export type BingMapsLayerLayerviewDestroyEventHandler = (event: BingMapsLayerLayerviewDestroyEvent) => void;\n\n export type BookmarksSelectBookmarkEventHandler = (event: BookmarksSelectBookmarkEvent) => void;\n\n export type BuildingSceneLayerLayerviewCreateErrorEventHandler = (\n event: BuildingSceneLayerLayerviewCreateErrorEvent\n ) => void;\n\n export type BuildingSceneLayerLayerviewCreateEventHandler = (event: BuildingSceneLayerLayerviewCreateEvent) => void;\n\n export type BuildingSceneLayerLayerviewDestroyEventHandler = (event: BuildingSceneLayerLayerviewDestroyEvent) => void;\n\n export type ClassedColorSliderMaxChangeEventHandler = (event: ClassedColorSliderMaxChangeEvent) => void;\n\n export type ClassedColorSliderMinChangeEventHandler = (event: ClassedColorSliderMinChangeEvent) => void;\n\n export type ClassedColorSliderThumbChangeEventHandler = (event: ClassedColorSliderThumbChangeEvent) => void;\n\n export type ClassedColorSliderThumbDragEventHandler = (event: ClassedColorSliderThumbDragEvent) => void;\n\n export type ClassedColorSliderViewModelMaxChangeEventHandler = (\n event: ClassedColorSliderViewModelMaxChangeEvent\n ) => void;\n\n export type ClassedColorSliderViewModelMinChangeEventHandler = (\n event: ClassedColorSliderViewModelMinChangeEvent\n ) => void;\n\n export type ClassedSizeSliderMaxChangeEventHandler = (event: ClassedSizeSliderMaxChangeEvent) => void;\n\n export type ClassedSizeSliderMinChangeEventHandler = (event: ClassedSizeSliderMinChangeEvent) => void;\n\n export type ClassedSizeSliderThumbChangeEventHandler = (event: ClassedSizeSliderThumbChangeEvent) => void;\n\n export type ClassedSizeSliderThumbDragEventHandler = (event: ClassedSizeSliderThumbDragEvent) => void;\n\n export type ClassedSizeSliderViewModelMaxChangeEventHandler = (\n event: ClassedSizeSliderViewModelMaxChangeEvent\n ) => void;\n\n export type ClassedSizeSliderViewModelMinChangeEventHandler = (\n event: ClassedSizeSliderViewModelMinChangeEvent\n ) => void;\n\n export type ColorSizeSliderMaxChangeEventHandler = (event: ColorSizeSliderMaxChangeEvent) => void;\n\n export type ColorSizeSliderMinChangeEventHandler = (event: ColorSizeSliderMinChangeEvent) => void;\n\n export type ColorSizeSliderThumbChangeEventHandler = (event: ColorSizeSliderThumbChangeEvent) => void;\n\n export type ColorSizeSliderThumbDragEventHandler = (event: ColorSizeSliderThumbDragEvent) => void;\n\n export type ColorSizeSliderViewModelMaxChangeEventHandler = (event: ColorSizeSliderViewModelMaxChangeEvent) => void;\n\n export type ColorSizeSliderViewModelMinChangeEventHandler = (event: ColorSizeSliderViewModelMinChangeEvent) => void;\n\n export type ColorSliderMaxChangeEventHandler = (event: ColorSliderMaxChangeEvent) => void;\n\n export type ColorSliderMinChangeEventHandle" +} diff --git a/packages/mergebot/src/_tests/fixtures/43235/_notes.txt b/packages/mergebot/src/_tests/fixtures/43235/_notes.txt new file mode 100644 index 0000000000..777b237882 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43235/_notes.txt @@ -0,0 +1 @@ +Looks good, waiting on feedback from a reviewer diff --git a/packages/mergebot/src/_tests/fixtures/43235/_response.json b/packages/mergebot/src/_tests/fixtures/43235/_response.json new file mode 100644 index 0000000000..ab36c12cdd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43235/_response.json @@ -0,0 +1,139 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0MzkxMDM3MzMy", + "title": "refactor(arcgis-js-api): add optional return type for Collection#Filter and Collection#Flatten", + "lastEditedAt": "2020-03-19T14:33:55Z", + "author": { + "login": "Favna", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-03-19T14:30:03Z", + "labels": { + "nodes": [], + "__typename": "LabelConnection" + }, + "mergeable": "MERGEABLE", + "number": 43235, + "state": "OPEN", + "headRefOid": "933d8d81859cea3cb2df640bd099ef80bee3d691", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "933d8d81859cea3cb2df640bd099ef80bee3d691", + "__typename": "Commit" + } + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/933d8d81859cea3cb2df640bd099ef80bee3d691/checks?check_suite_id=532765826", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/933d8d81859cea3cb2df640bd099ef80bee3d691/checks?check_suite_id=532765826", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "borisyankov", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/664421407?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-03-19T14:24:12Z", + "committedDate": "2020-03-19T14:37:26Z", + "pushedDate": "2020-03-19T14:37:52Z", + "abbreviatedOid": "933d8d8", + "oid": "933d8d81859cea3cb2df640bd099ef80bee3d691", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 0, + "nodes": [], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/arcgis-js-api/arcgis-js-api-tests.ts", + "additions": 5, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/arcgis-js-api/index.d.ts", + "additions": 2, + "deletions": 2, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/43235/derived.json b/packages/mergebot/src/_tests/fixtures/43235/derived.json new file mode 100644 index 0000000000..5a2983d125 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43235/derived.json @@ -0,0 +1,40 @@ +{ + "type": "info", + "now": "2020-03-19T19:25:52.000Z", + "pr_number": 43235, + "author": "Favna", + "headCommitOid": "933d8d81859cea3cb2df640bd099ef80bee3d691", + "mergeBaseOid": "master", + "lastPushDate": "2020-03-19T14:37:52.000Z", + "lastActivityDate": "2020-03-19T14:37:52.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "arcgis-js-api", + "kind": "edit", + "files": [ + { + "path": "types/arcgis-js-api/arcgis-js-api-tests.ts", + "kind": "test" + }, + { + "path": "types/arcgis-js-api/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "Esri", + "bsvensson" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/43235/mutations.json b/packages/mergebot/src/_tests/fixtures/43235/mutations.json new file mode 100644 index 0000000000..9f8df491be --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43235/mutations.json @@ -0,0 +1,29 @@ +[ + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0MzkxMDM3MzMy", + "body": "@Favna Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `arcgis-js-api` — [on npm](https://www.npmjs.com/package/arcgis-js-api), [on unpkg](https://unpkg.com/browse/arcgis-js-api@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=43235&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, 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" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0MzkxMDM3MzMy", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0MzkxMDM3MzMy", + "body": "🔔 @Esri @bsvensson — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43235/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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/43235/result.json b/packages/mergebot/src/_tests/fixtures/43235/result.json new file mode 100644 index 0000000000..68adab8c45 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43235/result.json @@ -0,0 +1,17 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [], + "responseComments": [ + { + "tag": "welcome", + "status": "@Favna Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `arcgis-js-api` — [on npm](https://www.npmjs.com/package/arcgis-js-api), [on unpkg](https://unpkg.com/browse/arcgis-js-api@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=43235&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, 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 ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @Esri @bsvensson — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43235/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/43314/_downloads.json b/packages/mergebot/src/_tests/fixtures/43314/_downloads.json new file mode 100644 index 0000000000..be9b133e6f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43314/_downloads.json @@ -0,0 +1,3 @@ +{ + "carbon__icon-helpers": 1036 +} diff --git a/packages/mergebot/src/_tests/fixtures/43314/_files.json b/packages/mergebot/src/_tests/fixtures/43314/_files.json new file mode 100644 index 0000000000..e8fbfd1d23 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43314/_files.json @@ -0,0 +1,3 @@ +{ + "432f23fe1b87b12fe58bb1a8958f77ee3242741e:types/carbon__icon-helpers/index.d.ts": "// Type definitions for @carbon/icon-helpers 10.6\n// Project: https://github.com/carbon-design-system/carbon/blob/master/packages/icon-helpers\n// Definitions by: Eric Liu \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.8\n\nexport interface Path {\n elem: 'path';\n attrs: { d: string };\n}" +} diff --git a/packages/mergebot/src/_tests/fixtures/43314/_response.json b/packages/mergebot/src/_tests/fixtures/43314/_response.json new file mode 100644 index 0000000000..780f91dcac --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43314/_response.json @@ -0,0 +1,260 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0MzkyMDM2NjA4", + "title": "feat(types): add carbon__icon-helpers", + "lastEditedAt": null, + "author": { + "login": "metonym", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-03-22T16:50:35Z", + "labels": { + "nodes": [ + { + "name": "Awaiting reviewer feedback", + "__typename": "Label" + }, + { + "name": "New Definition", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "mergeable": "UNKNOWN", + "number": 43314, + "state": "OPEN", + "headRefOid": "432f23fe1b87b12fe58bb1a8958f77ee3242741e", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "432f23fe1b87b12fe58bb1a8958f77ee3242741e", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/432f23fe1b87b12fe58bb1a8958f77ee3242741e/checks?check_suite_id=538815611", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/432f23fe1b87b12fe58bb1a8958f77ee3242741e/checks?check_suite_id=538815611", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/665548702?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-03-22T16:48:33Z", + "committedDate": "2020-03-22T16:48:33Z", + "pushedDate": "2020-03-22T16:48:44Z", + "abbreviatedOid": "432f23f", + "oid": "432f23fe1b87b12fe58bb1a8958f77ee3242741e", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 4, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYwMjIzODI3OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@metonym Thank you for submitting this PR! \n\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n- [carbon__icon-helpers](https://www.npmjs.com/package/carbon__icon-helpers)\n\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ Only a DT maintainer can approve changes without tests\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": "2020-03-22T16:50:45Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYwMjIzODI5MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@metonym The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/665548702?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-03-22T16:50:47Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYwMjIzODI5Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@metonym The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/665548702?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-03-22T16:50:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYwMjI0MjY1NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@metonym Thank you for submitting this PR!\n \nBecause this is a new definition, a DefinitelyTyped maintainer will be reviewing this PR in the next few days once the Travis CI build passes.\n \nIn the meantime, if the build fails or a merge conflict occurs, I'll let you know. Have a nice day!\r\n", + "createdAt": "2020-03-22T17:22:32Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/carbon__icon-helpers/carbon__icon-helpers-tests.ts", + "additions": 26, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/carbon__icon-helpers/index.d.ts", + "additions": 56, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/carbon__icon-helpers/tsconfig.json", + "additions": 19, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/carbon__icon-helpers/tslint.json", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzQ5NjgxMDk=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + }, + { + "id": "MDExOlByb2plY3RDYXJkMzQ5NjkxODM=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW4yNTYxMzU2", + "name": "Review", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/43314/derived.json b/packages/mergebot/src/_tests/fixtures/43314/derived.json new file mode 100644 index 0000000000..38e881fc60 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43314/derived.json @@ -0,0 +1,48 @@ +{ + "type": "info", + "now": "2020-03-22T21:36:44.000Z", + "pr_number": 43314, + "author": "metonym", + "headCommitOid": "432f23fe1b87b12fe58bb1a8958f77ee3242741e", + "mergeBaseOid": "master", + "lastPushDate": "2020-03-22T16:48:44.000Z", + "lastActivityDate": "2020-03-22T16:50:35.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "carbon__icon-helpers", + "kind": "add", + "files": [ + { + "path": "types/carbon__icon-helpers/carbon__icon-helpers-tests.ts", + "kind": "test" + }, + { + "path": "types/carbon__icon-helpers/index.d.ts", + "kind": "definition" + }, + { + "path": "types/carbon__icon-helpers/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/carbon__icon-helpers/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [ + "metonym" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/43314/mutations.json b/packages/mergebot/src/_tests/fixtures/43314/mutations.json new file mode 100644 index 0000000000..b00cbdfb0b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43314/mutations.json @@ -0,0 +1,40 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYwMjIzODI3OQ==", + "body": "@metonym Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `carbon__icon-helpers` (*new!*) — [on npm](https://www.npmjs.com/package/@carbon/icon-helpers), [on unpkg](https://unpkg.com/browse/@carbon/icon-helpers@latest/)\n - 1 added owner: ✎@metonym\n - Config files to check:\n - [`carbon__icon-helpers/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43314/files/432f23fe1b87b12fe58bb1a8958f77ee3242741e#diff-9f7808ddcec9553672dd10ae54a269326e3346253364745d3f187e0b2b95b27b): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=43314&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 when there are new packages added\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0MzkyMDM2NjA4" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzQ5NjgxMDk=", + "columnId": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0MzkyMDM2NjA4", + "body": "🔔 @metonym — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43314/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/43314/result.json b/packages/mergebot/src/_tests/fixtures/43314/result.json new file mode 100644 index 0000000000..8aaf0f8690 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43314/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "New Definition", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@metonym Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `carbon__icon-helpers` (*new!*) — [on npm](https://www.npmjs.com/package/@carbon/icon-helpers), [on unpkg](https://unpkg.com/browse/@carbon/icon-helpers@latest/)\n - 1 added owner: ✎@metonym\n - Config files to check:\n - [`carbon__icon-helpers/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43314/files/432f23fe1b87b12fe58bb1a8958f77ee3242741e#diff-9f7808ddcec9553672dd10ae54a269326e3346253364745d3f187e0b2b95b27b): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=43314&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 when there are new packages added\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", + "status": "🔔 @metonym — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43314/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/_downloads.json b/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/_downloads.json new file mode 100644 index 0000000000..3600062d0e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/_downloads.json @@ -0,0 +1,3 @@ +{ + "accedo__accedo-one": 0 +} diff --git a/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/_files.json b/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/_files.json new file mode 100644 index 0000000000..a78ba7a823 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/_files.json @@ -0,0 +1,3 @@ +{ + "3e836178b736e5512361ffda46e84a5c668d7a90:types/accedo__accedo-one/index.d.ts": "// Type definitions for @accedo/accedo-one 4.0\n// Project: https://www.accedo.tv/one\n// Definitions by: Alexander P. Cerutti \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// Minimum TypeScript Version: 3.1\n\n/**\n * @example" +} diff --git a/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/_response.json b/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/_response.json new file mode 100644 index 0000000000..857206316c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/_response.json @@ -0,0 +1,1266 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDAwMTAwMTk2", + "title": "Added typings for @accedo/accedo-one package", + "lastEditedAt": "2020-04-23T18:17:03Z", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-07T07:51:12Z", + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + }, + { + "name": "No Other Owners", + "__typename": "Label" + }, + { + "name": "Check Config", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 43695, + "state": "OPEN", + "headRefOid": "3e836178b736e5512361ffda46e84a5c668d7a90", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-07T07:51:15Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-07T07:51:23Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "createdAt": "2020-04-07T07:56:06Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-07T08:22:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-08T16:24:30Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-10T11:54:25Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-15T12:26:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-15T12:26:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-15T15:57:14Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-15T16:26:48Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-15T16:26:50Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-15T16:26:50Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "createdAt": "2020-04-15T16:28:26Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "createdAt": "2020-04-21T11:55:50Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:07:52Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:07:52Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:07:53Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:07:53Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:07:53Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:07:53Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:07:54Z" + }, + { + "__typename": "ReopenedEvent", + "createdAt": "2020-04-30T23:08:16Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2020-05-01T00:00:44Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "createdAt": "2020-05-01T00:03:35Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2020-05-01T00:06:19Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "createdAt": "2020-05-01T00:19:19Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "commit": { + "oid": "a5285cda2722912a390770722a334e6d6e43d1ab", + "abbreviatedOid": "a5285cd", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "createdAt": "2020-04-08T16:23:48Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-04-08T16:23:52Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-390133785", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "commit": { + "oid": "a5285cda2722912a390770722a334e6d6e43d1ab", + "abbreviatedOid": "a5285cd", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "createdAt": "2020-04-08T17:03:39Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-04-08T17:03:39Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-390164904", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "90c94f91120c026f5f8bcc586426e8590b7b4048", + "abbreviatedOid": "90c94f9", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:07:44Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-04-30T23:07:49Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-403936744", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "commit": { + "oid": "90c94f91120c026f5f8bcc586426e8590b7b4048", + "abbreviatedOid": "90c94f9", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:20:14Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-04-30T23:20:14Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-403941289", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "90c94f91120c026f5f8bcc586426e8590b7b4048", + "abbreviatedOid": "90c94f9", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:32:42Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2020-04-30T23:32:42Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-403945620", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "commit": { + "oid": "90c94f91120c026f5f8bcc586426e8590b7b4048", + "abbreviatedOid": "90c94f9", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:47:20Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-04-30T23:47:20Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-403950552", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "68463fd2f4f3bcfdfdf271637a1b33a0fb1190b1", + "abbreviatedOid": "68463fd", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:58:30Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2020-04-30T23:58:31Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-403954214", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "68463fd2f4f3bcfdfdf271637a1b33a0fb1190b1", + "abbreviatedOid": "68463fd", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2020-04-30T23:59:41Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-403954569", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "commit": { + "oid": "68463fd2f4f3bcfdfdf271637a1b33a0fb1190b1", + "abbreviatedOid": "68463fd", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "createdAt": "2020-05-01T00:01:22Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-05-01T00:01:22Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-403955126", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 13, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-06T16:21:51Z", + "committedDate": "2020-04-07T07:40:36Z", + "pushedDate": null, + "abbreviatedOid": "af8957d", + "oid": "af8957d1fc70a0de9c0f4c7c0118a24389fb5b26", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-06T16:36:34Z", + "committedDate": "2020-04-07T07:40:42Z", + "pushedDate": null, + "abbreviatedOid": "f9a4323", + "oid": "f9a43233fe8c5758e6d58662b999d0e14929ee83", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-06T16:41:15Z", + "committedDate": "2020-04-07T07:40:44Z", + "pushedDate": null, + "abbreviatedOid": "9e24828", + "oid": "9e248289b7b7bb8f239f0ff106a95b00f5cd4a87", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-06T16:41:40Z", + "committedDate": "2020-04-07T07:40:47Z", + "pushedDate": null, + "abbreviatedOid": "2494da5", + "oid": "2494da59bfc825d8d68fdfc149f4bb89e7fd5358", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/a5285cda2722912a390770722a334e6d6e43d1ab/checks?check_suite_id=578707768", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/a5285cda2722912a390770722a334e6d6e43d1ab/checks?check_suite_id=578707768", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "rbuckton", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/671973003?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-06T16:43:27Z", + "committedDate": "2020-04-07T07:40:50Z", + "pushedDate": null, + "abbreviatedOid": "a5285cd", + "oid": "a5285cda2722912a390770722a334e6d6e43d1ab", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/f12c498d540d73baacfa1abb4feb43fda41ac8e5/checks?check_suite_id=588273165", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f12c498d540d73baacfa1abb4feb43fda41ac8e5/checks?check_suite_id=588273165", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "FAILURE", + "contexts": [ + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/673381199?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-10T11:47:19Z", + "committedDate": "2020-04-10T11:47:19Z", + "pushedDate": null, + "abbreviatedOid": "f12c498", + "oid": "f12c498d540d73baacfa1abb4feb43fda41ac8e5", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-15T15:27:23Z", + "committedDate": "2020-04-15T15:27:23Z", + "pushedDate": null, + "abbreviatedOid": "86e9006", + "oid": "86e900621feb6b2d017a9f1aaea224f498e5a22a", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-15T15:32:48Z", + "committedDate": "2020-04-15T15:32:48Z", + "pushedDate": null, + "abbreviatedOid": "3cb23d4", + "oid": "3cb23d4793e7eeede37a11580c3abf8d314b9748", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-15T15:52:12Z", + "committedDate": "2020-04-15T15:52:12Z", + "pushedDate": null, + "abbreviatedOid": "07b0b29", + "oid": "07b0b292fbf5ad04763bbed94dc3713c05468067", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/90c94f91120c026f5f8bcc586426e8590b7b4048/checks?check_suite_id=600295513", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/90c94f91120c026f5f8bcc586426e8590b7b4048/checks?check_suite_id=600295513", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681726779?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-15T15:52:24Z", + "committedDate": "2020-04-15T15:52:24Z", + "pushedDate": null, + "abbreviatedOid": "90c94f9", + "oid": "90c94f91120c026f5f8bcc586426e8590b7b4048", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/68463fd2f4f3bcfdfdf271637a1b33a0fb1190b1/checks?check_suite_id=644114464", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/68463fd2f4f3bcfdfdf271637a1b33a0fb1190b1/checks?check_suite_id=644114464", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "FAILURE", + "contexts": [ + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681738901?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-30T23:48:33Z", + "committedDate": "2020-04-30T23:48:33Z", + "pushedDate": null, + "abbreviatedOid": "68463fd", + "oid": "68463fd2f4f3bcfdfdf271637a1b33a0fb1190b1", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3e836178b736e5512361ffda46e84a5c668d7a90/checks?check_suite_id=644175407", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3e836178b736e5512361ffda46e84a5c668d7a90/checks?check_suite_id=644175407", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681746087?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-01T00:12:41Z", + "committedDate": "2020-05-01T00:12:41Z", + "pushedDate": null, + "abbreviatedOid": "3e83617", + "oid": "3e836178b736e5512361ffda46e84a5c668d7a90", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 31, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDIzNDI3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti Thank you for submitting this PR! \n\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n- [accedo__accedo-one](https://www.npmjs.com/package/accedo__accedo-one)\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ Only a DT maintainer can approve changes when there are new packages added\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": "2020-04-07T07:51:15Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDIzNDMyNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-04-07T07:51:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDIzNjQzOQ==", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "body": "So, actually the CI didn't fail.", + "createdAt": "2020-04-07T07:56:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDI0ODg1Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@alexandercerutti Thank you for submitting this PR!\n \nBecause this is a new definition, a DefinitelyTyped maintainer will be reviewing this PR in the next few days once the Travis CI build passes.\n \nIn the meantime, if the build fails or a merge conflict occurs, I'll let you know. Have a nice day!\r\n", + "createdAt": "2020-04-07T08:22:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMTA1Njg0MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@alexandercerutti One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits or comments. Thank you!\r\n", + "createdAt": "2020-04-08T16:24:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMTk5ODMxNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti The Travis CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f12c498d540d73baacfa1abb4feb43fda41ac8e5/checks?check_suite_id=588273165).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-10T11:54:25Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDAwNzA3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti I haven't seen anything from you in a while and this PR currently has problems that prevent it from being merged. The PR will be closed tomorrow if there aren't new commits to fix the issues.\n", + "createdAt": "2020-04-15T12:26:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDAwNzA3Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti I haven't seen anything from you in a while and this PR currently has problems that prevent it from being merged. The PR will be closed tomorrow if there aren't new commits to fix the issues.\n", + "createdAt": "2020-04-15T12:26:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDEyNTI4OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\nThese typings are for a package that doesn’t yet exist on master, so I don’t have anything to compare against yet! In the future, I’ll be able to compare PRs to accedo__accedo-one with its source on master.\n\n\n
\nComparison details 📊\n\n| **Batch compilation** | |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Type count | 2239 |\n| Assignability cache size | 116 |\n| | |\n| **Language service measurements** | |\n| Samples taken | 51 |\n| Identifiers in tests | 51 |\n| **`getCompletionsAtPosition`** | |\n|     Mean duration (ms) | 78.7 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 27.3% |\n|     Worst duration (ms) | 101.4 |\n|     Worst identifier | [accedoOne](/DefinitelyTyped/DefinitelyTyped/blob/97b243dc95c812604fa6736faf8dc8f7a0ff41ac/types/accedo__accedo-one/accedo__accedo-one-tests.ts#L9) |\n| **`getQuickInfoAtPosition`** | |\n|     Mean duration (ms) | 74.9 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 25.8% |\n|     Worst duration (ms) | 91.7 |\n|     Worst identifier | [sendLog](/DefinitelyTyped/DefinitelyTyped/blob/97b243dc95c812604fa6736faf8dc8f7a0ff41ac/types/accedo__accedo-one/accedo__accedo-one-tests.ts#L18) |\n| | |\n| **System information** | |\n| Node version | v12.16.1 |\n| CPU count | 2 |\n| CPU speed | 2.095 GHz |\n| CPU model | Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz |\n| CPU Architecture | x64 |\n| Memory | 6.8 GiB |\n| Platform | linux |\n| Release | 4.15.0-1077-azure |\n\n\n
\n", + "createdAt": "2020-04-15T15:57:14Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDE0MTY5OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n🔔 @RyanCavanaugh - Thanks for your review of this PR! Can you please look at the new code and update your review status if appropriate?\r\n", + "createdAt": "2020-04-15T16:26:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDE0MTcxNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@RyanCavanaugh Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-04-15T16:26:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDE0MTcyMg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@RyanCavanaugh Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-04-15T16:26:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDE0MjU3Ng==", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "body": "What's wrong with this bot? lol", + "createdAt": "2020-04-15T16:28:26Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNzEzNDI2Ng==", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "body": "Are there any news for this @RyanCavanaugh? Sorry for tagging, but several days passed since first review and since my code updates. So, only to understand how much we'll have to wait.\r\n\r\nThank you.\r\n\r\nP.s. sorry for asking a code review.", + "createdAt": "2020-04-21T11:55:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE2NTgxNg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-04-30T23:07:52Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE2NTgxOA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-04-30T23:07:52Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE2NTgyNA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti To keep things tidy, we have to close PRs that aren't mergeable but don't have activity from their author. No worries, though - please open a new PR if you'd like to continue with this change. Thank you!\n", + "createdAt": "2020-04-30T23:07:53Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE2NTgyNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti To keep things tidy, we have to close PRs that aren't mergeable but don't have activity from their author. No worries, though - please open a new PR if you'd like to continue with this change. Thank you!\n", + "createdAt": "2020-04-30T23:07:53Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE2NTgyOA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti To keep things tidy, we have to close PRs that aren't mergeable but don't have activity from their author. No worries, though - please open a new PR if you'd like to continue with this change. Thank you!\n", + "createdAt": "2020-04-30T23:07:53Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE2NTgyOQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti To keep things tidy, we have to close PRs that aren't mergeable but don't have activity from their author. No worries, though - please open a new PR if you'd like to continue with this change. Thank you!\n", + "createdAt": "2020-04-30T23:07:53Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE2NTgzMA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti To keep things tidy, we have to close PRs that aren't mergeable but don't have activity from their author. No worries, though - please open a new PR if you'd like to continue with this change. Thank you!\n", + "createdAt": "2020-04-30T23:07:54Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE4MTgyNQ==", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "body": "Or rather, as soon as you fix your test import! Should be `import accedoOne = require('...')`, not `import accedoOne from '...'`", + "createdAt": "2020-05-01T00:00:44Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE4MjY1Mw==", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "body": "But should it be like this in my code too? Isn't that format a legacy format? Do I remember wrong? I mean, the code where we use it, already uses ES Syntax (but gets compiled through Webpack, so it still might be okay to use it through ES Syntax?).\r\nAnyway, I'm trying to fix it and testing also with my code.", + "createdAt": "2020-05-01T00:03:35Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE4MzUyNA==", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "body": "It’s not a legacy format; it’s the accurate format for CJS or UMD imports. You _can_ use a default import _only if_ you have ES module interop (`--esModuleInterop` in TypeScript) enabled, which you don’t in your tsconfig.json, so you need to use the accurate import format here. You can use a default import in your own code with Webpack.", + "createdAt": "2020-05-01T00:06:19Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE4NzIxMg==", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "body": "@andrewbranch Done, fixed everything. The tests passed but before them to being started, the bot said that they failed. 😅", + "createdAt": "2020-05-01T00:19:19Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/accedo__accedo-one/accedo__accedo-one-tests.ts", + "additions": 41, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/accedo__accedo-one/index.d.ts", + "additions": 407, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/accedo__accedo-one/tsconfig.json", + "additions": 28, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/accedo__accedo-one/tslint.json", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzU4NjkxNTQ=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/derived.json b/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/derived.json new file mode 100644 index 0000000000..075d5cb491 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/derived.json @@ -0,0 +1,61 @@ +{ + "type": "info", + "now": "2020-05-01T17:11:04.885Z", + "pr_number": 43695, + "author": "alexandercerutti", + "headCommitOid": "3e836178b736e5512361ffda46e84a5c668d7a90", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-07T07:51:12.000Z", + "lastActivityDate": "2020-05-01T00:19:19.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "accedo__accedo-one", + "kind": "add", + "files": [ + { + "path": "types/accedo__accedo-one/accedo__accedo-one-tests.ts", + "kind": "test" + }, + { + "path": "types/accedo__accedo-one/index.d.ts", + "kind": "definition" + }, + { + "path": "types/accedo__accedo-one/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/accedo__accedo-one/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [ + "alexandercerutti" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "stale", + "reviewer": "andrewbranch", + "date": "2020-04-30T23:59:41.000Z", + "abbrOid": "68463fd" + }, + { + "type": "stale", + "reviewer": "RyanCavanaugh", + "date": "2020-04-08T16:23:52.000Z", + "abbrOid": "a5285cd" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/mutations.json b/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/mutations.json new file mode 100644 index 0000000000..e58b4c6900 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/mutations.json @@ -0,0 +1,69 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDIzNDI3MA==", + "body": "@alexandercerutti Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `accedo__accedo-one` (*new!*) — [on npm](https://www.npmjs.com/package/@accedo/accedo-one), [on unpkg](https://unpkg.com/browse/@accedo/accedo-one@latest/)\n - 1 added owner: ✎@alexandercerutti\n - Config files to check:\n - [`accedo__accedo-one/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695/files/3e836178b736e5512361ffda46e84a5c668d7a90#diff-4413d8770def1e851a87a519d27ff32bc17eee42f2c9a26c9a0d59dc710e09ba): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=43695&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 when there are new packages added\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 24 days — it is *still* unreviewed!\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyNDYyODA0MzE1" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDAwMTAwMTk2" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODU3ODAw" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDAwMTAwMTk2" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzU4NjkxNTQ=", + "columnId": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDAwMTAwMTk2", + "body": "🔔 @alexandercerutti — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDAwMTAwMTk2", + "body": "@andrewbranch, @RyanCavanaugh Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDAwMTAwMTk2", + "body": "It has been more than two weeks and this PR still has no reviews.\n\nI'll bump it to the DT maintainer queue. Thank you for your patience, @alexandercerutti.\n\n(Ping @«anyone?».)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/result.json b/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/result.json new file mode 100644 index 0000000000..b386c42bb1 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695-duplicate-comment/result.json @@ -0,0 +1,29 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "New Definition", + "Check Config", + "Unreviewed" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@alexandercerutti Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `accedo__accedo-one` (*new!*) — [on npm](https://www.npmjs.com/package/@accedo/accedo-one), [on unpkg](https://unpkg.com/browse/@accedo/accedo-one@latest/)\n - 1 added owner: ✎@alexandercerutti\n - Config files to check:\n - [`accedo__accedo-one/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695/files/3e836178b736e5512361ffda46e84a5c668d7a90#diff-4413d8770def1e851a87a519d27ff32bc17eee42f2c9a26c9a0d59dc710e09ba): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=43695&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 when there are new packages added\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 24 days — it is *still* unreviewed!\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "pinging-reviewers-others", + "status": "🔔 @alexandercerutti — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + }, + { + "tag": "stale-ping-61f252-a5285cd", + "status": "@andrewbranch, @RyanCavanaugh Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?" + }, + { + "tag": "Unreviewed:done", + "status": "It has been more than two weeks and this PR still has no reviews.\n\nI'll bump it to the DT maintainer queue. Thank you for your patience, @alexandercerutti.\n\n(Ping @«anyone?».)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/43695-post-review/_downloads.json b/packages/mergebot/src/_tests/fixtures/43695-post-review/_downloads.json new file mode 100644 index 0000000000..3600062d0e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695-post-review/_downloads.json @@ -0,0 +1,3 @@ +{ + "accedo__accedo-one": 0 +} diff --git a/packages/mergebot/src/_tests/fixtures/43695-post-review/_files.json b/packages/mergebot/src/_tests/fixtures/43695-post-review/_files.json new file mode 100644 index 0000000000..bf070f644d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695-post-review/_files.json @@ -0,0 +1,3 @@ +{ + "90c94f91120c026f5f8bcc586426e8590b7b4048:types/accedo__accedo-one/index.d.ts": "// Type definitions for @accedo/accedo-one 4.0\n// Project: https://www.accedo.tv/one\n// Definitions by: Alexander P. Cerutti \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// Minimum TypeScript Version: 3.1\n\n/**\n * @example" +} diff --git a/packages/mergebot/src/_tests/fixtures/43695-post-review/_response.json b/packages/mergebot/src/_tests/fixtures/43695-post-review/_response.json new file mode 100644 index 0000000000..336fbc8935 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695-post-review/_response.json @@ -0,0 +1,780 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDAwMTAwMTk2", + "title": "Added typings for @accedo/accedo-one package", + "lastEditedAt": "2020-04-23T18:17:03Z", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-07T07:51:12Z", + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + }, + { + "name": "Revision needed", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 43695, + "state": "OPEN", + "headRefOid": "90c94f91120c026f5f8bcc586426e8590b7b4048", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-07T07:51:15Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-07T07:51:23Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "createdAt": "2020-04-07T07:56:06Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-07T08:22:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-08T16:24:30Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-10T11:54:25Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-15T12:26:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-15T12:26:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-15T15:57:14Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-15T16:26:48Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-15T16:26:50Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-15T16:26:50Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "createdAt": "2020-04-15T16:28:26Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "createdAt": "2020-04-21T11:55:50Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "commit": { + "oid": "a5285cda2722912a390770722a334e6d6e43d1ab", + "abbreviatedOid": "a5285cd", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "createdAt": "2020-04-08T16:23:48Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-04-08T16:23:52Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-390133785", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "commit": { + "oid": "a5285cda2722912a390770722a334e6d6e43d1ab", + "abbreviatedOid": "a5285cd", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "createdAt": "2020-04-08T17:03:39Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-04-08T17:03:39Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-390164904", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "90c94f91120c026f5f8bcc586426e8590b7b4048", + "abbreviatedOid": "90c94f9", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:07:44Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-04-30T23:07:49Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-403936744", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 10, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-06T16:21:51Z", + "committedDate": "2020-04-07T07:40:36Z", + "pushedDate": null, + "abbreviatedOid": "af8957d", + "oid": "af8957d1fc70a0de9c0f4c7c0118a24389fb5b26", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-06T16:36:34Z", + "committedDate": "2020-04-07T07:40:42Z", + "pushedDate": null, + "abbreviatedOid": "f9a4323", + "oid": "f9a43233fe8c5758e6d58662b999d0e14929ee83", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-06T16:41:15Z", + "committedDate": "2020-04-07T07:40:44Z", + "pushedDate": null, + "abbreviatedOid": "9e24828", + "oid": "9e248289b7b7bb8f239f0ff106a95b00f5cd4a87", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-06T16:41:40Z", + "committedDate": "2020-04-07T07:40:47Z", + "pushedDate": null, + "abbreviatedOid": "2494da5", + "oid": "2494da59bfc825d8d68fdfc149f4bb89e7fd5358", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/a5285cda2722912a390770722a334e6d6e43d1ab/checks?check_suite_id=578707768", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/a5285cda2722912a390770722a334e6d6e43d1ab/checks?check_suite_id=578707768", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "rbuckton", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/671973003?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-06T16:43:27Z", + "committedDate": "2020-04-07T07:40:50Z", + "pushedDate": "2020-04-07T07:41:37Z", + "abbreviatedOid": "a5285cd", + "oid": "a5285cda2722912a390770722a334e6d6e43d1ab", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/f12c498d540d73baacfa1abb4feb43fda41ac8e5/checks?check_suite_id=588273165", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f12c498d540d73baacfa1abb4feb43fda41ac8e5/checks?check_suite_id=588273165", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "FAILURE", + "contexts": [ + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/673381199?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-10T11:47:19Z", + "committedDate": "2020-04-10T11:47:19Z", + "pushedDate": "2020-04-10T11:48:31Z", + "abbreviatedOid": "f12c498", + "oid": "f12c498d540d73baacfa1abb4feb43fda41ac8e5", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-15T15:27:23Z", + "committedDate": "2020-04-15T15:27:23Z", + "pushedDate": null, + "abbreviatedOid": "86e9006", + "oid": "86e900621feb6b2d017a9f1aaea224f498e5a22a", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-15T15:32:48Z", + "committedDate": "2020-04-15T15:32:48Z", + "pushedDate": null, + "abbreviatedOid": "3cb23d4", + "oid": "3cb23d4793e7eeede37a11580c3abf8d314b9748", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-15T15:52:12Z", + "committedDate": "2020-04-15T15:52:12Z", + "pushedDate": null, + "abbreviatedOid": "07b0b29", + "oid": "07b0b292fbf5ad04763bbed94dc3713c05468067", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/90c94f91120c026f5f8bcc586426e8590b7b4048/checks?check_suite_id=600295513", + "status": "IN_PROGRESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/90c94f91120c026f5f8bcc586426e8590b7b4048/checks?check_suite_id=600295513", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681726779?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-15T15:52:24Z", + "committedDate": "2020-04-15T15:52:24Z", + "pushedDate": "2020-04-15T15:53:29Z", + "abbreviatedOid": "90c94f9", + "oid": "90c94f91120c026f5f8bcc586426e8590b7b4048", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 21, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDIzNDI3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti Thank you for submitting this PR! \n\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n- [accedo__accedo-one](https://www.npmjs.com/package/accedo__accedo-one)\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have passed\n * ❌ Only a DT maintainer can approve changes when there are new packages added\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": "2020-04-07T07:51:15Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDIzNDMyNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-04-07T07:51:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDIzNjQzOQ==", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "body": "So, actually the CI didn't fail.", + "createdAt": "2020-04-07T07:56:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDI0ODg1Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@alexandercerutti Thank you for submitting this PR!\n \nBecause this is a new definition, a DefinitelyTyped maintainer will be reviewing this PR in the next few days once the Travis CI build passes.\n \nIn the meantime, if the build fails or a merge conflict occurs, I'll let you know. Have a nice day!\r\n", + "createdAt": "2020-04-07T08:22:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMTA1Njg0MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@alexandercerutti One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits or comments. Thank you!\r\n", + "createdAt": "2020-04-08T16:24:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMTk5ODMxNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti The Travis CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f12c498d540d73baacfa1abb4feb43fda41ac8e5/checks?check_suite_id=588273165).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-10T11:54:25Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDAwNzA3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti I haven't seen anything from you in a while and this PR currently has problems that prevent it from being merged. The PR will be closed tomorrow if there aren't new commits to fix the issues.\n", + "createdAt": "2020-04-15T12:26:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDAwNzA3Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti I haven't seen anything from you in a while and this PR currently has problems that prevent it from being merged. The PR will be closed tomorrow if there aren't new commits to fix the issues.\n", + "createdAt": "2020-04-15T12:26:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDEyNTI4OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\nThese typings are for a package that doesn’t yet exist on master, so I don’t have anything to compare against yet! In the future, I’ll be able to compare PRs to accedo__accedo-one with its source on master.\n\n\n
\nComparison details 📊\n\n| **Batch compilation** | |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Type count | 2239 |\n| Assignability cache size | 116 |\n| | |\n| **Language service measurements** | |\n| Samples taken | 51 |\n| Identifiers in tests | 51 |\n| **`getCompletionsAtPosition`** | |\n|     Mean duration (ms) | 78.7 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 27.3% |\n|     Worst duration (ms) | 101.4 |\n|     Worst identifier | [accedoOne](/DefinitelyTyped/DefinitelyTyped/blob/97b243dc95c812604fa6736faf8dc8f7a0ff41ac/types/accedo__accedo-one/accedo__accedo-one-tests.ts#L9) |\n| **`getQuickInfoAtPosition`** | |\n|     Mean duration (ms) | 74.9 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 25.8% |\n|     Worst duration (ms) | 91.7 |\n|     Worst identifier | [sendLog](/DefinitelyTyped/DefinitelyTyped/blob/97b243dc95c812604fa6736faf8dc8f7a0ff41ac/types/accedo__accedo-one/accedo__accedo-one-tests.ts#L18) |\n| | |\n| **System information** | |\n| Node version | v12.16.1 |\n| CPU count | 2 |\n| CPU speed | 2.095 GHz |\n| CPU model | Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz |\n| CPU Architecture | x64 |\n| Memory | 6.8 GiB |\n| Platform | linux |\n| Release | 4.15.0-1077-azure |\n\n\n
\n", + "createdAt": "2020-04-15T15:57:14Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDE0MTY5OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n🔔 @RyanCavanaugh - Thanks for your review of this PR! Can you please look at the new code and update your review status if appropriate?\r\n", + "createdAt": "2020-04-15T16:26:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDE0MTcxNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@RyanCavanaugh Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-04-15T16:26:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDE0MTcyMg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@RyanCavanaugh Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-04-15T16:26:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDE0MjU3Ng==", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "body": "What's wrong with this bot? lol", + "createdAt": "2020-04-15T16:28:26Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNzEzNDI2Ng==", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "body": "Are there any news for this @RyanCavanaugh? Sorry for tagging, but several days passed since first review and since my code updates. So, only to understand how much we'll have to wait.\r\n\r\nThank you.\r\n\r\nP.s. sorry for asking a code review.", + "createdAt": "2020-04-21T11:55:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/accedo__accedo-one/accedo__accedo-one-tests.ts", + "additions": 41, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/accedo__accedo-one/index.d.ts", + "additions": 405, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/accedo__accedo-one/tsconfig.json", + "additions": 28, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/accedo__accedo-one/tslint.json", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzU4NzA5Njc=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW40Njk1ODAw", + "name": "Done", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + }, + { + "id": "MDExOlByb2plY3RDYXJkMzczNDY4ODQ=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/43695-post-review/derived.json b/packages/mergebot/src/_tests/fixtures/43695-post-review/derived.json new file mode 100644 index 0000000000..b83d38c60d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695-post-review/derived.json @@ -0,0 +1,60 @@ +{ + "type": "info", + "now": "2020-04-30T23:13:37.659Z", + "pr_number": 43695, + "author": "alexandercerutti", + "headCommitOid": "90c94f91120c026f5f8bcc586426e8590b7b4048", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-15T15:53:29.000Z", + "lastActivityDate": "2020-04-30T23:07:49.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "accedo__accedo-one", + "kind": "add", + "files": [ + { + "path": "types/accedo__accedo-one/accedo__accedo-one-tests.ts", + "kind": "test" + }, + { + "path": "types/accedo__accedo-one/index.d.ts", + "kind": "definition" + }, + { + "path": "types/accedo__accedo-one/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/accedo__accedo-one/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [ + "alexandercerutti" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "changereq", + "reviewer": "andrewbranch", + "date": "2020-04-30T23:07:49.000Z" + }, + { + "type": "stale", + "reviewer": "RyanCavanaugh", + "date": "2020-04-08T16:23:52.000Z", + "abbrOid": "a5285cd" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/43695-post-review/mutations.json b/packages/mergebot/src/_tests/fixtures/43695-post-review/mutations.json new file mode 100644 index 0000000000..3578e621c9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695-post-review/mutations.json @@ -0,0 +1,40 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDIzNDI3MA==", + "body": "@alexandercerutti Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `accedo__accedo-one` (*new!*) — [on npm](https://www.npmjs.com/package/@accedo/accedo-one), [on unpkg](https://unpkg.com/browse/@accedo/accedo-one@latest/)\n - 1 added owner: ✎@alexandercerutti\n - Config files to check:\n - [`accedo__accedo-one/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695/files/90c94f91120c026f5f8bcc586426e8590b7b4048#diff-4413d8770def1e851a87a519d27ff32bc17eee42f2c9a26c9a0d59dc710e09ba): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=43695&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 when there are new packages added\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDAwMTAwMTk2" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzczNDY4ODQ=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDAwMTAwMTk2", + "body": "@alexandercerutti One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/43695-post-review/result.json b/packages/mergebot/src/_tests/fixtures/43695-post-review/result.json new file mode 100644 index 0000000000..779c8601ec --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695-post-review/result.json @@ -0,0 +1,21 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "Revision needed", + "New Definition", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@alexandercerutti Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `accedo__accedo-one` (*new!*) — [on npm](https://www.npmjs.com/package/@accedo/accedo-one), [on unpkg](https://unpkg.com/browse/@accedo/accedo-one@latest/)\n - 1 added owner: ✎@alexandercerutti\n - Config files to check:\n - [`accedo__accedo-one/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695/files/90c94f91120c026f5f8bcc586426e8590b7b4048#diff-4413d8770def1e851a87a519d27ff32bc17eee42f2c9a26c9a0d59dc710e09ba): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=43695&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 when there are new packages added\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": "reviewer-complaint-90c94f9", + "status": "@alexandercerutti One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/43695/_downloads.json b/packages/mergebot/src/_tests/fixtures/43695/_downloads.json new file mode 100644 index 0000000000..3600062d0e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695/_downloads.json @@ -0,0 +1,3 @@ +{ + "accedo__accedo-one": 0 +} diff --git a/packages/mergebot/src/_tests/fixtures/43695/_files.json b/packages/mergebot/src/_tests/fixtures/43695/_files.json new file mode 100644 index 0000000000..9cdf56ddb9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695/_files.json @@ -0,0 +1,3 @@ +{ + "a5285cda2722912a390770722a334e6d6e43d1ab:types/accedo__accedo-one/index.d.ts": "// Type definitions for @accedo/accedo-one 4.0\n// Project: https://www.accedo.tv/one\n// Definitions by: Alexander P. Cerutti \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// Minimum TypeScript Version: 3.1\n\n/**\n * @example" +} diff --git a/packages/mergebot/src/_tests/fixtures/43695/_response.json b/packages/mergebot/src/_tests/fixtures/43695/_response.json new file mode 100644 index 0000000000..27f790b5ce --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695/_response.json @@ -0,0 +1,416 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDAwMTAwMTk2", + "title": "Added typings for @accedo/accedo-one package", + "lastEditedAt": null, + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-07T07:51:12Z", + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + }, + { + "name": "Revision needed", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "mergeable": "MERGEABLE", + "number": 43695, + "state": "OPEN", + "headRefOid": "a5285cda2722912a390770722a334e6d6e43d1ab", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "af8957d1fc70a0de9c0f4c7c0118a24389fb5b26", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "f9a43233fe8c5758e6d58662b999d0e14929ee83", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "9e248289b7b7bb8f239f0ff106a95b00f5cd4a87", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "2494da59bfc825d8d68fdfc149f4bb89e7fd5358", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "a5285cda2722912a390770722a334e6d6e43d1ab", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestReview", + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "state": "CHANGES_REQUESTED" + }, + { + "__typename": "IssueComment" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "commit": { + "oid": "a5285cda2722912a390770722a334e6d6e43d1ab", + "abbreviatedOid": "a5285cd", + "__typename": "Commit" + }, + "authorAssociation": "MEMBER", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-04-08T16:23:52Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-390133785", + "__typename": "PullRequestReview", + "comments": { + "nodes": [] + } + }, + { + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "commit": { + "oid": "a5285cda2722912a390770722a334e6d6e43d1ab", + "abbreviatedOid": "a5285cd", + "__typename": "Commit" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-04-08T17:03:39Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695#pullrequestreview-390164904", + "__typename": "PullRequestReview", + "comments": { + "nodes": [] + } + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 5, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-06T16:21:51Z", + "committedDate": "2020-04-07T07:40:36Z", + "pushedDate": null, + "abbreviatedOid": "af8957d", + "oid": "af8957d1fc70a0de9c0f4c7c0118a24389fb5b26", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-06T16:36:34Z", + "committedDate": "2020-04-07T07:40:42Z", + "pushedDate": null, + "abbreviatedOid": "f9a4323", + "oid": "f9a43233fe8c5758e6d58662b999d0e14929ee83", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-06T16:41:15Z", + "committedDate": "2020-04-07T07:40:44Z", + "pushedDate": null, + "abbreviatedOid": "9e24828", + "oid": "9e248289b7b7bb8f239f0ff106a95b00f5cd4a87", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-06T16:41:40Z", + "committedDate": "2020-04-07T07:40:47Z", + "pushedDate": null, + "abbreviatedOid": "2494da5", + "oid": "2494da59bfc825d8d68fdfc149f4bb89e7fd5358", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/a5285cda2722912a390770722a334e6d6e43d1ab/checks?check_suite_id=578707768", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/a5285cda2722912a390770722a334e6d6e43d1ab/checks?check_suite_id=578707768", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "rbuckton", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/671973003?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-06T16:43:27Z", + "committedDate": "2020-04-07T07:40:50Z", + "pushedDate": "2020-04-07T07:41:37Z", + "abbreviatedOid": "a5285cd", + "oid": "a5285cda2722912a390770722a334e6d6e43d1ab", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDIzNDI3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti Thank you for submitting this PR! \n\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n- [accedo__accedo-one](https://www.npmjs.com/package/accedo__accedo-one)\n\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ Only a DT maintainer can approve changes without tests\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": "2020-04-07T07:51:15Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDIzNDMyNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexandercerutti One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-04-07T07:51:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDIzNjQzOQ==", + "author": { + "login": "alexandercerutti", + "__typename": "User" + }, + "body": "So, actually the CI didn't fail.", + "createdAt": "2020-04-07T07:56:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDI0ODg1Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@alexandercerutti Thank you for submitting this PR!\n \nBecause this is a new definition, a DefinitelyTyped maintainer will be reviewing this PR in the next few days once the Travis CI build passes.\n \nIn the meantime, if the build fails or a merge conflict occurs, I'll let you know. Have a nice day!\r\n", + "createdAt": "2020-04-07T08:22:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxMTA1Njg0MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@alexandercerutti One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits or comments. Thank you!\r\n", + "createdAt": "2020-04-08T16:24:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/accedo__accedo-one/accedo__accedo-one-tests.ts", + "additions": 41, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/accedo__accedo-one/index.d.ts", + "additions": 409, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/accedo__accedo-one/tsconfig.json", + "additions": 24, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/accedo__accedo-one/tslint.json", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzU4NjkxNTQ=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + }, + { + "id": "MDExOlByb2plY3RDYXJkMzU4NzA5Njc=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW4yNTYxMzU5", + "name": "Needs Author Attention", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/43695/derived.json b/packages/mergebot/src/_tests/fixtures/43695/derived.json new file mode 100644 index 0000000000..3b55ef887a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695/derived.json @@ -0,0 +1,54 @@ +{ + "type": "info", + "now": "2020-04-08T12:29:36.999Z", + "pr_number": 43695, + "author": "alexandercerutti", + "headCommitOid": "a5285cda2722912a390770722a334e6d6e43d1ab", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-07T07:41:37.000Z", + "lastActivityDate": "2020-04-08T16:23:52.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "accedo__accedo-one", + "kind": "add", + "files": [ + { + "path": "types/accedo__accedo-one/accedo__accedo-one-tests.ts", + "kind": "test" + }, + { + "path": "types/accedo__accedo-one/index.d.ts", + "kind": "definition" + }, + { + "path": "types/accedo__accedo-one/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/accedo__accedo-one/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [ + "alexandercerutti" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "changereq", + "reviewer": "RyanCavanaugh", + "date": "2020-04-08T16:23:52.000Z" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/43695/mutations.json b/packages/mergebot/src/_tests/fixtures/43695/mutations.json new file mode 100644 index 0000000000..9b3c8571e4 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695/mutations.json @@ -0,0 +1,40 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYxMDIzNDI3MA==", + "body": "@alexandercerutti Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `accedo__accedo-one` (*new!*) — [on npm](https://www.npmjs.com/package/@accedo/accedo-one), [on unpkg](https://unpkg.com/browse/@accedo/accedo-one@latest/)\n - 1 added owner: ✎@alexandercerutti\n - Config files to check:\n - [`accedo__accedo-one/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695/files/a5285cda2722912a390770722a334e6d6e43d1ab#diff-4413d8770def1e851a87a519d27ff32bc17eee42f2c9a26c9a0d59dc710e09ba): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=43695&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 when there are new packages added\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDAwMTAwMTk2" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzU4NjkxNTQ=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDAwMTAwMTk2", + "body": "@alexandercerutti One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/43695/result.json b/packages/mergebot/src/_tests/fixtures/43695/result.json new file mode 100644 index 0000000000..aa7e2baff6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43695/result.json @@ -0,0 +1,21 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "Revision needed", + "New Definition", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@alexandercerutti Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `accedo__accedo-one` (*new!*) — [on npm](https://www.npmjs.com/package/@accedo/accedo-one), [on unpkg](https://unpkg.com/browse/@accedo/accedo-one@latest/)\n - 1 added owner: ✎@alexandercerutti\n - Config files to check:\n - [`accedo__accedo-one/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43695/files/a5285cda2722912a390770722a334e6d6e43d1ab#diff-4413d8770def1e851a87a519d27ff32bc17eee42f2c9a26c9a0d59dc710e09ba): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=43695&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 when there are new packages added\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": "reviewer-complaint-a5285cd", + "status": "@alexandercerutti One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/43960-post-close/_downloads.json b/packages/mergebot/src/_tests/fixtures/43960-post-close/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43960-post-close/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/43960-post-close/_files.json b/packages/mergebot/src/_tests/fixtures/43960-post-close/_files.json new file mode 100644 index 0000000000..4d205b084e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43960-post-close/_files.json @@ -0,0 +1,3 @@ +{ + "master:types/supertest/index.d.ts": "// Type definitions for SuperTest v2.0.1\n// Project: https://github.com/visionmedia/supertest\n// Definitions by: Alex Varju \n// Petteri Parkkila \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.0\n\nimport * as superagent from 'superagent';\n\nexport = supertest;\n\ndeclare function supertest(app: any): supertest.SuperTest;\ndeclare namespace supertest {\n interface Response extends superagent.Response {}\n\n interface Request extends superagent.SuperAgentRequest {}\n\n type CallbackHandler = (err: any, res: Response) => void;\n interface Test extends superagent.SuperAgentRequest {\n app?: any;\n url: string;\n serverAddress(app: any, path: string): string;\n expect(status: number, callback?: CallbackHandler): this;\n expect(status: number, body: any, callback?: CallbackHandler): this;\n expect(checker: (res: Response) => any, callback?: CallbackHandler): this;\n expect(body: string, callback?: CallbackHandler): this;\n expect(body: RegExp, callback?: CallbackHandler): this;\n expect(body: Object, callback?: CallbackHandler): this;\n expect(field: string, val: string, callback?: CallbackHandler): this;\n expect(field: string, val: RegExp, callback?: CallbackHandler): this;\n end(callback?: CallbackHandler): this;\n }\n\n interface AgentOptions {\n ca?: any;\n }\n function agent(app?: any, options?: AgentOptions): SuperAgentTest;\n\n type SuperAgentTest = SuperTest &\n Pick<\n Request,\n | 'use'\n | 'on'\n | 'set'\n | 'query'\n | 'type'\n | 'accept'\n | 'auth'\n | 'withCredentials'\n | 'retry'\n | 'ok'\n | 'redirects'\n | 'timeout'\n | 'buffer'\n | 'serialize'\n | 'parse'\n | 'ca'\n | 'key'\n | 'pfx'\n | 'cert'\n >;\n interface SuperTest extends superagent.SuperAgent {}\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/43960-post-close/_response.json b/packages/mergebot/src/_tests/fixtures/43960-post-close/_response.json new file mode 100644 index 0000000000..56a2e198e4 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43960-post-close/_response.json @@ -0,0 +1,561 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDA0NTUyMTQ2", + "title": "supertest: supertest.agent() supports request methods like superagent.agent", + "updatedAt": "2020-04-30T16:25:13Z", + "lastEditedAt": null, + "author": { + "login": "aaltepet", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-16T17:30:09Z", + "labels": { + "nodes": [ + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + }, + { + "name": "Revision needed", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 43960, + "state": "CLOSED", + "headRefOid": "129f84e4492a76e7cd5af9d946c4583a60e6eb88", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-16T17:49:03Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-16T18:22:32Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-21T17:31:28Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-04-27T15:54:49Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-27T19:32:06Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-29T20:46:09Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-29T20:46:09Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-29T20:46:10Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-29T20:46:10Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2020-04-29T20:48:52Z" + }, + { + "__typename": "ReopenedEvent", + "createdAt": "2020-04-29T20:48:52Z" + }, + { + "__typename": "ReopenedEvent", + "createdAt": "2020-04-29T23:34:10Z" + }, + { + "__typename": "ReopenedEvent", + "createdAt": "2020-04-29T23:34:19Z" + }, + { + "__typename": "ReopenedEvent", + "createdAt": "2020-04-29T23:34:41Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "129f84e4492a76e7cd5af9d946c4583a60e6eb88", + "abbreviatedOid": "129f84e", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2020-04-27T18:55:48Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-04-27T18:56:06Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43960#pullrequestreview-401237082", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "aaltepet", + "__typename": "User" + }, + "commit": { + "oid": "129f84e4492a76e7cd5af9d946c4583a60e6eb88", + "abbreviatedOid": "129f84e", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "aaltepet", + "__typename": "User" + }, + "createdAt": "2020-04-29T20:46:05Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-04-29T20:46:05Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43960#pullrequestreview-403025465", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "129f84e4492a76e7cd5af9d946c4583a60e6eb88", + "abbreviatedOid": "129f84e", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2020-04-29T23:34:03Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2020-04-29T23:34:03Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43960#pullrequestreview-403110683", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "aaltepet", + "__typename": "User" + }, + "commit": { + "oid": "129f84e4492a76e7cd5af9d946c4583a60e6eb88", + "abbreviatedOid": "129f84e", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "aaltepet", + "__typename": "User" + }, + "createdAt": "2020-04-30T14:29:46Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-04-30T14:29:47Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43960#pullrequestreview-403576827", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "129f84e4492a76e7cd5af9d946c4583a60e6eb88", + "abbreviatedOid": "129f84e", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2020-04-30T16:25:13Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2020-04-30T16:25:13Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43960#pullrequestreview-403681618", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/129f84e4492a76e7cd5af9d946c4583a60e6eb88/checks?check_suite_id=603720715", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/129f84e4492a76e7cd5af9d946c4583a60e6eb88/checks?check_suite_id=603720715", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681255727?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-16T17:05:38Z", + "committedDate": "2020-04-16T17:05:38Z", + "pushedDate": "2020-04-16T17:21:54Z", + "abbreviatedOid": "129f84e", + "oid": "129f84e4492a76e7cd5af9d946c4583a60e6eb88", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 10, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDgwMDIwMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #43960 | diff |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 113.1 | 114.7 | +1.4% |\n| Type count | 19191 | 19212 | 0% |\n| Assignability cache size | 38209 | 38209 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 135 | 140 | +4% |\n| Identifiers in tests | 135 | 140 | +4% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 647.0 | 644.0 | -0.5% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.2% | 8.8% | |\n|     Worst duration (ms) | 787.4 | 818.1 | +3.9% |\n|     Worst identifier | [end](/DefinitelyTyped/DefinitelyTyped/blob/22e6c701e757834e37461dbaad00fb2ae8ea1fc4/types/supertest/supertest-tests.ts#L77) | [supertest](/DefinitelyTyped/DefinitelyTyped/blob/22b1adc68d27d8ba48b5f679c20e60a57aae4d2a/types/supertest/supertest-tests.ts#L67) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 637.1 | 634.4 | -0.4% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.7% | 8.8% | +1.1% |\n|     Worst duration (ms) | 768.5 | 724.7 | -5.7% |\n|     Worst identifier | [supertest](/DefinitelyTyped/DefinitelyTyped/blob/22e6c701e757834e37461dbaad00fb2ae8ea1fc4/types/supertest/supertest-tests.ts#L1) | [err](/DefinitelyTyped/DefinitelyTyped/blob/22b1adc68d27d8ba48b5f679c20e60a57aae4d2a/types/supertest/supertest-tests.ts#L68) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-04-16T17:49:03Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDgxODc5MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@aaltepet Thank you for submitting this PR!\n\n🔔 @varju @pietu — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43960/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\nIf no reviewer appears after a week, a DefinitelyTyped maintainer will review the PR instead.\r\n", + "createdAt": "2020-04-16T18:22:32Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNzMwNTU3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\nAfter 5 days, no one has reviewed the PR 😞. A maintainer will be reviewing the PR in the next few days and will either merge it or request revisions. Thank you for your patience!\r\n", + "createdAt": "2020-04-21T17:31:28Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDA3NDM2MA==", + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "body": "@varju @pietu -- re-ping?\r\n\r\n@aaltepet -- maybe avoid all the style changes to make it quicker? (It took me a while to find the actual change, which is just an `& Request` addition...)\r\n", + "createdAt": "2020-04-27T15:54:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDE4ODI2NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@aaltepet One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits or comments. Thank you!\r\n", + "createdAt": "2020-04-27T19:32:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTQ1NDM1NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@aaltepet Thank you for submitting this PR! \n\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\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\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": "2020-04-29T20:46:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTQ1NDM2Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@aaltepet One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-04-29T20:46:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTQ1NDM2OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@aaltepet To keep things tidy, we have to close PRs that aren't mergeable but don't have activity from their author. No worries, though - please open a new PR if you'd like to continue with this change. Thank you!\n", + "createdAt": "2020-04-29T20:46:10Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTQ1NDM3MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@aaltepet To keep things tidy, we have to close PRs that aren't mergeable but don't have activity from their author. No worries, though - please open a new PR if you'd like to continue with this change. Thank you!\n", + "createdAt": "2020-04-29T20:46:10Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTQ1NTcwNg==", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "body": "Don’t think the bot should have closed this", + "createdAt": "2020-04-29T20:48:52Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/supertest/index.d.ts", + "additions": 18, + "deletions": 22, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/supertest/supertest-tests.ts", + "additions": 32, + "deletions": 42, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzY0NDM4NTI=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW40Njk1ODAw", + "name": "Done", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + }, + { + "id": "MDExOlByb2plY3RDYXJkMzcyNjkxMzM=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy", + "name": "Needs Maintainer Review", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/43960-post-close/derived.json b/packages/mergebot/src/_tests/fixtures/43960-post-close/derived.json new file mode 100644 index 0000000000..eee3c8f0da --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43960-post-close/derived.json @@ -0,0 +1,6 @@ +{ + "type": "remove", + "now": "2020-04-30T19:01:56.000Z", + "message": "PR is not active", + "isDraft": false +} diff --git a/packages/mergebot/src/_tests/fixtures/43960-post-close/mutations.json b/packages/mergebot/src/_tests/fixtures/43960-post-close/mutations.json new file mode 100644 index 0000000000..23d403a46b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43960-post-close/mutations.json @@ -0,0 +1,10 @@ +[ + { + "mutation": "mutation ($input: DeleteProjectCardInput!) {\n deleteProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzcyNjkxMzM=" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/43960-post-close/result.json b/packages/mergebot/src/_tests/fixtures/43960-post-close/result.json new file mode 100644 index 0000000000..25a0649e05 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43960-post-close/result.json @@ -0,0 +1,8 @@ +{ + "labels": [], + "responseComments": [], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": false, + "projectColumn": "*REMOVE*" +} diff --git a/packages/mergebot/src/_tests/fixtures/43960/_downloads.json b/packages/mergebot/src/_tests/fixtures/43960/_downloads.json new file mode 100644 index 0000000000..0ad7fa11e5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43960/_downloads.json @@ -0,0 +1,3 @@ +{ + "supertest": 2236866 +} diff --git a/packages/mergebot/src/_tests/fixtures/43960/_files.json b/packages/mergebot/src/_tests/fixtures/43960/_files.json new file mode 100644 index 0000000000..028d700f27 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43960/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/supertest/index.d.ts": "// Type definitions for SuperTest v2.0.1\n// Project: https://github.com/visionmedia/supertest\n// Definitions by: Alex Varju \n// Petteri Parkkila \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.0\n\nimport * as superagent from 'superagent';\n\nexport = supertest;\n\ndeclare function supertest(app: any): supertest.SuperTest;\ndeclare namespace supertest {\n interface Response extends superagent.Response {}\n\n interface Request extends superagent.SuperAgentRequest {}\n\n type CallbackHandler = (err: any, res: Response) => void;\n interface Test extends superagent.SuperAgentRequest {\n app?: any;\n url: string;\n serverAddress(app: any, path: string): string;\n expect(status: number, callback?: CallbackHandler): this;\n expect(status: number, body: any, callback?: CallbackHandler): this;\n expect(checker: (res: Response) => any, callback?: CallbackHandler): this;\n expect(body: string, callback?: CallbackHandler): this;\n expect(body: RegExp, callback?: CallbackHandler): this;\n expect(body: Object, callback?: CallbackHandler): this;\n expect(field: string, val: string, callback?: CallbackHandler): this;\n expect(field: string, val: RegExp, callback?: CallbackHandler): this;\n end(callback?: CallbackHandler): this;\n }\n\n interface AgentOptions {\n ca?: any;\n }\n function agent(app?: any, options?: AgentOptions): SuperAgentTest;\n\n type SuperAgentTest = SuperTest &\n Pick<\n Request,\n | 'use'\n | 'on'\n | 'set'\n | 'query'\n | 'type'\n | 'accept'\n | 'auth'\n | 'withCredentials'\n | 'retry'\n | 'ok'\n | 'redirects'\n | 'timeout'\n | 'buffer'\n | 'serialize'\n | 'parse'\n | 'ca'\n | 'key'\n | 'pfx'\n | 'cert'\n >;\n interface SuperTest extends superagent.SuperAgent {}\n}\n", + "129f84e4492a76e7cd5af9d946c4583a60e6eb88:types/supertest/index.d.ts": "// Type definitions for SuperTest v2.0.1\n// Project: https://github.com/visionmedia/supertest\n// Definitions by: Alex Varju \n// Petteri Parkkila \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.0\n\nimport * as superagent from 'superagent';\n\nexport = supertest;\n\ndeclare function supertest(app: any): supertest.SuperTest;\ndeclare namespace supertest {\n interface Response extends superagent.Response {}\n\n interface Request extends superagent.SuperAgentRequest {}\n\n type CallbackHandler = (err: any, res: Response) => void;\n interface Test extends superagent.SuperAgentRequest {\n app?: any;\n url: string;\n serverAddress(app: any, path: string): string;\n expect(status: number, callback?: CallbackHandler): this;\n expect(status: number, body: any, callback?: CallbackHandler): this;\n expect(checker: (res: Response) => any, callback?: CallbackHandler): this;\n expect(body: string, callback?: CallbackHandler): this;\n expect(body: RegExp, callback?: CallbackHandler): this;\n expect(body: Object, callback?: CallbackHandler): this;\n expect(field: string, val: string, callback?: CallbackHandler): this;\n expect(field: string, val: RegExp, callback?: CallbackHandler): this;\n end(callback?: CallbackHandler): this;\n }\n\n interface AgentOptions {\n ca?: any;\n }\n function agent(app?: any, options?: AgentOptions): SuperAgentTest;\n\n type SuperAgentTest = SuperTest &\n Pick<\n Request,\n | 'use'\n | 'on'\n | 'set'\n | 'query'\n | 'type'\n | 'accept'\n | 'auth'\n | 'withCredentials'\n | 'retry'\n | 'ok'\n | 'redirects'\n | 'timeout'\n | 'buffer'\n | 'serialize'\n | 'parse'\n | 'ca'\n | 'key'\n | 'pfx'\n | 'cert'\n >;\n interface SuperTest extends superagent.SuperAgent {}\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/43960/_response.json b/packages/mergebot/src/_tests/fixtures/43960/_response.json new file mode 100644 index 0000000000..946e203a6d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43960/_response.json @@ -0,0 +1,466 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDA0NTUyMTQ2", + "title": "supertest: supertest.agent() supports request methods like superagent.agent", + "updatedAt": "2020-04-29T20:48:53Z", + "lastEditedAt": null, + "author": { + "login": "aaltepet", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-16T17:30:09Z", + "labels": { + "nodes": [ + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + }, + { + "name": "Revision needed", + "__typename": "Label" + }, + { + "name": "No Other Owners", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 43960, + "state": "OPEN", + "headRefOid": "129f84e4492a76e7cd5af9d946c4583a60e6eb88", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-16T17:49:03Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-16T18:22:32Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-21T17:31:28Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-04-27T15:54:49Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-27T19:32:06Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-29T20:46:09Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-29T20:46:09Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-29T20:46:10Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-29T20:46:10Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2020-04-29T20:48:52Z" + }, + { + "__typename": "ReopenedEvent", + "createdAt": "2020-04-29T20:48:52Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "129f84e4492a76e7cd5af9d946c4583a60e6eb88", + "abbreviatedOid": "129f84e", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2020-04-27T18:55:48Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-04-27T18:56:06Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43960#pullrequestreview-401237082", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "aaltepet", + "__typename": "User" + }, + "commit": { + "oid": "129f84e4492a76e7cd5af9d946c4583a60e6eb88", + "abbreviatedOid": "129f84e", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "aaltepet", + "__typename": "User" + }, + "createdAt": "2020-04-29T20:46:05Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-04-29T20:46:05Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43960#pullrequestreview-403025465", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/129f84e4492a76e7cd5af9d946c4583a60e6eb88/checks?check_suite_id=603720715", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/129f84e4492a76e7cd5af9d946c4583a60e6eb88/checks?check_suite_id=603720715", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/675854622?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-16T17:05:38Z", + "committedDate": "2020-04-16T17:05:38Z", + "pushedDate": "2020-04-16T17:21:54Z", + "abbreviatedOid": "129f84e", + "oid": "129f84e4492a76e7cd5af9d946c4583a60e6eb88", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 10, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDgwMDIwMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #43960 | diff |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 113.1 | 114.7 | +1.4% |\n| Type count | 19191 | 19212 | 0% |\n| Assignability cache size | 38209 | 38209 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 135 | 140 | +4% |\n| Identifiers in tests | 135 | 140 | +4% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 647.0 | 644.0 | -0.5% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.2% | 8.8% | |\n|     Worst duration (ms) | 787.4 | 818.1 | +3.9% |\n|     Worst identifier | [end](/DefinitelyTyped/DefinitelyTyped/blob/22e6c701e757834e37461dbaad00fb2ae8ea1fc4/types/supertest/supertest-tests.ts#L77) | [supertest](/DefinitelyTyped/DefinitelyTyped/blob/22b1adc68d27d8ba48b5f679c20e60a57aae4d2a/types/supertest/supertest-tests.ts#L67) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 637.1 | 634.4 | -0.4% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.7% | 8.8% | +1.1% |\n|     Worst duration (ms) | 768.5 | 724.7 | -5.7% |\n|     Worst identifier | [supertest](/DefinitelyTyped/DefinitelyTyped/blob/22e6c701e757834e37461dbaad00fb2ae8ea1fc4/types/supertest/supertest-tests.ts#L1) | [err](/DefinitelyTyped/DefinitelyTyped/blob/22b1adc68d27d8ba48b5f679c20e60a57aae4d2a/types/supertest/supertest-tests.ts#L68) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-04-16T17:49:03Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNDgxODc5MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@aaltepet Thank you for submitting this PR!\n\n🔔 @varju @pietu — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/43960/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\nIf no reviewer appears after a week, a DefinitelyTyped maintainer will review the PR instead.\r\n", + "createdAt": "2020-04-16T18:22:32Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNzMwNTU3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\nAfter 5 days, no one has reviewed the PR 😞. A maintainer will be reviewing the PR in the next few days and will either merge it or request revisions. Thank you for your patience!\r\n", + "createdAt": "2020-04-21T17:31:28Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDA3NDM2MA==", + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "body": "@varju @pietu -- re-ping?\r\n\r\n@aaltepet -- maybe avoid all the style changes to make it quicker? (It took me a while to find the actual change, which is just an `& Request` addition...)\r\n", + "createdAt": "2020-04-27T15:54:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDE4ODI2NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@aaltepet One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits or comments. Thank you!\r\n", + "createdAt": "2020-04-27T19:32:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTQ1NDM1NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@aaltepet Thank you for submitting this PR! \n\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\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\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": "2020-04-29T20:46:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTQ1NDM2Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@aaltepet One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-04-29T20:46:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTQ1NDM2OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@aaltepet To keep things tidy, we have to close PRs that aren't mergeable but don't have activity from their author. No worries, though - please open a new PR if you'd like to continue with this change. Thank you!\n", + "createdAt": "2020-04-29T20:46:10Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTQ1NDM3MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@aaltepet To keep things tidy, we have to close PRs that aren't mergeable but don't have activity from their author. No worries, though - please open a new PR if you'd like to continue with this change. Thank you!\n", + "createdAt": "2020-04-29T20:46:10Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTQ1NTcwNg==", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "body": "Don’t think the bot should have closed this", + "createdAt": "2020-04-29T20:48:52Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/supertest/index.d.ts", + "additions": 18, + "deletions": 22, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/supertest/supertest-tests.ts", + "additions": 32, + "deletions": 42, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzY0NDM4NTI=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW40Njk1ODAw", + "name": "Done", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + }, + { + "id": "MDExOlByb2plY3RDYXJkMzcyNjkxMzM=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy", + "name": "Needs Maintainer Review", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/43960/derived.json b/packages/mergebot/src/_tests/fixtures/43960/derived.json new file mode 100644 index 0000000000..247f196a2b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43960/derived.json @@ -0,0 +1,46 @@ +{ + "type": "info", + "now": "2020-04-29T22:09:53.999Z", + "pr_number": 43960, + "author": "aaltepet", + "headCommitOid": "129f84e4492a76e7cd5af9d946c4583a60e6eb88", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-16T17:21:54.000Z", + "lastActivityDate": "2020-04-29T20:48:52.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": "supertest", + "kind": "edit", + "files": [ + { + "path": "types/supertest/index.d.ts", + "kind": "definition" + }, + { + "path": "types/supertest/supertest-tests.ts", + "kind": "test" + } + ], + "owners": [ + "varju", + "pietu" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "changereq", + "reviewer": "andrewbranch", + "date": "2020-04-27T18:56:06.000Z" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/43960/mutations.json b/packages/mergebot/src/_tests/fixtures/43960/mutations.json new file mode 100644 index 0000000000..b9330be2ae --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43960/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTQ1NDM1NA==", + "body": "@aaltepet Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `supertest` — [on npm](https://www.npmjs.com/package/supertest), [on unpkg](https://unpkg.com/browse/supertest@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=43960&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\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" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODU3ODAw" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDA0NTUyMTQ2" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzcyNjkxMzM=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/43960/result.json b/packages/mergebot/src/_tests/fixtures/43960/result.json new file mode 100644 index 0000000000..f633e28124 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/43960/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "Revision needed", + "Popular package" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@aaltepet Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `supertest` — [on npm](https://www.npmjs.com/package/supertest), [on unpkg](https://unpkg.com/browse/supertest@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=43960&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\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": "reviewer-complaint-129f84e", + "status": "@aaltepet One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44105/_downloads.json b/packages/mergebot/src/_tests/fixtures/44105/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44105/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/44105/_files.json b/packages/mergebot/src/_tests/fixtures/44105/_files.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44105/_files.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/44105/_response.json b/packages/mergebot/src/_tests/fixtures/44105/_response.json new file mode 100644 index 0000000000..ac6a5947ab --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44105/_response.json @@ -0,0 +1,453 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDA3MTg1Njc2", + "title": "[mongodb] UpdateQuery is not readonly", + "lastEditedAt": null, + "author": { + "login": "avaly", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-22T10:06:29Z", + "labels": { + "nodes": [ + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "Merge:Express", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + }, + { + "name": "Where is Travis?", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "mergeable": "UNKNOWN", + "number": 44105, + "state": "CLOSED", + "headRefOid": "77ac4d3554fe492d2ac23bf993d218ad4cd58873", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "77ac4d3554fe492d2ac23bf993d218ad4cd58873", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/77ac4d3554fe492d2ac23bf993d218ad4cd58873/checks?check_suite_id=631344402", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/77ac4d3554fe492d2ac23bf993d218ad4cd58873/checks?check_suite_id=631344402", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680005519?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-22T10:03:51Z", + "committedDate": "2020-04-27T09:11:09Z", + "pushedDate": "2020-04-27T09:11:38Z", + "abbreviatedOid": "77ac4d3", + "oid": "77ac4d3554fe492d2ac23bf993d218ad4cd58873", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 14, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNzY5MDMwMA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@avaly Thank you for submitting this PR!\n\n🔔 @CaselIT @alanmarcell @dante-101 @mcortesi @EnricoPicci @AJCStriker @julien-c @daprahamian @denys-bushulyak @BastienAr @sindbach @geraldinelemeur @various89 @angela-1 @lirbank @hector7 @floric @erikc5000 @Manc @jloveridge @ranguna @HosseinAgha @albertossilva @peterblazejewicz @LinusU @taxilian @xamgore — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44105/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\nIf no reviewer appears after a week, a DefinitelyTyped maintainer will review the PR instead.\r\n", + "createdAt": "2020-04-22T10:22:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNzY5MDMxNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\nA definition owner has approved this PR ⭐️. A maintainer will merge this PR shortly. If it shouldn't be merged yet, please leave a comment saying so and we'll wait. Thank you for your contribution to DefinitelyTyped!\r\n", + "createdAt": "2020-04-22T10:22:38Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNzY5Mzg2Nw==", + "author": { + "login": "LinusU", + "__typename": "User" + }, + "body": "Hmmm, this is an interesting one, the values that are being accepted by the functions are really the readonly variant, since the function accepting the values won't modify them.\r\n\r\nIf we remove readonly from types that are being accepted, it means that you can no longer pass readonly types into those functions (you can pass both normal and readonly things to a readonly accepting function, but you cannot pass readonly things to a normal accepting function).\r\n\r\nI'm not really sure what the best approach here is, since the example that you added in the test is something that someone might want to do...", + "createdAt": "2020-04-22T10:30:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNzcxNjk3MQ==", + "author": { + "login": "avaly", + "__typename": "User" + }, + "body": "> the values that are being accepted by the functions are really the readonly variant\r\n\r\nMaybe I'm missing this obvious thing, but is this something that's defined somewhere (the fact that the functions are accepting only readonly parameters)?", + "createdAt": "2020-04-22T11:22:04Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNzcyMTMxNA==", + "author": { + "login": "CaselIT", + "__typename": "User" + }, + "body": "> Maybe I'm missing this obvious thing, but is this something that's defined somewhere (the fact that the functions are accepting only readonly parameters)?\r\n\r\nI think that what he meant was that a function that accept a readonly variant, accepts also the not readonly one:\r\n```ts\r\nfunction foo(arg: readonly number[]) {}\r\nfoo([1,2])\r\nfoo([2,3] as const)\r\n```\r\n\r\nIf you remove the `readonly` in the definition, the second call will error", + "createdAt": "2020-04-22T11:32:04Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNzczMDE1NA==", + "author": { + "login": "avaly", + "__typename": "User" + }, + "body": "I understood that part @CaselIT, but I am confused because all the functions that use `UpdateQuery` are not marking it as readonly, e.g.:\r\n\r\n```ts\r\n updateOne(\r\n filter: FilterQuery,\r\n update: UpdateQuery | Partial,\r\n callback: MongoCallback,\r\n ): void;\r\n```", + "createdAt": "2020-04-22T11:51:36Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxNzc3Mzk2Mw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #44105 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 79.7 | 78.9 | -1.0% |\n| Type count | 15618 | 15623 | 0% |\n| Assignability cache size | 5505 | 5515 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 1867 | 1902 | +2% |\n| Identifiers in tests | 1867 | 1902 | +2% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 345.6 | 347.0 | +0.4% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.8% | 8.7% | |\n|     Worst duration (ms) | 451.4 | 474.0 | +5.0% |\n|     Worst identifier | [options](/DefinitelyTyped/DefinitelyTyped/blob/e9103792668257b6cc86cd21d6c455ecb5fae1ea/types/mongodb/test/index.ts#L67) | [toArray](/DefinitelyTyped/DefinitelyTyped/blob/e0a753cc15c17292217ea768d1dd58eabb8ae697/types/mongodb/test/collection/filterQuery.ts#L255) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 348.2 | 349.3 | +0.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.4% | 9.3% | -0.9% |\n|     Worst duration (ms) | 443.4 | 475.6 | +7.3% |\n|     Worst identifier | [connect](/DefinitelyTyped/DefinitelyTyped/blob/e9103792668257b6cc86cd21d6c455ecb5fae1ea/types/mongodb/test/index.ts#L65) | [connectionString](/DefinitelyTyped/DefinitelyTyped/blob/e0a753cc15c17292217ea768d1dd58eabb8ae697/types/mongodb/test/index.ts#L66) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-04-22T13:18:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxODMzMDE1MA==", + "author": { + "login": "LinusU", + "__typename": "User" + }, + "body": "One problem would be that the following would no longer work:\r\n\r\n```\r\nasync function addTagsToPost (postId: string, tags: readonly string[]) {\r\n await posts.update({ _id: postId }, { tags: { $push: tags } })\r\n }\r\n```\r\n\r\non the other hand, it fixes the problem that you stated so there is clearly pros to both approaches ☺️ \r\n\r\nI would say that I'm leaning towards making this change 👍, but it would be nice to see if any other maintainers wants to chime in ☺️ ", + "createdAt": "2020-04-23T10:47:42Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "avaly", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxOTI2ODQxMA==", + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "body": "Is this ready to merge?", + "createdAt": "2020-04-24T22:42:08Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxOTU5MDYzNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@avaly Unfortunately, this pull request currently has a merge conflict 😥. Please update your PR branch to be up-to-date with respect to master. Have a nice day!\r\n", + "createdAt": "2020-04-26T17:29:15Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDE0MjM2Nw==", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "body": "Is anyone able to determine how likely this is to cause breaks for people using these types today? I’m a little concerned about issues like the scenario @LinusU identified. It seems to me that it isn’t strictly necessary to propagate `readonly` into the library typings just to be able to build up a query object by mutation: [playground](https://www.typescriptlang.org/play/#code/JYWwDg9gTgLgBAbzgVTAEwIYwKYEUCu2UAngDRwDGEAdtdhTOQPIBGAVvTAJJpwC+cAGZQIIOACIQNAOYQ0LcQChFVagGd4FADbBs1eAF44GAO4ZgmmnQYAKceICUAbhU0NceXCPbd+gHTyNgDkOBpBzorA+kSCGBTYcADK+CwAKtgaALJy2FqIinCFcAD6wGgAXHCsHAw8LkVCulpoAIyVGlBR0vVFgk1oAEwA-O0wndTdinyKMMRgCQBiUPgWqXMZXnBBGGBgWthBcAA+W-MYUEEuAPRXcKHwJhYAFpQQWvsMwDR365HRULF4nB0lkcnkEAUih0ugt+qNxpMGtR8CAWERYbkKnBkaiiD1ChAwDAvtQMFoAHIotFQDHNEbYql4yGFTA4WlYgAiWGw+LgEBgTyIXLZcLgwp5zL5dGyUGw4vZlXFvOEKxgqQw0jU8K6AG0ALq8kAYYhopaq9Wa+lm1brNT63lqFJcf6A7AKpIpEEwbJoXIOp0uuLYACCUCgxsqyTSGW9YPtU2Uqnc+HQ3My+Bg3N4RghDQAJFEKJVcw0ijjqe6WpK+KRJXmwPh3sXJQ0VasNVqthggtXa-mG2ons3S71lu3NZUgiwew0a3W1NgYMOR3BoRN3UFBBAIDOinP8-h1IvlyPy+jRS1jGpXuoYNWpi5IoI4DYU6zsOnMzg0H5642tA4+QNL6+w4HAb5phmWa-g27x+G2aodi40zAM+r6pjgn7QX+g6ASWLK5IuCQQZhUHfjB+CDn4Z40ghFpqP0yFPi+JEfmR2A-nmC4wHhkogUR4EYWxX4cb+3F+Gu0jskxqEsUJWHkXmh7cbxwGEWBrEKaJSlHjA1GMjSjEJoooFwLKGBoDQWjEKg74EEQxCVLZ3L2SQAA8Xo+rkAB8myaexaAuEAA). It’s nice to have a convenient contextual type, but if it causes pain for lots of users, it’s probably not worth it.", + "createdAt": "2020-04-27T18:02:27Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "__typename": "Reaction" + }, + { + "user": { + "login": "avaly", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDQ1MDE0NA==", + "author": { + "login": "avaly", + "__typename": "User" + }, + "body": "@andrewbranch Thanks for the feedback! I guess we can live with that workaround.\r\n\r\nI'll close this PR.", + "createdAt": "2020-04-28T08:08:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDQ1MDE2NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@avaly Thank you for submitting this PR! \n\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\n🔔 @CaselIT @alanmarcell @dante-101 @mcortesi @EnricoPicci @AJCStriker @julien-c @daprahamian @denys-bushulyak @BastienAr @sindbach @geraldinelemeur @various89 @angela-1 @lirbank @hector7 @floric @erikc5000 @Manc @jloveridge @ranguna @HosseinAgha @albertossilva @peterblazejewicz @LinusU @taxilian @xamgore — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44105/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\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", + "createdAt": "2020-04-28T08:08:20Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDQ1MDE2OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@avaly Thank you for submitting this PR! \n\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\n🔔 @CaselIT @alanmarcell @dante-101 @mcortesi @EnricoPicci @AJCStriker @julien-c @daprahamian @denys-bushulyak @BastienAr @sindbach @geraldinelemeur @various89 @angela-1 @lirbank @hector7 @floric @erikc5000 @Manc @jloveridge @ranguna @HosseinAgha @albertossilva @peterblazejewicz @LinusU @taxilian @xamgore — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44105/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\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", + "createdAt": "2020-04-28T08:08:21Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/mongodb/index.d.ts", + "additions": 12, + "deletions": 16, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/mongodb/test/collection/updateX.ts", + "additions": 31, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzY3OTAzMDI=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW40Njk1ODAw", + "name": "Done", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + }, + { + "id": "MDExOlByb2plY3RDYXJkMzcxNDk2MTU=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44105/derived.json b/packages/mergebot/src/_tests/fixtures/44105/derived.json new file mode 100644 index 0000000000..decb965cbc --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44105/derived.json @@ -0,0 +1,5 @@ +{ + "type": "remove", + "now": "2020-04-28T22:49:39.000Z", + "message": "PR is not active" +} diff --git a/packages/mergebot/src/_tests/fixtures/44105/mutations.json b/packages/mergebot/src/_tests/fixtures/44105/mutations.json new file mode 100644 index 0000000000..df76b3d41b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44105/mutations.json @@ -0,0 +1,10 @@ +[ + { + "mutation": "mutation ($input: DeleteProjectCardInput!) {\n deleteProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzcxNDk2MTU=" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44105/result.json b/packages/mergebot/src/_tests/fixtures/44105/result.json new file mode 100644 index 0000000000..25a0649e05 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44105/result.json @@ -0,0 +1,8 @@ +{ + "labels": [], + "responseComments": [], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": false, + "projectColumn": "*REMOVE*" +} diff --git a/packages/mergebot/src/_tests/fixtures/44256/_downloads.json b/packages/mergebot/src/_tests/fixtures/44256/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44256/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/44256/_files.json b/packages/mergebot/src/_tests/fixtures/44256/_files.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44256/_files.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/44256/_response.json b/packages/mergebot/src/_tests/fixtures/44256/_response.json new file mode 100644 index 0000000000..23741a5d14 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44256/_response.json @@ -0,0 +1,553 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDA5MjY0MTM2", + "title": "[@types/onfleet_node-onfleet] Fix mismatched type for verifyKey() ", + "updatedAt": "2020-04-30T02:15:41Z", + "lastEditedAt": null, + "author": { + "login": "Miikis", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-27T05:41:23Z", + "labels": { + "nodes": [ + { + "name": "Awaiting reviewer feedback", + "__typename": "Label" + }, + { + "name": "Other Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 44256, + "state": "MERGED", + "headRefOid": "0b87d3682a6ccb97d475a639c3640a6829a138c4", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-27T05:47:10Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-27T06:22:41Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-28T23:38:36Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-28T23:38:36Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-28T23:38:36Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-28T23:38:36Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-29T20:12:43Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-30T00:53:37Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-30T00:59:09Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-30T01:31:41Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "Miikis", + "__typename": "User" + }, + "createdAt": "2020-04-30T02:15:18Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "marcobeltempo", + "__typename": "User" + }, + "commit": { + "oid": "ab5d8bc79c53164e6d7fbd4d0512970fe5b3dcd3", + "abbreviatedOid": "ab5d8bc", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "marcobeltempo", + "__typename": "User" + }, + "createdAt": "2020-04-28T23:35:12Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "marcobeltempo", + "__typename": "User" + }, + "createdAt": "2020-04-28T23:36:44Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-04-28T23:38:33Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44256#pullrequestreview-402283957", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Miikis", + "__typename": "User" + }, + "commit": { + "oid": "0b87d3682a6ccb97d475a639c3640a6829a138c4", + "abbreviatedOid": "0b87d36", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "Miikis", + "__typename": "User" + }, + "createdAt": "2020-04-30T00:54:52Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-04-30T00:54:52Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44256#pullrequestreview-403137136", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Miikis", + "__typename": "User" + }, + "commit": { + "oid": "0b87d3682a6ccb97d475a639c3640a6829a138c4", + "abbreviatedOid": "0b87d36", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "Miikis", + "__typename": "User" + }, + "createdAt": "2020-04-30T00:59:06Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-04-30T00:59:06Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44256#pullrequestreview-403138416", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "marcobeltempo", + "__typename": "User" + }, + "commit": { + "oid": "0b87d3682a6ccb97d475a639c3640a6829a138c4", + "abbreviatedOid": "0b87d36", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-04-30T01:31:37Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44256#pullrequestreview-403147871", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-30T00:49:36Z", + "committedDate": "2020-04-30T00:49:36Z", + "pushedDate": null, + "abbreviatedOid": "d9d1c13", + "oid": "d9d1c13ac23f333ed900742dacd201a7c647a5a7", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/0b87d3682a6ccb97d475a639c3640a6829a138c4/checks?check_suite_id=640785447", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/0b87d3682a6ccb97d475a639c3640a6829a138c4/checks?check_suite_id=640785447", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681279047?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-27T05:34:15Z", + "committedDate": "2020-04-30T00:50:11Z", + "pushedDate": null, + "abbreviatedOid": "0b87d36", + "oid": "0b87d3682a6ccb97d475a639c3640a6829a138c4", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 11, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYxOTczNzk2Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #44256 | diff |\n| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 36.4 | 36.3 | -0.1% |\n| Type count | 2544 | 2556 | 0% |\n| Assignability cache size | 125 | 125 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 106 | 108 | +2% |\n| Identifiers in tests | 106 | 108 | +2% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 93.5 | 96.2 | +2.9% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 22.3% | 21.0% | |\n|     Worst duration (ms) | 128.9 | 129.3 | +0.3% |\n|     Worst identifier | [dummyTask](/DefinitelyTyped/DefinitelyTyped/blob/ca73c4419caa5999dd3c0c0016c469db177bd3e8/types/onfleet__node-onfleet/onfleet__node-onfleet-tests.ts#L47) | [number](/DefinitelyTyped/DefinitelyTyped/blob/c31ab1151d6db1a8e52281881e4e8234461a5e0b/types/onfleet__node-onfleet/onfleet__node-onfleet-tests.ts#L54) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 91.4 | 95.7 | +4.7% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 20.9% | 19.8% | -5.6% |\n|     Worst duration (ms) | 131.8 | 129.8 | -1.5% |\n|     Worst identifier | [id](/DefinitelyTyped/DefinitelyTyped/blob/ca73c4419caa5999dd3c0c0016c469db177bd3e8/types/onfleet__node-onfleet/onfleet__node-onfleet-tests.ts#L47) | [tasks](/DefinitelyTyped/DefinitelyTyped/blob/c31ab1151d6db1a8e52281881e4e8234461a5e0b/types/onfleet__node-onfleet/onfleet__node-onfleet-tests.ts#L44) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-04-27T05:47:10Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYxOTc1NDE1NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@Miikis Thank you for submitting this PR!\n\n🔔 @marcobeltempo — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44256/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\nIf no reviewer appears after a week, a DefinitelyTyped maintainer will review the PR instead.\r\n", + "createdAt": "2020-04-27T06:22:41Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDkwOTc1Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@Miikis One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-04-28T23:38:36Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDkwOTc1Mw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@Miikis Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 - keep an eye on this comment as I'll be updating it with information as things progress.\n\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can merge this once someone else signs off on it.\n\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ Most recent commit is approved by type definition owners, DT maintainers or others\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", + "createdAt": "2020-04-28T23:38:36Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDkwOTc1NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@Miikis One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-04-28T23:38:36Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDkwOTc1NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@Miikis Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 — keep an eye on this comment as I'll be updating it with information as things progress.\n\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can merge this once someone else signs off on it.\n\n🔔 @marcobeltempo — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44256/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\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\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", + "createdAt": "2020-04-28T23:38:36Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTQzNzUwNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@Miikis One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-04-29T20:12:43Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTU0ODUyOA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@Miikis The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681279047?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-30T00:53:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTU0OTk4Mw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@marcobeltempo Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-04-30T00:59:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTU1OTExNA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@Miikis Everything looks good here. Great job! I am ready to merge this PR on your behalf.\nIf you'd like that to happen, please post a comment with the exact text\n\n> Ready to merge\n\nand I'll merge it the next time I look at this PR.\n", + "createdAt": "2020-04-30T01:31:41Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTU3MTY0NQ==", + "author": { + "login": "Miikis", + "__typename": "User" + }, + "body": "Ready to merge", + "createdAt": "2020-04-30T02:15:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/onfleet__node-onfleet/onfleet.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/onfleet__node-onfleet/onfleet__node-onfleet-tests.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzcwNjQzMTc=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW40Njk1ODAw", + "name": "Done", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + }, + { + "id": "MDExOlByb2plY3RDYXJkMzcyMDUzOTQ=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI1", + "name": "Recently Merged", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44256/derived.json b/packages/mergebot/src/_tests/fixtures/44256/derived.json new file mode 100644 index 0000000000..d751a9ef17 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44256/derived.json @@ -0,0 +1,6 @@ +{ + "type": "remove", + "now": "2020-04-30T19:07:55.000Z", + "message": "PR is not active", + "isDraft": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44256/mutations.json b/packages/mergebot/src/_tests/fixtures/44256/mutations.json new file mode 100644 index 0000000000..d44d11a1b3 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44256/mutations.json @@ -0,0 +1,10 @@ +[ + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTU1OTExNA==" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44256/result.json b/packages/mergebot/src/_tests/fixtures/44256/result.json new file mode 100644 index 0000000000..25a0649e05 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44256/result.json @@ -0,0 +1,8 @@ +{ + "labels": [], + "responseComments": [], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": false, + "projectColumn": "*REMOVE*" +} diff --git a/packages/mergebot/src/_tests/fixtures/44267/_downloads.json b/packages/mergebot/src/_tests/fixtures/44267/_downloads.json new file mode 100644 index 0000000000..201c5fa972 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44267/_downloads.json @@ -0,0 +1,3 @@ +{ + "intercom-client": 49986 +} diff --git a/packages/mergebot/src/_tests/fixtures/44267/_files.json b/packages/mergebot/src/_tests/fixtures/44267/_files.json new file mode 100644 index 0000000000..2289524293 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44267/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/intercom-client/index.d.ts": "// Type definitions for intercom-client 2.11\n// Project: https://github.com/intercom/intercom-node\n// Definitions by: Jinesh Shah \n// Josef Hornych \n// Mikhail Monchak \n// Chris Doe \n// Malith Wijenayake \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.2\n/// \n\nimport {\n List as UserList,\n User,\n UserIdIdentifier,\n UserEmailIdentifier,\n UserIdentifier,\n CreateUpdateUser,\n} from './User';\nimport { List as LeadList, Lead, LeadIdentifier } from './Lead';\nimport { Visitor, VisitorIdentifier } from './Visitor';\nimport { CompanyIdentifier, List as CompanyList, Company } from './Company';\nimport { TagIdentifier, List as TagList, Tag, TagOper } from './Tag';\nimport { List as EventList, Event, ListParam as EventListParam } from './Event';\nimport { CreateMessage, Message } from './Message';\nimport { Scroll } from './Scroll';\nimport { IntercomError } from './IntercomError';\n\nimport { IncomingMessage } from 'http';\nimport request = require('request');\n\nexport { IntercomError };\n\nexport interface IdentityVerificationOptions {\n secretKey: string;\n identifier: string;\n}\n\nexport const IdentityVerification: {\n userHash(opts: IdentityVerificationOptions): string;\n};\n\nexport class Client {\n constructor(auth: { token: string } | { appId: string; appApiKey: string });\n constructor(username: string, password: string);\n\n users: Users;\n companies: Companies;\n tags: Tags;\n events: Events;\n contacts: Leads;\n leads: Leads;\n visitors: Visitors;\n messages: Messages;\n\n /**\n * client library also supports passing in `request` options\n * Note that certain request options (such as `json`, and certain `headers` names cannot be overridden).\n */\n useRequestOpts(options?: request.CoreOptions): this;\n}\n\nexport class ApiResponse extends IncomingMessage {\n body: T;\n}\n\nexport type callback = ((d: T) => void) | ((err: IntercomError, d: T) => void);\n\nexport class Users {\n create(user: Partial): Promise>;\n create(user: Partial, cb: callback>): void;\n\n update(user: UserIdentifier & Partial): Promise>;\n update(user: UserIdentifier & Partial, cb: callback>): void;\n\n find(identifier: UserIdIdentifier): Promise>;\n find(identifier: UserIdIdentifier, cb: callback>): void;\n find(identifier: UserEmailIdentifier): Promise>;\n find(identifier: UserEmailIdentifier, cb: callback>): void;\n find(identifier: UserIdentifier): Promise>;\n find(identifier: UserIdentifier, cb: callback>): void;\n\n list(): Promise>;\n list(cb: callback>): void;\n\n listBy(params: { tag_id?: string; segment_id?: string }): Promise>;\n listBy(params: { tag_id?: string; segment_id?: string }, cb: callback>): void;\n\n scroll: Scroll;\n\n archive(identifier: UserIdentifier): Promise>;\n archive(identifier: UserIdentifier, cb: callback>): void;\n\n requestPermanentDeletion(id: string): Promise<{ id: number }>;\n requestPermanentDeletion(id: string, cb: callback<{ id: number }>): void;\n\n requestPermanentDeletionByParams(identifier: UserIdentifier): Promise<{ id: number }>;\n requestPermanentDeletionByParams(identifier: UserIdentifier, cb: callback<{ id: number }>): void;\n}\n\nexport class Leads {\n create(lead: Partial): Promise>;\n create(lead: Partial, cb: callback>): void;\n\n update(lead: UserIdentifier & Partial): Promise>;\n update(lead: UserIdentifier & Partial, cb: callback>): void;\n\n list(): Promise>;\n list(cb: callback>): void;\n\n listBy(params: { email?: string; tag_id?: string; segment_id?: string }): Promise>;\n listBy(params: { email?: string; tag_id?: string; segment_id?: string }, cb: callback>): void;\n\n find(identifier: LeadIdentifier): Promise>;\n find(identifier: LeadIdentifier, cb: callback>): void;\n\n delete(id: string): Promise>;\n delete(id: string, cb: callback>): void;\n\n convert(params: { contact: LeadIdentifier; user: UserIdentifier }): Promise>;\n convert(params: { contact: LeadIdentifier; user: UserIdentifier }, cb: callback>): void;\n}\n\nexport class Visitors {\n update(visitor: VisitorIdentifier & Partial): Promise>;\n update(visitor: VisitorIdentifier & Partial, cb: callback>): void;\n\n find(identifier: VisitorIdentifier): Promise>;\n find(identifier: VisitorIdentifier, cb: callback>): void;\n\n delete(id: string): Promise>;\n delete(id: string, cb: callback>): void;\n\n convert(params: { identifier: VisitorIdentifier; type: 'lead' }): Promise>;\n convert(params: { identifier: VisitorIdentifier; type: 'user'; user: UserIdentifier }): Promise>;\n\n convert(\n params: {\n identifier: VisitorIdentifier;\n type: 'lead';\n },\n cb: callback>,\n ): void;\n convert(\n params: {\n identifier: VisitorIdentifier;\n type: 'user';\n user: UserIdentifier;\n },\n cb: callback>,\n ): void;\n}\n\nexport class Companies {\n create(company: CompanyIdentifier & Partial): Promise>;\n create(company: CompanyIdentifier & Partial, cb: callback>): void;\n\n update(company: CompanyIdentifier & Partial): Promise>;\n update(company: CompanyIdentifier & Partial, cb: callback>): void;\n\n find(identifier: CompanyIdentifier): Promise>;\n find(identifier: CompanyIdentifier, cb: callback>): void;\n\n list(): Promise>;\n list(cb: callback>): void;\n\n listBy(params: { tag_id?: string; segment_id?: string }): Promise>;\n listBy(params: { tag_id?: string; segment_id?: string }, cb: callback>): void;\n\n scroll: Scroll;\n\n archive(): Promise;\n}\n\nexport class Tags {\n create(tag: Partial): Promise>;\n create(tag: Partial, cb: callback>): void;\n\n tag(tagOper: TagOper): Promise>;\n tag(tagOper: TagOper, cb: callback>): void;\n\n untag(tagOper: TagOper): Promise>;\n untag(tagOper: TagOper, cb: callback>): void;\n\n delete(tag: TagIdentifier): Promise;\n delete(tag: TagIdentifier, cb: callback): void;\n\n list(): Promise>;\n list(cb: callback>): void;\n}\n\nexport class Events {\n create(event: Partial): Promise;\n create(event: Partial, cb: callback): void;\n\n listBy(params: EventListParam): Promise>;\n listBy(params: EventListParam, cb: callback>): void;\n}\n\nexport class Messages {\n create(message: Partial): Promise>;\n create(message: Partial, cb: callback>): void;\n}\n", + "ceb74b3471454b2f57cbe671e130028c680ffb88:types/intercom-client/index.d.ts": "// Type definitions for intercom-client 2.11\n// Project: https://github.com/intercom/intercom-node\n// Definitions by: Jinesh Shah \n// Josef Hornych \n// Mikhail Monchak \n// Chris Doe \n// Malith Wijenayake \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.2\n/// \n\nimport {\n List as UserList,\n User,\n UserIdIdentifier,\n UserEmailIdentifier,\n UserIdentifier,\n CreateUpdateUser,\n} from './User';\nimport { List as LeadList, Lead, LeadIdentifier } from './Lead';\nimport { Visitor, VisitorIdentifier } from './Visitor';\nimport { CompanyIdentifier, List as CompanyList, Company } from './Company';\nimport { TagIdentifier, List as TagList, Tag, TagOper } from './Tag';\nimport { List as EventList, Event, ListParam as EventListParam } from './Event';\nimport { CreateMessage, Message } from './Message';\nimport { Scroll } from './Scroll';\nimport { IntercomError } from './IntercomError';\n\nimport { IncomingMessage } from 'http';\nimport request = require('request');\n\nexport { IntercomError };\n\nexport interface IdentityVerificationOptions {\n secretKey: string;\n identifier: string;\n}\n\nexport const IdentityVerification: {\n userHash(opts: IdentityVerificationOptions): string;\n};\n\nexport class Client {\n constructor(auth: { token: string } | { appId: string; appApiKey: string });\n constructor(username: string, password: string);\n\n users: Users;\n companies: Companies;\n tags: Tags;\n events: Events;\n contacts: Leads;\n leads: Leads;\n visitors: Visitors;\n messages: Messages;\n\n /**\n * client library also supports passing in `request` options\n * Note that certain request options (such as `json`, and certain `headers` names cannot be overridden).\n */\n useRequestOpts(options?: request.CoreOptions): this;\n}\n\nexport class ApiResponse extends IncomingMessage {\n body: T;\n}\n\nexport type callback = ((d: T) => void) | ((err: IntercomError, d: T) => void);\n\nexport class Users {\n create(user: Partial): Promise>;\n create(user: Partial, cb: callback>): void;\n\n update(user: UserIdentifier & Partial): Promise>;\n update(user: UserIdentifier & Partial, cb: callback>): void;\n\n find(identifier: UserIdIdentifier): Promise>;\n find(identifier: UserIdIdentifier, cb: callback>): void;\n find(identifier: UserEmailIdentifier): Promise>;\n find(identifier: UserEmailIdentifier, cb: callback>): void;\n find(identifier: UserIdentifier): Promise>;\n find(identifier: UserIdentifier, cb: callback>): void;\n\n list(): Promise>;\n list(cb: callback>): void;\n\n listBy(params: { tag_id?: string; segment_id?: string }): Promise>;\n listBy(params: { tag_id?: string; segment_id?: string }, cb: callback>): void;\n\n scroll: Scroll;\n\n archive(identifier: UserIdentifier): Promise>;\n archive(identifier: UserIdentifier, cb: callback>): void;\n\n requestPermanentDeletion(id: string): Promise<{ id: number }>;\n requestPermanentDeletion(id: string, cb: callback<{ id: number }>): void;\n\n requestPermanentDeletionByParams(identifier: UserIdentifier): Promise<{ id: number }>;\n requestPermanentDeletionByParams(identifier: UserIdentifier, cb: callback<{ id: number }>): void;\n}\n\nexport class Leads {\n create(lead: Partial): Promise>;\n create(lead: Partial, cb: callback>): void;\n\n update(lead: UserIdentifier & Partial): Promise>;\n update(lead: UserIdentifier & Partial, cb: callback>): void;\n\n list(): Promise>;\n list(cb: callback>): void;\n\n listBy(params: { email?: string; tag_id?: string; segment_id?: string }): Promise>;\n listBy(params: { email?: string; tag_id?: string; segment_id?: string }, cb: callback>): void;\n\n find(identifier: LeadIdentifier): Promise>;\n find(identifier: LeadIdentifier, cb: callback>): void;\n\n delete(id: string): Promise>;\n delete(id: string, cb: callback>): void;\n\n convert(params: { contact: LeadIdentifier; user: UserIdentifier }): Promise>;\n convert(params: { contact: LeadIdentifier; user: UserIdentifier }, cb: callback>): void;\n}\n\nexport class Visitors {\n update(visitor: VisitorIdentifier & Partial): Promise>;\n update(visitor: VisitorIdentifier & Partial, cb: callback>): void;\n\n find(identifier: VisitorIdentifier): Promise>;\n find(identifier: VisitorIdentifier, cb: callback>): void;\n\n delete(id: string): Promise>;\n delete(id: string, cb: callback>): void;\n\n convert(params: { identifier: VisitorIdentifier; type: 'lead' }): Promise>;\n convert(params: { identifier: VisitorIdentifier; type: 'user'; user: UserIdentifier }): Promise>;\n\n convert(\n params: {\n identifier: VisitorIdentifier;\n type: 'lead';\n },\n cb: callback>,\n ): void;\n convert(\n params: {\n identifier: VisitorIdentifier;\n type: 'user';\n user: UserIdentifier;\n },\n cb: callback>,\n ): void;\n}\n\nexport class Companies {\n create(company: CompanyIdentifier & Partial): Promise>;\n create(company: CompanyIdentifier & Partial, cb: callback>): void;\n\n update(company: CompanyIdentifier & Partial): Promise>;\n update(company: CompanyIdentifier & Partial, cb: callback>): void;\n\n find(identifier: CompanyIdentifier): Promise>;\n find(identifier: CompanyIdentifier, cb: callback>): void;\n\n list(): Promise>;\n list(cb: callback>): void;\n\n listBy(params: { tag_id?: string; segment_id?: string }): Promise>;\n listBy(params: { tag_id?: string; segment_id?: string }, cb: callback>): void;\n\n scroll: Scroll;\n\n archive(): Promise;\n}\n\nexport class Tags {\n create(tag: Partial): Promise>;\n create(tag: Partial, cb: callback>): void;\n\n tag(tagOper: TagOper): Promise>;\n tag(tagOper: TagOper, cb: callback>): void;\n\n untag(tagOper: TagOper): Promise>;\n untag(tagOper: TagOper, cb: callback>): void;\n\n delete(tag: TagIdentifier): Promise;\n delete(tag: TagIdentifier, cb: callback): void;\n\n list(): Promise>;\n list(cb: callback>): void;\n}\n\nexport class Events {\n create(event: Partial): Promise;\n create(event: Partial, cb: callback): void;\n\n listBy(params: EventListParam): Promise>;\n listBy(params: EventListParam, cb: callback>): void;\n}\n\nexport class Messages {\n create(message: Partial): Promise>;\n create(message: Partial, cb: callback>): void;\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44267/_response.json b/packages/mergebot/src/_tests/fixtures/44267/_response.json new file mode 100644 index 0000000000..f56ec62c6d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44267/_response.json @@ -0,0 +1,269 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDA5NTQyNDky", + "title": "Added Users find overrides for User and/or UserList response", + "lastEditedAt": null, + "author": { + "login": "ErikMartensson", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-27T14:35:23Z", + "labels": { + "nodes": [ + { + "name": "Awaiting reviewer feedback", + "__typename": "Label" + }, + { + "name": "Other Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44267, + "state": "OPEN", + "headRefOid": "ceb74b3471454b2f57cbe671e130028c680ffb88", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-27T14:39:40Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-27T15:22:30Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-28T06:48:41Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "malithrw", + "__typename": "User" + }, + "commit": { + "oid": "ceb74b3471454b2f57cbe671e130028c680ffb88", + "abbreviatedOid": "ceb74b3", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-04-28T06:48:36Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44267#pullrequestreview-401541696", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/ceb74b3471454b2f57cbe671e130028c680ffb88/checks?check_suite_id=632267061", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/ceb74b3471454b2f57cbe671e130028c680ffb88/checks?check_suite_id=632267061", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680136766?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-27T14:11:50Z", + "committedDate": "2020-04-27T14:14:25Z", + "pushedDate": "2020-04-27T14:15:25Z", + "abbreviatedOid": "ceb74b3", + "oid": "ceb74b3471454b2f57cbe671e130028c680ffb88", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDAyOTI2Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #44267 | diff |\n| ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 65.2 | 65.0 | -0.3% |\n| Type count | 9630 | 9637 | 0% |\n| Assignability cache size | 3188 | 3188 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 6 | 6 | 0% |\n| Identifiers in tests | 6 | 6 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 366.1 | 363.7 | -0.7% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 14.7% | 16.6% | |\n|     Worst duration (ms) | 389.2 | 390.0 | +0.2% |\n|     Worst identifier | [identifier](/DefinitelyTyped/DefinitelyTyped/blob/422f32b9d4b616d7f138f93f5165438bdd44c05d/types/intercom-client/intercom-client-tests.ts#L3) | [identifier](/DefinitelyTyped/DefinitelyTyped/blob/e6b2ee2313ad96a1948109d191fbd19382b1e706/types/intercom-client/intercom-client-tests.ts#L3) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 336.3 | 353.6 | +5.1% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 11.1% | 9.4% | -15.5% |\n|     Worst duration (ms) | 353.4 | 372.8 | +5.5% |\n|     Worst identifier | [IdentityVerification](/DefinitelyTyped/DefinitelyTyped/blob/422f32b9d4b616d7f138f93f5165438bdd44c05d/types/intercom-client/intercom-client-tests.ts#L3) | [intercom](/DefinitelyTyped/DefinitelyTyped/blob/e6b2ee2313ad96a1948109d191fbd19382b1e706/types/intercom-client/intercom-client-tests.ts#L3) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-04-27T14:39:40Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDA1NDQ0Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\r\n@ErikMartensson Thank you for submitting this PR!\n\n🔔 @jineshshah36 @peping @mikhail-monchak @cdoe @malithrw — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44267/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\nIf no reviewer appears after a week, a DefinitelyTyped maintainer will review the PR instead.\r\n", + "createdAt": "2020-04-27T15:22:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDQxNTE4Mw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@ErikMartensson Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 - keep an eye on this comment as I'll be updating it with information as things progress.\n\n This PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Have you considered [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#testing) 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\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\n\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#testing)\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": "2020-04-28T06:48:41Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/intercom-client/User.d.ts", + "additions": 5, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/intercom-client/index.d.ts", + "additions": 15, + "deletions": 4, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzcxMDA5NTQ=", + "project": { + "id": "MDc6UHJvamVjdDE0NDQ5NTY=", + "number": 4, + "name": "Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW4yNTYxMzU3", + "name": "Waiting for Reviewers", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + }, + { + "id": "MDExOlByb2plY3RDYXJkMzcxNDUyODg=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44267/derived.json b/packages/mergebot/src/_tests/fixtures/44267/derived.json new file mode 100644 index 0000000000..7560019320 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44267/derived.json @@ -0,0 +1,50 @@ +{ + "type": "info", + "now": "2020-04-30T22:04:05.517Z", + "pr_number": 44267, + "author": "ErikMartensson", + "headCommitOid": "ceb74b3471454b2f57cbe671e130028c680ffb88", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-27T14:15:25.000Z", + "lastActivityDate": "2020-04-28T06:48:36.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "intercom-client", + "kind": "edit", + "files": [ + { + "path": "types/intercom-client/User.d.ts", + "kind": "definition" + }, + { + "path": "types/intercom-client/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "jineshshah36", + "peping", + "mikhail-monchak", + "cdoe", + "malithrw" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "malithrw", + "date": "2020-04-28T06:48:36.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44267/mutations.json b/packages/mergebot/src/_tests/fixtures/44267/mutations.json new file mode 100644 index 0000000000..bf397c4576 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44267/mutations.json @@ -0,0 +1,51 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDQxNTE4Mw==", + "body": "@ErikMartensson 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* `intercom-client` — [on npm](https://www.npmjs.com/package/intercom-client), [on unpkg](https://unpkg.com/browse/intercom-client@latest/)\n - owner-approval: @malithrw\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=44267&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----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw5MDUzMzQwOTU=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDA5NTQyNDky" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw1ODYxNzcwNjM=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDA5NTQyNDky" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzcxNDUyODg=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDA5NTQyNDky", + "body": "Hey @ErikMartensson,\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44267/result.json b/packages/mergebot/src/_tests/fixtures/44267/result.json new file mode 100644 index 0000000000..f06852f7db --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44267/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Needs Maintainer Review", + "labels": [ + "Owner Approved", + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @ErikMartensson,\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": "@ErikMartensson 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* `intercom-client` — [on npm](https://www.npmjs.com/package/intercom-client), [on unpkg](https://unpkg.com/browse/intercom-client@latest/)\n - owner-approval: @malithrw\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=44267&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----------------------\n... diagnostics scrubbed ..." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44282/_downloads.json b/packages/mergebot/src/_tests/fixtures/44282/_downloads.json new file mode 100644 index 0000000000..5d4d664b4e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44282/_downloads.json @@ -0,0 +1,3 @@ +{ + "benchmark": 97099 +} diff --git a/packages/mergebot/src/_tests/fixtures/44282/_files.json b/packages/mergebot/src/_tests/fixtures/44282/_files.json new file mode 100644 index 0000000000..62f7713d9d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44282/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/benchmark/index.d.ts": "// Type definitions for Benchmark v1.0.0\n// Project: http://benchmarkjs.com\n// Definitions by: Asana \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n\ndeclare class Benchmark {\n", + "25794304acf8c1fd70712bd068beb07b0e09755e:types/benchmark/index.d.ts": "// Type definitions for Benchmark v1.0.0\n// Project: https://benchmarkjs.com\n// Definitions by: Asana \n// Charlie Fish \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n\ndeclare class Benchmark {\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44282/_response.json b/packages/mergebot/src/_tests/fixtures/44282/_response.json new file mode 100644 index 0000000000..c4630da542 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44282/_response.json @@ -0,0 +1,392 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDA5ODAxMzk2", + "title": "[benchmark] Adding typings for event.target", + "lastEditedAt": "2020-04-28T12:58:15Z", + "author": { + "login": "fishcharlie", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-27T23:33:23Z", + "labels": { + "nodes": [ + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "No Other Owners", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "mergeable": "MERGEABLE", + "number": 44282, + "state": "OPEN", + "headRefOid": "25794304acf8c1fd70712bd068beb07b0e09755e", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "4e010246ff699217c93de8ffcd9442e8b680011b", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "c8c42c25d9b7dd4cd04d8377d91c2a29d584f357", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "f68d56f259f89dbd35f6d72a82ad518feb2797e4", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "23fb84387b09e6dcc9bd34c45638d7d345486b15", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "c93970cce55dabaa19781421530c8a4da9892cfc", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "25794304acf8c1fd70712bd068beb07b0e09755e", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 6, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4e010246ff699217c93de8ffcd9442e8b680011b/checks?check_suite_id=633760336", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4e010246ff699217c93de8ffcd9442e8b680011b/checks?check_suite_id=633760336", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "FAILURE", + "contexts": [ + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680340548?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-27T23:27:10Z", + "committedDate": "2020-04-27T23:27:10Z", + "pushedDate": "2020-04-27T23:27:18Z", + "abbreviatedOid": "4e01024", + "oid": "4e010246ff699217c93de8ffcd9442e8b680011b", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-27T23:44:03Z", + "committedDate": "2020-04-27T23:44:03Z", + "pushedDate": null, + "abbreviatedOid": "c8c42c2", + "oid": "c8c42c25d9b7dd4cd04d8377d91c2a29d584f357", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-27T23:44:20Z", + "committedDate": "2020-04-27T23:44:20Z", + "pushedDate": null, + "abbreviatedOid": "f68d56f", + "oid": "f68d56f259f89dbd35f6d72a82ad518feb2797e4", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-27T23:44:29Z", + "committedDate": "2020-04-27T23:44:29Z", + "pushedDate": null, + "abbreviatedOid": "23fb843", + "oid": "23fb84387b09e6dcc9bd34c45638d7d345486b15", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-27T23:46:49Z", + "committedDate": "2020-04-27T23:46:49Z", + "pushedDate": null, + "abbreviatedOid": "c93970c", + "oid": "c93970cce55dabaa19781421530c8a4da9892cfc", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/25794304acf8c1fd70712bd068beb07b0e09755e/checks?check_suite_id=633799690", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/25794304acf8c1fd70712bd068beb07b0e09755e/checks?check_suite_id=633799690", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680345779?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-27T23:57:13Z", + "committedDate": "2020-04-27T23:57:13Z", + "pushedDate": "2020-04-27T23:58:24Z", + "abbreviatedOid": "2579430", + "oid": "25794304acf8c1fd70712bd068beb07b0e09755e", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDI4OTg3OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@fishcharlie Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 - keep an eye on this comment as I'll be updating it with information as things progress.\n\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can merge this once someone else signs off on it.\n\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ Most recent commit is approved by type definition owners, DT maintainers or others\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", + "createdAt": "2020-04-27T23:33:31Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDI4OTg5NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@fishcharlie The Travis CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4e010246ff699217c93de8ffcd9442e8b680011b/checks?check_suite_id=633760336).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-27T23:33:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDI5Mzc1Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #44282 | diff |\n| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 80.7 | 80.8 | +0.1% |\n| Type count | 9273 | 9276 | 0% |\n| Assignability cache size | 33144 | 33144 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 205 | 205 | 0% |\n| Identifiers in tests | 205 | 205 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 304.9 | 305.9 | +0.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 11.4% | 11.8% | |\n|     Worst duration (ms) | 390.5 | 415.4 | +6.4% |\n|     Worst identifier | [document](/DefinitelyTyped/DefinitelyTyped/blob/d562e5ee9fb6da1146dcb19fad3aaceec3843b32/types/benchmark/benchmark-tests.ts#L152) | [run](/DefinitelyTyped/DefinitelyTyped/blob/6d4b0f63d605041e009a22a917a94e50b5d7828a/types/benchmark/benchmark-tests.ts#L257) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 294.0 | 292.3 | -0.6% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 11.6% | 10.6% | -8.7% |\n|     Worst duration (ms) | 376.0 | 383.3 | +1.9% |\n|     Worst identifier | [lastChild](/DefinitelyTyped/DefinitelyTyped/blob/d562e5ee9fb6da1146dcb19fad3aaceec3843b32/types/benchmark/benchmark-tests.ts#L156) | [createElement](/DefinitelyTyped/DefinitelyTyped/blob/6d4b0f63d605041e009a22a917a94e50b5d7828a/types/benchmark/benchmark-tests.ts#L152) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-04-27T23:47:19Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDMwNTkyMA==", + "author": { + "login": "fishcharlie", + "__typename": "User" + }, + "body": "@RyanCavanaugh\r\n\r\n@typescript-bot - `Please bother @RyanCavanaugh if I appear to be misbehaving.`\r\n\r\nIt looks like @typescript-bot didn't update this comment https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44282#issuecomment-620289878 or the labels on this PR now that all checks are now passing.\r\n\r\nAnyway to have @typescript-bot relook at this PR (since it didn't automatically)?", + "createdAt": "2020-04-28T00:28:11Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDMwNjM2Nw==", + "author": { + "login": "fishcharlie", + "__typename": "User" + }, + "body": "This also doesn't make sense at all... am I allowed to merge this? Not all the items are green, but it says they are.\r\n\r\n\"image\"", + "createdAt": "2020-04-28T00:29:59Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/benchmark/benchmark-tests.ts", + "additions": 34, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/benchmark/index.d.ts", + "additions": 37, + "deletions": 2, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzcxMzAyNTE=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44282/derived.json b/packages/mergebot/src/_tests/fixtures/44282/derived.json new file mode 100644 index 0000000000..e831dac6db --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44282/derived.json @@ -0,0 +1,39 @@ +{ + "type": "info", + "now": "2020-04-28T04:46:24.000Z", + "pr_number": 44282, + "author": "fishcharlie", + "headCommitOid": "25794304acf8c1fd70712bd068beb07b0e09755e", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-27T23:58:24.000Z", + "lastActivityDate": "2020-04-28T00:29:59.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "benchmark", + "kind": "edit", + "files": [ + { + "path": "types/benchmark/benchmark-tests.ts", + "kind": "test" + }, + { + "path": "types/benchmark/index.d.ts", + "kind": "definition" + } + ], + "owners": [], + "addedOwners": [ + "fishcharlie" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44282/mutations.json b/packages/mergebot/src/_tests/fixtures/44282/mutations.json new file mode 100644 index 0000000000..4ec2ed4431 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44282/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDI4OTg3OA==", + "body": "@fishcharlie 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* `benchmark` — [on npm](https://www.npmjs.com/package/benchmark), [on unpkg](https://unpkg.com/browse/benchmark@latest/)\n - 1 added owner: ✎@fishcharlie\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44282&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, 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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyNDk1OTc2ODI5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDA5ODAxMzk2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDA5ODAxMzk2", + "body": "🔔 @fishcharlie — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44282/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44282/result.json b/packages/mergebot/src/_tests/fixtures/44282/result.json new file mode 100644 index 0000000000..d999328b1c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44282/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Edits Owners", + "No Other Owners" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@fishcharlie 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* `benchmark` — [on npm](https://www.npmjs.com/package/benchmark), [on unpkg](https://unpkg.com/browse/benchmark@latest/)\n - 1 added owner: ✎@fishcharlie\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44282&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, 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 ..." + }, + { + "tag": "pinging-reviewers-others", + "status": "🔔 @fishcharlie — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44282/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44288/_downloads.json b/packages/mergebot/src/_tests/fixtures/44288/_downloads.json new file mode 100644 index 0000000000..7d68b4795e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44288/_downloads.json @@ -0,0 +1,3 @@ +{ + "react-bootstrap-table2-paginator": 8976 +} diff --git a/packages/mergebot/src/_tests/fixtures/44288/_files.json b/packages/mergebot/src/_tests/fixtures/44288/_files.json new file mode 100644 index 0000000000..a0b011edcb --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44288/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/react-bootstrap-table2-paginator/index.d.ts": "// Type definitions for react-bootstrap-table2-paginator 2.1\n// Project: https://github.com/react-bootstrap-table/react-bootstrap-table2#readme\n// Definitions by: Wlad Meixner \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.0\n\n// documentation taken from https://react-bootstrap-table.github.io/react-bootstrap-table2/docs/table-props.html\n\nimport { PaginationOptions, BootstrapTableProps } from 'react-bootstrap-table-next';\n\nexport interface PaginationCtxOptions {\n options?: PaginationOptions;\n}\n\n/**\n * declaration for table pagination sub module and factory\n */\ndeclare function paginationFactory(options: PaginationOptions): PaginationCtxOptions;\n\nexport default paginationFactory;\n\ninterface PaginationChildProps extends PaginationOptions {\n tableId?: string;\n bootstrap4?: boolean;\n}\n\n/**\n * Pagination context provider\n */\nexport function PaginationProvider(props: {\n pagination?: PaginationCtxOptions;\n children: (childProps: {\n paginationProps: PaginationChildProps;\n paginationTableProps: BootstrapTableProps;\n }) => React.ReactElement | null;\n}): React.ReactElement | null;\n\nexport const PaginationTotalStandalone: React.FC;\nexport const PaginationListStandalone: React.FC;\n\nexport interface SizePerPageDropdownStandaloneProps extends PaginationChildProps {\n open?: boolean;\n hidden?: boolean;\n btnContextual?: boolean;\n variation?: 'dropdown' | 'dropup';\n className?: string;\n}\n\nexport const SizePerPageDropdownStandalone: React.FC;\n", + "05ee6f2784d694258f61e7a93a95e758ea29ad9d:types/react-bootstrap-table2-paginator/index.d.ts": "// Type definitions for react-bootstrap-table2-paginator 2.1\n// Project: https://github.com/react-bootstrap-table/react-bootstrap-table2#readme\n// Definitions by: Wlad Meixner \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.0\n\n// documentation taken from https://react-bootstrap-table.github.io/react-bootstrap-table2/docs/table-props.html\n\nimport { PaginationOptions, BootstrapTableProps } from 'react-bootstrap-table-next';\n\nexport interface PaginationCtxOptions {\n options?: PaginationOptions;\n}\n\n/**\n * declaration for table pagination sub module and factory\n */\ndeclare function paginationFactory(options: PaginationOptions): PaginationCtxOptions;\n\nexport default paginationFactory;\n\ninterface PaginationChildProps extends PaginationOptions {\n tableId?: string;\n bootstrap4?: boolean;\n}\n\n/**\n * Pagination context provider\n */\nexport function PaginationProvider(props: {\n pagination?: PaginationCtxOptions;\n children: (childProps: {\n paginationProps: PaginationChildProps;\n paginationTableProps: BootstrapTableProps;\n }) => React.ReactElement | null;\n}): React.ReactElement | null;\n\nexport const PaginationTotalStandalone: React.FC;\nexport const PaginationListStandalone: React.FC;\n\nexport interface SizePerPageDropdownStandaloneProps extends PaginationChildProps {\n open?: boolean;\n hidden?: boolean;\n btnContextual?: boolean;\n variation?: 'dropdown' | 'dropup';\n className?: string;\n}\n\nexport const SizePerPageDropdownStandalone: React.FC;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44288/_response.json b/packages/mergebot/src/_tests/fixtures/44288/_response.json new file mode 100644 index 0000000000..e097d90f98 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44288/_response.json @@ -0,0 +1,204 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDA5ODgwMDEx", + "title": "react-bootstrap-table2-paginator: Fix type for PaginationProvider pagination prop, and add test.", + "lastEditedAt": "2020-04-28T18:57:51Z", + "author": { + "login": "nomatteus", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-28T04:48:25Z", + "labels": { + "nodes": [ + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "The Travis CI build failed", + "__typename": "Label" + }, + { + "name": "Where is Travis?", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44288, + "state": "OPEN", + "headRefOid": "05ee6f2784d694258f61e7a93a95e758ea29ad9d", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "05ee6f2784d694258f61e7a93a95e758ea29ad9d", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/05ee6f2784d694258f61e7a93a95e758ea29ad9d/checks?check_suite_id=634263642", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/05ee6f2784d694258f61e7a93a95e758ea29ad9d/checks?check_suite_id=634263642", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680403157?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-28T04:46:03Z", + "committedDate": "2020-04-28T04:46:03Z", + "pushedDate": "2020-04-28T04:46:31Z", + "abbreviatedOid": "05ee6f2", + "oid": "05ee6f2784d694258f61e7a93a95e758ea29ad9d", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 2, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDM3ODUyNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@nomatteus Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 — keep an eye on this comment as I'll be updating it with information as things progress.\n\n\n## Code Reviews\n\nBecause this PR edits the configuration file, it can be merged once it's reviewed by a DT maintainer.\n\n🔔 @gosticks — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44288/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\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#testing)\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": "2020-04-28T04:48:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDM4MjU0OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #44288 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 127.2 | 128.7 | +1.2% |\n| Type count | 23995 | 24122 | +1% |\n| Assignability cache size | 68802 | 68895 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 92 | 117 | +27% |\n| Identifiers in tests | 92 | 117 | +27% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 623.8 | 623.1 | -0.1% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.5% | 9.0% | |\n|     Worst duration (ms) | 767.4 | 842.7 | +9.8% |\n|     Worst identifier | [span](/DefinitelyTyped/DefinitelyTyped/blob/d562e5ee9fb6da1146dcb19fad3aaceec3843b32/types/react-bootstrap-table2-paginator/react-bootstrap-table2-paginator-tests.tsx#L45) | [productColumns](/DefinitelyTyped/DefinitelyTyped/blob/a84084d0da016de47c50b94376c11dceabe2703d/types/react-bootstrap-table2-paginator/react-bootstrap-table2-paginator-tests.tsx#L88) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 618.7 | 608.8 | -1.6% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.1% | 8.3% | -7.8% |\n|     Worst duration (ms) | 703.6 | 757.1 | +7.6% |\n|     Worst identifier | [columns](/DefinitelyTyped/DefinitelyTyped/blob/d562e5ee9fb6da1146dcb19fad3aaceec3843b32/types/react-bootstrap-table2-paginator/react-bootstrap-table2-paginator-tests.tsx#L88) | [columns](/DefinitelyTyped/DefinitelyTyped/blob/a84084d0da016de47c50b94376c11dceabe2703d/types/react-bootstrap-table2-paginator/react-bootstrap-table2-paginator-tests.tsx#L88) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-04-28T05:03:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/react-bootstrap-table2-paginator/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react-bootstrap-table2-paginator/react-bootstrap-table2-paginator-tests.tsx", + "additions": 25, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzcxNDA3Nzc=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44288/derived.json b/packages/mergebot/src/_tests/fixtures/44288/derived.json new file mode 100644 index 0000000000..a8ef171597 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44288/derived.json @@ -0,0 +1,39 @@ +{ + "type": "info", + "now": "2020-04-28T09:34:31.000Z", + "pr_number": 44288, + "author": "nomatteus", + "headCommitOid": "05ee6f2784d694258f61e7a93a95e758ea29ad9d", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-28T04:46:31.000Z", + "lastActivityDate": "2020-04-28T04:48:25.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "react-bootstrap-table2-paginator", + "kind": "edit", + "files": [ + { + "path": "types/react-bootstrap-table2-paginator/index.d.ts", + "kind": "definition" + }, + { + "path": "types/react-bootstrap-table2-paginator/react-bootstrap-table2-paginator-tests.tsx", + "kind": "test" + } + ], + "owners": [ + "gosticks" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44288/mutations.json b/packages/mergebot/src/_tests/fixtures/44288/mutations.json new file mode 100644 index 0000000000..d021e4a6a4 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44288/mutations.json @@ -0,0 +1,20 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDM3ODUyNQ==", + "body": "@nomatteus 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* `react-bootstrap-table2-paginator` — [on npm](https://www.npmjs.com/package/react-bootstrap-table2-paginator), [on unpkg](https://unpkg.com/browse/react-bootstrap-table2-paginator@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44288&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, 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" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDA5ODgwMDEx", + "body": "🔔 @gosticks — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44288/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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44288/result.json b/packages/mergebot/src/_tests/fixtures/44288/result.json new file mode 100644 index 0000000000..f757229892 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44288/result.json @@ -0,0 +1,17 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [], + "responseComments": [ + { + "tag": "welcome", + "status": "@nomatteus 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* `react-bootstrap-table2-paginator` — [on npm](https://www.npmjs.com/package/react-bootstrap-table2-paginator), [on unpkg](https://unpkg.com/browse/react-bootstrap-table2-paginator@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44288&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, 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 ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @gosticks — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44288/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44290/_downloads.json b/packages/mergebot/src/_tests/fixtures/44290/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44290/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/44290/_files.json b/packages/mergebot/src/_tests/fixtures/44290/_files.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44290/_files.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/44290/_response.json b/packages/mergebot/src/_tests/fixtures/44290/_response.json new file mode 100644 index 0000000000..a4aec5721e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44290/_response.json @@ -0,0 +1,353 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDA5OTQ0MzU2", + "title": "Add Nova editor extension types", + "lastEditedAt": null, + "author": { + "login": "apexskier", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-28T07:49:29Z", + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + }, + { + "name": "The Travis CI build failed", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": true, + "mergeable": "MERGEABLE", + "number": 44290, + "state": "OPEN", + "headRefOid": "70a3b39ddd810f2078743ecdbcf9ed95bf1f6a66", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "023103f7c3262b1eea08721cc5d7516851e31ad1", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "2fe056f00a05fb66c5590c26accfacefaeb3b90c", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "77441336707b531807f2d6e0eb9c1756033bbdfc", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestReview", + "author": { + "login": "orta", + "__typename": "User" + }, + "state": "COMMENTED" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "70a3b39ddd810f2078743ecdbcf9ed95bf1f6a66", + "__typename": "Commit" + } + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "orta", + "__typename": "User" + }, + "commit": { + "oid": "77441336707b531807f2d6e0eb9c1756033bbdfc", + "abbreviatedOid": "7744133", + "__typename": "Commit" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2020-04-28T13:56:31Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44290#pullrequestreview-401861064", + "__typename": "PullRequestReview", + "comments": { + "nodes": [] + } + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 4, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-28T07:37:28Z", + "committedDate": "2020-04-28T07:37:28Z", + "pushedDate": null, + "abbreviatedOid": "023103f", + "oid": "023103f7c3262b1eea08721cc5d7516851e31ad1", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-28T07:42:18Z", + "committedDate": "2020-04-28T07:42:18Z", + "pushedDate": null, + "abbreviatedOid": "2fe056f", + "oid": "2fe056f00a05fb66c5590c26accfacefaeb3b90c", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/77441336707b531807f2d6e0eb9c1756033bbdfc/checks?check_suite_id=634606400", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/77441336707b531807f2d6e0eb9c1756033bbdfc/checks?check_suite_id=634606400", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "FAILURE", + "contexts": [ + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680442657?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-28T07:48:09Z", + "committedDate": "2020-04-28T07:48:09Z", + "pushedDate": "2020-04-28T07:48:23Z", + "abbreviatedOid": "7744133", + "oid": "77441336707b531807f2d6e0eb9c1756033bbdfc", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/70a3b39ddd810f2078743ecdbcf9ed95bf1f6a66/checks?check_suite_id=635608510", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/70a3b39ddd810f2078743ecdbcf9ed95bf1f6a66/checks?check_suite_id=635608510", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "FAILURE", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "FAILURE", + "contexts": [ + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680581637?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-28T13:56:38Z", + "committedDate": "2020-04-28T13:56:38Z", + "pushedDate": "2020-04-28T13:56:50Z", + "abbreviatedOid": "70a3b39", + "oid": "70a3b39ddd810f2078743ecdbcf9ed95bf1f6a66", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDQ0MTE3NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@apexskier Thank you for submitting this PR! \n\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n- [nova-editor](https://www.npmjs.com/package/nova-editor)\n\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have passed\n * ❌ Only a DT maintainer can approve changes when there are new packages added\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": "2020-04-28T07:49:36Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDQ0MjgxMg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\nThese typings are for a package that doesn’t yet exist on master, so I don’t have anything to compare against yet! In the future, I’ll be able to compare PRs to nova-editor with its source on master.\n\n\n
\nComparison details 📊\n\n| **Batch compilation** | |\n| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| Type count | 2239 |\n| Assignability cache size | 114 |\n| | |\n| **Language service measurements** | |\n| Samples taken | 24 |\n| Identifiers in tests | 24 |\n| **`getCompletionsAtPosition`** | |\n|     Mean duration (ms) | 71.9 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 18.1% |\n|     Worst duration (ms) | 97.6 |\n|     Worst identifier | [stop](/DefinitelyTyped/DefinitelyTyped/blob/750111db2ad104759f66f50e499d83451e115ef1/types/nova-editor/nova-editor-tests.ts#L24) |\n| **`getQuickInfoAtPosition`** | |\n|     Mean duration (ms) | 69.6 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 13.9% |\n|     Worst duration (ms) | 82.4 |\n|     Worst identifier | [client](/DefinitelyTyped/DefinitelyTyped/blob/750111db2ad104759f66f50e499d83451e115ef1/types/nova-editor/nova-editor-tests.ts#L24) |\n| | |\n| **System information** | |\n| Node version | v12.16.1 |\n| CPU count | 2 |\n| CPU speed | 2.095 GHz |\n| CPU model | Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz |\n| CPU Architecture | x64 |\n| Memory | 6.8 GiB |\n| Platform | linux |\n| Release | 4.15.0-1077-azure |\n\n\n
\n", + "createdAt": "2020-04-28T07:53:11Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDYyNDA5OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@apexskier The Travis CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/77441336707b531807f2d6e0eb9c1756033bbdfc/checks?check_suite_id=634606400).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-28T13:56:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/nova-editor/index.d.ts", + "additions": 223, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/nova-editor/nova-editor-tests.ts", + "additions": 25, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/nova-editor/tsconfig.json", + "additions": 23, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/nova-editor/tslint.json", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzcxNDg1NjU=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44290/derived.json b/packages/mergebot/src/_tests/fixtures/44290/derived.json new file mode 100644 index 0000000000..c42988c459 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44290/derived.json @@ -0,0 +1,6 @@ +{ + "type": "remove", + "now": "2020-04-28T16:41:44.000Z", + "message": "PR is a draft", + "isDraft": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44290/mutations.json b/packages/mergebot/src/_tests/fixtures/44290/mutations.json new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44290/mutations.json @@ -0,0 +1 @@ +[] diff --git a/packages/mergebot/src/_tests/fixtures/44290/result.json b/packages/mergebot/src/_tests/fixtures/44290/result.json new file mode 100644 index 0000000000..29193b41ea --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44290/result.json @@ -0,0 +1,8 @@ +{ + "labels": [], + "responseComments": [], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": false, + "projectColumn": "Needs Author Action" +} diff --git a/packages/mergebot/src/_tests/fixtures/44299-with-files/_downloads.json b/packages/mergebot/src/_tests/fixtures/44299-with-files/_downloads.json new file mode 100644 index 0000000000..87f46a6921 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44299-with-files/_downloads.json @@ -0,0 +1,3 @@ +{ + "hcaptcha__vue-hcaptcha": 0 +} diff --git a/packages/mergebot/src/_tests/fixtures/44299-with-files/_files.json b/packages/mergebot/src/_tests/fixtures/44299-with-files/_files.json new file mode 100644 index 0000000000..68f64d6c43 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44299-with-files/_files.json @@ -0,0 +1,4 @@ +{ + "683fb3b1298223256be3a49823686f35bd94a730:types/hcaptcha__vue-hcaptcha/tslint.json": "{\n \"extends\": \"@definitelytyped/dtslint/dt.json\"\n}\n", + "683fb3b1298223256be3a49823686f35bd94a730:types/hcaptcha__vue-hcaptcha/index.d.ts": "// Type definitions for @hcaptcha/vue-hcaptcha 0.2\n// Project: https://github.com/hCaptcha/vue-hcaptcha\n// Definitions by: George Pickering \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.8\n\nimport { VueConstructor } from 'vue';\nexport const h: HCaptcha;\nexport default h;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44299-with-files/_response.json b/packages/mergebot/src/_tests/fixtures/44299-with-files/_response.json new file mode 100644 index 0000000000..e47bfbf544 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44299-with-files/_response.json @@ -0,0 +1,299 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDEwMjE2Nzgz", + "title": "Add types for hcaptcha__vue-hcaptcha", + "lastEditedAt": "2020-04-29T03:48:45Z", + "author": { + "login": "geopic", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-28T16:08:24Z", + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 44299, + "state": "OPEN", + "headRefOid": "683fb3b1298223256be3a49823686f35bd94a730", + "changedFiles": 5, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "683fb3b1298223256be3a49823686f35bd94a730", + "__typename": "Commit" + } + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/683fb3b1298223256be3a49823686f35bd94a730/checks?check_suite_id=638535702", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/683fb3b1298223256be3a49823686f35bd94a730/checks?check_suite_id=638535702", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680953798?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-28T16:07:43Z", + "committedDate": "2020-04-29T10:58:34Z", + "pushedDate": "2020-04-29T10:57:59Z", + "abbreviatedOid": "683fb3b", + "oid": "683fb3b1298223256be3a49823686f35bd94a730", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 7, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDcwMjk5OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@geopic Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 - keep an eye on this comment as I'll be updating it with information as things progress.\n\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n- [hcaptcha__vue-hcaptcha](https://www.npmjs.com/package/hcaptcha__vue-hcaptcha)\n\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have passed\n * ❌ Only a DT maintainer can approve changes when there are new packages added\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": "2020-04-28T16:08:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDcwNTM4NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\nThese typings are for a package that doesn’t yet exist on master, so I don’t have anything to compare against yet! In the future, I’ll be able to compare PRs to hcaptcha__vue-hcaptcha with its source on master.\n\n\n
\nComparison details 📊\n\n| **Batch compilation** | |\n| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Type count | 10861 |\n| Assignability cache size | 34615 |\n| | |\n| **Language service measurements** | |\n| Samples taken | 5 |\n| Identifiers in tests | 5 |\n| **`getCompletionsAtPosition`** | |\n|     Mean duration (ms) | 367.2 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 14.0% |\n|     Worst duration (ms) | 421.3 |\n|     Worst identifier | [HCaptcha](/DefinitelyTyped/DefinitelyTyped/blob/049eb546453f9af959b75c5b07f68cea5b3d8b35/types/hcaptcha__vue-hcaptcha/hcaptcha__vue-hcaptcha-tests.ts#L4) |\n| **`getQuickInfoAtPosition`** | |\n|     Mean duration (ms) | 358.7 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 15.9% |\n|     Worst duration (ms) | 384.3 |\n|     Worst identifier | [HCaptcha](/DefinitelyTyped/DefinitelyTyped/blob/049eb546453f9af959b75c5b07f68cea5b3d8b35/types/hcaptcha__vue-hcaptcha/hcaptcha__vue-hcaptcha-tests.ts#L4) |\n| | |\n| **System information** | |\n| Node version | v12.16.1 |\n| CPU count | 2 |\n| CPU speed | 2.397 GHz |\n| CPU model | Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz |\n| CPU Architecture | x64 |\n| Memory | 6.8 GiB |\n| Platform | linux |\n| Release | 4.15.0-1077-azure |\n\n\n
\n", + "createdAt": "2020-04-28T16:12:24Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDk3NDc1NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@geopic The Travis CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f3b29741af4a674ab5e3f82a9c45347b3fb2797a/checks?check_suite_id=636061669).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-29T03:48:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTExNTE0Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@geopic The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680945008?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-29T10:26:42Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTExODgzNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@geopic The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680947420?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-29T10:35:38Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTEyNDIyMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@geopic The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680951042?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-29T10:48:57Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTEyODE3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@geopic The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680953798?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-29T10:58:12Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/hcaptcha__vue-hcaptcha/hcaptcha__vue-hcaptcha-tests.ts", + "additions": 9, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/index.d.ts", + "additions": 31, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/package.json", + "additions": 6, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/tsconfig.json", + "additions": 32, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/tslint.json", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 5 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzcxODExMTU=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44299-with-files/derived.json b/packages/mergebot/src/_tests/fixtures/44299-with-files/derived.json new file mode 100644 index 0000000000..e1fd68f0cb --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44299-with-files/derived.json @@ -0,0 +1,52 @@ +{ + "type": "info", + "now": "2020-04-29T17:19:10.716Z", + "pr_number": 44299, + "author": "geopic", + "headCommitOid": "683fb3b1298223256be3a49823686f35bd94a730", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-29T10:57:59.000Z", + "lastActivityDate": "2020-04-29T10:57:59.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "hcaptcha__vue-hcaptcha", + "kind": "add", + "files": [ + { + "path": "types/hcaptcha__vue-hcaptcha/hcaptcha__vue-hcaptcha-tests.ts", + "kind": "test" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/index.d.ts", + "kind": "definition" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [ + "geopic" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44299-with-files/mutations.json b/packages/mergebot/src/_tests/fixtures/44299-with-files/mutations.json new file mode 100644 index 0000000000..52a098dbd1 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44299-with-files/mutations.json @@ -0,0 +1,40 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDcwMjk5OQ==", + "body": "@geopic 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* `hcaptcha__vue-hcaptcha` (*new!*) — [on npm](https://www.npmjs.com/package/@hcaptcha/vue-hcaptcha), [on unpkg](https://unpkg.com/browse/@hcaptcha/vue-hcaptcha@latest/)\n - 1 added owner: ✎@geopic\n - Config files to check:\n - [`hcaptcha__vue-hcaptcha/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44299/files/683fb3b1298223256be3a49823686f35bd94a730#diff-c441c94ec5219d4722929ccb738301643b5eef17a151184505f387fdbec13408): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=44299&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 when there are new packages added\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDEwMjE2Nzgz" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzcxODExMTU=", + "columnId": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDEwMjE2Nzgz", + "body": "🔔 @geopic — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44299/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44299-with-files/result.json b/packages/mergebot/src/_tests/fixtures/44299-with-files/result.json new file mode 100644 index 0000000000..d73968685e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44299-with-files/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "New Definition", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@geopic 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* `hcaptcha__vue-hcaptcha` (*new!*) — [on npm](https://www.npmjs.com/package/@hcaptcha/vue-hcaptcha), [on unpkg](https://unpkg.com/browse/@hcaptcha/vue-hcaptcha@latest/)\n - 1 added owner: ✎@geopic\n - Config files to check:\n - [`hcaptcha__vue-hcaptcha/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44299/files/683fb3b1298223256be3a49823686f35bd94a730#diff-c441c94ec5219d4722929ccb738301643b5eef17a151184505f387fdbec13408): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=44299&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 when there are new packages added\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", + "status": "🔔 @geopic — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44299/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44299/_downloads.json b/packages/mergebot/src/_tests/fixtures/44299/_downloads.json new file mode 100644 index 0000000000..87f46a6921 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44299/_downloads.json @@ -0,0 +1,3 @@ +{ + "hcaptcha__vue-hcaptcha": 0 +} diff --git a/packages/mergebot/src/_tests/fixtures/44299/_files.json b/packages/mergebot/src/_tests/fixtures/44299/_files.json new file mode 100644 index 0000000000..a11a47d695 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44299/_files.json @@ -0,0 +1,3 @@ +{ + "683fb3b1298223256be3a49823686f35bd94a730:types/hcaptcha__vue-hcaptcha/index.d.ts": "// Type definitions for @hcaptcha/vue-hcaptcha 0.2\n// Project: https://github.com/hCaptcha/vue-hcaptcha\n// Definitions by: George Pickering \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.8\n\nimport { VueConstructor } from 'vue';\nexport const h: HCaptcha;\nexport default h;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44299/_response.json b/packages/mergebot/src/_tests/fixtures/44299/_response.json new file mode 100644 index 0000000000..e47bfbf544 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44299/_response.json @@ -0,0 +1,299 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDEwMjE2Nzgz", + "title": "Add types for hcaptcha__vue-hcaptcha", + "lastEditedAt": "2020-04-29T03:48:45Z", + "author": { + "login": "geopic", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-28T16:08:24Z", + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 44299, + "state": "OPEN", + "headRefOid": "683fb3b1298223256be3a49823686f35bd94a730", + "changedFiles": 5, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "683fb3b1298223256be3a49823686f35bd94a730", + "__typename": "Commit" + } + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/683fb3b1298223256be3a49823686f35bd94a730/checks?check_suite_id=638535702", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/683fb3b1298223256be3a49823686f35bd94a730/checks?check_suite_id=638535702", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680953798?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-28T16:07:43Z", + "committedDate": "2020-04-29T10:58:34Z", + "pushedDate": "2020-04-29T10:57:59Z", + "abbreviatedOid": "683fb3b", + "oid": "683fb3b1298223256be3a49823686f35bd94a730", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 7, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDcwMjk5OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@geopic Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 - keep an eye on this comment as I'll be updating it with information as things progress.\n\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n- [hcaptcha__vue-hcaptcha](https://www.npmjs.com/package/hcaptcha__vue-hcaptcha)\n\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have passed\n * ❌ Only a DT maintainer can approve changes when there are new packages added\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": "2020-04-28T16:08:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDcwNTM4NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\nThese typings are for a package that doesn’t yet exist on master, so I don’t have anything to compare against yet! In the future, I’ll be able to compare PRs to hcaptcha__vue-hcaptcha with its source on master.\n\n\n
\nComparison details 📊\n\n| **Batch compilation** | |\n| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Type count | 10861 |\n| Assignability cache size | 34615 |\n| | |\n| **Language service measurements** | |\n| Samples taken | 5 |\n| Identifiers in tests | 5 |\n| **`getCompletionsAtPosition`** | |\n|     Mean duration (ms) | 367.2 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 14.0% |\n|     Worst duration (ms) | 421.3 |\n|     Worst identifier | [HCaptcha](/DefinitelyTyped/DefinitelyTyped/blob/049eb546453f9af959b75c5b07f68cea5b3d8b35/types/hcaptcha__vue-hcaptcha/hcaptcha__vue-hcaptcha-tests.ts#L4) |\n| **`getQuickInfoAtPosition`** | |\n|     Mean duration (ms) | 358.7 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 15.9% |\n|     Worst duration (ms) | 384.3 |\n|     Worst identifier | [HCaptcha](/DefinitelyTyped/DefinitelyTyped/blob/049eb546453f9af959b75c5b07f68cea5b3d8b35/types/hcaptcha__vue-hcaptcha/hcaptcha__vue-hcaptcha-tests.ts#L4) |\n| | |\n| **System information** | |\n| Node version | v12.16.1 |\n| CPU count | 2 |\n| CPU speed | 2.397 GHz |\n| CPU model | Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz |\n| CPU Architecture | x64 |\n| Memory | 6.8 GiB |\n| Platform | linux |\n| Release | 4.15.0-1077-azure |\n\n\n
\n", + "createdAt": "2020-04-28T16:12:24Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDk3NDc1NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@geopic The Travis CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f3b29741af4a674ab5e3f82a9c45347b3fb2797a/checks?check_suite_id=636061669).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-29T03:48:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTExNTE0Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@geopic The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680945008?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-29T10:26:42Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTExODgzNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@geopic The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680947420?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-29T10:35:38Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTEyNDIyMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@geopic The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680951042?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-29T10:48:57Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTEyODE3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@geopic The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680953798?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-29T10:58:12Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/hcaptcha__vue-hcaptcha/hcaptcha__vue-hcaptcha-tests.ts", + "additions": 9, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/index.d.ts", + "additions": 31, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/package.json", + "additions": 6, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/tsconfig.json", + "additions": 32, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/tslint.json", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 5 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzcxODExMTU=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44299/derived.json b/packages/mergebot/src/_tests/fixtures/44299/derived.json new file mode 100644 index 0000000000..e1fd68f0cb --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44299/derived.json @@ -0,0 +1,52 @@ +{ + "type": "info", + "now": "2020-04-29T17:19:10.716Z", + "pr_number": 44299, + "author": "geopic", + "headCommitOid": "683fb3b1298223256be3a49823686f35bd94a730", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-29T10:57:59.000Z", + "lastActivityDate": "2020-04-29T10:57:59.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "hcaptcha__vue-hcaptcha", + "kind": "add", + "files": [ + { + "path": "types/hcaptcha__vue-hcaptcha/hcaptcha__vue-hcaptcha-tests.ts", + "kind": "test" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/index.d.ts", + "kind": "definition" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/hcaptcha__vue-hcaptcha/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [ + "geopic" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44299/mutations.json b/packages/mergebot/src/_tests/fixtures/44299/mutations.json new file mode 100644 index 0000000000..52a098dbd1 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44299/mutations.json @@ -0,0 +1,40 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDcwMjk5OQ==", + "body": "@geopic 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* `hcaptcha__vue-hcaptcha` (*new!*) — [on npm](https://www.npmjs.com/package/@hcaptcha/vue-hcaptcha), [on unpkg](https://unpkg.com/browse/@hcaptcha/vue-hcaptcha@latest/)\n - 1 added owner: ✎@geopic\n - Config files to check:\n - [`hcaptcha__vue-hcaptcha/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44299/files/683fb3b1298223256be3a49823686f35bd94a730#diff-c441c94ec5219d4722929ccb738301643b5eef17a151184505f387fdbec13408): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=44299&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 when there are new packages added\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDEwMjE2Nzgz" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzcxODExMTU=", + "columnId": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDEwMjE2Nzgz", + "body": "🔔 @geopic — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44299/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44299/result.json b/packages/mergebot/src/_tests/fixtures/44299/result.json new file mode 100644 index 0000000000..d73968685e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44299/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "New Definition", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@geopic 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* `hcaptcha__vue-hcaptcha` (*new!*) — [on npm](https://www.npmjs.com/package/@hcaptcha/vue-hcaptcha), [on unpkg](https://unpkg.com/browse/@hcaptcha/vue-hcaptcha@latest/)\n - 1 added owner: ✎@geopic\n - Config files to check:\n - [`hcaptcha__vue-hcaptcha/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44299/files/683fb3b1298223256be3a49823686f35bd94a730#diff-c441c94ec5219d4722929ccb738301643b5eef17a151184505f387fdbec13408): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=44299&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 when there are new packages added\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", + "status": "🔔 @geopic — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44299/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44316/_downloads.json b/packages/mergebot/src/_tests/fixtures/44316/_downloads.json new file mode 100644 index 0000000000..6920875669 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44316/_downloads.json @@ -0,0 +1,3 @@ +{ + "vimeo": 3530 +} diff --git a/packages/mergebot/src/_tests/fixtures/44316/_files.json b/packages/mergebot/src/_tests/fixtures/44316/_files.json new file mode 100644 index 0000000000..f5293ed221 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44316/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/vimeo/index.d.ts": "// Type definitions for Vimeo 2.1\n// Project: https://github.com/vimeo/vimeo.js\n// Definitions by: Matthew Leffler \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\nexport type CompleteCallback = (\n err: string | undefined,\n result: any,\n statusCode?: number,\n headers?: object\n) => void;\n\nexport type ProgressCallback = (bytesUploaded: number, bytesTotal: number) => void;\nexport type ErrorCallback = (err: string) => void;\nexport type UriCallback = (uri: string) => void;\n\nexport interface RequestOptions {\n method: string;\n path: string;\n query?: string;\n headers?: object;\n}\n\nexport class Vimeo {\n /**\n * This object is used to interface with the Vimeo API.\n *\n * @param clientId OAuth 2 Client Identifier\n * @param clientSecret OAuth 2 Client Secret\n * @param accessToken OAuth 2 Optional pre-authorized access token\n */\n constructor(clientId: string, clientSecret: string, accessToken?: string);\n\n /**\n * Performs an API call.\n *\n * Can be called one of two ways:\n *\n * 1. Url + Callback\n * If a url is provided, we fill in the rest of the request options with defaults\n * (GET http://api.vimeo.com/{url}).\n *\n * 2. Options + callback\n * If an object is provided, it should match the response of urlModule.parse. Path is the only\n * required parameter.\n *\n * - hostname\n * - port\n * - query (will be applied to the url if GET, request body if POST)\n * - headers\n * - path (can include a querystring)\n * - method\n *\n * The callback takes two parameters, `err` and `json`.\n * If an error has occured, your callback will be called as `callback(err)`;\n * If an error has not occured, your callback will be called as `callback(null, json)`;\n *\n * @param options String path (default GET), or object with `method`, path`,\n * `host`, `port`, `query` or `headers`.\n * @param callback Called when complete, `function (err, json)`.\n */\n request(url: string | RequestOptions, callback: CompleteCallback): void;\n\n /**\n * Set a user access token to be used with library requests.\n *\n * @param accessToken\n */\n setAccessToken(accessToken: string): void;\n\n /**\n * Exchange a code for an access token. This code should exist on your `redirectUri`.\n *\n * @param code The code provided on your `redirectUri`.\n * @param redirectUri The exact `redirectUri` provided to `buildAuthorizationEndpoint`\n * and configured in your API app settings.\n * @param fn Callback to execute on completion.\n */\n accessToken(code: string, redirectUri: string, fn: CompleteCallback): void;\n\n /**\n * The first step of the authorization process.\n *\n * This function returns a URL, which the user should be sent to (via redirect or link).\n *\n * The destination allows the user to accept or deny connecting with vimeo, and accept or deny each\n * of the scopes you requested. Scopes are passed through the second parameter as an array of\n * strings, or a space delimited list.\n *\n * Once accepted or denied, the user is redirected back to the `redirectUri`.\n *\n * @param redirectUri The URI that will exchange a code for an access token. Must match\n * the URI in your API app settings.\n * @param scope An array of scopes. See https://developer.vimeo.com/api/authentication#scopes\n * for more.\n * @param state A unique state that will be returned to you on your redirect URI.\n */\n buildAuthorizationEndpoint(redirectUri: string, scope: string | string[], state: string): void;\n\n /**\n * Generates an unauthenticated access token. This is necessary to make unauthenticated requests\n *\n * @param scope An array of scopes. See https://developer.vimeo.com/api/authentication#scopes\n * for more.\n * @param fn A function that is called when the request is complete. If an error\n * occured the first parameter will be that error, otherwise the first\n * parameter will be null.\n */\n generateClientCredentials(scope: string | string[], fn: CompleteCallback): void;\n\n /**\n * Upload a file.\n *\n * This should be used to upload a local file. If you want a form for your site to upload direct to\n * Vimeo, you should look at the `POST /me/videos` endpoint.\n *\n * https://developer.vimeo.com/api/reference/videos#upload_video\n *\n * @param file Path to the file you wish to upload.\n * @param params Parameters to send when creating a new video (name,\n * privacy restrictions, etc.). See the API documentation for\n * supported parameters.\n * @param completeCallback Callback to be executed when the upload completes.\n * @param progressCallback Callback to be executed when upload progress is updated.\n * @param errorCallback Callback to be executed when the upload returns an error.\n */\n upload(\n filePath: string,\n params: object,\n completeCallback: UriCallback,\n progressCallback: ProgressCallback | undefined,\n errorCallback: ErrorCallback,\n ): void;\n upload(\n filePath: string,\n completeCallback: UriCallback,\n progressCallback: ProgressCallback | undefined,\n errorCallback: ErrorCallback,\n ): void;\n\n /**\n * Replace the source of a single Vimeo video.\n *\n * https://developer.vimeo.com/api/reference/videos#create_video_version\n *\n * @param file Path to the file you wish to upload.\n * @param videoUri Video URI of the video file to replace.\n * @param params Parameters to send when creating a new video (name,\n * privacy restrictions, etc.). See the API documentation for\n * supported parameters.\n * @param completeCallback Callback to be executed when the upload completes.\n * @param progressCallback Callback to be executed when upload progress is updated.\n * @param errorCallback Callback to be executed when the upload returns an error.\n */\n replace(\n file: string,\n videoUri: string,\n params: object,\n completeCallback: UriCallback,\n progressCallback: ProgressCallback | undefined,\n errorCallback: ErrorCallback,\n ): void;\n}\n", + "55357f7d60d059b5c84a23bd92854276a8f9a419:types/vimeo/index.d.ts": "// Type definitions for Vimeo 2.1\n// Project: https://github.com/vimeo/vimeo.js\n// Definitions by: Matthew Leffler \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\nexport type CompleteCallback = (\n err: string | undefined,\n result: any,\n statusCode?: number,\n headers?: object\n) => void;\n\nexport type ProgressCallback = (bytesUploaded: number, bytesTotal: number) => void;\nexport type ErrorCallback = (err: string) => void;\nexport type UriCallback = (uri: string) => void;\n\nexport interface RequestOptions {\n method: string;\n path: string;\n query?: string;\n headers?: object;\n}\n\nexport class Vimeo {\n /**\n * This object is used to interface with the Vimeo API.\n *\n * @param clientId OAuth 2 Client Identifier\n * @param clientSecret OAuth 2 Client Secret\n * @param accessToken OAuth 2 Optional pre-authorized access token\n */\n constructor(clientId: string, clientSecret: string, accessToken?: string);\n\n /**\n * Performs an API call.\n *\n * Can be called one of two ways:\n *\n * 1. Url + Callback\n * If a url is provided, we fill in the rest of the request options with defaults\n * (GET http://api.vimeo.com/{url}).\n *\n * 2. Options + callback\n * If an object is provided, it should match the response of urlModule.parse. Path is the only\n * required parameter.\n *\n * - hostname\n * - port\n * - query (will be applied to the url if GET, request body if POST)\n * - headers\n * - path (can include a querystring)\n * - method\n *\n * The callback takes two parameters, `err` and `json`.\n * If an error has occured, your callback will be called as `callback(err)`;\n * If an error has not occured, your callback will be called as `callback(null, json)`;\n *\n * @param options String path (default GET), or object with `method`, path`,\n * `host`, `port`, `query` or `headers`.\n * @param callback Called when complete, `function (err, json)`.\n */\n request(url: string | RequestOptions, callback: CompleteCallback): void;\n\n /**\n * Set a user access token to be used with library requests.\n *\n * @param accessToken\n */\n setAccessToken(accessToken: string): void;\n\n /**\n * Exchange a code for an access token. This code should exist on your `redirectUri`.\n *\n * @param code The code provided on your `redirectUri`.\n * @param redirectUri The exact `redirectUri` provided to `buildAuthorizationEndpoint`\n * and configured in your API app settings.\n * @param fn Callback to execute on completion.\n */\n accessToken(code: string, redirectUri: string, fn: CompleteCallback): void;\n\n /**\n * The first step of the authorization process.\n *\n * This function returns a URL, which the user should be sent to (via redirect or link).\n *\n * The destination allows the user to accept or deny connecting with vimeo, and accept or deny each\n * of the scopes you requested. Scopes are passed through the second parameter as an array of\n * strings, or a space delimited list.\n *\n * Once accepted or denied, the user is redirected back to the `redirectUri`.\n *\n * @param redirectUri The URI that will exchange a code for an access token. Must match\n * the URI in your API app settings.\n * @param scope An array of scopes. See https://developer.vimeo.com/api/authentication#scopes\n * for more.\n * @param state A unique state that will be returned to you on your redirect URI.\n */\n buildAuthorizationEndpoint(redirectUri: string, scope: string | string[], state: string): void;\n\n /**\n * Generates an unauthenticated access token. This is necessary to make unauthenticated requests\n *\n * @param scope An array of scopes. See https://developer.vimeo.com/api/authentication#scopes\n * for more.\n * @param fn A function that is called when the request is complete. If an error\n * occured the first parameter will be that error, otherwise the first\n * parameter will be null.\n */\n generateClientCredentials(scope: string | string[], fn: CompleteCallback): void;\n\n /**\n * Upload a file.\n *\n * This should be used to upload a local file. If you want a form for your site to upload direct to\n * Vimeo, you should look at the `POST /me/videos` endpoint.\n *\n * https://developer.vimeo.com/api/reference/videos#upload_video\n *\n * @param file Path to the file you wish to upload.\n * @param params Parameters to send when creating a new video (name,\n * privacy restrictions, etc.). See the API documentation for\n * supported parameters.\n * @param completeCallback Callback to be executed when the upload completes.\n * @param progressCallback Callback to be executed when upload progress is updated.\n * @param errorCallback Callback to be executed when the upload returns an error.\n */\n upload(\n filePath: string,\n params: object,\n completeCallback: UriCallback,\n progressCallback: ProgressCallback | undefined,\n errorCallback: ErrorCallback,\n ): void;\n upload(\n filePath: string,\n completeCallback: UriCallback,\n progressCallback: ProgressCallback | undefined,\n errorCallback: ErrorCallback,\n ): void;\n\n /**\n * Replace the source of a single Vimeo video.\n *\n * https://developer.vimeo.com/api/reference/videos#create_video_version\n *\n * @param file Path to the file you wish to upload.\n * @param videoUri Video URI of the video file to replace.\n * @param params Parameters to send when creating a new video (name,\n * privacy restrictions, etc.). See the API documentation for\n * supported parameters.\n * @param completeCallback Callback to be executed when the upload completes.\n * @param progressCallback Callback to be executed when upload progress is updated.\n * @param errorCallback Callback to be executed when the upload returns an error.\n */\n replace(\n file: string,\n videoUri: string,\n params: object,\n completeCallback: UriCallback,\n progressCallback: ProgressCallback | undefined,\n errorCallback: ErrorCallback,\n ): void;\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44316/_response.json b/packages/mergebot/src/_tests/fixtures/44316/_response.json new file mode 100644 index 0000000000..a186dae8f0 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44316/_response.json @@ -0,0 +1,322 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDEwMzk4NzAw", + "title": "Make Vimeo request() generic to optionally type results", + "lastEditedAt": "2020-04-29T21:40:30Z", + "author": { + "login": "mattleff", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-28T22:43:10Z", + "labels": { + "nodes": [ + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "No Other Owners", + "__typename": "Label" + }, + { + "name": "Check Config", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44316, + "state": "OPEN", + "headRefOid": "55357f7d60d059b5c84a23bd92854276a8f9a419", + "changedFiles": 3, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-28T22:43:13Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-28T22:43:21Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2020-04-29T00:16:19Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-29T15:19:20Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-30T22:48:09Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/e8f1024edd42ae4c6a00421e73284613ca374eb8/checks?check_suite_id=637134595", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e8f1024edd42ae4c6a00421e73284613ca374eb8/checks?check_suite_id=637134595", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680782370?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-28T22:41:55Z", + "committedDate": "2020-04-28T22:41:55Z", + "pushedDate": "2020-04-28T22:42:12Z", + "abbreviatedOid": "e8f1024", + "oid": "e8f1024edd42ae4c6a00421e73284613ca374eb8", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/55357f7d60d059b5c84a23bd92854276a8f9a419/checks?check_suite_id=639310174", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/55357f7d60d059b5c84a23bd92854276a8f9a419/checks?check_suite_id=639310174", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681065930?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-29T15:18:59Z", + "committedDate": "2020-04-29T15:18:59Z", + "pushedDate": "2020-04-29T15:19:08Z", + "abbreviatedOid": "55357f7", + "oid": "55357f7d60d059b5c84a23bd92854276a8f9a419", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDg5MzUyMA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mattleff Thank you for submitting this PR! \n\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\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#testing)\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": "2020-04-28T22:43:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDg5MzU2Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mattleff The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/680782370?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-28T22:43:21Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDkxOTYwNw==", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "body": "ping @typescript-bot, what’s with the labels", + "createdAt": "2020-04-29T00:16:19Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTI4MDU5Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mattleff The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681065930?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-04-29T15:19:20Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE1ODY1OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @mattleff — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44316/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": "2020-04-30T22:48:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/vimeo/index.d.ts", + "additions": 5, + "deletions": 4, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/vimeo/tsconfig.json", + "additions": 2, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/vimeo/vimeo-tests.ts", + "additions": 78, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 3 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzcyMDMzMzU=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44316/derived.json b/packages/mergebot/src/_tests/fixtures/44316/derived.json new file mode 100644 index 0000000000..0baa9e551d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44316/derived.json @@ -0,0 +1,43 @@ +{ + "type": "info", + "now": "2020-05-01T15:22:22.898Z", + "pr_number": 44316, + "author": "mattleff", + "headCommitOid": "55357f7d60d059b5c84a23bd92854276a8f9a419", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-29T15:19:08.000Z", + "lastActivityDate": "2020-04-29T15:19:08.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "vimeo", + "kind": "edit", + "files": [ + { + "path": "types/vimeo/index.d.ts", + "kind": "definition" + }, + { + "path": "types/vimeo/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/vimeo/vimeo-tests.ts", + "kind": "test" + } + ], + "owners": [ + "mattleff" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44316/mutations.json b/packages/mergebot/src/_tests/fixtures/44316/mutations.json new file mode 100644 index 0000000000..ba866da1aa --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44316/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMDg5MzUyMA==", + "body": "@mattleff Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `vimeo` — [on npm](https://www.npmjs.com/package/vimeo), [on unpkg](https://unpkg.com/browse/vimeo@latest/) (author is owner)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44316&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, 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" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDEwMzk4NzAw" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDEwMzk4NzAw", + "body": "🔔 @mattleff — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44316/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44316/result.json b/packages/mergebot/src/_tests/fixtures/44316/result.json new file mode 100644 index 0000000000..9aff8a1189 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44316/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Author is Owner", + "No Other Owners" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@mattleff Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `vimeo` — [on npm](https://www.npmjs.com/package/vimeo), [on unpkg](https://unpkg.com/browse/vimeo@latest/) (author is owner)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44316&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, 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 ..." + }, + { + "tag": "pinging-reviewers-others", + "status": "🔔 @mattleff — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44316/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44343-pending-travis/_downloads.json b/packages/mergebot/src/_tests/fixtures/44343-pending-travis/_downloads.json new file mode 100644 index 0000000000..ef13127ca5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343-pending-travis/_downloads.json @@ -0,0 +1,3 @@ +{ + "amplify": 2766 +} diff --git a/packages/mergebot/src/_tests/fixtures/44343-pending-travis/_files.json b/packages/mergebot/src/_tests/fixtures/44343-pending-travis/_files.json new file mode 100644 index 0000000000..3954e49de3 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343-pending-travis/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/amplify/index.d.ts": "// Type definitions for AmplifyJs 1.1\n// Project: http://amplifyjs.com/\n// Definitions by: Jonas Eriksson \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// \n\n", + "abd65c3bbbf3463b41127be203c37fe64f717a7e:types/amplify/index.d.ts": "// Type definitions for AmplifyJs 1.1\n// Project: http://amplifyjs.com/\n// Definitions by: Jonas Eriksson \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// \n\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44343-pending-travis/_response.json b/packages/mergebot/src/_tests/fixtures/44343-pending-travis/_response.json new file mode 100644 index 0000000000..b5b1e70eda --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343-pending-travis/_response.json @@ -0,0 +1,303 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDEwODAzMTcz", + "title": "Fix use of `this` inside amplify-tests.ts", + "lastEditedAt": null, + "author": { + "login": "sandersn", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-29T15:57:10Z", + "labels": { + "nodes": [ + { + "name": "No Other Owners", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44343, + "state": "OPEN", + "headRefOid": "abd65c3bbbf3463b41127be203c37fe64f717a7e", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "3eaee750bbe12a4e0b713f41294268f5adc5ad89", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "7daa7160e7c65f0316a094d531d0ffbb8f4e9e5f", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "abd65c3bbbf3463b41127be203c37fe64f717a7e", + "__typename": "Commit" + } + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3eaee750bbe12a4e0b713f41294268f5adc5ad89/checks?check_suite_id=639406743", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3eaee750bbe12a4e0b713f41294268f5adc5ad89/checks?check_suite_id=639406743", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "FAILURE", + "contexts": [ + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681081767?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + }, + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681078664?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-29T15:49:01Z", + "committedDate": "2020-04-29T15:49:01Z", + "pushedDate": "2020-04-29T15:50:02Z", + "abbreviatedOid": "3eaee75", + "oid": "3eaee750bbe12a4e0b713f41294268f5adc5ad89", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/7daa7160e7c65f0316a094d531d0ffbb8f4e9e5f/checks?check_suite_id=639447497", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7daa7160e7c65f0316a094d531d0ffbb8f4e9e5f/checks?check_suite_id=639447497", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681084023?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + }, + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681083957?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-29T16:02:14Z", + "committedDate": "2020-04-29T16:02:14Z", + "pushedDate": "2020-04-29T16:02:30Z", + "abbreviatedOid": "7daa716", + "oid": "7daa7160e7c65f0316a094d531d0ffbb8f4e9e5f", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/abd65c3bbbf3463b41127be203c37fe64f717a7e/checks?check_suite_id=639503573", + "status": "QUEUED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/abd65c3bbbf3463b41127be203c37fe64f717a7e/checks?check_suite_id=639503573", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "PENDING", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "PENDING", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "PENDING", + "contexts": [ + { + "state": "PENDING", + "description": "The Travis CI build is in progress", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681090844?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + }, + { + "state": "PENDING", + "description": "The Travis CI build is in progress", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681090783?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-29T16:18:32Z", + "committedDate": "2020-04-29T16:18:32Z", + "pushedDate": "2020-04-29T16:19:21Z", + "abbreviatedOid": "abd65c3", + "oid": "abd65c3bbbf3463b41127be203c37fe64f717a7e", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 1, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTMwMzgxMQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@sandersn Thank you for submitting this PR! \n\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can merge this once someone else signs off on it.\n\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have passed\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", + "createdAt": "2020-04-29T15:57:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/amplify/amplify-tests.ts", + "additions": 2, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 1 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzcyNTE0NTI=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44343-pending-travis/derived.json b/packages/mergebot/src/_tests/fixtures/44343-pending-travis/derived.json new file mode 100644 index 0000000000..ed61503440 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343-pending-travis/derived.json @@ -0,0 +1,35 @@ +{ + "type": "info", + "now": "2020-04-29T16:19:21.000Z", + "pr_number": 44343, + "author": "sandersn", + "headCommitOid": "abd65c3bbbf3463b41127be203c37fe64f717a7e", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-29T16:19:21.000Z", + "lastActivityDate": "2020-04-29T16:19:21.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "amplify", + "kind": "edit", + "files": [ + { + "path": "types/amplify/amplify-tests.ts", + "kind": "test" + } + ], + "owners": [ + "joeriks" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "unknown" +} diff --git a/packages/mergebot/src/_tests/fixtures/44343-pending-travis/mutations.json b/packages/mergebot/src/_tests/fixtures/44343-pending-travis/mutations.json new file mode 100644 index 0000000000..a9bdd0eb16 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343-pending-travis/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTMwMzgxMQ==", + "body": "@sandersn Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `amplify` — [on npm](https://www.npmjs.com/package/amplify), [on unpkg](https://unpkg.com/browse/amplify@latest/)\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=44343&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" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODU3ODAw" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDEwODAzMTcz" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDEwODAzMTcz", + "body": "🔔 @joeriks — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44343/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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44343-pending-travis/result.json b/packages/mergebot/src/_tests/fixtures/44343-pending-travis/result.json new file mode 100644 index 0000000000..e1b19dce53 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343-pending-travis/result.json @@ -0,0 +1,17 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [], + "responseComments": [ + { + "tag": "welcome", + "status": "@sandersn Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `amplify` — [on npm](https://www.npmjs.com/package/amplify), [on unpkg](https://unpkg.com/browse/amplify@latest/)\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=44343&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 ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @joeriks — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44343/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44343-pre-travis/_downloads.json b/packages/mergebot/src/_tests/fixtures/44343-pre-travis/_downloads.json new file mode 100644 index 0000000000..ef13127ca5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343-pre-travis/_downloads.json @@ -0,0 +1,3 @@ +{ + "amplify": 2766 +} diff --git a/packages/mergebot/src/_tests/fixtures/44343-pre-travis/_files.json b/packages/mergebot/src/_tests/fixtures/44343-pre-travis/_files.json new file mode 100644 index 0000000000..3954e49de3 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343-pre-travis/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/amplify/index.d.ts": "// Type definitions for AmplifyJs 1.1\n// Project: http://amplifyjs.com/\n// Definitions by: Jonas Eriksson \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// \n\n", + "abd65c3bbbf3463b41127be203c37fe64f717a7e:types/amplify/index.d.ts": "// Type definitions for AmplifyJs 1.1\n// Project: http://amplifyjs.com/\n// Definitions by: Jonas Eriksson \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// \n\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44343-pre-travis/_response.json b/packages/mergebot/src/_tests/fixtures/44343-pre-travis/_response.json new file mode 100644 index 0000000000..50499327fc --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343-pre-travis/_response.json @@ -0,0 +1,278 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDEwODAzMTcz", + "title": "Fix use of `this` inside amplify-tests.ts", + "lastEditedAt": null, + "author": { + "login": "sandersn", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-29T15:57:10Z", + "labels": { + "nodes": [ + { + "name": "No Other Owners", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 44343, + "state": "OPEN", + "headRefOid": "abd65c3bbbf3463b41127be203c37fe64f717a7e", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "3eaee750bbe12a4e0b713f41294268f5adc5ad89", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "7daa7160e7c65f0316a094d531d0ffbb8f4e9e5f", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "abd65c3bbbf3463b41127be203c37fe64f717a7e", + "__typename": "Commit" + } + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3eaee750bbe12a4e0b713f41294268f5adc5ad89/checks?check_suite_id=639406743", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3eaee750bbe12a4e0b713f41294268f5adc5ad89/checks?check_suite_id=639406743", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "FAILURE", + "contexts": [ + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681081767?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + }, + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681078664?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-29T15:49:01Z", + "committedDate": "2020-04-29T15:49:01Z", + "pushedDate": "2020-04-29T15:50:02Z", + "abbreviatedOid": "3eaee75", + "oid": "3eaee750bbe12a4e0b713f41294268f5adc5ad89", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/7daa7160e7c65f0316a094d531d0ffbb8f4e9e5f/checks?check_suite_id=639447497", + "status": "IN_PROGRESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7daa7160e7c65f0316a094d531d0ffbb8f4e9e5f/checks?check_suite_id=639447497", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681084023?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + }, + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681083957?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-29T16:02:14Z", + "committedDate": "2020-04-29T16:02:14Z", + "pushedDate": "2020-04-29T16:02:30Z", + "abbreviatedOid": "7daa716", + "oid": "7daa7160e7c65f0316a094d531d0ffbb8f4e9e5f", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/abd65c3bbbf3463b41127be203c37fe64f717a7e/checks?check_suite_id=639503573", + "status": "QUEUED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/abd65c3bbbf3463b41127be203c37fe64f717a7e/checks?check_suite_id=639503573", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "MISSING", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "MISSING", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-04-29T16:18:32Z", + "committedDate": "2020-04-29T16:18:32Z", + "pushedDate": "2020-04-29T16:19:21Z", + "abbreviatedOid": "abd65c3", + "oid": "abd65c3bbbf3463b41127be203c37fe64f717a7e", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 1, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTMwMzgxMQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@sandersn Thank you for submitting this PR! \n\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can merge this once someone else signs off on it.\n\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have passed\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", + "createdAt": "2020-04-29T15:57:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/amplify/amplify-tests.ts", + "additions": 2, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 1 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzcyNTE0NTI=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44343-pre-travis/derived.json b/packages/mergebot/src/_tests/fixtures/44343-pre-travis/derived.json new file mode 100644 index 0000000000..ed61503440 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343-pre-travis/derived.json @@ -0,0 +1,35 @@ +{ + "type": "info", + "now": "2020-04-29T16:19:21.000Z", + "pr_number": 44343, + "author": "sandersn", + "headCommitOid": "abd65c3bbbf3463b41127be203c37fe64f717a7e", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-29T16:19:21.000Z", + "lastActivityDate": "2020-04-29T16:19:21.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "amplify", + "kind": "edit", + "files": [ + { + "path": "types/amplify/amplify-tests.ts", + "kind": "test" + } + ], + "owners": [ + "joeriks" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "unknown" +} diff --git a/packages/mergebot/src/_tests/fixtures/44343-pre-travis/mutations.json b/packages/mergebot/src/_tests/fixtures/44343-pre-travis/mutations.json new file mode 100644 index 0000000000..a9bdd0eb16 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343-pre-travis/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTMwMzgxMQ==", + "body": "@sandersn Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `amplify` — [on npm](https://www.npmjs.com/package/amplify), [on unpkg](https://unpkg.com/browse/amplify@latest/)\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=44343&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" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODU3ODAw" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDEwODAzMTcz" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDEwODAzMTcz", + "body": "🔔 @joeriks — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44343/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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44343-pre-travis/result.json b/packages/mergebot/src/_tests/fixtures/44343-pre-travis/result.json new file mode 100644 index 0000000000..e1b19dce53 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343-pre-travis/result.json @@ -0,0 +1,17 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [], + "responseComments": [ + { + "tag": "welcome", + "status": "@sandersn Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `amplify` — [on npm](https://www.npmjs.com/package/amplify), [on unpkg](https://unpkg.com/browse/amplify@latest/)\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=44343&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 ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @joeriks — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44343/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44343/_downloads.json b/packages/mergebot/src/_tests/fixtures/44343/_downloads.json new file mode 100644 index 0000000000..ef13127ca5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343/_downloads.json @@ -0,0 +1,3 @@ +{ + "amplify": 2766 +} diff --git a/packages/mergebot/src/_tests/fixtures/44343/_files.json b/packages/mergebot/src/_tests/fixtures/44343/_files.json new file mode 100644 index 0000000000..3954e49de3 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/amplify/index.d.ts": "// Type definitions for AmplifyJs 1.1\n// Project: http://amplifyjs.com/\n// Definitions by: Jonas Eriksson \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// \n\n", + "abd65c3bbbf3463b41127be203c37fe64f717a7e:types/amplify/index.d.ts": "// Type definitions for AmplifyJs 1.1\n// Project: http://amplifyjs.com/\n// Definitions by: Jonas Eriksson \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// \n\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44343/_response.json b/packages/mergebot/src/_tests/fixtures/44343/_response.json new file mode 100644 index 0000000000..8be7d42bf9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343/_response.json @@ -0,0 +1,303 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDEwODAzMTcz", + "title": "Fix use of `this` inside amplify-tests.ts", + "lastEditedAt": null, + "author": { + "login": "sandersn", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-29T15:57:10Z", + "labels": { + "nodes": [ + { + "name": "No Other Owners", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44343, + "state": "OPEN", + "headRefOid": "abd65c3bbbf3463b41127be203c37fe64f717a7e", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "3eaee750bbe12a4e0b713f41294268f5adc5ad89", + "__typename": "Commit" + } + }, + { + "__typename": "IssueComment" + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "7daa7160e7c65f0316a094d531d0ffbb8f4e9e5f", + "__typename": "Commit" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "oid": "abd65c3bbbf3463b41127be203c37fe64f717a7e", + "__typename": "Commit" + } + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3eaee750bbe12a4e0b713f41294268f5adc5ad89/checks?check_suite_id=639406743", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3eaee750bbe12a4e0b713f41294268f5adc5ad89/checks?check_suite_id=639406743", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "FAILURE", + "contexts": [ + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681081767?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + }, + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681078664?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-29T15:49:01Z", + "committedDate": "2020-04-29T15:49:01Z", + "pushedDate": "2020-04-29T15:50:02Z", + "abbreviatedOid": "3eaee75", + "oid": "3eaee750bbe12a4e0b713f41294268f5adc5ad89", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/7daa7160e7c65f0316a094d531d0ffbb8f4e9e5f/checks?check_suite_id=639447497", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7daa7160e7c65f0316a094d531d0ffbb8f4e9e5f/checks?check_suite_id=639447497", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681084023?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + }, + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681083957?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-29T16:02:14Z", + "committedDate": "2020-04-29T16:02:14Z", + "pushedDate": "2020-04-29T16:02:30Z", + "abbreviatedOid": "7daa716", + "oid": "7daa7160e7c65f0316a094d531d0ffbb8f4e9e5f", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/abd65c3bbbf3463b41127be203c37fe64f717a7e/checks?check_suite_id=639503573", + "status": "IN_PROGRESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/abd65c3bbbf3463b41127be203c37fe64f717a7e/checks?check_suite_id=639503573", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "PENDING", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "PENDING", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "PENDING", + "contexts": [ + { + "state": "PENDING", + "description": "The Travis CI build is in progress", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681090844?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + }, + { + "state": "PENDING", + "description": "The Travis CI build is in progress", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681090783?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-29T16:18:32Z", + "committedDate": "2020-04-29T16:18:32Z", + "pushedDate": "2020-04-29T16:19:21Z", + "abbreviatedOid": "abd65c3", + "oid": "abd65c3bbbf3463b41127be203c37fe64f717a7e", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 1, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTMwMzgxMQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@sandersn Thank you for submitting this PR! \n\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can merge this once someone else signs off on it.\n\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have passed\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", + "createdAt": "2020-04-29T15:57:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/amplify/amplify-tests.ts", + "additions": 2, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 1 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzcyNTE0NTI=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44343/derived.json b/packages/mergebot/src/_tests/fixtures/44343/derived.json new file mode 100644 index 0000000000..3098a0b376 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343/derived.json @@ -0,0 +1,35 @@ +{ + "type": "info", + "now": "2020-04-29T21:07:21.000Z", + "pr_number": 44343, + "author": "sandersn", + "headCommitOid": "abd65c3bbbf3463b41127be203c37fe64f717a7e", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-29T16:19:21.000Z", + "lastActivityDate": "2020-04-29T16:19:21.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "amplify", + "kind": "edit", + "files": [ + { + "path": "types/amplify/amplify-tests.ts", + "kind": "test" + } + ], + "owners": [ + "joeriks" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "unknown" +} diff --git a/packages/mergebot/src/_tests/fixtures/44343/mutations.json b/packages/mergebot/src/_tests/fixtures/44343/mutations.json new file mode 100644 index 0000000000..a9bdd0eb16 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTMwMzgxMQ==", + "body": "@sandersn Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `amplify` — [on npm](https://www.npmjs.com/package/amplify), [on unpkg](https://unpkg.com/browse/amplify@latest/)\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=44343&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" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODU3ODAw" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDEwODAzMTcz" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDEwODAzMTcz", + "body": "🔔 @joeriks — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44343/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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44343/result.json b/packages/mergebot/src/_tests/fixtures/44343/result.json new file mode 100644 index 0000000000..e1b19dce53 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44343/result.json @@ -0,0 +1,17 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [], + "responseComments": [ + { + "tag": "welcome", + "status": "@sandersn Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `amplify` — [on npm](https://www.npmjs.com/package/amplify), [on unpkg](https://unpkg.com/browse/amplify@latest/)\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=44343&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 ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @joeriks — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44343/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44402/_downloads.json b/packages/mergebot/src/_tests/fixtures/44402/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44402/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/44402/_files.json b/packages/mergebot/src/_tests/fixtures/44402/_files.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44402/_files.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/44402/_response.json b/packages/mergebot/src/_tests/fixtures/44402/_response.json new file mode 100644 index 0000000000..6192fa3178 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44402/_response.json @@ -0,0 +1,298 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDExODkwMDY5", + "title": "Update support schedule in READMEs", + "lastEditedAt": null, + "author": { + "login": "sandersn", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-04-30T23:19:45Z", + "labels": { + "nodes": [ + { + "name": "Maintainer Approved", + "__typename": "Label" + }, + { + "name": "Other Approved", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44402, + "state": "OPEN", + "headRefOid": "5dfb9945fc5c243f011a9436cbcc12d1ad12b012", + "changedFiles": 5, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:19:48Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "sandersn", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:21:44Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-04-30T23:37:40Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "saschanaz", + "__typename": "User" + }, + "commit": { + "oid": "5dfb9945fc5c243f011a9436cbcc12d1ad12b012", + "abbreviatedOid": "5dfb994", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-04-30T23:29:02Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402#pullrequestreview-403944404", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "armanio123", + "__typename": "User" + }, + "commit": { + "oid": "5dfb9945fc5c243f011a9436cbcc12d1ad12b012", + "abbreviatedOid": "5dfb994", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2020-04-30T23:37:36Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402#pullrequestreview-403947310", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "galkin", + "__typename": "User" + }, + "commit": { + "oid": "5dfb9945fc5c243f011a9436cbcc12d1ad12b012", + "abbreviatedOid": "5dfb994", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-05-01T05:46:07Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402#pullrequestreview-404030127", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/5dfb9945fc5c243f011a9436cbcc12d1ad12b012/checks?check_suite_id=644058636", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/5dfb9945fc5c243f011a9436cbcc12d1ad12b012/checks?check_suite_id=644058636", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681730740?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + }, + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "sandersn", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681730178?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-04-30T23:17:18Z", + "committedDate": "2020-04-30T23:17:18Z", + "pushedDate": "2020-04-30T23:17:43Z", + "abbreviatedOid": "5dfb994", + "oid": "5dfb9945fc5c243f011a9436cbcc12d1ad12b012", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE3MDA0NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@sandersn Thank you for submitting this PR! \n\n This PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare - did you mean to do this?\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\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#testing)\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": "2020-04-30T23:19:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE3MDczMw==", + "author": { + "login": "sandersn", + "__typename": "User" + }, + "body": "I guess I can't add non-DT members as reviewers? So here's a manual ping: @galkin @saschanaz @kingwl ", + "createdAt": "2020-04-30T23:21:44Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE3NTQ3NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@sandersn Everything looks good here. Great job! I am ready to merge this PR on your behalf.\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", + "createdAt": "2020-04-30T23:37:40Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "README.cn.md", + "additions": 3, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "README.es.md", + "additions": 3, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "README.ko.md", + "additions": 4, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "README.md", + "additions": 4, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "README.ru.md", + "additions": 3, + "deletions": 2, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 5 + }, + "projectCards": { + "nodes": [], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44402/derived.json b/packages/mergebot/src/_tests/fixtures/44402/derived.json new file mode 100644 index 0000000000..aa01d0c567 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44402/derived.json @@ -0,0 +1,69 @@ +{ + "type": "info", + "now": "2020-05-01T15:14:44.000Z", + "pr_number": 44402, + "author": "sandersn", + "headCommitOid": "5dfb9945fc5c243f011a9436cbcc12d1ad12b012", + "mergeBaseOid": "master", + "lastPushDate": "2020-04-30T23:17:43.000Z", + "lastActivityDate": "2020-05-01T05:46:07.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": null, + "kind": "edit", + "files": [ + { + "path": "README.cn.md", + "kind": "infrastructure" + }, + { + "path": "README.es.md", + "kind": "infrastructure" + }, + { + "path": "README.ko.md", + "kind": "infrastructure" + }, + { + "path": "README.md", + "kind": "infrastructure" + }, + { + "path": "README.ru.md", + "kind": "infrastructure" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical", + "isSafeInfrastructureEdit": false + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "galkin", + "date": "2020-05-01T05:46:07.000Z", + "isMaintainer": false + }, + { + "type": "approved", + "reviewer": "armanio123", + "date": "2020-04-30T23:37:36.000Z", + "isMaintainer": true + }, + { + "type": "approved", + "reviewer": "saschanaz", + "date": "2020-04-30T23:29:02.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44402/mutations.json b/packages/mergebot/src/_tests/fixtures/44402/mutations.json new file mode 100644 index 0000000000..cff6bd7b61 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44402/mutations.json @@ -0,0 +1,41 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE3MDA0NQ==", + "body": "@sandersn Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 0 packages in this PR (and infra files)\n\n* Infra files\n - [`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235)\n - [`README.es.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-42010a55cd1784b825a37c762cc91d75421f3ed4515f1047cf5506444949a0c2)\n - [`README.ko.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-86fa6921bcebf260d55d8a3742c1b513bd78f4ea18366db989b5a03c68c563ae)\n - [`README.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5)\n - [`README.ru.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-fb460bf71153d8224708cfa7298df0409d20c207f5b252b74906895bd8e1ac42)\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=44402&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 DT infrastructure ([`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235), [`README.es.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-42010a55cd1784b825a37c762cc91d75421f3ed4515f1047cf5506444949a0c2), [`README.ko.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-86fa6921bcebf260d55d8a3742c1b513bd78f4ea18366db989b5a03c68c563ae), [`README.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5), [`README.ru.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-fb460bf71153d8224708cfa7298df0409d20c207f5b252b74906895bd8e1ac42))\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=", + "MDU6TGFiZWwxNjA4MjA4ODM1" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDExODkwMDY5" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0NDExODkwMDY5", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjE3NTQ3NA==", + "body": "@sandersn: Everything looks good here. I am ready to merge this PR (at 5dfb994) 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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44402/result.json b/packages/mergebot/src/_tests/fixtures/44402/result.json new file mode 100644 index 0000000000..e8a255d55f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44402/result.json @@ -0,0 +1,22 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Other Approved", + "Maintainer Approved", + "Edits Infrastructure", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@sandersn Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 0 packages in this PR (and infra files)\n\n* Infra files\n - [`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235)\n - [`README.es.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-42010a55cd1784b825a37c762cc91d75421f3ed4515f1047cf5506444949a0c2)\n - [`README.ko.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-86fa6921bcebf260d55d8a3742c1b513bd78f4ea18366db989b5a03c68c563ae)\n - [`README.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5)\n - [`README.ru.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-fb460bf71153d8224708cfa7298df0409d20c207f5b252b74906895bd8e1ac42)\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=44402&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 DT infrastructure ([`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235), [`README.es.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-42010a55cd1784b825a37c762cc91d75421f3ed4515f1047cf5506444949a0c2), [`README.ko.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-86fa6921bcebf260d55d8a3742c1b513bd78f4ea18366db989b5a03c68c563ae), [`README.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5), [`README.ru.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44402/files/5dfb9945fc5c243f011a9436cbcc12d1ad12b012#diff-fb460bf71153d8224708cfa7298df0409d20c207f5b252b74906895bd8e1ac42))\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": "@sandersn: Everything looks good here. I am ready to merge this PR (at 5dfb994) 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" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44411/_downloads.json b/packages/mergebot/src/_tests/fixtures/44411/_downloads.json new file mode 100644 index 0000000000..d4624fcea4 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44411/_downloads.json @@ -0,0 +1,3 @@ +{ + "jest-image-snapshot": 146509 +} diff --git a/packages/mergebot/src/_tests/fixtures/44411/_files.json b/packages/mergebot/src/_tests/fixtures/44411/_files.json new file mode 100644 index 0000000000..22d4483fec --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44411/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/jest-image-snapshot/index.d.ts": "// Type definitions for jest-image-snapshot 2.12\n// Project: https://github.com/americanexpress/jest-image-snapshot#readme\n// Definitions by: Janeene Beeforth \n// erbridge \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.1\n\n/// \n", + "d0d51a062525a6a4b83b297cd0e75adb4d5628f6:types/jest-image-snapshot/index.d.ts": "// Type definitions for jest-image-snapshot 3.1\n// Project: https://github.com/americanexpress/jest-image-snapshot#readme\n// Definitions by: Janeene Beeforth \n// erbridge \n// Piotr Błażejewicz \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.1\n\n/// \n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44411/_response.json b/packages/mergebot/src/_tests/fixtures/44411/_response.json new file mode 100644 index 0000000000..5ca3053759 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44411/_response.json @@ -0,0 +1,249 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDEyMDc3MDI1", + "title": "feat(jest-image-snapshot): update to v3.1", + "lastEditedAt": "2020-05-01T16:15:09Z", + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-05-01T10:24:45Z", + "labels": { + "nodes": [ + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Check Config", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44411, + "state": "OPEN", + "headRefOid": "d0d51a062525a6a4b83b297cd0e75adb4d5628f6", + "changedFiles": 6, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-01T10:24:47Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-01T10:24:48Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-01T10:30:46Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/d0d51a062525a6a4b83b297cd0e75adb4d5628f6/checks?check_suite_id=645147896", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/d0d51a062525a6a4b83b297cd0e75adb4d5628f6/checks?check_suite_id=645147896", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/681890160?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-01T09:16:12Z", + "committedDate": "2020-05-01T10:23:53Z", + "pushedDate": "2020-05-01T10:24:23Z", + "abbreviatedOid": "d0d51a0", + "oid": "d0d51a062525a6a4b83b297cd0e75adb4d5628f6", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjMzMzI3Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@peterblazejewicz Thank you for submitting this PR! \n\n\n## Code Reviews\n\nBecause this PR edits the configuration file, it can be merged once it's reviewed by a DT maintainer.\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#testing)\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": "2020-05-01T10:24:47Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjMzMzI3OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @dawnmist @erbridge — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44411/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": "2020-05-01T10:24:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjMzNDk2Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n### jest-image-snapshot/v*\n\n\n
\nComparison details for jest-image-snapshot/* 📊\n\n| | master | #44411 | diff |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 38.1 | 37.6 | -1.4% |\n| Type count | 3297 | 3297 | 0% |\n| Assignability cache size | 421 | 421 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 56 | 58 | +4% |\n| Identifiers in tests | 56 | 58 | +4% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 92.5 | 92.5 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 24.4% | 24.4% | |\n|     Worst duration (ms) | 133.3 | 128.5 | -3.6% |\n|     Worst identifier | [extend](/DefinitelyTyped/DefinitelyTyped/blob/dfa1dc8aa73e5a471edec18d7cd3ef94c1ca76ad/types/jest-image-snapshot/jest-image-snapshot-tests.ts#L20) | [expect](/DefinitelyTyped/DefinitelyTyped/blob/a4286cfb63a436284a5353b98193f0c65f16f8c5/types/jest-image-snapshot/jest-image-snapshot-tests.ts#L23) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 89.3 | 88.3 | -1.1% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 23.3% | 23.4% | +0.5% |\n|     Worst duration (ms) | 125.1 | 113.7 | -9.1% |\n|     Worst identifier | [extend](/DefinitelyTyped/DefinitelyTyped/blob/dfa1dc8aa73e5a471edec18d7cd3ef94c1ca76ad/types/jest-image-snapshot/jest-image-snapshot-tests.ts#L20) | [matchFn](/DefinitelyTyped/DefinitelyTyped/blob/a4286cfb63a436284a5353b98193f0c65f16f8c5/types/jest-image-snapshot/jest-image-snapshot-tests.ts#L21) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.\n\n### jest-image-snapshot/v*\n\n\n
\nComparison details for jest-image-snapshot/* 📊\n\n| | master | #44411 | diff |\n| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 38.0 | 37.8 | -0.6% |\n| Type count | 3297 | 3297 | 0% |\n| Assignability cache size | 421 | 421 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 56 | 58 | +4% |\n| Identifiers in tests | 56 | 58 | +4% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 93.3 | 92.3 | -1.1% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 24.4% | 24.0% | |\n|     Worst duration (ms) | 121.5 | 123.3 | +1.4% |\n|     Worst identifier | [toMatchImageSnapshot](/DefinitelyTyped/DefinitelyTyped/blob/dfa1dc8aa73e5a471edec18d7cd3ef94c1ca76ad/types/jest-image-snapshot/jest-image-snapshot-tests.ts#L57) | [toMatchImageSnapshot](/DefinitelyTyped/DefinitelyTyped/blob/a4286cfb63a436284a5353b98193f0c65f16f8c5/types/jest-image-snapshot/jest-image-snapshot-tests.ts#L59) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 89.1 | 89.2 | +0.2% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 23.2% | 23.1% | -0.5% |\n|     Worst duration (ms) | 119.7 | 117.7 | -1.6% |\n|     Worst identifier | [threshold](/DefinitelyTyped/DefinitelyTyped/blob/dfa1dc8aa73e5a471edec18d7cd3ef94c1ca76ad/types/jest-image-snapshot/jest-image-snapshot-tests.ts#L14) | [toMatchImageSnapshot](/DefinitelyTyped/DefinitelyTyped/blob/a4286cfb63a436284a5353b98193f0c65f16f8c5/types/jest-image-snapshot/jest-image-snapshot-tests.ts#L23) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-05-01T10:30:46Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/jest-image-snapshot/index.d.ts", + "additions": 26, + "deletions": 11, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/jest-image-snapshot/jest-image-snapshot-tests.ts", + "additions": 6, + "deletions": 4, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/jest-image-snapshot/v2/index.d.ts", + "additions": 117, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/jest-image-snapshot/v2/jest-image-snapshot-tests.ts", + "additions": 58, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/jest-image-snapshot/v2/tsconfig.json", + "additions": 28, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/jest-image-snapshot/v2/tslint.json", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 6 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzczNjg0NDA=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44411/derived.json b/packages/mergebot/src/_tests/fixtures/44411/derived.json new file mode 100644 index 0000000000..b123a8c101 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44411/derived.json @@ -0,0 +1,59 @@ +{ + "type": "info", + "now": "2020-05-01T16:17:25.774Z", + "pr_number": 44411, + "author": "peterblazejewicz", + "headCommitOid": "d0d51a062525a6a4b83b297cd0e75adb4d5628f6", + "mergeBaseOid": "master", + "lastPushDate": "2020-05-01T10:24:23.000Z", + "lastActivityDate": "2020-05-01T10:24:45.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "jest-image-snapshot", + "kind": "edit", + "files": [ + { + "path": "types/jest-image-snapshot/index.d.ts", + "kind": "definition" + }, + { + "path": "types/jest-image-snapshot/jest-image-snapshot-tests.ts", + "kind": "test" + }, + { + "path": "types/jest-image-snapshot/v2/index.d.ts", + "kind": "definition" + }, + { + "path": "types/jest-image-snapshot/v2/jest-image-snapshot-tests.ts", + "kind": "test" + }, + { + "path": "types/jest-image-snapshot/v2/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/jest-image-snapshot/v2/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [ + "dawnmist", + "erbridge" + ], + "addedOwners": [ + "peterblazejewicz" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44411/mutations.json b/packages/mergebot/src/_tests/fixtures/44411/mutations.json new file mode 100644 index 0000000000..18b0c55598 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44411/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjMzMzI3Ng==", + "body": "@peterblazejewicz Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `jest-image-snapshot` — [on npm](https://www.npmjs.com/package/jest-image-snapshot), [on unpkg](https://unpkg.com/browse/jest-image-snapshot@latest/)\n - 1 added owner: ✎@peterblazejewicz\n - Config files to check:\n - [`jest-image-snapshot/v2/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44411/files/d0d51a062525a6a4b83b297cd0e75adb4d5628f6#diff-651efbe7a0eea62a82aef2b62fa707b7e8b8ea105e561e291b401f8b5b910b1b): edited\n\n## Code Reviews\n\nBecause this PR edits the configuration file, 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=44411&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 module config files\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyNDk1OTc2ODI5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDEyMDc3MDI1" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzczNjg0NDA=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44411/result.json b/packages/mergebot/src/_tests/fixtures/44411/result.json new file mode 100644 index 0000000000..1506838411 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44411/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Needs Maintainer Review", + "labels": [ + "Edits Owners", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@peterblazejewicz Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `jest-image-snapshot` — [on npm](https://www.npmjs.com/package/jest-image-snapshot), [on unpkg](https://unpkg.com/browse/jest-image-snapshot@latest/)\n - 1 added owner: ✎@peterblazejewicz\n - Config files to check:\n - [`jest-image-snapshot/v2/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44411/files/d0d51a062525a6a4b83b297cd0e75adb4d5628f6#diff-651efbe7a0eea62a82aef2b62fa707b7e8b8ea105e561e291b401f8b5b910b1b): edited\n\n## Code Reviews\n\nBecause this PR edits the configuration file, 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=44411&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 module config files\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", + "status": "🔔 @dawnmist @erbridge — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44411/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/_downloads.json b/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/_downloads.json new file mode 100644 index 0000000000..e10a0f1b9a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/_downloads.json @@ -0,0 +1,3 @@ +{ + "openfin": 9067 +} diff --git a/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/_files.json b/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/_files.json new file mode 100644 index 0000000000..7260daf802 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/openfin/index.d.ts": "// Type definitions for non-npm package OpenFin API 51.0\n// Project: https://openfin.co/\n// Definitions by: Chris Barker \n// Ricardo de Pena \n// Roma \n// Li Cui \n// Tomer Sharon \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.6\n\n// based on v16.83.51.26\n// see https://openfin.co/support/technical-faq/#what-do-the-numbers-in-the-runtime-version-mean\n", + "af636941dac21c0752befa1617297dfdac3e0a52:types/openfin/index.d.ts": "// Type definitions for non-npm package OpenFin API 51.0\n// Project: https://openfin.co/\n// Definitions by: Chris Barker \n// Ricardo de Pena \n// Roma \n// Li Cui \n// Tomer Sharon \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.6\n\n// based on v16.83.51.26\n// see https://openfin.co/support/technical-faq/#what-do-the-numbers-in-the-runtime-version-mean\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/_response.json b/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/_response.json new file mode 100644 index 0000000000..b54c389bdd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/_response.json @@ -0,0 +1,791 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDEyMjY1MDE2", + "title": "openfin - adding layouts and fdc3 namespaces", + "lastEditedAt": "2020-05-01T19:25:21Z", + "author": { + "login": "tomer-openfin", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-05-01T19:23:41Z", + "labels": { + "nodes": [ + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "Check Config", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44424, + "state": "OPEN", + "headRefOid": "af636941dac21c0752befa1617297dfdac3e0a52", + "changedFiles": 121, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-01T19:23:45Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-01T19:23:46Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/af636941dac21c0752befa1617297dfdac3e0a52/checks?check_suite_id=646317117", + "status": "IN_PROGRESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/af636941dac21c0752befa1617297dfdac3e0a52/checks?check_suite_id=646317117", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/682082632?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-01T19:19:54Z", + "committedDate": "2020-05-01T19:19:54Z", + "pushedDate": "2020-05-01T19:20:22Z", + "abbreviatedOid": "af63694", + "oid": "af636941dac21c0752befa1617297dfdac3e0a52", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 2, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjUyNzAxNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@tomer-openfin Thank you for submitting this PR! \n\n\n## Code Reviews\n\nBecause this PR edits the configuration file, it can be merged once it's reviewed by a DT maintainer.\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#testing)\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": "2020-05-01T19:23:45Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjUyNzAyMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @chrisbarker @rdepena @whyn07m3 @licui3936 — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/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": "2020-05-01T19:23:46Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/openfin/OTHER_FILES.txt", + "additions": 14, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/application/application.d.ts", + "additions": 4, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/application/applicationOption.d.ts", + "additions": 6, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/events/platform.d.ts", + "additions": 18, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/events/view.d.ts", + "additions": 22, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/events/window.d.ts", + "additions": 14, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/fin.d.ts", + "additions": 3, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/channel.d.ts", + "additions": 2, + "deletions": 7, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/client.d.ts", + "additions": 8, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/index.d.ts", + "additions": 8, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/provider.d.ts", + "additions": 4, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/commands.d.ts", + "additions": 12, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/golden-layout.d.ts", + "additions": 887, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/layout.d.ts", + "additions": 123, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/openfin-layout.d.ts", + "additions": 69, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/platform-provider.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/platform.d.ts", + "additions": 48, + "deletions": 29, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/resizable-view.d.ts", + "additions": 21, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/utils.d.ts", + "additions": 54, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/system/system.d.ts", + "additions": 6, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/view/view.d.ts", + "additions": 241, + "deletions": 15, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/webcontents/webcontents.d.ts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/window/window.d.ts", + "additions": 28, + "deletions": 18, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/window/windowOption.d.ts", + "additions": 8, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/environment/environment.d.ts", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/environment/node-env.d.ts", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/environment/openfin-env.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/fdc3/context.d.ts", + "additions": 123, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/fdc3/contextChannels.d.ts", + "additions": 369, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/fdc3/directory.d.ts", + "additions": 161, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/fdc3/errors.d.ts", + "additions": 100, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/fdc3/intents.d.ts", + "additions": 20, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/fdc3/main.d.ts", + "additions": 288, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/shapes.d.ts", + "additions": 25, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/transport/transport.d.ts", + "additions": 1, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/util/entity-type.d.ts", + "additions": 2, + "deletions": 4, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/index.d.ts", + "additions": 297, + "deletions": 61, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/openfin-tests.ts", + "additions": 59, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/tslint.json", + "additions": 2, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/OTHER_FILES.txt", + "additions": 77, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/application/application.d.ts", + "additions": 442, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/application/applicationOption.d.ts", + "additions": 15, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/base.d.ts", + "additions": 45, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/clipboard/clipboard.d.ts", + "additions": 70, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/clipboard/write-request.d.ts", + "additions": 12, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/application.d.ts", + "additions": 66, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/base.d.ts", + "additions": 18, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/channel.d.ts", + "additions": 10, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/emitterMap.d.ts", + "additions": 16, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/eventAggregator.d.ts", + "additions": 5, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/externalApplication.d.ts", + "additions": 5, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/externalWindow.d.ts", + "additions": 7, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/frame.d.ts", + "additions": 9, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/globalHotkey.d.ts", + "additions": 11, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/notifications.d.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/system.d.ts", + "additions": 27, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/view.d.ts", + "additions": 32, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/webcontents.d.ts", + "additions": 38, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/window.d.ts", + "additions": 192, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/external-application/external-application.d.ts", + "additions": 131, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/external-window/external-window.d.ts", + "additions": 257, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/fin.d.ts", + "additions": 32, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/frame/frame.d.ts", + "additions": 164, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/global-hotkey/index.d.ts", + "additions": 42, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/channel.d.ts", + "additions": 37, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/client.d.ts", + "additions": 12, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/index.d.ts", + "additions": 33, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/provider.d.ts", + "additions": 18, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/interappbus.d.ts", + "additions": 80, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/notification/notification.d.ts", + "additions": 81, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/platform/platform.d.ts", + "additions": 192, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/application.d.ts", + "additions": 5, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/clearCacheOption.d.ts", + "additions": 6, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/cookie.d.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/crashReporterOption.d.ts", + "additions": 4, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/download-asset.d.ts", + "additions": 18, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/download-preload.d.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/entity.d.ts", + "additions": 11, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/external-process.d.ts", + "additions": 41, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/host-specs.d.ts", + "additions": 24, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/log.d.ts", + "additions": 11, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/monitor.d.ts", + "additions": 39, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/point.d.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/process.d.ts", + "additions": 15, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/proxy.d.ts", + "additions": 15, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/registry-info.d.ts", + "additions": 7, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/runtime-info.d.ts", + "additions": 11, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/rvm.d.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/system.d.ts", + "additions": 841, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/window.d.ts", + "additions": 16, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/view/view.d.ts", + "additions": 195, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/webcontents/webcontents.d.ts", + "additions": 21, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/window/bounds-changed.d.ts", + "additions": 14, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/window/window.d.ts", + "additions": 963, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/window/windowOption.d.ts", + "additions": 88, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/environment/environment.d.ts", + "additions": 15, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/environment/node-env.d.ts", + "additions": 16, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/environment/openfin-env.d.ts", + "additions": 16, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/environment/openfin-renderer-api.d.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/identity.d.ts", + "additions": 18, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 121 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzczOTYzMTI=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/derived.json b/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/derived.json new file mode 100644 index 0000000000..c293c008a6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/derived.json @@ -0,0 +1,438 @@ +{ + "type": "info", + "now": "2020-05-01T19:27:22.014Z", + "pr_number": 44424, + "author": "tomer-openfin", + "headCommitOid": "af636941dac21c0752befa1617297dfdac3e0a52", + "mergeBaseOid": "master", + "lastPushDate": "2020-05-01T19:20:22.000Z", + "lastActivityDate": "2020-05-01T19:23:41.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": true, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "openfin", + "kind": "edit", + "files": [ + { + "path": "types/openfin/OTHER_FILES.txt", + "kind": "package-meta", + "suspect": "edited" + }, + { + "path": "types/openfin/_v2/api/application/application.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/application/applicationOption.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/events/platform.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/events/view.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/events/window.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/fin.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/channel.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/client.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/index.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/provider.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/commands.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/golden-layout.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/layout.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/openfin-layout.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/platform-provider.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/platform.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/resizable-view.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/utils.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/system/system.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/view/view.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/webcontents/webcontents.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/window/window.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/window/windowOption.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/environment/environment.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/environment/node-env.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/environment/openfin-env.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/fdc3/context.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/fdc3/contextChannels.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/fdc3/directory.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/fdc3/errors.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/fdc3/intents.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/fdc3/main.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/shapes.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/transport/transport.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/util/entity-type.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/index.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/openfin-tests.ts", + "kind": "test" + }, + { + "path": "types/openfin/tslint.json", + "kind": "package-meta", + "suspect": "edited" + }, + { + "path": "types/openfin/v49/OTHER_FILES.txt", + "kind": "package-meta", + "suspect": "edited" + }, + { + "path": "types/openfin/v49/_v2/api/application/application.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/application/applicationOption.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/base.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/clipboard/clipboard.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/clipboard/write-request.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/application.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/base.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/channel.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/emitterMap.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/eventAggregator.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/externalApplication.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/externalWindow.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/frame.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/globalHotkey.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/notifications.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/system.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/view.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/webcontents.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/window.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/external-application/external-application.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/external-window/external-window.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/fin.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/frame/frame.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/global-hotkey/index.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/channel.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/client.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/index.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/provider.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/interappbus.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/notification/notification.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/platform/platform.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/application.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/clearCacheOption.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/cookie.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/crashReporterOption.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/download-asset.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/download-preload.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/entity.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/external-process.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/host-specs.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/log.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/monitor.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/point.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/process.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/proxy.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/registry-info.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/runtime-info.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/rvm.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/system.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/window.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/view/view.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/webcontents/webcontents.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/window/bounds-changed.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/window/window.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/window/windowOption.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/environment/environment.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/environment/node-env.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/environment/openfin-env.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/environment/openfin-renderer-api.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/identity.d.ts", + "kind": "definition" + } + ], + "owners": [ + "chrisbarker", + "rdepena", + "whyn07m3", + "licui3936", + "tomer-openfin" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/mutations.json b/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/mutations.json new file mode 100644 index 0000000000..29cfc63b46 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/mutations.json @@ -0,0 +1,32 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjUyNzAxNQ==", + "body": "@tomer-openfin Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR might touch some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and possibly others)\n\n\n***Note: this PR touches too many files, check it!***\n* `openfin` — [on npm](https://www.npmjs.com/package/openfin), [on unpkg](https://unpkg.com/browse/openfin@latest/) (author is owner)\n - Config files to check:\n - [`openfin/OTHER_FILES.txt`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/files/af636941dac21c0752befa1617297dfdac3e0a52#diff-004d79898182f654ce84ac7deed9a38f3c41c438de9af7a5e1edf9c5cfa0fcb4): edited\n - [`openfin/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/files/af636941dac21c0752befa1617297dfdac3e0a52#diff-59b1ab6d62c34c8b064f27d3f16a88e20e60adde2ed7bf0d3529a59fa0c8ed03): edited\n - [`openfin/v49/OTHER_FILES.txt`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/files/af636941dac21c0752befa1617297dfdac3e0a52#diff-90b0a88e7d7d6ab8f4246471243a6fbc2699361d94c22ab900ff93b9e190893c): edited\n\n## Code Reviews\n\nBecause this PR edits the configuration file, it can be merged once it's reviewed by a DT maintainer.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * 🕐 A DT maintainer needs to approve changes that affect module config files\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyOTUzOTk4NzE4", + "LA_kwDOAFz6BM8AAAABEGgY4Q" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDEyMjY1MDE2" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzczOTYzMTI=", + "columnId": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/result.json b/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/result.json new file mode 100644 index 0000000000..66b1ac7b9f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44424-1-travis-instantly-finished/result.json @@ -0,0 +1,22 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "Possibly Edits Infrastructure", + "Author is Owner", + "Check Config", + "Too Many Files" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@tomer-openfin Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR might touch some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and possibly others)\n\n\n***Note: this PR touches too many files, check it!***\n* `openfin` — [on npm](https://www.npmjs.com/package/openfin), [on unpkg](https://unpkg.com/browse/openfin@latest/) (author is owner)\n - Config files to check:\n - [`openfin/OTHER_FILES.txt`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/files/af636941dac21c0752befa1617297dfdac3e0a52#diff-004d79898182f654ce84ac7deed9a38f3c41c438de9af7a5e1edf9c5cfa0fcb4): edited\n - [`openfin/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/files/af636941dac21c0752befa1617297dfdac3e0a52#diff-59b1ab6d62c34c8b064f27d3f16a88e20e60adde2ed7bf0d3529a59fa0c8ed03): edited\n - [`openfin/v49/OTHER_FILES.txt`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/files/af636941dac21c0752befa1617297dfdac3e0a52#diff-90b0a88e7d7d6ab8f4246471243a6fbc2699361d94c22ab900ff93b9e190893c): edited\n\n## Code Reviews\n\nBecause this PR edits the configuration file, it can be merged once it's reviewed by a DT maintainer.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * 🕐 A DT maintainer needs to approve changes that affect module config files\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", + "status": "🔔 @chrisbarker @rdepena @whyn07m3 @licui3936 — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/_downloads.json b/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/_downloads.json new file mode 100644 index 0000000000..e10a0f1b9a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/_downloads.json @@ -0,0 +1,3 @@ +{ + "openfin": 9067 +} diff --git a/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/_files.json b/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/_files.json new file mode 100644 index 0000000000..7260daf802 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/openfin/index.d.ts": "// Type definitions for non-npm package OpenFin API 51.0\n// Project: https://openfin.co/\n// Definitions by: Chris Barker \n// Ricardo de Pena \n// Roma \n// Li Cui \n// Tomer Sharon \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.6\n\n// based on v16.83.51.26\n// see https://openfin.co/support/technical-faq/#what-do-the-numbers-in-the-runtime-version-mean\n", + "af636941dac21c0752befa1617297dfdac3e0a52:types/openfin/index.d.ts": "// Type definitions for non-npm package OpenFin API 51.0\n// Project: https://openfin.co/\n// Definitions by: Chris Barker \n// Ricardo de Pena \n// Roma \n// Li Cui \n// Tomer Sharon \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.6\n\n// based on v16.83.51.26\n// see https://openfin.co/support/technical-faq/#what-do-the-numbers-in-the-runtime-version-mean\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/_response.json b/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/_response.json new file mode 100644 index 0000000000..da3e80f1f3 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/_response.json @@ -0,0 +1,791 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDEyMjY1MDE2", + "title": "openfin - adding layouts and fdc3 namespaces", + "lastEditedAt": "2020-05-01T19:25:21Z", + "author": { + "login": "tomer-openfin", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-05-01T19:23:41Z", + "labels": { + "nodes": [ + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "Check Config", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44424, + "state": "OPEN", + "headRefOid": "af636941dac21c0752befa1617297dfdac3e0a52", + "changedFiles": 121, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-01T19:23:45Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-01T19:23:46Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/af636941dac21c0752befa1617297dfdac3e0a52/checks?check_suite_id=646317117", + "status": "IN_PROGRESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/af636941dac21c0752befa1617297dfdac3e0a52/checks?check_suite_id=646317117", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "PENDING", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "PENDING", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "PENDING", + "contexts": [ + { + "state": "PENDING", + "description": "The Travis CI build is in progress", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/682082632?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-01T19:19:54Z", + "committedDate": "2020-05-01T19:19:54Z", + "pushedDate": "2020-05-01T19:20:22Z", + "abbreviatedOid": "af63694", + "oid": "af636941dac21c0752befa1617297dfdac3e0a52", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 2, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjUyNzAxNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@tomer-openfin Thank you for submitting this PR! \n\n\n## Code Reviews\n\nBecause this PR edits the configuration file, it can be merged once it's reviewed by a DT maintainer.\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#testing)\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": "2020-05-01T19:23:45Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjUyNzAyMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @chrisbarker @rdepena @whyn07m3 @licui3936 — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/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": "2020-05-01T19:23:46Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/openfin/OTHER_FILES.txt", + "additions": 14, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/application/application.d.ts", + "additions": 4, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/application/applicationOption.d.ts", + "additions": 6, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/events/platform.d.ts", + "additions": 18, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/events/view.d.ts", + "additions": 22, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/events/window.d.ts", + "additions": 14, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/fin.d.ts", + "additions": 3, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/channel.d.ts", + "additions": 2, + "deletions": 7, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/client.d.ts", + "additions": 8, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/index.d.ts", + "additions": 8, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/provider.d.ts", + "additions": 4, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/commands.d.ts", + "additions": 12, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/golden-layout.d.ts", + "additions": 887, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/layout.d.ts", + "additions": 123, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/openfin-layout.d.ts", + "additions": 69, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/platform-provider.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/platform.d.ts", + "additions": 48, + "deletions": 29, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/resizable-view.d.ts", + "additions": 21, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/platform/utils.d.ts", + "additions": 54, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/system/system.d.ts", + "additions": 6, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/view/view.d.ts", + "additions": 241, + "deletions": 15, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/webcontents/webcontents.d.ts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/window/window.d.ts", + "additions": 28, + "deletions": 18, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/api/window/windowOption.d.ts", + "additions": 8, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/environment/environment.d.ts", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/environment/node-env.d.ts", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/environment/openfin-env.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/fdc3/context.d.ts", + "additions": 123, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/fdc3/contextChannels.d.ts", + "additions": 369, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/fdc3/directory.d.ts", + "additions": 161, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/fdc3/errors.d.ts", + "additions": 100, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/fdc3/intents.d.ts", + "additions": 20, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/fdc3/main.d.ts", + "additions": 288, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/shapes.d.ts", + "additions": 25, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/transport/transport.d.ts", + "additions": 1, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/_v2/util/entity-type.d.ts", + "additions": 2, + "deletions": 4, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/index.d.ts", + "additions": 297, + "deletions": 61, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/openfin-tests.ts", + "additions": 59, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/tslint.json", + "additions": 2, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/OTHER_FILES.txt", + "additions": 77, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/application/application.d.ts", + "additions": 442, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/application/applicationOption.d.ts", + "additions": 15, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/base.d.ts", + "additions": 45, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/clipboard/clipboard.d.ts", + "additions": 70, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/clipboard/write-request.d.ts", + "additions": 12, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/application.d.ts", + "additions": 66, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/base.d.ts", + "additions": 18, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/channel.d.ts", + "additions": 10, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/emitterMap.d.ts", + "additions": 16, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/eventAggregator.d.ts", + "additions": 5, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/externalApplication.d.ts", + "additions": 5, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/externalWindow.d.ts", + "additions": 7, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/frame.d.ts", + "additions": 9, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/globalHotkey.d.ts", + "additions": 11, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/notifications.d.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/system.d.ts", + "additions": 27, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/view.d.ts", + "additions": 32, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/webcontents.d.ts", + "additions": 38, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/events/window.d.ts", + "additions": 192, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/external-application/external-application.d.ts", + "additions": 131, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/external-window/external-window.d.ts", + "additions": 257, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/fin.d.ts", + "additions": 32, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/frame/frame.d.ts", + "additions": 164, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/global-hotkey/index.d.ts", + "additions": 42, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/channel.d.ts", + "additions": 37, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/client.d.ts", + "additions": 12, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/index.d.ts", + "additions": 33, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/provider.d.ts", + "additions": 18, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/interappbus.d.ts", + "additions": 80, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/notification/notification.d.ts", + "additions": 81, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/platform/platform.d.ts", + "additions": 192, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/application.d.ts", + "additions": 5, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/clearCacheOption.d.ts", + "additions": 6, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/cookie.d.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/crashReporterOption.d.ts", + "additions": 4, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/download-asset.d.ts", + "additions": 18, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/download-preload.d.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/entity.d.ts", + "additions": 11, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/external-process.d.ts", + "additions": 41, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/host-specs.d.ts", + "additions": 24, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/log.d.ts", + "additions": 11, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/monitor.d.ts", + "additions": 39, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/point.d.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/process.d.ts", + "additions": 15, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/proxy.d.ts", + "additions": 15, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/registry-info.d.ts", + "additions": 7, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/runtime-info.d.ts", + "additions": 11, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/rvm.d.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/system.d.ts", + "additions": 841, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/system/window.d.ts", + "additions": 16, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/view/view.d.ts", + "additions": 195, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/webcontents/webcontents.d.ts", + "additions": 21, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/window/bounds-changed.d.ts", + "additions": 14, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/window/window.d.ts", + "additions": 963, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/api/window/windowOption.d.ts", + "additions": 88, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/environment/environment.d.ts", + "additions": 15, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/environment/node-env.d.ts", + "additions": 16, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/environment/openfin-env.d.ts", + "additions": 16, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/environment/openfin-renderer-api.d.ts", + "additions": 8, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/openfin/v49/_v2/identity.d.ts", + "additions": 18, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 121 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzczOTYzMTI=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/derived.json b/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/derived.json new file mode 100644 index 0000000000..442df87220 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/derived.json @@ -0,0 +1,438 @@ +{ + "type": "info", + "now": "2020-05-01T19:26:47.547Z", + "pr_number": 44424, + "author": "tomer-openfin", + "headCommitOid": "af636941dac21c0752befa1617297dfdac3e0a52", + "mergeBaseOid": "master", + "lastPushDate": "2020-05-01T19:20:22.000Z", + "lastActivityDate": "2020-05-01T19:23:41.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": true, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "openfin", + "kind": "edit", + "files": [ + { + "path": "types/openfin/OTHER_FILES.txt", + "kind": "package-meta", + "suspect": "edited" + }, + { + "path": "types/openfin/_v2/api/application/application.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/application/applicationOption.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/events/platform.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/events/view.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/events/window.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/fin.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/channel.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/client.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/index.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/interappbus/channel/provider.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/commands.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/golden-layout.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/layout.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/openfin-layout.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/platform-provider.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/platform.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/resizable-view.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/platform/utils.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/system/system.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/view/view.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/webcontents/webcontents.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/window/window.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/api/window/windowOption.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/environment/environment.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/environment/node-env.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/environment/openfin-env.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/fdc3/context.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/fdc3/contextChannels.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/fdc3/directory.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/fdc3/errors.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/fdc3/intents.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/fdc3/main.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/shapes.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/transport/transport.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/_v2/util/entity-type.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/index.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/openfin-tests.ts", + "kind": "test" + }, + { + "path": "types/openfin/tslint.json", + "kind": "package-meta", + "suspect": "edited" + }, + { + "path": "types/openfin/v49/OTHER_FILES.txt", + "kind": "package-meta", + "suspect": "edited" + }, + { + "path": "types/openfin/v49/_v2/api/application/application.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/application/applicationOption.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/base.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/clipboard/clipboard.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/clipboard/write-request.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/application.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/base.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/channel.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/emitterMap.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/eventAggregator.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/externalApplication.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/externalWindow.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/frame.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/globalHotkey.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/notifications.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/system.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/view.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/webcontents.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/events/window.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/external-application/external-application.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/external-window/external-window.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/fin.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/frame/frame.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/global-hotkey/index.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/channel.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/client.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/index.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/channel/provider.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/interappbus/interappbus.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/notification/notification.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/platform/platform.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/application.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/clearCacheOption.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/cookie.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/crashReporterOption.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/download-asset.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/download-preload.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/entity.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/external-process.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/host-specs.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/log.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/monitor.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/point.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/process.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/proxy.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/registry-info.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/runtime-info.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/rvm.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/system.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/system/window.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/view/view.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/webcontents/webcontents.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/window/bounds-changed.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/window/window.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/api/window/windowOption.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/environment/environment.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/environment/node-env.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/environment/openfin-env.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/environment/openfin-renderer-api.d.ts", + "kind": "definition" + }, + { + "path": "types/openfin/v49/_v2/identity.d.ts", + "kind": "definition" + } + ], + "owners": [ + "chrisbarker", + "rdepena", + "whyn07m3", + "licui3936", + "tomer-openfin" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "unknown" +} diff --git a/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/mutations.json b/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/mutations.json new file mode 100644 index 0000000000..e533b1c8a0 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/mutations.json @@ -0,0 +1,23 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjUyNzAxNQ==", + "body": "@tomer-openfin Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR might touch some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and possibly others)\n\n\n***Note: this PR touches too many files, check it!***\n* `openfin` — [on npm](https://www.npmjs.com/package/openfin), [on unpkg](https://unpkg.com/browse/openfin@latest/) (author is owner)\n - Config files to check:\n - [`openfin/OTHER_FILES.txt`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/files/af636941dac21c0752befa1617297dfdac3e0a52#diff-004d79898182f654ce84ac7deed9a38f3c41c438de9af7a5e1edf9c5cfa0fcb4): edited\n - [`openfin/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/files/af636941dac21c0752befa1617297dfdac3e0a52#diff-59b1ab6d62c34c8b064f27d3f16a88e20e60adde2ed7bf0d3529a59fa0c8ed03): edited\n - [`openfin/v49/OTHER_FILES.txt`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/files/af636941dac21c0752befa1617297dfdac3e0a52#diff-90b0a88e7d7d6ab8f4246471243a6fbc2699361d94c22ab900ff93b9e190893c): edited\n\n## Code Reviews\n\nBecause this PR edits the configuration file, it can be merged once it's reviewed by a DT maintainer.\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 A DT maintainer needs to approve changes that affect module config files\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyOTUzOTk4NzE4", + "LA_kwDOAFz6BM8AAAABEGgY4Q" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDEyMjY1MDE2" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/result.json b/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/result.json new file mode 100644 index 0000000000..bde3a987c9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44424-2-after-travis-second/result.json @@ -0,0 +1,22 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Possibly Edits Infrastructure", + "Author is Owner", + "Check Config", + "Too Many Files" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@tomer-openfin Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR might touch some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and possibly others)\n\n\n***Note: this PR touches too many files, check it!***\n* `openfin` — [on npm](https://www.npmjs.com/package/openfin), [on unpkg](https://unpkg.com/browse/openfin@latest/) (author is owner)\n - Config files to check:\n - [`openfin/OTHER_FILES.txt`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/files/af636941dac21c0752befa1617297dfdac3e0a52#diff-004d79898182f654ce84ac7deed9a38f3c41c438de9af7a5e1edf9c5cfa0fcb4): edited\n - [`openfin/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/files/af636941dac21c0752befa1617297dfdac3e0a52#diff-59b1ab6d62c34c8b064f27d3f16a88e20e60adde2ed7bf0d3529a59fa0c8ed03): edited\n - [`openfin/v49/OTHER_FILES.txt`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/files/af636941dac21c0752befa1617297dfdac3e0a52#diff-90b0a88e7d7d6ab8f4246471243a6fbc2699361d94c22ab900ff93b9e190893c): edited\n\n## Code Reviews\n\nBecause this PR edits the configuration file, it can be merged once it's reviewed by a DT maintainer.\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 A DT maintainer needs to approve changes that affect module config files\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", + "status": "🔔 @chrisbarker @rdepena @whyn07m3 @licui3936 — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44424/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44437/_downloads.json b/packages/mergebot/src/_tests/fixtures/44437/_downloads.json new file mode 100644 index 0000000000..3cbbddcc6c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44437/_downloads.json @@ -0,0 +1,3 @@ +{ + "prompts": 539890 +} diff --git a/packages/mergebot/src/_tests/fixtures/44437/_files.json b/packages/mergebot/src/_tests/fixtures/44437/_files.json new file mode 100644 index 0000000000..fd14fd7567 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44437/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/prompts/index.d.ts": "// Type definitions for prompts 2.0\n// Project: https://github.com/terkelg/prompts\n// Definitions by: Berkay GURSOY \n// Daniel Perez Alvarez \n// Kamontat Chantrachirathumrong \n// theweirdone \n// whoaa512 \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.9\n\nexport = prompts;\n", + "eb92456861d4537c6e96dd7865e715aa4812aae0:types/prompts/index.d.ts": "// Type definitions for prompts 2.0\n// Project: https://github.com/terkelg/prompts\n// Definitions by: Berkay GURSOY \n// Daniel Perez Alvarez \n// Kamontat Chantrachirathumrong \n// theweirdone \n// whoaa512 \n// John Reilly \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.9\n\nexport = prompts;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44437/_response.json b/packages/mergebot/src/_tests/fixtures/44437/_response.json new file mode 100644 index 0000000000..91fcebfc32 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44437/_response.json @@ -0,0 +1,339 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDEyNDQzMjI0", + "title": "fix: prompts Choice types aren't correct", + "lastEditedAt": null, + "author": { + "login": "johnnyreilly", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-05-02T12:14:39Z", + "labels": { + "nodes": [ + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44437, + "state": "OPEN", + "headRefOid": "eb92456861d4537c6e96dd7865e715aa4812aae0", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-02T12:14:43Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-02T12:14:44Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-02T12:19:18Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-02T12:21:19Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "kamontat", + "__typename": "User" + }, + "commit": { + "oid": "eb92456861d4537c6e96dd7865e715aa4812aae0", + "abbreviatedOid": "eb92456", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-05-02T12:17:22Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44437#pullrequestreview-404523676", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9d8b6380f21d8a52142691a5b36a863b36bade17/checks?check_suite_id=647594194", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9d8b6380f21d8a52142691a5b36a863b36bade17/checks?check_suite_id=647594194", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/682263887?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + }, + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/682263926?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-02T12:14:23Z", + "committedDate": "2020-05-02T12:14:23Z", + "pushedDate": "2020-05-02T12:14:54Z", + "abbreviatedOid": "9d8b638", + "oid": "9d8b6380f21d8a52142691a5b36a863b36bade17", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/eb92456861d4537c6e96dd7865e715aa4812aae0/checks?check_suite_id=647596466", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/eb92456861d4537c6e96dd7865e715aa4812aae0/checks?check_suite_id=647596466", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/682264317?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + }, + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/682264289?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-02T12:17:03Z", + "committedDate": "2020-05-02T12:17:03Z", + "pushedDate": "2020-05-02T12:17:06Z", + "abbreviatedOid": "eb92456", + "oid": "eb92456861d4537c6e96dd7865e715aa4812aae0", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 4, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjk0NDUxOA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@johnnyreilly Thank you for submitting this PR! \n\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\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", + "createdAt": "2020-05-02T12:14:43Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjk0NDUxOQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @Berkays @unindented @kamontat @theweirdone @whoaa512 — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44437/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": "2020-05-02T12:14:44Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjk0NTA1NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@johnnyreilly Everything looks good here. Great job! I am ready to merge this PR (at eb92456) on your behalf.\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", + "createdAt": "2020-05-02T12:19:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjk0NTMxMA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #44437 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 32.8 | 35.1 | +7.2% |\n| Type count | 2387 | 2397 | 0% |\n| Assignability cache size | 180 | 182 | +1% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 44 | 49 | +11% |\n| Identifiers in tests | 44 | 49 | +11% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 86.3 | 89.3 | +3.4% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 23.7% | 22.3% | |\n|     Worst duration (ms) | 146.0 | 143.5 | -1.7% |\n|     Worst identifier | [name](/DefinitelyTyped/DefinitelyTyped/blob/e0465ecda7451878e007c9c153fc6c4b89c147b5/types/prompts/prompts-tests.ts#L20) | [message](/DefinitelyTyped/DefinitelyTyped/blob/46228ab158dd6c118a6f7c54034d97c4e2d0b90b/types/prompts/prompts-tests.ts#L31) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 87.7 | 87.0 | -0.9% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 25.5% | 23.0% | -9.7% |\n|     Worst duration (ms) | 125.7 | 123.4 | -1.9% |\n|     Worst identifier | [name](/DefinitelyTyped/DefinitelyTyped/blob/e0465ecda7451878e007c9c153fc6c4b89c147b5/types/prompts/prompts-tests.ts#L30) | [values](/DefinitelyTyped/DefinitelyTyped/blob/46228ab158dd6c118a6f7c54034d97c4e2d0b90b/types/prompts/prompts-tests.ts#L25) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-05-02T12:21:19Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/prompts/index.d.ts", + "additions": 4, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/prompts/prompts-tests.ts", + "additions": 8, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzc0MjMyNjM=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz", + "name": "Waiting for Author to Merge", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44437/derived.json b/packages/mergebot/src/_tests/fixtures/44437/derived.json new file mode 100644 index 0000000000..c1a63696d4 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44437/derived.json @@ -0,0 +1,53 @@ +{ + "type": "info", + "now": "2020-05-02T15:44:09.276Z", + "pr_number": 44437, + "author": "johnnyreilly", + "headCommitOid": "eb92456861d4537c6e96dd7865e715aa4812aae0", + "mergeBaseOid": "master", + "lastPushDate": "2020-05-02T12:17:06.000Z", + "lastActivityDate": "2020-05-02T12:17:22.000Z", + "mergeOfferDate": "2020-05-02T12:19:18.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": "prompts", + "kind": "edit", + "files": [ + { + "path": "types/prompts/index.d.ts", + "kind": "definition" + }, + { + "path": "types/prompts/prompts-tests.ts", + "kind": "test" + } + ], + "owners": [ + "Berkays", + "unindented", + "kamontat", + "theweirdone", + "whoaa512" + ], + "addedOwners": [ + "johnnyreilly" + ], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "kamontat", + "date": "2020-05-02T12:17:22.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44437/mutations.json b/packages/mergebot/src/_tests/fixtures/44437/mutations.json new file mode 100644 index 0000000000..8f9b26cf6f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44437/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjk0NDUxOA==", + "body": "@johnnyreilly Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `prompts` — [on npm](https://www.npmjs.com/package/prompts), [on unpkg](https://unpkg.com/browse/prompts@latest/)\n - owner-approval: @kamontat\n - 1 added owner: ✎@johnnyreilly\n\n@johnnyreilly: I see that you have added yourself as an owner, are you sure you want to [become an owner](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-definition-owners)?\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44437&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": [ + "MDU6TGFiZWwyNDk1OTc2ODI5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDEyNDQzMjI0" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjk0NTA1NA==", + "body": "@johnnyreilly: Everything looks good here. I am ready to merge this PR (at eb92456) 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(@Berkays, @unindented, @kamontat, @theweirdone, @whoaa512: you can do this too.)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44437/result.json b/packages/mergebot/src/_tests/fixtures/44437/result.json new file mode 100644 index 0000000000..21441a0cf6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44437/result.json @@ -0,0 +1,22 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Popular package", + "Owner Approved", + "Edits Owners", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@johnnyreilly Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `prompts` — [on npm](https://www.npmjs.com/package/prompts), [on unpkg](https://unpkg.com/browse/prompts@latest/)\n - owner-approval: @kamontat\n - 1 added owner: ✎@johnnyreilly\n\n@johnnyreilly: I see that you have added yourself as an owner, are you sure you want to [become an owner](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-definition-owners)?\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44437&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": "@johnnyreilly: Everything looks good here. I am ready to merge this PR (at eb92456) 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(@Berkays, @unindented, @kamontat, @theweirdone, @whoaa512: you can do this too.)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44439/_downloads.json b/packages/mergebot/src/_tests/fixtures/44439/_downloads.json new file mode 100644 index 0000000000..dd3099584b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44439/_downloads.json @@ -0,0 +1,3 @@ +{ + "detect-port": 58143 +} diff --git a/packages/mergebot/src/_tests/fixtures/44439/_files.json b/packages/mergebot/src/_tests/fixtures/44439/_files.json new file mode 100644 index 0000000000..87e32e7541 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44439/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/detect-port/index.d.ts": "// Type definitions for detect-port 1.1\n// Project: https://github.com/node-modules/detect-port\n// Definitions by: François Nguyen \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n", + "f8b161266a38186c3d7ab715ea63f68d5ef542ed:types/detect-port/index.d.ts": "// Type definitions for detect-port 1.3\n// Project: https://github.com/node-modules/detect-port\n// Definitions by: François Nguyen \n// Ivan Medina \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44439/_response.json b/packages/mergebot/src/_tests/fixtures/44439/_response.json new file mode 100644 index 0000000000..78182ccb37 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44439/_response.json @@ -0,0 +1,312 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDEyNDU0MjUw", + "title": "[detect-port]: add PortConfig type for first argument from default function", + "lastEditedAt": null, + "author": { + "login": "ivandevp", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-05-02T13:48:22Z", + "labels": { + "nodes": [ + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Edits Infrastructure", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44439, + "state": "OPEN", + "headRefOid": "f8b161266a38186c3d7ab715ea63f68d5ef542ed", + "changedFiles": 3, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-02T13:48:26Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-02T13:48:27Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-02T13:52:05Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "orta", + "__typename": "User" + }, + "createdAt": "2020-05-02T14:36:15Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-05-02T13:37:26Z", + "committedDate": "2020-05-02T13:37:26Z", + "pushedDate": "2020-05-02T13:39:10Z", + "abbreviatedOid": "52fb72f", + "oid": "52fb72f9072bbfc60b0a5c28105ea90afceef975", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4d52a3b71a519700e2da28c5fb842d361edb1250/checks?check_suite_id=647699672", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4d52a3b71a519700e2da28c5fb842d361edb1250/checks?check_suite_id=647699672", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "FAILURE", + "contexts": [ + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/682300196?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-02T13:40:19Z", + "committedDate": "2020-05-02T13:40:19Z", + "pushedDate": "2020-05-02T13:40:30Z", + "abbreviatedOid": "4d52a3b", + "oid": "4d52a3b71a519700e2da28c5fb842d361edb1250", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/f8b161266a38186c3d7ab715ea63f68d5ef542ed/checks?check_suite_id=647705859", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f8b161266a38186c3d7ab715ea63f68d5ef542ed/checks?check_suite_id=647705859", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/682301523?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-02T13:53:49Z", + "committedDate": "2020-05-02T13:53:49Z", + "pushedDate": "2020-05-02T13:54:02Z", + "abbreviatedOid": "f8b1612", + "oid": "f8b161266a38186c3d7ab715ea63f68d5ef542ed", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 4, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjk1NjU0Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@ivandevp Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 - keep an eye on this comment as I'll be updating it with information as things progress.\n\n This PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare - did you mean to do this?\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed by a DT maintainer.\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#testing)\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": "2020-05-02T13:48:26Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjk1NjU0NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @lith-light-g — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44439/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": "2020-05-02T13:48:27Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjk1NzEwMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #44439 | diff |\n| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 31.2 | 31.4 | +0.6% |\n| Type count | 2176 | 2200 | +1% |\n| Assignability cache size | 117 | 119 | +2% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 17 | 32 | +88% |\n| Identifiers in tests | 17 | 32 | +88% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 68.6 | 75.1 | +9.5% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 19.0% | 30.4% | |\n|     Worst duration (ms) | 88.5 | 102.2 | +15.4% |\n|     Worst identifier | [catch](/DefinitelyTyped/DefinitelyTyped/blob/e0465ecda7451878e007c9c153fc6c4b89c147b5/types/detect-port/detect-port-tests.ts#L21) | [Error](/DefinitelyTyped/DefinitelyTyped/blob/5965c294276493ce60ed75d0ea1b41da992f6f3f/types/detect-port/detect-port-tests.ts#L9) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 68.3 | 73.9 | +8.2% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 21.4% | 28.7% | +33.8% |\n|     Worst duration (ms) | 77.9 | 90.0 | +15.4% |\n|     Worst identifier | [detect](/DefinitelyTyped/DefinitelyTyped/blob/e0465ecda7451878e007c9c153fc6c4b89c147b5/types/detect-port/detect-port-tests.ts#L8) | [catch](/DefinitelyTyped/DefinitelyTyped/blob/5965c294276493ce60ed75d0ea1b41da992f6f3f/types/detect-port/detect-port-tests.ts#L20) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-05-02T13:52:05Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjk2Mjk4OA==", + "author": { + "login": "orta", + "__typename": "User" + }, + "body": "I think you accidentally included the .tgz in this PR ", + "createdAt": "2020-05-02T14:36:15Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/detect-port-1.1.4.tgz", + "additions": 0, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/detect-port/detect-port-tests.ts", + "additions": 14, + "deletions": 7, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/detect-port/index.d.ts", + "additions": 12, + "deletions": 3, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 3 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzc0MjY3NjE=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44439/derived.json b/packages/mergebot/src/_tests/fixtures/44439/derived.json new file mode 100644 index 0000000000..bddd38e26a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44439/derived.json @@ -0,0 +1,56 @@ +{ + "type": "info", + "now": "2020-05-02T14:37:15.529Z", + "pr_number": 44439, + "author": "ivandevp", + "headCommitOid": "f8b161266a38186c3d7ab715ea63f68d5ef542ed", + "mergeBaseOid": "master", + "lastPushDate": "2020-05-02T13:54:02.000Z", + "lastActivityDate": "2020-05-02T14:36:15.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": null, + "kind": "edit", + "files": [ + { + "path": "types/detect-port-1.1.4.tgz", + "kind": "infrastructure" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical", + "isSafeInfrastructureEdit": false + }, + { + "name": "detect-port", + "kind": "edit", + "files": [ + { + "path": "types/detect-port/detect-port-tests.ts", + "kind": "test" + }, + { + "path": "types/detect-port/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "lith-light-g" + ], + "addedOwners": [ + "ivandevp" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44439/mutations.json b/packages/mergebot/src/_tests/fixtures/44439/mutations.json new file mode 100644 index 0000000000..9cd2e33f00 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44439/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMjk1NjU0Mg==", + "body": "@ivandevp 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\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and infra files)\n\n* `detect-port` — [on npm](https://www.npmjs.com/package/detect-port), [on unpkg](https://unpkg.com/browse/detect-port@latest/)\n - 1 added owner: ✎@ivandevp\n* Infra files\n - [`types/detect-port-1.1.4.tgz`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44439/files/f8b161266a38186c3d7ab715ea63f68d5ef542ed#diff-d927308abcdc03d8d50cb2414a113220f4d7b8c6733a1b0c12ea6ac94809d97a)\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=44439&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 DT infrastructure ([`types/detect-port-1.1.4.tgz`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44439/files/f8b161266a38186c3d7ab715ea63f68d5ef542ed#diff-d927308abcdc03d8d50cb2414a113220f4d7b8c6733a1b0c12ea6ac94809d97a))\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyNDk1OTc2ODI5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDEyNDU0MjUw" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzc0MjY3NjE=", + "columnId": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44439/result.json b/packages/mergebot/src/_tests/fixtures/44439/result.json new file mode 100644 index 0000000000..af7c286e31 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44439/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "Edits Owners", + "Edits Infrastructure" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@ivandevp 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\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and infra files)\n\n* `detect-port` — [on npm](https://www.npmjs.com/package/detect-port), [on unpkg](https://unpkg.com/browse/detect-port@latest/)\n - 1 added owner: ✎@ivandevp\n* Infra files\n - [`types/detect-port-1.1.4.tgz`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44439/files/f8b161266a38186c3d7ab715ea63f68d5ef542ed#diff-d927308abcdc03d8d50cb2414a113220f4d7b8c6733a1b0c12ea6ac94809d97a)\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=44439&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 DT infrastructure ([`types/detect-port-1.1.4.tgz`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44439/files/f8b161266a38186c3d7ab715ea63f68d5ef542ed#diff-d927308abcdc03d8d50cb2414a113220f4d7b8c6733a1b0c12ea6ac94809d97a))\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", + "status": "🔔 @lith-light-g — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44439/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44631/_downloads.json b/packages/mergebot/src/_tests/fixtures/44631/_downloads.json new file mode 100644 index 0000000000..472a1b855d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44631/_downloads.json @@ -0,0 +1,3 @@ +{ + "kefir": 12315 +} diff --git a/packages/mergebot/src/_tests/fixtures/44631/_files.json b/packages/mergebot/src/_tests/fixtures/44631/_files.json new file mode 100644 index 0000000000..05e256b23a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44631/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/kefir/index.d.ts": "// Type definitions for Kefir 3.8.1\n// Project: http://rpominov.github.io/kefir/\n// Definitions by: Aya Morisawa \n// Piotr Hitori Bosak \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.7\n\n/// \n\nexport type ValueOfAnObservable> = T[''];\n\nexport interface Subscription {\n unsubscribe(): void;\n readonly closed: boolean;\n}\n\nexport interface Observer {\n value?: (value: T) => void;\n error?: (error: S) => void;\n end?: () => void;\n}\n\ninterface ESObserver {\n start?: Function,\n next?: (value: T) => any,\n error?: (error: S) => any,\n complete?: () => any,\n}\n\ninterface ESObservable {\n subscribe(callbacks: ESObserver): { unsubscribe(): void };\n}\n\nexport class Observable {\n '': T; // TypeScript hack to enable value unwrapping for combine/flatMap\n\n toProperty(): Property;\n toProperty(getCurrent?: () => T2): Property;\n changes(): Observable;\n\n // Subscribe / add side effects\n onValue(callback: (value: T) => void): this;\n offValue(callback: (value: T) => void): this;\n onError(callback: (error: S) => void): this;\n offError(callback: (error: S) => void): this;\n onEnd(callback: () => void): this;\n offEnd(callback: () => void): this;\n onAny(callback: (event: Event) => void): this;\n offAny(callback: (event: Event) => void): this;\n log(name?: string): this;\n spy(name?: string): this;\n offLog(name?: string): this;\n offSpy(name?: string): this;\n flatten(transformer?: (value: T) => U[]): Stream;\n toPromise(): Promise;\n toPromise>(PromiseConstructor: () => W): W;\n toESObservable(): ESObservable;\n // This method is designed to replace all other methods for subscribing\n observe(params: Observer): Subscription;\n observe(\n onValue?: (value: T) => void,\n onError?: (error: S) => void,\n onEnd?: () => void\n ): Subscription;\n setName(source: Observable, selfName: string): this;\n setName(selfName: string): this;\n\n thru(cb: (obs: Observable) => R): R;\n // Modify an stream\n map(fn: (value: T) => U): Observable;\n filter(fn: (value: T) => value is U): Observable\n filter(predicate?: (value: T) => boolean): Observable;\n take(n: number): Observable;\n takeWhile(predicate?: (value: T) => boolean): Observable;\n last(): Observable;\n skip(n: number): Observable;\n skipWhile(predicate?: (value: T) => boolean): Observable;\n skipDuplicates(comparator?: (a: T, b: T) => boolean): Observable;\n diff(fn?: (prev: T, next: T) => T, seed?: T): Observable;\n scan(fn: (prev: T | W, next: T) => W): Observable;\n scan(fn: (prev: W, next: T) => W, seed: W): Observable;\n delay(wait: number): Observable;\n throttle(wait: number, options?: { leading?: boolean, trailing?: boolean }): Observable;\n debounce(wait: number, options?: { immediate: boolean }): Observable;\n valuesToErrors(): Observable;\n valuesToErrors(handler: (value: T) => { convert: boolean, error: U }): Observable;\n errorsToValues(handler?: (error: S) => { convert: boolean, value: U }): Observable;\n mapErrors(fn: (error: S) => U): Observable;\n filterErrors(predicate?: (error: S) => boolean): Observable;\n endOnError(): Observable;\n takeErrors(n: number): Observable;\n ignoreValues(): Observable;\n ignoreErrors(): Observable;\n ignoreEnd(): Observable;\n beforeEnd(fn: () => U): Observable;\n slidingWindow(max: number, mix?: number): Observable;\n bufferWhile(predicate: (value: T) => boolean): Observable;\n bufferWithCount(count: number, options?: { flushOnEnd: boolean }): Observable;\n bufferWithTimeOrCount(interval: number, count: number, options?: { flushOnEnd: boolean }): Observable;\n transduce(transducer: any): Observable;\n withHandler(handler: (emitter: Emitter, event: Event) => void): Observable;\n // Combine streams\n combine(otherObs: Observable, combinator?: (value: T, ...values: U[]) => W): Observable;\n zip(otherObs: Observable, combinator?: (value: T, ...values: U[]) => W): Observable;\n merge(otherObs: Observable): Observable;\n concat(otherObs: Observable): Observable;\n flatMap(transform: (value: T) => Observable): Observable;\n flatMap>(): Observable, any>;\n flatMapLatest(fn: (value: T) => Observable): Observable;\n flatMapLatest>(): Observable, any>;\n flatMapFirst(fn: (value: T) => Observable): Observable;\n flatMapFirst>(): Observable, any>;\n flatMapConcat(fn: (value: T) => Observable): Observable;\n flatMapConcat>(): Observable, any>;\n flatMapConcurLimit(fn: (value: T) => Observable, limit: number): Observable;\n flatMapErrors(transform: (error: S) => Observable): Observable;\n // Combine two streams\n filterBy(otherObs: Observable): Observable;\n sampledBy(otherObs: Observable): Observable;\n sampledBy(otherObs: Observable, combinator: (a: T, b: U) => W): Observable;\n skipUntilBy(otherObs: Observable): Observable;\n takeUntilBy(otherObs: Observable): Observable;\n bufferBy(otherObs: Observable, options?: { flushOnEnd: boolean }): Observable;\n bufferWhileBy(otherObs: Observable, options?: { flushOnEnd?: boolean, flushOnChange?: boolean }): Observable;\n awaiting(otherObs: Observable): Observable;\n}\n\nexport class Stream extends Observable {\n\n}\n\nexport class Property extends Observable {\n\n}\n\nexport class Pool extends Observable {\n plug(obs: Observable): this;\n unplug(obs: Observable): this;\n}\n\nexport type Event =\n { type: 'value', value: V } |\n { type: 'error', value: E } |\n { type: 'end', value: void };\n\nexport interface Emitter {\n value(value: V): boolean;\n event(event: Event): boolean;\n error(e: E): boolean;\n end(): void;\n\n // Deprecated methods\n emit(value: V): boolean;\n emitEvent(event: Event): boolean;\n}\n\n// Create a stream\nexport function never(): Stream;\nexport function later(wait: number, value: T): Stream;\nexport function interval(interval: number, value: T): Stream;\nexport function sequentially(interval: number, values: T[]): Stream;\nexport function fromPoll(interval: number, fn: () => T): Stream;\nexport function withInterval(interval: number, handler: (emitter: Emitter) => void): Stream;\nexport function fromCallback(fn: (callback: (value: T) => void) => void): Stream;\nexport function fromNodeCallback(fn: (callback: (error: S | null, result: T) => void) => void): Stream;\nexport function fromEvents(target: EventTarget | NodeJS.EventEmitter | { on: Function, off: Function }, eventName: string, transform?: (value: T) => S): Stream;\nexport function stream(subscribe: (emitter: Emitter) => Function | void): Stream;\nexport function fromESObservable(observable: any): Stream\n\n// Create a property\nexport function constant(value: T): Property;\nexport function constantError(error: T): Property;\nexport function fromPromise(promise: Promise): Property;\n// Combine observables\nexport function combine(obss: Observable[], passiveObss: Observable[], combinator?: (...values: T[]) => U): Stream;\nexport function combine(obss: Observable[], combinator: (...values: T[]) => U): Stream;\nexport function combine }>(obss: T): Stream<{ [P in keyof T]: ValueOfAnObservable }, any>;\nexport function combine }, K extends { [name: string]: Observable }>(obss: T, passiveObss: K): Stream<{ [P in keyof T]: ValueOfAnObservable } & { [P in keyof K]: ValueOfAnObservable }, any>;\nexport function combine], P extends keyof T>(obss: T): Stream<[ValueOfAnObservable], any>;\nexport function combine, Observable, Observable, Observable, Observable, Observable, Observable, Observable]>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable], any>;\nexport function combine, Observable, Observable, Observable, Observable, Observable, Observable]>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable], any>;\nexport function combine, Observable, Observable, Observable, Observable, Observable]>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObs", + "96d6582f60431d273c179dcf6816426b4f1e37ac:types/kefir/index.d.ts": "// Type definitions for Kefir 3.8.1\n// Project: http://rpominov.github.io/kefir/\n// Definitions by: Aya Morisawa \n// Piotr Hitori Bosak \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.7\n\n/// \n\nexport type ValueOfAnObservable> = T[''];\n\nexport interface Subscription {\n unsubscribe(): void;\n readonly closed: boolean;\n}\n\nexport interface Observer {\n value?: (value: T) => void;\n error?: (error: S) => void;\n end?: () => void;\n}\n\ninterface ESObserver {\n start?: Function,\n next?: (value: T) => any,\n error?: (error: S) => any,\n complete?: () => any,\n}\n\ninterface ESObservable {\n subscribe(callbacks: ESObserver): { unsubscribe(): void };\n}\n\nexport class Observable {\n '': T; // TypeScript hack to enable value unwrapping for combine/flatMap\n\n toProperty(): Property;\n toProperty(getCurrent?: () => T2): Property;\n changes(): Observable;\n\n // Subscribe / add side effects\n onValue(callback: (value: T) => void): this;\n offValue(callback: (value: T) => void): this;\n onError(callback: (error: S) => void): this;\n offError(callback: (error: S) => void): this;\n onEnd(callback: () => void): this;\n offEnd(callback: () => void): this;\n onAny(callback: (event: Event) => void): this;\n offAny(callback: (event: Event) => void): this;\n log(name?: string): this;\n spy(name?: string): this;\n offLog(name?: string): this;\n offSpy(name?: string): this;\n flatten(transformer?: (value: T) => U[]): Stream;\n toPromise(): Promise;\n toPromise>(PromiseConstructor: () => W): W;\n toESObservable(): ESObservable;\n // This method is designed to replace all other methods for subscribing\n observe(params: Observer): Subscription;\n observe(\n onValue?: (value: T) => void,\n onError?: (error: S) => void,\n onEnd?: () => void\n ): Subscription;\n setName(source: Observable, selfName: string): this;\n setName(selfName: string): this;\n\n thru(cb: (obs: Observable) => R): R;\n // Modify an stream\n map(fn: (value: T) => U): Observable;\n filter(fn: (value: T) => value is U): Observable\n filter(predicate?: (value: T) => boolean): Observable;\n take(n: number): Observable;\n takeWhile(predicate?: (value: T) => boolean): Observable;\n last(): Observable;\n skip(n: number): Observable;\n skipWhile(predicate?: (value: T) => boolean): Observable;\n skipDuplicates(comparator?: (a: T, b: T) => boolean): Observable;\n diff(fn?: (prev: T, next: T) => T, seed?: T): Observable;\n scan(fn: (prev: T | W, next: T) => W): Observable;\n scan(fn: (prev: W, next: T) => W, seed: W): Observable;\n delay(wait: number): Observable;\n throttle(wait: number, options?: { leading?: boolean, trailing?: boolean }): Observable;\n debounce(wait: number, options?: { immediate: boolean }): Observable;\n valuesToErrors(): Observable;\n valuesToErrors(handler: (value: T) => { convert: boolean, error: U }): Observable;\n errorsToValues(handler?: (error: S) => { convert: boolean, value: U }): Observable;\n mapErrors(fn: (error: S) => U): Observable;\n filterErrors(predicate?: (error: S) => boolean): Observable;\n endOnError(): Observable;\n takeErrors(n: number): Observable;\n ignoreValues(): Observable;\n ignoreErrors(): Observable;\n ignoreEnd(): Observable;\n beforeEnd(fn: () => U): Observable;\n slidingWindow(max: number, mix?: number): Observable;\n bufferWhile(predicate: (value: T) => boolean): Observable;\n bufferWithCount(count: number, options?: { flushOnEnd: boolean }): Observable;\n bufferWithTimeOrCount(interval: number, count: number, options?: { flushOnEnd: boolean }): Observable;\n transduce(transducer: any): Observable;\n withHandler(handler: (emitter: Emitter, event: Event) => void): Observable;\n // Combine streams\n combine(otherObs: Observable, combinator?: (value: T, ...values: U[]) => W): Observable;\n zip(otherObs: Observable, combinator?: (value: T, ...values: U[]) => W): Observable;\n merge(otherObs: Observable): Observable;\n concat(otherObs: Observable): Observable;\n flatMap(transform: (value: T) => Observable): Observable;\n flatMap>(): Observable, any>;\n flatMapLatest(fn: (value: T) => Observable): Observable;\n flatMapLatest>(): Observable, any>;\n flatMapFirst(fn: (value: T) => Observable): Observable;\n flatMapFirst>(): Observable, any>;\n flatMapConcat(fn: (value: T) => Observable): Observable;\n flatMapConcat>(): Observable, any>;\n flatMapConcurLimit(fn: (value: T) => Observable, limit: number): Observable;\n flatMapErrors(transform: (error: S) => Observable): Observable;\n // Combine two streams\n filterBy(otherObs: Observable): Observable;\n sampledBy(otherObs: Observable): Observable;\n sampledBy(otherObs: Observable, combinator: (a: T, b: U) => W): Observable;\n skipUntilBy(otherObs: Observable): Observable;\n takeUntilBy(otherObs: Observable): Observable;\n bufferBy(otherObs: Observable, options?: { flushOnEnd: boolean }): Observable;\n bufferWhileBy(otherObs: Observable, options?: { flushOnEnd?: boolean, flushOnChange?: boolean }): Observable;\n awaiting(otherObs: Observable): Observable;\n}\n\nexport class Stream extends Observable {\n\n}\n\nexport class Property extends Observable {\n\n}\n\nexport class Pool extends Observable {\n plug(obs: Observable): this;\n unplug(obs: Observable): this;\n}\n\nexport type Event =\n { type: 'value', value: V } |\n { type: 'error', value: E } |\n { type: 'end', value: void };\n\nexport interface Emitter {\n value(value: V): boolean;\n event(event: Event): boolean;\n error(e: E): boolean;\n end(): void;\n\n // Deprecated methods\n emit(value: V): boolean;\n emitEvent(event: Event): boolean;\n}\n\n// Create a stream\nexport function never(): Stream;\nexport function later(wait: number, value: T): Stream;\nexport function interval(interval: number, value: T): Stream;\nexport function sequentially(interval: number, values: T[]): Stream;\nexport function fromPoll(interval: number, fn: () => T): Stream;\nexport function withInterval(interval: number, handler: (emitter: Emitter) => void): Stream;\nexport function fromCallback(fn: (callback: (value: T) => void) => void): Stream;\nexport function fromNodeCallback(fn: (callback: (error: S | null, result: T) => void) => void): Stream;\nexport function fromEvents(target: EventTarget | NodeJS.EventEmitter | { on: Function, off: Function }, eventName: string, transform?: (value: T) => S): Stream;\nexport function stream(subscribe: (emitter: Emitter) => Function | void): Stream;\nexport function fromESObservable(observable: any): Stream\n\n// Create a property\nexport function constant(value: T): Property;\nexport function constantError(error: T): Property;\nexport function fromPromise(promise: Promise): Property;\n// Combine observables\nexport function combine(obss: Observable[], passiveObss: Observable[], combinator?: (...values: T[]) => U): Stream;\nexport function combine(obss: Observable[], combinator: (...values: T[]) => U): Stream;\nexport function combine }>(obss: T): Stream<{ [P in keyof T]: ValueOfAnObservable }, any>;\nexport function combine }, K extends { [name: string]: Observable }>(obss: T, passiveObss: K): Stream<{ [P in keyof T]: ValueOfAnObservable } & { [P in keyof K]: ValueOfAnObservable }, any>;\nexport function combine], P extends keyof T>(obss: T): Stream<[ValueOfAnObservable], any>;\nexport function combine, Observable, Observable, Observable, Observable, Observable, Observable, Observable]>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable], any>;\nexport function combine, Observable, Observable, Observable, Observable, Observable, Observable]>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable], any>;\nexport function combine, Observable, Observable, Observable, Observable, Observable]>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObs" +} diff --git a/packages/mergebot/src/_tests/fixtures/44631/_response.json b/packages/mergebot/src/_tests/fixtures/44631/_response.json new file mode 100644 index 0000000000..bb5b75c4bc --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44631/_response.json @@ -0,0 +1,272 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDE1NzgzNzMw", + "title": "Fix return type of `thru` method in Kefir", + "lastEditedAt": null, + "author": { + "login": "mAAdhaTTah", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-05-10T21:27:59Z", + "labels": { + "nodes": [ + { + "name": "Maintainer Approved", + "__typename": "Label" + }, + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "CONFLICTING", + "number": 44631, + "state": "OPEN", + "headRefOid": "96d6582f60431d273c179dcf6816426b4f1e37ac", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-10T21:28:10Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-10T21:28:11Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-10T22:41:52Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-15T15:41:43Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "sandersn", + "__typename": "User" + }, + "commit": { + "oid": "96d6582f60431d273c179dcf6816426b4f1e37ac", + "abbreviatedOid": "96d6582", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2020-05-15T15:41:39Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44631#pullrequestreview-412760155", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/96d6582f60431d273c179dcf6816426b4f1e37ac/checks?check_suite_id=669525123", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/96d6582f60431d273c179dcf6816426b4f1e37ac/checks?check_suite_id=669525123", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "SUCCESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/685420299?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-09T03:36:01Z", + "committedDate": "2020-05-10T21:26:12Z", + "pushedDate": "2020-05-10T21:26:25Z", + "abbreviatedOid": "96d6582", + "oid": "96d6582f60431d273c179dcf6816426b4f1e37ac", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 4, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYyNjM5MjQyMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mAAdhaTTah Thank you for submitting this PR! \n\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can help you merge this PR once someone else signs off on it.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ Most recent commit is approved by type definition owners, DT maintainers or others\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", + "createdAt": "2020-05-10T21:28:10Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyNjM5MjQyNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @AyaMorisawa @HitoriSensei — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44631/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": "2020-05-10T21:28:11Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyNjQwMDg4MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #44631 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 117.4 | 117.6 | +0.2% |\n| Type count | 28019 | 27979 | 0% |\n| Assignability cache size | 40630 | 40634 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 764 | 772 | +1% |\n| Identifiers in tests | 764 | 772 | +1% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 548.2 | 546.6 | -0.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.1% | 8.8% | |\n|     Worst duration (ms) | 820.4 | 834.3 | +1.7% |\n|     Worst identifier | [x](/DefinitelyTyped/DefinitelyTyped/blob/4ba5d8dbca725a9730a091abadf12e6509944c45/types/kefir/kefir-tests.ts#L112) | [x](/DefinitelyTyped/DefinitelyTyped/blob/fa0283dbb7ddd7758becd001d314738d20c8d272/types/kefir/kefir-tests.ts#L203) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 546.1 | 546.9 | +0.1% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.9% | 8.7% | -1.8% |\n|     Worst duration (ms) | 807.5 | 826.7 | +2.4% |\n|     Worst identifier | [sequentially](/DefinitelyTyped/DefinitelyTyped/blob/4ba5d8dbca725a9730a091abadf12e6509944c45/types/kefir/kefir-tests.ts#L159) | [beforeEnd](/DefinitelyTyped/DefinitelyTyped/blob/fa0283dbb7ddd7758becd001d314738d20c8d272/types/kefir/kefir-tests.ts#L124) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-05-10T22:41:52Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyOTMyMjgzOA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mAAdhaTTah Everything looks good here. Great job! I am ready to merge this PR (at 96d6582) on your behalf.\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", + "createdAt": "2020-05-15T15:41:43Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/kefir/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/kefir/kefir-tests.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzc5Mzc5NjA=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz", + "name": "Waiting for Author to Merge", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44631/derived.json b/packages/mergebot/src/_tests/fixtures/44631/derived.json new file mode 100644 index 0000000000..79d43cb3ed --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44631/derived.json @@ -0,0 +1,48 @@ +{ + "type": "info", + "now": "2020-05-15T15:43:58.396Z", + "pr_number": 44631, + "author": "mAAdhaTTah", + "headCommitOid": "96d6582f60431d273c179dcf6816426b4f1e37ac", + "mergeBaseOid": "master", + "lastPushDate": "2020-05-10T21:26:25.000Z", + "lastActivityDate": "2020-05-15T15:41:39.000Z", + "mergeOfferDate": "2020-05-15T15:41:43.000Z", + "hasMergeConflict": true, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "kefir", + "kind": "edit", + "files": [ + { + "path": "types/kefir/index.d.ts", + "kind": "definition" + }, + { + "path": "types/kefir/kefir-tests.ts", + "kind": "test" + } + ], + "owners": [ + "AyaMorisawa", + "HitoriSensei" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "sandersn", + "date": "2020-05-15T15:41:39.000Z", + "isMaintainer": true + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44631/mutations.json b/packages/mergebot/src/_tests/fixtures/44631/mutations.json new file mode 100644 index 0000000000..6131cc035b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44631/mutations.json @@ -0,0 +1,59 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyNjM5MjQyMw==", + "body": "@mAAdhaTTah Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `kefir` — [on npm](https://www.npmjs.com/package/kefir), [on unpkg](https://unpkg.com/browse/kefir@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44631&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, 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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw1ODMyOTQ0NzQ=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDE1NzgzNzMw" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2OTcwMTg5NzI=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDE1NzgzNzMw" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzc5Mzc5NjA=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0" + } + } + }, + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyOTMyMjgzOA==" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDE1NzgzNzMw", + "body": "@mAAdhaTTah Unfortunately, this pull request currently has a merge conflict 😥. Please update your PR branch to be up-to-date with respect to master. Have a nice day!\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44631/result.json b/packages/mergebot/src/_tests/fixtures/44631/result.json new file mode 100644 index 0000000000..bc69f3f16a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44631/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "Has Merge Conflict", + "Maintainer Approved" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@mAAdhaTTah Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `kefir` — [on npm](https://www.npmjs.com/package/kefir), [on unpkg](https://unpkg.com/browse/kefir@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44631&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, 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 ..." + }, + { + "tag": "merge-complaint-96d6582", + "status": "@mAAdhaTTah Unfortunately, this pull request currently has a merge conflict 😥. Please update your PR branch to be up-to-date with respect to master. Have a nice day!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44857/_downloads.json b/packages/mergebot/src/_tests/fixtures/44857/_downloads.json new file mode 100644 index 0000000000..feac70ddf0 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44857/_downloads.json @@ -0,0 +1,3 @@ +{ + "node": 129373332 +} diff --git a/packages/mergebot/src/_tests/fixtures/44857/_files.json b/packages/mergebot/src/_tests/fixtures/44857/_files.json new file mode 100644 index 0000000000..c1b4659f99 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44857/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/node/index.d.ts": "// Type definitions for non-npm package Node.js 14.6\n// Project: http://nodejs.org/\n// Definitions by: Microsoft TypeScript \n// DefinitelyTyped \n// Alberto Schiabel \n// Alexander T. \n// Alvis HT Tang \n// Andrew Makarov \n// Benjamin Toueg \n// Bruno Scheufler \n// Chigozirim C. \n// David Junger \n// Deividas Bakanas \n// Eugene Y. Q. Shen \n// Flarna \n// Hannes Magnusson \n// Hoàng Văn Khải \n// Huw \n// Kelvin Jin \n// Klaus Meinhardt \n// Lishude \n// Mariusz Wiktorczyk \n// Mohsen Azimi \n// Nicolas Even \n// Nikita Galkin \n// Parambir Singh \n// Sebastian Silbermann \n// Simon Schick \n// Thomas den Hollander \n// Wilco Bakker \n// wwwy3y3 \n// Samuel Ainsworth \n// Kyle Uehlein \n// Jordi Oliveras Rovira \n// Thanik Bhongbhibhat \n// Marcin Kopacz \n// Trivikram Kamat \n// Minh Son Nguyen \n// Junxiao Shi \n// Ilia Baryshnikov \n// ExE Boss \n// Surasak Chaisurin \n// Piotr Błażejewicz \n// Anna Henningsen \n// Jason Kwok \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n// NOTE: These definitions support NodeJS and TypeScript 3.5.\n\n// NOTE: TypeScript version-specific augmentations can be found in the following paths:\n// - ~/base.d.ts - Shared definitions common to all TypeScript versions\n// - ~/index.d.ts - Definitions specific to TypeScript 2.8\n// - ~/ts3.5/index.d.ts - Definitions specific to TypeScript 3.5\n\n// NOTE: Augmentations for TypeScript 3.5 and later should use individual files for overrides\n// within the respective ~/ts3.5 (or later) folder. However, this is disallowed for versions\n// prior to TypeScript 3.5, so the older definitions will be found here.\n\n// Base definitions for all NodeJS modules that are not specific to any version of TypeScript:\n/// \n\n// We can't include globals.global.d.ts in globals.d.ts, as it'll cause duplication errors in TypeScript 3.5+\n/// \n\n// We can't include assert.d.ts in base.d.ts, as it'll cause duplication errors in TypeScript 3.7+\n/// \n\n// Forward-declarations for needed types from es2015 and later (in case users are using `--lib es5`)\n// Empty interfaces are used here which merge fine with the real declarations in the lib XXX files\n// just to ensure the names are known and node typings can be used without importing these libs.\n// if someone really needs these types the libs need to be added via --lib or in tsconfig.json\ninterface AsyncIterable { }\ninterface IterableIterator { }\ninterface AsyncIterableIterator {}\ninterface SymbolConstructor {\n readonly asyncIterator: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\n// even this is just a forward declaration some properties are added otherwise\n// it would be allowed to pass anything to e.g. Buffer.from()\ninterface SharedArrayBuffer {\n readonly byteLength: number;\n slice(begin?: number, end?: number): SharedArrayBuffer;\n}\n\ndeclare module \"util\" {\n namespace types {\n function isBigInt64Array(value: any): boolean;\n function isBigUint64Array(value: any): boolean;\n }\n}\n", + "4aff18f9b99fdfc26209485631ba429f5d3d29ba:types/node/index.d.ts": "// Type definitions for non-npm package Node.js 14.6\n// Project: http://nodejs.org/\n// Definitions by: Microsoft TypeScript \n// DefinitelyTyped \n// Alberto Schiabel \n// Alexander T. \n// Alvis HT Tang \n// Andrew Makarov \n// Benjamin Toueg \n// Bruno Scheufler \n// Chigozirim C. \n// David Junger \n// Deividas Bakanas \n// Eugene Y. Q. Shen \n// Flarna \n// Hannes Magnusson \n// Hoàng Văn Khải \n// Huw \n// Kelvin Jin \n// Klaus Meinhardt \n// Lishude \n// Mariusz Wiktorczyk \n// Mohsen Azimi \n// Nicolas Even \n// Nikita Galkin \n// Parambir Singh \n// Sebastian Silbermann \n// Simon Schick \n// Thomas den Hollander \n// Wilco Bakker \n// wwwy3y3 \n// Samuel Ainsworth \n// Kyle Uehlein \n// Jordi Oliveras Rovira \n// Thanik Bhongbhibhat \n// Marcin Kopacz \n// Trivikram Kamat \n// Minh Son Nguyen \n// Junxiao Shi \n// Ilia Baryshnikov \n// ExE Boss \n// Surasak Chaisurin \n// Piotr Błażejewicz \n// Anna Henningsen \n// Jason Kwok \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n// NOTE: These definitions support NodeJS and TypeScript 3.5.\n\n// NOTE: TypeScript version-specific augmentations can be found in the following paths:\n// - ~/base.d.ts - Shared definitions common to all TypeScript versions\n// - ~/index.d.ts - Definitions specific to TypeScript 2.8\n// - ~/ts3.5/index.d.ts - Definitions specific to TypeScript 3.5\n\n// NOTE: Augmentations for TypeScript 3.5 and later should use individual files for overrides\n// within the respective ~/ts3.5 (or later) folder. However, this is disallowed for versions\n// prior to TypeScript 3.5, so the older definitions will be found here.\n\n// Base definitions for all NodeJS modules that are not specific to any version of TypeScript:\n/// \n\n// We can't include globals.global.d.ts in globals.d.ts, as it'll cause duplication errors in TypeScript 3.5+\n/// \n\n// We can't include assert.d.ts in base.d.ts, as it'll cause duplication errors in TypeScript 3.7+\n/// \n\n// Forward-declarations for needed types from es2015 and later (in case users are using `--lib es5`)\n// Empty interfaces are used here which merge fine with the real declarations in the lib XXX files\n// just to ensure the names are known and node typings can be used without importing these libs.\n// if someone really needs these types the libs need to be added via --lib or in tsconfig.json\ninterface AsyncIterable { }\ninterface IterableIterator { }\ninterface AsyncIterableIterator {}\ninterface SymbolConstructor {\n readonly asyncIterator: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\n// even this is just a forward declaration some properties are added otherwise\n// it would be allowed to pass anything to e.g. Buffer.from()\ninterface SharedArrayBuffer {\n readonly byteLength: number;\n slice(begin?: number, end?: number): SharedArrayBuffer;\n}\n\ndeclare module \"util\" {\n namespace types {\n function isBigInt64Array(value: any): boolean;\n function isBigUint64Array(value: any): boolean;\n }\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/44857/_response.json b/packages/mergebot/src/_tests/fixtures/44857/_response.json new file mode 100644 index 0000000000..d3485f59e1 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44857/_response.json @@ -0,0 +1,1047 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDE5NzEzNjEz", + "title": "feat(node): Use `*EventMap` interfaces for typed `EventEmitter` methods", + "createdAt": "2020-05-18T20:03:21Z", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Abandoned", + "__typename": "Label" + }, + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "Critical package", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44857, + "state": "OPEN", + "headRefOid": "4aff18f9b99fdfc26209485631ba429f5d3d29ba", + "changedFiles": 20, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-18T20:03:25Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-18T20:03:27Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-18T20:03:34Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-18T20:13:39Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "SimonSchick", + "__typename": "User" + }, + "createdAt": "2020-05-18T22:10:15Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "SimonSchick", + "__typename": "User" + }, + "createdAt": "2020-05-18T22:12:12Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2020-05-19T09:29:21Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-19T09:57:20Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-19T10:29:35Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-19T21:35:32Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2020-05-19T22:19:58Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "SimonSchick", + "__typename": "User" + }, + "createdAt": "2020-05-19T23:19:02Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "connor4312", + "__typename": "User" + }, + "createdAt": "2020-05-19T23:25:37Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2020-05-21T11:31:58Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-21T11:32:01Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-21T11:57:32Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "SimonSchick", + "__typename": "User" + }, + "createdAt": "2020-05-21T15:58:52Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-22T04:05:09Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2020-06-25T19:40:40Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "weswigham", + "__typename": "User" + }, + "createdAt": "2020-07-06T08:29:46Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-09T04:08:01Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-09T04:08:02Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T04:10:28Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T23:50:39Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T00:02:39Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T00:21:25Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T02:58:26Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T04:07:17Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T19:28:59Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T21:49:34Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-12T01:02:28Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-12T01:19:25Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-13T02:06:29Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-13T21:50:07Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-14T04:07:24Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-16T04:09:56Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-22T23:50:59Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-23T21:36:49Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-24T04:08:09Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-25T04:10:27Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-27T14:50:43Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-28T04:08:42Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "createdAt": "2020-07-28T15:22:37Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-28T15:23:41Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-28T17:13:57Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-28T17:18:43Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-07-28T17:44:41Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2020-07-28T18:15:08Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "createdAt": "2020-07-29T16:31:48Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-08T04:10:32Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-27T22:48:35Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-28T04:14:47Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-28T04:19:52Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-30T10:22:56Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "SimonSchick", + "__typename": "User" + }, + "commit": { + "oid": "b0cfd1831489d8d97e07f8f38ca5ea92a289d7f4", + "abbreviatedOid": "b0cfd18", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "SimonSchick", + "__typename": "User" + }, + "createdAt": "2020-05-18T22:09:10Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-05-19T23:20:53Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44857#pullrequestreview-413971854", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "commit": { + "oid": "ceb988411bf6be54d9ab401b39b1ae01fb4d9ce8", + "abbreviatedOid": "ceb9884", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "createdAt": "2020-05-21T11:27:30Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-05-21T11:27:31Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44857#pullrequestreview-416071358", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4aff18f9b99fdfc26209485631ba429f5d3d29ba/checks?check_suite_id=975320918", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4aff18f9b99fdfc26209485631ba429f5d3d29ba/checks?check_suite_id=975320918", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4aff18f9b99fdfc26209485631ba429f5d3d29ba/checks?check_suite_id=975321477", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4aff18f9b99fdfc26209485631ba429f5d3d29ba/checks?check_suite_id=975321477", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-05-18T20:00:00Z", + "committedDate": "2020-07-28T16:54:42Z", + "pushedDate": "2020-07-28T16:54:29Z", + "abbreviatedOid": "4aff18f", + "oid": "4aff18f9b99fdfc26209485631ba429f5d3d29ba", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 19, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMDQwNjQ0NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@ExE-Boss Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n- `node` [on npm](https://www.npmjs.com/package/node), [on unpkg](https://unpkg.com/browse/node@latest)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ Most recent commit is approved by DT maintainers\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 31 days — it is considered abandoned!\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2020-05-18T20:03:25Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMDQwNjQ1Mw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @Microsoft @DefinitelyTyped @jkomyno @a-tarasyuk @alvis @r3nya @btoueg @brunoscheufler @smac89 @touffy @DeividasBakanas @eyqs @Flarna @Hannes-Magnusson-CK @KSXGitHub @hoo29 @kjin @ajafff @islishude @mwiktorczyk @mohsen1 @n-e @galkin @parambirs @eps1lon @SimonSchick @ThomasdenH @WilcoBakker @wwwy3y3 @samuela @kuehlein @j-oliveras @bhongy @chyzwar @trivikr @nguymin4 @yoursunny @qwelias @Ryan-Willpower @peterblazejewicz @addaleax @JasonHK — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44857/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": "2020-05-18T20:03:27Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMDQxMDk3OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #44857 | diff |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 105.1 | 99.7 | -5.1% |\n| Type count | 17146 | 17479 | +2% |\n| Assignability cache size | 37592 | 38624 | +3% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 46 | 46 | 0% |\n| Identifiers in tests | 46 | 46 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 564.8 | 544.5 | -3.6% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 11.9% | 11.1% | |\n|     Worst duration (ms) | 695.9 | 659.1 | -5.3% |\n|     Worst identifier | [assert](/DefinitelyTyped/DefinitelyTyped/blob/ea0b2019e0c66decc0822bc356f71880c7b2e055/types/node/ts3.7/node-tests.ts#L57) | [a](/DefinitelyTyped/DefinitelyTyped/blob/d304e52d3f3b28fa030ccddfb37696dd8a3e4c53/types/node/ts3.7/node-tests.ts#L39) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 551.8 | 537.8 | -2.5% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.8% | 10.8% | -0.5% |\n|     Worst duration (ms) | 667.8 | 635.9 | -4.8% |\n|     Worst identifier | [a](/DefinitelyTyped/DefinitelyTyped/blob/ea0b2019e0c66decc0822bc356f71880c7b2e055/types/node/ts3.7/node-tests.ts#L57) | [deepStrictEqual](/DefinitelyTyped/DefinitelyTyped/blob/d304e52d3f3b28fa030ccddfb37696dd8a3e4c53/types/node/ts3.7/node-tests.ts#L57) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-05-18T20:13:39Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMDQ2MDk1Mg==", + "author": { + "login": "SimonSchick", + "__typename": "User" + }, + "body": "I'd much rather see https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44811 land and make EventEmitter generic as it removes MUCH more boilerplate (on/off/once etc.) and is cleaner overall.", + "createdAt": "2020-05-18T22:10:15Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "connor4312", + "__typename": "User" + }, + "__typename": "Reaction" + }, + { + "user": { + "login": "leonardodino", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMDQ2MTcwMQ==", + "author": { + "login": "SimonSchick", + "__typename": "User" + }, + "body": "An additional approach is to create an interface `Events` that defines all the event emitter overrides and use declaration merging for each type that extends EventEmitter, eg.\r\n\r\n```\r\ninterface Socket extends Events<{\r\n ...\r\n}> {}\r\nclass Socket extends EventEmitter { }\r\n```\r\n", + "createdAt": "2020-05-18T22:12:12Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMDcwMzkzMw==", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "body": "@SimonSchick That causes several instances of **TS2320**:\r\n```\r\nInterface '...' cannot simultaneously extend types 'EventEmitter' and 'TypedEventEmitter<...>'.\r\n Named property 'addListener' of types 'EventEmitter' and 'TypedEventEmitter<...>' are not identical.\r\n```", + "createdAt": "2020-05-19T09:29:21Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMTExNDIxOQ==", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "body": "@orta The @danger-public bot has hit the rate limit for the **GitHub API**:\r\n\r\n
Request failed [403]: https://api.github.com/repos/DefinitelyTyped/DefinitelyTyped/pulls/44857\r\nResponse: {\r\n\t\"message\": \"API rate limit exceeded for user ID 56922856.\",\r\n\t\"documentation_url\": \"https://developer.github.com/v3/#rate-limiting\"\r\n}
\r\n\r\n", + "createdAt": "2020-05-19T22:19:58Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMTEzNzQ1MQ==", + "author": { + "login": "SimonSchick", + "__typename": "User" + }, + "body": "That's odd, can you post the code you created?", + "createdAt": "2020-05-19T23:19:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMTEzOTU0Ng==", + "author": { + "login": "connor4312", + "__typename": "User" + }, + "body": "> make EventEmitter generic\r\n\r\nThis would be great. A similar mapped approach on the base EventEmitter with the signature `EventEmitter void }>` should be entirely unbreaking and allow opt-in type safety in libraries and for Node.js consumers.\r\n\r\nNot sure if I prefer a method in the map versus a tuple, since the return value of the method is irrelevant, but a tuple loses argument names.", + "createdAt": "2020-05-19T23:25:37Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "leonardodino", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjAzNjAxNQ==", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "body": "The issue with making `EventEmitter` generic is that it breaks the tests of many of `@types/node`’s dependents, which use `// $ExpectType EventEmitter`.", + "createdAt": "2020-05-21T11:31:58Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjA0Njc2Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@SimonSchick Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-05-21T11:57:32Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjE3NTc3Nw==", + "author": { + "login": "SimonSchick", + "__typename": "User" + }, + "body": "@ExE-Boss How many are there?", + "createdAt": "2020-05-21T15:58:52Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY0OTc3ODkyOA==", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "body": "@SimonSchick\r\n\r\nEnough to make fixing  a massive pain.\r\n\r\nThere’s also a lot of assignability errors in there.", + "createdAt": "2020-06-25T19:40:40Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NDA5MzcwNg==", + "author": { + "login": "weswigham", + "__typename": "User" + }, + "body": "@SimonSchick so what do you think we should do here?", + "createdAt": "2020-07-06T08:29:46Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NTg4NjAyMA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@ExE-Boss Unfortunately, this pull request currently has a merge conflict 😥. Please update your PR branch to be up-to-date with respect to master. Have a nice day!\n", + "createdAt": "2020-07-09T04:08:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2NTEwNTI3Ng==", + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "body": "bad bot", + "createdAt": "2020-07-28T15:22:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2NTE4MDc4NQ==", + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "body": "(Saying something so the bot will notice this PR...)", + "createdAt": "2020-07-28T17:44:41Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2NTE5NjM0Ng==", + "author": { + "login": "ExE-Boss", + "__typename": "User" + }, + "body": "@elibarzilay Well, I’ve already fixed this PR before you opened , so this PR isn’t likely to break soon unless another merge conflict comes up.", + "createdAt": "2020-07-28T18:15:08Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "elibarzilay", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2NTc2OTIzMg==", + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "body": "@SimonSchick thoughts on the current state of the PR?", + "createdAt": "2020-07-29T16:31:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/node/child_process.d.ts", + "additions": 33, + "deletions": 40, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/cluster.d.ts", + "additions": 104, + "deletions": 161, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/dgram.d.ts", + "additions": 33, + "deletions": 40, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/fs.d.ts", + "additions": 80, + "deletions": 112, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/http.d.ts", + "additions": 34, + "deletions": 70, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/http2.d.ts", + "additions": 207, + "deletions": 342, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/inspector.d.ts", + "additions": 258, + "deletions": 11, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/net.d.ts", + "additions": 65, + "deletions": 92, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/process.d.ts", + "additions": 41, + "deletions": 89, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/readline.d.ts", + "additions": 36, + "deletions": 52, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/repl.d.ts", + "additions": 27, + "deletions": 61, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/stream.d.ts", + "additions": 75, + "deletions": 92, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/test/child_process.ts", + "additions": 20, + "deletions": 20, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/test/dgram.ts", + "additions": 13, + "deletions": 13, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/test/net.ts", + "additions": 28, + "deletions": 28, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/test/tls.ts", + "additions": 31, + "deletions": 31, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/test/worker_threads.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/tls.d.ts", + "additions": 66, + "deletions": 79, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/tty.d.ts", + "additions": 26, + "deletions": 11, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/worker_threads.d.ts", + "additions": 34, + "deletions": 48, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 20 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzg0NjYwNjg=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2", + "name": "Needs Maintainer Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44857/derived.json b/packages/mergebot/src/_tests/fixtures/44857/derived.json new file mode 100644 index 0000000000..96d412cf6c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44857/derived.json @@ -0,0 +1,160 @@ +{ + "type": "info", + "now": "2020-08-30T10:52:28.076Z", + "pr_number": 44857, + "author": "ExE-Boss", + "headCommitOid": "4aff18f9b99fdfc26209485631ba429f5d3d29ba", + "mergeBaseOid": "master", + "lastPushDate": "2020-07-28T16:54:29.000Z", + "lastActivityDate": "2020-07-29T16:31:48.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "node", + "kind": "edit", + "files": [ + { + "path": "types/node/child_process.d.ts", + "kind": "definition" + }, + { + "path": "types/node/cluster.d.ts", + "kind": "definition" + }, + { + "path": "types/node/dgram.d.ts", + "kind": "definition" + }, + { + "path": "types/node/fs.d.ts", + "kind": "definition" + }, + { + "path": "types/node/http.d.ts", + "kind": "definition" + }, + { + "path": "types/node/http2.d.ts", + "kind": "definition" + }, + { + "path": "types/node/inspector.d.ts", + "kind": "definition" + }, + { + "path": "types/node/net.d.ts", + "kind": "definition" + }, + { + "path": "types/node/process.d.ts", + "kind": "definition" + }, + { + "path": "types/node/readline.d.ts", + "kind": "definition" + }, + { + "path": "types/node/repl.d.ts", + "kind": "definition" + }, + { + "path": "types/node/stream.d.ts", + "kind": "definition" + }, + { + "path": "types/node/test/child_process.ts", + "kind": "test" + }, + { + "path": "types/node/test/dgram.ts", + "kind": "test" + }, + { + "path": "types/node/test/net.ts", + "kind": "test" + }, + { + "path": "types/node/test/tls.ts", + "kind": "test" + }, + { + "path": "types/node/test/worker_threads.ts", + "kind": "test" + }, + { + "path": "types/node/tls.d.ts", + "kind": "definition" + }, + { + "path": "types/node/tty.d.ts", + "kind": "definition" + }, + { + "path": "types/node/worker_threads.d.ts", + "kind": "definition" + } + ], + "owners": [ + "Microsoft", + "DefinitelyTyped", + "jkomyno", + "a-tarasyuk", + "alvis", + "r3nya", + "btoueg", + "brunoscheufler", + "smac89", + "touffy", + "DeividasBakanas", + "eyqs", + "Flarna", + "Hannes-Magnusson-CK", + "KSXGitHub", + "hoo29", + "kjin", + "ajafff", + "islishude", + "mwiktorczyk", + "mohsen1", + "n-e", + "galkin", + "parambirs", + "eps1lon", + "SimonSchick", + "ThomasdenH", + "WilcoBakker", + "wwwy3y3", + "samuela", + "kuehlein", + "j-oliveras", + "bhongy", + "chyzwar", + "trivikr", + "nguymin4", + "yoursunny", + "qwelias", + "ExE-Boss", + "Ryan-Willpower", + "peterblazejewicz", + "addaleax", + "JasonHK" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [ + { + "type": "stale", + "reviewer": "SimonSchick", + "date": "2020-05-19T23:20:53.000Z", + "abbrOid": "b0cfd18" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44857/mutations.json b/packages/mergebot/src/_tests/fixtures/44857/mutations.json new file mode 100644 index 0000000000..7ed32764a8 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44857/mutations.json @@ -0,0 +1,42 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYzMDQwNjQ0NA==", + "body": "@ExE-Boss Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `node` — [on npm](https://www.npmjs.com/package/node), [on unpkg](https://unpkg.com/browse/node@latest/) (author is owner)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=44857&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 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## Inactive\n\nThis PR has been inactive for 32 days — it is *still* unreviewed!\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyNDYyODA0MzE1" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDE5NzEzNjEz" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2NDQxMTYxNzA=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDE5NzEzNjEz" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDE5NzEzNjEz", + "body": "It has been more than two weeks and this PR still has no reviews.\n\nI'll bump it to the DT maintainer queue. Thank you for your patience, @ExE-Boss.\n\n(Ping @Microsoft, @DefinitelyTyped, @jkomyno, @a-tarasyuk, @alvis, @r3nya, @btoueg, @brunoscheufler, @smac89, @touffy, @DeividasBakanas, @eyqs, @Flarna, @Hannes-Magnusson-CK, @KSXGitHub, @hoo29, @kjin, @ajafff, @islishude, @mwiktorczyk, @mohsen1, @n-e, @galkin, @parambirs, @eps1lon, @SimonSchick, @ThomasdenH, @WilcoBakker, @wwwy3y3, @samuela, @kuehlein, @j-oliveras, @bhongy, @chyzwar, @trivikr, @nguymin4, @yoursunny, @qwelias, @Ryan-Willpower, @peterblazejewicz, @addaleax, @JasonHK.)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44857/result.json b/packages/mergebot/src/_tests/fixtures/44857/result.json new file mode 100644 index 0000000000..7bd35205fb --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44857/result.json @@ -0,0 +1,29 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "Critical package", + "Author is Owner", + "Unreviewed" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@ExE-Boss Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `node` — [on npm](https://www.npmjs.com/package/node), [on unpkg](https://unpkg.com/browse/node@latest/) (author is owner)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=44857&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 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## Inactive\n\nThis PR has been inactive for 32 days — it is *still* unreviewed!\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @Microsoft @DefinitelyTyped @jkomyno @a-tarasyuk @alvis @r3nya @btoueg @brunoscheufler @smac89 @touffy @DeividasBakanas @eyqs @Flarna @Hannes-Magnusson-CK @KSXGitHub @hoo29 @kjin @ajafff @islishude @mwiktorczyk @mohsen1 @n-e @galkin @parambirs @eps1lon @SimonSchick @ThomasdenH @WilcoBakker @wwwy3y3 @samuela @kuehlein @j-oliveras @bhongy @chyzwar @trivikr @nguymin4 @yoursunny @qwelias @Ryan-Willpower @peterblazejewicz @addaleax @JasonHK — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44857/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." + }, + { + "tag": "stale-ping-37410c-b0cfd18", + "status": "@SimonSchick Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?" + }, + { + "tag": "Unreviewed:done", + "status": "It has been more than two weeks and this PR still has no reviews.\n\nI'll bump it to the DT maintainer queue. Thank you for your patience, @ExE-Boss.\n\n(Ping @Microsoft, @DefinitelyTyped, @jkomyno, @a-tarasyuk, @alvis, @r3nya, @btoueg, @brunoscheufler, @smac89, @touffy, @DeividasBakanas, @eyqs, @Flarna, @Hannes-Magnusson-CK, @KSXGitHub, @hoo29, @kjin, @ajafff, @islishude, @mwiktorczyk, @mohsen1, @n-e, @galkin, @parambirs, @eps1lon, @SimonSchick, @ThomasdenH, @WilcoBakker, @wwwy3y3, @samuela, @kuehlein, @j-oliveras, @bhongy, @chyzwar, @trivikr, @nguymin4, @yoursunny, @qwelias, @Ryan-Willpower, @peterblazejewicz, @addaleax, @JasonHK.)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-14days/_downloads.json b/packages/mergebot/src/_tests/fixtures/44989-14days/_downloads.json new file mode 100644 index 0000000000..d911f5d2cc --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-14days/_downloads.json @@ -0,0 +1,3 @@ +{ + "ramda": 1199334 +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-14days/_files.json b/packages/mergebot/src/_tests/fixtures/44989-14days/_files.json new file mode 100644 index 0000000000..74bc7045ad --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-14days/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/ramda/index.d.ts": "// Type definitions for ramda 0.27\n// Project: https://ramdajs.com\n// Definitions by: Scott O'Malley \n// Erwin Poeze \n// Matt DeKrey \n// Stephen King \n// Alejandro Fernandez Haro \n// Vítor Castro \n// Jordan Quagliatini \n// Simon Højberg \n// Samson Keung \n// Angelo Ocana \n// Rayner Pupo \n// Nikita Moshensky \n// Ethan Resnick \n// Tomas Szabo \n// Maciek Blim \n// Marcin Biernat \n// Rayhaneh Banyassady \n// Ryan McCuaig \n// Drew Wyatt \n// John Ottenlips \n// Nitesh Phadatare \n// Krantisinh Deshmukh \n// Pierre-Antoine Mills \n// Brekk Bockrath \n// Aram Kharazyan \n// Jituan Lin \n// Philippe Mills \n// Saul Mirone \n// Nicholai Nissen \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.5\n\nimport * as _ from \"ts-toolbelt\";\nimport {\n Arity0Fn,\n Arity1Fn,", + "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34:types/ramda/index.d.ts": "// Type definitions for ramda 0.27\n// Project: https://ramdajs.com\n// Definitions by: Scott O'Malley \n// Erwin Poeze \n// Matt DeKrey \n// Stephen King \n// Alejandro Fernandez Haro \n// Vítor Castro \n// Jordan Quagliatini \n// Simon Højberg \n// Samson Keung \n// Angelo Ocana \n// Rayner Pupo \n// Nikita Moshensky \n// Ethan Resnick \n// Tomas Szabo \n// Maciek Blim \n// Marcin Biernat \n// Rayhaneh Banyassady \n// Ryan McCuaig \n// Drew Wyatt \n// John Ottenlips \n// Nitesh Phadatare \n// Krantisinh Deshmukh \n// Pierre-Antoine Mills \n// Brekk Bockrath \n// Aram Kharazyan \n// Jituan Lin \n// Philippe Mills \n// Saul Mirone \n// Nicholai Nissen \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.5\n\nimport * as _ from \"ts-toolbelt\";\nimport {\n Arity0Fn,\n Arity1Fn," +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-14days/_response.json b/packages/mergebot/src/_tests/fixtures/44989-14days/_response.json new file mode 100644 index 0000000000..d0e60c2f78 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-14days/_response.json @@ -0,0 +1,448 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDIyMDc5Mjk3", + "title": "Feature/43320 take two", + "lastEditedAt": null, + "author": { + "login": "petr-motejlek", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-05-22T18:22:29Z", + "labels": { + "nodes": [ + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44989, + "state": "OPEN", + "headRefOid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-22T18:22:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-22T18:22:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-05-22T18:27:59Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "createdAt": "2020-05-22T19:57:22Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-22T20:26:39Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "petr-motejlek", + "__typename": "User" + }, + "createdAt": "2020-05-23T08:45:20Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-23T10:05:30Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "commit": { + "oid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "abbreviatedOid": "9ca6086", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-05-23T10:05:21Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44989#pullrequestreview-417267077", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "commit": { + "oid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "abbreviatedOid": "9ca6086", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-05-23T10:05:48Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44989#pullrequestreview-417267093", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-05-22T12:57:16Z", + "committedDate": "2020-05-22T12:57:16Z", + "pushedDate": "2020-05-22T12:59:08Z", + "abbreviatedOid": "a11ff5a", + "oid": "a11ff5a18b2c85b630182b8679820debab5c0e05", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155248", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155248", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155688", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155688", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/690142028?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-22T18:20:33Z", + "committedDate": "2020-05-22T18:20:33Z", + "pushedDate": "2020-05-22T18:20:50Z", + "abbreviatedOid": "4bf0130", + "oid": "4bf0130965e611b315eb1b25fa6a7a00f4331c6b", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575251", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575251", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575426", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575426", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/690298881?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-23T08:40:01Z", + "committedDate": "2020-05-23T08:40:01Z", + "pushedDate": "2020-05-23T08:41:39Z", + "abbreviatedOid": "9ca6086", + "oid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 7, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjgzOTQzNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@petr-motejlek Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can help you merge this PR once someone else signs off on it.\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## Inactive\n\nThis PR has been inactive for 39 days — it is considered abandoned!\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2020-05-22T18:22:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjgzOTQ0MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @TheHandsomeCoder @donnut @mdekrey @sbking @afharo @teves-castro @1M0reBug @hojberg @samsonkeung @angeloocana @raynerd @moshensky @ethanresnick @deftomat @blimusiek @biern @rayhaneh @rgm @drewwyatt @jottenlips @minitesh @krantisinh @pirix-gh @brekk @nemo108 @jituanlin @Philippe-mills @Saul-Mirone @Nicholaiii — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44989/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": "2020-05-22T18:22:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjg0MTM5NQ==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## ramda ([unpkg](https://unpkg.com/browse/ramda@latest/))\nwas missing the following properties:\n1. sequence\n1. xor\n

\n Generated by :no_entry_sign: dangerJS against 9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34\n

\n", + "createdAt": "2020-05-22T18:27:59Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjg4ODc0MQ==", + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "body": "Could you potentially add a test for the behaviour that only returns `[undefined]`?\r\nThis way we've got that covered too, and this enables that previous contributors can also review the change :)\r\nIt all looks good to me.", + "createdAt": "2020-05-22T19:57:22Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "petr-motejlek", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjg5NjY0OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #44989 | diff |\n| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 259.3 | 256.9 | -0.9% |\n| Type count | 79254 | 79254 | 0% |\n| Assignability cache size | 62164 | 62164 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 1881 | 1881 | 0% |\n| Identifiers in tests | 5698 | 5698 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 416.0 | 414.9 | -0.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.1% | 8.9% | |\n|     Worst duration (ms) | 525.5 | 520.5 | -1.0% |\n|     Worst identifier | [pair](/DefinitelyTyped/DefinitelyTyped/blob/699ee6b26683660fff379466962170998b450cfd/types/ramda/ramda-tests.ts#L276) | [divide](/DefinitelyTyped/DefinitelyTyped/blob/bd51e5e8ffb33cf1c547d73977e712a413119fd3/types/ramda/ramda-tests.ts#L71) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 407.8 | 407.7 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.3% | 9.5% | +2.6% |\n|     Worst duration (ms) | 502.1 | 508.3 | +1.2% |\n|     Worst identifier | [rejectEven](/DefinitelyTyped/DefinitelyTyped/blob/699ee6b26683660fff379466962170998b450cfd/types/ramda/ramda-tests.ts#L316) | [combined](/DefinitelyTyped/DefinitelyTyped/blob/bd51e5e8ffb33cf1c547d73977e712a413119fd3/types/ramda/ramda-tests.ts#L391) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-05-22T20:26:39Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMzAwODYzNA==", + "author": { + "login": "petr-motejlek", + "__typename": "User" + }, + "body": "@Nicholaiii , certainly. It should be in now.", + "createdAt": "2020-05-23T08:45:20Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "Nicholaiii", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMzAxODkyMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@petr-motejlek Everything looks good here. Great job! I am ready to merge this PR (at 9ca6086) on your behalf.\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", + "createdAt": "2020-05-23T10:05:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/ramda/index.d.ts", + "additions": 2, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/ramda/test/paths-tests.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzg3NDg0NDE=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz", + "name": "Waiting for Author to Merge", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-14days/derived.json b/packages/mergebot/src/_tests/fixtures/44989-14days/derived.json new file mode 100644 index 0000000000..9de769692d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-14days/derived.json @@ -0,0 +1,75 @@ +{ + "type": "info", + "now": "2020-06-06T16:28:19.013Z", + "pr_number": 44989, + "author": "petr-motejlek", + "headCommitOid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "mergeBaseOid": "master", + "lastPushDate": "2020-05-23T08:41:39.000Z", + "lastActivityDate": "2020-05-23T10:05:48.000Z", + "mergeOfferDate": "2020-05-23T10:05:30.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": "ramda", + "kind": "edit", + "files": [ + { + "path": "types/ramda/index.d.ts", + "kind": "definition" + }, + { + "path": "types/ramda/test/paths-tests.ts", + "kind": "test" + } + ], + "owners": [ + "TheHandsomeCoder", + "donnut", + "mdekrey", + "sbking", + "afharo", + "teves-castro", + "1M0reBug", + "hojberg", + "samsonkeung", + "angeloocana", + "raynerd", + "moshensky", + "ethanresnick", + "deftomat", + "blimusiek", + "biern", + "rayhaneh", + "rgm", + "drewwyatt", + "jottenlips", + "minitesh", + "krantisinh", + "pirix-gh", + "brekk", + "nemo108", + "jituanlin", + "Philippe-mills", + "Saul-Mirone", + "Nicholaiii" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "Nicholaiii", + "date": "2020-05-23T10:05:48.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-14days/mutations.json b/packages/mergebot/src/_tests/fixtures/44989-14days/mutations.json new file mode 100644 index 0000000000..cf4c3b41bd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-14days/mutations.json @@ -0,0 +1,40 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjgzOTQzNQ==", + "body": "@petr-motejlek Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `ramda` — [on npm](https://www.npmjs.com/package/ramda), [on unpkg](https://unpkg.com/browse/ramda@latest/)\n - owner-approval: @Nicholaiii\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44989&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## Inactive\n\nThis PR has been inactive for 14 days — please merge or say something if there's a problem, otherwise it will be closed!\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2NDQwOTU4ODI=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDIyMDc5Mjk3" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYzMzAxODkyMw==", + "body": "@petr-motejlek: Everything looks good here. I am ready to merge this PR (at 9ca6086) 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(@TheHandsomeCoder, @donnut, @mdekrey, @sbking, @afharo, @teves-castro, @1M0reBug, @hojberg, @samsonkeung, @angeloocana, @raynerd, @moshensky, @ethanresnick, @deftomat, @blimusiek, @biern, @rayhaneh, @rgm, @drewwyatt, @jottenlips, @minitesh, @krantisinh, @pirix-gh, @brekk, @nemo108, @jituanlin, @Philippe-mills, @Saul-Mirone, @Nicholaiii: you can do this too.)\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDIyMDc5Mjk3", + "body": "Re-ping @petr-motejlek / @TheHandsomeCoder, @donnut, @mdekrey, @sbking, @afharo, @teves-castro, @1M0reBug, @hojberg, @samsonkeung, @angeloocana, @raynerd, @moshensky, @ethanresnick, @deftomat, @blimusiek, @biern, @rayhaneh, @rgm, @drewwyatt, @jottenlips, @minitesh, @krantisinh, @pirix-gh, @brekk, @nemo108, @jituanlin, @Philippe-mills, @Saul-Mirone:\n\nThis PR has been ready to merge for over a week, and I haven't seen any requests to merge it. I will close it on Jun 22nd (in three weeks) if this doesn't happen.\n\n(If there's no reason to avoid merging it, please do so. Otherwise, if it shouldn't be merged or if it needs more time, please close it or turn it into a draft.)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44989-14days/result.json b/packages/mergebot/src/_tests/fixtures/44989-14days/result.json new file mode 100644 index 0000000000..49384c66e9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-14days/result.json @@ -0,0 +1,26 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Popular package", + "Owner Approved", + "Unmerged", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@petr-motejlek Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `ramda` — [on npm](https://www.npmjs.com/package/ramda), [on unpkg](https://unpkg.com/browse/ramda@latest/)\n - owner-approval: @Nicholaiii\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44989&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## Inactive\n\nThis PR has been inactive for 14 days — please merge or say something if there's a problem, otherwise it will be closed!\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "merge-offer", + "status": "@petr-motejlek: Everything looks good here. I am ready to merge this PR (at 9ca6086) 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(@TheHandsomeCoder, @donnut, @mdekrey, @sbking, @afharo, @teves-castro, @1M0reBug, @hojberg, @samsonkeung, @angeloocana, @raynerd, @moshensky, @ethanresnick, @deftomat, @blimusiek, @biern, @rayhaneh, @rgm, @drewwyatt, @jottenlips, @minitesh, @krantisinh, @pirix-gh, @brekk, @nemo108, @jituanlin, @Philippe-mills, @Saul-Mirone, @Nicholaiii: you can do this too.)" + }, + { + "tag": "Unmerged:nearly:2020-05-23", + "status": "Re-ping @petr-motejlek / @TheHandsomeCoder, @donnut, @mdekrey, @sbking, @afharo, @teves-castro, @1M0reBug, @hojberg, @samsonkeung, @angeloocana, @raynerd, @moshensky, @ethanresnick, @deftomat, @blimusiek, @biern, @rayhaneh, @rgm, @drewwyatt, @jottenlips, @minitesh, @krantisinh, @pirix-gh, @brekk, @nemo108, @jituanlin, @Philippe-mills, @Saul-Mirone:\n\nThis PR has been ready to merge for over a week, and I haven't seen any requests to merge it. I will close it on Jun 22nd (in three weeks) if this doesn't happen.\n\n(If there's no reason to avoid merging it, please do so. Otherwise, if it shouldn't be merged or if it needs more time, please close it or turn it into a draft.)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-32days/_downloads.json b/packages/mergebot/src/_tests/fixtures/44989-32days/_downloads.json new file mode 100644 index 0000000000..d911f5d2cc --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-32days/_downloads.json @@ -0,0 +1,3 @@ +{ + "ramda": 1199334 +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-32days/_files.json b/packages/mergebot/src/_tests/fixtures/44989-32days/_files.json new file mode 100644 index 0000000000..74bc7045ad --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-32days/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/ramda/index.d.ts": "// Type definitions for ramda 0.27\n// Project: https://ramdajs.com\n// Definitions by: Scott O'Malley \n// Erwin Poeze \n// Matt DeKrey \n// Stephen King \n// Alejandro Fernandez Haro \n// Vítor Castro \n// Jordan Quagliatini \n// Simon Højberg \n// Samson Keung \n// Angelo Ocana \n// Rayner Pupo \n// Nikita Moshensky \n// Ethan Resnick \n// Tomas Szabo \n// Maciek Blim \n// Marcin Biernat \n// Rayhaneh Banyassady \n// Ryan McCuaig \n// Drew Wyatt \n// John Ottenlips \n// Nitesh Phadatare \n// Krantisinh Deshmukh \n// Pierre-Antoine Mills \n// Brekk Bockrath \n// Aram Kharazyan \n// Jituan Lin \n// Philippe Mills \n// Saul Mirone \n// Nicholai Nissen \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.5\n\nimport * as _ from \"ts-toolbelt\";\nimport {\n Arity0Fn,\n Arity1Fn,", + "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34:types/ramda/index.d.ts": "// Type definitions for ramda 0.27\n// Project: https://ramdajs.com\n// Definitions by: Scott O'Malley \n// Erwin Poeze \n// Matt DeKrey \n// Stephen King \n// Alejandro Fernandez Haro \n// Vítor Castro \n// Jordan Quagliatini \n// Simon Højberg \n// Samson Keung \n// Angelo Ocana \n// Rayner Pupo \n// Nikita Moshensky \n// Ethan Resnick \n// Tomas Szabo \n// Maciek Blim \n// Marcin Biernat \n// Rayhaneh Banyassady \n// Ryan McCuaig \n// Drew Wyatt \n// John Ottenlips \n// Nitesh Phadatare \n// Krantisinh Deshmukh \n// Pierre-Antoine Mills \n// Brekk Bockrath \n// Aram Kharazyan \n// Jituan Lin \n// Philippe Mills \n// Saul Mirone \n// Nicholai Nissen \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.5\n\nimport * as _ from \"ts-toolbelt\";\nimport {\n Arity0Fn,\n Arity1Fn," +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-32days/_response.json b/packages/mergebot/src/_tests/fixtures/44989-32days/_response.json new file mode 100644 index 0000000000..d0e60c2f78 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-32days/_response.json @@ -0,0 +1,448 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDIyMDc5Mjk3", + "title": "Feature/43320 take two", + "lastEditedAt": null, + "author": { + "login": "petr-motejlek", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-05-22T18:22:29Z", + "labels": { + "nodes": [ + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44989, + "state": "OPEN", + "headRefOid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-22T18:22:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-22T18:22:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-05-22T18:27:59Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "createdAt": "2020-05-22T19:57:22Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-22T20:26:39Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "petr-motejlek", + "__typename": "User" + }, + "createdAt": "2020-05-23T08:45:20Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-23T10:05:30Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "commit": { + "oid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "abbreviatedOid": "9ca6086", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-05-23T10:05:21Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44989#pullrequestreview-417267077", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "commit": { + "oid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "abbreviatedOid": "9ca6086", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-05-23T10:05:48Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44989#pullrequestreview-417267093", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-05-22T12:57:16Z", + "committedDate": "2020-05-22T12:57:16Z", + "pushedDate": "2020-05-22T12:59:08Z", + "abbreviatedOid": "a11ff5a", + "oid": "a11ff5a18b2c85b630182b8679820debab5c0e05", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155248", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155248", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155688", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155688", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/690142028?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-22T18:20:33Z", + "committedDate": "2020-05-22T18:20:33Z", + "pushedDate": "2020-05-22T18:20:50Z", + "abbreviatedOid": "4bf0130", + "oid": "4bf0130965e611b315eb1b25fa6a7a00f4331c6b", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575251", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575251", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575426", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575426", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/690298881?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-23T08:40:01Z", + "committedDate": "2020-05-23T08:40:01Z", + "pushedDate": "2020-05-23T08:41:39Z", + "abbreviatedOid": "9ca6086", + "oid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 7, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjgzOTQzNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@petr-motejlek Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can help you merge this PR once someone else signs off on it.\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## Inactive\n\nThis PR has been inactive for 39 days — it is considered abandoned!\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2020-05-22T18:22:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjgzOTQ0MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @TheHandsomeCoder @donnut @mdekrey @sbking @afharo @teves-castro @1M0reBug @hojberg @samsonkeung @angeloocana @raynerd @moshensky @ethanresnick @deftomat @blimusiek @biern @rayhaneh @rgm @drewwyatt @jottenlips @minitesh @krantisinh @pirix-gh @brekk @nemo108 @jituanlin @Philippe-mills @Saul-Mirone @Nicholaiii — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44989/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": "2020-05-22T18:22:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjg0MTM5NQ==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## ramda ([unpkg](https://unpkg.com/browse/ramda@latest/))\nwas missing the following properties:\n1. sequence\n1. xor\n

\n Generated by :no_entry_sign: dangerJS against 9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34\n

\n", + "createdAt": "2020-05-22T18:27:59Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjg4ODc0MQ==", + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "body": "Could you potentially add a test for the behaviour that only returns `[undefined]`?\r\nThis way we've got that covered too, and this enables that previous contributors can also review the change :)\r\nIt all looks good to me.", + "createdAt": "2020-05-22T19:57:22Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "petr-motejlek", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjg5NjY0OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #44989 | diff |\n| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 259.3 | 256.9 | -0.9% |\n| Type count | 79254 | 79254 | 0% |\n| Assignability cache size | 62164 | 62164 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 1881 | 1881 | 0% |\n| Identifiers in tests | 5698 | 5698 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 416.0 | 414.9 | -0.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.1% | 8.9% | |\n|     Worst duration (ms) | 525.5 | 520.5 | -1.0% |\n|     Worst identifier | [pair](/DefinitelyTyped/DefinitelyTyped/blob/699ee6b26683660fff379466962170998b450cfd/types/ramda/ramda-tests.ts#L276) | [divide](/DefinitelyTyped/DefinitelyTyped/blob/bd51e5e8ffb33cf1c547d73977e712a413119fd3/types/ramda/ramda-tests.ts#L71) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 407.8 | 407.7 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.3% | 9.5% | +2.6% |\n|     Worst duration (ms) | 502.1 | 508.3 | +1.2% |\n|     Worst identifier | [rejectEven](/DefinitelyTyped/DefinitelyTyped/blob/699ee6b26683660fff379466962170998b450cfd/types/ramda/ramda-tests.ts#L316) | [combined](/DefinitelyTyped/DefinitelyTyped/blob/bd51e5e8ffb33cf1c547d73977e712a413119fd3/types/ramda/ramda-tests.ts#L391) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-05-22T20:26:39Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMzAwODYzNA==", + "author": { + "login": "petr-motejlek", + "__typename": "User" + }, + "body": "@Nicholaiii , certainly. It should be in now.", + "createdAt": "2020-05-23T08:45:20Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "Nicholaiii", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMzAxODkyMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@petr-motejlek Everything looks good here. Great job! I am ready to merge this PR (at 9ca6086) on your behalf.\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", + "createdAt": "2020-05-23T10:05:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/ramda/index.d.ts", + "additions": 2, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/ramda/test/paths-tests.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzg3NDg0NDE=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz", + "name": "Waiting for Author to Merge", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-32days/derived.json b/packages/mergebot/src/_tests/fixtures/44989-32days/derived.json new file mode 100644 index 0000000000..5aec12ece2 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-32days/derived.json @@ -0,0 +1,75 @@ +{ + "type": "info", + "now": "2020-06-24T16:28:19.013Z", + "pr_number": 44989, + "author": "petr-motejlek", + "headCommitOid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "mergeBaseOid": "master", + "lastPushDate": "2020-05-23T08:41:39.000Z", + "lastActivityDate": "2020-05-23T10:05:48.000Z", + "mergeOfferDate": "2020-05-23T10:05:30.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": "ramda", + "kind": "edit", + "files": [ + { + "path": "types/ramda/index.d.ts", + "kind": "definition" + }, + { + "path": "types/ramda/test/paths-tests.ts", + "kind": "test" + } + ], + "owners": [ + "TheHandsomeCoder", + "donnut", + "mdekrey", + "sbking", + "afharo", + "teves-castro", + "1M0reBug", + "hojberg", + "samsonkeung", + "angeloocana", + "raynerd", + "moshensky", + "ethanresnick", + "deftomat", + "blimusiek", + "biern", + "rayhaneh", + "rgm", + "drewwyatt", + "jottenlips", + "minitesh", + "krantisinh", + "pirix-gh", + "brekk", + "nemo108", + "jituanlin", + "Philippe-mills", + "Saul-Mirone", + "Nicholaiii" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "Nicholaiii", + "date": "2020-05-23T10:05:48.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-32days/mutations.json b/packages/mergebot/src/_tests/fixtures/44989-32days/mutations.json new file mode 100644 index 0000000000..f0b8412801 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-32days/mutations.json @@ -0,0 +1,56 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjgzOTQzNQ==", + "body": "@petr-motejlek Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `ramda` — [on npm](https://www.npmjs.com/package/ramda), [on unpkg](https://unpkg.com/browse/ramda@latest/)\n - owner-approval: @Nicholaiii\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44989&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## Inactive\n\nThis PR has been inactive for 32 days — closed because it wasn't merged for a long time!\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2NDQwOTU4ODI=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDIyMDc5Mjk3" + } + } + }, + { + "mutation": "mutation ($input: DeleteProjectCardInput!) {\n deleteProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkMzg3NDg0NDE=" + } + } + }, + { + "mutation": "mutation ($input: ClosePullRequestInput!) {\n closePullRequest(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "pullRequestId": "MDExOlB1bGxSZXF1ZXN0NDIyMDc5Mjk3" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYzMzAxODkyMw==", + "body": "@petr-motejlek: Everything looks good here. I am ready to merge this PR (at 9ca6086) 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(@TheHandsomeCoder, @donnut, @mdekrey, @sbking, @afharo, @teves-castro, @1M0reBug, @hojberg, @samsonkeung, @angeloocana, @raynerd, @moshensky, @ethanresnick, @deftomat, @blimusiek, @biern, @rayhaneh, @rgm, @drewwyatt, @jottenlips, @minitesh, @krantisinh, @pirix-gh, @brekk, @nemo108, @jituanlin, @Philippe-mills, @Saul-Mirone, @Nicholaiii: you can do this too.)\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDIyMDc5Mjk3", + "body": "After a month, no one has requested merging the PR 😞. I'm going to assume that the change is not wanted after all, and will therefore close it.\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44989-32days/result.json b/packages/mergebot/src/_tests/fixtures/44989-32days/result.json new file mode 100644 index 0000000000..5393104c94 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-32days/result.json @@ -0,0 +1,26 @@ +{ + "projectColumn": "*REMOVE*", + "labels": [ + "Popular package", + "Owner Approved", + "Unmerged", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@petr-motejlek Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `ramda` — [on npm](https://www.npmjs.com/package/ramda), [on unpkg](https://unpkg.com/browse/ramda@latest/)\n - owner-approval: @Nicholaiii\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44989&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## Inactive\n\nThis PR has been inactive for 32 days — closed because it wasn't merged for a long time!\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "merge-offer", + "status": "@petr-motejlek: Everything looks good here. I am ready to merge this PR (at 9ca6086) 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(@TheHandsomeCoder, @donnut, @mdekrey, @sbking, @afharo, @teves-castro, @1M0reBug, @hojberg, @samsonkeung, @angeloocana, @raynerd, @moshensky, @ethanresnick, @deftomat, @blimusiek, @biern, @rayhaneh, @rgm, @drewwyatt, @jottenlips, @minitesh, @krantisinh, @pirix-gh, @brekk, @nemo108, @jituanlin, @Philippe-mills, @Saul-Mirone, @Nicholaiii: you can do this too.)" + }, + { + "tag": "Unmerged:done", + "status": "After a month, no one has requested merging the PR 😞. I'm going to assume that the change is not wanted after all, and will therefore close it." + } + ], + "shouldClose": true, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-3days/_downloads.json b/packages/mergebot/src/_tests/fixtures/44989-3days/_downloads.json new file mode 100644 index 0000000000..d911f5d2cc --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-3days/_downloads.json @@ -0,0 +1,3 @@ +{ + "ramda": 1199334 +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-3days/_files.json b/packages/mergebot/src/_tests/fixtures/44989-3days/_files.json new file mode 100644 index 0000000000..74bc7045ad --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-3days/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/ramda/index.d.ts": "// Type definitions for ramda 0.27\n// Project: https://ramdajs.com\n// Definitions by: Scott O'Malley \n// Erwin Poeze \n// Matt DeKrey \n// Stephen King \n// Alejandro Fernandez Haro \n// Vítor Castro \n// Jordan Quagliatini \n// Simon Højberg \n// Samson Keung \n// Angelo Ocana \n// Rayner Pupo \n// Nikita Moshensky \n// Ethan Resnick \n// Tomas Szabo \n// Maciek Blim \n// Marcin Biernat \n// Rayhaneh Banyassady \n// Ryan McCuaig \n// Drew Wyatt \n// John Ottenlips \n// Nitesh Phadatare \n// Krantisinh Deshmukh \n// Pierre-Antoine Mills \n// Brekk Bockrath \n// Aram Kharazyan \n// Jituan Lin \n// Philippe Mills \n// Saul Mirone \n// Nicholai Nissen \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.5\n\nimport * as _ from \"ts-toolbelt\";\nimport {\n Arity0Fn,\n Arity1Fn,", + "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34:types/ramda/index.d.ts": "// Type definitions for ramda 0.27\n// Project: https://ramdajs.com\n// Definitions by: Scott O'Malley \n// Erwin Poeze \n// Matt DeKrey \n// Stephen King \n// Alejandro Fernandez Haro \n// Vítor Castro \n// Jordan Quagliatini \n// Simon Højberg \n// Samson Keung \n// Angelo Ocana \n// Rayner Pupo \n// Nikita Moshensky \n// Ethan Resnick \n// Tomas Szabo \n// Maciek Blim \n// Marcin Biernat \n// Rayhaneh Banyassady \n// Ryan McCuaig \n// Drew Wyatt \n// John Ottenlips \n// Nitesh Phadatare \n// Krantisinh Deshmukh \n// Pierre-Antoine Mills \n// Brekk Bockrath \n// Aram Kharazyan \n// Jituan Lin \n// Philippe Mills \n// Saul Mirone \n// Nicholai Nissen \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.5\n\nimport * as _ from \"ts-toolbelt\";\nimport {\n Arity0Fn,\n Arity1Fn," +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-3days/_response.json b/packages/mergebot/src/_tests/fixtures/44989-3days/_response.json new file mode 100644 index 0000000000..d0e60c2f78 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-3days/_response.json @@ -0,0 +1,448 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDIyMDc5Mjk3", + "title": "Feature/43320 take two", + "lastEditedAt": null, + "author": { + "login": "petr-motejlek", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-05-22T18:22:29Z", + "labels": { + "nodes": [ + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44989, + "state": "OPEN", + "headRefOid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-22T18:22:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-22T18:22:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-05-22T18:27:59Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "createdAt": "2020-05-22T19:57:22Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-22T20:26:39Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "petr-motejlek", + "__typename": "User" + }, + "createdAt": "2020-05-23T08:45:20Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-23T10:05:30Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "commit": { + "oid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "abbreviatedOid": "9ca6086", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-05-23T10:05:21Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44989#pullrequestreview-417267077", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "commit": { + "oid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "abbreviatedOid": "9ca6086", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-05-23T10:05:48Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44989#pullrequestreview-417267093", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-05-22T12:57:16Z", + "committedDate": "2020-05-22T12:57:16Z", + "pushedDate": "2020-05-22T12:59:08Z", + "abbreviatedOid": "a11ff5a", + "oid": "a11ff5a18b2c85b630182b8679820debab5c0e05", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155248", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155248", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155688", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155688", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/690142028?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-22T18:20:33Z", + "committedDate": "2020-05-22T18:20:33Z", + "pushedDate": "2020-05-22T18:20:50Z", + "abbreviatedOid": "4bf0130", + "oid": "4bf0130965e611b315eb1b25fa6a7a00f4331c6b", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575251", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575251", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575426", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575426", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/690298881?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-23T08:40:01Z", + "committedDate": "2020-05-23T08:40:01Z", + "pushedDate": "2020-05-23T08:41:39Z", + "abbreviatedOid": "9ca6086", + "oid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 7, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjgzOTQzNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@petr-motejlek Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can help you merge this PR once someone else signs off on it.\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## Inactive\n\nThis PR has been inactive for 39 days — it is considered abandoned!\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2020-05-22T18:22:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjgzOTQ0MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @TheHandsomeCoder @donnut @mdekrey @sbking @afharo @teves-castro @1M0reBug @hojberg @samsonkeung @angeloocana @raynerd @moshensky @ethanresnick @deftomat @blimusiek @biern @rayhaneh @rgm @drewwyatt @jottenlips @minitesh @krantisinh @pirix-gh @brekk @nemo108 @jituanlin @Philippe-mills @Saul-Mirone @Nicholaiii — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44989/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": "2020-05-22T18:22:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjg0MTM5NQ==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## ramda ([unpkg](https://unpkg.com/browse/ramda@latest/))\nwas missing the following properties:\n1. sequence\n1. xor\n

\n Generated by :no_entry_sign: dangerJS against 9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34\n

\n", + "createdAt": "2020-05-22T18:27:59Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjg4ODc0MQ==", + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "body": "Could you potentially add a test for the behaviour that only returns `[undefined]`?\r\nThis way we've got that covered too, and this enables that previous contributors can also review the change :)\r\nIt all looks good to me.", + "createdAt": "2020-05-22T19:57:22Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "petr-motejlek", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjg5NjY0OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #44989 | diff |\n| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 259.3 | 256.9 | -0.9% |\n| Type count | 79254 | 79254 | 0% |\n| Assignability cache size | 62164 | 62164 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 1881 | 1881 | 0% |\n| Identifiers in tests | 5698 | 5698 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 416.0 | 414.9 | -0.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.1% | 8.9% | |\n|     Worst duration (ms) | 525.5 | 520.5 | -1.0% |\n|     Worst identifier | [pair](/DefinitelyTyped/DefinitelyTyped/blob/699ee6b26683660fff379466962170998b450cfd/types/ramda/ramda-tests.ts#L276) | [divide](/DefinitelyTyped/DefinitelyTyped/blob/bd51e5e8ffb33cf1c547d73977e712a413119fd3/types/ramda/ramda-tests.ts#L71) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 407.8 | 407.7 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.3% | 9.5% | +2.6% |\n|     Worst duration (ms) | 502.1 | 508.3 | +1.2% |\n|     Worst identifier | [rejectEven](/DefinitelyTyped/DefinitelyTyped/blob/699ee6b26683660fff379466962170998b450cfd/types/ramda/ramda-tests.ts#L316) | [combined](/DefinitelyTyped/DefinitelyTyped/blob/bd51e5e8ffb33cf1c547d73977e712a413119fd3/types/ramda/ramda-tests.ts#L391) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-05-22T20:26:39Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMzAwODYzNA==", + "author": { + "login": "petr-motejlek", + "__typename": "User" + }, + "body": "@Nicholaiii , certainly. It should be in now.", + "createdAt": "2020-05-23T08:45:20Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "Nicholaiii", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMzAxODkyMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@petr-motejlek Everything looks good here. Great job! I am ready to merge this PR (at 9ca6086) on your behalf.\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", + "createdAt": "2020-05-23T10:05:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/ramda/index.d.ts", + "additions": 2, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/ramda/test/paths-tests.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzg3NDg0NDE=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz", + "name": "Waiting for Author to Merge", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-3days/derived.json b/packages/mergebot/src/_tests/fixtures/44989-3days/derived.json new file mode 100644 index 0000000000..accad1603e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-3days/derived.json @@ -0,0 +1,75 @@ +{ + "type": "info", + "now": "2020-05-26T16:28:19.013Z", + "pr_number": 44989, + "author": "petr-motejlek", + "headCommitOid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "mergeBaseOid": "master", + "lastPushDate": "2020-05-23T08:41:39.000Z", + "lastActivityDate": "2020-05-23T10:05:48.000Z", + "mergeOfferDate": "2020-05-23T10:05:30.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": "ramda", + "kind": "edit", + "files": [ + { + "path": "types/ramda/index.d.ts", + "kind": "definition" + }, + { + "path": "types/ramda/test/paths-tests.ts", + "kind": "test" + } + ], + "owners": [ + "TheHandsomeCoder", + "donnut", + "mdekrey", + "sbking", + "afharo", + "teves-castro", + "1M0reBug", + "hojberg", + "samsonkeung", + "angeloocana", + "raynerd", + "moshensky", + "ethanresnick", + "deftomat", + "blimusiek", + "biern", + "rayhaneh", + "rgm", + "drewwyatt", + "jottenlips", + "minitesh", + "krantisinh", + "pirix-gh", + "brekk", + "nemo108", + "jituanlin", + "Philippe-mills", + "Saul-Mirone", + "Nicholaiii" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "Nicholaiii", + "date": "2020-05-23T10:05:48.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-3days/mutations.json b/packages/mergebot/src/_tests/fixtures/44989-3days/mutations.json new file mode 100644 index 0000000000..6302e2ec85 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-3days/mutations.json @@ -0,0 +1,20 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjgzOTQzNQ==", + "body": "@petr-motejlek Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `ramda` — [on npm](https://www.npmjs.com/package/ramda), [on unpkg](https://unpkg.com/browse/ramda@latest/)\n - owner-approval: @Nicholaiii\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44989&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: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYzMzAxODkyMw==", + "body": "@petr-motejlek: Everything looks good here. I am ready to merge this PR (at 9ca6086) 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(@TheHandsomeCoder, @donnut, @mdekrey, @sbking, @afharo, @teves-castro, @1M0reBug, @hojberg, @samsonkeung, @angeloocana, @raynerd, @moshensky, @ethanresnick, @deftomat, @blimusiek, @biern, @rayhaneh, @rgm, @drewwyatt, @jottenlips, @minitesh, @krantisinh, @pirix-gh, @brekk, @nemo108, @jituanlin, @Philippe-mills, @Saul-Mirone, @Nicholaiii: you can do this too.)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44989-3days/result.json b/packages/mergebot/src/_tests/fixtures/44989-3days/result.json new file mode 100644 index 0000000000..1a02dfe036 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-3days/result.json @@ -0,0 +1,21 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Popular package", + "Owner Approved", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@petr-motejlek Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `ramda` — [on npm](https://www.npmjs.com/package/ramda), [on unpkg](https://unpkg.com/browse/ramda@latest/)\n - owner-approval: @Nicholaiii\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44989&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": "@petr-motejlek: Everything looks good here. I am ready to merge this PR (at 9ca6086) 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(@TheHandsomeCoder, @donnut, @mdekrey, @sbking, @afharo, @teves-castro, @1M0reBug, @hojberg, @samsonkeung, @angeloocana, @raynerd, @moshensky, @ethanresnick, @deftomat, @blimusiek, @biern, @rayhaneh, @rgm, @drewwyatt, @jottenlips, @minitesh, @krantisinh, @pirix-gh, @brekk, @nemo108, @jituanlin, @Philippe-mills, @Saul-Mirone, @Nicholaiii: you can do this too.)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-7days/_downloads.json b/packages/mergebot/src/_tests/fixtures/44989-7days/_downloads.json new file mode 100644 index 0000000000..d911f5d2cc --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-7days/_downloads.json @@ -0,0 +1,3 @@ +{ + "ramda": 1199334 +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-7days/_files.json b/packages/mergebot/src/_tests/fixtures/44989-7days/_files.json new file mode 100644 index 0000000000..74bc7045ad --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-7days/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/ramda/index.d.ts": "// Type definitions for ramda 0.27\n// Project: https://ramdajs.com\n// Definitions by: Scott O'Malley \n// Erwin Poeze \n// Matt DeKrey \n// Stephen King \n// Alejandro Fernandez Haro \n// Vítor Castro \n// Jordan Quagliatini \n// Simon Højberg \n// Samson Keung \n// Angelo Ocana \n// Rayner Pupo \n// Nikita Moshensky \n// Ethan Resnick \n// Tomas Szabo \n// Maciek Blim \n// Marcin Biernat \n// Rayhaneh Banyassady \n// Ryan McCuaig \n// Drew Wyatt \n// John Ottenlips \n// Nitesh Phadatare \n// Krantisinh Deshmukh \n// Pierre-Antoine Mills \n// Brekk Bockrath \n// Aram Kharazyan \n// Jituan Lin \n// Philippe Mills \n// Saul Mirone \n// Nicholai Nissen \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.5\n\nimport * as _ from \"ts-toolbelt\";\nimport {\n Arity0Fn,\n Arity1Fn,", + "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34:types/ramda/index.d.ts": "// Type definitions for ramda 0.27\n// Project: https://ramdajs.com\n// Definitions by: Scott O'Malley \n// Erwin Poeze \n// Matt DeKrey \n// Stephen King \n// Alejandro Fernandez Haro \n// Vítor Castro \n// Jordan Quagliatini \n// Simon Højberg \n// Samson Keung \n// Angelo Ocana \n// Rayner Pupo \n// Nikita Moshensky \n// Ethan Resnick \n// Tomas Szabo \n// Maciek Blim \n// Marcin Biernat \n// Rayhaneh Banyassady \n// Ryan McCuaig \n// Drew Wyatt \n// John Ottenlips \n// Nitesh Phadatare \n// Krantisinh Deshmukh \n// Pierre-Antoine Mills \n// Brekk Bockrath \n// Aram Kharazyan \n// Jituan Lin \n// Philippe Mills \n// Saul Mirone \n// Nicholai Nissen \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.5\n\nimport * as _ from \"ts-toolbelt\";\nimport {\n Arity0Fn,\n Arity1Fn," +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-7days/_response.json b/packages/mergebot/src/_tests/fixtures/44989-7days/_response.json new file mode 100644 index 0000000000..d0e60c2f78 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-7days/_response.json @@ -0,0 +1,448 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDIyMDc5Mjk3", + "title": "Feature/43320 take two", + "lastEditedAt": null, + "author": { + "login": "petr-motejlek", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-05-22T18:22:29Z", + "labels": { + "nodes": [ + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 44989, + "state": "OPEN", + "headRefOid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-22T18:22:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-22T18:22:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-05-22T18:27:59Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "createdAt": "2020-05-22T19:57:22Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-22T20:26:39Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "petr-motejlek", + "__typename": "User" + }, + "createdAt": "2020-05-23T08:45:20Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-23T10:05:30Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "commit": { + "oid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "abbreviatedOid": "9ca6086", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-05-23T10:05:21Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44989#pullrequestreview-417267077", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "commit": { + "oid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "abbreviatedOid": "9ca6086", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-05-23T10:05:48Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44989#pullrequestreview-417267093", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-05-22T12:57:16Z", + "committedDate": "2020-05-22T12:57:16Z", + "pushedDate": "2020-05-22T12:59:08Z", + "abbreviatedOid": "a11ff5a", + "oid": "a11ff5a18b2c85b630182b8679820debab5c0e05", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155248", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155248", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155688", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4bf0130965e611b315eb1b25fa6a7a00f4331c6b/checks?check_suite_id=709155688", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/690142028?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-22T18:20:33Z", + "committedDate": "2020-05-22T18:20:33Z", + "pushedDate": "2020-05-22T18:20:50Z", + "abbreviatedOid": "4bf0130", + "oid": "4bf0130965e611b315eb1b25fa6a7a00f4331c6b", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575251", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575251", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575426", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34/checks?check_suite_id=710575426", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "SUCCESS", + "contexts": [ + { + "state": "SUCCESS", + "description": "The Travis CI build passed", + "creator": { + "login": "johnnyreilly", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/690298881?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-23T08:40:01Z", + "committedDate": "2020-05-23T08:40:01Z", + "pushedDate": "2020-05-23T08:41:39Z", + "abbreviatedOid": "9ca6086", + "oid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 7, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjgzOTQzNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@petr-motejlek Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can help you merge this PR once someone else signs off on it.\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## Inactive\n\nThis PR has been inactive for 39 days — it is considered abandoned!\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2020-05-22T18:22:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjgzOTQ0MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @TheHandsomeCoder @donnut @mdekrey @sbking @afharo @teves-castro @1M0reBug @hojberg @samsonkeung @angeloocana @raynerd @moshensky @ethanresnick @deftomat @blimusiek @biern @rayhaneh @rgm @drewwyatt @jottenlips @minitesh @krantisinh @pirix-gh @brekk @nemo108 @jituanlin @Philippe-mills @Saul-Mirone @Nicholaiii — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44989/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": "2020-05-22T18:22:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjg0MTM5NQ==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## ramda ([unpkg](https://unpkg.com/browse/ramda@latest/))\nwas missing the following properties:\n1. sequence\n1. xor\n

\n Generated by :no_entry_sign: dangerJS against 9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34\n

\n", + "createdAt": "2020-05-22T18:27:59Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjg4ODc0MQ==", + "author": { + "login": "Nicholaiii", + "__typename": "User" + }, + "body": "Could you potentially add a test for the behaviour that only returns `[undefined]`?\r\nThis way we've got that covered too, and this enables that previous contributors can also review the change :)\r\nIt all looks good to me.", + "createdAt": "2020-05-22T19:57:22Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "petr-motejlek", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjg5NjY0OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #44989 | diff |\n| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 259.3 | 256.9 | -0.9% |\n| Type count | 79254 | 79254 | 0% |\n| Assignability cache size | 62164 | 62164 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 1881 | 1881 | 0% |\n| Identifiers in tests | 5698 | 5698 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 416.0 | 414.9 | -0.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.1% | 8.9% | |\n|     Worst duration (ms) | 525.5 | 520.5 | -1.0% |\n|     Worst identifier | [pair](/DefinitelyTyped/DefinitelyTyped/blob/699ee6b26683660fff379466962170998b450cfd/types/ramda/ramda-tests.ts#L276) | [divide](/DefinitelyTyped/DefinitelyTyped/blob/bd51e5e8ffb33cf1c547d73977e712a413119fd3/types/ramda/ramda-tests.ts#L71) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 407.8 | 407.7 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.3% | 9.5% | +2.6% |\n|     Worst duration (ms) | 502.1 | 508.3 | +1.2% |\n|     Worst identifier | [rejectEven](/DefinitelyTyped/DefinitelyTyped/blob/699ee6b26683660fff379466962170998b450cfd/types/ramda/ramda-tests.ts#L316) | [combined](/DefinitelyTyped/DefinitelyTyped/blob/bd51e5e8ffb33cf1c547d73977e712a413119fd3/types/ramda/ramda-tests.ts#L391) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-05-22T20:26:39Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMzAwODYzNA==", + "author": { + "login": "petr-motejlek", + "__typename": "User" + }, + "body": "@Nicholaiii , certainly. It should be in now.", + "createdAt": "2020-05-23T08:45:20Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "Nicholaiii", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzMzAxODkyMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@petr-motejlek Everything looks good here. Great job! I am ready to merge this PR (at 9ca6086) on your behalf.\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", + "createdAt": "2020-05-23T10:05:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/ramda/index.d.ts", + "additions": 2, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/ramda/test/paths-tests.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzg3NDg0NDE=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz", + "name": "Waiting for Author to Merge", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-7days/derived.json b/packages/mergebot/src/_tests/fixtures/44989-7days/derived.json new file mode 100644 index 0000000000..b6a4c04b45 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-7days/derived.json @@ -0,0 +1,75 @@ +{ + "type": "info", + "now": "2020-05-30T16:28:19.013Z", + "pr_number": 44989, + "author": "petr-motejlek", + "headCommitOid": "9ca60862ea56c9ff8d6b0f26c28b7e0bdaef4b34", + "mergeBaseOid": "master", + "lastPushDate": "2020-05-23T08:41:39.000Z", + "lastActivityDate": "2020-05-23T10:05:48.000Z", + "mergeOfferDate": "2020-05-23T10:05:30.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": "ramda", + "kind": "edit", + "files": [ + { + "path": "types/ramda/index.d.ts", + "kind": "definition" + }, + { + "path": "types/ramda/test/paths-tests.ts", + "kind": "test" + } + ], + "owners": [ + "TheHandsomeCoder", + "donnut", + "mdekrey", + "sbking", + "afharo", + "teves-castro", + "1M0reBug", + "hojberg", + "samsonkeung", + "angeloocana", + "raynerd", + "moshensky", + "ethanresnick", + "deftomat", + "blimusiek", + "biern", + "rayhaneh", + "rgm", + "drewwyatt", + "jottenlips", + "minitesh", + "krantisinh", + "pirix-gh", + "brekk", + "nemo108", + "jituanlin", + "Philippe-mills", + "Saul-Mirone", + "Nicholaiii" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "Nicholaiii", + "date": "2020-05-23T10:05:48.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/44989-7days/mutations.json b/packages/mergebot/src/_tests/fixtures/44989-7days/mutations.json new file mode 100644 index 0000000000..c2194de8cd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-7days/mutations.json @@ -0,0 +1,20 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYzMjgzOTQzNQ==", + "body": "@petr-motejlek Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `ramda` — [on npm](https://www.npmjs.com/package/ramda), [on unpkg](https://unpkg.com/browse/ramda@latest/)\n - owner-approval: @Nicholaiii\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44989&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## Inactive\n\nThis PR has been inactive for 7 days.\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYzMzAxODkyMw==", + "body": "@petr-motejlek: Everything looks good here. I am ready to merge this PR (at 9ca6086) 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(@TheHandsomeCoder, @donnut, @mdekrey, @sbking, @afharo, @teves-castro, @1M0reBug, @hojberg, @samsonkeung, @angeloocana, @raynerd, @moshensky, @ethanresnick, @deftomat, @blimusiek, @biern, @rayhaneh, @rgm, @drewwyatt, @jottenlips, @minitesh, @krantisinh, @pirix-gh, @brekk, @nemo108, @jituanlin, @Philippe-mills, @Saul-Mirone, @Nicholaiii: you can do this too.)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/44989-7days/result.json b/packages/mergebot/src/_tests/fixtures/44989-7days/result.json new file mode 100644 index 0000000000..16d96d6f32 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/44989-7days/result.json @@ -0,0 +1,21 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Popular package", + "Owner Approved", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@petr-motejlek Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `ramda` — [on npm](https://www.npmjs.com/package/ramda), [on unpkg](https://unpkg.com/browse/ramda@latest/)\n - owner-approval: @Nicholaiii\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=44989&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## Inactive\n\nThis PR has been inactive for 7 days.\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "merge-offer", + "status": "@petr-motejlek: Everything looks good here. I am ready to merge this PR (at 9ca6086) 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(@TheHandsomeCoder, @donnut, @mdekrey, @sbking, @afharo, @teves-castro, @1M0reBug, @hojberg, @samsonkeung, @angeloocana, @raynerd, @moshensky, @ethanresnick, @deftomat, @blimusiek, @biern, @rayhaneh, @rgm, @drewwyatt, @jottenlips, @minitesh, @krantisinh, @pirix-gh, @brekk, @nemo108, @jituanlin, @Philippe-mills, @Saul-Mirone, @Nicholaiii: you can do this too.)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/45137/_downloads.json b/packages/mergebot/src/_tests/fixtures/45137/_downloads.json new file mode 100644 index 0000000000..3cabb00f51 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45137/_downloads.json @@ -0,0 +1,3 @@ +{ + "mongodb": 2181206 +} diff --git a/packages/mergebot/src/_tests/fixtures/45137/_files.json b/packages/mergebot/src/_tests/fixtures/45137/_files.json new file mode 100644 index 0000000000..b610a4b680 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45137/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/mongodb/index.d.ts": "// Type definitions for MongoDB 3.5\n// Project: https://github.com/mongodb/node-mongodb-native\n// https://github.com/mongodb/node-mongodb-native/tree/3.1\n// Definitions by: Federico Caselli \n// Alan Marcell \n// Gaurav Lahoti \n// Mariano Cortesi \n// Enrico Picci \n// Alexander Christie \n// Julien Chaumond \n// Dan Aprahamian \n// Denys Bushulyak \n// Bastien Arata \n// Wan Bachtiar \n// Geraldine Lemeur \n// Dominik Heigl \n// Angela-1 \n// Mikael Lirbank \n// Hector Ribes \n// Florian Richter \n// Erik Christensen \n// Nick Zahn \n// Jarom Loveridge \n// Luis Pais \n// Hossein Saniei \n// Alberto Silva \n// Piotr Błażejewicz \n// Linus Unnebäck \n// Richard Bateman \n// Igor Strebezhev \n// Valentin Agachi \n// HitkoDev \n// Julien TASSIN \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// Minimum TypeScript Version: 3.2\n\n// Documentation: https://mongodb.github.io/node-mongodb-native/3.1/api/\n\n/// \n\n", + "22c73c88cc9c09efd4c2998ec360607dd4c36c2e:types/mongodb/index.d.ts": "// Type definitions for MongoDB 3.5\n// Project: https://github.com/mongodb/node-mongodb-native\n// https://github.com/mongodb/node-mongodb-native/tree/3.1\n// Definitions by: Federico Caselli \n// Alan Marcell \n// Gaurav Lahoti \n// Mariano Cortesi \n// Enrico Picci \n// Alexander Christie \n// Julien Chaumond \n// Dan Aprahamian \n// Denys Bushulyak \n// Bastien Arata \n// Wan Bachtiar \n// Geraldine Lemeur \n// Dominik Heigl \n// Angela-1 \n// Hector Ribes \n// Florian Richter \n// Erik Christensen \n// Nick Zahn \n// Jarom Loveridge \n// Luis Pais \n// Hossein Saniei \n// Alberto Silva \n// Piotr Błażejewicz \n// Linus Unnebäck \n// Richard Bateman \n// Igor Strebezhev \n// Valentin Agachi \n// HitkoDev \n// Julien TASSIN \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// Minimum TypeScript Version: 3.2\n\n// Documentation: https://mongodb.github.io/node-mongodb-native/3.1/api/\n\n/// \n\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/45137/_response.json b/packages/mergebot/src/_tests/fixtures/45137/_response.json new file mode 100644 index 0000000000..792de89c92 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45137/_response.json @@ -0,0 +1,311 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDI0ODgwNjA2", + "title": "[mongodb] Remove self", + "lastEditedAt": null, + "author": { + "login": "lirbank", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-05-29T04:40:15Z", + "labels": { + "nodes": [ + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + }, + { + "name": "The Travis CI build failed", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 45137, + "state": "OPEN", + "headRefOid": "22c73c88cc9c09efd4c2998ec360607dd4c36c2e", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-29T04:40:25Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-29T04:40:25Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-29T04:43:14Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-05-29T04:43:45Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-05-29T06:44:09Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "LinusU", + "__typename": "User" + }, + "commit": { + "oid": "22c73c88cc9c09efd4c2998ec360607dd4c36c2e", + "abbreviatedOid": "22c73c8", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-05-29T07:13:24Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45137#pullrequestreview-420705059", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664582", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664582", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "status": "FAILURE", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": { + "state": "FAILURE", + "contexts": [ + { + "state": "FAILURE", + "description": "The Travis CI build failed", + "creator": { + "login": "orta", + "__typename": "User" + }, + "targetUrl": "https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/692427445?utm_source=github_status&utm_medium=notification", + "__typename": "StatusContext" + } + ], + "__typename": "Status" + }, + "authoredDate": "2020-05-29T04:38:47Z", + "committedDate": "2020-05-29T04:38:47Z", + "pushedDate": "2020-05-29T04:38:59Z", + "abbreviatedOid": "22c73c8", + "oid": "22c73c88cc9c09efd4c2998ec360607dd4c36c2e", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDYzNTc1NDY1Mw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@lirbank Thank you for submitting this PR! \n\n This PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Have you considered [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#testing) 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\n## Code Reviews\n\nThis PR can be merged once it's reviewed by a DT maintainer.\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#testing)\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": "2020-05-29T04:40:25Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzNTc1NDY1Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @CaselIT @alanmarcell @dante-101 @mcortesi @EnricoPicci @AJCStriker @julien-c @daprahamian @denys-bushulyak @BastienAr @sindbach @geraldinelemeur @various89 @angela-1 @hector7 @floric @erikc5000 @Manc @jloveridge @ranguna @HosseinAgha @albertossilva @peterblazejewicz @LinusU @taxilian @xamgore @avaly @HitkoDev @jtassin — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45137/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": "2020-05-29T04:40:25Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzNTc1NTMzOQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@lirbank The Travis CI build failed! Please [review the logs for more information](https://travis-ci.org/github/DefinitelyTyped/DefinitelyTyped/builds/692427445?utm_source=github_status&utm_medium=notification).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-05-29T04:43:14Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzNTc1NTQ3MQ==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## mongodb ([unpkg](https://unpkg.com/browse/mongodb@latest/))\nwas missing the following properties:\n1. The declaration doesn't match the JavaScript module 'mongodb'. Reason:\nThe JavaScript module can be called or constructed, but the declaration module cannot.\n\nThe most common way to resolve this error is to use 'export =' syntax.\nTo learn more about 'export =' syntax, see https://www.typescriptlang.org/docs/handbook/modules.html#export--and-import--require.\n1. MongoTimeoutError\n1. MongoServerSelectionError\n1. MongoWriteConcernError\n1. MongoBulkWriteError\n\n
\nas well as these 11 other properties...\n

BulkWriteError, Admin, Collection, GridStore, Chunk, CoreServer, CoreConnection, Map, Symbol, BSONRegExp, instrument

\n
\n\n

\n Generated by :no_entry_sign: dangerJS against 22c73c88cc9c09efd4c2998ec360607dd4c36c2e\n

\n", + "createdAt": "2020-05-29T04:43:45Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYzNTc5MjE1Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #45137 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 77.2 | 75.6 | -2.0% |\n| Type count | 16840 | 16840 | 0% |\n| Assignability cache size | 6320 | 6320 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 2007 | 1981 | -1% |\n| Identifiers in tests | 2195 | 2195 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 380.6 | 381.8 | +0.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 7.9% | 8.3% | |\n|     Worst duration (ms) | 544.7 | 563.6 | +3.5% |\n|     Worst identifier | [field1](/DefinitelyTyped/DefinitelyTyped/blob/adb5ab2bbbea13e6b952df8064a301283bc9cee0/types/mongodb/test/collection/updateX.ts#L143) | [ObjectId](/DefinitelyTyped/DefinitelyTyped/blob/e67c4592d4627e1b9e995b79d80faf7302204474/types/mongodb/test/collection/updateX.ts#L159) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 381.4 | 383.5 | +0.6% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.1% | 8.6% | +6.0% |\n|     Worst duration (ms) | 536.8 | 548.5 | +2.2% |\n|     Worst identifier | [subInterfaceArray](/DefinitelyTyped/DefinitelyTyped/blob/adb5ab2bbbea13e6b952df8064a301283bc9cee0/types/mongodb/test/collection/updateX.ts#L158) | [$addToSet](/DefinitelyTyped/DefinitelyTyped/blob/e67c4592d4627e1b9e995b79d80faf7302204474/types/mongodb/test/collection/updateX.ts#L143) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-05-29T06:44:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/mongodb/index.d.ts", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 1 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkMzkxMjQ5MDU=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/45137/derived.json b/packages/mergebot/src/_tests/fixtures/45137/derived.json new file mode 100644 index 0000000000..244feced99 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45137/derived.json @@ -0,0 +1,74 @@ +{ + "type": "info", + "now": "2020-05-29T11:17:01.368Z", + "pr_number": 45137, + "author": "lirbank", + "headCommitOid": "22c73c88cc9c09efd4c2998ec360607dd4c36c2e", + "mergeBaseOid": "master", + "lastPushDate": "2020-05-29T04:38:59.000Z", + "lastActivityDate": "2020-05-29T07:13:24.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": "mongodb", + "kind": "edit", + "files": [ + { + "path": "types/mongodb/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "CaselIT", + "alanmarcell", + "dante-101", + "mcortesi", + "EnricoPicci", + "AJCStriker", + "julien-c", + "daprahamian", + "denys-bushulyak", + "BastienAr", + "sindbach", + "geraldinelemeur", + "various89", + "angela-1", + "lirbank", + "hector7", + "floric", + "erikc5000", + "Manc", + "jloveridge", + "ranguna", + "HosseinAgha", + "albertossilva", + "peterblazejewicz", + "LinusU", + "taxilian", + "xamgore", + "avaly", + "HitkoDev", + "jtassin" + ], + "addedOwners": [], + "deletedOwners": [ + "lirbank" + ], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "LinusU", + "date": "2020-05-29T07:13:24.000Z", + "isMaintainer": false + } + ], + "ciResult": "fail", + "ciUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306" +} diff --git a/packages/mergebot/src/_tests/fixtures/45137/mutations.json b/packages/mergebot/src/_tests/fixtures/45137/mutations.json new file mode 100644 index 0000000000..dcfd539481 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45137/mutations.json @@ -0,0 +1,41 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYzNTc1NDY1Mw==", + "body": "@lirbank Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `mongodb` — [on npm](https://www.npmjs.com/package/mongodb), [on unpkg](https://unpkg.com/browse/mongodb@latest/) (author is owner)\n - owner-approval: @LinusU\n - 1 removed owner: ✎@lirbank\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=45137&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\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----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMDk2NzQzNjAw", + "MDU6TGFiZWwyNDk1OTc2ODI5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDI0ODgwNjA2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDI0ODgwNjA2", + "body": "Hey @lirbank,\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" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDI0ODgwNjA2", + "body": "@lirbank The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306).\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/45137/result.json b/packages/mergebot/src/_tests/fixtures/45137/result.json new file mode 100644 index 0000000000..3bee53546d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45137/result.json @@ -0,0 +1,28 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "The CI failed", + "Popular package", + "Owner Approved", + "Edits Owners", + "Author is Owner", + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @lirbank,\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": "@lirbank Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `mongodb` — [on npm](https://www.npmjs.com/package/mongodb), [on unpkg](https://unpkg.com/browse/mongodb@latest/) (author is owner)\n - owner-approval: @LinusU\n - 1 removed owner: ✎@lirbank\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=45137&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\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----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "gh-actions-complaint-22c73c8", + "status": "@lirbank The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306).\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.**" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/45627/_downloads.json b/packages/mergebot/src/_tests/fixtures/45627/_downloads.json new file mode 100644 index 0000000000..b3a7283645 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45627/_downloads.json @@ -0,0 +1,3 @@ +{ + "webpack": 11793552 +} diff --git a/packages/mergebot/src/_tests/fixtures/45627/_files.json b/packages/mergebot/src/_tests/fixtures/45627/_files.json new file mode 100644 index 0000000000..d96807ded4 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45627/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/webpack/index.d.ts": "// Type definitions for webpack 4.41\n// Project: https://github.com/webpack/webpack\n// Definitions by: Qubo \n// Benjamin Lim \n// Boris Cherny \n// Tommy Troy Lin \n// Mohsen Azimi \n// Jonathan Creamer \n// Alan Agius \n// Dennis George \n// Christophe Hurpeau \n// ZSkycat \n// John Reilly \n// Ryan Waskiewicz \n// Kyle Uehlein \n// Grgur Grisogono \n// Rubens Pinheiro Gonçalves Cavalcante \n// Anders Kaseorg \n// Felix Haus \n// Daniel Chin \n// Daiki Ihara \n// Dion Shi \n// Piotr Błażejewicz \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// \n\nimport { Hash as CryptoHash } from 'crypto';\n", + "15facc177c957646a1ace95abe5e71326007c721:types/webpack/index.d.ts": "// Type definitions for webpack 4.41\n// Project: https://github.com/webpack/webpack\n// Definitions by: Qubo \n// Benjamin Lim \n// Boris Cherny \n// Tommy Troy Lin \n// Mohsen Azimi \n// Jonathan Creamer \n// Alan Agius \n// Dennis George \n// Christophe Hurpeau \n// ZSkycat \n// John Reilly \n// Ryan Waskiewicz \n// Kyle Uehlein \n// Grgur Grisogono \n// Rubens Pinheiro Gonçalves Cavalcante \n// Anders Kaseorg \n// Felix Haus \n// Daniel Chin \n// Daiki Ihara \n// Dion Shi \n// Piotr Błażejewicz \n// Michał Grzegorzewski \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// \n\nimport { Hash as CryptoHash } from 'crypto';\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/45627/_response.json b/packages/mergebot/src/_tests/fixtures/45627/_response.json new file mode 100644 index 0000000000..51fb6c041f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45627/_response.json @@ -0,0 +1,324 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDM3NTIxMTQ2", + "title": "[webpack] fix for MultiCompiler doesn't define Multistats for callback/handler of run method", + "lastEditedAt": null, + "author": { + "login": "spamshaker", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-06-21T09:39:04Z", + "labels": { + "nodes": [ + { + "name": "Critical package", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 45627, + "state": "OPEN", + "headRefOid": "15facc177c957646a1ace95abe5e71326007c721", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-06-21T09:39:08Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-06-21T09:39:09Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-06-21T09:44:35Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-06-21T09:44:37Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-06-21T09:44:40Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-06-21T11:12:32Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-07-06T07:23:32Z", + "projectColumnName": "Waiting for Code Reviews" + }, + { + "__typename": "IssueComment", + "author": { + "login": "spamshaker", + "__typename": "User" + }, + "createdAt": "2020-07-06T08:36:06Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-06T08:36:10Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "ofhouse", + "__typename": "User" + }, + "commit": { + "oid": "15facc177c957646a1ace95abe5e71326007c721", + "abbreviatedOid": "15facc1", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-07-03T17:33:39Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45627#pullrequestreview-442518527", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/15facc177c957646a1ace95abe5e71326007c721/checks?check_suite_id=822445510", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/15facc177c957646a1ace95abe5e71326007c721/checks?check_suite_id=822445510", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/15facc177c957646a1ace95abe5e71326007c721/checks?check_suite_id=822445783", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/15facc177c957646a1ace95abe5e71326007c721/checks?check_suite_id=822445783", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-06-21T09:31:00Z", + "committedDate": "2020-06-21T09:31:00Z", + "pushedDate": "2020-06-21T09:33:06Z", + "abbreviatedOid": "15facc1", + "oid": "15facc177c957646a1ace95abe5e71326007c721", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY0NzEwNDY2NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@spamshaker Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n This PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Have you considered [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#testing) 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\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\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#testing)\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": "2020-06-21T09:39:08Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY0NzEwNDY2OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @tkqubo @bumbleblym @bcherny @tommytroylin @mohsen1 @jcreamer898 @alan-agius4 @dennispg @christophehurpeau @ZSkycat @johnnyreilly @rwaskiewicz @kuehlein @grgur @rubenspgcavalcante @andersk @ofhouse @danielthank @sasurau4 @dionshihk @peterblazejewicz — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45627/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": "2020-06-21T09:39:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY0NzEwNTIwMA==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## webpack ([unpkg](https://unpkg.com/browse/webpack@latest/))\nwas missing the following properties:\n1. WebpackOptionsDefaulter\n1. WebpackOptionsApply\n1. NodeEnvironmentPlugin\n1. validate\n1. validateSchema\n\n
\nas well as these 6 other properties...\n

WebpackOptionsValidationError, dependencies, web, webworker, node, util

\n
\n\n

\n Generated by :no_entry_sign: dangerJS against 15facc177c957646a1ace95abe5e71326007c721\n

\n", + "createdAt": "2020-06-21T09:44:35Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY0NzExMzc4Mw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #45627 | diff |\n| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 77.5 | 76.1 | -1.8% |\n| Type count | 12200 | 12202 | 0% |\n| Assignability cache size | 2669 | 2670 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 1557 | 1557 | 0% |\n| Identifiers in tests | 1557 | 1557 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 334.0 | 348.5 | +4.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 11.5% | 11.4% | |\n|     Worst duration (ms) | 455.1 | 452.9 | -0.5% |\n|     Worst identifier | [max](/DefinitelyTyped/DefinitelyTyped/blob/bdba62e896baf7094d1ccabb709cb9d46dcd3d3a/types/webpack/test/index.ts#L1128) | [sortOrderRegular](/DefinitelyTyped/DefinitelyTyped/blob/1853baa6c2d967f0c359220a7f199a5fcc5e4e43/types/webpack/test/index.ts#L1229) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 334.2 | 348.0 | +4.1% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 11.5% | 11.3% | -1.8% |\n|     Worst duration (ms) | 446.0 | 464.3 | +4.1% |\n|     Worst identifier | [max](/DefinitelyTyped/DefinitelyTyped/blob/bdba62e896baf7094d1ccabb709cb9d46dcd3d3a/types/webpack/test/index.ts#L1128) | [DllEntryPlugin](/DefinitelyTyped/DefinitelyTyped/blob/1853baa6c2d967f0c359220a7f199a5fcc5e4e43/types/webpack/test/index.ts#L935) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-06-21T11:12:32Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTU1OTExNA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@spamshaker Everything looks good here. Great job! I am ready to merge this PR (at 15facc1) on your behalf.\nIf you'd like that to happen, please post a comment with the exact text\n\n> Ready to merge\n\nand I'll merge it the next time I look at this PR.\n", + "createdAt": "2020-04-30T01:31:41Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NDA5NjY2MA==", + "author": { + "login": "spamshaker", + "__typename": "User" + }, + "body": "Ready to merge", + "createdAt": "2020-07-06T08:36:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/webpack/index.d.ts", + "additions": 6, + "deletions": 4, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 1 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDA0NTk5NzM=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy", + "name": "Needs Maintainer Review", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/45627/derived.json b/packages/mergebot/src/_tests/fixtures/45627/derived.json new file mode 100644 index 0000000000..c790dc7eaf --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45627/derived.json @@ -0,0 +1,68 @@ +{ + "type": "info", + "now": "2020-07-06T08:47:17.001Z", + "pr_number": 45627, + "author": "spamshaker", + "headCommitOid": "15facc177c957646a1ace95abe5e71326007c721", + "mergeBaseOid": "master", + "lastPushDate": "2020-06-21T09:33:06.000Z", + "lastActivityDate": "2020-07-06T08:36:06.000Z", + "maintainerBlessed": "Waiting for Code Reviews", + "mergeOfferDate": "2020-04-30T01:31:41.000Z", + "mergeRequestDate": "2020-07-06T08:36:06.000Z", + "mergeRequestUser": "spamshaker", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "webpack", + "kind": "edit", + "files": [ + { + "path": "types/webpack/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "tkqubo", + "bumbleblym", + "bcherny", + "tommytroylin", + "mohsen1", + "jcreamer898", + "alan-agius4", + "dennispg", + "christophehurpeau", + "ZSkycat", + "johnnyreilly", + "rwaskiewicz", + "kuehlein", + "grgur", + "rubenspgcavalcante", + "andersk", + "ofhouse", + "danielthank", + "sasurau4", + "dionshihk", + "peterblazejewicz" + ], + "addedOwners": [ + "spamshaker" + ], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "ofhouse", + "date": "2020-07-03T17:33:39.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/45627/mutations.json b/packages/mergebot/src/_tests/fixtures/45627/mutations.json new file mode 100644 index 0000000000..57e0b231e5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45627/mutations.json @@ -0,0 +1,78 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY0NzEwNDY2NQ==", + "body": "@spamshaker Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `webpack` — [on npm](https://www.npmjs.com/package/webpack), [on unpkg](https://unpkg.com/browse/webpack@latest/)\n - owner-approval: @ofhouse\n - 1 added owner: ✎@spamshaker\n\n@spamshaker: I see that you have added yourself as an owner, are you sure you want to [become an owner](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-definition-owners)?\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=45627&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## Inactive\n\nThis PR has been inactive for 67 days — closed because it wasn't merged for a long time!\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyNDk1OTc2ODI5", + "MDU6TGFiZWw2OTcwMTg5NzI=", + "MDU6TGFiZWw2NDQwOTU4ODI=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDM3NTIxMTQ2" + } + } + }, + { + "mutation": "mutation ($input: DeleteProjectCardInput!) {\n deleteProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNDA0NTk5NzM=" + } + } + }, + { + "mutation": "mutation ($input: MergePullRequestInput!) {\n mergePullRequest(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "commitHeadline": "🤖 Merge PR #45627 [webpack] fix for MultiCompiler doesn't define Multistats for callback/handler of run method by @spamshaker", + "expectedHeadOid": "15facc177c957646a1ace95abe5e71326007c721", + "mergeMethod": "SQUASH", + "pullRequestId": "MDExOlB1bGxSZXF1ZXN0NDM3NTIxMTQ2" + } + } + }, + { + "mutation": "mutation ($input: ClosePullRequestInput!) {\n closePullRequest(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "pullRequestId": "MDExOlB1bGxSZXF1ZXN0NDM3NTIxMTQ2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDM3NTIxMTQ2", + "body": "Hey @spamshaker,\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" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTU1OTExNA==", + "body": "@spamshaker: Everything looks good here. I am ready to merge this PR (at 15facc1) 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(@tkqubo, @bumbleblym, @bcherny, @tommytroylin, @mohsen1, @jcreamer898, @alan-agius4, @dennispg, @christophehurpeau, @ZSkycat, @johnnyreilly, @rwaskiewicz, @kuehlein, @grgur, @rubenspgcavalcante, @andersk, @ofhouse, @danielthank, @sasurau4, @dionshihk, @peterblazejewicz: you can do this too.)\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDM3NTIxMTQ2", + "body": "After a month, no one has requested merging the PR 😞. I'm going to assume that the change is not wanted after all, and will therefore close it.\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/45627/result.json b/packages/mergebot/src/_tests/fixtures/45627/result.json new file mode 100644 index 0000000000..5c75bad531 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45627/result.json @@ -0,0 +1,32 @@ +{ + "projectColumn": "*REMOVE*", + "labels": [ + "Critical package", + "Owner Approved", + "Edits Owners", + "Untested Change", + "Unmerged", + "Self Merge" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @spamshaker,\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": "@spamshaker Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `webpack` — [on npm](https://www.npmjs.com/package/webpack), [on unpkg](https://unpkg.com/browse/webpack@latest/)\n - owner-approval: @ofhouse\n - 1 added owner: ✎@spamshaker\n\n@spamshaker: I see that you have added yourself as an owner, are you sure you want to [become an owner](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-definition-owners)?\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=45627&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## Inactive\n\nThis PR has been inactive for 67 days — closed because it wasn't merged for a long time!\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "merge-offer", + "status": "@spamshaker: Everything looks good here. I am ready to merge this PR (at 15facc1) 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(@tkqubo, @bumbleblym, @bcherny, @tommytroylin, @mohsen1, @jcreamer898, @alan-agius4, @dennispg, @christophehurpeau, @ZSkycat, @johnnyreilly, @rwaskiewicz, @kuehlein, @grgur, @rubenspgcavalcante, @andersk, @ofhouse, @danielthank, @sasurau4, @dionshihk, @peterblazejewicz: you can do this too.)" + }, + { + "tag": "Unmerged:done", + "status": "After a month, no one has requested merging the PR 😞. I'm going to assume that the change is not wanted after all, and will therefore close it." + } + ], + "shouldClose": true, + "shouldMerge": true, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/45836/_downloads.json b/packages/mergebot/src/_tests/fixtures/45836/_downloads.json new file mode 100644 index 0000000000..1f24e0f9b5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45836/_downloads.json @@ -0,0 +1,4 @@ +{ + "prosemirror-commands": 135564, + "prosemirror-keymap": 136105 +} diff --git a/packages/mergebot/src/_tests/fixtures/45836/_files.json b/packages/mergebot/src/_tests/fixtures/45836/_files.json new file mode 100644 index 0000000000..603db56832 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45836/_files.json @@ -0,0 +1,6 @@ +{ + "master:types/prosemirror-commands/index.d.ts": "// Type definitions for prosemirror-commands 1.0\n// Project: https://github.com/ProseMirror/prosemirror-commands\n// Definitions by: Bradley Ayers \n// David Hahn \n// Tim Baumann \n// Patrick Simmelbauer \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\nimport { MarkType, Node as ProsemirrorNode, NodeType, Schema } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nexport interface Command {\n (\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n view: EditorView\n ): boolean;\n}\n\nexport interface Keymap {\n [key: string]: Command;\n}\n\n/**\n * Delete the selection, if there is one.\n */\nexport function deleteSelection(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * If the selection is empty and at the start of a textblock, try to\n * reduce the distance between that block and the one before it—if\n * there's a block directly before it that can be joined, join them.\n * If not, try to move the selected block closer to the next one in\n * the document structure by lifting it out of its parent or moving it\n * into a parent of the previous block. Will use the view for accurate\n * (bidi-aware) start-of-textblock detection if given.\n */\nexport function joinBackward(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n view?: EditorView\n): boolean;\n/**\n * When the selection is empty and at the start of a textblock, select\n * the node before that textblock, if possible. This is intended to be\n * bound to keys like backspace, after\n * [`joinBackward`](#commands.joinBackward) or other deleting\n * commands, as a fall-back behavior when the schema doesn't allow\n * deletion at the selected point.\n */\nexport function selectNodeBackward(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n view?: EditorView\n): boolean;\n/**\n * If the selection is empty and the cursor is at the end of a\n * textblock, try to reduce or remove the boundary between that block\n * and the one after it, either by joining them or by moving the other\n * block closer to this one in the tree structure. Will use the view\n * for accurate start-of-textblock detection if given.\n */\nexport function joinForward(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n view?: EditorView\n): boolean;\n/**\n * When the selection is empty and at the end of a textblock, select\n * the node coming after that textblock, if possible. This is intended\n * to be bound to keys like delete, after\n * [`joinForward`](#commands.joinForward) and similar deleting\n * commands, to provide a fall-back behavior when the schema doesn't\n * allow deletion at the selected point.\n */\nexport function selectNodeForward(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n view?: EditorView\n): boolean;\n/**\n * Join the selected block or, if there is a text selection, the\n * closest ancestor block of the selection that can be joined, with\n * the sibling above it.\n */\nexport function joinUp(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Join the selected block, or the closest ancestor of the selection\n * that can be joined, with the sibling after it.\n */\nexport function joinDown(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Lift the selected block, or the closest ancestor block of the\n * selection that can be lifted, out of its parent node.\n */\nexport function lift(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * If the selection is in a node whose type has a truthy\n * [`code`](#model.NodeSpec.code) property in its spec, replace the\n * selection with a newline character.\n */\nexport function newlineInCode(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * When the selection is in a node with a truthy\n * [`code`](#model.NodeSpec.code) property in its spec, create a\n * default block after the code block, and move the cursor there.\n */\nexport function exitCode(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * If a block node is selected, create an empty paragraph before (if\n * it is its parent's first child) or after it.\n */\nexport function createParagraphNear(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * If the cursor is in an empty textblock that can be lifted, lift the\n * block.\n */\nexport function liftEmptyBlock(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Split the parent block of the selection. If the selection is a text\n * selection, also delete its content.\n */\nexport function splitBlock(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Acts like [`splitBlock`](#commands.splitBlock), but without\n * resetting the set of active marks at the cursor.\n */\nexport function splitBlockKeepMarks(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Move the selection to the node wrapping the current selection, if\n * any. (Will not select the document node.)\n */\nexport function selectParentNode(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Select the whole document.\n */\nexport function selectAll(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Wrap the selection in a node of the given type with the given\n * attributes.\n */\nexport function wrapIn(\n nodeType: NodeType,\n attrs?: { [key: string]: any }\n): (state: EditorState, dispatch?: (tr: Transaction) => void) => boolean;\n/**\n * Returns a command that tries to set the textblock around the\n * selection to the given node type with the given attributes.\n */\nexport function setBlockType(\n nodeType: NodeType,\n attrs?: { [key: string]: any }\n): (state: EditorState, dispatch?: (tr: Transaction) => void) => boolean;\n/**\n * Create a command function that toggles the given mark with the\n * given attributes. Will return `false` when the current selection\n * doesn't support that mark. This will remove the mark if any marks\n * of that type exist in the selection, or add it otherwise. If the\n * selection is empty, this applies to the [stored\n * marks](#state.EditorState.storedMarks) instead of a range of the\n * document.\n */\nexport function toggleMark(\n markType: MarkType,\n attrs?: { [key: string]: any }\n): (state: EditorState, dispatch?: (tr: Transaction) => void) => boolean;\n/**\n * Wrap a command so that, when it produces a transform that causes\n * two joinable nodes to end up next to each other, those are joined.\n * Nodes are considered joinable when they are of the same type and\n * when the `isJoinable` predicate returns true for them or, if an\n * array of strings was passed, if their node type name is in that\n * array.\n */\nexport function autoJoin(\n command: (state: EditorState, p1?: (tr: Transaction) => void) => boolean,\n isJoinable: ((before: ProsemirrorNode, after: ProsemirrorNode) => boolean) | string[]\n): (state: EditorState, p1?: (tr: Transaction) => void) => boolean;\n/**\n * Combine a number of command functions into a single function (which\n * calls them one by one until one returns true).\n */\nexport function chainCommands(\n ...commands: Array<\n (p1: EditorState, p2?: (tr: Transaction) => void, p3?: EditorView) => boolean\n >\n): (p1: EditorState, p2?: (tr: Transaction) => void, p3?: EditorView) => boolean;\n/**\n * A basic keymap containing bindings not specific to any schema.\n * Binds the following keys (when multiple commands are listed, they\n * are chained with [`chainCommands`](#commands.chainCommands)):\n *\n * * **Enter** to `newlineInCode`, `createParagraphNear`, `liftEmptyBlock`, `splitBlock`\n * * **Mod-Enter** to `exitCode`\n * * **Backspace** and **Mod-Backspace** to `deleteSelection`, `joinBackward`, `selectNodeBackward`\n * * **Delete** and **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n * * **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n * * **Mod-a** to `selectAll`\n */\nexport let pcBaseKeymap: Keymap;\n/**\n * A copy of `pcBaseKeymap` that also binds **Ctrl-h** like Backspace,\n * **Ctrl-d** like Delete, **Alt-Backspace** like Ctrl-Backspace, and\n * **Ctrl-Alt-Backspace**, **Alt-Delete**, and **Alt-d** like\n * Ctrl-Delete.\n */\nexport let macBaseKeymap: Keymap;\n/**\n * Depending on the detected platform, this will hold\n * [`pcBasekeymap`](#commands.pcBaseKeymap) or\n * [`macBaseKeymap`](#commands.macBaseKeymap).\n */\nexport let baseKeymap: Keymap;\n", + "6c7735e2b8f39640cb73e40ae04cb6642a8ab2cd:types/prosemirror-commands/index.d.ts": "// Type definitions for prosemirror-commands 1.0\n// Project: https://github.com/ProseMirror/prosemirror-commands\n// Definitions by: Bradley Ayers \n// David Hahn \n// Tim Baumann \n// Patrick Simmelbauer \n// Mike Morearty \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.0\n\nimport { MarkType, Node as ProsemirrorNode, NodeType, Schema } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nexport interface Command {\n (\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n view: EditorView\n ): boolean;\n}\n\nexport interface Keymap {\n [key: string]: Command;\n}\n\n/**\n * Delete the selection, if there is one.\n */\nexport function deleteSelection(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * If the selection is empty and at the start of a textblock, try to\n * reduce the distance between that block and the one before it—if\n * there's a block directly before it that can be joined, join them.\n * If not, try to move the selected block closer to the next one in\n * the document structure by lifting it out of its parent or moving it\n * into a parent of the previous block. Will use the view for accurate\n * (bidi-aware) start-of-textblock detection if given.\n */\nexport function joinBackward(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n view?: EditorView\n): boolean;\n/**\n * When the selection is empty and at the start of a textblock, select\n * the node before that textblock, if possible. This is intended to be\n * bound to keys like backspace, after\n * [`joinBackward`](#commands.joinBackward) or other deleting\n * commands, as a fall-back behavior when the schema doesn't allow\n * deletion at the selected point.\n */\nexport function selectNodeBackward(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n view?: EditorView\n): boolean;\n/**\n * If the selection is empty and the cursor is at the end of a\n * textblock, try to reduce or remove the boundary between that block\n * and the one after it, either by joining them or by moving the other\n * block closer to this one in the tree structure. Will use the view\n * for accurate start-of-textblock detection if given.\n */\nexport function joinForward(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n view?: EditorView\n): boolean;\n/**\n * When the selection is empty and at the end of a textblock, select\n * the node coming after that textblock, if possible. This is intended\n * to be bound to keys like delete, after\n * [`joinForward`](#commands.joinForward) and similar deleting\n * commands, to provide a fall-back behavior when the schema doesn't\n * allow deletion at the selected point.\n */\nexport function selectNodeForward(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n view?: EditorView\n): boolean;\n/**\n * Join the selected block or, if there is a text selection, the\n * closest ancestor block of the selection that can be joined, with\n * the sibling above it.\n */\nexport function joinUp(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Join the selected block, or the closest ancestor of the selection\n * that can be joined, with the sibling after it.\n */\nexport function joinDown(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Lift the selected block, or the closest ancestor block of the\n * selection that can be lifted, out of its parent node.\n */\nexport function lift(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * If the selection is in a node whose type has a truthy\n * [`code`](#model.NodeSpec.code) property in its spec, replace the\n * selection with a newline character.\n */\nexport function newlineInCode(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * When the selection is in a node with a truthy\n * [`code`](#model.NodeSpec.code) property in its spec, create a\n * default block after the code block, and move the cursor there.\n */\nexport function exitCode(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * If a block node is selected, create an empty paragraph before (if\n * it is its parent's first child) or after it.\n */\nexport function createParagraphNear(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * If the cursor is in an empty textblock that can be lifted, lift the\n * block.\n */\nexport function liftEmptyBlock(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Split the parent block of the selection. If the selection is a text\n * selection, also delete its content.\n */\nexport function splitBlock(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Acts like [`splitBlock`](#commands.splitBlock), but without\n * resetting the set of active marks at the cursor.\n */\nexport function splitBlockKeepMarks(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Move the selection to the node wrapping the current selection, if\n * any. (Will not select the document node.)\n */\nexport function selectParentNode(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Select the whole document.\n */\nexport function selectAll(\n state: EditorState,\n dispatch?: (tr: Transaction) => void\n): boolean;\n/**\n * Wrap the selection in a node of the given type with the given\n * attributes.\n */\nexport function wrapIn(\n nodeType: NodeType,\n attrs?: { [key: string]: any }\n): (state: EditorState, dispatch?: (tr: Transaction) => void) => boolean;\n/**\n * Returns a command that tries to set the textblock around the\n * selection to the given node type with the given attributes.\n */\nexport function setBlockType(\n nodeType: NodeType,\n attrs?: { [key: string]: any }\n): (state: EditorState, dispatch?: (tr: Transaction) => void) => boolean;\n/**\n * Create a command function that toggles the given mark with the\n * given attributes. Will return `false` when the current selection\n * doesn't support that mark. This will remove the mark if any marks\n * of that type exist in the selection, or add it otherwise. If the\n * selection is empty, this applies to the [stored\n * marks](#state.EditorState.storedMarks) instead of a range of the\n * document.\n */\nexport function toggleMark(\n markType: MarkType,\n attrs?: { [key: string]: any }\n): (state: EditorState, dispatch?: (tr: Transaction) => void) => boolean;\n/**\n * Wrap a command so that, when it produces a transform that causes\n * two joinable nodes to end up next to each other, those are joined.\n * Nodes are considered joinable when they are of the same type and\n * when the `isJoinable` predicate returns true for them or, if an\n * array of strings was passed, if their node type name is in that\n * array.\n */\nexport function autoJoin(\n command: (state: EditorState, p1?: (tr: Transaction) => void) => boolean,\n isJoinable: ((before: ProsemirrorNode, after: ProsemirrorNode) => boolean) | string[]\n): (state: EditorState, p1?: (tr: Transaction) => void) => boolean;\n/**\n * Combine a number of command functions into a single function (which\n * calls them one by one until one returns true).\n */\nexport function chainCommands(\n ...commands: Array<\n (p1: EditorState, p2?: (tr: Transaction) => void, p3?: EditorView) => boolean\n >\n): (p1: EditorState, p2?: (tr: Transaction) => void, p3?: EditorView) => boolean;\n/**\n * A basic keymap containing bindings not specific to any schema.\n * Binds the following keys (when multiple commands are listed, they\n * are chained with [`chainCommands`](#commands.chainCommands)):\n *\n * * **Enter** to `newlineInCode`, `createParagraphNear`, `liftEmptyBlock`, `splitBlock`\n * * **Mod-Enter** to `exitCode`\n * * **Backspace** and **Mod-Backspace** to `deleteSelection`, `joinBackward`, `selectNodeBackward`\n * * **Delete** and **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n * * **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n * * **Mod-a** to `selectAll`\n */\nexport let pcBaseKeymap: Keymap;\n/**\n * A copy of `pcBaseKeymap` that also binds **Ctrl-h** like Backspace,\n * **Ctrl-d** like Delete, **Alt-Backspace** like Ctrl-Backspace, and\n * **Ctrl-Alt-Backspace**, **Alt-Delete**, and **Alt-d** like\n * Ctrl-Delete.\n */\nexport let macBaseKeymap: Keymap;\n/**\n * Depending on the detected platform, this will hold\n * [`pcBasekeymap`](#commands.pcBaseKeymap) or\n * [`macBaseKeymap`](#commands.macBaseKeymap).\n */\nexport let baseKeymap: Keymap;\n", + "master:types/prosemirror-keymap/index.d.ts": "// Type definitions for prosemirror-keymap 1.0\n// Project: https://github.com/ProseMirror/prosemirror-keymap\n// Definitions by: Bradley Ayers \n// David Hahn \n// Tim Baumann \n// Patrick Simmelbauer \n// Mike Morearty \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.0\n\nimport { Keymap } from 'prosemirror-commands';\nimport { Schema } from 'prosemirror-model';\nimport { Plugin } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\n/**\n * Create a keymap plugin for the given set of bindings.\n *\n * Bindings should map key names to [command](#commands)-style\n * functions, which will be called with `(EditorState, dispatch,\n * EditorView)` arguments, and should return true when they've handled\n * the key. Note that the view argument isn't part of the command\n * protocol, but can be used as an escape hatch if a binding needs to\n * directly interact with the UI.\n *\n * Key names may be strings like `\"Shift-Ctrl-Enter\"`—a key\n * identifier prefixed with zero or more modifiers. Key identifiers\n * are based on the strings that can appear in\n * [`KeyEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\n * Use lowercase letters to refer to letter keys (or uppercase letters\n * if you want shift to be held). You may use `\"Space\"` as an alias\n * for the `\" \"` name.\n *\n * Modifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or\n * `a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or\n * `Meta-`) are recognized. For characters that are created by holding\n * shift, the `Shift-` prefix is implied, and should not be added\n * explicitly.\n *\n * You can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on\n * other platforms.\n *\n * You can add multiple keymap plugins to an editor. The order in\n * which they appear determines their precedence (the ones early in\n * the array get to dispatch first).\n */\nexport function keymap(bindings: Keymap): Plugin;\n\n/**\n * Given a set of bindings (using the same format as\n * [`keymap`](#keymap.keymap), return a [keydown\n * handler](#view.EditorProps.handleKeyDown) handles them.\n */\nexport function keydownHandler(\n bindings: Keymap,\n): (view: EditorView, event: KeyboardEvent) => boolean;\n", + "6c7735e2b8f39640cb73e40ae04cb6642a8ab2cd:types/prosemirror-keymap/index.d.ts": "// Type definitions for prosemirror-keymap 1.0\n// Project: https://github.com/ProseMirror/prosemirror-keymap\n// Definitions by: Bradley Ayers \n// David Hahn \n// Tim Baumann \n// Patrick Simmelbauer \n// Mike Morearty \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.0\n\nimport { Keymap } from 'prosemirror-commands';\nimport { Schema } from 'prosemirror-model';\nimport { Plugin } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\n/**\n * Create a keymap plugin for the given set of bindings.\n *\n * Bindings should map key names to [command](#commands)-style\n * functions, which will be called with `(EditorState, dispatch,\n * EditorView)` arguments, and should return true when they've handled\n * the key. Note that the view argument isn't part of the command\n * protocol, but can be used as an escape hatch if a binding needs to\n * directly interact with the UI.\n *\n * Key names may be strings like `\"Shift-Ctrl-Enter\"`—a key\n * identifier prefixed with zero or more modifiers. Key identifiers\n * are based on the strings that can appear in\n * [`KeyEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\n * Use lowercase letters to refer to letter keys (or uppercase letters\n * if you want shift to be held). You may use `\"Space\"` as an alias\n * for the `\" \"` name.\n *\n * Modifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or\n * `a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or\n * `Meta-`) are recognized. For characters that are created by holding\n * shift, the `Shift-` prefix is implied, and should not be added\n * explicitly.\n *\n * You can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on\n * other platforms.\n *\n * You can add multiple keymap plugins to an editor. The order in\n * which they appear determines their precedence (the ones early in\n * the array get to dispatch first).\n */\nexport function keymap(bindings: Keymap): Plugin;\n\n/**\n * Given a set of bindings (using the same format as\n * [`keymap`](#keymap.keymap), return a [keydown\n * handler](#view.EditorProps.handleKeyDown) handles them.\n */\nexport function keydownHandler(\n bindings: Keymap,\n): (view: EditorView, event: KeyboardEvent) => boolean;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/45836/_response.json b/packages/mergebot/src/_tests/fixtures/45836/_response.json new file mode 100644 index 0000000000..15cccfd40a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45836/_response.json @@ -0,0 +1,569 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDQzMDQ3Njgy", + "title": "prosemirror-commands: Add types Command and Keymap", + "lastEditedAt": null, + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-07-01T23:08:00Z", + "labels": { + "nodes": [ + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "Edits multiple packages", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Worse", + "__typename": "Label" + }, + { + "name": "Revision needed", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 45836, + "state": "OPEN", + "headRefOid": "6c7735e2b8f39640cb73e40ae04cb6642a8ab2cd", + "changedFiles": 3, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-01T23:08:10Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-01T23:08:10Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "createdAt": "2020-07-01T23:09:38Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-01T23:09:41Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-01T23:11:35Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-01T23:18:16Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-02T10:52:03Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-02T10:52:04Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "createdAt": "2020-07-07T04:57:01Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "createdAt": "2020-07-08T17:47:50Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "createdAt": "2020-07-08T17:50:50Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "createdAt": "2020-07-08T18:10:18Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-07-08T18:13:23Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "commit": { + "oid": "6c7735e2b8f39640cb73e40ae04cb6642a8ab2cd", + "abbreviatedOid": "6c7735e", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "createdAt": "2020-07-01T23:10:27Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-01T23:10:27Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45836#pullrequestreview-441250761", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "timjb", + "__typename": "User" + }, + "commit": { + "oid": "6c7735e2b8f39640cb73e40ae04cb6642a8ab2cd", + "abbreviatedOid": "6c7735e", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "timjb", + "__typename": "User" + }, + "createdAt": "2020-07-02T10:29:47Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "timjb", + "__typename": "User" + }, + "createdAt": "2020-07-02T10:43:59Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "timjb", + "__typename": "User" + }, + "createdAt": "2020-07-02T10:45:30Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "timjb", + "__typename": "User" + }, + "createdAt": "2020-07-02T10:45:56Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-07-02T10:51:55Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45836#pullrequestreview-441551874", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "commit": { + "oid": "6c7735e2b8f39640cb73e40ae04cb6642a8ab2cd", + "abbreviatedOid": "6c7735e", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "createdAt": "2020-07-02T16:31:58Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-02T16:37:37Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45836#pullrequestreview-441853464", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "timjb", + "__typename": "User" + }, + "commit": { + "oid": "6c7735e2b8f39640cb73e40ae04cb6642a8ab2cd", + "abbreviatedOid": "6c7735e", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "timjb", + "__typename": "User" + }, + "createdAt": "2020-07-03T22:30:36Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "timjb", + "__typename": "User" + }, + "createdAt": "2020-07-03T22:30:43Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-07-03T22:31:28Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45836#pullrequestreview-442569775", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/6c7735e2b8f39640cb73e40ae04cb6642a8ab2cd/checks?check_suite_id=866017431", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/6c7735e2b8f39640cb73e40ae04cb6642a8ab2cd/checks?check_suite_id=866017431", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/6c7735e2b8f39640cb73e40ae04cb6642a8ab2cd/checks?check_suite_id=866018153", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/6c7735e2b8f39640cb73e40ae04cb6642a8ab2cd/checks?check_suite_id=866018153", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-01T21:30:35Z", + "committedDate": "2020-07-01T23:00:12Z", + "pushedDate": "2020-07-01T23:06:38Z", + "abbreviatedOid": "6c7735e", + "oid": "6c7735e2b8f39640cb73e40ae04cb6642a8ab2cd", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 10, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY1MjY4ODU2Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mmorearty Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n\n## Code Reviews\n\nBecause this PR edits multiple packages, it can be merged once it's reviewed by a DT maintainer.\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#testing)\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": "2020-07-01T23:08:10Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1MjY4ODU3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @bradleyayers @davidka @timjb @patsimm — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45836/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": "2020-07-01T23:08:10Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1MjY4ODk2Nw==", + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "body": "@timjb you actually suggested something like this in a [comment](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44705#discussion_r426287907) on an earlier PR of mine; I didn't do it at that time, but it turns out that now it would be helpful to me!", + "createdAt": "2020-07-01T23:09:38Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1MjY5MTMwNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n### prosemirror-commands/v*\n\n\n| | master | #45836 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 76.3 | 79.4 | +4.0% |\n| Type count | 12324 | 12350 | 0% |\n| Assignability cache size | 3888 | 3901 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 16 | 40 | +150% |\n| Identifiers in tests | 16 | 40 | +150% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 424.6 | 414.5 | -2.4% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.2% | 14.1% | |\n|     Worst duration (ms) | 562.8 | 645.2 | +14.6% |\n|     Worst identifier | [state](/DefinitelyTyped/DefinitelyTyped/blob/336f38bc44c82cfcd66bd316daa5969609586075/types/prosemirror-commands/prosemirror-commands-tests.ts#L8) | [commands](/DefinitelyTyped/DefinitelyTyped/blob/735afb8a3fd79acb86485cab87d818977be95fb9/types/prosemirror-commands/prosemirror-commands-tests.ts#L10) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 419.4 | 418.4 | -0.2% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.9% | 12.8% | +29.2% |\n|     Worst duration (ms) | 565.4 | 734.4 | **+29.9%** 🔸 |\n|     Worst identifier | [deleteSelection](/DefinitelyTyped/DefinitelyTyped/blob/336f38bc44c82cfcd66bd316daa5969609586075/types/prosemirror-commands/prosemirror-commands-tests.ts#L8) | [deleteSelection](/DefinitelyTyped/DefinitelyTyped/blob/735afb8a3fd79acb86485cab87d818977be95fb9/types/prosemirror-commands/prosemirror-commands-tests.ts#L8) | |\n\n\n\nLooks like there were a couple significant differences—take a look at **worst-case duration for getting quick info at a position** to make sure everything looks ok.\n\n### prosemirror-keymap/v*\n\n\n
\nComparison details for prosemirror-keymap/* 📊\n\n| | master | #45836 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 80.2 | 80.3 | +0.1% |\n| Type count | 12223 | 12395 | +1% |\n| Assignability cache size | 3908 | 3907 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 31 | 31 | 0% |\n| Identifiers in tests | 31 | 31 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 434.9 | 437.5 | +0.6% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 11.8% | 13.5% | |\n|     Worst duration (ms) | 587.3 | 604.0 | +2.8% |\n|     Worst identifier | [tr](/DefinitelyTyped/DefinitelyTyped/blob/336f38bc44c82cfcd66bd316daa5969609586075/types/prosemirror-keymap/prosemirror-keymap-tests.ts#L17) | [tr](/DefinitelyTyped/DefinitelyTyped/blob/735afb8a3fd79acb86485cab87d818977be95fb9/types/prosemirror-keymap/prosemirror-keymap-tests.ts#L17) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 489.8 | 481.1 | -1.8% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 13.6% | 13.8% | +1.7% |\n|     Worst duration (ms) | 591.7 | 606.4 | +2.5% |\n|     Worst identifier | [keymap](/DefinitelyTyped/DefinitelyTyped/blob/336f38bc44c82cfcd66bd316daa5969609586075/types/prosemirror-keymap/prosemirror-keymap-tests.ts#L4) | [dispatch](/DefinitelyTyped/DefinitelyTyped/blob/735afb8a3fd79acb86485cab87d818977be95fb9/types/prosemirror-keymap/prosemirror-keymap-tests.ts#L6) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-07-01T23:18:16Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1MjkzNTU1OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mmorearty One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-07-02T10:52:04Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NDU5OTc5Mw==", + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "body": "@RyanCavanaugh does the typescript-bot need a nudge? This PR has been approved.", + "createdAt": "2020-07-07T04:57:01Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTU1OTExNA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mmorearty Everything looks good here. Great job! I am ready to merge this PR (at 6c7735e) on your behalf.\nIf you'd like that to happen, please post a comment with the exact text\n\n> Ready to merge\n\nand I'll merge it the next time I look at this PR.\n", + "createdAt": "2020-04-30T01:31:41Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NTY2NDE5NA==", + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "body": "Ready to merge", + "createdAt": "2020-07-08T17:47:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NTY2NTc3NQ==", + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "body": "Argh, how do I get this PR un-stuck? It still has a \"Revision needed\" label.", + "createdAt": "2020-07-08T17:50:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NTY3NDkwOA==", + "author": { + "login": "mmorearty", + "__typename": "User" + }, + "body": "Regarding this PR being stuck, Ryan Cavanaugh [says](https://twitter.com/SeaRyanC/status/1280924907921010688): \"Thanks for the ping; I've passed this on to the engineers working on the DT automation this week\"", + "createdAt": "2020-07-08T18:10:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NTY3NjM1Mg==", + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "body": "(If anyone sees this, please don't merge, so I can catch the bug...)", + "createdAt": "2020-07-08T18:13:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/prosemirror-commands/index.d.ts", + "additions": 17, + "deletions": 4, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/prosemirror-commands/prosemirror-commands-tests.ts", + "additions": 10, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/prosemirror-keymap/index.d.ts", + "additions": 7, + "deletions": 16, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 3 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDExMTI5NzY=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/45836/derived.json b/packages/mergebot/src/_tests/fixtures/45836/derived.json new file mode 100644 index 0000000000..f841fb13fd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45836/derived.json @@ -0,0 +1,74 @@ +{ + "type": "info", + "now": "2020-07-08T18:57:14.868Z", + "pr_number": 45836, + "author": "mmorearty", + "headCommitOid": "6c7735e2b8f39640cb73e40ae04cb6642a8ab2cd", + "mergeBaseOid": "master", + "lastPushDate": "2020-07-01T23:06:38.000Z", + "lastActivityDate": "2020-07-08T18:13:23.000Z", + "mergeOfferDate": "2020-04-30T01:31:41.000Z", + "mergeRequestDate": "2020-07-08T17:47:50.000Z", + "mergeRequestUser": "mmorearty", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "prosemirror-commands", + "kind": "edit", + "files": [ + { + "path": "types/prosemirror-commands/index.d.ts", + "kind": "definition" + }, + { + "path": "types/prosemirror-commands/prosemirror-commands-tests.ts", + "kind": "test" + } + ], + "owners": [ + "bradleyayers", + "davidka", + "timjb", + "patsimm" + ], + "addedOwners": [ + "mmorearty" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + }, + { + "name": "prosemirror-keymap", + "kind": "edit", + "files": [ + { + "path": "types/prosemirror-keymap/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "bradleyayers", + "davidka", + "timjb", + "patsimm", + "mmorearty" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "timjb", + "date": "2020-07-03T22:31:28.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/45836/mutations.json b/packages/mergebot/src/_tests/fixtures/45836/mutations.json new file mode 100644 index 0000000000..eb80f4c55e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45836/mutations.json @@ -0,0 +1,60 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY1MjY4ODU2Nw==", + "body": "@mmorearty Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `prosemirror-commands` — [on npm](https://www.npmjs.com/package/prosemirror-commands), [on unpkg](https://unpkg.com/browse/prosemirror-commands@latest/)\n - owner-approval: @timjb\n - 1 added owner: ✎@mmorearty\n* `prosemirror-keymap` — [on npm](https://www.npmjs.com/package/prosemirror-keymap), [on unpkg](https://unpkg.com/browse/prosemirror-keymap@latest/) (author is owner)\n - owner-approval: @timjb\n\n@mmorearty: I see that you have added yourself as an owner, are you sure you want to [become an owner](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-definition-owners)?\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=45836&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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyNDk1OTc2ODI5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDQzMDQ3Njgy" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwzOTU2NzkwNTk=", + "MDU6TGFiZWw3OTg3Mzc0Nzg=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDQzMDQ3Njgy" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNDExMTI5NzY=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy" + } + } + }, + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDYyMTU1OTExNA==" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDQzMDQ3Njgy", + "body": ":passport_control: Hi @mmorearty,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-???) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/45836/result.json b/packages/mergebot/src/_tests/fixtures/45836/result.json new file mode 100644 index 0000000000..cd4b05f259 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45836/result.json @@ -0,0 +1,21 @@ +{ + "projectColumn": "Needs Maintainer Review", + "labels": [ + "Owner Approved", + "Edits Owners", + "Edits multiple packages" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@mmorearty Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `prosemirror-commands` — [on npm](https://www.npmjs.com/package/prosemirror-commands), [on unpkg](https://unpkg.com/browse/prosemirror-commands@latest/)\n - owner-approval: @timjb\n - 1 added owner: ✎@mmorearty\n* `prosemirror-keymap` — [on npm](https://www.npmjs.com/package/prosemirror-keymap), [on unpkg](https://unpkg.com/browse/prosemirror-keymap@latest/) (author is owner)\n - owner-approval: @timjb\n\n@mmorearty: I see that you have added yourself as an owner, are you sure you want to [become an owner](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-definition-owners)?\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=45836&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 ..." + }, + { + "tag": "wait-for-merge-offer-6c7735e", + "status": ":passport_control: Hi @mmorearty,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-???) are green. I will let you know once that happens.\n\nThanks, and happy typing!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/45884/_downloads.json b/packages/mergebot/src/_tests/fixtures/45884/_downloads.json new file mode 100644 index 0000000000..e679fcd5b2 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45884/_downloads.json @@ -0,0 +1,3 @@ +{ + "cytoscape": 45065 +} diff --git a/packages/mergebot/src/_tests/fixtures/45884/_files.json b/packages/mergebot/src/_tests/fixtures/45884/_files.json new file mode 100644 index 0000000000..84819c5a0e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45884/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/cytoscape/index.d.ts": "// Type definitions for Cytoscape.js 3.14\n// Project: http://js.cytoscape.org/\n// Definitions by: Fabian Schmidt and Fred Eisele \n// Shenghan Gao \n// Yuri Pereira Constante \n// Jan-Niclas Struewer \n// Cerberuser \n// Andrej Kirejeŭ \n// Peter Ferrarotto \n// Xavier Ho \n// Jongsu Liam Kim \n// Fredrik Sandström \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n//\n// Translation from Objects in help to Typescript interface.\n// http://js.cytoscape.org/#notation/functions\n// TypeScript Version: 2.3\n\n", + "1dcf44a05908783324ca99231837267af495cdb7:types/cytoscape/index.d.ts": "// Type definitions for Cytoscape.js 3.14\n// Project: http://js.cytoscape.org/\n// Definitions by: Fabian Schmidt and Fred Eisele \n// Shenghan Gao \n// Yuri Pereira Constante \n// Jan-Niclas Struewer \n// Cerberuser \n// Andrej Kirejeŭ \n// Peter Ferrarotto \n// Xavier Ho \n// Jongsu Liam Kim \n// Fredrik Sandström \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n//\n// Translation from Objects in help to Typescript interface.\n// http://js.cytoscape.org/#notation/functions\n// TypeScript Version: 2.3\n\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/45884/_response.json b/packages/mergebot/src/_tests/fixtures/45884/_response.json new file mode 100644 index 0000000000..83cb0c9375 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45884/_response.json @@ -0,0 +1,302 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDQ0MjU3Njg2", + "title": "@types/cytoscape fix spelling issue to match docs", + "lastEditedAt": null, + "author": { + "login": "sgratzl", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-07-04T08:37:07Z", + "labels": { + "nodes": [ + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 45884, + "state": "OPEN", + "headRefOid": "1dcf44a05908783324ca99231837267af495cdb7", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-04T08:37:19Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-04T08:37:20Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-07-04T08:40:23Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-04T08:40:30Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-04T10:01:02Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-07-06T06:50:47Z", + "projectColumnName": "Waiting for Code Reviews" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-06T06:51:09Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-06T06:51:10Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "Veckodag", + "__typename": "User" + }, + "commit": { + "oid": "1dcf44a05908783324ca99231837267af495cdb7", + "abbreviatedOid": "1dcf44a", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-07-04T11:08:20Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45884#pullrequestreview-442603601", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/1dcf44a05908783324ca99231837267af495cdb7/checks?check_suite_id=875331974", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/1dcf44a05908783324ca99231837267af495cdb7/checks?check_suite_id=875331974", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/1dcf44a05908783324ca99231837267af495cdb7/checks?check_suite_id=875332235", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/1dcf44a05908783324ca99231837267af495cdb7/checks?check_suite_id=875332235", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-04T08:32:35Z", + "committedDate": "2020-07-04T08:32:35Z", + "pushedDate": "2020-07-04T08:33:11Z", + "abbreviatedOid": "1dcf44a", + "oid": "1dcf44a05908783324ca99231837267af495cdb7", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY1MzczOTM2NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@sgratzl 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 which I will keep updated.***\n\n This PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Have you considered [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#testing) 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\n## Code Reviews\n\nThis PR can be merged once it's reviewed by a DT maintainer.\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#testing)\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": "2020-07-04T08:37:19Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1MzczOTM2Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @phreed @wy193777 @ypconstante @janniclas @cerberuser @gsbelarus @peterjferrarotto @spaxe @appleparan @Veckodag — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45884/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": "2020-07-04T08:37:20Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1MzczOTY0NQ==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## cytoscape ([unpkg](https://unpkg.com/browse/cytoscape@latest/))\nwas missing the following properties:\n1. version\n1. stylesheet\n1. Stylesheet\n

\n Generated by :no_entry_sign: dangerJS against 1dcf44a05908783324ca99231837267af495cdb7\n

\n", + "createdAt": "2020-07-04T08:40:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1Mzc0NjY2Mw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #45884 | diff |\n| ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 77.2 | 78.2 | +1.4% |\n| Type count | 14517 | 14517 | 0% |\n| Assignability cache size | 4338 | 4338 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 1187 | 1187 | 0% |\n| Identifiers in tests | 1187 | 1187 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 404.6 | 403.2 | -0.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.5% | 10.2% | |\n|     Worst duration (ms) | 627.8 | 694.9 | +10.7% |\n|     Worst identifier | [oneOf](/DefinitelyTyped/DefinitelyTyped/blob/ea4f80ee1f4ed746993322e3cf7aad23ccd9b70e/types/cytoscape/cytoscape-tests.ts#L364) | [intersection](/DefinitelyTyped/DefinitelyTyped/blob/316d1e0296ba8f7ad59f67f2cf05449d97406f5e/types/cytoscape/cytoscape-tests.ts#L573) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 400.3 | 398.3 | -0.5% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.7% | 10.4% | -2.9% |\n|     Worst duration (ms) | 678.1 | 620.5 | -8.5% |\n|     Worst identifier | [center](/DefinitelyTyped/DefinitelyTyped/blob/ea4f80ee1f4ed746993322e3cf7aad23ccd9b70e/types/cytoscape/cytoscape-tests.ts#L168) | [gh](/DefinitelyTyped/DefinitelyTyped/blob/316d1e0296ba8f7ad59f67f2cf05449d97406f5e/types/cytoscape/cytoscape-tests.ts#L168) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-07-04T10:01:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NDA0ODc4NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@sgratzl Everything looks good here. Great job! I am ready to merge this PR (at 1dcf44a) on your behalf.\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", + "createdAt": "2020-07-06T06:51:10Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/cytoscape/index.d.ts", + "additions": 2, + "deletions": 2, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 1 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDEyNTM4NTk=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz", + "name": "Waiting for Author to Merge", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/45884/derived.json b/packages/mergebot/src/_tests/fixtures/45884/derived.json new file mode 100644 index 0000000000..a8f148d019 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45884/derived.json @@ -0,0 +1,53 @@ +{ + "type": "info", + "now": "2020-07-06T06:52:24.860Z", + "pr_number": 45884, + "author": "sgratzl", + "headCommitOid": "1dcf44a05908783324ca99231837267af495cdb7", + "mergeBaseOid": "master", + "lastPushDate": "2020-07-04T08:33:11.000Z", + "lastActivityDate": "2020-07-06T06:50:47.000Z", + "maintainerBlessed": "Waiting for Code Reviews", + "mergeOfferDate": "2020-07-06T06:51:10.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "cytoscape", + "kind": "edit", + "files": [ + { + "path": "types/cytoscape/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "phreed", + "wy193777", + "ypconstante", + "janniclas", + "cerberuser", + "gsbelarus", + "peterjferrarotto", + "spaxe", + "appleparan", + "Veckodag" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "Veckodag", + "date": "2020-07-04T11:08:20.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/45884/mutations.json b/packages/mergebot/src/_tests/fixtures/45884/mutations.json new file mode 100644 index 0000000000..4c8cfe49bb --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45884/mutations.json @@ -0,0 +1,29 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY1MzczOTM2NQ==", + "body": "@sgratzl 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* `cytoscape` — [on npm](https://www.npmjs.com/package/cytoscape), [on unpkg](https://unpkg.com/browse/cytoscape@latest/)\n - owner-approval: @Veckodag\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=45884&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: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDQ0MjU3Njg2", + "body": "Hey @sgratzl,\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" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY1NDA0ODc4NQ==", + "body": "@sgratzl: Everything looks good here. I am ready to merge this PR (at 1dcf44a) 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(@phreed, @wy193777, @ypconstante, @janniclas, @cerberuser, @gsbelarus, @peterjferrarotto, @spaxe, @appleparan, @Veckodag: you can do this too.)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/45884/result.json b/packages/mergebot/src/_tests/fixtures/45884/result.json new file mode 100644 index 0000000000..9c2a1ab9f1 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45884/result.json @@ -0,0 +1,25 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Owner Approved", + "Untested Change", + "Self Merge" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @sgratzl,\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": "@sgratzl 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* `cytoscape` — [on npm](https://www.npmjs.com/package/cytoscape), [on unpkg](https://unpkg.com/browse/cytoscape@latest/)\n - owner-approval: @Veckodag\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=45884&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": "@sgratzl: Everything looks good here. I am ready to merge this PR (at 1dcf44a) 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(@phreed, @wy193777, @ypconstante, @janniclas, @cerberuser, @gsbelarus, @peterjferrarotto, @spaxe, @appleparan, @Veckodag: you can do this too.)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/45888/_downloads.json b/packages/mergebot/src/_tests/fixtures/45888/_downloads.json new file mode 100644 index 0000000000..2305ebfd9f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45888/_downloads.json @@ -0,0 +1,3 @@ +{ + "mailgun-js": 95401 +} diff --git a/packages/mergebot/src/_tests/fixtures/45888/_files.json b/packages/mergebot/src/_tests/fixtures/45888/_files.json new file mode 100644 index 0000000000..0e3b6ebe39 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45888/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/mailgun-js/index.d.ts": "// Type definitions for mailgun-js 0.22\n// Project: https://github.com/bojand/mailgun-js\n// Definitions by: Sampson Oliver \n// Andi Pätzold \n// Jiri Balcar \n// Ryan Leonard \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// \n\nimport * as FormData from 'form-data';\n", + "8a7a2fc1cdbfe1d3a7af7d1f7a346977fdf47b0d:types/mailgun-js/index.d.ts": "// Type definitions for mailgun-js 0.22\n// Project: https://github.com/bojand/mailgun-js\n// Definitions by: Sampson Oliver \n// Andi Pätzold \n// Jiri Balcar \n// Ryan Leonard \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// \n\nimport * as FormData from 'form-data';\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/45888/_response.json b/packages/mergebot/src/_tests/fixtures/45888/_response.json new file mode 100644 index 0000000000..551a30d460 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45888/_response.json @@ -0,0 +1,254 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDQ0MzEyMzk1", + "title": "[@types/mailgun-js] Fix mailgun-js type to add multiple data to mailing list", + "lastEditedAt": null, + "author": { + "login": "gstvds", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-07-04T18:01:56Z", + "labels": { + "nodes": [ + { + "name": "Other Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 45888, + "state": "OPEN", + "headRefOid": "8a7a2fc1cdbfe1d3a7af7d1f7a346977fdf47b0d", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-04T18:02:02Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-04T18:02:03Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-04T18:15:07Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-07-06T07:40:21Z", + "projectColumnName": "Waiting for Code Reviews" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "brendonhc", + "__typename": "User" + }, + "commit": { + "oid": "8a7a2fc1cdbfe1d3a7af7d1f7a346977fdf47b0d", + "abbreviatedOid": "8a7a2fc", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "NONE", + "state": "APPROVED", + "submittedAt": "2020-07-06T05:28:20Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45888#pullrequestreview-442782389", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-04T17:51:34Z", + "committedDate": "2020-07-04T17:51:34Z", + "pushedDate": "2020-07-04T17:53:17Z", + "abbreviatedOid": "75d5c0e", + "oid": "75d5c0e7dee57ec5c573324f1cfac069767efe2e", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/8a7a2fc1cdbfe1d3a7af7d1f7a346977fdf47b0d/checks?check_suite_id=876148666", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/8a7a2fc1cdbfe1d3a7af7d1f7a346977fdf47b0d/checks?check_suite_id=876148666", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/8a7a2fc1cdbfe1d3a7af7d1f7a346977fdf47b0d/checks?check_suite_id=876148938", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/8a7a2fc1cdbfe1d3a7af7d1f7a346977fdf47b0d/checks?check_suite_id=876148938", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-04T17:56:40Z", + "committedDate": "2020-07-04T17:56:40Z", + "pushedDate": "2020-07-04T18:01:47Z", + "abbreviatedOid": "8a7a2fc", + "oid": "8a7a2fc1cdbfe1d3a7af7d1f7a346977fdf47b0d", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY1Mzc5NDgzNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@gstvds 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 which I will keep updated.***\n\n This PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Have you considered [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#testing) 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\n## Code Reviews\n\nThis PR can be merged once it's reviewed by a DT maintainer.\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#testing)\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": "2020-07-04T18:02:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1Mzc5NDgzOA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @sampsonjoliver @andipaetzold @JiriBalcar @CodeLenny — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45888/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": "2020-07-04T18:02:03Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1Mzc5NjE3Mw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #45888 | diff |\n| ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 71.3 | 66.5 | -6.7% |\n| Type count | 9134 | 9136 | 0% |\n| Assignability cache size | 1688 | 1688 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 160 | 160 | 0% |\n| Identifiers in tests | 160 | 160 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 316.0 | 314.3 | -0.6% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 11.7% | 11.4% | |\n|     Worst duration (ms) | 446.2 | 464.4 | +4.1% |\n|     Worst identifier | [mailgunFactory](/DefinitelyTyped/DefinitelyTyped/blob/6ad660e1150359101d490638998c0250a2ba9d68/types/mailgun-js/mailgun-js-tests.ts#L16) | [mailbox_verification](/DefinitelyTyped/DefinitelyTyped/blob/81115cffba9ebf8da9821af75b24d5c2e3021cfc/types/mailgun-js/mailgun-js-tests.ts#L100) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 315.4 | 311.1 | -1.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 11.6% | 10.5% | -9.9% |\n|     Worst duration (ms) | 462.5 | 388.5 | -16.0% |\n|     Worst identifier | [LoggerHttpOptions](/DefinitelyTyped/DefinitelyTyped/blob/6ad660e1150359101d490638998c0250a2ba9d68/types/mailgun-js/mailgun-js-tests.ts#L16) | [apiKey](/DefinitelyTyped/DefinitelyTyped/blob/81115cffba9ebf8da9821af75b24d5c2e3021cfc/types/mailgun-js/mailgun-js-tests.ts#L12) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-07-04T18:15:07Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/mailgun-js/index.d.ts", + "additions": 10, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 1 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDEyNjY1MTY=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/45888/derived.json b/packages/mergebot/src/_tests/fixtures/45888/derived.json new file mode 100644 index 0000000000..a10017bb08 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45888/derived.json @@ -0,0 +1,46 @@ +{ + "type": "info", + "now": "2020-07-06T07:40:37.670Z", + "pr_number": 45888, + "author": "gstvds", + "headCommitOid": "8a7a2fc1cdbfe1d3a7af7d1f7a346977fdf47b0d", + "mergeBaseOid": "master", + "lastPushDate": "2020-07-04T18:01:47.000Z", + "lastActivityDate": "2020-07-06T07:40:21.000Z", + "maintainerBlessed": "Waiting for Code Reviews", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "mailgun-js", + "kind": "edit", + "files": [ + { + "path": "types/mailgun-js/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "sampsonjoliver", + "andipaetzold", + "JiriBalcar", + "CodeLenny" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "brendonhc", + "date": "2020-07-06T05:28:20.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/45888/mutations.json b/packages/mergebot/src/_tests/fixtures/45888/mutations.json new file mode 100644 index 0000000000..fef1a8a33e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45888/mutations.json @@ -0,0 +1,20 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY1Mzc5NDgzNw==", + "body": "@gstvds 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* `mailgun-js` — [on npm](https://www.npmjs.com/package/mailgun-js), [on unpkg](https://unpkg.com/browse/mailgun-js@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=45888&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\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" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDQ0MzEyMzk1", + "body": "Hey @gstvds,\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/45888/result.json b/packages/mergebot/src/_tests/fixtures/45888/result.json new file mode 100644 index 0000000000..9c6430d1f1 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45888/result.json @@ -0,0 +1,24 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Other Approved", + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @gstvds,\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": "@gstvds 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* `mailgun-js` — [on npm](https://www.npmjs.com/package/mailgun-js), [on unpkg](https://unpkg.com/browse/mailgun-js@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=45888&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\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", + "status": "🔔 @sampsonjoliver @andipaetzold @JiriBalcar @CodeLenny — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45888/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/45890/_downloads.json b/packages/mergebot/src/_tests/fixtures/45890/_downloads.json new file mode 100644 index 0000000000..8b22c8d0ae --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45890/_downloads.json @@ -0,0 +1,3 @@ +{ + "greek-utils": 0 +} diff --git a/packages/mergebot/src/_tests/fixtures/45890/_files.json b/packages/mergebot/src/_tests/fixtures/45890/_files.json new file mode 100644 index 0000000000..94427941db --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45890/_files.json @@ -0,0 +1,3 @@ +{ + "146c312eac4c4ac8931b4ec6b2762457f8f4b6e6:types/greek-utils/index.d.ts": "// Type definitions for greek-utils 1.2\n// Project: https://github.com/vbarzokas/greek-utils\n// Definitions by: Dimitris Kirtsios \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\nexport function sanitizeDiacritics(text: string, ignore?: string): string;" +} diff --git a/packages/mergebot/src/_tests/fixtures/45890/_response.json b/packages/mergebot/src/_tests/fixtures/45890/_response.json new file mode 100644 index 0000000000..8da57b4e24 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45890/_response.json @@ -0,0 +1,384 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDQ0MzI2NjIy", + "title": "Add types for greek-utils npm library", + "lastEditedAt": null, + "author": { + "login": "dimkirt", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-07-04T20:47:30Z", + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + }, + { + "name": "Other Approved", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 45890, + "state": "OPEN", + "headRefOid": "146c312eac4c4ac8931b4ec6b2762457f8f4b6e6", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-04T20:47:40Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-04T20:50:54Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-04T20:51:59Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-04T22:04:04Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-04T22:05:15Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-04T22:05:17Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "5e68faddf0ceb4330f611112d5e0a36428c24168", + "abbreviatedOid": "5e68fad", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "createdAt": "2020-07-04T21:51:00Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-04T21:51:00Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45890#pullrequestreview-442633134", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "5e68faddf0ceb4330f611112d5e0a36428c24168", + "abbreviatedOid": "5e68fad", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-04T21:56:36Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45890#pullrequestreview-442633330", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "dimkirt", + "__typename": "User" + }, + "commit": { + "oid": "146c312eac4c4ac8931b4ec6b2762457f8f4b6e6", + "abbreviatedOid": "146c312", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "dimkirt", + "__typename": "User" + }, + "createdAt": "2020-07-04T22:04:02Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "NONE", + "state": "COMMENTED", + "submittedAt": "2020-07-04T22:04:02Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45890#pullrequestreview-442633525", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "146c312eac4c4ac8931b4ec6b2762457f8f4b6e6", + "abbreviatedOid": "146c312", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-07-05T08:20:29Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45890#pullrequestreview-442657013", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/5e68faddf0ceb4330f611112d5e0a36428c24168/checks?check_suite_id=876382296", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/5e68faddf0ceb4330f611112d5e0a36428c24168/checks?check_suite_id=876382296", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/5e68faddf0ceb4330f611112d5e0a36428c24168/checks?check_suite_id=876382489", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/5e68faddf0ceb4330f611112d5e0a36428c24168/checks?check_suite_id=876382489", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-01T21:10:02Z", + "committedDate": "2020-07-04T20:45:31Z", + "pushedDate": "2020-07-04T20:45:45Z", + "abbreviatedOid": "5e68fad", + "oid": "5e68faddf0ceb4330f611112d5e0a36428c24168", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/146c312eac4c4ac8931b4ec6b2762457f8f4b6e6/checks?check_suite_id=876479180", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/146c312eac4c4ac8931b4ec6b2762457f8f4b6e6/checks?check_suite_id=876479180", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/146c312eac4c4ac8931b4ec6b2762457f8f4b6e6/checks?check_suite_id=876479921", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/146c312eac4c4ac8931b4ec6b2762457f8f4b6e6/checks?check_suite_id=876479921", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-04T22:01:59Z", + "committedDate": "2020-07-04T22:01:59Z", + "pushedDate": "2020-07-04T22:02:07Z", + "abbreviatedOid": "146c312", + "oid": "146c312eac4c4ac8931b4ec6b2762457f8f4b6e6", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY1MzgxMDQ1NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@dimkirt 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 which I will keep updated.***\n\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n- [greek-utils on npm](https://www.npmjs.com/package/greek-utils)\n- [greek-utils on unpkg](https://unpkg.com/browse/greek-utils@latest//)\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ Only a DT maintainer can approve changes when there are new packages added\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": "2020-07-04T20:47:40Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1MzgxMDg5Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\nThese typings are for a package that doesn’t yet exist on master, so I don’t have anything to compare against yet! In the future, I’ll be able to compare PRs to greek-utils with its source on master.\n\n\n
\nComparison details 📊\n\n| **Batch compilation** | |\n| ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |\n| Type count | 1256 |\n| Assignability cache size | 84 |\n| | |\n| **Language service measurements** | |\n| Samples taken | 11 |\n| Identifiers in tests | 11 |\n| **`getCompletionsAtPosition`** | |\n|     Mean duration (ms) | 60.1 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 28.4% |\n|     Worst duration (ms) | 83.9 |\n|     Worst identifier | [greekUtils](/DefinitelyTyped/DefinitelyTyped/blob/c45aa7c6b6fca84b2c0150411bc6a1ac9491f6f2/types/greek-utils/greek-utils-tests.ts#L7) |\n| **`getQuickInfoAtPosition`** | |\n|     Mean duration (ms) | 56.5 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 22.1% |\n|     Worst duration (ms) | 67.1 |\n|     Worst identifier | [greekUtils](/DefinitelyTyped/DefinitelyTyped/blob/c45aa7c6b6fca84b2c0150411bc6a1ac9491f6f2/types/greek-utils/greek-utils-tests.ts#L1) |\n| | |\n| **System information** | |\n| Node version | v12.18.1 |\n| CPU count | 2 |\n| CPU speed | 2.394 GHz |\n| CPU model | Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz |\n| CPU Architecture | x64 |\n| Memory | 6.8 GiB |\n| Platform | linux |\n| Release | 4.15.0-1089-azure |\n\n\n
\n", + "createdAt": "2020-07-04T20:51:59Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1MzgxNzQ0OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@peterblazejewicz Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-07-04T22:05:17Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/greek-utils/greek-utils-tests.ts", + "additions": 7, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/greek-utils/index.d.ts", + "additions": 14, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/greek-utils/tsconfig.json", + "additions": 19, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/greek-utils/tslint.json", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDEyNzAzNzE=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy", + "name": "Needs Maintainer Review", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/45890/derived.json b/packages/mergebot/src/_tests/fixtures/45890/derived.json new file mode 100644 index 0000000000..a2560edc3d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45890/derived.json @@ -0,0 +1,55 @@ +{ + "type": "info", + "now": "2020-07-06T08:21:55.751Z", + "pr_number": 45890, + "author": "dimkirt", + "headCommitOid": "146c312eac4c4ac8931b4ec6b2762457f8f4b6e6", + "mergeBaseOid": "master", + "lastPushDate": "2020-07-04T22:02:07.000Z", + "lastActivityDate": "2020-07-05T08:20:29.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "greek-utils", + "kind": "add", + "files": [ + { + "path": "types/greek-utils/greek-utils-tests.ts", + "kind": "test" + }, + { + "path": "types/greek-utils/index.d.ts", + "kind": "definition" + }, + { + "path": "types/greek-utils/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/greek-utils/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [ + "dimkirt" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "peterblazejewicz", + "date": "2020-07-05T08:20:29.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/45890/mutations.json b/packages/mergebot/src/_tests/fixtures/45890/mutations.json new file mode 100644 index 0000000000..d5a867d951 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45890/mutations.json @@ -0,0 +1,40 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY1MzgxMDQ1NA==", + "body": "@dimkirt 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* `greek-utils` (*new!*) — [on npm](https://www.npmjs.com/package/greek-utils), [on unpkg](https://unpkg.com/browse/greek-utils@latest/)\n - 1 added owner: ✎@dimkirt\n - Config files to check:\n - [`greek-utils/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45890/files/146c312eac4c4ac8931b4ec6b2762457f8f4b6e6#diff-1beeab429f4237a976a64069a8a9b4eee96b609637784407d8975647ca13c8a5): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=45890&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 when there are new packages added\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDQ0MzI2NjIy" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNDEyNzAzNzE=", + "columnId": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDQ0MzI2NjIy", + "body": "🔔 @dimkirt — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45890/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/45890/result.json b/packages/mergebot/src/_tests/fixtures/45890/result.json new file mode 100644 index 0000000000..eeea2d981e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45890/result.json @@ -0,0 +1,21 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "Other Approved", + "New Definition", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@dimkirt 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* `greek-utils` (*new!*) — [on npm](https://www.npmjs.com/package/greek-utils), [on unpkg](https://unpkg.com/browse/greek-utils@latest/)\n - 1 added owner: ✎@dimkirt\n - Config files to check:\n - [`greek-utils/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45890/files/146c312eac4c4ac8931b4ec6b2762457f8f4b6e6#diff-1beeab429f4237a976a64069a8a9b4eee96b609637784407d8975647ca13c8a5): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=45890&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 when there are new packages added\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", + "status": "🔔 @dimkirt — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45890/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/45946/_downloads.json b/packages/mergebot/src/_tests/fixtures/45946/_downloads.json new file mode 100644 index 0000000000..465f99130a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45946/_downloads.json @@ -0,0 +1,3 @@ +{ + "asynciterator": 1614 +} diff --git a/packages/mergebot/src/_tests/fixtures/45946/_files.json b/packages/mergebot/src/_tests/fixtures/45946/_files.json new file mode 100644 index 0000000000..f119035fe1 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45946/_files.json @@ -0,0 +1,3 @@ +{ + "master:types/asynciterator/index.d.ts": "// Type definitions for asynciterator 1.1\n// Project: https://github.com/rubenverborgh/AsyncIterator#readme\n// Definitions by: Ruben Taelman \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.4\n\n/// \n\nimport { EventEmitter } from \"events\";\n\nexport abstract class AsyncIterator implements EventEmitter {\n static STATES: ['INIT', 'OPEN', 'CLOSING', 'CLOSED', 'ENDED'];\n static INIT: 0;\n static OPEN: 1;\n static CLOSING: 2;\n static CLOSED: 3;\n static ENDED: 4;\n\n _state: number;\n _readable: boolean;\n _destination?: AsyncIterator;\n\n readable: boolean;\n closed: boolean;\n ended: boolean;\n\n constructor();\n\n read(): T;\n each(callback: (data: T) => void, self?: any): void;\n close(): void;\n\n _changeState(newState: number, eventAsync?: boolean): void;\n private _hasListeners(eventName: string | symbol): boolean;\n // tslint:disable-next-line ban-types\n private _addSingleListener(eventName: string | symbol, listener: Function): void;\n _end(): void;\n\n getProperty(propertyName: string, callback?: (value: any) => void): any;\n setProperty(propertyName: string, value: any): void;\n getProperties(): {[id: string]: any};\n setProperties(properties: {[id: string]: any}): void;\n copyProperties(source: AsyncIterator, propertyNames: string[]): void;\n\n toString(): string;\n _toStringDetails(): string;\n\n transform(options?: SimpleTransformIteratorOptions): SimpleTransformIterator;\n map(mapper: (item: T) => T2, self?: object): SimpleTransformIterator;\n filter(filter: (item: T) => boolean, self?: object): SimpleTransformIterator;\n prepend(items: T[]): SimpleTransformIterator;\n append(items: T[]): SimpleTransformIterator;\n surround(prepend: T[], append: T[]): SimpleTransformIterator;\n skip(offset: number): SimpleTransformIterator;\n take(limit: number): SimpleTransformIterator;\n range(start: number, end: number): SimpleTransformIterator;\n clone(): ClonedIterator;\n\n static range(start?: number, end?: number, step?: number): IntegerIterator;\n\n // From EventEmitter\n addListener(event: string | symbol, listener: (...args: any[]) => void): this;\n on(event: string | symbol, listener: (...args: any[]) => void): this;\n once(event: string | symbol, listener: (...args: any[]) => void): this;\n removeListener(event: string | symbol, listener: (...args: any[]) => void): this;\n off(event: string | symbol, listener: (...args: any[]) => void): this;\n removeAllListeners(event?: string | symbol): this;\n setMaxListeners(n: number): this;\n getMaxListeners(): number;\n listeners(event: string | symbol): Array<() => void>;\n rawListeners(event: string | symbol): Array<() => void>;\n emit(event: string | symbol, ...args: any[]): boolean;\n listenerCount(type: string | symbol): number;\n // Added in Node 6...\n prependListener(event: string | symbol, listener: (...args: any[]) => void): this;\n prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;\n eventNames(): Array;\n\n static wrap(source?: AsyncIterator | TransformIteratorOptions | NodeJS.ReadableStream, options?: TransformIteratorOptions): TransformIterator;\n}\n\nexport class EmptyIterator extends AsyncIterator {\n _state: 4;\n}\n\nexport class SingletonIterator extends AsyncIterator {\n constructor(item?: T);\n}\n\nexport class ArrayIterator extends AsyncIterator {\n constructor(items?: T[]);\n}\n\nexport interface IntegerIteratorOptions {\n step?: number;\n end?: number;\n start?: number;\n}\n\nexport class IntegerIterator extends AsyncIterator {\n _step: number;\n _last: number;\n _next: number;\n\n constructor(options?: IntegerIteratorOptions);\n}\n\nexport interface BufferedIteratorOptions {\n maxBufferSize?: number;\n autoStart?: boolean;\n}\n\nexport class BufferedIterator extends AsyncIterator {\n maxBufferSize: number;\n _pushedCount: number;\n _buffer: T[];\n\n _init(autoStart: boolean): void;\n _begin(done: () => void): void;\n _read(count: number, done: () => void): void;\n _push(item: T): void;\n _fillBuffer(): void;\n _completeClose(): void;\n _flush(done: () => void): void;\n\n constructor(options?: BufferedIteratorOptions);\n}\n\nexport interface TransformIteratorOptions extends BufferedIteratorOptions {\n optional?: boolean;\n source?: AsyncIterator;\n}\n\nexport class TransformIterator extends BufferedIterator {\n _optional: boolean;\n source: AsyncIterator;\n\n _validateSource(source: AsyncIterator, allowDestination?: boolean): void;\n _transform(item: S, done: (result?: T) => void): void;\n _closeWhenDone(): void;\n\n constructor(source?: AsyncIterator | TransformIteratorOptions, options?: TransformIteratorOptions);\n}\n\nexport interface SimpleTransformIteratorOptions extends TransformIteratorOptions {\n offset?: number;\n limit?: number;\n prepend?: T[];\n append?: T[];\n\n filter?(item: S): boolean;\n map?(item: S): T;\n transform?(item: S, callback: (result?: T) => void): void;\n}\n\nexport class SimpleTransformIterator extends TransformIterator {\n _offset: number;\n _limit: number;\n _prepender?: ArrayIterator;\n _appender?: ArrayIterator;\n\n _filter?(item: S): boolean;\n _map?(item: S): T;\n _transform(item: S, done: (result?: T) => void): void;\n\n _insert(inserter: AsyncIterator, done: () => void): void;\n\n constructor(source?: AsyncIterator | SimpleTransformIteratorOptions,\n options?: SimpleTransformIteratorOptions);\n}\n\nexport class MultiTransformIterator extends TransformIterator {\n _transformerQueue: S[];\n\n _createTransformer(element: S): AsyncIterator;\n\n constructor(source?: AsyncIterator | TransformIteratorOptions, options?: TransformIteratorOptions);\n}\n\nexport class ClonedIterator extends TransformIterator {\n _readPosition: number;\n\n constructor(source?: AsyncIterator);\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/45946/_response.json b/packages/mergebot/src/_tests/fixtures/45946/_response.json new file mode 100644 index 0000000000..2d1568b8d0 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45946/_response.json @@ -0,0 +1,226 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDQ2MDIxMjkw", + "title": "Remove asynciterator typings", + "lastEditedAt": null, + "author": { + "login": "rubensworks", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-07-08T06:32:44Z", + "labels": { + "nodes": [ + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "Edits Infrastructure", + "__typename": "Label" + }, + { + "name": "No Other Owners", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 45946, + "state": "OPEN", + "headRefOid": "a5eb1f19e7a31387e7d7c79b3acc483b0e60b32e", + "changedFiles": 5, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-08T06:32:48Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-08T06:35:53Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-08T06:36:01Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "rubensworks", + "__typename": "User" + }, + "createdAt": "2020-07-10T14:00:47Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/a5eb1f19e7a31387e7d7c79b3acc483b0e60b32e/checks?check_suite_id=889438421", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/a5eb1f19e7a31387e7d7c79b3acc483b0e60b32e/checks?check_suite_id=889438421", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/a5eb1f19e7a31387e7d7c79b3acc483b0e60b32e/checks?check_suite_id=889439029", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/a5eb1f19e7a31387e7d7c79b3acc483b0e60b32e/checks?check_suite_id=889439029", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-08T06:31:02Z", + "committedDate": "2020-07-08T06:31:02Z", + "pushedDate": "2020-07-08T06:31:29Z", + "abbreviatedOid": "a5eb1f1", + "oid": "a5eb1f19e7a31387e7d7c79b3acc483b0e60b32e", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 2, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NTMxNzQwNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@rubensworks Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n This PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ A DT maintainer can merge changes when there are no other reviewers\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": "2020-07-08T06:32:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjY5MjIxMA==", + "author": { + "login": "rubensworks", + "__typename": "User" + }, + "body": "@joachimvh Could you review this PR?", + "createdAt": "2020-07-10T14:00:47Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "notNeededPackages.json", + "additions": 6, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/asynciterator/asynciterator-tests.ts", + "additions": 0, + "deletions": 147, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/asynciterator/index.d.ts", + "additions": 0, + "deletions": 184, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/asynciterator/tsconfig.json", + "additions": 0, + "deletions": 23, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/asynciterator/tslint.json", + "additions": 0, + "deletions": 18, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 5 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDE0NzQyMjY=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy", + "name": "Needs Maintainer Review", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/45946/derived.json b/packages/mergebot/src/_tests/fixtures/45946/derived.json new file mode 100644 index 0000000000..d1f186efba --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45946/derived.json @@ -0,0 +1,63 @@ +{ + "type": "info", + "now": "2020-07-11T01:46:16.667Z", + "pr_number": 45946, + "author": "rubensworks", + "headCommitOid": "a5eb1f19e7a31387e7d7c79b3acc483b0e60b32e", + "mergeBaseOid": "master", + "lastPushDate": "2020-07-08T06:31:29.000Z", + "lastActivityDate": "2020-07-10T14:00:47.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": null, + "kind": "edit", + "files": [ + { + "path": "notNeededPackages.json", + "kind": "infrastructure" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical", + "isSafeInfrastructureEdit": false + }, + { + "name": "asynciterator", + "kind": "delete", + "files": [ + { + "path": "types/asynciterator/asynciterator-tests.ts", + "kind": "test" + }, + { + "path": "types/asynciterator/index.d.ts", + "kind": "definition" + }, + { + "path": "types/asynciterator/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/asynciterator/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [ + "rubensworks" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/45946/mutations.json b/packages/mergebot/src/_tests/fixtures/45946/mutations.json new file mode 100644 index 0000000000..bfe5685c49 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45946/mutations.json @@ -0,0 +1,51 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY1NTMxNzQwNQ==", + "body": "@rubensworks Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and infra files)\n\n* `asynciterator` (*probably deleted!*) — [on npm](https://www.npmjs.com/package/asynciterator), [on unpkg](https://unpkg.com/browse/asynciterator@latest/) (author is owner)\n - Config files to check:\n - [`asynciterator/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45946/files/a5eb1f19e7a31387e7d7c79b3acc483b0e60b32e#diff-e3a26c4ba64c5ed587d2b797151728488e274f4be74c1558722a8a32cf7a31c9): edited\n* Infra files\n - [`notNeededPackages.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45946/files/a5eb1f19e7a31387e7d7c79b3acc483b0e60b32e#diff-a275c2eae7b8f788a52327e76809026ee1bc5ea614393806c8f3cbab07202621)\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=45946&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 DT infrastructure ([`notNeededPackages.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45946/files/a5eb1f19e7a31387e7d7c79b3acc483b0e60b32e#diff-a275c2eae7b8f788a52327e76809026ee1bc5ea614393806c8f3cbab07202621))\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDQ2MDIxMjkw" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw3OTg3Mzc0Nzg=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDQ2MDIxMjkw" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNDE0NzQyMjY=", + "columnId": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDQ2MDIxMjkw", + "body": "🔔 @rubensworks — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45946/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/45946/result.json b/packages/mergebot/src/_tests/fixtures/45946/result.json new file mode 100644 index 0000000000..6cf25f0fcd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45946/result.json @@ -0,0 +1,21 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "Edits Infrastructure", + "No Other Owners", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@rubensworks Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and infra files)\n\n* `asynciterator` (*probably deleted!*) — [on npm](https://www.npmjs.com/package/asynciterator), [on unpkg](https://unpkg.com/browse/asynciterator@latest/) (author is owner)\n - Config files to check:\n - [`asynciterator/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45946/files/a5eb1f19e7a31387e7d7c79b3acc483b0e60b32e#diff-e3a26c4ba64c5ed587d2b797151728488e274f4be74c1558722a8a32cf7a31c9): edited\n* Infra files\n - [`notNeededPackages.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45946/files/a5eb1f19e7a31387e7d7c79b3acc483b0e60b32e#diff-a275c2eae7b8f788a52327e76809026ee1bc5ea614393806c8f3cbab07202621)\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=45946&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 DT infrastructure ([`notNeededPackages.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45946/files/a5eb1f19e7a31387e7d7c79b3acc483b0e60b32e#diff-a275c2eae7b8f788a52327e76809026ee1bc5ea614393806c8f3cbab07202621))\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", + "status": "🔔 @rubensworks — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45946/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/45982/_downloads.json b/packages/mergebot/src/_tests/fixtures/45982/_downloads.json new file mode 100644 index 0000000000..0b99167978 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45982/_downloads.json @@ -0,0 +1,3 @@ +{ + "arcgis-js-api": 32357 +} diff --git a/packages/mergebot/src/_tests/fixtures/45982/_files.json b/packages/mergebot/src/_tests/fixtures/45982/_files.json new file mode 100644 index 0000000000..ea81fae208 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45982/_files.json @@ -0,0 +1,3 @@ +{ + "master:types/arcgis-js-api/index.d.ts": "" +} diff --git a/packages/mergebot/src/_tests/fixtures/45982/_response.json b/packages/mergebot/src/_tests/fixtures/45982/_response.json new file mode 100644 index 0000000000..dd53450dde --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45982/_response.json @@ -0,0 +1,287 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDQ3MDM5ODI4", + "title": "[arcgis-js-api] Update for version 3.33", + "lastEditedAt": null, + "author": { + "login": "dasa", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-07-09T19:02:55Z", + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + }, + { + "name": "Other Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 45982, + "state": "OPEN", + "headRefOid": "95c1b7b945a751cb9a8d17ebc4a83b2d12fd4386", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-09T19:02:59Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-09T19:03:00Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-09T19:06:21Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-09T19:11:16Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T00:21:29Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T04:08:12Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T04:17:25Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T18:54:47Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "bsvensson", + "__typename": "User" + }, + "commit": { + "oid": "95c1b7b945a751cb9a8d17ebc4a83b2d12fd4386", + "abbreviatedOid": "95c1b7b", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "NONE", + "state": "APPROVED", + "submittedAt": "2020-07-09T20:20:44Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45982#pullrequestreview-445940155", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/95c1b7b945a751cb9a8d17ebc4a83b2d12fd4386/checks?check_suite_id=897334088", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/95c1b7b945a751cb9a8d17ebc4a83b2d12fd4386/checks?check_suite_id=897334088", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/95c1b7b945a751cb9a8d17ebc4a83b2d12fd4386/checks?check_suite_id=897335079", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/95c1b7b945a751cb9a8d17ebc4a83b2d12fd4386/checks?check_suite_id=897335079", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-09T18:48:57Z", + "committedDate": "2020-07-09T18:48:57Z", + "pushedDate": "2020-07-09T18:54:34Z", + "abbreviatedOid": "95c1b7b", + "oid": "95c1b7b945a751cb9a8d17ebc4a83b2d12fd4386", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 4, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjI5ODI5Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@dasa Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n This PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Have you considered [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#testing) 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\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n- [arcgis-js-api on npm](https://www.npmjs.com/package/arcgis-js-api)\n- [arcgis-js-api on unpkg](https://unpkg.com/browse/arcgis-js-api@latest//)\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ Only a DT maintainer can approve changes when there are new packages added\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": "2020-07-09T19:02:59Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjI5ODMwNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @Esri @bsvensson - please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45982/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": "2020-07-09T19:03:00Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjMwMTg0OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #45982 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 123.9 | 123.8 | -0.1% |\n| Type count | 19595 | 19595 | 0% |\n| Assignability cache size | 5917 | 5917 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 25 | 25 | 0% |\n| Identifiers in tests | 25 | 25 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 979.8 | 970.9 | -0.9% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 6.5% | 5.7% | |\n|     Worst duration (ms) | 1131.6 | 1075.5 | -5.0% |\n|     Worst identifier | [zoom](/DefinitelyTyped/DefinitelyTyped/blob/ef5026e98ddd9625371722672a27a6299eff63be/types/arcgis-js-api/arcgis-js-api-tests.ts#L25) | [zoom](/DefinitelyTyped/DefinitelyTyped/blob/35ab48d2365350ab3bfb67ac0a1ac06449589939/types/arcgis-js-api/arcgis-js-api-tests.ts#L25) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 982.6 | 978.7 | -0.4% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 6.0% | 6.1% | +2.4% |\n|     Worst duration (ms) | 1078.9 | 1052.5 | -2.4% |\n|     Worst identifier | [map](/DefinitelyTyped/DefinitelyTyped/blob/ef5026e98ddd9625371722672a27a6299eff63be/types/arcgis-js-api/arcgis-js-api-tests.ts#L24) | [container](/DefinitelyTyped/DefinitelyTyped/blob/35ab48d2365350ab3bfb67ac0a1ac06449589939/types/arcgis-js-api/arcgis-js-api-tests.ts#L23) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-07-09T19:11:16Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NzExMTU5OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @dasa — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45982/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2020-07-11T18:54:47Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/arcgis-js-api/v3/index.d.ts", + "additions": 3, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 1 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDE1OTMyNzc=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2", + "name": "Needs Maintainer Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/45982/derived.json b/packages/mergebot/src/_tests/fixtures/45982/derived.json new file mode 100644 index 0000000000..20a00805cd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45982/derived.json @@ -0,0 +1,6 @@ +{ + "type": "error", + "now": "2020-07-11T20:41:49.000Z", + "message": "error parsing owners: At 1:1 in master:types/arcgis-js-api/index.d.ts: Expected /\\/\\/ Type definitions for (non-npm package )?/", + "author": "dasa" +} diff --git a/packages/mergebot/src/_tests/fixtures/45982/mutations.json b/packages/mergebot/src/_tests/fixtures/45982/mutations.json new file mode 100644 index 0000000000..c3872b888c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45982/mutations.json @@ -0,0 +1,44 @@ +[ + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTk3MzU2OTA1" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDQ3MDM5ODI4" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2NDY3ODg4ODg=", + "MDU6TGFiZWw1ODYxNzcwNjM=", + "MDU6TGFiZWwyMTU0NzUwNDcz" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDQ3MDM5ODI4" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNDE1OTMyNzc=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDQ3MDM5ODI4", + "body": "@dasa — There was an error that prevented me from properly processing this PR:\n\n error parsing owners: At 1:1 in master:types/arcgis-js-api/index.d.ts: Expected /\\/\\/ Type definitions for (non-npm package )?/\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/45982/result.json b/packages/mergebot/src/_tests/fixtures/45982/result.json new file mode 100644 index 0000000000..a49f632ea8 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45982/result.json @@ -0,0 +1,15 @@ +{ + "projectColumn": "Other", + "labels": [ + "Mergebot Error" + ], + "responseComments": [ + { + "tag": "had-error", + "status": "@dasa — There was an error that prevented me from properly processing this PR:\n\n error parsing owners: At 1:1 in master:types/arcgis-js-api/index.d.ts: Expected /\\/\\/ Type definitions for (non-npm package )?/" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/45999/_downloads.json b/packages/mergebot/src/_tests/fixtures/45999/_downloads.json new file mode 100644 index 0000000000..7819081399 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45999/_downloads.json @@ -0,0 +1,3 @@ +{ + "react": 26120073 +} diff --git a/packages/mergebot/src/_tests/fixtures/45999/_files.json b/packages/mergebot/src/_tests/fixtures/45999/_files.json new file mode 100644 index 0000000000..fc140a64ec --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45999/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/react/index.d.ts": "// Type definitions for React 16.9\n// Project: http://facebook.github.io/react/\n// Definitions by: Asana \n// AssureSign \n// Microsoft \n// John Reilly \n// Benoit Benezech \n// Patricio Zavolinsky \n// Digiguru \n// Eric Anderson \n// Dovydas Navickas \n// Josh Rutherford \n// Guilherme Hübner \n// Ferdy Budhidharma \n// Johann Rakotoharisoa \n// Olivier Pascal \n// Martin Hochel \n// Frank Li \n// Jessica Franco \n// Saransh Kataria \n// Kanitkorn Sujautra \n// Sebastian Silbermann \n// Kyle Scully \n// Cong Zhang \n// Dimitri Mitropoulos \n// JongChan Choi \n// Victor Magalhães \n// Dale Tan \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\n// NOTE: Users of the `experimental` builds of React should add a reference\n// to 'react/experimental' in their project. See experimental.d.ts's top comment\n// for reference and documentation on how exactly to do it.\n\n/// \n\nimport * as CSS from 'csstype';\nimport * as PropTypes from 'prop-types';\n\ntype NativeAnimationEvent = AnimationEvent;\ntype NativeClipboardEvent = ClipboardEvent;\ntype NativeCompositionEvent = CompositionEvent;\ntype NativeDragEvent = DragEvent;\ntype NativeFocusEvent = FocusEvent;\ntype NativeKeyboardEvent = KeyboardEvent;\ntype NativeMouseEvent = MouseEvent;\ntype NativeTouchEvent = TouchEvent;\ntype NativePointerEvent = PointerEvent;\ntype NativeTransitionEvent = TransitionEvent;\ntype NativeUIEvent = UIEvent;\ntype NativeWheelEvent = WheelEvent;\ntype Booleanish = boolean | 'true' | 'false';\n\n/**\n * defined in scheduler/tracing\n */\ninterface SchedulerInteraction {\n id: number;\n name: string;\n timestamp: number;\n}\n\n// tslint:disable-next-line:export-just-namespace\nexport = React;\nexport as namespace React;\n\ndeclare namespace React {\n //\n // React Elements\n // ----------------------------------------------------------------------\n\n type ElementType

=\n {\n [K in keyof JSX.IntrinsicElements]: P extends JSX.IntrinsicElements[K] ? K : never\n }[keyof JSX.IntrinsicElements] |\n ComponentType

;\n /**\n * @deprecated Please use `ElementType`\n */\n type ReactType

= ElementType

;\n type ComponentType

= ComponentClass

| FunctionComponent

;\n\n type JSXElementConstructor

=\n | ((props: P) => ReactElement | null)\n | (new (props: P) => Component);\n\n interface RefObject {\n readonly current: T | null;\n }\n type RefCallback = { bivarianceHack(instance: T | null): void }[\"bivarianceHack\"];\n type Ref = RefCallback | RefObject | null;\n type LegacyRef = string | Ref;\n /**\n * Gets the instance type for a React element. The instance will be different for various component types:\n *\n * - React class components will be the class instance. So if you had `class Foo extends React.Component<{}> {}`\n * and used `React.ElementRef` then the type would be the instance of `Foo`.\n * - React stateless functional components do not have a backing instance and so `React.ElementRef`\n * (when `Bar` is `function Bar() {}`) will give you the `undefined` type.\n * - JSX intrinsics like `div` will give you their DOM instance. For `React.ElementRef<'div'>` that would be\n * `HTMLDivElement`. For `React.ElementRef<'input'>` that would be `HTMLInputElement`.\n * - React stateless functional components that forward a `ref` will give you the `ElementRef` of the forwarded\n * to component.\n *\n * `C` must be the type _of_ a React component so you need to use typeof as in React.ElementRef.\n *\n * @todo In Flow, this works a little different with forwarded refs and the `AbstractComponent` that\n * `React.forwardRef()` returns.\n */\n type ElementRef<\n C extends\n | ForwardRefExoticComponent\n | { new (props: any): Component }\n | ((props: any, context?: any) => ReactElement | null)\n | keyof JSX.IntrinsicElements\n > =\n // need to check first if `ref` is a valid prop for ts@3.0\n // otherwise it will infer `{}` instead of `never`\n \"ref\" extends keyof ComponentPropsWithRef\n ? NonNullable[\"ref\"]> extends Ref<\n infer Instance\n >\n ? Instance\n : never\n : never;\n\n type ComponentState = any;\n\n type Key = string | number;\n\n /**\n * @internal You shouldn't need to use this type since you never see these attributes\n * inside your component or have to validate them.\n */\n interface Attributes {\n key?: Key;\n }\n interface RefAttributes extends Attributes {\n ref?: Ref;\n }\n interface ClassAttributes extends Attributes {\n ref?: LegacyRef;\n }\n\n interface ReactElement

= string | JSXElementConstructor> {\n type: T;\n props: P;\n key: Key | null;\n }\n\n interface ReactComponentElement<\n T extends keyof JSX.IntrinsicElements | JSXElementConstructor,\n P = Pick, Exclude, 'key' | 'ref'>>\n > extends ReactElement> { }\n\n /**\n * @deprecated Please use `FunctionComponentElement`\n */\n type SFCElement

= FunctionComponentElement

;\n\n interface FunctionComponentElement

extends ReactElement> {\n ref?: 'ref' extends keyof P ? P extends { ref?: infer R } ? R : never : never;\n }\n\n type CElement> = ComponentElement;\n interface ComponentElement> extends ReactElement> {\n ref?: LegacyRef;\n }\n\n type ClassicElement

= CElement>;\n\n // string fallback for custom web-components\n interface DOMElement

| SVGAttributes, T extends Element> extends ReactElement {\n ref: LegacyRef;\n }\n\n // ReactHTML for ReactHTMLElement\n // tslint:disable-next-line:no-empty-interface\n interface ReactHTMLElement extends DetailedReactHTMLElement, T> { }\n\n interface DetailedReactHTMLElement

, T extends HTMLElement> extends DOMElement {\n type: keyof ReactHTML;\n }\n\n // ReactSVG for ReactSVGElement\n interface ReactSVGElement extends DOMElement, SVGElement> {\n type: keyof ReactSVG;\n }\n\n interface ReactPortal extends ReactElement {\n key: Key | null;\n children: ReactNode;\n }\n\n //\n // Factories\n // ----------------------------------------------------------------------\n\n type Factory

= (props?: Attributes & P, ...children: ReactNode[]) => ReactElement

;\n\n /**\n * @deprecated Please use `FunctionComponentFactory`\n */\n type SFCFactory

= FunctionComponentFactory

;\n\n type FunctionComponentFactory

= (props?: Attributes & P, ...children: ReactNode[]) => FunctionComponentElement

;\n\n type ComponentFactory> =\n (props?: ClassAttributes & P, ...children: ReactNode[]) => CElement;\n\n type CFactory> = ComponentFactory;\n type ClassicFactory

= CFactory>;\n\n type DOMFactory

, T extends Element> =\n (props?: ClassAttributes & P | null, ...children: ReactNode[]) => DOMElement;\n\n // tslint:disable-next-line:no-empty-interface\n interface HTMLFactory extends DetailedHTMLFactory, T> {}\n\n interface DetailedHTMLFactory

, T extends HTMLElement> extends DOMFactory {\n (props?: ClassAttributes & P | null, ...children: ReactNode[]): DetailedReactHTMLElement;\n }\n\n interface SVGFactory extends DOMFactory, SVGElement> {\n (props?: ClassAttributes & SVGAttributes | null, ...children: ReactNode[]): ReactSVGElement;\n }\n\n //\n // React Nodes\n // http://facebook.github.io/react/docs/glossary.html\n // ----------------------------------------------------------------------\n\n type ReactText = string | number;\n type ReactChild = ReactElement | ReactText;\n\n interface ReactNodeArray extends Array {}\n type ReactFragment = {} | ReactNodeArray;\n type ReactNode = ReactChild | ReactFragment | ReactPortal | boolean | null | undefined;\n\n //\n // Top Level API\n // ----------------------------------------------------------------------\n\n // DOM Elements\n function createFactory(\n type: keyof ReactHTML): HTMLFactory;\n function createFactory(\n ", + "381a2a9d17d14e111f7d002c866debfcac6724e8:types/react/index.d.ts": "// Type definitions for React 16.9\n// Project: http://facebook.github.io/react/\n// Definitions by: Asana \n// AssureSign \n// Microsoft \n// John Reilly \n// Benoit Benezech \n// Patricio Zavolinsky \n// Digiguru \n// Eric Anderson \n// Dovydas Navickas \n// Josh Rutherford \n// Guilherme Hübner \n// Ferdy Budhidharma \n// Johann Rakotoharisoa \n// Olivier Pascal \n// Martin Hochel \n// Frank Li \n// Jessica Franco \n// Saransh Kataria \n// Kanitkorn Sujautra \n// Sebastian Silbermann \n// Kyle Scully \n// Cong Zhang \n// Dimitri Mitropoulos \n// JongChan Choi \n// Victor Magalhães \n// Dale Tan \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\n// NOTE: Users of the `experimental` builds of React should add a reference\n// to 'react/experimental' in their project. See experimental.d.ts's top comment\n// for reference and documentation on how exactly to do it.\n\n/// \n\nimport * as CSS from 'csstype';\nimport * as PropTypes from 'prop-types';\n\ntype NativeAnimationEvent = AnimationEvent;\ntype NativeClipboardEvent = ClipboardEvent;\ntype NativeCompositionEvent = CompositionEvent;\ntype NativeDragEvent = DragEvent;\ntype NativeFocusEvent = FocusEvent;\ntype NativeKeyboardEvent = KeyboardEvent;\ntype NativeMouseEvent = MouseEvent;\ntype NativeTouchEvent = TouchEvent;\ntype NativePointerEvent = PointerEvent;\ntype NativeTransitionEvent = TransitionEvent;\ntype NativeUIEvent = UIEvent;\ntype NativeWheelEvent = WheelEvent;\ntype Booleanish = boolean | 'true' | 'false';\n\n/**\n * defined in scheduler/tracing\n */\ninterface SchedulerInteraction {\n id: number;\n name: string;\n timestamp: number;\n}\n\n// tslint:disable-next-line:export-just-namespace\nexport = React;\nexport as namespace React;\n\ndeclare namespace React {\n //\n // React Elements\n // ----------------------------------------------------------------------\n\n type ElementType

=\n {\n [K in keyof JSX.IntrinsicElements]: P extends JSX.IntrinsicElements[K] ? K : never\n }[keyof JSX.IntrinsicElements] |\n ComponentType

;\n /**\n * @deprecated Please use `ElementType`\n */\n type ReactType

= ElementType

;\n type ComponentType

= ComponentClass

| FunctionComponent

;\n\n type JSXElementConstructor

=\n | ((props: P) => ReactElement | null)\n | (new (props: P) => Component);\n\n interface RefObject {\n readonly current: T | null;\n }\n type RefCallback = { bivarianceHack(instance: T | null): void }[\"bivarianceHack\"];\n type Ref = RefCallback | RefObject | null;\n type LegacyRef = string | Ref;\n /**\n * Gets the instance type for a React element. The instance will be different for various component types:\n *\n * - React class components will be the class instance. So if you had `class Foo extends React.Component<{}> {}`\n * and used `React.ElementRef` then the type would be the instance of `Foo`.\n * - React stateless functional components do not have a backing instance and so `React.ElementRef`\n * (when `Bar` is `function Bar() {}`) will give you the `undefined` type.\n * - JSX intrinsics like `div` will give you their DOM instance. For `React.ElementRef<'div'>` that would be\n * `HTMLDivElement`. For `React.ElementRef<'input'>` that would be `HTMLInputElement`.\n * - React stateless functional components that forward a `ref` will give you the `ElementRef` of the forwarded\n * to component.\n *\n * `C` must be the type _of_ a React component so you need to use typeof as in React.ElementRef.\n *\n * @todo In Flow, this works a little different with forwarded refs and the `AbstractComponent` that\n * `React.forwardRef()` returns.\n */\n type ElementRef<\n C extends\n | ForwardRefExoticComponent\n | { new (props: any): Component }\n | ((props: any, context?: any) => ReactElement | null)\n | keyof JSX.IntrinsicElements\n > =\n // need to check first if `ref` is a valid prop for ts@3.0\n // otherwise it will infer `{}` instead of `never`\n \"ref\" extends keyof ComponentPropsWithRef\n ? NonNullable[\"ref\"]> extends Ref<\n infer Instance\n >\n ? Instance\n : never\n : never;\n\n type ComponentState = any;\n\n type Key = string | number;\n\n /**\n * @internal You shouldn't need to use this type since you never see these attributes\n * inside your component or have to validate them.\n */\n interface Attributes {\n key?: Key;\n }\n interface RefAttributes extends Attributes {\n ref?: Ref;\n }\n interface ClassAttributes extends Attributes {\n ref?: LegacyRef;\n }\n\n interface ReactElement

= string | JSXElementConstructor> {\n type: T;\n props: P;\n key: Key | null;\n }\n\n interface ReactComponentElement<\n T extends keyof JSX.IntrinsicElements | JSXElementConstructor,\n P = Pick, Exclude, 'key' | 'ref'>>\n > extends ReactElement> { }\n\n /**\n * @deprecated Please use `FunctionComponentElement`\n */\n type SFCElement

= FunctionComponentElement

;\n\n interface FunctionComponentElement

extends ReactElement> {\n ref?: 'ref' extends keyof P ? P extends { ref?: infer R } ? R : never : never;\n }\n\n type CElement> = ComponentElement;\n interface ComponentElement> extends ReactElement> {\n ref?: LegacyRef;\n }\n\n type ClassicElement

= CElement>;\n\n // string fallback for custom web-components\n interface DOMElement

| SVGAttributes, T extends Element> extends ReactElement {\n ref: LegacyRef;\n }\n\n // ReactHTML for ReactHTMLElement\n // tslint:disable-next-line:no-empty-interface\n interface ReactHTMLElement extends DetailedReactHTMLElement, T> { }\n\n interface DetailedReactHTMLElement

, T extends HTMLElement> extends DOMElement {\n type: keyof ReactHTML;\n }\n\n // ReactSVG for ReactSVGElement\n interface ReactSVGElement extends DOMElement, SVGElement> {\n type: keyof ReactSVG;\n }\n\n interface ReactPortal extends ReactElement {\n key: Key | null;\n children: ReactNode;\n }\n\n //\n // Factories\n // ----------------------------------------------------------------------\n\n type Factory

= (props?: Attributes & P, ...children: ReactNode[]) => ReactElement

;\n\n /**\n * @deprecated Please use `FunctionComponentFactory`\n */\n type SFCFactory

= FunctionComponentFactory

;\n\n type FunctionComponentFactory

= (props?: Attributes & P, ...children: ReactNode[]) => FunctionComponentElement

;\n\n type ComponentFactory> =\n (props?: ClassAttributes & P, ...children: ReactNode[]) => CElement;\n\n type CFactory> = ComponentFactory;\n type ClassicFactory

= CFactory>;\n\n type DOMFactory

, T extends Element> =\n (props?: ClassAttributes & P | null, ...children: ReactNode[]) => DOMElement;\n\n // tslint:disable-next-line:no-empty-interface\n interface HTMLFactory extends DetailedHTMLFactory, T> {}\n\n interface DetailedHTMLFactory

, T extends HTMLElement> extends DOMFactory {\n (props?: ClassAttributes & P | null, ...children: ReactNode[]): DetailedReactHTMLElement;\n }\n\n interface SVGFactory extends DOMFactory, SVGElement> {\n (props?: ClassAttributes & SVGAttributes | null, ...children: ReactNode[]): ReactSVGElement;\n }\n\n //\n // React Nodes\n // http://facebook.github.io/react/docs/glossary.html\n // ----------------------------------------------------------------------\n\n type ReactText = string | number;\n type ReactChild = ReactElement | ReactText;\n\n interface ReactNodeArray extends Array {}\n type ReactFragment = {} | ReactNodeArray;\n type ReactNode = ReactChild | ReactFragment | ReactPortal | boolean | null | undefined;\n\n //\n // Top Level API\n // ----------------------------------------------------------------------\n\n // DOM Elements\n function createFactory(\n type: keyof ReactHTML): HTMLFactory;\n function createFactory(\n " +} diff --git a/packages/mergebot/src/_tests/fixtures/45999/_response.json b/packages/mergebot/src/_tests/fixtures/45999/_response.json new file mode 100644 index 0000000000..dc9c2adb2f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45999/_response.json @@ -0,0 +1,517 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDQ3Mzc2MjE3", + "title": "React: add onToggle handler to

", + "lastEditedAt": "2020-07-10T11:06:28Z", + "author": { + "login": "alexpyzhianov", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-07-10T11:04:16Z", + "labels": { + "nodes": [ + { + "name": "Critical package", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 45999, + "state": "OPEN", + "headRefOid": "381a2a9d17d14e111f7d002c866debfcac6724e8", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T11:04:20Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T11:04:21Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T11:06:30Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T11:31:03Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T12:05:37Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T12:05:38Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-07-10T13:31:42Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T13:31:45Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T13:31:49Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T13:31:50Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "alexpyzhianov", + "__typename": "User" + }, + "createdAt": "2020-07-10T14:38:56Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T15:19:12Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-07-11T02:36:41Z", + "projectColumnName": "Waiting for Code Reviews" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "eps1lon", + "__typename": "User" + }, + "commit": { + "oid": "eb1953061a80c40db273a1e72b29afa11602c696", + "abbreviatedOid": "eb19530", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "eps1lon", + "__typename": "User" + }, + "createdAt": "2020-07-10T12:05:31Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-07-10T12:05:34Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45999#pullrequestreview-446347144", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "alexpyzhianov", + "__typename": "User" + }, + "commit": { + "oid": "eb1953061a80c40db273a1e72b29afa11602c696", + "abbreviatedOid": "eb19530", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "alexpyzhianov", + "__typename": "User" + }, + "createdAt": "2020-07-10T13:10:14Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-10T13:10:14Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45999#pullrequestreview-446387266", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "eps1lon", + "__typename": "User" + }, + "commit": { + "oid": "381a2a9d17d14e111f7d002c866debfcac6724e8", + "abbreviatedOid": "381a2a9", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-07-10T13:34:29Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45999#pullrequestreview-446405252", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ferdaber", + "__typename": "User" + }, + "commit": { + "oid": "381a2a9d17d14e111f7d002c866debfcac6724e8", + "abbreviatedOid": "381a2a9", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-10T13:36:12Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45999#pullrequestreview-446406587", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "ferdaber", + "__typename": "User" + }, + "commit": { + "oid": "381a2a9d17d14e111f7d002c866debfcac6724e8", + "abbreviatedOid": "381a2a9", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-07-10T14:49:32Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45999#pullrequestreview-446464665", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/eb1953061a80c40db273a1e72b29afa11602c696/checks?check_suite_id=900044785", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/eb1953061a80c40db273a1e72b29afa11602c696/checks?check_suite_id=900044785", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/eb1953061a80c40db273a1e72b29afa11602c696/checks?check_suite_id=900045381", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/eb1953061a80c40db273a1e72b29afa11602c696/checks?check_suite_id=900045381", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-10T10:34:52Z", + "committedDate": "2020-07-10T10:34:52Z", + "pushedDate": "2020-07-10T10:35:39Z", + "abbreviatedOid": "eb19530", + "oid": "eb1953061a80c40db273a1e72b29afa11602c696", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/381a2a9d17d14e111f7d002c866debfcac6724e8/checks?check_suite_id=900478339", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/381a2a9d17d14e111f7d002c866debfcac6724e8/checks?check_suite_id=900478339", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/381a2a9d17d14e111f7d002c866debfcac6724e8/checks?check_suite_id=900478995", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/381a2a9d17d14e111f7d002c866debfcac6724e8/checks?check_suite_id=900478995", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-10T13:10:47Z", + "committedDate": "2020-07-10T13:10:47Z", + "pushedDate": "2020-07-10T13:10:49Z", + "abbreviatedOid": "381a2a9", + "oid": "381a2a9d17d14e111f7d002c866debfcac6724e8", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 7, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjYxODM0MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexpyzhianov Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ Most recent commit is approved by DT maintainers\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": "2020-07-10T11:04:20Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjYxODM0Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @johnnyreilly @bbenezech @pzavolinsky @digiguru @ericanderson @DovydasNavickas @theruther4d @guilhermehubner @ferdaber @jrakotoharisoa @pascaloliv @hotell @franklixuefei @Jessidhia @saranshkataria @lukyth @eps1lon @zieka @dancerphil @dimitropoulos @disjukr @vhfmag @hellatan — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/45999/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": "2020-07-10T11:04:21Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjY0MDg3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@alexpyzhianov One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-07-10T12:05:38Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjY3ODMzOQ==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## plotly.js ([unpkg](https://unpkg.com/browse/plotly.js@latest/))\nwas missing the following properties:\n1. version\n1. register\n1. Icons\n1. Fx\n1. Snapshot\n\n
\nas well as these 2 other properties...\n

PlotSchema, Queue

\n
\n\n

\n Generated by :no_entry_sign: dangerJS against 381a2a9d17d14e111f7d002c866debfcac6724e8\n

\n", + "createdAt": "2020-07-10T13:31:42Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjY3ODQxMQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@eps1lon Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-07-10T13:31:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjcxMDU4Ng==", + "author": { + "login": "alexpyzhianov", + "__typename": "User" + }, + "body": "@ferdaber Looks like it doesn't bubble https://developer.mozilla.org/en-US/docs/Web/API/HTMLDetailsElement/toggle_event", + "createdAt": "2020-07-10T14:38:56Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "ferdaber", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjczMDY0Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #45999 | diff |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 128.0 | 128.3 | +0.2% |\n| Type count | 33117 | 33135 | 0% |\n| Assignability cache size | 8402 | 8431 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 2252 | 2252 | 0% |\n| Identifiers in tests | 2787 | 2790 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 352.5 | 353.5 | +0.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 6.8% | 6.9% | |\n|     Worst duration (ms) | 1166.6 | 1151.4 | -1.3% |\n|     Worst identifier | [props](/DefinitelyTyped/DefinitelyTyped/blob/81d729425ed360e0851448b81b783cdc6a5d891d/types/react/test/tsx.tsx#L233) | [x](/DefinitelyTyped/DefinitelyTyped/blob/52bb40c4dffa5fd5d8b8e925698f4b91ae50a654/types/react/test/tsx.tsx#L233) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 351.4 | 352.1 | +0.2% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 7.1% | 7.1% | -0.5% |\n|     Worst duration (ms) | 944.3 | 933.0 | -1.2% |\n|     Worst identifier | [ref](/DefinitelyTyped/DefinitelyTyped/blob/81d729425ed360e0851448b81b783cdc6a5d891d/types/react/test/tsx.tsx#L233) | [props](/DefinitelyTyped/DefinitelyTyped/blob/52bb40c4dffa5fd5d8b8e925698f4b91ae50a654/types/react/test/tsx.tsx#L270) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-07-10T15:19:12Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/react/index.d.ts", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react/test/elementAttributes.tsx", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDE2MzMxNDk=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/45999/derived.json b/packages/mergebot/src/_tests/fixtures/45999/derived.json new file mode 100644 index 0000000000..a118730bc0 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45999/derived.json @@ -0,0 +1,75 @@ +{ + "type": "info", + "now": "2020-07-11T02:37:12.780Z", + "pr_number": 45999, + "author": "alexpyzhianov", + "headCommitOid": "381a2a9d17d14e111f7d002c866debfcac6724e8", + "mergeBaseOid": "master", + "lastPushDate": "2020-07-10T13:10:49.000Z", + "lastActivityDate": "2020-07-11T02:36:41.000Z", + "maintainerBlessed": "Waiting for Code Reviews", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "react", + "kind": "edit", + "files": [ + { + "path": "types/react/index.d.ts", + "kind": "definition" + }, + { + "path": "types/react/test/elementAttributes.tsx", + "kind": "test" + } + ], + "owners": [ + "johnnyreilly", + "bbenezech", + "pzavolinsky", + "digiguru", + "ericanderson", + "DovydasNavickas", + "theruther4d", + "guilhermehubner", + "ferdaber", + "jrakotoharisoa", + "pascaloliv", + "hotell", + "franklixuefei", + "Jessidhia", + "saranshkataria", + "lukyth", + "eps1lon", + "zieka", + "dancerphil", + "dimitropoulos", + "disjukr", + "vhfmag", + "hellatan" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "ferdaber", + "date": "2020-07-10T14:49:32.000Z", + "isMaintainer": false + }, + { + "type": "approved", + "reviewer": "eps1lon", + "date": "2020-07-10T13:34:29.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/45999/mutations.json b/packages/mergebot/src/_tests/fixtures/45999/mutations.json new file mode 100644 index 0000000000..b932d7b06d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45999/mutations.json @@ -0,0 +1,40 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjYxODM0MQ==", + "body": "@alexpyzhianov Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `react` — [on npm](https://www.npmjs.com/package/react), [on unpkg](https://unpkg.com/browse/react@latest/)\n - owner-approval: @ferdaber, @eps1lon\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=45999&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": "MDExOlB1bGxSZXF1ZXN0NDQ3Mzc2MjE3" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNDE2MzMxNDk=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDQ3Mzc2MjE3", + "body": "@alexpyzhianov: Everything looks good here. I am ready to merge this PR (at 381a2a9) 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(@johnnyreilly, @bbenezech, @pzavolinsky, @digiguru, @ericanderson, @DovydasNavickas, @theruther4d, @guilhermehubner, @ferdaber, @jrakotoharisoa, @pascaloliv, @hotell, @franklixuefei, @Jessidhia, @saranshkataria, @lukyth, @eps1lon, @zieka, @dancerphil, @dimitropoulos, @disjukr, @vhfmag, @hellatan: you can do this too.)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/45999/result.json b/packages/mergebot/src/_tests/fixtures/45999/result.json new file mode 100644 index 0000000000..ae1e65d9a0 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/45999/result.json @@ -0,0 +1,21 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Critical package", + "Owner Approved", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@alexpyzhianov Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `react` — [on npm](https://www.npmjs.com/package/react), [on unpkg](https://unpkg.com/browse/react@latest/)\n - owner-approval: @ferdaber, @eps1lon\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=45999&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": "@alexpyzhianov: Everything looks good here. I am ready to merge this PR (at 381a2a9) 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(@johnnyreilly, @bbenezech, @pzavolinsky, @digiguru, @ericanderson, @DovydasNavickas, @theruther4d, @guilhermehubner, @ferdaber, @jrakotoharisoa, @pascaloliv, @hotell, @franklixuefei, @Jessidhia, @saranshkataria, @lukyth, @eps1lon, @zieka, @dancerphil, @dimitropoulos, @disjukr, @vhfmag, @hellatan: you can do this too.)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/46008/_downloads.json b/packages/mergebot/src/_tests/fixtures/46008/_downloads.json new file mode 100644 index 0000000000..b5b4ad2f0d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46008/_downloads.json @@ -0,0 +1,3 @@ +{ + "p5": 3015 +} diff --git a/packages/mergebot/src/_tests/fixtures/46008/_files.json b/packages/mergebot/src/_tests/fixtures/46008/_files.json new file mode 100644 index 0000000000..48cba7e8e7 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46008/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/p5/index.d.ts": "// Type definitions for p5 0.9\n// Project: https://github.com/processing/p5.js\n// Definitions by: p5-types \n// Pierre Krafft \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.9\n\n// This file was auto-generated. Please do not edit it.\n\n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \nexport = p5;\ndeclare class p5 {\n /**\n * This is the p5 instance constructor. A p5 instance\n * holds all the properties and methods related to a\n * p5 sketch. It expects an incoming sketch closure\n * and it can also take an optional node parameter\n * for attaching the generated p5 canvas to a node.\n * The sketch closure takes the newly created p5\n * instance as its sole argument and may optionally\n * set preload(), setup(), and/or draw() properties\n * on it for running a sketch.\n *\n * A p5 sketch can run in \"global\" or \"instance\"\n * mode: \"global\" - all properties and methods are\n * attached to the window \"instance\" - all properties\n * and methods are bound to this p5 object\n *\n * @param sketch a closure that can set optional\n * preload(), setup(), and/or draw() properties on\n * the given p5 instance\n * @param [node] element to attach canvas to\n * @return a p5 instance\n */\n constructor(sketch: (...args: any[]) => any, node?: HTMLElement);\n\n /**\n * Called directly before setup(), the preload()\n * function is used to handle asynchronous loading of\n * external files in a blocking way. If a preload\n * function is defined, setup() will wait until any\n * load calls within have finished. Nothing besides\n * load calls (loadImage, loadJSON, loadFont,\n * loadStrings, etc.) should be inside the preload\n * function. If asynchronous loading is preferred,\n * the load methods can instead be called in setup()\n * or anywhere else with the use of a callback\n * parameter. By default the text \"loading...\" will\n * be displayed. To make your own loading page,\n * include an HTML element with id \"p5_loading\" in\n * your page. More information here.\n */\n preload(): void;\n\n /**\n * The setup() function is called once when the\n * program starts. It's used to define initial\n * environment properties such as screen size and\n * background color and to load media such as images\n * and fonts as the program starts. There can only be\n * one setup() function for each program and it\n * shouldn't be called again after its initial\n * execution. Note: Variables declared within\n * setup() are not accessible within other functions,\n * including draw().\n */\n setup(): void;\n\n /**\n * Called directly after setup(), the draw() function\n * continuously executes the lines of code contained\n * inside its block until the program is stopped or\n * noLoop() is called. Note if noLoop() is called in\n * setup(), draw() will still be executed once before\n * stopping. draw() is called automatically and\n * should never be called explicitly. It should\n * always be controlled with noLoop(), redraw() and\n * loop(). After noLoop() stops the code in draw()\n * from executing, redraw() causes the code inside\n * draw() to execute once, and loop() will cause the\n * code inside draw() to resume executing\n * continuously.\n *\n *\n * The number of times draw() executes in each second\n * may be controlled with the frameRate() function.\n *\n *\n * There can only be one draw() function for each\n * sketch, and draw() must exist if you want the code\n * to run continuously, or to process events such as\n * mousePressed(). Sometimes, you might have an empty\n * call to draw() in your program, as shown in the\n * above example.\n *\n *\n * It is important to note that the drawing\n * coordinate system will be reset at the beginning\n * of each draw() call. If any transformations are\n * performed within draw() (ex: scale, rotate,\n * translate), their effects will be undone at the\n * beginning of draw(), so transformations will not\n * accumulate over time. On the other hand, styling\n * applied (ex: fill, stroke, etc) will remain in\n * effect.\n */\n draw(): void;\n\n /**\n * Removes the entire p5 sketch. This will remove the\n * canvas and any elements created by p5.js. It will\n * also stop the draw loop and unbind any properties\n * or methods from the window global scope. It will\n * leave a variable p5 in case you wanted to create a\n * new p5 sketch. If you like, you can set p5 = null\n * to erase it. While all functions and variables and\n * objects created by the p5 library will be removed,\n * any other global variables created by your code\n * will remain.\n */\n remove(): void;\n\n /**\n * Allows for the friendly error system (FES) to be\n * turned off when creating a sketch, which can give\n * a significant boost to performance when needed.\n * See disabling the friendly error system.\n */\n disableFriendlyErrors: boolean;\n}\n\n// tslint:disable-next-line:no-empty-interface\ninterface p5 extends p5.p5InstanceExtensions {}\n\ndeclare namespace p5 {\n type UNKNOWN_P5_CONSTANT = any;\n // tslint:disable-next-line:no-empty-interface\n interface p5InstanceExtensions {}\n}\n", + "3e19cb9cae4689fb736fd6682f7f76d8efafcaa2:types/p5/index.d.ts": "// Type definitions for p5 0.9\n// Project: https://github.com/processing/p5.js\n// Definitions by: p5-types \n// Pierre Krafft \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.9\n\n// This file was auto-generated. Please do not edit it.\n\n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \n/// \nexport = p5;\ndeclare class p5 {\n /**\n * This is the p5 instance constructor. A p5 instance\n * holds all the properties and methods related to a\n * p5 sketch. It expects an incoming sketch closure\n * and it can also take an optional node parameter\n * for attaching the generated p5 canvas to a node.\n * The sketch closure takes the newly created p5\n * instance as its sole argument and may optionally\n * set preload(), setup(), and/or draw() properties\n * on it for running a sketch.\n *\n * A p5 sketch can run in \"global\" or \"instance\"\n * mode: \"global\" - all properties and methods are\n * attached to the window \"instance\" - all properties\n * and methods are bound to this p5 object\n *\n * @param sketch a closure that can set optional\n * preload(), setup(), and/or draw() properties on\n * the given p5 instance\n * @param [node] element to attach canvas to\n * @return a p5 instance\n */\n constructor(sketch: (...args: any[]) => any, node?: HTMLElement);\n\n /**\n * Called directly before setup(), the preload()\n * function is used to handle asynchronous loading of\n * external files in a blocking way. If a preload\n * function is defined, setup() will wait until any\n * load calls within have finished. Nothing besides\n * load calls (loadImage, loadJSON, loadFont,\n * loadStrings, etc.) should be inside the preload\n * function. If asynchronous loading is preferred,\n * the load methods can instead be called in setup()\n * or anywhere else with the use of a callback\n * parameter. By default the text \"loading...\" will\n * be displayed. To make your own loading page,\n * include an HTML element with id \"p5_loading\" in\n * your page. More information here.\n */\n preload(): void;\n\n /**\n * The setup() function is called once when the\n * program starts. It's used to define initial\n * environment properties such as screen size and\n * background color and to load media such as images\n * and fonts as the program starts. There can only be\n * one setup() function for each program and it\n * shouldn't be called again after its initial\n * execution. Note: Variables declared within\n * setup() are not accessible within other functions,\n * including draw().\n */\n setup(): void;\n\n /**\n * Called directly after setup(), the draw() function\n * continuously executes the lines of code contained\n * inside its block until the program is stopped or\n * noLoop() is called. Note if noLoop() is called in\n * setup(), draw() will still be executed once before\n * stopping. draw() is called automatically and\n * should never be called explicitly. It should\n * always be controlled with noLoop(), redraw() and\n * loop(). After noLoop() stops the code in draw()\n * from executing, redraw() causes the code inside\n * draw() to execute once, and loop() will cause the\n * code inside draw() to resume executing\n * continuously.\n *\n *\n * The number of times draw() executes in each second\n * may be controlled with the frameRate() function.\n *\n *\n * There can only be one draw() function for each\n * sketch, and draw() must exist if you want the code\n * to run continuously, or to process events such as\n * mousePressed(). Sometimes, you might have an empty\n * call to draw() in your program, as shown in the\n * above example.\n *\n *\n * It is important to note that the drawing\n * coordinate system will be reset at the beginning\n * of each draw() call. If any transformations are\n * performed within draw() (ex: scale, rotate,\n * translate), their effects will be undone at the\n * beginning of draw(), so transformations will not\n * accumulate over time. On the other hand, styling\n * applied (ex: fill, stroke, etc) will remain in\n * effect.\n */\n draw(): void;\n\n /**\n * Removes the entire p5 sketch. This will remove the\n * canvas and any elements created by p5.js. It will\n * also stop the draw loop and unbind any properties\n * or methods from the window global scope. It will\n * leave a variable p5 in case you wanted to create a\n * new p5 sketch. If you like, you can set p5 = null\n * to erase it. While all functions and variables and\n * objects created by the p5 library will be removed,\n * any other global variables created by your code\n * will remain.\n */\n remove(): void;\n\n /**\n * Allows for the friendly error system (FES) to be\n * turned off when creating a sketch, which can give\n * a significant boost to performance when needed.\n * See disabling the friendly error system.\n */\n disableFriendlyErrors: boolean;\n}\n\n// tslint:disable-next-line:no-empty-interface\ninterface p5 extends p5.p5InstanceExtensions {}\n\ndeclare namespace p5 {\n type UNKNOWN_P5_CONSTANT = any;\n // tslint:disable-next-line:no-empty-interface\n interface p5InstanceExtensions {}\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/46008/_response.json b/packages/mergebot/src/_tests/fixtures/46008/_response.json new file mode 100644 index 0000000000..f37a831928 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46008/_response.json @@ -0,0 +1,364 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDQ3NTU0NTEw", + "title": "updated the posistion getter method on the Element interface. From return type Object to more specific object wit…", + "lastEditedAt": null, + "author": { + "login": "risingBirdSong", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-07-10T17:21:13Z", + "labels": { + "nodes": [ + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 46008, + "state": "OPEN", + "headRefOid": "3e19cb9cae4689fb736fd6682f7f76d8efafcaa2", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T17:21:16Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T17:21:17Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-07-10T17:24:24Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T17:24:26Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T17:24:29Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-10T17:27:15Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "Zalastax", + "__typename": "User" + }, + "createdAt": "2020-07-10T17:47:40Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "risingBirdSong", + "__typename": "User" + }, + "createdAt": "2020-07-10T18:23:38Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "Zalastax", + "__typename": "User" + }, + "createdAt": "2020-07-10T18:52:47Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "risingBirdSong", + "__typename": "User" + }, + "createdAt": "2020-07-10T18:58:06Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-07-11T02:09:10Z", + "projectColumnName": "Waiting for Code Reviews" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "Zalastax", + "__typename": "User" + }, + "commit": { + "oid": "3e19cb9cae4689fb736fd6682f7f76d8efafcaa2", + "abbreviatedOid": "3e19cb9", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-07-10T18:53:03Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46008#pullrequestreview-446631877", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3e19cb9cae4689fb736fd6682f7f76d8efafcaa2/checks?check_suite_id=901483215", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3e19cb9cae4689fb736fd6682f7f76d8efafcaa2/checks?check_suite_id=901483215", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3e19cb9cae4689fb736fd6682f7f76d8efafcaa2/checks?check_suite_id=901483783", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3e19cb9cae4689fb736fd6682f7f76d8efafcaa2/checks?check_suite_id=901483783", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-10T00:44:25Z", + "committedDate": "2020-07-10T00:44:25Z", + "pushedDate": "2020-07-10T00:44:49Z", + "abbreviatedOid": "3e19cb9", + "oid": "3e19cb9cae4689fb736fd6682f7f76d8efafcaa2", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 8, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY1Njc5MDQzNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@risingBirdSong 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 which I will keep updated.***\n\n This PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Have you considered [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#testing) 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\n## Code Reviews\n\nThis PR can be merged once it's reviewed by a DT maintainer.\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#testing)\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": "2020-07-10T17:21:16Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1Njc5MDQ0Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @p5-types @Zalastax — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46008/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": "2020-07-10T17:21:17Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1Njc5MTc4NA==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## p5 ([unpkg](https://unpkg.com/browse/p5@latest/))\nwas missing the following properties:\n1. byteLength\n1. toByteArray\n1. fromByteArray\n1. Buffer\n1. SlowBuffer\n\n
\nas well as these 11 other properties...\n

INSPECT_MAX_BYTES, kMaxLength, saveAs, read, write, Glyph, Path, BoundingBox, parse, load, loadSync

\n
\n\n

\n Generated by :no_entry_sign: dangerJS against 3e19cb9cae4689fb736fd6682f7f76d8efafcaa2\n

\n", + "createdAt": "2020-07-10T17:24:24Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1Njc5MzExMQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #46008 | diff |\n| ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 71.6 | 71.4 | -0.3% |\n| Type count | 9814 | 9815 | 0% |\n| Assignability cache size | 3455 | 3455 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 26 | 26 | 0% |\n| Identifiers in tests | 26 | 26 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 416.8 | 412.2 | -1.1% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 11.4% | 12.7% | |\n|     Worst duration (ms) | 481.0 | 518.3 | +7.8% |\n|     Worst identifier | [ellipse](/DefinitelyTyped/DefinitelyTyped/blob/8c81e77bba994dac74af898aa0197b4d7ec88a07/types/p5/test/index.ts#L36) | [p5](/DefinitelyTyped/DefinitelyTyped/blob/ef9750af074cbf86a6e6710e2fdd913ecccac44b/types/p5/test/index.ts#L32) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 393.9 | 391.7 | -0.6% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.6% | 10.2% | -3.5% |\n|     Worst duration (ms) | 470.2 | 463.8 | -1.3% |\n|     Worst identifier | [s](/DefinitelyTyped/DefinitelyTyped/blob/8c81e77bba994dac74af898aa0197b4d7ec88a07/types/p5/test/index.ts#L33) | [myp5](/DefinitelyTyped/DefinitelyTyped/blob/ef9750af074cbf86a6e6710e2fdd913ecccac44b/types/p5/test/index.ts#L36) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-07-10T17:27:15Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjgwMjA3MA==", + "author": { + "login": "Zalastax", + "__typename": "User" + }, + "body": "The p5 typings are generated from the type hints in the p5 source code using https://github.com/p5-types/p5.ts. In order to not have your contribution lost in a future update, please contribute this improvement to the p5 types or to https://github.com/p5-types/p5.ts. Then generate new typings and submit them. Feel free to reach out to me via mail if you want to take on the challenge but want an introduction to the tooling. ", + "createdAt": "2020-07-10T17:47:40Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjgxODEwOA==", + "author": { + "login": "risingBirdSong", + "__typename": "User" + }, + "body": "Thank Pierre for the quick response and info,\n\nThis is my first attempt at a Pull Request into D.TS so this is unfamiliar to me, so yes I’d appreciate your kind offer.\n\nThis is a simple change, but I believe in starting simple and it seems like a valuable lesson in learning how to submit types.\n\nThanks Pierre,\n\n-Peter Murphy\n\nSent from Mail for Windows 10\n\nFrom: Pierre Krafft\nSent: Friday, July 10, 2020 10:47 AM\nTo: DefinitelyTyped/DefinitelyTyped\nCc: Peter; Mention\nSubject: Re: [DefinitelyTyped/DefinitelyTyped] updated the posistion getter method on the Element interface. From return type Object to more specific object wit… (#46008)\n\n\nThe p5 typings are generated from the type hints in the p5 source code using https://github.com/p5-types/p5.ts. In order to not have your contribution lost in a future update, please contribute this improvement to the p5 types or to https://github.com/p5-types/p5.ts. Then generate new typings and submit them. Feel free to reach out to me via mail if you want to take on the challenge but want an introduction to the tooling.\n\n—\nYou are receiving this because you were mentioned.\nReply to this email directly, view it on GitHub, or unsubscribe.\n\n", + "createdAt": "2020-07-10T18:23:38Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjgzMDc3Nw==", + "author": { + "login": "Zalastax", + "__typename": "User" + }, + "body": "Most typings are not managed like this - you picked a tough challenge for your first PR! I will approve this change so you can see some gain of your efforts and I'll help you make it stick via mail. You can find my email address in my profile. ", + "createdAt": "2020-07-10T18:52:47Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NjgzMzA1MA==", + "author": { + "login": "risingBirdSong", + "__typename": "User" + }, + "body": "Thank you very much Pierre! Haha I thought this would be a nice simple Pull Request since it’s only changing from Object to a more specific object, and I guess didn’t realize what I was getting myself into! But I really appreciate it and would like to learn more about how to properly submit types for the future.\n\n-Peter\n\nSent from Mail for Windows 10\n\nFrom: Pierre Krafft\nSent: Friday, July 10, 2020 11:53 AM\nTo: DefinitelyTyped/DefinitelyTyped\nCc: Peter; Mention\nSubject: Re: [DefinitelyTyped/DefinitelyTyped] updated the posistion getter method on the Element interface. From return type Object to more specific object wit… (#46008)\n\n\nMost typings are not managed like this - you picked a tough challenge for your first PR! I will approve this change so you can see some gain of your efforts and I'll help you make it stick via mail. You can find my email address in my profile.\n\n—\nYou are receiving this because you were mentioned.\nReply to this email directly, view it on GitHub, or unsubscribe.\n\n", + "createdAt": "2020-07-10T18:58:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/p5/lib/addons/p5.dom.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 1 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDE2NTQ5NzI=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI2", + "name": "Other", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/46008/derived.json b/packages/mergebot/src/_tests/fixtures/46008/derived.json new file mode 100644 index 0000000000..a25b19bc8a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46008/derived.json @@ -0,0 +1,44 @@ +{ + "type": "info", + "now": "2020-07-11T02:09:32.239Z", + "pr_number": 46008, + "author": "risingBirdSong", + "headCommitOid": "3e19cb9cae4689fb736fd6682f7f76d8efafcaa2", + "mergeBaseOid": "master", + "lastPushDate": "2020-07-10T00:44:49.000Z", + "lastActivityDate": "2020-07-11T02:09:10.000Z", + "maintainerBlessed": "Waiting for Code Reviews", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "p5", + "kind": "edit", + "files": [ + { + "path": "types/p5/lib/addons/p5.dom.d.ts", + "kind": "definition" + } + ], + "owners": [ + "p5-types", + "Zalastax" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "Zalastax", + "date": "2020-07-10T18:53:03.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/46008/mutations.json b/packages/mergebot/src/_tests/fixtures/46008/mutations.json new file mode 100644 index 0000000000..790b8100e1 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46008/mutations.json @@ -0,0 +1,49 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY1Njc5MDQzNw==", + "body": "@risingBirdSong 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* `p5` — [on npm](https://www.npmjs.com/package/p5), [on unpkg](https://unpkg.com/browse/p5@latest/)\n - owner-approval: @Zalastax\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=46008&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": "MDExOlB1bGxSZXF1ZXN0NDQ3NTU0NTEw" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNDE2NTQ5NzI=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDQ3NTU0NTEw", + "body": "Hey @risingBirdSong,\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" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDQ3NTU0NTEw", + "body": "@risingBirdSong: Everything looks good here. I am ready to merge this PR (at 3e19cb9) 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(@p5-types, @Zalastax: you can do this too.)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/46008/result.json b/packages/mergebot/src/_tests/fixtures/46008/result.json new file mode 100644 index 0000000000..3412667dc9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46008/result.json @@ -0,0 +1,25 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Owner Approved", + "Untested Change", + "Self Merge" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @risingBirdSong,\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": "@risingBirdSong 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* `p5` — [on npm](https://www.npmjs.com/package/p5), [on unpkg](https://unpkg.com/browse/p5@latest/)\n - owner-approval: @Zalastax\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=46008&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": "@risingBirdSong: Everything looks good here. I am ready to merge this PR (at 3e19cb9) 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(@p5-types, @Zalastax: you can do this too.)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/46019/_downloads.json b/packages/mergebot/src/_tests/fixtures/46019/_downloads.json new file mode 100644 index 0000000000..1fea7aabad --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46019/_downloads.json @@ -0,0 +1,3 @@ +{ + "is-secret": 0 +} diff --git a/packages/mergebot/src/_tests/fixtures/46019/_files.json b/packages/mergebot/src/_tests/fixtures/46019/_files.json new file mode 100644 index 0000000000..d8d3a0f02a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46019/_files.json @@ -0,0 +1,4 @@ +{ + "ceca9f768be945932c692d7dd48fa14b6ff38096:types/is-secret/index.d.ts": "// Type definitions for is-secret 1.2\n// Project: https://github.com/watson/is-secret#readme\n// Definitions by: Walter Rumsby \n// Piotr Błażejewicz \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n", + "ceca9f768be945932c692d7dd48fa14b6ff38096:types/is-secret/tslint.json": "{ \"extends\": \"dtslint/dt.json\" }\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/46019/_response.json b/packages/mergebot/src/_tests/fixtures/46019/_response.json new file mode 100644 index 0000000000..992f7217ef --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46019/_response.json @@ -0,0 +1,293 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDQ3ODE1MDgx", + "title": "feat(is-secret): new type definition", + "lastEditedAt": null, + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-07-11T20:45:03Z", + "labels": { + "nodes": [ + { + "name": "Maintainer Approved", + "__typename": "Label" + }, + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "New Definition", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 46019, + "state": "OPEN", + "headRefOid": "ceca9f768be945932c692d7dd48fa14b6ff38096", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T20:45:07Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T20:48:38Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T20:49:08Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T21:31:05Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-11T21:31:06Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-12T04:07:30Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-12T04:07:31Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "weswigham", + "__typename": "User" + }, + "commit": { + "oid": "ceca9f768be945932c692d7dd48fa14b6ff38096", + "abbreviatedOid": "ceca9f7", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2020-07-12T02:01:31Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46019#pullrequestreview-446840244", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/ceca9f768be945932c692d7dd48fa14b6ff38096/checks?check_suite_id=904481416", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/ceca9f768be945932c692d7dd48fa14b6ff38096/checks?check_suite_id=904481416", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/ceca9f768be945932c692d7dd48fa14b6ff38096/checks?check_suite_id=904481675", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/ceca9f768be945932c692d7dd48fa14b6ff38096/checks?check_suite_id=904481675", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-11T20:39:10Z", + "committedDate": "2020-07-11T20:39:10Z", + "pushedDate": "2020-07-11T20:43:23Z", + "abbreviatedOid": "ceca9f7", + "oid": "ceca9f768be945932c692d7dd48fa14b6ff38096", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 4, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NzEyNjg3Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@peterblazejewicz Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n- [is-secret on npm](https://www.npmjs.com/package/is-secret)\n- [is-secret on unpkg](https://unpkg.com/browse/is-secret@latest//)\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ Only a DT maintainer can merge changes when there are new packages added\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": "2020-07-11T20:45:07Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NzEyNzQyNg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\nThese typings are for a package that doesn’t yet exist on master, so I don’t have anything to compare against yet! In the future, I’ll be able to compare PRs to is-secret with its source on master.\n\n\n
\nComparison details 📊\n\n| **Batch compilation** | |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| Type count | 2121 |\n| Assignability cache size | 96 |\n| | |\n| **Language service measurements** | |\n| Samples taken | 22 |\n| Identifiers in tests | 22 |\n| **`getCompletionsAtPosition`** | |\n|     Mean duration (ms) | 66.2 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 20.3% |\n|     Worst duration (ms) | 82.8 |\n|     Worst identifier | [value](/DefinitelyTyped/DefinitelyTyped/blob/3506c8d8758f665425f1445d986d5cfe7722a17c/types/is-secret/is-secret-tests.ts#L20) |\n| **`getQuickInfoAtPosition`** | |\n|     Mean duration (ms) | 65.9 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 22.2% |\n|     Worst duration (ms) | 94.1 |\n|     Worst identifier | [isSecret](/DefinitelyTyped/DefinitelyTyped/blob/3506c8d8758f665425f1445d986d5cfe7722a17c/types/is-secret/is-secret-tests.ts#L19) |\n| | |\n| **System information** | |\n| Node version | v12.18.1 |\n| CPU count | 2 |\n| CPU speed | 2.294 GHz |\n| CPU model | Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz |\n| CPU Architecture | x64 |\n| Memory | 6.8 GiB |\n| Platform | linux |\n| Release | 4.15.0-1089-azure |\n\n\n
\n", + "createdAt": "2020-07-11T20:49:08Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NzEzMzI1NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @peterblazejewicz — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46019/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2020-07-11T21:31:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NzE3MjMxMA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@peterblazejewicz Everything looks good here. Great job! I am ready to merge this PR (at ceca9f7) on your behalf.\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", + "createdAt": "2020-07-12T04:07:31Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/is-secret/index.d.ts", + "additions": 23, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/is-secret/is-secret-tests.ts", + "additions": 20, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/is-secret/tsconfig.json", + "additions": 23, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/is-secret/tslint.json", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDE2OTczMTM=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz", + "name": "Waiting for Author to Merge", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/46019/derived.json b/packages/mergebot/src/_tests/fixtures/46019/derived.json new file mode 100644 index 0000000000..d16df15142 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46019/derived.json @@ -0,0 +1,57 @@ +{ + "type": "info", + "now": "2020-07-12T04:13:43.404Z", + "pr_number": 46019, + "author": "peterblazejewicz", + "headCommitOid": "ceca9f768be945932c692d7dd48fa14b6ff38096", + "mergeBaseOid": "master", + "lastPushDate": "2020-07-11T20:43:23.000Z", + "lastActivityDate": "2020-07-12T02:01:31.000Z", + "mergeOfferDate": "2020-07-12T04:07:31.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "is-secret", + "kind": "add", + "files": [ + { + "path": "types/is-secret/index.d.ts", + "kind": "definition" + }, + { + "path": "types/is-secret/is-secret-tests.ts", + "kind": "test" + }, + { + "path": "types/is-secret/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/is-secret/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [ + "wrumsby", + "peterblazejewicz" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "weswigham", + "date": "2020-07-12T02:01:31.000Z", + "isMaintainer": true + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/46019/mutations.json b/packages/mergebot/src/_tests/fixtures/46019/mutations.json new file mode 100644 index 0000000000..a84a393ab0 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46019/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY1NzEyNjg3Mg==", + "body": "@peterblazejewicz Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `is-secret` (*new!*) — [on npm](https://www.npmjs.com/package/is-secret), [on unpkg](https://unpkg.com/browse/is-secret@latest/)\n - 2 added owners: @wrumsby, ✎@peterblazejewicz\n - Config files to check:\n - [`is-secret/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46019/files/ceca9f768be945932c692d7dd48fa14b6ff38096#diff-2069dd3c71913a21a2c622131eaceeb2125b66d5c6b10077423d4c01735f6fd0): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=46019&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 when there are new packages added\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": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDQ3ODE1MDgx" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY1NzE3MjMxMA==", + "body": "@peterblazejewicz: Everything looks good here. I am ready to merge this PR (at ceca9f7) 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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/46019/result.json b/packages/mergebot/src/_tests/fixtures/46019/result.json new file mode 100644 index 0000000000..a3c62a752e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46019/result.json @@ -0,0 +1,22 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Maintainer Approved", + "New Definition", + "Check Config", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@peterblazejewicz Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `is-secret` (*new!*) — [on npm](https://www.npmjs.com/package/is-secret), [on unpkg](https://unpkg.com/browse/is-secret@latest/)\n - 2 added owners: @wrumsby, ✎@peterblazejewicz\n - Config files to check:\n - [`is-secret/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46019/files/ceca9f768be945932c692d7dd48fa14b6ff38096#diff-2069dd3c71913a21a2c622131eaceeb2125b66d5c6b10077423d4c01735f6fd0): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=46019&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 when there are new packages added\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": "@peterblazejewicz: Everything looks good here. I am ready to merge this PR (at ceca9f7) 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" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/46120/_downloads.json b/packages/mergebot/src/_tests/fixtures/46120/_downloads.json new file mode 100644 index 0000000000..9ab7a7e599 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46120/_downloads.json @@ -0,0 +1,3 @@ +{ + "underscore": 2169562 +} diff --git a/packages/mergebot/src/_tests/fixtures/46120/_files.json b/packages/mergebot/src/_tests/fixtures/46120/_files.json new file mode 100644 index 0000000000..649d15f9a6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46120/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/underscore/index.d.ts": "// Type definitions for Underscore 1.10\n// Project: http://underscorejs.org/\n// Definitions by: Boris Yankov ,\n// Josh Baldwin ,\n// Christopher Currens ,\n// Ard Timmerman ,\n// Julian Gonggrijp ,\n// Florian Keller \n// Regev Brody \n// Piotr Błażejewicz \n// Michael Ness \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\ndeclare var _: _.UnderscoreStatic;\nexport = _;\nexport as namespace _;\n\n// The DOM is not required to be present, but these definitions reference type Element for the\n// isElement check. If the DOM is present, this declaration will merge.\ndeclare global {\n interface Element { }\n}\n\ndeclare module _ {\n /**\n * underscore.js _.throttle options.\n **/\n interface ThrottleSettings {\n\n /**\n * If you'd like to disable the leading-edge call, pass this as false.\n **/\n leading?: boolean;\n\n /**\n * If you'd like to disable the execution on the trailing-edge, pass false.\n **/\n trailing?: boolean;\n }\n\n /**\n * underscore.js template settings, set templateSettings or pass as an argument\n * to 'template()' to override defaults.\n **/\n interface TemplateSettings {\n /**\n * Default value is '/<%([\\s\\S]+?)%>/g'.\n **/\n evaluate?: RegExp;\n\n /**\n * Default value is '/<%=([\\s\\S]+?)%>/g'.\n **/\n interpolate?: RegExp;\n\n /**\n * Default value is '/<%-([\\s\\S]+?)%>/g'.\n **/\n escape?: RegExp;\n\n /**\n * By default, 'template()' places the values from your data in the local scope via the 'with' statement.\n * However, you can specify a single variable name with this setting.\n **/\n variable?: string;\n }\n\n interface CompiledTemplate {\n (data?: any): string;\n source: string;\n }\n\n // Common interface between Arrays and jQuery objects\n interface List {\n [index: number]: T;\n length: number;\n }\n\n interface Dictionary {\n [index: string]: T;\n }\n\n type Collection = List | Dictionary;\n\n type EnumerableKey = string | number;\n\n type CollectionKey =\n V extends never ? any\n : V extends List ? number\n : V extends Dictionary ? string\n : V extends undefined ? undefined\n : never;\n\n interface Predicate {\n (value: T): boolean;\n }\n\n interface CollectionIterator, TResult, V = Collection> {\n (element: T, key: CollectionKey, collection: V): TResult;\n }\n\n interface ListIterator, TResult, V = List> extends CollectionIterator { }\n\n interface ObjectIterator, TResult, V = Dictionary> extends CollectionIterator { }\n\n type Iteratee = TypeOfCollection> =\n CollectionIterator |\n EnumerableKey |\n EnumerableKey[] |\n Partial |\n null |\n undefined;\n\n type IterateeResult =\n I extends (...args: any[]) => infer R ? R\n : I extends keyof T ? T[I]\n : I extends EnumerableKey | EnumerableKey[] ? any\n : I extends object ? boolean\n : I extends null | undefined ? T\n : never;\n\n type PropertyTypeOrAny = K extends keyof T ? T[K] : any;\n\n interface MemoCollectionIterator, TResult, V = Collection> {\n (prev: TResult, curr: T, key: CollectionKey, collection: V): TResult;\n }\n\n interface MemoIterator, TResult, V = List> extends MemoCollectionIterator { }\n\n interface MemoObjectIterator, TResult, V = Dictionary> extends MemoCollectionIterator { }\n\n type TypeOfList =\n V extends never ? any\n : V extends List ? T\n : never;\n\n type TypeOfDictionary =\n V extends never ? any\n : V extends Dictionary ? T\n : TDefault;\n\n type TypeOfCollection = TypeOfList | TypeOfDictionary;\n\n type ListItemOrSelf = T extends List ? TItem : T;\n\n // unfortunately it's not possible to recursively collapse all possible list dimensions to T[] at this time,\n // so give up after one dimension since that's likely the most common case\n // '& object' prevents strings from being matched by list checks so types like string[] don't end up resulting in any\n type DeepestListItemOrSelf =\n T extends List & object\n ? TItem extends List & object\n ? any\n : TItem\n : T;\n\n // if T is an inferrable pair, the value type for the pair\n // if T is a list, assume that it contains pairs of some type, so any\n // if T isn't a list, there's no way that it can provide pairs, so never\n type PairValue =\n T extends Readonly<[EnumerableKey, infer TValue]> ? TValue\n : T extends List ? TValue\n : never;\n\n type AnyFalsy = undefined | null | false | '' | 0;\n\n type Truthy = Exclude;\n\n type _Pick =\n Extract extends never ? Partial\n : Pick>;\n\n // switch to Omit when the minimum TS version moves past 3.5\n type _Omit =\n V extends never ? any\n : Extract extends never ? Partial\n : Pick>;\n\n type _ChainSingle = _Chain, V>;\n\n interface Cancelable {\n cancel(): void;\n }\n\n interface UnderscoreStatic {\n /**\n * Underscore OOP Wrapper, all Underscore functions that take an object\n * as the first parameter can be invoked through this function.\n * @param value First argument to Underscore object functions.\n * @returns An Underscore wrapper around the supplied value.\n **/\n (value: V): Underscore, V>;\n\n /***************\n * Collections *\n ***************/\n\n /**\n * Iterates over a `collection` of elements, yielding each in turn to\n * an `iteratee`. The `iteratee` is bound to the context object, if one\n * is passed.\n * @param collection The collection of elements to iterate over.\n * @param iteratee The iteratee to call for each element in\n * `collection`.\n * @param context 'this' object in `iteratee`, optional.\n * @returns The original collection.\n **/\n each>(\n collection: V,\n iteratee: CollectionIterator, void, V>,\n context?: any\n ): V;\n\n /**\n * @see each\n **/\n forEach: UnderscoreStatic['each'];\n\n /**\n * Produces a new array of values by mapping each value in `collection`\n * through a transformation `iteratee`.\n * @param collection The collection to transform.\n * @param iteratee The iteratee to use to transform each item in\n * `collection`.\n * @param context `this` object in `iteratee`, optional.\n * @returns The mapped result.\n **/\n map, I extends Iteratee>(\n collection: V,\n iteratee: I,\n context?: any\n ): IterateeResult>[];\n\n /**\n * @see map\n **/\n collect: UnderscoreStatic['map'];\n\n /**\n * Also known as inject and foldl, reduce boils down a `collection` of\n * values into a single value. `memo` is the initial state of the\n * reduction, and each successive step of it should be returned by\n * `iteratee`.\n *\n * If no memo is passed to the initial invocation of reduce, `iteratee`\n * is not invoked on the first element of `collection`. The first\n * element is instead passed as the memo in the invocation of\n * `iteratee` on the next element in `collection`.\n * @param collection The collection to reduce.\n * @param iteratee The function to call on each iteration to reduce the\n * collection.\n * @param memo The initial reduce state or undefined to use the first\n * item in `collection` as initial state.\n * @param context `this` object in `iteratee`, optional.\n * @returns The reduced result.\n **/\n reduce, TResult>(\n collection: V,\n iteratee: MemoCollectionIterator, TResult, V>,\n memo: TResult,\n context?: any\n ): TResult;\n reduce, TResult = TypeOfCollection>(\n collection: V,\n iteratee: MemoCollectionIterator,\n TResult | TypeOfCollection,\n V>\n ): TResult | TypeOfCollection | undefined;\n\n /**\n * @see reduce\n **/\n inject: UnderscoreStatic['reduce'];\n\n /**\n * @see reduce\n **/\n foldl: UnderscoreStatic['reduce'];\n\n /**\n * The right-associative version of reduce.\n *\n * This is not as useful in JavaScript as it would be in a language\n * with lazy evaluation.\n * @param collection The collection to reduce.\n * @param iteratee The function to call on each iteration to reduce the\n * collection.\n * @param memo The initial reduce state or undefined to use the first\n * item in `collection` as the initial state.\n ", + "5ef8fe2907257beac41e27c3dc2399a087eddb67:types/underscore/index.d.ts": "// Type definitions for Underscore 1.10\n// Project: http://underscorejs.org/\n// Definitions by: Boris Yankov ,\n// Josh Baldwin ,\n// Christopher Currens ,\n// Ard Timmerman ,\n// Julian Gonggrijp ,\n// Florian Keller \n// Regev Brody \n// Piotr Błażejewicz \n// Michael Ness \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\ndeclare var _: _.UnderscoreStatic;\nexport = _;\nexport as namespace _;\n\n// The DOM is not required to be present, but these definitions reference type Element for the\n// isElement check. If the DOM is present, this declaration will merge.\ndeclare global {\n interface Element { }\n}\n\ndeclare module _ {\n /**\n * underscore.js _.throttle options.\n **/\n interface ThrottleSettings {\n\n /**\n * If you'd like to disable the leading-edge call, pass this as false.\n **/\n leading?: boolean;\n\n /**\n * If you'd like to disable the execution on the trailing-edge, pass false.\n **/\n trailing?: boolean;\n }\n\n /**\n * underscore.js template settings, set templateSettings or pass as an argument\n * to 'template()' to override defaults.\n **/\n interface TemplateSettings {\n /**\n * Default value is '/<%([\\s\\S]+?)%>/g'.\n **/\n evaluate?: RegExp;\n\n /**\n * Default value is '/<%=([\\s\\S]+?)%>/g'.\n **/\n interpolate?: RegExp;\n\n /**\n * Default value is '/<%-([\\s\\S]+?)%>/g'.\n **/\n escape?: RegExp;\n\n /**\n * By default, 'template()' places the values from your data in the local scope via the 'with' statement.\n * However, you can specify a single variable name with this setting.\n **/\n variable?: string;\n }\n\n interface CompiledTemplate {\n (data?: any): string;\n source: string;\n }\n\n // Common interface between Arrays and jQuery objects\n interface List {\n [index: number]: T;\n length: number;\n }\n\n interface Dictionary {\n [index: string]: T;\n }\n\n type Collection = List | Dictionary;\n\n type EnumerableKey = string | number;\n\n type CollectionKey =\n V extends never ? any\n : V extends List ? number\n : V extends Dictionary ? string\n : V extends undefined ? undefined\n : never;\n\n interface Predicate {\n (value: T): boolean;\n }\n\n interface CollectionIterator, TResult, V = Collection> {\n (element: T, key: CollectionKey, collection: V): TResult;\n }\n\n interface ListIterator, TResult, V = List> extends CollectionIterator { }\n\n interface ObjectIterator, TResult, V = Dictionary> extends CollectionIterator { }\n\n type Iteratee = TypeOfCollection> =\n CollectionIterator |\n EnumerableKey |\n EnumerableKey[] |\n Partial |\n null |\n undefined;\n\n type IterateeResult =\n I extends (...args: any[]) => infer R ? R\n : I extends keyof T ? T[I]\n : I extends EnumerableKey | EnumerableKey[] ? any\n : I extends object ? boolean\n : I extends null | undefined ? T\n : never;\n\n type PropertyTypeOrAny = K extends keyof T ? T[K] : any;\n\n interface MemoCollectionIterator, TResult, V = Collection> {\n (prev: TResult, curr: T, key: CollectionKey, collection: V): TResult;\n }\n\n interface MemoIterator, TResult, V = List> extends MemoCollectionIterator { }\n\n interface MemoObjectIterator, TResult, V = Dictionary> extends MemoCollectionIterator { }\n\n type TypeOfList =\n V extends never ? any\n : V extends List ? T\n : never;\n\n type TypeOfDictionary =\n V extends never ? any\n : V extends Dictionary ? T\n : TDefault;\n\n type TypeOfCollection = TypeOfList | TypeOfDictionary;\n\n type ListItemOrSelf = T extends List ? TItem : T;\n\n // unfortunately it's not possible to recursively collapse all possible list dimensions to T[] at this time,\n // so give up after one dimension since that's likely the most common case\n // '& object' prevents strings from being matched by list checks so types like string[] don't end up resulting in any\n type DeepestListItemOrSelf =\n T extends List & object\n ? TItem extends List & object\n ? any\n : TItem\n : T;\n\n // if T is an inferrable pair, the value type for the pair\n // if T is a list, assume that it contains pairs of some type, so any\n // if T isn't a list, there's no way that it can provide pairs, so never\n type PairValue =\n T extends Readonly<[EnumerableKey, infer TValue]> ? TValue\n : T extends List ? TValue\n : never;\n\n type AnyFalsy = undefined | null | false | '' | 0;\n\n type Truthy = Exclude;\n\n type _Pick =\n Extract extends never ? Partial\n : Pick>;\n\n // switch to Omit when the minimum TS version moves past 3.5\n type _Omit =\n V extends never ? any\n : Extract extends never ? Partial\n : Pick>;\n\n type _ChainSingle = _Chain, V>;\n\n interface Cancelable {\n cancel(): void;\n }\n\n interface UnderscoreStatic {\n /**\n * Underscore OOP Wrapper, all Underscore functions that take an object\n * as the first parameter can be invoked through this function.\n * @param value First argument to Underscore object functions.\n * @returns An Underscore wrapper around the supplied value.\n **/\n (value: V): Underscore, V>;\n\n /***************\n * Collections *\n ***************/\n\n /**\n * Iterates over a `collection` of elements, yielding each in turn to\n * an `iteratee`. The `iteratee` is bound to the context object, if one\n * is passed.\n * @param collection The collection of elements to iterate over.\n * @param iteratee The iteratee to call for each element in\n * `collection`.\n * @param context 'this' object in `iteratee`, optional.\n * @returns The original collection.\n **/\n each>(\n collection: V,\n iteratee: CollectionIterator, void, V>,\n context?: any\n ): V;\n\n /**\n * @see each\n **/\n forEach: UnderscoreStatic['each'];\n\n /**\n * Produces a new array of values by mapping each value in `collection`\n * through a transformation `iteratee`.\n * @param collection The collection to transform.\n * @param iteratee The iteratee to use to transform each item in\n * `collection`.\n * @param context `this` object in `iteratee`, optional.\n * @returns The mapped result.\n **/\n map, I extends Iteratee>(\n collection: V,\n iteratee: I,\n context?: any\n ): IterateeResult>[];\n\n /**\n * @see map\n **/\n collect: UnderscoreStatic['map'];\n\n /**\n * Also known as inject and foldl, reduce boils down a `collection` of\n * values into a single value. `memo` is the initial state of the\n * reduction, and each successive step of it should be returned by\n * `iteratee`.\n *\n * If no memo is passed to the initial invocation of reduce, `iteratee`\n * is not invoked on the first element of `collection`. The first\n * element is instead passed as the memo in the invocation of\n * `iteratee` on the next element in `collection`.\n * @param collection The collection to reduce.\n * @param iteratee The function to call on each iteration to reduce the\n * collection.\n * @param memo The initial reduce state or undefined to use the first\n * item in `collection` as initial state.\n * @param context `this` object in `iteratee`, optional.\n * @returns The reduced result.\n **/\n reduce, TResult>(\n collection: V,\n iteratee: MemoCollectionIterator, TResult, V>,\n memo: TResult,\n context?: any\n ): TResult;\n reduce, TResult = TypeOfCollection>(\n collection: V,\n iteratee: MemoCollectionIterator,\n TResult | TypeOfCollection,\n V>\n ): TResult | TypeOfCollection | undefined;\n\n /**\n * @see reduce\n **/\n inject: UnderscoreStatic['reduce'];\n\n /**\n * @see reduce\n **/\n foldl: UnderscoreStatic['reduce'];\n\n /**\n * The right-associative version of reduce.\n *\n * This is not as useful in JavaScript as it would be in a language\n * with lazy evaluation.\n * @param collection The collection to reduce.\n * @param iteratee The function to call on each iteration to reduce the\n * collection.\n * @param memo The initial reduce state or undefined to use the first\n * item in `collection` as the initial state.\n " +} diff --git a/packages/mergebot/src/_tests/fixtures/46120/_response.json b/packages/mergebot/src/_tests/fixtures/46120/_response.json new file mode 100644 index 0000000000..0681ccee4c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46120/_response.json @@ -0,0 +1,2260 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDQ5ODI3NTQ3", + "title": "[@types/underscore] Collection and Array Tests - Each, ToArray, and Partition", + "createdAt": "2020-07-16T01:10:24Z", + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 46120, + "state": "OPEN", + "headRefOid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-16T01:10:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-16T01:10:34Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-16T01:14:16Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-16T03:12:44Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-16T23:49:50Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-16T23:49:52Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-17T05:29:54Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-17T05:47:19Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-17T05:47:20Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-18T20:34:50Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-19T06:08:46Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-19T11:17:41Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-19T11:35:42Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-19T16:31:39Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-19T16:36:44Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-19T16:37:52Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-19T20:19:06Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-19T20:23:11Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-19T22:12:47Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-19T22:33:41Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "7fbaab6a3ef600244d1a74853f00ae2c957eae27", + "abbreviatedOid": "7fbaab6", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-16T01:19:44Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-16T01:19:44Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-449444382", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "7fbaab6a3ef600244d1a74853f00ae2c957eae27", + "abbreviatedOid": "7fbaab6", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-16T01:22:45Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-16T01:22:46Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-449445323", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "7fbaab6a3ef600244d1a74853f00ae2c957eae27", + "abbreviatedOid": "7fbaab6", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-16T01:45:33Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-16T01:45:34Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-449452107", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "commit": { + "oid": "7fbaab6a3ef600244d1a74853f00ae2c957eae27", + "abbreviatedOid": "7fbaab6", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-16T23:26:37Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-16T23:29:36Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-16T23:39:21Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-07-16T23:49:46Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450281043", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "7fbaab6a3ef600244d1a74853f00ae2c957eae27", + "abbreviatedOid": "7fbaab6", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T02:56:43Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T02:56:44Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450342028", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "7fbaab6a3ef600244d1a74853f00ae2c957eae27", + "abbreviatedOid": "7fbaab6", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T03:00:03Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T03:00:03Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450342902", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "7fbaab6a3ef600244d1a74853f00ae2c957eae27", + "abbreviatedOid": "7fbaab6", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T03:46:46Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T03:46:47Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450354491", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "7fbaab6a3ef600244d1a74853f00ae2c957eae27", + "abbreviatedOid": "7fbaab6", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T04:15:25Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T04:15:25Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450361512", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "7fbaab6a3ef600244d1a74853f00ae2c957eae27", + "abbreviatedOid": "7fbaab6", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T05:26:09Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T05:26:09Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450380809", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "53d67598c4a269d8f9dc4ff2e124031c1f9ba2ec", + "abbreviatedOid": "53d6759", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T05:27:12Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T05:27:12Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450381101", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "53d67598c4a269d8f9dc4ff2e124031c1f9ba2ec", + "abbreviatedOid": "53d6759", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T05:36:08Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T05:36:08Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450383864", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "53d67598c4a269d8f9dc4ff2e124031c1f9ba2ec", + "abbreviatedOid": "53d6759", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T05:39:14Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T05:39:14Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450384843", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "53d67598c4a269d8f9dc4ff2e124031c1f9ba2ec", + "abbreviatedOid": "53d6759", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T05:43:19Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T05:43:19Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450386099", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "090cc1244a7e6a4f65d8ecca69a2f95824ab606b", + "abbreviatedOid": "090cc12", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T05:58:02Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T05:58:02Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450391063", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "090cc1244a7e6a4f65d8ecca69a2f95824ab606b", + "abbreviatedOid": "090cc12", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T06:02:49Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T06:02:50Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450392799", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "9a58d18295f73bd1975d827e133c5385e5fa4dd5", + "abbreviatedOid": "9a58d18", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T07:01:14Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T07:01:14Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450417696", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "d523e62680f9c28d57ab6e934fde3cceedad9fff", + "abbreviatedOid": "d523e62", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T07:31:44Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T07:31:44Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450434508", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "commit": { + "oid": "d523e62680f9c28d57ab6e934fde3cceedad9fff", + "abbreviatedOid": "d523e62", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-17T09:12:38Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T09:12:38Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450499977", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "commit": { + "oid": "d523e62680f9c28d57ab6e934fde3cceedad9fff", + "abbreviatedOid": "d523e62", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-17T09:12:49Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T09:12:50Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450500107", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "commit": { + "oid": "d523e62680f9c28d57ab6e934fde3cceedad9fff", + "abbreviatedOid": "d523e62", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-17T09:15:27Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T09:15:27Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450501878", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "commit": { + "oid": "d523e62680f9c28d57ab6e934fde3cceedad9fff", + "abbreviatedOid": "d523e62", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-17T09:19:26Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-17T09:27:09Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-17T09:27:24Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-17T09:29:09Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T09:43:45Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450504549", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "d523e62680f9c28d57ab6e934fde3cceedad9fff", + "abbreviatedOid": "d523e62", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T13:41:05Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T13:41:05Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450666691", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "d523e62680f9c28d57ab6e934fde3cceedad9fff", + "abbreviatedOid": "d523e62", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T13:45:48Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T13:45:48Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450670339", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "d523e62680f9c28d57ab6e934fde3cceedad9fff", + "abbreviatedOid": "d523e62", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T13:48:25Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T13:48:25Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450672374", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "d523e62680f9c28d57ab6e934fde3cceedad9fff", + "abbreviatedOid": "d523e62", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T13:49:44Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T13:49:45Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450673448", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "d523e62680f9c28d57ab6e934fde3cceedad9fff", + "abbreviatedOid": "d523e62", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T13:51:31Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T13:51:31Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450674885", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "d523e62680f9c28d57ab6e934fde3cceedad9fff", + "abbreviatedOid": "d523e62", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-17T13:55:22Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T13:55:22Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450677951", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-17T21:41:27Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T21:41:28Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450971340", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-17T21:43:58Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-17T21:43:58Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450972270", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-18T05:01:16Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-18T05:01:16Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451031917", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-18T05:10:52Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-18T05:10:52Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451032394", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-18T05:15:54Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-18T05:15:54Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451032624", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-18T20:27:57Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-18T20:27:57Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451080613", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-07-18T20:34:47Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451080938", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-19T00:29:47Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-19T00:29:47Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451090006", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-19T00:36:56Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-19T00:36:56Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451090217", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-19T03:53:26Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-19T03:53:26Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451096456", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-19T04:10:29Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-19T04:10:30Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451097127", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-19T05:03:57Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-19T05:03:57Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451099031", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-19T05:42:23Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-19T05:42:23Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451100650", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-19T11:17:29Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-19T11:17:30Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451122160", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "createdAt": "2020-07-19T16:20:10Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-19T16:20:11Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451144989", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "createdAt": "2020-07-19T20:17:06Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-07-19T20:17:06Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451160079", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "commit": { + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "abbreviatedOid": "5ef8fe2", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-07-19T20:19:03Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-451160187", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 20, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-15T23:50:33Z", + "committedDate": "2020-07-15T23:50:33Z", + "pushedDate": null, + "abbreviatedOid": "69dab4d", + "oid": "69dab4da957de5faabcd107e212d94504ddbcd02", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-16T00:18:29Z", + "committedDate": "2020-07-16T00:18:29Z", + "pushedDate": "2020-07-16T00:18:46Z", + "abbreviatedOid": "f06ef34", + "oid": "f06ef34de97585e71bf411e236d0f03cac8d63b2", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-16T00:42:54Z", + "committedDate": "2020-07-16T00:42:54Z", + "pushedDate": "2020-07-16T00:43:12Z", + "abbreviatedOid": "190ade1", + "oid": "190ade1aa31bedb29e3de88907d23dc9d5812499", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/7fbaab6a3ef600244d1a74853f00ae2c957eae27/checks?check_suite_id=921156995", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7fbaab6a3ef600244d1a74853f00ae2c957eae27/checks?check_suite_id=921156995", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/7fbaab6a3ef600244d1a74853f00ae2c957eae27/checks?check_suite_id=921157562", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7fbaab6a3ef600244d1a74853f00ae2c957eae27/checks?check_suite_id=921157562", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-16T01:07:40Z", + "committedDate": "2020-07-16T01:07:40Z", + "pushedDate": "2020-07-16T01:07:59Z", + "abbreviatedOid": "7fbaab6", + "oid": "7fbaab6a3ef600244d1a74853f00ae2c957eae27", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T04:04:11Z", + "committedDate": "2020-07-17T04:04:11Z", + "pushedDate": null, + "abbreviatedOid": "3e8d0e7", + "oid": "3e8d0e7584598e887286a28323558f58b02659d2", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T04:09:49Z", + "committedDate": "2020-07-17T04:09:49Z", + "pushedDate": null, + "abbreviatedOid": "2a60294", + "oid": "2a60294322731a660a9f10561ffd4225d0f9ac99", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T04:16:09Z", + "committedDate": "2020-07-17T04:16:09Z", + "pushedDate": null, + "abbreviatedOid": "9355160", + "oid": "935516098b3b0873af1fc0acc238ac35a762092f", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T05:05:02Z", + "committedDate": "2020-07-17T05:05:02Z", + "pushedDate": null, + "abbreviatedOid": "018f6b2", + "oid": "018f6b24792de17d4fef873b5cbdcf6a51604239", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T05:06:46Z", + "committedDate": "2020-07-17T05:06:46Z", + "pushedDate": null, + "abbreviatedOid": "b94628f", + "oid": "b94628f068d1f9002ee5c1b3929f39d149924b17", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T05:07:29Z", + "committedDate": "2020-07-17T05:07:29Z", + "pushedDate": null, + "abbreviatedOid": "3b624ab", + "oid": "3b624abc418835c0e36c71b28619ef756e8efc3a", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T05:10:14Z", + "committedDate": "2020-07-17T05:10:14Z", + "pushedDate": null, + "abbreviatedOid": "08218f8", + "oid": "08218f877d6d6563cd0be093cf15d0ebb461a421", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T05:21:53Z", + "committedDate": "2020-07-17T05:21:53Z", + "pushedDate": null, + "abbreviatedOid": "c131040", + "oid": "c1310405cc148dd9dac46e731ed9b01fe5ab8656", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/53d67598c4a269d8f9dc4ff2e124031c1f9ba2ec/checks?check_suite_id=927112072", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/53d67598c4a269d8f9dc4ff2e124031c1f9ba2ec/checks?check_suite_id=927112072", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/53d67598c4a269d8f9dc4ff2e124031c1f9ba2ec/checks?check_suite_id=927112399", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/53d67598c4a269d8f9dc4ff2e124031c1f9ba2ec/checks?check_suite_id=927112399", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T05:22:29Z", + "committedDate": "2020-07-17T05:22:29Z", + "pushedDate": "2020-07-17T05:26:28Z", + "abbreviatedOid": "53d6759", + "oid": "53d67598c4a269d8f9dc4ff2e124031c1f9ba2ec", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T05:38:11Z", + "committedDate": "2020-07-17T05:38:11Z", + "pushedDate": null, + "abbreviatedOid": "11a4a6c", + "oid": "11a4a6c17885383cd5908a8fc9c61fd6822635d6", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/090cc1244a7e6a4f65d8ecca69a2f95824ab606b/checks?check_suite_id=927154716", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/090cc1244a7e6a4f65d8ecca69a2f95824ab606b/checks?check_suite_id=927154716", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/090cc1244a7e6a4f65d8ecca69a2f95824ab606b/checks?check_suite_id=927155018", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/090cc1244a7e6a4f65d8ecca69a2f95824ab606b/checks?check_suite_id=927155018", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T05:40:35Z", + "committedDate": "2020-07-17T05:40:35Z", + "pushedDate": "2020-07-17T05:43:46Z", + "abbreviatedOid": "090cc12", + "oid": "090cc1244a7e6a4f65d8ecca69a2f95824ab606b", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9a58d18295f73bd1975d827e133c5385e5fa4dd5/checks?check_suite_id=927239216", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9a58d18295f73bd1975d827e133c5385e5fa4dd5/checks?check_suite_id=927239216", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9a58d18295f73bd1975d827e133c5385e5fa4dd5/checks?check_suite_id=927239841", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9a58d18295f73bd1975d827e133c5385e5fa4dd5/checks?check_suite_id=927239841", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T06:12:55Z", + "committedDate": "2020-07-17T06:12:55Z", + "pushedDate": "2020-07-17T06:13:26Z", + "abbreviatedOid": "9a58d18", + "oid": "9a58d18295f73bd1975d827e133c5385e5fa4dd5", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/d523e62680f9c28d57ab6e934fde3cceedad9fff/checks?check_suite_id=927443575", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/d523e62680f9c28d57ab6e934fde3cceedad9fff/checks?check_suite_id=927443575", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/d523e62680f9c28d57ab6e934fde3cceedad9fff/checks?check_suite_id=927444722", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/d523e62680f9c28d57ab6e934fde3cceedad9fff/checks?check_suite_id=927444722", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T07:17:29Z", + "committedDate": "2020-07-17T07:17:29Z", + "pushedDate": "2020-07-17T07:19:16Z", + "abbreviatedOid": "d523e62", + "oid": "d523e62680f9c28d57ab6e934fde3cceedad9fff", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T13:56:43Z", + "committedDate": "2020-07-17T13:56:43Z", + "pushedDate": null, + "abbreviatedOid": "8bbe474", + "oid": "8bbe4749dc42d8edae9f1c7716679a0646fbb05c", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/6ec881b1bcc1e86ff7f26538aef4090489816a68/checks?check_suite_id=928997854", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/6ec881b1bcc1e86ff7f26538aef4090489816a68/checks?check_suite_id=928997854", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/6ec881b1bcc1e86ff7f26538aef4090489816a68/checks?check_suite_id=928999371", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/6ec881b1bcc1e86ff7f26538aef4090489816a68/checks?check_suite_id=928999371", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T13:57:54Z", + "committedDate": "2020-07-17T13:57:54Z", + "pushedDate": "2020-07-17T13:58:09Z", + "abbreviatedOid": "6ec881b", + "oid": "6ec881b1bcc1e86ff7f26538aef4090489816a68", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/5ef8fe2907257beac41e27c3dc2399a087eddb67/checks?check_suite_id=929063819", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/5ef8fe2907257beac41e27c3dc2399a087eddb67/checks?check_suite_id=929063819", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/5ef8fe2907257beac41e27c3dc2399a087eddb67/checks?check_suite_id=929065697", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/5ef8fe2907257beac41e27c3dc2399a087eddb67/checks?check_suite_id=929065697", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-17T14:11:42Z", + "committedDate": "2020-07-17T14:11:42Z", + "pushedDate": "2020-07-17T14:12:06Z", + "abbreviatedOid": "5ef8fe2", + "oid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 14, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY1OTA5NTc3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@reubenrybnik Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n- `underscore` [on npm](https://www.npmjs.com/package/underscore), [on unpkg](https://unpkg.com/browse/underscore@latest)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can help you merge this PR once someone else signs off on it.\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", + "createdAt": "2020-07-16T01:10:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1OTA5NTc3OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @borisyankov @jbaldwin @ccurrens @confususs @jgonggrijp @ffflorian @regevbr @peterblazejewicz — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120/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": "2020-07-16T01:10:34Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1OTEzMTQyNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #46120 | diff |\n| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 64.1 | 62.6 | -2.4% |\n| Type count | 10127 | 9725 | -4% |\n| Assignability cache size | 1540 | 1145 | -26% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 4836 | 5205 | +8% |\n| Identifiers in tests | 4836 | 5205 | +8% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 147.9 | 146.6 | -0.9% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 11.6% | 11.4% | |\n|     Worst duration (ms) | 273.3 | 255.5 | -6.5% |\n|     Worst identifier | [context](/DefinitelyTyped/DefinitelyTyped/blob/daca975559c611deb7fec9f8ebf7151770432c35/types/underscore/underscore-tests.ts#L692) | [_](/DefinitelyTyped/DefinitelyTyped/blob/df9a1349721a5ebdd34538bb63ce5e60c81badb2/types/underscore/underscore-tests.ts#L1926) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 142.3 | 141.0 | -1.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 12.0% | 11.5% | -3.9% |\n|     Worst duration (ms) | 286.9 | 269.7 | -6.0% |\n|     Worst identifier | [extractChainTypes](/DefinitelyTyped/DefinitelyTyped/blob/daca975559c611deb7fec9f8ebf7151770432c35/types/underscore/underscore-tests.ts#L1569) | [extractUnderscoreTypes](/DefinitelyTyped/DefinitelyTyped/blob/df9a1349721a5ebdd34538bb63ce5e60c81badb2/types/underscore/underscore-tests.ts#L1927) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-07-16T03:12:44Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1OTczOTgwNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@reubenrybnik One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-07-16T23:49:52Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1OTg2NDE1Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@reubenrybnik The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/53d67598c4a269d8f9dc4ff2e124031c1f9ba2ec/checks?check_suite_id=927112072).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-07-17T05:29:54Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1OTg3MTM1Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@jgonggrijp Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-07-17T05:47:20Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDU5Mzk4Ng==", + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "body": "Thanks @jgonggrijp! I appreciate your attentiveness to these reviews and the ideas you've provided throughout this process that have helped to make these changes much better than I'd originally planned. From a PR count perspective, this puts us at about the halfway point in my current planned set (which has changed a little from the set I originally mentioned in #45304).\r\n\r\nI'll wait until at least 7PM UTC ~tomorrow~ 7/19 to merge this just in case you'd like to make any further replies to my spew about `Falsy`, and I'll try to do a better job of organizing my thoughts and double-checking my work more thoroughly before replying in the future since I feel like there have been a couple of conversations so far during this process where I've ended up going off the rails a bit.", + "createdAt": "2020-07-19T06:08:46Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDYzMDI5OA==", + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "body": "> Thanks @jgonggrijp! I appreciate your attentiveness to these reviews and the ideas you've provided throughout this process that have helped to make these changes much better than I'd originally planned.\r\n\r\nGlad to hear that! That's the main reason for doing it so I'm glad it works.\r\n\r\n> From a PR count perspective, this puts us at about the halfway point in my current planned set (which has changed a little from the set I originally mentioned in #45304).\r\n\r\nOnly halfway, haha.\r\n\r\n> \r\n> I'll wait until at least 7PM UTC ~tomorrow~ 7/19 to merge this just in case you'd like to make any further replies to my spew about `Falsy`,\r\n\r\nI made a small reply. Unless you want to make further decisions depend on whatever discussion might come after that, the rest of the \"grace period\" is not necessary as far as I'm concerned.\r\n\r\n> and I'll try to do a better job of organizing my thoughts and double-checking my work more thoroughly before replying in the future since I feel like there have been a couple of conversations so far during this process where I've ended up going off the rails a bit.\r\n\r\nIt's always worth striving to better organize your thoughts and to double-check your work, but please don't be so hard on yourself. I'm quite sure I've made a few mistakes as well, especially when it comes to realism about what the TS compiler will do. Humans in general are (intensely) fallible, that's why we tend to get so much better results when we team up.\r\n\r\nBy the way, I've [been](https://twitter.com/juliangonggrijp/status/1279190504786276352) [tweeting](https://twitter.com/juliangonggrijp/status/1278433684492779521) about our reviews and the tweets seem to attract some interest. If you happen to be on Twitter, it may be nice to associate. (I tried finding you but couldn't be sure.)", + "createdAt": "2020-07-19T11:35:42Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDY3MjUwNQ==", + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "body": "> Only halfway, haha.\r\n\r\nWe are probably more than halfway along with regards to effort though 🎉 \r\n\r\n> I made a small reply. Unless you want to make further decisions depend on whatever discussion might come after that, the rest of the \"grace period\" is not necessary as far as I'm concerned.\r\n\r\nSounds good, I'll hit the go button now then 😄 \r\n\r\n> By the way, I've been tweeting about our reviews and the tweets seem to attract some interest. If you happen to be on Twitter, it may be nice to associate. (I tried finding you but couldn't be sure.)\r\n\r\nSorry to disappoint here, but while I made a Twitter account once upon a time and so can technically be said to exist there I've never actually tweeted with it (and off the top of my head I don't even remember my handle). Happy to hear, though, that others might be finding this work to be valuable or interesting 😁 ", + "createdAt": "2020-07-19T16:31:39Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "jgonggrijp", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDY3MzIwMw==", + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "body": "Ready to merge", + "createdAt": "2020-07-19T16:36:44Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDY3MzM0OA==", + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "body": "Hmm, sorry @jgonggrijp, I didn't add any commits but somehow something one of us did surprisingly seems to have caused your approval to not apply anymore as indicated by [this tag removal](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#event-3562435181). If you wouldn't mind clicking approve one more time on this, I'd appreciate it!", + "createdAt": "2020-07-19T16:37:52Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDcwMzA5Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "I just published [`@types/underscore@1.10.10` to npm](https://www.npmjs.com/package/@types/underscore).", + "createdAt": "2020-07-19T20:23:11Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDcxNzQyNA==", + "author": { + "login": "reubenrybnik", + "__typename": "User" + }, + "body": "Hmm, another interesting interaction here, not the biggest fan of how my previous \"Ready to merge\" caused this to be merged at the moment of your re-approval since I feel like a merge should only be triggered when the author is the one taking an action 😕 ", + "createdAt": "2020-07-19T22:12:47Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDcxOTUxNA==", + "author": { + "login": "jgonggrijp", + "__typename": "User" + }, + "body": "That was probably meant to be smart. But I agree it's unexpected.", + "createdAt": "2020-07-19T22:33:41Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/underscore/index.d.ts", + "additions": 147, + "deletions": 177, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/underscore/underscore-tests.ts", + "additions": 276, + "deletions": 16, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDE1OTMyNzc=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2", + "name": "Needs Maintainer Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/46120/derived.json b/packages/mergebot/src/_tests/fixtures/46120/derived.json new file mode 100644 index 0000000000..738a4c0c96 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46120/derived.json @@ -0,0 +1,56 @@ +{ + "type": "info", + "now": "2020-07-20T11:47:54.872Z", + "pr_number": 46120, + "author": "reubenrybnik", + "headCommitOid": "5ef8fe2907257beac41e27c3dc2399a087eddb67", + "mergeBaseOid": "master", + "lastPushDate": "2020-07-17T14:12:06.000Z", + "lastActivityDate": "2020-07-19T22:33:41.000Z", + "mergeRequestDate": "2020-07-19T16:36:44.000Z", + "mergeRequestUser": "reubenrybnik", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": "underscore", + "kind": "edit", + "files": [ + { + "path": "types/underscore/index.d.ts", + "kind": "definition" + }, + { + "path": "types/underscore/underscore-tests.ts", + "kind": "test" + } + ], + "owners": [ + "borisyankov", + "jbaldwin", + "ccurrens", + "confususs", + "jgonggrijp", + "ffflorian", + "regevbr", + "peterblazejewicz", + "reubenrybnik" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "jgonggrijp", + "date": "2020-07-19T20:19:03.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/46120/mutations.json b/packages/mergebot/src/_tests/fixtures/46120/mutations.json new file mode 100644 index 0000000000..4d298c2c1d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46120/mutations.json @@ -0,0 +1,38 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY1OTA5NTc3MA==", + "body": "@reubenrybnik Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `underscore` — [on npm](https://www.npmjs.com/package/underscore), [on unpkg](https://unpkg.com/browse/underscore@latest/) (author is owner)\n - owner-approval: @jgonggrijp\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=46120&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: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNDE1OTMyNzc=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDQ5ODI3NTQ3", + "body": "@reubenrybnik: Everything looks good here. I am ready to merge this PR (at 5ef8fe2) 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(@borisyankov, @jbaldwin, @ccurrens, @confususs, @jgonggrijp, @ffflorian, @regevbr, @peterblazejewicz: you can do this too.)\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDQ5ODI3NTQ3", + "body": ":passport_control: Hi @reubenrybnik,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-???) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/46120/result.json b/packages/mergebot/src/_tests/fixtures/46120/result.json new file mode 100644 index 0000000000..be684f888e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46120/result.json @@ -0,0 +1,26 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Popular package", + "Owner Approved", + "Author is Owner", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@reubenrybnik Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `underscore` — [on npm](https://www.npmjs.com/package/underscore), [on unpkg](https://unpkg.com/browse/underscore@latest/) (author is owner)\n - owner-approval: @jgonggrijp\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=46120&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": "@reubenrybnik: Everything looks good here. I am ready to merge this PR (at 5ef8fe2) 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(@borisyankov, @jbaldwin, @ccurrens, @confususs, @jgonggrijp, @ffflorian, @regevbr, @peterblazejewicz: you can do this too.)" + }, + { + "tag": "wait-for-merge-offer-5ef8fe2", + "status": ":passport_control: Hi @reubenrybnik,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-???) are green. I will let you know once that happens.\n\nThanks, and happy typing!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/46191/_downloads.json b/packages/mergebot/src/_tests/fixtures/46191/_downloads.json new file mode 100644 index 0000000000..477cb8dd97 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46191/_downloads.json @@ -0,0 +1,3 @@ +{ + "apollo-upload-client": 198332 +} diff --git a/packages/mergebot/src/_tests/fixtures/46191/_files.json b/packages/mergebot/src/_tests/fixtures/46191/_files.json new file mode 100644 index 0000000000..ff29d59516 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46191/_files.json @@ -0,0 +1,8 @@ +{ + "3cc81dbde57a1b0eda6f69f539fa49b8d420adff:types/apollo-upload-client/package.json": "{\n \"private\": true,\n \"dependencies\": {\n \"@apollo/client\": \"^3.0.2\",\n \"graphql\": \"^15.3.0\"\n }\n}\n", + "3cc81dbde57a1b0eda6f69f539fa49b8d420adff:types/apollo-upload-client/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\",\n \"dom\",\n \"esnext.asynciterable\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"paths\":{\n \"@apollo/client\": [\"apollo__client\"]\n }\n },\n \"files\": [\n \"index.d.ts\",\n \"apollo-upload-client-tests.ts\"\n ]\n}\n", + "master:types/apollo-upload-client/package.json": "{\n \"private\": true,\n \"dependencies\": {\n \"@apollo/client\": \"^3.1.3\",\n \"graphql\": \"^15.3.0\"\n }\n}\n", + "master:types/apollo-upload-client/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\",\n \"dom\",\n \"esnext.asynciterable\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"apollo-upload-client-tests.ts\"\n ]\n}\n", + "master:types/apollo-upload-client/index.d.ts": "// Type definitions for apollo-upload-client 8.1\n// Project: https://github.com/jaydenseric/apollo-upload-client#readme\n// Definitions by: Edward Sammut Alessi \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.1\n\nimport { ApolloLink } from \"apollo-link\";\nimport { HttpOptions } from \"apollo-link-http-common\";\n\nexport { ReactNativeFile } from \"extract-files\";\n\ndeclare global {\n interface GlobalFetch {\n fetch: WindowOrWorkerGlobalScope[\"fetch\"];\n }\n}\n\n/**\n * `createUploadLink` options match `createHttpLink` options\n * @param linkOptions `HttpOptions`\n */\nexport function createUploadLink(linkOptions?: HttpOptions): ApolloLink;\n", + "3cc81dbde57a1b0eda6f69f539fa49b8d420adff:types/apollo-upload-client/index.d.ts": "// Type definitions for apollo-upload-client 14.0\n// Project: https://github.com/jaydenseric/apollo-upload-client#readme\n// Definitions by: Edward Sammut Alessi \n// Jordan Overbye \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.9\n\nimport { ApolloLink } from \"apollo-link\";\nimport { HttpOptions } from \"apollo-link-http-common\";\n\nexport { ReactNativeFile } from \"extract-files\";\n\ndeclare global {\n interface GlobalFetch {\n fetch: WindowOrWorkerGlobalScope[\"fetch\"];\n }\n}\n\n/**\n * `createUploadLink` options match `createHttpLink` options\n * @param linkOptions `HttpOptions`\n */\nexport function createUploadLink(linkOptions?: HttpOptions): ApolloLink;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/46191/_response.json b/packages/mergebot/src/_tests/fixtures/46191/_response.json new file mode 100644 index 0000000000..b799c5181d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46191/_response.json @@ -0,0 +1,304 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDUzMTM0NTI0", + "title": "Update types for apollo-upload-client to support apollo/client v3", + "lastEditedAt": "2020-07-20T07:16:25Z", + "author": { + "login": "jordanoverbye", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-07-20T07:08:31Z", + "labels": { + "nodes": [ + { + "name": "Check Config", + "__typename": "Label" + }, + { + "name": "The CI failed", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 46191, + "state": "OPEN", + "headRefOid": "3cc81dbde57a1b0eda6f69f539fa49b8d420adff", + "changedFiles": 3, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-20T07:08:35Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-20T07:08:36Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-20T07:10:31Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-20T07:10:33Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 6, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-20T06:40:55Z", + "committedDate": "2020-07-20T06:40:55Z", + "pushedDate": null, + "abbreviatedOid": "0d41346", + "oid": "0d413463f2508aaca13f7e2db0672ede7cdfcd2c", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-20T06:41:10Z", + "committedDate": "2020-07-20T06:41:10Z", + "pushedDate": "2020-07-20T06:41:31Z", + "abbreviatedOid": "35d1c2e", + "oid": "35d1c2e5b3b189afe46ee8e22a846d2318225f2c", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-20T06:42:52Z", + "committedDate": "2020-07-20T06:42:52Z", + "pushedDate": "2020-07-20T06:43:02Z", + "abbreviatedOid": "0543c36", + "oid": "0543c3671ea09bf72107608d6423ea8fc9ba15e8", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-20T06:51:04Z", + "committedDate": "2020-07-20T06:51:04Z", + "pushedDate": null, + "abbreviatedOid": "df52bdb", + "oid": "df52bdb9dcce04e722ab4216d0cd1c774b8c954b", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-20T06:52:46Z", + "committedDate": "2020-07-20T06:52:46Z", + "pushedDate": null, + "abbreviatedOid": "3a34ec8", + "oid": "3a34ec84fb7a6c383c9d9a785f1cdca37aa18a96", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3cc81dbde57a1b0eda6f69f539fa49b8d420adff/checks?check_suite_id=938074936", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3cc81dbde57a1b0eda6f69f539fa49b8d420adff/checks?check_suite_id=938074936", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3cc81dbde57a1b0eda6f69f539fa49b8d420adff/checks?check_suite_id=938075790", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3cc81dbde57a1b0eda6f69f539fa49b8d420adff/checks?check_suite_id=938075790", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-20T06:53:19Z", + "committedDate": "2020-07-20T06:53:19Z", + "pushedDate": "2020-07-20T06:54:57Z", + "abbreviatedOid": "3cc81db", + "oid": "3cc81dbde57a1b0eda6f69f539fa49b8d420adff", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDg0NjQ2NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@jordanoverbye 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 which I will keep updated.***\n\n\n## Code Reviews\n\nBecause this PR edits the configuration file, it can be merged once it's reviewed by a DT maintainer.\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have passed\n * ❌ A DT maintainer needs to approve changes which affect module config files\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": "2020-07-20T07:08:35Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDg0NjQ3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @Slessi — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46191/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": "2020-07-20T07:08:36Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDg0NzI3MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@jordanoverbye The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3cc81dbde57a1b0eda6f69f539fa49b8d420adff/checks?check_suite_id=938074936).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-07-20T07:10:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/apollo-upload-client/index.d.ts", + "additions": 15, + "deletions": 10, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/apollo-upload-client/package.json", + "additions": 2, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/apollo-upload-client/tsconfig.json", + "additions": 4, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 3 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDIxNjU2MzU=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/46191/derived.json b/packages/mergebot/src/_tests/fixtures/46191/derived.json new file mode 100644 index 0000000000..155fcf2920 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46191/derived.json @@ -0,0 +1,46 @@ +{ + "type": "info", + "now": "2020-07-20T22:17:53.067Z", + "pr_number": 46191, + "author": "jordanoverbye", + "headCommitOid": "3cc81dbde57a1b0eda6f69f539fa49b8d420adff", + "mergeBaseOid": "master", + "lastPushDate": "2020-07-20T06:54:57.000Z", + "lastActivityDate": "2020-07-20T07:08:31.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "apollo-upload-client", + "kind": "edit", + "files": [ + { + "path": "types/apollo-upload-client/index.d.ts", + "kind": "definition" + }, + { + "path": "types/apollo-upload-client/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/apollo-upload-client/tsconfig.json", + "kind": "package-meta-ok" + } + ], + "owners": [ + "Slessi" + ], + "addedOwners": [ + "jordanoverbye" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "fail", + "ciUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3cc81dbde57a1b0eda6f69f539fa49b8d420adff/checks?check_suite_id=938074936" +} diff --git a/packages/mergebot/src/_tests/fixtures/46191/mutations.json b/packages/mergebot/src/_tests/fixtures/46191/mutations.json new file mode 100644 index 0000000000..18c6982135 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46191/mutations.json @@ -0,0 +1,52 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDg0NjQ2NA==", + "body": "@jordanoverbye 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* `apollo-upload-client` — [on npm](https://www.npmjs.com/package/apollo-upload-client), [on unpkg](https://unpkg.com/browse/apollo-upload-client@latest/)\n - 1 added owner: ✎@jordanoverbye\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=46191&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\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----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyNDk1OTc2ODI5", + "MDU6TGFiZWwyMTU0NzUwNDcz" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDUzMTM0NTI0" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDUzMTM0NTI0" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDUzMTM0NTI0", + "body": "Hey @jordanoverbye,\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" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDg0NzI3MQ==", + "body": "@jordanoverbye The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3cc81dbde57a1b0eda6f69f539fa49b8d420adff/checks?check_suite_id=938074936).\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/46191/result.json b/packages/mergebot/src/_tests/fixtures/46191/result.json new file mode 100644 index 0000000000..08c69d8916 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46191/result.json @@ -0,0 +1,29 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "The CI failed", + "Edits Owners", + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @jordanoverbye,\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": "@jordanoverbye 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* `apollo-upload-client` — [on npm](https://www.npmjs.com/package/apollo-upload-client), [on unpkg](https://unpkg.com/browse/apollo-upload-client@latest/)\n - 1 added owner: ✎@jordanoverbye\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=46191&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\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----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @Slessi — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46191/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." + }, + { + "tag": "gh-actions-complaint-3cc81db", + "status": "@jordanoverbye The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3cc81dbde57a1b0eda6f69f539fa49b8d420adff/checks?check_suite_id=938074936).\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.**" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/46196/_downloads.json b/packages/mergebot/src/_tests/fixtures/46196/_downloads.json new file mode 100644 index 0000000000..7925fa73e5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46196/_downloads.json @@ -0,0 +1,3 @@ +{ + "date-arithmetic": 7590 +} diff --git a/packages/mergebot/src/_tests/fixtures/46196/_files.json b/packages/mergebot/src/_tests/fixtures/46196/_files.json new file mode 100644 index 0000000000..5ed435957e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46196/_files.json @@ -0,0 +1,7 @@ +{ + "2f300d234e09e9e34c88e884f6466f2d6d0db399:types/date-arithmetic/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\"es6\"],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\"../\"],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\"index.d.ts\", \"some-new-file.ts\"]\n}\n", + "2f300d234e09e9e34c88e884f6466f2d6d0db399:types/date-arithmetic/tslint.json": "{\n \"extends\": \"@definitelytyped/dtslint/dt.json\"\n}\n", + "master:types/date-arithmetic/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"an-old-file.ts\",\n \"index.d.ts\",\n \"date-arithmetic-tests.ts\"\n ]\n}\n", + "master:types/date-arithmetic/index.d.ts": "// Type definitions for date-arithmetic v3.1.0\n// Project: https://github.com/jquense/date-math\n// Definitions by: Sergii Paryzhskyi \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\ntype Unit = 'second' | 'minutes' | 'hours' | 'day' | 'week' | 'month' | 'year' | 'decade' | 'century';\n\n/** dateArithmetic Public Instance Methods */\ninterface dateArithmeticStatic {\n /** Add specified amount of units to a provided date and return new date as a result */\n add(date: Date, num: number, unit: Unit): Date;\n\n /** Subtract specified amount of units from a provided date and return new date as a result */\n subtract(date: Date, num: number, unit: Unit): Date;\n\n /** Compare two dates and return true if they are equal */\n eq(date: Date, date2: Date): Boolean;\n\n /** Compare two dates and return false if they are equal */\n neq(date: Date, date2: Date): Boolean;\n\n /** Compare two dates and return true if date is greater than date2 */\n gt(date: Date, date2: Date): Boolean;\n\n /** Compare two dates and return true if date is greater or equal than date2 */\n gte(date: Date, date2: Date): Boolean;\n\n /** Compare two dates and return true if date is less than date2 */\n lt(date: Date, date2: Date): Boolean;\n\n /** Compare two dates and return true if date is less or equal than date2 */\n lte(date: Date, date2: Date): Boolean;\n}\n\ndeclare module 'dateArithmetic' {\n const dateArithmetic: dateArithmeticStatic;\n export = dateArithmetic;\n}\n", + "2f300d234e09e9e34c88e884f6466f2d6d0db399:types/date-arithmetic/index.d.ts": "// Type definitions for date-arithmetic v4.1\n// Project: https://github.com/jquense/date-math\n// Definitions by: Sergii Paryzhskyi \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\ntype Unit = 'second' | 'minutes' | 'hours' | 'day' | 'week' | 'month' | 'year' | 'decade' | 'century';\n\n/** dateArithmetic Public Instance Methods */\ninterface dateArithmeticStatic {\n /** Add specified amount of units to a provided date and return new date as a result */\n add(date: Date, num: number, unit: Unit): Date;\n\n /** Subtract specified amount of units from a provided date and return new date as a result */\n subtract(date: Date, num: number, unit: Unit): Date;\n\n /** Compare two dates and return true if they are equal */\n eq(date: Date, date2: Date): Boolean;\n\n /** Compare two dates and return false if they are equal */\n neq(date: Date, date2: Date): Boolean;\n\n /** Compare two dates and return true if date is greater than date2 */\n gt(date: Date, date2: Date): Boolean;\n\n /** Compare two dates and return true if date is greater or equal than date2 */\n gte(date: Date, date2: Date): Boolean;\n\n /** Compare two dates and return true if date is less than date2 */\n lt(date: Date, date2: Date): Boolean;\n\n /** Compare two dates and return true if date is less or equal than date2 */\n lte(date: Date, date2: Date): Boolean;\n}\n\ndeclare module 'dateArithmetic' {\n const dateArithmetic: dateArithmeticStatic;\n export = dateArithmetic;\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/46196/_response.json b/packages/mergebot/src/_tests/fixtures/46196/_response.json new file mode 100644 index 0000000000..6a23521ac9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46196/_response.json @@ -0,0 +1,261 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDUzMzI5NzQ0", + "title": "chore(date-arithmetic): add/update type definitions and tests", + "lastEditedAt": null, + "author": { + "login": "bytetyde", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-07-20T11:02:49Z", + "labels": { + "nodes": [ + { + "name": "Check Config", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 46196, + "state": "OPEN", + "headRefOid": "2f300d234e09e9e34c88e884f6466f2d6d0db399", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-20T11:06:05Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-20T11:06:06Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-20T11:09:02Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9aa5ec9b563c2239f43673a423d00195d1340124/checks?check_suite_id=939053485", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9aa5ec9b563c2239f43673a423d00195d1340124/checks?check_suite_id=939053485", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9aa5ec9b563c2239f43673a423d00195d1340124/checks?check_suite_id=939054252", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9aa5ec9b563c2239f43673a423d00195d1340124/checks?check_suite_id=939054252", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-20T10:53:39Z", + "committedDate": "2020-07-20T10:53:39Z", + "pushedDate": "2020-07-20T10:53:59Z", + "abbreviatedOid": "9aa5ec9", + "oid": "9aa5ec9b563c2239f43673a423d00195d1340124", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/2f300d234e09e9e34c88e884f6466f2d6d0db399/checks?check_suite_id=939335472", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/2f300d234e09e9e34c88e884f6466f2d6d0db399/checks?check_suite_id=939335472", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/2f300d234e09e9e34c88e884f6466f2d6d0db399/checks?check_suite_id=939336523", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/2f300d234e09e9e34c88e884f6466f2d6d0db399/checks?check_suite_id=939336523", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-20T12:12:28Z", + "committedDate": "2020-07-20T12:12:28Z", + "pushedDate": "2020-07-20T12:12:39Z", + "abbreviatedOid": "2f300d2", + "oid": "2f300d234e09e9e34c88e884f6466f2d6d0db399", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDk2MDczOQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@bytetyde 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 which I will keep updated.***\n\n\n## Code Reviews\n\nBecause this PR edits the configuration file, it can be merged once it's reviewed by a DT maintainer.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ A DT maintainer needs to approve changes which affect module config files\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": "2020-07-20T11:06:05Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDk2MDc0Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @HeeL — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46196/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": "2020-07-20T11:06:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDk2MTkxMw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #46196 | diff |\n| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 36.6 | 32.9 | -10.0% |\n| Type count | 2158 | 2180 | +1% |\n| Assignability cache size | 95 | 95 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 79 | 199 | +152% |\n| Identifiers in tests | 79 | 199 | +152% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 86.0 | 80.6 | -6.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 22.5% | 17.3% | |\n|     Worst duration (ms) | 141.3 | 122.3 | -13.4% |\n|     Worst identifier | [Date](/DefinitelyTyped/DefinitelyTyped/blob/8c9eba50792c8092506c875a8fb1467a479d3f29/types/date-arithmetic/date-arithmetic-tests.ts#L26) | [Date](/DefinitelyTyped/DefinitelyTyped/blob/bf0b09db5b7cd30281afbcfaecf6429b2e7632c6/types/date-arithmetic/date-arithmetic-tests.ts#L71) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 85.2 | 79.8 | -6.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 21.3% | 16.0% | -25.2% |\n|     Worst duration (ms) | 137.2 | 122.7 | -10.5% |\n|     Worst identifier | [Date](/DefinitelyTyped/DefinitelyTyped/blob/8c9eba50792c8092506c875a8fb1467a479d3f29/types/date-arithmetic/date-arithmetic-tests.ts#L27) | [century](/DefinitelyTyped/DefinitelyTyped/blob/bf0b09db5b7cd30281afbcfaecf6429b2e7632c6/types/date-arithmetic/date-arithmetic-tests.ts#L71) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-07-20T11:09:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/date-arithmetic/date-arithmetic-tests.ts", + "additions": 47, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/date-arithmetic/index.d.ts", + "additions": 45, + "deletions": 31, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/date-arithmetic/tsconfig.json", + "additions": 3, + "deletions": 10, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/date-arithmetic/tslint.json", + "additions": 6, + "deletions": 6, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDIxODE2MDk=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy", + "name": "Needs Maintainer Review", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/46196/derived.json b/packages/mergebot/src/_tests/fixtures/46196/derived.json new file mode 100644 index 0000000000..e47a37ec05 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46196/derived.json @@ -0,0 +1,48 @@ +{ + "type": "info", + "now": "2020-07-20T22:18:56.331Z", + "pr_number": 46196, + "author": "bytetyde", + "headCommitOid": "2f300d234e09e9e34c88e884f6466f2d6d0db399", + "mergeBaseOid": "master", + "lastPushDate": "2020-07-20T12:12:39.000Z", + "lastActivityDate": "2020-07-20T12:12:39.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "date-arithmetic", + "kind": "edit", + "files": [ + { + "path": "types/date-arithmetic/date-arithmetic-tests.ts", + "kind": "test" + }, + { + "path": "types/date-arithmetic/index.d.ts", + "kind": "definition" + }, + { + "path": "types/date-arithmetic/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/date-arithmetic/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [ + "HeeL" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/46196/mutations.json b/packages/mergebot/src/_tests/fixtures/46196/mutations.json new file mode 100644 index 0000000000..9169bf3897 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46196/mutations.json @@ -0,0 +1,11 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY2MDk2MDczOQ==", + "body": "@bytetyde 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* `date-arithmetic` — [on npm](https://www.npmjs.com/package/date-arithmetic), [on unpkg](https://unpkg.com/browse/date-arithmetic@latest/)\n - Config files to check:\n - [`date-arithmetic/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46196/files/2f300d234e09e9e34c88e884f6466f2d6d0db399#diff-8a0e58ed81bb07faa7305e5aa6a89df624cce70ab9ab05277cdb4006c340a305): edited\n\n## Code Reviews\n\nBecause this PR edits the configuration file, 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=46196&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 module config files\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/46196/result.json b/packages/mergebot/src/_tests/fixtures/46196/result.json new file mode 100644 index 0000000000..26a03616bd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46196/result.json @@ -0,0 +1,19 @@ +{ + "projectColumn": "Needs Maintainer Review", + "labels": [ + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@bytetyde 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* `date-arithmetic` — [on npm](https://www.npmjs.com/package/date-arithmetic), [on unpkg](https://unpkg.com/browse/date-arithmetic@latest/)\n - Config files to check:\n - [`date-arithmetic/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46196/files/2f300d234e09e9e34c88e884f6466f2d6d0db399#diff-8a0e58ed81bb07faa7305e5aa6a89df624cce70ab9ab05277cdb4006c340a305): edited\n\n## Code Reviews\n\nBecause this PR edits the configuration file, 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=46196&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 module config files\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", + "status": "🔔 @HeeL — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46196/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/46279/_downloads.json b/packages/mergebot/src/_tests/fixtures/46279/_downloads.json new file mode 100644 index 0000000000..ce57539d4b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46279/_downloads.json @@ -0,0 +1,3 @@ +{ + "phoenix_live_view": 1639 +} diff --git a/packages/mergebot/src/_tests/fixtures/46279/_files.json b/packages/mergebot/src/_tests/fixtures/46279/_files.json new file mode 100644 index 0000000000..978daedae2 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46279/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/phoenix_live_view/index.d.ts": "// Type definitions for phoenix_live_view 0.13\n// Project: https://github.com/phoenixframework/phoenix_live_view\n// Definitions by: Peter Zingg \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n", + "80322389c71c13e0fca466b744b35b742a3ee161:types/phoenix_live_view/index.d.ts": "// Type definitions for phoenix_live_view 0.14\n// Project: https://github.com/phoenixframework/phoenix_live_view\n// Definitions by: Peter Zingg \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/46279/_response.json b/packages/mergebot/src/_tests/fixtures/46279/_response.json new file mode 100644 index 0000000000..7081a6829c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46279/_response.json @@ -0,0 +1,179 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDU1NDI5NDU3", + "title": "phoenix_live_view v0.14.2", + "lastEditedAt": null, + "author": { + "login": "pzingg", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "createdAt": "2020-07-23T01:06:45Z", + "labels": { + "nodes": [ + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "No Other Owners", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 46279, + "state": "OPEN", + "headRefOid": "80322389c71c13e0fca466b744b35b742a3ee161", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-23T01:09:59Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-07-23T01:10:00Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "sheetalkamat", + "__typename": "User" + }, + "createdAt": "2020-07-23T18:40:41Z", + "projectColumnName": "Waiting for Code Reviews" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/80322389c71c13e0fca466b744b35b742a3ee161/checks?check_suite_id=953025934", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/80322389c71c13e0fca466b744b35b742a3ee161/checks?check_suite_id=953025934", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/80322389c71c13e0fca466b744b35b742a3ee161/checks?check_suite_id=953026463", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/80322389c71c13e0fca466b744b35b742a3ee161/checks?check_suite_id=953026463", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-07-23T01:03:20Z", + "committedDate": "2020-07-23T01:03:20Z", + "pushedDate": "2020-07-23T01:03:50Z", + "abbreviatedOid": "8032238", + "oid": "80322389c71c13e0fca466b744b35b742a3ee161", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 2, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY2Mjc3Mjk1MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@pzingg Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n This PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Have you considered [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#testing) 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\n## Code Reviews\n\nThis PR can be merged once it's reviewed.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ A DT maintainer can merge changes when there are no other reviewers\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": "2020-07-23T01:09:59Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY2Mjc3Mjk1NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @pzingg — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46279/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2020-07-23T01:10:00Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/phoenix_live_view/index.d.ts", + "additions": 22, + "deletions": 18, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 1 + }, + "projectCards": { + "nodes": [], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/46279/derived.json b/packages/mergebot/src/_tests/fixtures/46279/derived.json new file mode 100644 index 0000000000..4890ffc426 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46279/derived.json @@ -0,0 +1,36 @@ +{ + "type": "info", + "now": "2020-07-23T18:40:42.000Z", + "pr_number": 46279, + "author": "pzingg", + "headCommitOid": "80322389c71c13e0fca466b744b35b742a3ee161", + "mergeBaseOid": "master", + "lastPushDate": "2020-07-23T01:03:50.000Z", + "lastActivityDate": "2020-07-23T18:40:41.000Z", + "maintainerBlessed": "Waiting for Code Reviews", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "phoenix_live_view", + "kind": "edit", + "files": [ + { + "path": "types/phoenix_live_view/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "pzingg" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/46279/mutations.json b/packages/mergebot/src/_tests/fixtures/46279/mutations.json new file mode 100644 index 0000000000..ef67566b61 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46279/mutations.json @@ -0,0 +1,29 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY2Mjc3Mjk1MA==", + "body": "@pzingg Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `phoenix_live_view` — [on npm](https://www.npmjs.com/package/phoenix_live_view), [on unpkg](https://unpkg.com/browse/phoenix_live_view@latest/) (author is owner)\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=46279&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 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" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0NDU1NDI5NDU3", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDU1NDI5NDU3", + "body": "Hey @pzingg,\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/46279/result.json b/packages/mergebot/src/_tests/fixtures/46279/result.json new file mode 100644 index 0000000000..2c2de3bea7 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46279/result.json @@ -0,0 +1,25 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "Author is Owner", + "No Other Owners", + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @pzingg,\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": "@pzingg Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `phoenix_live_view` — [on npm](https://www.npmjs.com/package/phoenix_live_view), [on unpkg](https://unpkg.com/browse/phoenix_live_view@latest/) (author is owner)\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=46279&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 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", + "status": "🔔 @pzingg — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46279/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/46804/_downloads.json b/packages/mergebot/src/_tests/fixtures/46804/_downloads.json new file mode 100644 index 0000000000..7b3cfab8b0 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46804/_downloads.json @@ -0,0 +1,3 @@ +{ + "react-d3-graph": 2566 +} diff --git a/packages/mergebot/src/_tests/fixtures/46804/_files.json b/packages/mergebot/src/_tests/fixtures/46804/_files.json new file mode 100644 index 0000000000..a6c7979cdf --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46804/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/react-d3-graph/index.d.ts": "// Type definitions for react-d3-graph 2.3\n// Project: https://github.com/danielcaldas/react-d3-graph#readme\n// Definitions by: Harry Goode \n// Adina Todoran \n// Robin Leclerc \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\nimport { Component, MouseEvent } from 'react';\n\nexport type NodeLabelProperty = ((node: N) => string) | keyof N;\nexport type LinkLabelProperty = ((node: L) => string) | keyof L;\n\nexport type NodeWithExtraParameters = GraphNode & { [key: string]: string };\n\nexport interface NodeLevelNodeConfiguration {\n color: string;\n fontColor: string;\n opacity: number;\n renderLabel: boolean;\n size: number;\n strokeColor: string;\n strokeWidth: number;\n svg: string;\n symbolType: string;\n viewGenerator: (node: NodeWithExtraParameters) => any;\n labelProperty: NodeLabelProperty;\n}\n\nexport interface GraphLevelNodeConfiguration {\n color: string;\n fontColor: string;\n opacity: number;\n renderLabel: boolean;\n size: number;\n strokeColor: string;\n strokeWidth: number;\n svg: string;\n symbolType: string;\n fontSize: number;\n fontWeight: string;\n highlightColor: string;\n highlightFontSize: number;\n highlightFontWeight: string;\n highlightStrokeColor: 'SAME' | string;\n highlightStrokeWidth: 'SAME' | number;\n mouseCursor: string;\n viewGenerator: (node: N) => any;\n labelProperty: NodeLabelProperty;\n}\n\nexport interface GraphNode extends Partial {\n id: string;\n}\n\nexport interface LinkLevelLinkConfiguration {\n color: string;\n fontColor: string;\n opacity: number;\n strokeWidth: number;\n markerWidth: number;\n}\n\nexport interface GraphLevelLinkConfiguration extends LinkLevelLinkConfiguration {\n fontSize: number;\n fontWeight: string;\n highlightColor: string;\n highlightFontSize: number;\n highlightFontWeight: string;\n labelProperty: LinkLabelProperty;\n renderLabel: boolean;\n semanticStrokeWidth: boolean;\n markerHeight: number;\n type: string;\n mouseCursor: string;\n}\n\nexport interface GraphLink extends Partial {\n source: string;\n target: string;\n}\n\nexport interface GraphConfiguration {\n node: Partial>;\n link: Partial>;\n automaticRearrangeAfterDropNode: boolean;\n collapsible: boolean;\n directed: boolean;\n focusZoom: number;\n focusAnimationDuration: number;\n height: number;\n nodeHighlightBehavior: boolean;\n linkHighlightBehavior: boolean;\n highlightDegree: number;\n highlightOpacity: number;\n maxZoom: number;\n minZoom: number;\n panAndZoom: boolean;\n staticGraph: boolean;\n staticGraphWithDragAndDrop: boolean;\n width: number;\n d3: {\n alphaTarget: number;\n gravity: number;\n linkLength: number;\n linkStrength: number;\n disableLinkForce: boolean;\n };\n}\n\nexport interface GraphData {\n nodes: N[];\n links: L[];\n focusedNodeId?: string;\n}\n\nexport interface GraphEventCallbacks {\n onClickGraph: (event: MouseEvent) => void;\n onClickNode: (nodeId: string) => void;\n onDoubleClickNode: (nodeId: string) => void;\n onRightClickNode: (event: MouseEvent, nodeId: string) => void;\n onMouseOverNode: (nodeId: string) => void;\n onMouseOutNode: (nodeId: string) => void;\n onClickLink: (source: string, target: string) => void;\n onRightClickLink: (event: MouseEvent, source: string, target: string) => void;\n onMouseOverLink: (source: string, target: string) => void;\n onMouseOutLink: (source: string, target: string) => void;\n onNodePositionChange: (nodeId: string, x: number, y: number) => void;\n}\n\nexport interface GraphProps extends Partial {\n id: string;\n data?: GraphData;\n config?: Partial>;\n}\n\nexport class Graph extends Component, any> {\n constructor(props: GraphProps, ...args: any[]);\n\n UNSAFE_componentWillReceiveProps(nextProps: any): any;\n\n componentDidMount(): void;\n\n componentDidUpdate(): void;\n\n componentWillUnmount(): void;\n\n render(): any;\n}\n\nexport class Link extends Component {\n constructor(...args: any[]);\n\n render(): any;\n}\n\nexport class Node extends Component {\n constructor(...args: any[]);\n\n render(): any;\n}\n", + "3e3524f41de19cd97d5c32a531eab3f0e9206f75:types/react-d3-graph/index.d.ts": "// Type definitions for react-d3-graph 2.3\n// Project: https://github.com/danielcaldas/react-d3-graph#readme\n// Definitions by: Harry Goode \n// Adina Todoran \n// Robin Leclerc \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\nimport { Component, MouseEvent } from 'react';\n\nexport type NodeLabelProperty = ((node: N) => string) | keyof N;\nexport type LinkLabelProperty = ((node: L) => string) | keyof L;\n\nexport type NodeWithExtraParameters = GraphNode & { [key: string]: string };\n\nexport interface NodeLevelNodeConfiguration {\n color: string;\n fontColor: string;\n opacity: number;\n renderLabel: boolean;\n size: number;\n strokeColor: string;\n strokeWidth: number;\n svg: string;\n symbolType: string;\n viewGenerator: (node: NodeWithExtraParameters) => any;\n labelProperty: NodeLabelProperty;\n}\n\nexport interface GraphLevelNodeConfiguration {\n color: string;\n fontColor: string;\n opacity: number;\n renderLabel: boolean;\n size: number;\n strokeColor: string;\n strokeWidth: number;\n svg: string;\n symbolType: string;\n fontSize: number;\n fontWeight: string;\n highlightColor: string;\n highlightFontSize: number;\n highlightFontWeight: string;\n highlightStrokeColor: 'SAME' | string;\n highlightStrokeWidth: 'SAME' | number;\n mouseCursor: string;\n viewGenerator: (node: N) => any;\n labelProperty: NodeLabelProperty;\n}\n\nexport interface GraphNode extends Partial {\n id: string;\n}\n\nexport interface LinkLevelLinkConfiguration {\n color: string;\n fontColor: string;\n opacity: number;\n strokeWidth: number;\n markerWidth: number;\n}\n\nexport interface GraphLevelLinkConfiguration extends LinkLevelLinkConfiguration {\n fontSize: number;\n fontWeight: string;\n highlightColor: string;\n highlightFontSize: number;\n highlightFontWeight: string;\n labelProperty: LinkLabelProperty;\n renderLabel: boolean;\n semanticStrokeWidth: boolean;\n markerHeight: number;\n type: string;\n mouseCursor: string;\n}\n\nexport interface GraphLink extends Partial {\n source: string;\n target: string;\n}\n\nexport interface GraphConfiguration {\n node: Partial>;\n link: Partial>;\n automaticRearrangeAfterDropNode: boolean;\n collapsible: boolean;\n directed: boolean;\n focusZoom: number;\n focusAnimationDuration: number;\n height: number;\n nodeHighlightBehavior: boolean;\n linkHighlightBehavior: boolean;\n highlightDegree: number;\n highlightOpacity: number;\n maxZoom: number;\n minZoom: number;\n panAndZoom: boolean;\n staticGraph: boolean;\n staticGraphWithDragAndDrop: boolean;\n width: number;\n d3: {\n alphaTarget: number;\n gravity: number;\n linkLength: number;\n linkStrength: number;\n disableLinkForce: boolean;\n };\n}\n\nexport interface GraphData {\n nodes: N[];\n links: L[];\n focusedNodeId?: string;\n}\n\nexport interface GraphEventCallbacks {\n onClickGraph: (event: MouseEvent) => void;\n onClickNode: (nodeId: string) => void;\n onDoubleClickNode: (nodeId: string) => void;\n onRightClickNode: (event: MouseEvent, nodeId: string) => void;\n onMouseOverNode: (nodeId: string) => void;\n onMouseOutNode: (nodeId: string) => void;\n onClickLink: (source: string, target: string) => void;\n onRightClickLink: (event: MouseEvent, source: string, target: string) => void;\n onMouseOverLink: (source: string, target: string) => void;\n onMouseOutLink: (source: string, target: string) => void;\n onNodePositionChange: (nodeId: string, x: number, y: number) => void;\n}\n\nexport interface GraphProps extends Partial {\n id: string;\n data?: GraphData;\n config?: Partial>;\n}\n\nexport class Graph extends Component, any> {\n constructor(props: GraphProps, ...args: any[]);\n\n UNSAFE_componentWillReceiveProps(nextProps: any): any;\n\n componentDidMount(): void;\n\n componentDidUpdate(): void;\n\n componentWillUnmount(): void;\n\n render(): any;\n}\n\nexport class Link extends Component {\n constructor(...args: any[]);\n\n render(): any;\n}\n\nexport class Node extends Component {\n constructor(...args: any[]);\n\n render(): any;\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/46804/_response.json b/packages/mergebot/src/_tests/fixtures/46804/_response.json new file mode 100644 index 0000000000..01fc84bd8f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46804/_response.json @@ -0,0 +1,348 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDY4MzYwMDAy", + "title": "react-d3-graph - updated Node's size property to reflect latest version @2.5.0", + "createdAt": "2020-08-15T20:09:00Z", + "author": { + "login": "ETHANTALJAFFE", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Unmerged", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 46804, + "state": "OPEN", + "headRefOid": "3e3524f41de19cd97d5c32a531eab3f0e9206f75", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-15T20:09:34Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-15T20:09:35Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-15T20:12:38Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-15T20:17:51Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-15T20:17:52Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-15T20:20:07Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-15T20:33:22Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T04:15:43Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-08-25T19:30:37Z", + "projectColumnName": "Waiting for Code Reviews" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/8b66295fb6d0709c8ea8ac9e6ee5485cdb78644f/checks?check_suite_id=1055182673", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/8b66295fb6d0709c8ea8ac9e6ee5485cdb78644f/checks?check_suite_id=1055182673", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/8b66295fb6d0709c8ea8ac9e6ee5485cdb78644f/checks?check_suite_id=1055183310", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/8b66295fb6d0709c8ea8ac9e6ee5485cdb78644f/checks?check_suite_id=1055183310", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-15T20:00:06Z", + "committedDate": "2020-08-15T20:00:06Z", + "pushedDate": "2020-08-15T20:00:13Z", + "abbreviatedOid": "8b66295", + "oid": "8b66295fb6d0709c8ea8ac9e6ee5485cdb78644f", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/a93e218e6409152a0965829498c92e163df74a6a/checks?check_suite_id=1055192549", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/a93e218e6409152a0965829498c92e163df74a6a/checks?check_suite_id=1055192549", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/a93e218e6409152a0965829498c92e163df74a6a/checks?check_suite_id=1055193003", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/a93e218e6409152a0965829498c92e163df74a6a/checks?check_suite_id=1055193003", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-15T20:14:07Z", + "committedDate": "2020-08-15T20:14:07Z", + "pushedDate": "2020-08-15T20:14:17Z", + "abbreviatedOid": "a93e218", + "oid": "a93e218e6409152a0965829498c92e163df74a6a", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3e3524f41de19cd97d5c32a531eab3f0e9206f75/checks?check_suite_id=1055217050", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3e3524f41de19cd97d5c32a531eab3f0e9206f75/checks?check_suite_id=1055217050", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3e3524f41de19cd97d5c32a531eab3f0e9206f75/checks?check_suite_id=1055217408", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3e3524f41de19cd97d5c32a531eab3f0e9206f75/checks?check_suite_id=1055217408", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-15T20:29:37Z", + "committedDate": "2020-08-15T20:29:37Z", + "pushedDate": "2020-08-15T20:29:40Z", + "abbreviatedOid": "3e3524f", + "oid": "3e3524f41de19cd97d5c32a531eab3f0e9206f75", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 4, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY3NDQ0MjM1MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@ETHANTALJAFFE 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 which I will keep updated.***\n\nThis PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Have you considered [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#testing) 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## 1 package in this PR\n\n- `react-d3-graph` [on npm](https://www.npmjs.com/package/react-d3-graph), [on unpkg](https://unpkg.com/browse/react-d3-graph@latest)\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed by a DT maintainer.\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#testing)\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 9 days — waiting for a DT maintainer!\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2020-08-15T20:09:34Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3NDQ0MjM1Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @hrngoode @adina-todoran @BreadAndRoses95 — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46804/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": "2020-08-15T20:09:35Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3NDQ0MzE1Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@ETHANTALJAFFE The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/a93e218e6409152a0965829498c92e163df74a6a/checks?check_suite_id=1055192549).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-08-15T20:17:52Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3NDQ0MzM3Mw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #46804 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 73.5 | 80.8 | +9.9% |\n| Type count | 17246 | 17250 | 0% |\n| Assignability cache size | 2948 | 2948 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 32 | 32 | 0% |\n| Identifiers in tests | 32 | 32 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 297.1 | 296.8 | -0.1% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 15.4% | 14.3% | |\n|     Worst duration (ms) | 347.6 | 375.7 | +8.1% |\n|     Worst identifier | [data](/DefinitelyTyped/DefinitelyTyped/blob/867ab9307d482e06745a2b328ad09b11e74579c4/types/react-d3-graph/react-d3-graph-tests.tsx#L11) | [name](/DefinitelyTyped/DefinitelyTyped/blob/a1ee0f2d527536b08d881514d56a2fdff5eb8569/types/react-d3-graph/react-d3-graph-tests.tsx#L20) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 280.7 | 284.1 | +1.2% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 13.4% | 16.2% | +20.3% |\n|     Worst duration (ms) | 360.7 | 343.7 | -4.7% |\n|     Worst identifier | [labelProperty](/DefinitelyTyped/DefinitelyTyped/blob/867ab9307d482e06745a2b328ad09b11e74579c4/types/react-d3-graph/react-d3-graph-tests.tsx#L20) | [onClickGraph](/DefinitelyTyped/DefinitelyTyped/blob/a1ee0f2d527536b08d881514d56a2fdff5eb8569/types/react-d3-graph/react-d3-graph-tests.tsx#L9) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-08-15T20:20:07Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/react-d3-graph/index.d.ts", + "additions": 2, + "deletions": 2, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 1 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDM3MTk3MDM=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/46804/derived.json b/packages/mergebot/src/_tests/fixtures/46804/derived.json new file mode 100644 index 0000000000..c5fee1b25b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46804/derived.json @@ -0,0 +1,38 @@ +{ + "type": "info", + "now": "2020-08-25T19:30:48.988Z", + "pr_number": 46804, + "author": "ETHANTALJAFFE", + "headCommitOid": "3e3524f41de19cd97d5c32a531eab3f0e9206f75", + "mergeBaseOid": "master", + "lastPushDate": "2020-08-15T20:29:40.000Z", + "lastActivityDate": "2020-08-25T19:30:37.000Z", + "maintainerBlessed": "Waiting for Code Reviews", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "react-d3-graph", + "kind": "edit", + "files": [ + { + "path": "types/react-d3-graph/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "hrngoode", + "adina-todoran", + "BreadAndRoses95" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/46804/mutations.json b/packages/mergebot/src/_tests/fixtures/46804/mutations.json new file mode 100644 index 0000000000..471d53d9de --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46804/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY3NDQ0MjM1MQ==", + "body": "@ETHANTALJAFFE 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* `react-d3-graph` — [on npm](https://www.npmjs.com/package/react-d3-graph), [on unpkg](https://unpkg.com/browse/react-d3-graph@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=46804&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\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 9 days.\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2NDQwOTU4ODI=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDY4MzYwMDAy" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDY4MzYwMDAy", + "body": "Hey @ETHANTALJAFFE,\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/46804/result.json b/packages/mergebot/src/_tests/fixtures/46804/result.json new file mode 100644 index 0000000000..78f6a74dfe --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46804/result.json @@ -0,0 +1,23 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @ETHANTALJAFFE,\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": "@ETHANTALJAFFE 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* `react-d3-graph` — [on npm](https://www.npmjs.com/package/react-d3-graph), [on unpkg](https://unpkg.com/browse/react-d3-graph@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=46804&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\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 9 days.\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @hrngoode @adina-todoran @BreadAndRoses95 — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46804/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/46879/_downloads.json b/packages/mergebot/src/_tests/fixtures/46879/_downloads.json new file mode 100644 index 0000000000..5794546c1a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46879/_downloads.json @@ -0,0 +1,3 @@ +{ + "react-scroll": 1234567 +} diff --git a/packages/mergebot/src/_tests/fixtures/46879/_files.json b/packages/mergebot/src/_tests/fixtures/46879/_files.json new file mode 100644 index 0000000000..83b0ef496f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46879/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/react-scroll/index.d.ts": "// Type definitions for react-scroll 1.5\n// Project: https://github.com/fisshy/react-scroll\n// Definitions by: Ioannis Kokkinidis \n// Giedrius Grabauskas \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\n", + "2586d74ca0dc553be5f3afc0135468b17b240d70:types/react-scroll/index.d.ts": "// Type definitions for react-scroll 1.8\n// Project: https://github.com/fisshy/react-scroll\n// Definitions by: Ioannis Kokkinidis \n// Giedrius Grabauskas \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/46879/_response.json b/packages/mergebot/src/_tests/fixtures/46879/_response.json new file mode 100644 index 0000000000..20c4231264 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46879/_response.json @@ -0,0 +1,211 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDY5Njk3ODc4", + "title": "[react-scroll] Add type definition for saveHashHistory option on Links", + "createdAt": "2020-08-18T19:35:37Z", + "author": { + "login": "Chaldron", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Unmerged", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 46879, + "state": "OPEN", + "headRefOid": "2586d74ca0dc553be5f3afc0135468b17b240d70", + "changedFiles": 3, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-18T19:36:12Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-18T19:36:13Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-18T19:57:33Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-21T04:10:51Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/2586d74ca0dc553be5f3afc0135468b17b240d70/checks?check_suite_id=1067115360", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/2586d74ca0dc553be5f3afc0135468b17b240d70/checks?check_suite_id=1067115360", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/2586d74ca0dc553be5f3afc0135468b17b240d70/checks?check_suite_id=1067116373", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/2586d74ca0dc553be5f3afc0135468b17b240d70/checks?check_suite_id=1067116373", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-11T18:19:45Z", + "committedDate": "2020-08-11T18:19:45Z", + "pushedDate": "2020-08-11T18:21:13Z", + "abbreviatedOid": "2586d74", + "oid": "2586d74ca0dc553be5f3afc0135468b17b240d70", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY3NTY3Mjk3OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@Chaldron 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 which I will keep updated.***\n\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can help you merge this PR once someone else signs off on it.\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\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 9 days — waiting for a DT maintainer!\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2020-08-18T19:36:12Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3NTY3Mjk4Mw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @sudoplz @GiedriusGrabauskas — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46879/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": "2020-08-18T19:36:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3NTY4MjM3OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #46879 | diff |\n| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 114.8 | 115.4 | +0.5% |\n| Type count | 25565 | 25571 | 0% |\n| Assignability cache size | 6349 | 6349 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 212 | 219 | +3% |\n| Identifiers in tests | 212 | 219 | +3% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 492.3 | 490.5 | -0.4% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.4% | 8.3% | |\n|     Worst duration (ms) | 660.1 | 629.4 | -4.7% |\n|     Worst identifier | [to](/DefinitelyTyped/DefinitelyTyped/blob/992e59fb7b9a4e20a06b39f6ca93436ba3606385/types/react-scroll/test/react-scroll-tests.tsx#L54) | [div](/DefinitelyTyped/DefinitelyTyped/blob/399ef5069e3bb03c905b94aa0e5651c751eeb99f/types/react-scroll/test/react-scroll-tests.tsx#L151) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 488.2 | 487.2 | -0.2% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.8% | 9.1% | +2.6% |\n|     Worst duration (ms) | 656.4 | 595.4 | -9.3% |\n|     Worst identifier | [spy](/DefinitelyTyped/DefinitelyTyped/blob/992e59fb7b9a4e20a06b39f6ca93436ba3606385/types/react-scroll/test/react-scroll-tests.tsx#L54) | [spy](/DefinitelyTyped/DefinitelyTyped/blob/399ef5069e3bb03c905b94aa0e5651c751eeb99f/types/react-scroll/test/react-scroll-tests.tsx#L117) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-08-18T19:57:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/react-scroll/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react-scroll/modules/components/Link.d.ts", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react-scroll/test/react-scroll-tests.tsx", + "additions": 11, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 3 + }, + "projectCards": { + "nodes": [], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/46879/derived.json b/packages/mergebot/src/_tests/fixtures/46879/derived.json new file mode 100644 index 0000000000..68fae471ec --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46879/derived.json @@ -0,0 +1,44 @@ +{ + "type": "info", + "now": "2020-08-18T12:34:56.000Z", + "pr_number": 46879, + "author": "Chaldron", + "headCommitOid": "2586d74ca0dc553be5f3afc0135468b17b240d70", + "mergeBaseOid": "master", + "lastPushDate": "2020-08-11T18:21:13.000Z", + "lastActivityDate": "2020-08-18T19:35:37.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": "react-scroll", + "kind": "edit", + "files": [ + { + "path": "types/react-scroll/index.d.ts", + "kind": "definition" + }, + { + "path": "types/react-scroll/modules/components/Link.d.ts", + "kind": "definition" + }, + { + "path": "types/react-scroll/test/react-scroll-tests.tsx", + "kind": "test" + } + ], + "owners": [ + "sudoplz", + "GiedriusGrabauskas" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/46879/mutations.json b/packages/mergebot/src/_tests/fixtures/46879/mutations.json new file mode 100644 index 0000000000..93ab7500c6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46879/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY3NTY3Mjk3OA==", + "body": "@Chaldron Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `react-scroll` — [on npm](https://www.npmjs.com/package/react-scroll), [on unpkg](https://unpkg.com/browse/react-scroll@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=46879&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\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" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2NDQwOTU4ODI=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDY5Njk3ODc4" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0NDY5Njk3ODc4", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/46879/result.json b/packages/mergebot/src/_tests/fixtures/46879/result.json new file mode 100644 index 0000000000..409bf589f9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/46879/result.json @@ -0,0 +1,19 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Popular package" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@Chaldron Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `react-scroll` — [on npm](https://www.npmjs.com/package/react-scroll), [on unpkg](https://unpkg.com/browse/react-scroll@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=46879&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\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", + "status": "🔔 @sudoplz @GiedriusGrabauskas — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46879/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/_downloads.json b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/_downloads.json new file mode 100644 index 0000000000..1b7e06464e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/_downloads.json @@ -0,0 +1,4 @@ +{ + "express-serve-static-core": 16741351, + "express": 18862503 +} diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/_files.json b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/_files.json new file mode 100644 index 0000000000..9b0b92d899 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/_files.json @@ -0,0 +1,6 @@ +{ + "master:types/express-serve-static-core/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// Michał Lytek \n// Kacper Polak \n// Satana Charuwichitratana \n// Sami Jaber \n// aereal \n// Jose Luis Leon \n// David Stephens \n// Shin Ando \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n// This extracts the core definitions from express to prevent a circular dependency between express and serve-static\n/// \n\ndeclare global {\n namespace Express {\n // These open interfaces may be extended in an application-specific manner via declaration merging.\n // See for example method-override.d.ts (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/method-override/index.d.ts)\n interface Request { }\n interface Response { }\n interface Application { }\n }\n}\n\nimport * as http from \"http\";\nimport { EventEmitter } from \"events\";\nimport { Options as RangeParserOptions, Result as RangeParserResult, Ranges as RangeParserRanges } from \"range-parser\";\nimport { ParsedQs } from \"qs\";\n\nexport type Query = ParsedQs;\n\nexport interface NextFunction {\n (err?: any): void;\n /**\n * \"Break-out\" of a router by calling {next('router')};\n * @see {https://expressjs.com/en/guide/using-middleware.html#middleware.router}\n */\n (deferToNext: \"router\"): void;\n}\n\nexport interface Dictionary { [key: string]: T; }\n\nexport interface ParamsDictionary { [key: string]: string; }\nexport type ParamsArray = string[];\nexport type Params = ParamsDictionary | ParamsArray;\n\nexport interface RequestHandler

{\n // tslint:disable-next-line callable-types (This is extended from and can't extend from a type alias in ts<2.2\n (req: Request, res: Response, next: NextFunction): any;\n}\n\nexport type ErrorRequestHandler

=\n (err: any, req: Request, res: Response, next: NextFunction) => any;\n\nexport type PathParams = string | RegExp | Array;\n\nexport type RequestHandlerParams

\n = RequestHandler\n | ErrorRequestHandler\n | Array\n | ErrorRequestHandler

>;\n\nexport interface IRouterMatcher {\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n (path: PathParams, subApplication: Application): T;\n}\n\nexport interface IRouterHandler {\n (...handlers: RequestHandler[]): T;\n (...handlers: RequestHandlerParams[]): T;\n}\n\nexport interface IRouter extends RequestHandler {\n /**\n * Map the given param placeholder `name`(s) to the given callback(s).\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the samesignature as middleware, the only differencing\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * app.param('user_id', function(req, res, next, id){\n * User.find(id, function(err, user){\n * if (err) {\n * next(err);\n * } else if (user) {\n * req.user = user;\n * next();\n * } else {\n * next(new Error('failed to load user'));\n * }\n * });\n * });\n */\n param(name: string, handler: RequestParamHandler): this;\n\n /**\n * Alternatively, you can pass only a callback, in which case you have the opportunity to alter the app.param()\n *\n * @deprecated since version 4.11\n */\n param(callback: (name: string, matcher: RegExp) => RequestParamHandler): this;\n\n /**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n */\n all: IRouterMatcher;\n get: IRouterMatcher;\n post: IRouterMatcher;\n put: IRouterMatcher;\n delete: IRouterMatcher;\n patch: IRouterMatcher;\n options: IRouterMatcher;\n head: IRouterMatcher;\n\n checkout: IRouterMatcher;\n connect: IRouterMatcher;\n copy: IRouterMatcher;\n lock: IRouterMatcher;\n merge: IRouterMatcher;\n mkactivity: IRouterMatcher;\n mkcol: IRouterMatcher;\n move: IRouterMatcher;\n \"m-search\": IRouterMatcher;\n notify: IRouterMatcher;\n propfind: IRouterMatcher;\n proppatch: IRouterMatcher;\n purge: IRouterMatcher;\n report: IRouterMatcher;\n search: IRouterMatcher;\n subscribe: IRouterMatcher;\n trace: IRouterMatcher;\n unlock: IRouterMatcher;\n unsubscribe: IRouterMatcher;\n\n use: IRouterHandler & IRouterMatcher;\n\n route(prefix: PathParams): IRoute;\n /**\n * Stack of configured routes\n */\n stack: any[];\n}\n\nexport interface IRoute {\n path: string;\n stack: any;\n all: IRouterHandler;\n get: IRouterHandler;\n post: IRouterHandler;\n put: IRouterHandler;\n delete: IRouterHandler;\n patch: IRouterHandler;\n options: IRouterHandler;\n head: IRouterHandler;\n\n checkout: IRouterHandler;\n copy: IRouterHandler;\n lock: IRouterHandler;\n merge: IRouterHandler;\n mkactivity: IRouterHandler;\n mkcol: IRouterHandler;\n move: IRouterHandler;\n \"m-search\": IRouterHandler;\n notify: IRouterHandler;\n purge: IRouterHandler;\n report: IRouterHandler;\n search: IRouterHandler;\n subscribe: IRouterHandler;\n trace: IRouterHandler;\n unlock: IRouterHandler;\n unsubscribe: IRouterHandler;\n}\n\nexport interface Router extends IRouter { }\n\nexport interface CookieOptions {\n maxAge?: number;\n signed?: boolean;\n expires?: Date;\n httpOnly?: boolean;\n path?: string;\n domain?: string;\n secure?: boolean;\n encode?: (val: string) => string;\n sameSite?: boolean | 'lax' | 'strict' | 'none';\n}\n\nexport interface ByteRange { start: number; end: number; }\n\nexport interface RequestRanges extends RangeParserRanges { }\n\nexport type Errback = (err: Error) => void;\n\n/**\n * @param P For most requests, this should be `ParamsDictionary`, but if you're\n * using this in a route handler for a route that uses a `RegExp` or a wildcard\n * `string` path (e.g. `'/user/*'`), then `req.params` will be an array, in\n * which case you should use `ParamsArray` instead.\n *\n * @see https://expressjs.com/en/api.html#req.params\n *\n * @example\n * app.get('/user/:id', (req, res) => res.send(req.params.id)); // implicitly `ParamsDictionary`\n * app.get(/user\\/(.*)/, (req, res) => res.send(req.params[0]));\n * app.get('/user/*', (req, res) => res.send(req.params[0]));\n */\nexport interface Request

extends http.IncomingMessage, Express.Request {\n /**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n * req.get('Content-Type');\n * // => \"text/plain\"\n *\n * req.get('content-type');\n * // => \"text/plain\"\n *\n * req.get('Something');\n * // => undefined\n *\n * Aliased as `req.header()`.\n */\n get(name: \"set-cookie\"): string[] | undefined;\n get(name: string): string | undefined;\n\n header(name: \"set-cookie\"): string[] | undefined;\n header(name: string): string | undefined;\n\n /**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\", a comma-delimted list such as \"json, html, text/plain\",\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * req.accepts('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * req.accepts('html');\n * // => \"html\"\n * req.accepts('text/html');\n * // => \"text/html\"\n * req.accepts('json, text');\n * // => \"json\"", + "dbe687d30362e4f887e88048a3646c13c0c4d907:types/express-serve-static-core/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// Michał Lytek \n// Kacper Polak \n// Satana Charuwichitratana \n// Sami Jaber \n// aereal \n// Jose Luis Leon \n// David Stephens \n// Shin Ando \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n// This extracts the core definitions from express to prevent a circular dependency between express and serve-static\n/// \n\ndeclare global {\n namespace Express {\n // These open interfaces may be extended in an application-specific manner via declaration merging.\n // See for example method-override.d.ts (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/method-override/index.d.ts)\n interface Request { }\n interface Response { }\n interface Application { }\n }\n}\n\nimport * as http from \"http\";\nimport { EventEmitter } from \"events\";\nimport { Options as RangeParserOptions, Result as RangeParserResult, Ranges as RangeParserRanges } from \"range-parser\";\nimport { ParsedQs } from \"qs\";\n\nexport type Query = ParsedQs;\n\nexport interface NextFunction {\n (err?: any): void;\n /**\n * \"Break-out\" of a router by calling {next('router')};\n * @see {https://expressjs.com/en/guide/using-middleware.html#middleware.router}\n */\n (deferToNext: \"router\"): void;\n}\n\nexport interface Dictionary { [key: string]: T; }\n\nexport interface ParamsDictionary { [key: string]: string; }\nexport type ParamsArray = string[];\nexport type Params = ParamsDictionary | ParamsArray;\n\nexport interface RequestHandler

{\n // tslint:disable-next-line callable-types (This is extended from and can't extend from a type alias in ts<2.2\n (req: Request, res: Response, next: NextFunction): any;\n}\n\nexport type ErrorRequestHandler

=\n (err: any, req: Request, res: Response, next: NextFunction) => any;\n\nexport type PathParams = string | RegExp | Array;\n\nexport type RequestHandlerParams

\n = RequestHandler\n | ErrorRequestHandler\n | Array\n | ErrorRequestHandler

>;\n\nexport interface IRouterMatcher {\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n (path: PathParams, subApplication: Application): T;\n}\n\nexport interface IRouterHandler {\n (...handlers: RequestHandler[]): T;\n (...handlers: RequestHandlerParams[]): T;\n}\n\nexport interface IRouter extends RequestHandler {\n /**\n * Map the given param placeholder `name`(s) to the given callback(s).\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the samesignature as middleware, the only differencing\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * app.param('user_id', function(req, res, next, id){\n * User.find(id, function(err, user){\n * if (err) {\n * next(err);\n * } else if (user) {\n * req.user = user;\n * next();\n * } else {\n * next(new Error('failed to load user'));\n * }\n * });\n * });\n */\n param(name: string, handler: RequestParamHandler): this;\n\n /**\n * Alternatively, you can pass only a callback, in which case you have the opportunity to alter the app.param()\n *\n * @deprecated since version 4.11\n */\n param(callback: (name: string, matcher: RegExp) => RequestParamHandler): this;\n\n /**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n */\n all: IRouterMatcher;\n get: IRouterMatcher;\n post: IRouterMatcher;\n put: IRouterMatcher;\n delete: IRouterMatcher;\n patch: IRouterMatcher;\n options: IRouterMatcher;\n head: IRouterMatcher;\n\n checkout: IRouterMatcher;\n connect: IRouterMatcher;\n copy: IRouterMatcher;\n lock: IRouterMatcher;\n merge: IRouterMatcher;\n mkactivity: IRouterMatcher;\n mkcol: IRouterMatcher;\n move: IRouterMatcher;\n \"m-search\": IRouterMatcher;\n notify: IRouterMatcher;\n propfind: IRouterMatcher;\n proppatch: IRouterMatcher;\n purge: IRouterMatcher;\n report: IRouterMatcher;\n search: IRouterMatcher;\n subscribe: IRouterMatcher;\n trace: IRouterMatcher;\n unlock: IRouterMatcher;\n unsubscribe: IRouterMatcher;\n\n use: IRouterHandler & IRouterMatcher;\n\n route(prefix: PathParams): IRoute;\n /**\n * Stack of configured routes\n */\n stack: any[];\n}\n\nexport interface IRoute {\n path: string;\n stack: any;\n all: IRouterHandler;\n get: IRouterHandler;\n post: IRouterHandler;\n put: IRouterHandler;\n delete: IRouterHandler;\n patch: IRouterHandler;\n options: IRouterHandler;\n head: IRouterHandler;\n\n checkout: IRouterHandler;\n copy: IRouterHandler;\n lock: IRouterHandler;\n merge: IRouterHandler;\n mkactivity: IRouterHandler;\n mkcol: IRouterHandler;\n move: IRouterHandler;\n \"m-search\": IRouterHandler;\n notify: IRouterHandler;\n purge: IRouterHandler;\n report: IRouterHandler;\n search: IRouterHandler;\n subscribe: IRouterHandler;\n trace: IRouterHandler;\n unlock: IRouterHandler;\n unsubscribe: IRouterHandler;\n}\n\nexport interface Router extends IRouter { }\n\nexport interface CookieOptions {\n maxAge?: number;\n signed?: boolean;\n expires?: Date;\n httpOnly?: boolean;\n path?: string;\n domain?: string;\n secure?: boolean;\n encode?: (val: string) => string;\n sameSite?: boolean | 'lax' | 'strict' | 'none';\n}\n\nexport interface ByteRange { start: number; end: number; }\n\nexport interface RequestRanges extends RangeParserRanges { }\n\nexport type Errback = (err: Error) => void;\n\n/**\n * @param P For most requests, this should be `ParamsDictionary`, but if you're\n * using this in a route handler for a route that uses a `RegExp` or a wildcard\n * `string` path (e.g. `'/user/*'`), then `req.params` will be an array, in\n * which case you should use `ParamsArray` instead.\n *\n * @see https://expressjs.com/en/api.html#req.params\n *\n * @example\n * app.get('/user/:id', (req, res) => res.send(req.params.id)); // implicitly `ParamsDictionary`\n * app.get(/user\\/(.*)/, (req, res) => res.send(req.params[0]));\n * app.get('/user/*', (req, res) => res.send(req.params[0]));\n */\nexport interface Request

extends http.IncomingMessage, Express.Request {\n /**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n * req.get('Content-Type');\n * // => \"text/plain\"\n *\n * req.get('content-type');\n * // => \"text/plain\"\n *\n * req.get('Something');\n * // => undefined\n *\n * Aliased as `req.header()`.\n */\n get(name: \"set-cookie\"): string[] | undefined;\n get(name: string): string | undefined;\n\n header(name: \"set-cookie\"): string[] | undefined;\n header(name: string): string | undefined;\n\n /**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\", a comma-delimted list such as \"json, html, text/plain\",\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * req.accepts('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * req.accepts('html');\n * // => \"html\"\n * req.accepts('text/html');\n * // => \"text/html\"\n * req.accepts('json, text');\n * // => \"json\"", + "master:types/express/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// China Medical University Hospital \n// Puneet Arora \n// Dylan Frankland \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/* =================== USAGE ===================\n\n import express = require(\"express\");\n var app = express();\n\n =============================================== */\n\n/// \n/// \n\nimport * as bodyParser from \"body-parser\";\nimport serveStatic = require(\"serve-static\");\nimport * as core from \"express-serve-static-core\";\nimport * as qs from \"qs\";\n\n/**\n * Creates an Express application. The express() function is a top-level function exported by the express module.\n */\ndeclare function e(): core.Express;\n\ndeclare namespace e {\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with JSON payloads and is based on body-parser.\n * @since 4.16.0\n */\n var json: typeof bodyParser.json;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with Buffer payloads and is based on body-parser.\n * @since 4.17.0\n */\n var raw: typeof bodyParser.raw;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with text payloads and is based on body-parser.\n * @since 4.17.0\n */\n var text: typeof bodyParser.text;\n\n /**\n * These are the exposed prototypes.\n */\n var application: Application;\n var request: Request;\n var response: Response;\n\n /**\n * This is a built-in middleware function in Express. It serves static files and is based on serve-static.\n */\n var static: typeof serveStatic;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with urlencoded payloads and is based on body-parser.\n * @since 4.16.0\n */\n var urlencoded: typeof bodyParser.urlencoded;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming request query parameters.\n */\n export function query(options: qs.IParseOptions | typeof qs.parse): Handler;\n\n export function Router(options?: RouterOptions): core.Router;\n\n interface RouterOptions {\n /**\n * Enable case sensitivity.\n */\n caseSensitive?: boolean;\n\n /**\n * Preserve the req.params values from the parent router.\n * If the parent and the child have conflicting param names, the child’s value take precedence.\n *\n * @default false\n * @since 4.5.0\n */\n mergeParams?: boolean;\n\n /**\n * Enable strict routing.\n */\n strict?: boolean;\n }\n\n interface Application extends core.Application { }\n interface CookieOptions extends core.CookieOptions { }\n interface Errback extends core.Errback { }\n interface ErrorRequestHandler

\n extends core.ErrorRequestHandler { }\n interface Express extends core.Express { }\n interface Handler extends core.Handler { }\n interface IRoute extends core.IRoute { }\n interface IRouter extends core.IRouter { }\n interface IRouterHandler extends core.IRouterHandler { }\n interface IRouterMatcher extends core.IRouterMatcher { }\n interface MediaType extends core.MediaType { }\n interface NextFunction extends core.NextFunction { }\n interface Request

extends core.Request { }\n interface RequestHandler

extends core.RequestHandler { }\n interface RequestParamHandler extends core.RequestParamHandler { }\n export interface Response extends core.Response { }\n interface Router extends core.Router { }\n interface Send extends core.Send { }\n}\n\nexport = e;\n", + "dbe687d30362e4f887e88048a3646c13c0c4d907:types/express/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// China Medical University Hospital \n// Puneet Arora \n// Dylan Frankland \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/* =================== USAGE ===================\n\n import express = require(\"express\");\n var app = express();\n\n =============================================== */\n\n/// \n/// \n\nimport * as bodyParser from \"body-parser\";\nimport serveStatic = require(\"serve-static\");\nimport * as core from \"express-serve-static-core\";\nimport * as qs from \"qs\";\n\n/**\n * Creates an Express application. The express() function is a top-level function exported by the express module.\n */\ndeclare function e(): core.Express;\n\ndeclare namespace e {\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with JSON payloads and is based on body-parser.\n * @since 4.16.0\n */\n var json: typeof bodyParser.json;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with Buffer payloads and is based on body-parser.\n * @since 4.17.0\n */\n var raw: typeof bodyParser.raw;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with text payloads and is based on body-parser.\n * @since 4.17.0\n */\n var text: typeof bodyParser.text;\n\n /**\n * These are the exposed prototypes.\n */\n var application: Application;\n var request: Request;\n var response: Response;\n\n /**\n * This is a built-in middleware function in Express. It serves static files and is based on serve-static.\n */\n var static: typeof serveStatic;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with urlencoded payloads and is based on body-parser.\n * @since 4.16.0\n */\n var urlencoded: typeof bodyParser.urlencoded;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming request query parameters.\n */\n export function query(options: qs.IParseOptions | typeof qs.parse): Handler;\n\n export function Router(options?: RouterOptions): core.Router;\n\n interface RouterOptions {\n /**\n * Enable case sensitivity.\n */\n caseSensitive?: boolean;\n\n /**\n * Preserve the req.params values from the parent router.\n * If the parent and the child have conflicting param names, the child’s value take precedence.\n *\n * @default false\n * @since 4.5.0\n */\n mergeParams?: boolean;\n\n /**\n * Enable strict routing.\n */\n strict?: boolean;\n }\n\n interface Application extends core.Application { }\n interface CookieOptions extends core.CookieOptions { }\n interface Errback extends core.Errback { }\n interface ErrorRequestHandler

\n extends core.ErrorRequestHandler { }\n interface Express extends core.Express { }\n interface Handler extends core.Handler { }\n interface IRoute extends core.IRoute { }\n interface IRouter extends core.IRouter { }\n interface IRouterHandler extends core.IRouterHandler { }\n interface IRouterMatcher extends core.IRouterMatcher { }\n interface MediaType extends core.MediaType { }\n interface NextFunction extends core.NextFunction { }\n interface Request

extends core.Request { }\n interface RequestHandler

extends core.RequestHandler { }\n interface RequestParamHandler extends core.RequestParamHandler { }\n export interface Response extends core.Response { }\n interface Router extends core.Router { }\n interface Send extends core.Send { }\n}\n\nexport = e;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/_response.json b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/_response.json new file mode 100644 index 0000000000..b63bf43594 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/_response.json @@ -0,0 +1,354 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDcyOTQ5NjQ1", + "title": "[express] remove constraint that request params must be strings.", + "createdAt": "2020-08-25T05:33:17Z", + "author": { + "login": "mastermatt", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Critical package", + "__typename": "Label" + }, + { + "name": "Edits multiple packages", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 47017, + "state": "OPEN", + "headRefOid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:34:02Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:34:03Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:42:13Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:42:15Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:54:37Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:55:15Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T06:27:02Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-08-26T20:01:58Z", + "projectColumnName": "Waiting for Code Reviews" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "dwrss", + "__typename": "User" + }, + "commit": { + "oid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "abbreviatedOid": "dbe687d", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-07-16T23:49:46Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450281043", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093996367", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093996367", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093997005", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093997005", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-25T05:24:00Z", + "committedDate": "2020-08-25T05:24:00Z", + "pushedDate": "2020-08-25T05:26:54Z", + "abbreviatedOid": "e856df6", + "oid": "e856df671897fc9fbdfab6ef1496458303bc6aa9", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094033629", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094033629", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094034351", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094034351", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-25T05:47:06Z", + "committedDate": "2020-08-25T05:47:06Z", + "pushedDate": "2020-08-25T05:47:26Z", + "abbreviatedOid": "dbe687d", + "oid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTcyNjE5OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mastermatt Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 2 packages in this PR\n\n- `express-serve-static-core` [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest)\n- `express` [on npm](https://www.npmjs.com/package/express), [on unpkg](https://unpkg.com/browse/express@latest)\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ A DT maintainer needs to approve changes which 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": "2020-08-25T05:34:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTcyNjI1OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @borisyankov @19majkel94 @kacepe @micksatana @samijaber @aereal @JoseLion @dwrss @andoshin11 @CMUH @puneetar @dfrankland — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/47017/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": "2020-08-25T05:34:03Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTc0NzY2MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mastermatt The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093996367).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-08-25T05:42:15Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTc3OTk0NA==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## express ([unpkg](https://unpkg.com/browse/express@latest/))\nwas missing the following properties:\n1. Route\n

\n Generated by :no_entry_sign: dangerJS against dbe687d30362e4f887e88048a3646c13c0c4d907\n

\n", + "createdAt": "2020-08-25T05:54:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTgyODY1Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n### express-serve-static-core/v*\n\n\n
\nComparison details for express-serve-static-core/* 📊\n\n| | master | #47017 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 70.4 | 68.1 | -3.3% |\n| Type count | 10128 | 10102 | 0% |\n| Assignability cache size | 1955 | 1949 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 125 | 126 | +1% |\n| Identifiers in tests | 125 | 126 | +1% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 328.9 | 328.8 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.8% | 10.0% | |\n|     Worst duration (ms) | 462.5 | 451.3 | -2.4% |\n|     Worst identifier | [is](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express-serve-static-core/express-serve-static-core-tests.ts#L17) | [send](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express-serve-static-core/express-serve-static-core-tests.ts#L60) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 349.6 | 346.1 | -1.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.9% | 10.4% | -4.6% |\n|     Worst duration (ms) | 470.5 | 451.1 | -4.1% |\n|     Worst identifier | [req](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express-serve-static-core/express-serve-static-core-tests.ts#L58) | [req](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express-serve-static-core/express-serve-static-core-tests.ts#L13) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.\n\n### express/v*\n\n\n
\nComparison details for express/* 📊\n\n| | master | #47017 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 69.0 | 71.3 | +3.3% |\n| Type count | 11512 | 11480 | 0% |\n| Assignability cache size | 2097 | 2089 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 449 | 458 | +2% |\n| Identifiers in tests | 449 | 458 | +2% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 336.3 | 336.6 | +0.1% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.6% | 8.5% | |\n|     Worst duration (ms) | 574.1 | 582.4 | +1.4% |\n|     Worst identifier | [req](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express/express-tests.ts#L47) | [body](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express/express-tests.ts#L47) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 347.1 | 347.1 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.9% | 8.7% | -2.2% |\n|     Worst duration (ms) | 552.8 | 534.6 | -3.3% |\n|     Worst identifier | [get](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express/express-tests.ts#L188) | [use](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express/express-tests.ts#L217) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-08-25T06:27:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/express-serve-static-core/express-serve-static-core-tests.ts", + "additions": 5, + "deletions": 6, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/express-serve-static-core/index.d.ts", + "additions": 6, + "deletions": 6, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/express/express-tests.ts", + "additions": 13, + "deletions": 12, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/express/index.d.ts", + "additions": 3, + "deletions": 3, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDQyNTE2ODU=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/derived.json b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/derived.json new file mode 100644 index 0000000000..9ab7d68c8c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/derived.json @@ -0,0 +1,78 @@ +{ + "type": "info", + "now": "2020-08-27T20:15:58.001Z", + "pr_number": 47017, + "author": "mastermatt", + "headCommitOid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "mergeBaseOid": "master", + "lastPushDate": "2020-08-25T05:47:26.000Z", + "lastActivityDate": "2020-08-26T20:01:58.000Z", + "maintainerBlessed": "Waiting for Code Reviews", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "express-serve-static-core", + "kind": "edit", + "files": [ + { + "path": "types/express-serve-static-core/express-serve-static-core-tests.ts", + "kind": "test" + }, + { + "path": "types/express-serve-static-core/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "borisyankov", + "19majkel94", + "kacepe", + "micksatana", + "samijaber", + "aereal", + "JoseLion", + "dwrss", + "andoshin11" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + }, + { + "name": "express", + "kind": "edit", + "files": [ + { + "path": "types/express/express-tests.ts", + "kind": "test" + }, + { + "path": "types/express/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "borisyankov", + "CMUH", + "puneetar", + "dfrankland" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "dwrss", + "date": "2020-07-16T23:49:46.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/mutations.json b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/mutations.json new file mode 100644 index 0000000000..e3fc65cc31 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/mutations.json @@ -0,0 +1,11 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTcyNjE5OQ==", + "body": "@mastermatt Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `express-serve-static-core` — [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest/)\n - owner-approval: @dwrss\n* `express` — [on npm](https://www.npmjs.com/package/express), [on unpkg](https://unpkg.com/browse/express@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=47017&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * 🕐 All owners or a DT maintainer needs to approve changes that affect more than one package\n - ✅ express-serve-static-core\n - 🕐 express\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/47017-blessed-and-one-owner/result.json b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/result.json new file mode 100644 index 0000000000..16c47a61fe --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-one-owner/result.json @@ -0,0 +1,16 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Critical package", + "Edits multiple packages" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@mastermatt Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `express-serve-static-core` — [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest/)\n - owner-approval: @dwrss\n* `express` — [on npm](https://www.npmjs.com/package/express), [on unpkg](https://unpkg.com/browse/express@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=47017&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * 🕐 All owners or a DT maintainer needs to approve changes that affect more than one package\n - ✅ express-serve-static-core\n - 🕐 express\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/_tests/fixtures/47017-blessed-and-two-owner/_downloads.json b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/_downloads.json new file mode 100644 index 0000000000..1b7e06464e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/_downloads.json @@ -0,0 +1,4 @@ +{ + "express-serve-static-core": 16741351, + "express": 18862503 +} diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/_files.json b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/_files.json new file mode 100644 index 0000000000..9b0b92d899 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/_files.json @@ -0,0 +1,6 @@ +{ + "master:types/express-serve-static-core/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// Michał Lytek \n// Kacper Polak \n// Satana Charuwichitratana \n// Sami Jaber \n// aereal \n// Jose Luis Leon \n// David Stephens \n// Shin Ando \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n// This extracts the core definitions from express to prevent a circular dependency between express and serve-static\n/// \n\ndeclare global {\n namespace Express {\n // These open interfaces may be extended in an application-specific manner via declaration merging.\n // See for example method-override.d.ts (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/method-override/index.d.ts)\n interface Request { }\n interface Response { }\n interface Application { }\n }\n}\n\nimport * as http from \"http\";\nimport { EventEmitter } from \"events\";\nimport { Options as RangeParserOptions, Result as RangeParserResult, Ranges as RangeParserRanges } from \"range-parser\";\nimport { ParsedQs } from \"qs\";\n\nexport type Query = ParsedQs;\n\nexport interface NextFunction {\n (err?: any): void;\n /**\n * \"Break-out\" of a router by calling {next('router')};\n * @see {https://expressjs.com/en/guide/using-middleware.html#middleware.router}\n */\n (deferToNext: \"router\"): void;\n}\n\nexport interface Dictionary { [key: string]: T; }\n\nexport interface ParamsDictionary { [key: string]: string; }\nexport type ParamsArray = string[];\nexport type Params = ParamsDictionary | ParamsArray;\n\nexport interface RequestHandler

{\n // tslint:disable-next-line callable-types (This is extended from and can't extend from a type alias in ts<2.2\n (req: Request, res: Response, next: NextFunction): any;\n}\n\nexport type ErrorRequestHandler

=\n (err: any, req: Request, res: Response, next: NextFunction) => any;\n\nexport type PathParams = string | RegExp | Array;\n\nexport type RequestHandlerParams

\n = RequestHandler\n | ErrorRequestHandler\n | Array\n | ErrorRequestHandler

>;\n\nexport interface IRouterMatcher {\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n (path: PathParams, subApplication: Application): T;\n}\n\nexport interface IRouterHandler {\n (...handlers: RequestHandler[]): T;\n (...handlers: RequestHandlerParams[]): T;\n}\n\nexport interface IRouter extends RequestHandler {\n /**\n * Map the given param placeholder `name`(s) to the given callback(s).\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the samesignature as middleware, the only differencing\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * app.param('user_id', function(req, res, next, id){\n * User.find(id, function(err, user){\n * if (err) {\n * next(err);\n * } else if (user) {\n * req.user = user;\n * next();\n * } else {\n * next(new Error('failed to load user'));\n * }\n * });\n * });\n */\n param(name: string, handler: RequestParamHandler): this;\n\n /**\n * Alternatively, you can pass only a callback, in which case you have the opportunity to alter the app.param()\n *\n * @deprecated since version 4.11\n */\n param(callback: (name: string, matcher: RegExp) => RequestParamHandler): this;\n\n /**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n */\n all: IRouterMatcher;\n get: IRouterMatcher;\n post: IRouterMatcher;\n put: IRouterMatcher;\n delete: IRouterMatcher;\n patch: IRouterMatcher;\n options: IRouterMatcher;\n head: IRouterMatcher;\n\n checkout: IRouterMatcher;\n connect: IRouterMatcher;\n copy: IRouterMatcher;\n lock: IRouterMatcher;\n merge: IRouterMatcher;\n mkactivity: IRouterMatcher;\n mkcol: IRouterMatcher;\n move: IRouterMatcher;\n \"m-search\": IRouterMatcher;\n notify: IRouterMatcher;\n propfind: IRouterMatcher;\n proppatch: IRouterMatcher;\n purge: IRouterMatcher;\n report: IRouterMatcher;\n search: IRouterMatcher;\n subscribe: IRouterMatcher;\n trace: IRouterMatcher;\n unlock: IRouterMatcher;\n unsubscribe: IRouterMatcher;\n\n use: IRouterHandler & IRouterMatcher;\n\n route(prefix: PathParams): IRoute;\n /**\n * Stack of configured routes\n */\n stack: any[];\n}\n\nexport interface IRoute {\n path: string;\n stack: any;\n all: IRouterHandler;\n get: IRouterHandler;\n post: IRouterHandler;\n put: IRouterHandler;\n delete: IRouterHandler;\n patch: IRouterHandler;\n options: IRouterHandler;\n head: IRouterHandler;\n\n checkout: IRouterHandler;\n copy: IRouterHandler;\n lock: IRouterHandler;\n merge: IRouterHandler;\n mkactivity: IRouterHandler;\n mkcol: IRouterHandler;\n move: IRouterHandler;\n \"m-search\": IRouterHandler;\n notify: IRouterHandler;\n purge: IRouterHandler;\n report: IRouterHandler;\n search: IRouterHandler;\n subscribe: IRouterHandler;\n trace: IRouterHandler;\n unlock: IRouterHandler;\n unsubscribe: IRouterHandler;\n}\n\nexport interface Router extends IRouter { }\n\nexport interface CookieOptions {\n maxAge?: number;\n signed?: boolean;\n expires?: Date;\n httpOnly?: boolean;\n path?: string;\n domain?: string;\n secure?: boolean;\n encode?: (val: string) => string;\n sameSite?: boolean | 'lax' | 'strict' | 'none';\n}\n\nexport interface ByteRange { start: number; end: number; }\n\nexport interface RequestRanges extends RangeParserRanges { }\n\nexport type Errback = (err: Error) => void;\n\n/**\n * @param P For most requests, this should be `ParamsDictionary`, but if you're\n * using this in a route handler for a route that uses a `RegExp` or a wildcard\n * `string` path (e.g. `'/user/*'`), then `req.params` will be an array, in\n * which case you should use `ParamsArray` instead.\n *\n * @see https://expressjs.com/en/api.html#req.params\n *\n * @example\n * app.get('/user/:id', (req, res) => res.send(req.params.id)); // implicitly `ParamsDictionary`\n * app.get(/user\\/(.*)/, (req, res) => res.send(req.params[0]));\n * app.get('/user/*', (req, res) => res.send(req.params[0]));\n */\nexport interface Request

extends http.IncomingMessage, Express.Request {\n /**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n * req.get('Content-Type');\n * // => \"text/plain\"\n *\n * req.get('content-type');\n * // => \"text/plain\"\n *\n * req.get('Something');\n * // => undefined\n *\n * Aliased as `req.header()`.\n */\n get(name: \"set-cookie\"): string[] | undefined;\n get(name: string): string | undefined;\n\n header(name: \"set-cookie\"): string[] | undefined;\n header(name: string): string | undefined;\n\n /**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\", a comma-delimted list such as \"json, html, text/plain\",\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * req.accepts('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * req.accepts('html');\n * // => \"html\"\n * req.accepts('text/html');\n * // => \"text/html\"\n * req.accepts('json, text');\n * // => \"json\"", + "dbe687d30362e4f887e88048a3646c13c0c4d907:types/express-serve-static-core/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// Michał Lytek \n// Kacper Polak \n// Satana Charuwichitratana \n// Sami Jaber \n// aereal \n// Jose Luis Leon \n// David Stephens \n// Shin Ando \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n// This extracts the core definitions from express to prevent a circular dependency between express and serve-static\n/// \n\ndeclare global {\n namespace Express {\n // These open interfaces may be extended in an application-specific manner via declaration merging.\n // See for example method-override.d.ts (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/method-override/index.d.ts)\n interface Request { }\n interface Response { }\n interface Application { }\n }\n}\n\nimport * as http from \"http\";\nimport { EventEmitter } from \"events\";\nimport { Options as RangeParserOptions, Result as RangeParserResult, Ranges as RangeParserRanges } from \"range-parser\";\nimport { ParsedQs } from \"qs\";\n\nexport type Query = ParsedQs;\n\nexport interface NextFunction {\n (err?: any): void;\n /**\n * \"Break-out\" of a router by calling {next('router')};\n * @see {https://expressjs.com/en/guide/using-middleware.html#middleware.router}\n */\n (deferToNext: \"router\"): void;\n}\n\nexport interface Dictionary { [key: string]: T; }\n\nexport interface ParamsDictionary { [key: string]: string; }\nexport type ParamsArray = string[];\nexport type Params = ParamsDictionary | ParamsArray;\n\nexport interface RequestHandler

{\n // tslint:disable-next-line callable-types (This is extended from and can't extend from a type alias in ts<2.2\n (req: Request, res: Response, next: NextFunction): any;\n}\n\nexport type ErrorRequestHandler

=\n (err: any, req: Request, res: Response, next: NextFunction) => any;\n\nexport type PathParams = string | RegExp | Array;\n\nexport type RequestHandlerParams

\n = RequestHandler\n | ErrorRequestHandler\n | Array\n | ErrorRequestHandler

>;\n\nexport interface IRouterMatcher {\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n (path: PathParams, subApplication: Application): T;\n}\n\nexport interface IRouterHandler {\n (...handlers: RequestHandler[]): T;\n (...handlers: RequestHandlerParams[]): T;\n}\n\nexport interface IRouter extends RequestHandler {\n /**\n * Map the given param placeholder `name`(s) to the given callback(s).\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the samesignature as middleware, the only differencing\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * app.param('user_id', function(req, res, next, id){\n * User.find(id, function(err, user){\n * if (err) {\n * next(err);\n * } else if (user) {\n * req.user = user;\n * next();\n * } else {\n * next(new Error('failed to load user'));\n * }\n * });\n * });\n */\n param(name: string, handler: RequestParamHandler): this;\n\n /**\n * Alternatively, you can pass only a callback, in which case you have the opportunity to alter the app.param()\n *\n * @deprecated since version 4.11\n */\n param(callback: (name: string, matcher: RegExp) => RequestParamHandler): this;\n\n /**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n */\n all: IRouterMatcher;\n get: IRouterMatcher;\n post: IRouterMatcher;\n put: IRouterMatcher;\n delete: IRouterMatcher;\n patch: IRouterMatcher;\n options: IRouterMatcher;\n head: IRouterMatcher;\n\n checkout: IRouterMatcher;\n connect: IRouterMatcher;\n copy: IRouterMatcher;\n lock: IRouterMatcher;\n merge: IRouterMatcher;\n mkactivity: IRouterMatcher;\n mkcol: IRouterMatcher;\n move: IRouterMatcher;\n \"m-search\": IRouterMatcher;\n notify: IRouterMatcher;\n propfind: IRouterMatcher;\n proppatch: IRouterMatcher;\n purge: IRouterMatcher;\n report: IRouterMatcher;\n search: IRouterMatcher;\n subscribe: IRouterMatcher;\n trace: IRouterMatcher;\n unlock: IRouterMatcher;\n unsubscribe: IRouterMatcher;\n\n use: IRouterHandler & IRouterMatcher;\n\n route(prefix: PathParams): IRoute;\n /**\n * Stack of configured routes\n */\n stack: any[];\n}\n\nexport interface IRoute {\n path: string;\n stack: any;\n all: IRouterHandler;\n get: IRouterHandler;\n post: IRouterHandler;\n put: IRouterHandler;\n delete: IRouterHandler;\n patch: IRouterHandler;\n options: IRouterHandler;\n head: IRouterHandler;\n\n checkout: IRouterHandler;\n copy: IRouterHandler;\n lock: IRouterHandler;\n merge: IRouterHandler;\n mkactivity: IRouterHandler;\n mkcol: IRouterHandler;\n move: IRouterHandler;\n \"m-search\": IRouterHandler;\n notify: IRouterHandler;\n purge: IRouterHandler;\n report: IRouterHandler;\n search: IRouterHandler;\n subscribe: IRouterHandler;\n trace: IRouterHandler;\n unlock: IRouterHandler;\n unsubscribe: IRouterHandler;\n}\n\nexport interface Router extends IRouter { }\n\nexport interface CookieOptions {\n maxAge?: number;\n signed?: boolean;\n expires?: Date;\n httpOnly?: boolean;\n path?: string;\n domain?: string;\n secure?: boolean;\n encode?: (val: string) => string;\n sameSite?: boolean | 'lax' | 'strict' | 'none';\n}\n\nexport interface ByteRange { start: number; end: number; }\n\nexport interface RequestRanges extends RangeParserRanges { }\n\nexport type Errback = (err: Error) => void;\n\n/**\n * @param P For most requests, this should be `ParamsDictionary`, but if you're\n * using this in a route handler for a route that uses a `RegExp` or a wildcard\n * `string` path (e.g. `'/user/*'`), then `req.params` will be an array, in\n * which case you should use `ParamsArray` instead.\n *\n * @see https://expressjs.com/en/api.html#req.params\n *\n * @example\n * app.get('/user/:id', (req, res) => res.send(req.params.id)); // implicitly `ParamsDictionary`\n * app.get(/user\\/(.*)/, (req, res) => res.send(req.params[0]));\n * app.get('/user/*', (req, res) => res.send(req.params[0]));\n */\nexport interface Request

extends http.IncomingMessage, Express.Request {\n /**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n * req.get('Content-Type');\n * // => \"text/plain\"\n *\n * req.get('content-type');\n * // => \"text/plain\"\n *\n * req.get('Something');\n * // => undefined\n *\n * Aliased as `req.header()`.\n */\n get(name: \"set-cookie\"): string[] | undefined;\n get(name: string): string | undefined;\n\n header(name: \"set-cookie\"): string[] | undefined;\n header(name: string): string | undefined;\n\n /**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\", a comma-delimted list such as \"json, html, text/plain\",\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * req.accepts('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * req.accepts('html');\n * // => \"html\"\n * req.accepts('text/html');\n * // => \"text/html\"\n * req.accepts('json, text');\n * // => \"json\"", + "master:types/express/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// China Medical University Hospital \n// Puneet Arora \n// Dylan Frankland \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/* =================== USAGE ===================\n\n import express = require(\"express\");\n var app = express();\n\n =============================================== */\n\n/// \n/// \n\nimport * as bodyParser from \"body-parser\";\nimport serveStatic = require(\"serve-static\");\nimport * as core from \"express-serve-static-core\";\nimport * as qs from \"qs\";\n\n/**\n * Creates an Express application. The express() function is a top-level function exported by the express module.\n */\ndeclare function e(): core.Express;\n\ndeclare namespace e {\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with JSON payloads and is based on body-parser.\n * @since 4.16.0\n */\n var json: typeof bodyParser.json;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with Buffer payloads and is based on body-parser.\n * @since 4.17.0\n */\n var raw: typeof bodyParser.raw;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with text payloads and is based on body-parser.\n * @since 4.17.0\n */\n var text: typeof bodyParser.text;\n\n /**\n * These are the exposed prototypes.\n */\n var application: Application;\n var request: Request;\n var response: Response;\n\n /**\n * This is a built-in middleware function in Express. It serves static files and is based on serve-static.\n */\n var static: typeof serveStatic;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with urlencoded payloads and is based on body-parser.\n * @since 4.16.0\n */\n var urlencoded: typeof bodyParser.urlencoded;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming request query parameters.\n */\n export function query(options: qs.IParseOptions | typeof qs.parse): Handler;\n\n export function Router(options?: RouterOptions): core.Router;\n\n interface RouterOptions {\n /**\n * Enable case sensitivity.\n */\n caseSensitive?: boolean;\n\n /**\n * Preserve the req.params values from the parent router.\n * If the parent and the child have conflicting param names, the child’s value take precedence.\n *\n * @default false\n * @since 4.5.0\n */\n mergeParams?: boolean;\n\n /**\n * Enable strict routing.\n */\n strict?: boolean;\n }\n\n interface Application extends core.Application { }\n interface CookieOptions extends core.CookieOptions { }\n interface Errback extends core.Errback { }\n interface ErrorRequestHandler

\n extends core.ErrorRequestHandler { }\n interface Express extends core.Express { }\n interface Handler extends core.Handler { }\n interface IRoute extends core.IRoute { }\n interface IRouter extends core.IRouter { }\n interface IRouterHandler extends core.IRouterHandler { }\n interface IRouterMatcher extends core.IRouterMatcher { }\n interface MediaType extends core.MediaType { }\n interface NextFunction extends core.NextFunction { }\n interface Request

extends core.Request { }\n interface RequestHandler

extends core.RequestHandler { }\n interface RequestParamHandler extends core.RequestParamHandler { }\n export interface Response extends core.Response { }\n interface Router extends core.Router { }\n interface Send extends core.Send { }\n}\n\nexport = e;\n", + "dbe687d30362e4f887e88048a3646c13c0c4d907:types/express/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// China Medical University Hospital \n// Puneet Arora \n// Dylan Frankland \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/* =================== USAGE ===================\n\n import express = require(\"express\");\n var app = express();\n\n =============================================== */\n\n/// \n/// \n\nimport * as bodyParser from \"body-parser\";\nimport serveStatic = require(\"serve-static\");\nimport * as core from \"express-serve-static-core\";\nimport * as qs from \"qs\";\n\n/**\n * Creates an Express application. The express() function is a top-level function exported by the express module.\n */\ndeclare function e(): core.Express;\n\ndeclare namespace e {\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with JSON payloads and is based on body-parser.\n * @since 4.16.0\n */\n var json: typeof bodyParser.json;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with Buffer payloads and is based on body-parser.\n * @since 4.17.0\n */\n var raw: typeof bodyParser.raw;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with text payloads and is based on body-parser.\n * @since 4.17.0\n */\n var text: typeof bodyParser.text;\n\n /**\n * These are the exposed prototypes.\n */\n var application: Application;\n var request: Request;\n var response: Response;\n\n /**\n * This is a built-in middleware function in Express. It serves static files and is based on serve-static.\n */\n var static: typeof serveStatic;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with urlencoded payloads and is based on body-parser.\n * @since 4.16.0\n */\n var urlencoded: typeof bodyParser.urlencoded;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming request query parameters.\n */\n export function query(options: qs.IParseOptions | typeof qs.parse): Handler;\n\n export function Router(options?: RouterOptions): core.Router;\n\n interface RouterOptions {\n /**\n * Enable case sensitivity.\n */\n caseSensitive?: boolean;\n\n /**\n * Preserve the req.params values from the parent router.\n * If the parent and the child have conflicting param names, the child’s value take precedence.\n *\n * @default false\n * @since 4.5.0\n */\n mergeParams?: boolean;\n\n /**\n * Enable strict routing.\n */\n strict?: boolean;\n }\n\n interface Application extends core.Application { }\n interface CookieOptions extends core.CookieOptions { }\n interface Errback extends core.Errback { }\n interface ErrorRequestHandler

\n extends core.ErrorRequestHandler { }\n interface Express extends core.Express { }\n interface Handler extends core.Handler { }\n interface IRoute extends core.IRoute { }\n interface IRouter extends core.IRouter { }\n interface IRouterHandler extends core.IRouterHandler { }\n interface IRouterMatcher extends core.IRouterMatcher { }\n interface MediaType extends core.MediaType { }\n interface NextFunction extends core.NextFunction { }\n interface Request

extends core.Request { }\n interface RequestHandler

extends core.RequestHandler { }\n interface RequestParamHandler extends core.RequestParamHandler { }\n export interface Response extends core.Response { }\n interface Router extends core.Router { }\n interface Send extends core.Send { }\n}\n\nexport = e;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/_response.json b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/_response.json new file mode 100644 index 0000000000..fb78a9083f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/_response.json @@ -0,0 +1,354 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDcyOTQ5NjQ1", + "title": "[express] remove constraint that request params must be strings.", + "createdAt": "2020-08-25T05:33:17Z", + "author": { + "login": "mastermatt", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Critical package", + "__typename": "Label" + }, + { + "name": "Edits multiple packages", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 47017, + "state": "OPEN", + "headRefOid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:34:02Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:34:03Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:42:13Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:42:15Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:54:37Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:55:15Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T06:27:02Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-08-26T20:01:58Z", + "projectColumnName": "Waiting for Code Reviews" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "borisyankov", + "__typename": "User" + }, + "commit": { + "oid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "abbreviatedOid": "dbe687d", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-07-16T23:49:46Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46120#pullrequestreview-450281043", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093996367", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093996367", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093997005", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093997005", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-25T05:24:00Z", + "committedDate": "2020-08-25T05:24:00Z", + "pushedDate": "2020-08-25T05:26:54Z", + "abbreviatedOid": "e856df6", + "oid": "e856df671897fc9fbdfab6ef1496458303bc6aa9", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094033629", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094033629", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094034351", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094034351", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-25T05:47:06Z", + "committedDate": "2020-08-25T05:47:06Z", + "pushedDate": "2020-08-25T05:47:26Z", + "abbreviatedOid": "dbe687d", + "oid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTcyNjE5OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mastermatt Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 2 packages in this PR\n\n- `express-serve-static-core` [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest)\n- `express` [on npm](https://www.npmjs.com/package/express), [on unpkg](https://unpkg.com/browse/express@latest)\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ A DT maintainer needs to approve changes which 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": "2020-08-25T05:34:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTcyNjI1OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @borisyankov @19majkel94 @kacepe @micksatana @samijaber @aereal @JoseLion @dwrss @andoshin11 @CMUH @puneetar @dfrankland — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/47017/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": "2020-08-25T05:34:03Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTc0NzY2MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mastermatt The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093996367).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-08-25T05:42:15Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTc3OTk0NA==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## express ([unpkg](https://unpkg.com/browse/express@latest/))\nwas missing the following properties:\n1. Route\n

\n Generated by :no_entry_sign: dangerJS against dbe687d30362e4f887e88048a3646c13c0c4d907\n

\n", + "createdAt": "2020-08-25T05:54:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTgyODY1Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n### express-serve-static-core/v*\n\n\n
\nComparison details for express-serve-static-core/* 📊\n\n| | master | #47017 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 70.4 | 68.1 | -3.3% |\n| Type count | 10128 | 10102 | 0% |\n| Assignability cache size | 1955 | 1949 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 125 | 126 | +1% |\n| Identifiers in tests | 125 | 126 | +1% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 328.9 | 328.8 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.8% | 10.0% | |\n|     Worst duration (ms) | 462.5 | 451.3 | -2.4% |\n|     Worst identifier | [is](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express-serve-static-core/express-serve-static-core-tests.ts#L17) | [send](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express-serve-static-core/express-serve-static-core-tests.ts#L60) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 349.6 | 346.1 | -1.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.9% | 10.4% | -4.6% |\n|     Worst duration (ms) | 470.5 | 451.1 | -4.1% |\n|     Worst identifier | [req](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express-serve-static-core/express-serve-static-core-tests.ts#L58) | [req](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express-serve-static-core/express-serve-static-core-tests.ts#L13) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.\n\n### express/v*\n\n\n
\nComparison details for express/* 📊\n\n| | master | #47017 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 69.0 | 71.3 | +3.3% |\n| Type count | 11512 | 11480 | 0% |\n| Assignability cache size | 2097 | 2089 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 449 | 458 | +2% |\n| Identifiers in tests | 449 | 458 | +2% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 336.3 | 336.6 | +0.1% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.6% | 8.5% | |\n|     Worst duration (ms) | 574.1 | 582.4 | +1.4% |\n|     Worst identifier | [req](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express/express-tests.ts#L47) | [body](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express/express-tests.ts#L47) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 347.1 | 347.1 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.9% | 8.7% | -2.2% |\n|     Worst duration (ms) | 552.8 | 534.6 | -3.3% |\n|     Worst identifier | [get](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express/express-tests.ts#L188) | [use](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express/express-tests.ts#L217) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-08-25T06:27:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/express-serve-static-core/express-serve-static-core-tests.ts", + "additions": 5, + "deletions": 6, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/express-serve-static-core/index.d.ts", + "additions": 6, + "deletions": 6, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/express/express-tests.ts", + "additions": 13, + "deletions": 12, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/express/index.d.ts", + "additions": 3, + "deletions": 3, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDQyNTE2ODU=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/derived.json b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/derived.json new file mode 100644 index 0000000000..29f449a102 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/derived.json @@ -0,0 +1,78 @@ +{ + "type": "info", + "now": "2020-08-27T20:15:58.001Z", + "pr_number": 47017, + "author": "mastermatt", + "headCommitOid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "mergeBaseOid": "master", + "lastPushDate": "2020-08-25T05:47:26.000Z", + "lastActivityDate": "2020-08-26T20:01:58.000Z", + "maintainerBlessed": "Waiting for Code Reviews", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "express-serve-static-core", + "kind": "edit", + "files": [ + { + "path": "types/express-serve-static-core/express-serve-static-core-tests.ts", + "kind": "test" + }, + { + "path": "types/express-serve-static-core/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "borisyankov", + "19majkel94", + "kacepe", + "micksatana", + "samijaber", + "aereal", + "JoseLion", + "dwrss", + "andoshin11" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + }, + { + "name": "express", + "kind": "edit", + "files": [ + { + "path": "types/express/express-tests.ts", + "kind": "test" + }, + { + "path": "types/express/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "borisyankov", + "CMUH", + "puneetar", + "dfrankland" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "borisyankov", + "date": "2020-07-16T23:49:46.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} 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 new file mode 100644 index 0000000000..ab18378b1e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/mutations.json @@ -0,0 +1,41 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTcyNjE5OQ==", + "body": "@mastermatt Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `express-serve-static-core` — [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest/)\n - owner-approval: @borisyankov\n* `express` — [on npm](https://www.npmjs.com/package/express), [on unpkg](https://unpkg.com/browse/express@latest/)\n - owner-approval: @borisyankov\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=47017&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ All owners or a DT maintainer needs to approve changes that affect more than one package\n - ✅ express-serve-static-core\n - ✅ express\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": [ + "MDU6TGFiZWw5MDUzMzQwOTU=", + "MDU6TGFiZWw2OTcwMTg5NzI=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDcyOTQ5NjQ1" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNDQyNTE2ODU=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NDcyOTQ5NjQ1", + "body": "@mastermatt: Everything looks good here. I am ready to merge this PR (at dbe687d) 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" + } + } + } +] 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 new file mode 100644 index 0000000000..65dae28dbd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed-and-two-owner/result.json @@ -0,0 +1,22 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Critical package", + "Owner Approved", + "Edits multiple packages", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@mastermatt Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `express-serve-static-core` — [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest/)\n - owner-approval: @borisyankov\n* `express` — [on npm](https://www.npmjs.com/package/express), [on unpkg](https://unpkg.com/browse/express@latest/)\n - owner-approval: @borisyankov\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=47017&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ All owners or a DT maintainer needs to approve changes that affect more than one package\n - ✅ express-serve-static-core\n - ✅ express\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": "@mastermatt: Everything looks good here. I am ready to merge this PR (at dbe687d) 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" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed/_downloads.json b/packages/mergebot/src/_tests/fixtures/47017-blessed/_downloads.json new file mode 100644 index 0000000000..1b7e06464e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed/_downloads.json @@ -0,0 +1,4 @@ +{ + "express-serve-static-core": 16741351, + "express": 18862503 +} diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed/_files.json b/packages/mergebot/src/_tests/fixtures/47017-blessed/_files.json new file mode 100644 index 0000000000..9b0b92d899 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed/_files.json @@ -0,0 +1,6 @@ +{ + "master:types/express-serve-static-core/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// Michał Lytek \n// Kacper Polak \n// Satana Charuwichitratana \n// Sami Jaber \n// aereal \n// Jose Luis Leon \n// David Stephens \n// Shin Ando \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n// This extracts the core definitions from express to prevent a circular dependency between express and serve-static\n/// \n\ndeclare global {\n namespace Express {\n // These open interfaces may be extended in an application-specific manner via declaration merging.\n // See for example method-override.d.ts (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/method-override/index.d.ts)\n interface Request { }\n interface Response { }\n interface Application { }\n }\n}\n\nimport * as http from \"http\";\nimport { EventEmitter } from \"events\";\nimport { Options as RangeParserOptions, Result as RangeParserResult, Ranges as RangeParserRanges } from \"range-parser\";\nimport { ParsedQs } from \"qs\";\n\nexport type Query = ParsedQs;\n\nexport interface NextFunction {\n (err?: any): void;\n /**\n * \"Break-out\" of a router by calling {next('router')};\n * @see {https://expressjs.com/en/guide/using-middleware.html#middleware.router}\n */\n (deferToNext: \"router\"): void;\n}\n\nexport interface Dictionary { [key: string]: T; }\n\nexport interface ParamsDictionary { [key: string]: string; }\nexport type ParamsArray = string[];\nexport type Params = ParamsDictionary | ParamsArray;\n\nexport interface RequestHandler

{\n // tslint:disable-next-line callable-types (This is extended from and can't extend from a type alias in ts<2.2\n (req: Request, res: Response, next: NextFunction): any;\n}\n\nexport type ErrorRequestHandler

=\n (err: any, req: Request, res: Response, next: NextFunction) => any;\n\nexport type PathParams = string | RegExp | Array;\n\nexport type RequestHandlerParams

\n = RequestHandler\n | ErrorRequestHandler\n | Array\n | ErrorRequestHandler

>;\n\nexport interface IRouterMatcher {\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n (path: PathParams, subApplication: Application): T;\n}\n\nexport interface IRouterHandler {\n (...handlers: RequestHandler[]): T;\n (...handlers: RequestHandlerParams[]): T;\n}\n\nexport interface IRouter extends RequestHandler {\n /**\n * Map the given param placeholder `name`(s) to the given callback(s).\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the samesignature as middleware, the only differencing\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * app.param('user_id', function(req, res, next, id){\n * User.find(id, function(err, user){\n * if (err) {\n * next(err);\n * } else if (user) {\n * req.user = user;\n * next();\n * } else {\n * next(new Error('failed to load user'));\n * }\n * });\n * });\n */\n param(name: string, handler: RequestParamHandler): this;\n\n /**\n * Alternatively, you can pass only a callback, in which case you have the opportunity to alter the app.param()\n *\n * @deprecated since version 4.11\n */\n param(callback: (name: string, matcher: RegExp) => RequestParamHandler): this;\n\n /**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n */\n all: IRouterMatcher;\n get: IRouterMatcher;\n post: IRouterMatcher;\n put: IRouterMatcher;\n delete: IRouterMatcher;\n patch: IRouterMatcher;\n options: IRouterMatcher;\n head: IRouterMatcher;\n\n checkout: IRouterMatcher;\n connect: IRouterMatcher;\n copy: IRouterMatcher;\n lock: IRouterMatcher;\n merge: IRouterMatcher;\n mkactivity: IRouterMatcher;\n mkcol: IRouterMatcher;\n move: IRouterMatcher;\n \"m-search\": IRouterMatcher;\n notify: IRouterMatcher;\n propfind: IRouterMatcher;\n proppatch: IRouterMatcher;\n purge: IRouterMatcher;\n report: IRouterMatcher;\n search: IRouterMatcher;\n subscribe: IRouterMatcher;\n trace: IRouterMatcher;\n unlock: IRouterMatcher;\n unsubscribe: IRouterMatcher;\n\n use: IRouterHandler & IRouterMatcher;\n\n route(prefix: PathParams): IRoute;\n /**\n * Stack of configured routes\n */\n stack: any[];\n}\n\nexport interface IRoute {\n path: string;\n stack: any;\n all: IRouterHandler;\n get: IRouterHandler;\n post: IRouterHandler;\n put: IRouterHandler;\n delete: IRouterHandler;\n patch: IRouterHandler;\n options: IRouterHandler;\n head: IRouterHandler;\n\n checkout: IRouterHandler;\n copy: IRouterHandler;\n lock: IRouterHandler;\n merge: IRouterHandler;\n mkactivity: IRouterHandler;\n mkcol: IRouterHandler;\n move: IRouterHandler;\n \"m-search\": IRouterHandler;\n notify: IRouterHandler;\n purge: IRouterHandler;\n report: IRouterHandler;\n search: IRouterHandler;\n subscribe: IRouterHandler;\n trace: IRouterHandler;\n unlock: IRouterHandler;\n unsubscribe: IRouterHandler;\n}\n\nexport interface Router extends IRouter { }\n\nexport interface CookieOptions {\n maxAge?: number;\n signed?: boolean;\n expires?: Date;\n httpOnly?: boolean;\n path?: string;\n domain?: string;\n secure?: boolean;\n encode?: (val: string) => string;\n sameSite?: boolean | 'lax' | 'strict' | 'none';\n}\n\nexport interface ByteRange { start: number; end: number; }\n\nexport interface RequestRanges extends RangeParserRanges { }\n\nexport type Errback = (err: Error) => void;\n\n/**\n * @param P For most requests, this should be `ParamsDictionary`, but if you're\n * using this in a route handler for a route that uses a `RegExp` or a wildcard\n * `string` path (e.g. `'/user/*'`), then `req.params` will be an array, in\n * which case you should use `ParamsArray` instead.\n *\n * @see https://expressjs.com/en/api.html#req.params\n *\n * @example\n * app.get('/user/:id', (req, res) => res.send(req.params.id)); // implicitly `ParamsDictionary`\n * app.get(/user\\/(.*)/, (req, res) => res.send(req.params[0]));\n * app.get('/user/*', (req, res) => res.send(req.params[0]));\n */\nexport interface Request

extends http.IncomingMessage, Express.Request {\n /**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n * req.get('Content-Type');\n * // => \"text/plain\"\n *\n * req.get('content-type');\n * // => \"text/plain\"\n *\n * req.get('Something');\n * // => undefined\n *\n * Aliased as `req.header()`.\n */\n get(name: \"set-cookie\"): string[] | undefined;\n get(name: string): string | undefined;\n\n header(name: \"set-cookie\"): string[] | undefined;\n header(name: string): string | undefined;\n\n /**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\", a comma-delimted list such as \"json, html, text/plain\",\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * req.accepts('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * req.accepts('html');\n * // => \"html\"\n * req.accepts('text/html');\n * // => \"text/html\"\n * req.accepts('json, text');\n * // => \"json\"", + "dbe687d30362e4f887e88048a3646c13c0c4d907:types/express-serve-static-core/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// Michał Lytek \n// Kacper Polak \n// Satana Charuwichitratana \n// Sami Jaber \n// aereal \n// Jose Luis Leon \n// David Stephens \n// Shin Ando \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n// This extracts the core definitions from express to prevent a circular dependency between express and serve-static\n/// \n\ndeclare global {\n namespace Express {\n // These open interfaces may be extended in an application-specific manner via declaration merging.\n // See for example method-override.d.ts (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/method-override/index.d.ts)\n interface Request { }\n interface Response { }\n interface Application { }\n }\n}\n\nimport * as http from \"http\";\nimport { EventEmitter } from \"events\";\nimport { Options as RangeParserOptions, Result as RangeParserResult, Ranges as RangeParserRanges } from \"range-parser\";\nimport { ParsedQs } from \"qs\";\n\nexport type Query = ParsedQs;\n\nexport interface NextFunction {\n (err?: any): void;\n /**\n * \"Break-out\" of a router by calling {next('router')};\n * @see {https://expressjs.com/en/guide/using-middleware.html#middleware.router}\n */\n (deferToNext: \"router\"): void;\n}\n\nexport interface Dictionary { [key: string]: T; }\n\nexport interface ParamsDictionary { [key: string]: string; }\nexport type ParamsArray = string[];\nexport type Params = ParamsDictionary | ParamsArray;\n\nexport interface RequestHandler

{\n // tslint:disable-next-line callable-types (This is extended from and can't extend from a type alias in ts<2.2\n (req: Request, res: Response, next: NextFunction): any;\n}\n\nexport type ErrorRequestHandler

=\n (err: any, req: Request, res: Response, next: NextFunction) => any;\n\nexport type PathParams = string | RegExp | Array;\n\nexport type RequestHandlerParams

\n = RequestHandler\n | ErrorRequestHandler\n | Array\n | ErrorRequestHandler

>;\n\nexport interface IRouterMatcher {\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n (path: PathParams, subApplication: Application): T;\n}\n\nexport interface IRouterHandler {\n (...handlers: RequestHandler[]): T;\n (...handlers: RequestHandlerParams[]): T;\n}\n\nexport interface IRouter extends RequestHandler {\n /**\n * Map the given param placeholder `name`(s) to the given callback(s).\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the samesignature as middleware, the only differencing\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * app.param('user_id', function(req, res, next, id){\n * User.find(id, function(err, user){\n * if (err) {\n * next(err);\n * } else if (user) {\n * req.user = user;\n * next();\n * } else {\n * next(new Error('failed to load user'));\n * }\n * });\n * });\n */\n param(name: string, handler: RequestParamHandler): this;\n\n /**\n * Alternatively, you can pass only a callback, in which case you have the opportunity to alter the app.param()\n *\n * @deprecated since version 4.11\n */\n param(callback: (name: string, matcher: RegExp) => RequestParamHandler): this;\n\n /**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n */\n all: IRouterMatcher;\n get: IRouterMatcher;\n post: IRouterMatcher;\n put: IRouterMatcher;\n delete: IRouterMatcher;\n patch: IRouterMatcher;\n options: IRouterMatcher;\n head: IRouterMatcher;\n\n checkout: IRouterMatcher;\n connect: IRouterMatcher;\n copy: IRouterMatcher;\n lock: IRouterMatcher;\n merge: IRouterMatcher;\n mkactivity: IRouterMatcher;\n mkcol: IRouterMatcher;\n move: IRouterMatcher;\n \"m-search\": IRouterMatcher;\n notify: IRouterMatcher;\n propfind: IRouterMatcher;\n proppatch: IRouterMatcher;\n purge: IRouterMatcher;\n report: IRouterMatcher;\n search: IRouterMatcher;\n subscribe: IRouterMatcher;\n trace: IRouterMatcher;\n unlock: IRouterMatcher;\n unsubscribe: IRouterMatcher;\n\n use: IRouterHandler & IRouterMatcher;\n\n route(prefix: PathParams): IRoute;\n /**\n * Stack of configured routes\n */\n stack: any[];\n}\n\nexport interface IRoute {\n path: string;\n stack: any;\n all: IRouterHandler;\n get: IRouterHandler;\n post: IRouterHandler;\n put: IRouterHandler;\n delete: IRouterHandler;\n patch: IRouterHandler;\n options: IRouterHandler;\n head: IRouterHandler;\n\n checkout: IRouterHandler;\n copy: IRouterHandler;\n lock: IRouterHandler;\n merge: IRouterHandler;\n mkactivity: IRouterHandler;\n mkcol: IRouterHandler;\n move: IRouterHandler;\n \"m-search\": IRouterHandler;\n notify: IRouterHandler;\n purge: IRouterHandler;\n report: IRouterHandler;\n search: IRouterHandler;\n subscribe: IRouterHandler;\n trace: IRouterHandler;\n unlock: IRouterHandler;\n unsubscribe: IRouterHandler;\n}\n\nexport interface Router extends IRouter { }\n\nexport interface CookieOptions {\n maxAge?: number;\n signed?: boolean;\n expires?: Date;\n httpOnly?: boolean;\n path?: string;\n domain?: string;\n secure?: boolean;\n encode?: (val: string) => string;\n sameSite?: boolean | 'lax' | 'strict' | 'none';\n}\n\nexport interface ByteRange { start: number; end: number; }\n\nexport interface RequestRanges extends RangeParserRanges { }\n\nexport type Errback = (err: Error) => void;\n\n/**\n * @param P For most requests, this should be `ParamsDictionary`, but if you're\n * using this in a route handler for a route that uses a `RegExp` or a wildcard\n * `string` path (e.g. `'/user/*'`), then `req.params` will be an array, in\n * which case you should use `ParamsArray` instead.\n *\n * @see https://expressjs.com/en/api.html#req.params\n *\n * @example\n * app.get('/user/:id', (req, res) => res.send(req.params.id)); // implicitly `ParamsDictionary`\n * app.get(/user\\/(.*)/, (req, res) => res.send(req.params[0]));\n * app.get('/user/*', (req, res) => res.send(req.params[0]));\n */\nexport interface Request

extends http.IncomingMessage, Express.Request {\n /**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n * req.get('Content-Type');\n * // => \"text/plain\"\n *\n * req.get('content-type');\n * // => \"text/plain\"\n *\n * req.get('Something');\n * // => undefined\n *\n * Aliased as `req.header()`.\n */\n get(name: \"set-cookie\"): string[] | undefined;\n get(name: string): string | undefined;\n\n header(name: \"set-cookie\"): string[] | undefined;\n header(name: string): string | undefined;\n\n /**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\", a comma-delimted list such as \"json, html, text/plain\",\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * req.accepts('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * req.accepts('html');\n * // => \"html\"\n * req.accepts('text/html');\n * // => \"text/html\"\n * req.accepts('json, text');\n * // => \"json\"", + "master:types/express/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// China Medical University Hospital \n// Puneet Arora \n// Dylan Frankland \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/* =================== USAGE ===================\n\n import express = require(\"express\");\n var app = express();\n\n =============================================== */\n\n/// \n/// \n\nimport * as bodyParser from \"body-parser\";\nimport serveStatic = require(\"serve-static\");\nimport * as core from \"express-serve-static-core\";\nimport * as qs from \"qs\";\n\n/**\n * Creates an Express application. The express() function is a top-level function exported by the express module.\n */\ndeclare function e(): core.Express;\n\ndeclare namespace e {\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with JSON payloads and is based on body-parser.\n * @since 4.16.0\n */\n var json: typeof bodyParser.json;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with Buffer payloads and is based on body-parser.\n * @since 4.17.0\n */\n var raw: typeof bodyParser.raw;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with text payloads and is based on body-parser.\n * @since 4.17.0\n */\n var text: typeof bodyParser.text;\n\n /**\n * These are the exposed prototypes.\n */\n var application: Application;\n var request: Request;\n var response: Response;\n\n /**\n * This is a built-in middleware function in Express. It serves static files and is based on serve-static.\n */\n var static: typeof serveStatic;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with urlencoded payloads and is based on body-parser.\n * @since 4.16.0\n */\n var urlencoded: typeof bodyParser.urlencoded;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming request query parameters.\n */\n export function query(options: qs.IParseOptions | typeof qs.parse): Handler;\n\n export function Router(options?: RouterOptions): core.Router;\n\n interface RouterOptions {\n /**\n * Enable case sensitivity.\n */\n caseSensitive?: boolean;\n\n /**\n * Preserve the req.params values from the parent router.\n * If the parent and the child have conflicting param names, the child’s value take precedence.\n *\n * @default false\n * @since 4.5.0\n */\n mergeParams?: boolean;\n\n /**\n * Enable strict routing.\n */\n strict?: boolean;\n }\n\n interface Application extends core.Application { }\n interface CookieOptions extends core.CookieOptions { }\n interface Errback extends core.Errback { }\n interface ErrorRequestHandler

\n extends core.ErrorRequestHandler { }\n interface Express extends core.Express { }\n interface Handler extends core.Handler { }\n interface IRoute extends core.IRoute { }\n interface IRouter extends core.IRouter { }\n interface IRouterHandler extends core.IRouterHandler { }\n interface IRouterMatcher extends core.IRouterMatcher { }\n interface MediaType extends core.MediaType { }\n interface NextFunction extends core.NextFunction { }\n interface Request

extends core.Request { }\n interface RequestHandler

extends core.RequestHandler { }\n interface RequestParamHandler extends core.RequestParamHandler { }\n export interface Response extends core.Response { }\n interface Router extends core.Router { }\n interface Send extends core.Send { }\n}\n\nexport = e;\n", + "dbe687d30362e4f887e88048a3646c13c0c4d907:types/express/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// China Medical University Hospital \n// Puneet Arora \n// Dylan Frankland \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/* =================== USAGE ===================\n\n import express = require(\"express\");\n var app = express();\n\n =============================================== */\n\n/// \n/// \n\nimport * as bodyParser from \"body-parser\";\nimport serveStatic = require(\"serve-static\");\nimport * as core from \"express-serve-static-core\";\nimport * as qs from \"qs\";\n\n/**\n * Creates an Express application. The express() function is a top-level function exported by the express module.\n */\ndeclare function e(): core.Express;\n\ndeclare namespace e {\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with JSON payloads and is based on body-parser.\n * @since 4.16.0\n */\n var json: typeof bodyParser.json;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with Buffer payloads and is based on body-parser.\n * @since 4.17.0\n */\n var raw: typeof bodyParser.raw;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with text payloads and is based on body-parser.\n * @since 4.17.0\n */\n var text: typeof bodyParser.text;\n\n /**\n * These are the exposed prototypes.\n */\n var application: Application;\n var request: Request;\n var response: Response;\n\n /**\n * This is a built-in middleware function in Express. It serves static files and is based on serve-static.\n */\n var static: typeof serveStatic;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with urlencoded payloads and is based on body-parser.\n * @since 4.16.0\n */\n var urlencoded: typeof bodyParser.urlencoded;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming request query parameters.\n */\n export function query(options: qs.IParseOptions | typeof qs.parse): Handler;\n\n export function Router(options?: RouterOptions): core.Router;\n\n interface RouterOptions {\n /**\n * Enable case sensitivity.\n */\n caseSensitive?: boolean;\n\n /**\n * Preserve the req.params values from the parent router.\n * If the parent and the child have conflicting param names, the child’s value take precedence.\n *\n * @default false\n * @since 4.5.0\n */\n mergeParams?: boolean;\n\n /**\n * Enable strict routing.\n */\n strict?: boolean;\n }\n\n interface Application extends core.Application { }\n interface CookieOptions extends core.CookieOptions { }\n interface Errback extends core.Errback { }\n interface ErrorRequestHandler

\n extends core.ErrorRequestHandler { }\n interface Express extends core.Express { }\n interface Handler extends core.Handler { }\n interface IRoute extends core.IRoute { }\n interface IRouter extends core.IRouter { }\n interface IRouterHandler extends core.IRouterHandler { }\n interface IRouterMatcher extends core.IRouterMatcher { }\n interface MediaType extends core.MediaType { }\n interface NextFunction extends core.NextFunction { }\n interface Request

extends core.Request { }\n interface RequestHandler

extends core.RequestHandler { }\n interface RequestParamHandler extends core.RequestParamHandler { }\n export interface Response extends core.Response { }\n interface Router extends core.Router { }\n interface Send extends core.Send { }\n}\n\nexport = e;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed/_response.json b/packages/mergebot/src/_tests/fixtures/47017-blessed/_response.json new file mode 100644 index 0000000000..73314be90c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed/_response.json @@ -0,0 +1,333 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDcyOTQ5NjQ1", + "title": "[express] remove constraint that request params must be strings.", + "createdAt": "2020-08-25T05:33:17Z", + "author": { + "login": "mastermatt", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Critical package", + "__typename": "Label" + }, + { + "name": "Edits multiple packages", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 47017, + "state": "OPEN", + "headRefOid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:34:02Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:34:03Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:42:13Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:42:15Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:54:37Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:55:15Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T06:27:02Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-08-26T20:01:58Z", + "projectColumnName": "Waiting for Code Reviews" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093996367", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093996367", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093997005", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093997005", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-25T05:24:00Z", + "committedDate": "2020-08-25T05:24:00Z", + "pushedDate": "2020-08-25T05:26:54Z", + "abbreviatedOid": "e856df6", + "oid": "e856df671897fc9fbdfab6ef1496458303bc6aa9", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094033629", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094033629", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094034351", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094034351", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-25T05:47:06Z", + "committedDate": "2020-08-25T05:47:06Z", + "pushedDate": "2020-08-25T05:47:26Z", + "abbreviatedOid": "dbe687d", + "oid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTcyNjE5OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mastermatt Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 2 packages in this PR\n\n- `express-serve-static-core` [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest)\n- `express` [on npm](https://www.npmjs.com/package/express), [on unpkg](https://unpkg.com/browse/express@latest)\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ A DT maintainer needs to approve changes which 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": "2020-08-25T05:34:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTcyNjI1OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @borisyankov @19majkel94 @kacepe @micksatana @samijaber @aereal @JoseLion @dwrss @andoshin11 @CMUH @puneetar @dfrankland — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/47017/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": "2020-08-25T05:34:03Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTc0NzY2MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mastermatt The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093996367).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-08-25T05:42:15Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTc3OTk0NA==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## express ([unpkg](https://unpkg.com/browse/express@latest/))\nwas missing the following properties:\n1. Route\n

\n Generated by :no_entry_sign: dangerJS against dbe687d30362e4f887e88048a3646c13c0c4d907\n

\n", + "createdAt": "2020-08-25T05:54:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTgyODY1Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n### express-serve-static-core/v*\n\n\n
\nComparison details for express-serve-static-core/* 📊\n\n| | master | #47017 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 70.4 | 68.1 | -3.3% |\n| Type count | 10128 | 10102 | 0% |\n| Assignability cache size | 1955 | 1949 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 125 | 126 | +1% |\n| Identifiers in tests | 125 | 126 | +1% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 328.9 | 328.8 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.8% | 10.0% | |\n|     Worst duration (ms) | 462.5 | 451.3 | -2.4% |\n|     Worst identifier | [is](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express-serve-static-core/express-serve-static-core-tests.ts#L17) | [send](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express-serve-static-core/express-serve-static-core-tests.ts#L60) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 349.6 | 346.1 | -1.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.9% | 10.4% | -4.6% |\n|     Worst duration (ms) | 470.5 | 451.1 | -4.1% |\n|     Worst identifier | [req](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express-serve-static-core/express-serve-static-core-tests.ts#L58) | [req](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express-serve-static-core/express-serve-static-core-tests.ts#L13) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.\n\n### express/v*\n\n\n
\nComparison details for express/* 📊\n\n| | master | #47017 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 69.0 | 71.3 | +3.3% |\n| Type count | 11512 | 11480 | 0% |\n| Assignability cache size | 2097 | 2089 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 449 | 458 | +2% |\n| Identifiers in tests | 449 | 458 | +2% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 336.3 | 336.6 | +0.1% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.6% | 8.5% | |\n|     Worst duration (ms) | 574.1 | 582.4 | +1.4% |\n|     Worst identifier | [req](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express/express-tests.ts#L47) | [body](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express/express-tests.ts#L47) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 347.1 | 347.1 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.9% | 8.7% | -2.2% |\n|     Worst duration (ms) | 552.8 | 534.6 | -3.3% |\n|     Worst identifier | [get](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express/express-tests.ts#L188) | [use](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express/express-tests.ts#L217) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-08-25T06:27:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/express-serve-static-core/express-serve-static-core-tests.ts", + "additions": 5, + "deletions": 6, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/express-serve-static-core/index.d.ts", + "additions": 6, + "deletions": 6, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/express/express-tests.ts", + "additions": 13, + "deletions": 12, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/express/index.d.ts", + "additions": 3, + "deletions": 3, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDQyNTE2ODU=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed/derived.json b/packages/mergebot/src/_tests/fixtures/47017-blessed/derived.json new file mode 100644 index 0000000000..4560b30378 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed/derived.json @@ -0,0 +1,71 @@ +{ + "type": "info", + "now": "2020-08-27T20:15:58.001Z", + "pr_number": 47017, + "author": "mastermatt", + "headCommitOid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "mergeBaseOid": "master", + "lastPushDate": "2020-08-25T05:47:26.000Z", + "lastActivityDate": "2020-08-26T20:01:58.000Z", + "maintainerBlessed": "Waiting for Code Reviews", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "express-serve-static-core", + "kind": "edit", + "files": [ + { + "path": "types/express-serve-static-core/express-serve-static-core-tests.ts", + "kind": "test" + }, + { + "path": "types/express-serve-static-core/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "borisyankov", + "19majkel94", + "kacepe", + "micksatana", + "samijaber", + "aereal", + "JoseLion", + "dwrss", + "andoshin11" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + }, + { + "name": "express", + "kind": "edit", + "files": [ + { + "path": "types/express/express-tests.ts", + "kind": "test" + }, + { + "path": "types/express/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "borisyankov", + "CMUH", + "puneetar", + "dfrankland" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/47017-blessed/mutations.json b/packages/mergebot/src/_tests/fixtures/47017-blessed/mutations.json new file mode 100644 index 0000000000..3897dd83eb --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed/mutations.json @@ -0,0 +1,11 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTcyNjE5OQ==", + "body": "@mastermatt Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `express-serve-static-core` — [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest/)\n* `express` — [on npm](https://www.npmjs.com/package/express), [on unpkg](https://unpkg.com/browse/express@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=47017&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * 🕐 All owners or a DT maintainer needs to approve changes that affect more than one package\n - 🕐 express-serve-static-core\n - 🕐 express\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/47017-blessed/result.json b/packages/mergebot/src/_tests/fixtures/47017-blessed/result.json new file mode 100644 index 0000000000..ac1ce645a6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017-blessed/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Critical package", + "Edits multiple packages" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@mastermatt Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `express-serve-static-core` — [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest/)\n* `express` — [on npm](https://www.npmjs.com/package/express), [on unpkg](https://unpkg.com/browse/express@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=47017&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * 🕐 All owners or a DT maintainer needs to approve changes that affect more than one package\n - 🕐 express-serve-static-core\n - 🕐 express\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", + "status": "🔔 @borisyankov @19majkel94 @kacepe @micksatana @samijaber @aereal @JoseLion @dwrss @andoshin11 @CMUH @puneetar @dfrankland — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/47017/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/47017/_downloads.json b/packages/mergebot/src/_tests/fixtures/47017/_downloads.json new file mode 100644 index 0000000000..1b7e06464e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017/_downloads.json @@ -0,0 +1,4 @@ +{ + "express-serve-static-core": 16741351, + "express": 18862503 +} diff --git a/packages/mergebot/src/_tests/fixtures/47017/_files.json b/packages/mergebot/src/_tests/fixtures/47017/_files.json new file mode 100644 index 0000000000..9b0b92d899 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017/_files.json @@ -0,0 +1,6 @@ +{ + "master:types/express-serve-static-core/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// Michał Lytek \n// Kacper Polak \n// Satana Charuwichitratana \n// Sami Jaber \n// aereal \n// Jose Luis Leon \n// David Stephens \n// Shin Ando \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n// This extracts the core definitions from express to prevent a circular dependency between express and serve-static\n/// \n\ndeclare global {\n namespace Express {\n // These open interfaces may be extended in an application-specific manner via declaration merging.\n // See for example method-override.d.ts (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/method-override/index.d.ts)\n interface Request { }\n interface Response { }\n interface Application { }\n }\n}\n\nimport * as http from \"http\";\nimport { EventEmitter } from \"events\";\nimport { Options as RangeParserOptions, Result as RangeParserResult, Ranges as RangeParserRanges } from \"range-parser\";\nimport { ParsedQs } from \"qs\";\n\nexport type Query = ParsedQs;\n\nexport interface NextFunction {\n (err?: any): void;\n /**\n * \"Break-out\" of a router by calling {next('router')};\n * @see {https://expressjs.com/en/guide/using-middleware.html#middleware.router}\n */\n (deferToNext: \"router\"): void;\n}\n\nexport interface Dictionary { [key: string]: T; }\n\nexport interface ParamsDictionary { [key: string]: string; }\nexport type ParamsArray = string[];\nexport type Params = ParamsDictionary | ParamsArray;\n\nexport interface RequestHandler

{\n // tslint:disable-next-line callable-types (This is extended from and can't extend from a type alias in ts<2.2\n (req: Request, res: Response, next: NextFunction): any;\n}\n\nexport type ErrorRequestHandler

=\n (err: any, req: Request, res: Response, next: NextFunction) => any;\n\nexport type PathParams = string | RegExp | Array;\n\nexport type RequestHandlerParams

\n = RequestHandler\n | ErrorRequestHandler\n | Array\n | ErrorRequestHandler

>;\n\nexport interface IRouterMatcher {\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n (path: PathParams, subApplication: Application): T;\n}\n\nexport interface IRouterHandler {\n (...handlers: RequestHandler[]): T;\n (...handlers: RequestHandlerParams[]): T;\n}\n\nexport interface IRouter extends RequestHandler {\n /**\n * Map the given param placeholder `name`(s) to the given callback(s).\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the samesignature as middleware, the only differencing\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * app.param('user_id', function(req, res, next, id){\n * User.find(id, function(err, user){\n * if (err) {\n * next(err);\n * } else if (user) {\n * req.user = user;\n * next();\n * } else {\n * next(new Error('failed to load user'));\n * }\n * });\n * });\n */\n param(name: string, handler: RequestParamHandler): this;\n\n /**\n * Alternatively, you can pass only a callback, in which case you have the opportunity to alter the app.param()\n *\n * @deprecated since version 4.11\n */\n param(callback: (name: string, matcher: RegExp) => RequestParamHandler): this;\n\n /**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n */\n all: IRouterMatcher;\n get: IRouterMatcher;\n post: IRouterMatcher;\n put: IRouterMatcher;\n delete: IRouterMatcher;\n patch: IRouterMatcher;\n options: IRouterMatcher;\n head: IRouterMatcher;\n\n checkout: IRouterMatcher;\n connect: IRouterMatcher;\n copy: IRouterMatcher;\n lock: IRouterMatcher;\n merge: IRouterMatcher;\n mkactivity: IRouterMatcher;\n mkcol: IRouterMatcher;\n move: IRouterMatcher;\n \"m-search\": IRouterMatcher;\n notify: IRouterMatcher;\n propfind: IRouterMatcher;\n proppatch: IRouterMatcher;\n purge: IRouterMatcher;\n report: IRouterMatcher;\n search: IRouterMatcher;\n subscribe: IRouterMatcher;\n trace: IRouterMatcher;\n unlock: IRouterMatcher;\n unsubscribe: IRouterMatcher;\n\n use: IRouterHandler & IRouterMatcher;\n\n route(prefix: PathParams): IRoute;\n /**\n * Stack of configured routes\n */\n stack: any[];\n}\n\nexport interface IRoute {\n path: string;\n stack: any;\n all: IRouterHandler;\n get: IRouterHandler;\n post: IRouterHandler;\n put: IRouterHandler;\n delete: IRouterHandler;\n patch: IRouterHandler;\n options: IRouterHandler;\n head: IRouterHandler;\n\n checkout: IRouterHandler;\n copy: IRouterHandler;\n lock: IRouterHandler;\n merge: IRouterHandler;\n mkactivity: IRouterHandler;\n mkcol: IRouterHandler;\n move: IRouterHandler;\n \"m-search\": IRouterHandler;\n notify: IRouterHandler;\n purge: IRouterHandler;\n report: IRouterHandler;\n search: IRouterHandler;\n subscribe: IRouterHandler;\n trace: IRouterHandler;\n unlock: IRouterHandler;\n unsubscribe: IRouterHandler;\n}\n\nexport interface Router extends IRouter { }\n\nexport interface CookieOptions {\n maxAge?: number;\n signed?: boolean;\n expires?: Date;\n httpOnly?: boolean;\n path?: string;\n domain?: string;\n secure?: boolean;\n encode?: (val: string) => string;\n sameSite?: boolean | 'lax' | 'strict' | 'none';\n}\n\nexport interface ByteRange { start: number; end: number; }\n\nexport interface RequestRanges extends RangeParserRanges { }\n\nexport type Errback = (err: Error) => void;\n\n/**\n * @param P For most requests, this should be `ParamsDictionary`, but if you're\n * using this in a route handler for a route that uses a `RegExp` or a wildcard\n * `string` path (e.g. `'/user/*'`), then `req.params` will be an array, in\n * which case you should use `ParamsArray` instead.\n *\n * @see https://expressjs.com/en/api.html#req.params\n *\n * @example\n * app.get('/user/:id', (req, res) => res.send(req.params.id)); // implicitly `ParamsDictionary`\n * app.get(/user\\/(.*)/, (req, res) => res.send(req.params[0]));\n * app.get('/user/*', (req, res) => res.send(req.params[0]));\n */\nexport interface Request

extends http.IncomingMessage, Express.Request {\n /**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n * req.get('Content-Type');\n * // => \"text/plain\"\n *\n * req.get('content-type');\n * // => \"text/plain\"\n *\n * req.get('Something');\n * // => undefined\n *\n * Aliased as `req.header()`.\n */\n get(name: \"set-cookie\"): string[] | undefined;\n get(name: string): string | undefined;\n\n header(name: \"set-cookie\"): string[] | undefined;\n header(name: string): string | undefined;\n\n /**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\", a comma-delimted list such as \"json, html, text/plain\",\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * req.accepts('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * req.accepts('html');\n * // => \"html\"\n * req.accepts('text/html');\n * // => \"text/html\"\n * req.accepts('json, text');\n * // => \"json\"", + "dbe687d30362e4f887e88048a3646c13c0c4d907:types/express-serve-static-core/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// Michał Lytek \n// Kacper Polak \n// Satana Charuwichitratana \n// Sami Jaber \n// aereal \n// Jose Luis Leon \n// David Stephens \n// Shin Ando \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n// This extracts the core definitions from express to prevent a circular dependency between express and serve-static\n/// \n\ndeclare global {\n namespace Express {\n // These open interfaces may be extended in an application-specific manner via declaration merging.\n // See for example method-override.d.ts (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/method-override/index.d.ts)\n interface Request { }\n interface Response { }\n interface Application { }\n }\n}\n\nimport * as http from \"http\";\nimport { EventEmitter } from \"events\";\nimport { Options as RangeParserOptions, Result as RangeParserResult, Ranges as RangeParserRanges } from \"range-parser\";\nimport { ParsedQs } from \"qs\";\n\nexport type Query = ParsedQs;\n\nexport interface NextFunction {\n (err?: any): void;\n /**\n * \"Break-out\" of a router by calling {next('router')};\n * @see {https://expressjs.com/en/guide/using-middleware.html#middleware.router}\n */\n (deferToNext: \"router\"): void;\n}\n\nexport interface Dictionary { [key: string]: T; }\n\nexport interface ParamsDictionary { [key: string]: string; }\nexport type ParamsArray = string[];\nexport type Params = ParamsDictionary | ParamsArray;\n\nexport interface RequestHandler

{\n // tslint:disable-next-line callable-types (This is extended from and can't extend from a type alias in ts<2.2\n (req: Request, res: Response, next: NextFunction): any;\n}\n\nexport type ErrorRequestHandler

=\n (err: any, req: Request, res: Response, next: NextFunction) => any;\n\nexport type PathParams = string | RegExp | Array;\n\nexport type RequestHandlerParams

\n = RequestHandler\n | ErrorRequestHandler\n | Array\n | ErrorRequestHandler

>;\n\nexport interface IRouterMatcher {\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n // tslint:disable-next-line no-unnecessary-generics (This generic is meant to be passed explicitly.)\n

(path: PathParams, ...handlers: Array>): T;\n (path: PathParams, subApplication: Application): T;\n}\n\nexport interface IRouterHandler {\n (...handlers: RequestHandler[]): T;\n (...handlers: RequestHandlerParams[]): T;\n}\n\nexport interface IRouter extends RequestHandler {\n /**\n * Map the given param placeholder `name`(s) to the given callback(s).\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the samesignature as middleware, the only differencing\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * app.param('user_id', function(req, res, next, id){\n * User.find(id, function(err, user){\n * if (err) {\n * next(err);\n * } else if (user) {\n * req.user = user;\n * next();\n * } else {\n * next(new Error('failed to load user'));\n * }\n * });\n * });\n */\n param(name: string, handler: RequestParamHandler): this;\n\n /**\n * Alternatively, you can pass only a callback, in which case you have the opportunity to alter the app.param()\n *\n * @deprecated since version 4.11\n */\n param(callback: (name: string, matcher: RegExp) => RequestParamHandler): this;\n\n /**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n */\n all: IRouterMatcher;\n get: IRouterMatcher;\n post: IRouterMatcher;\n put: IRouterMatcher;\n delete: IRouterMatcher;\n patch: IRouterMatcher;\n options: IRouterMatcher;\n head: IRouterMatcher;\n\n checkout: IRouterMatcher;\n connect: IRouterMatcher;\n copy: IRouterMatcher;\n lock: IRouterMatcher;\n merge: IRouterMatcher;\n mkactivity: IRouterMatcher;\n mkcol: IRouterMatcher;\n move: IRouterMatcher;\n \"m-search\": IRouterMatcher;\n notify: IRouterMatcher;\n propfind: IRouterMatcher;\n proppatch: IRouterMatcher;\n purge: IRouterMatcher;\n report: IRouterMatcher;\n search: IRouterMatcher;\n subscribe: IRouterMatcher;\n trace: IRouterMatcher;\n unlock: IRouterMatcher;\n unsubscribe: IRouterMatcher;\n\n use: IRouterHandler & IRouterMatcher;\n\n route(prefix: PathParams): IRoute;\n /**\n * Stack of configured routes\n */\n stack: any[];\n}\n\nexport interface IRoute {\n path: string;\n stack: any;\n all: IRouterHandler;\n get: IRouterHandler;\n post: IRouterHandler;\n put: IRouterHandler;\n delete: IRouterHandler;\n patch: IRouterHandler;\n options: IRouterHandler;\n head: IRouterHandler;\n\n checkout: IRouterHandler;\n copy: IRouterHandler;\n lock: IRouterHandler;\n merge: IRouterHandler;\n mkactivity: IRouterHandler;\n mkcol: IRouterHandler;\n move: IRouterHandler;\n \"m-search\": IRouterHandler;\n notify: IRouterHandler;\n purge: IRouterHandler;\n report: IRouterHandler;\n search: IRouterHandler;\n subscribe: IRouterHandler;\n trace: IRouterHandler;\n unlock: IRouterHandler;\n unsubscribe: IRouterHandler;\n}\n\nexport interface Router extends IRouter { }\n\nexport interface CookieOptions {\n maxAge?: number;\n signed?: boolean;\n expires?: Date;\n httpOnly?: boolean;\n path?: string;\n domain?: string;\n secure?: boolean;\n encode?: (val: string) => string;\n sameSite?: boolean | 'lax' | 'strict' | 'none';\n}\n\nexport interface ByteRange { start: number; end: number; }\n\nexport interface RequestRanges extends RangeParserRanges { }\n\nexport type Errback = (err: Error) => void;\n\n/**\n * @param P For most requests, this should be `ParamsDictionary`, but if you're\n * using this in a route handler for a route that uses a `RegExp` or a wildcard\n * `string` path (e.g. `'/user/*'`), then `req.params` will be an array, in\n * which case you should use `ParamsArray` instead.\n *\n * @see https://expressjs.com/en/api.html#req.params\n *\n * @example\n * app.get('/user/:id', (req, res) => res.send(req.params.id)); // implicitly `ParamsDictionary`\n * app.get(/user\\/(.*)/, (req, res) => res.send(req.params[0]));\n * app.get('/user/*', (req, res) => res.send(req.params[0]));\n */\nexport interface Request

extends http.IncomingMessage, Express.Request {\n /**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n * req.get('Content-Type');\n * // => \"text/plain\"\n *\n * req.get('content-type');\n * // => \"text/plain\"\n *\n * req.get('Something');\n * // => undefined\n *\n * Aliased as `req.header()`.\n */\n get(name: \"set-cookie\"): string[] | undefined;\n get(name: string): string | undefined;\n\n header(name: \"set-cookie\"): string[] | undefined;\n header(name: string): string | undefined;\n\n /**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\", a comma-delimted list such as \"json, html, text/plain\",\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * req.accepts('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * req.accepts('html');\n * // => \"html\"\n * req.accepts('text/html');\n * // => \"text/html\"\n * req.accepts('json, text');\n * // => \"json\"", + "master:types/express/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// China Medical University Hospital \n// Puneet Arora \n// Dylan Frankland \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/* =================== USAGE ===================\n\n import express = require(\"express\");\n var app = express();\n\n =============================================== */\n\n/// \n/// \n\nimport * as bodyParser from \"body-parser\";\nimport serveStatic = require(\"serve-static\");\nimport * as core from \"express-serve-static-core\";\nimport * as qs from \"qs\";\n\n/**\n * Creates an Express application. The express() function is a top-level function exported by the express module.\n */\ndeclare function e(): core.Express;\n\ndeclare namespace e {\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with JSON payloads and is based on body-parser.\n * @since 4.16.0\n */\n var json: typeof bodyParser.json;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with Buffer payloads and is based on body-parser.\n * @since 4.17.0\n */\n var raw: typeof bodyParser.raw;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with text payloads and is based on body-parser.\n * @since 4.17.0\n */\n var text: typeof bodyParser.text;\n\n /**\n * These are the exposed prototypes.\n */\n var application: Application;\n var request: Request;\n var response: Response;\n\n /**\n * This is a built-in middleware function in Express. It serves static files and is based on serve-static.\n */\n var static: typeof serveStatic;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with urlencoded payloads and is based on body-parser.\n * @since 4.16.0\n */\n var urlencoded: typeof bodyParser.urlencoded;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming request query parameters.\n */\n export function query(options: qs.IParseOptions | typeof qs.parse): Handler;\n\n export function Router(options?: RouterOptions): core.Router;\n\n interface RouterOptions {\n /**\n * Enable case sensitivity.\n */\n caseSensitive?: boolean;\n\n /**\n * Preserve the req.params values from the parent router.\n * If the parent and the child have conflicting param names, the child’s value take precedence.\n *\n * @default false\n * @since 4.5.0\n */\n mergeParams?: boolean;\n\n /**\n * Enable strict routing.\n */\n strict?: boolean;\n }\n\n interface Application extends core.Application { }\n interface CookieOptions extends core.CookieOptions { }\n interface Errback extends core.Errback { }\n interface ErrorRequestHandler

\n extends core.ErrorRequestHandler { }\n interface Express extends core.Express { }\n interface Handler extends core.Handler { }\n interface IRoute extends core.IRoute { }\n interface IRouter extends core.IRouter { }\n interface IRouterHandler extends core.IRouterHandler { }\n interface IRouterMatcher extends core.IRouterMatcher { }\n interface MediaType extends core.MediaType { }\n interface NextFunction extends core.NextFunction { }\n interface Request

extends core.Request { }\n interface RequestHandler

extends core.RequestHandler { }\n interface RequestParamHandler extends core.RequestParamHandler { }\n export interface Response extends core.Response { }\n interface Router extends core.Router { }\n interface Send extends core.Send { }\n}\n\nexport = e;\n", + "dbe687d30362e4f887e88048a3646c13c0c4d907:types/express/index.d.ts": "// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov \n// China Medical University Hospital \n// Puneet Arora \n// Dylan Frankland \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/* =================== USAGE ===================\n\n import express = require(\"express\");\n var app = express();\n\n =============================================== */\n\n/// \n/// \n\nimport * as bodyParser from \"body-parser\";\nimport serveStatic = require(\"serve-static\");\nimport * as core from \"express-serve-static-core\";\nimport * as qs from \"qs\";\n\n/**\n * Creates an Express application. The express() function is a top-level function exported by the express module.\n */\ndeclare function e(): core.Express;\n\ndeclare namespace e {\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with JSON payloads and is based on body-parser.\n * @since 4.16.0\n */\n var json: typeof bodyParser.json;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with Buffer payloads and is based on body-parser.\n * @since 4.17.0\n */\n var raw: typeof bodyParser.raw;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with text payloads and is based on body-parser.\n * @since 4.17.0\n */\n var text: typeof bodyParser.text;\n\n /**\n * These are the exposed prototypes.\n */\n var application: Application;\n var request: Request;\n var response: Response;\n\n /**\n * This is a built-in middleware function in Express. It serves static files and is based on serve-static.\n */\n var static: typeof serveStatic;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming requests with urlencoded payloads and is based on body-parser.\n * @since 4.16.0\n */\n var urlencoded: typeof bodyParser.urlencoded;\n\n /**\n * This is a built-in middleware function in Express. It parses incoming request query parameters.\n */\n export function query(options: qs.IParseOptions | typeof qs.parse): Handler;\n\n export function Router(options?: RouterOptions): core.Router;\n\n interface RouterOptions {\n /**\n * Enable case sensitivity.\n */\n caseSensitive?: boolean;\n\n /**\n * Preserve the req.params values from the parent router.\n * If the parent and the child have conflicting param names, the child’s value take precedence.\n *\n * @default false\n * @since 4.5.0\n */\n mergeParams?: boolean;\n\n /**\n * Enable strict routing.\n */\n strict?: boolean;\n }\n\n interface Application extends core.Application { }\n interface CookieOptions extends core.CookieOptions { }\n interface Errback extends core.Errback { }\n interface ErrorRequestHandler

\n extends core.ErrorRequestHandler { }\n interface Express extends core.Express { }\n interface Handler extends core.Handler { }\n interface IRoute extends core.IRoute { }\n interface IRouter extends core.IRouter { }\n interface IRouterHandler extends core.IRouterHandler { }\n interface IRouterMatcher extends core.IRouterMatcher { }\n interface MediaType extends core.MediaType { }\n interface NextFunction extends core.NextFunction { }\n interface Request

extends core.Request { }\n interface RequestHandler

extends core.RequestHandler { }\n interface RequestParamHandler extends core.RequestParamHandler { }\n export interface Response extends core.Response { }\n interface Router extends core.Router { }\n interface Send extends core.Send { }\n}\n\nexport = e;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/47017/_response.json b/packages/mergebot/src/_tests/fixtures/47017/_response.json new file mode 100644 index 0000000000..b7580eff37 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017/_response.json @@ -0,0 +1,324 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDcyOTQ5NjQ1", + "title": "[express] remove constraint that request params must be strings.", + "createdAt": "2020-08-25T05:33:17Z", + "author": { + "login": "mastermatt", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Critical package", + "__typename": "Label" + }, + { + "name": "Edits multiple packages", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 47017, + "state": "OPEN", + "headRefOid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:34:02Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:34:03Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:42:13Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:42:15Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:54:37Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T05:55:15Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-08-25T06:27:02Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093996367", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093996367", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093997005", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093997005", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-25T05:24:00Z", + "committedDate": "2020-08-25T05:24:00Z", + "pushedDate": "2020-08-25T05:26:54Z", + "abbreviatedOid": "e856df6", + "oid": "e856df671897fc9fbdfab6ef1496458303bc6aa9", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094033629", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094033629", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094034351", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/dbe687d30362e4f887e88048a3646c13c0c4d907/checks?check_suite_id=1094034351", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-25T05:47:06Z", + "committedDate": "2020-08-25T05:47:06Z", + "pushedDate": "2020-08-25T05:47:26Z", + "abbreviatedOid": "dbe687d", + "oid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTcyNjE5OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mastermatt Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 2 packages in this PR\n\n- `express-serve-static-core` [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest)\n- `express` [on npm](https://www.npmjs.com/package/express), [on unpkg](https://unpkg.com/browse/express@latest)\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ A DT maintainer needs to approve changes which 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": "2020-08-25T05:34:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTcyNjI1OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @borisyankov @19majkel94 @kacepe @micksatana @samijaber @aereal @JoseLion @dwrss @andoshin11 @CMUH @puneetar @dfrankland — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/47017/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": "2020-08-25T05:34:03Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTc0NzY2MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mastermatt The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e856df671897fc9fbdfab6ef1496458303bc6aa9/checks?check_suite_id=1093996367).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2020-08-25T05:42:15Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTc3OTk0NA==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## express ([unpkg](https://unpkg.com/browse/express@latest/))\nwas missing the following properties:\n1. Route\n

\n Generated by :no_entry_sign: dangerJS against dbe687d30362e4f887e88048a3646c13c0c4d907\n

\n", + "createdAt": "2020-08-25T05:54:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTgyODY1Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n### express-serve-static-core/v*\n\n\n
\nComparison details for express-serve-static-core/* 📊\n\n| | master | #47017 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 70.4 | 68.1 | -3.3% |\n| Type count | 10128 | 10102 | 0% |\n| Assignability cache size | 1955 | 1949 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 125 | 126 | +1% |\n| Identifiers in tests | 125 | 126 | +1% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 328.9 | 328.8 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.8% | 10.0% | |\n|     Worst duration (ms) | 462.5 | 451.3 | -2.4% |\n|     Worst identifier | [is](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express-serve-static-core/express-serve-static-core-tests.ts#L17) | [send](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express-serve-static-core/express-serve-static-core-tests.ts#L60) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 349.6 | 346.1 | -1.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.9% | 10.4% | -4.6% |\n|     Worst duration (ms) | 470.5 | 451.1 | -4.1% |\n|     Worst identifier | [req](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express-serve-static-core/express-serve-static-core-tests.ts#L58) | [req](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express-serve-static-core/express-serve-static-core-tests.ts#L13) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.\n\n### express/v*\n\n\n
\nComparison details for express/* 📊\n\n| | master | #47017 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 69.0 | 71.3 | +3.3% |\n| Type count | 11512 | 11480 | 0% |\n| Assignability cache size | 2097 | 2089 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 449 | 458 | +2% |\n| Identifiers in tests | 449 | 458 | +2% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 336.3 | 336.6 | +0.1% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.6% | 8.5% | |\n|     Worst duration (ms) | 574.1 | 582.4 | +1.4% |\n|     Worst identifier | [req](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express/express-tests.ts#L47) | [body](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express/express-tests.ts#L47) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 347.1 | 347.1 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.9% | 8.7% | -2.2% |\n|     Worst duration (ms) | 552.8 | 534.6 | -3.3% |\n|     Worst identifier | [get](/DefinitelyTyped/DefinitelyTyped/blob/e18788ab97bd0113f72c8f68d3e1ee693093705a/types/express/express-tests.ts#L188) | [use](/DefinitelyTyped/DefinitelyTyped/blob/a8fc7eec16838da067f998f7e0c230266125de4b/types/express/express-tests.ts#L217) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-08-25T06:27:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/express-serve-static-core/express-serve-static-core-tests.ts", + "additions": 5, + "deletions": 6, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/express-serve-static-core/index.d.ts", + "additions": 6, + "deletions": 6, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/express/express-tests.ts", + "additions": 13, + "deletions": 12, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/express/index.d.ts", + "additions": 3, + "deletions": 3, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDQyNTE2ODU=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/47017/derived.json b/packages/mergebot/src/_tests/fixtures/47017/derived.json new file mode 100644 index 0000000000..0e8d252075 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017/derived.json @@ -0,0 +1,70 @@ +{ + "type": "info", + "now": "2020-08-27T20:15:58.001Z", + "pr_number": 47017, + "author": "mastermatt", + "headCommitOid": "dbe687d30362e4f887e88048a3646c13c0c4d907", + "mergeBaseOid": "master", + "lastPushDate": "2020-08-25T05:47:26.000Z", + "lastActivityDate": "2020-08-25T05:54:37.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "express-serve-static-core", + "kind": "edit", + "files": [ + { + "path": "types/express-serve-static-core/express-serve-static-core-tests.ts", + "kind": "test" + }, + { + "path": "types/express-serve-static-core/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "borisyankov", + "19majkel94", + "kacepe", + "micksatana", + "samijaber", + "aereal", + "JoseLion", + "dwrss", + "andoshin11" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + }, + { + "name": "express", + "kind": "edit", + "files": [ + { + "path": "types/express/express-tests.ts", + "kind": "test" + }, + { + "path": "types/express/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "borisyankov", + "CMUH", + "puneetar", + "dfrankland" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/47017/mutations.json b/packages/mergebot/src/_tests/fixtures/47017/mutations.json new file mode 100644 index 0000000000..bd78bb6c28 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017/mutations.json @@ -0,0 +1,20 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY3OTcyNjE5OQ==", + "body": "@mastermatt Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `express-serve-static-core` — [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest/)\n* `express` — [on npm](https://www.npmjs.com/package/express), [on unpkg](https://unpkg.com/browse/express@latest/)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=47017&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" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNDQyNTE2ODU=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/47017/result.json b/packages/mergebot/src/_tests/fixtures/47017/result.json new file mode 100644 index 0000000000..13b76aea06 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/47017/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Needs Maintainer Review", + "labels": [ + "Critical package", + "Edits multiple packages" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@mastermatt Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `express-serve-static-core` — [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest/)\n* `express` — [on npm](https://www.npmjs.com/package/express), [on unpkg](https://unpkg.com/browse/express@latest/)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=47017&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 ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @borisyankov @19majkel94 @kacepe @micksatana @samijaber @aereal @JoseLion @dwrss @andoshin11 @CMUH @puneetar @dfrankland — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/47017/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/48216/_downloads.json b/packages/mergebot/src/_tests/fixtures/48216/_downloads.json new file mode 100644 index 0000000000..20e024f379 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48216/_downloads.json @@ -0,0 +1,3 @@ +{ + "apptimize__apptimize-web-sdk": 1164 +} diff --git a/packages/mergebot/src/_tests/fixtures/48216/_files.json b/packages/mergebot/src/_tests/fixtures/48216/_files.json new file mode 100644 index 0000000000..800b2f8926 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48216/_files.json @@ -0,0 +1,6 @@ +{ + "3f689bfb9d310612cdaf7c52c7ead41d1181b52f:types/apptimize__apptimize-web-sdk/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"paths\": {\n \"@apptimize/*\": [\n \"apptimize__*\"\n ]\n }\n },\n \"files\": [\n \"index.d.ts\",\n \"apptimize__apptimize-web-sdk-tests.ts\"\n ]\n}\n", + "master:types/apptimize__apptimize-web-sdk/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"apptimize__apptimize-web-sdk-tests.ts\"\n ]\n}\n", + "master:types/apptimize__apptimize-web-sdk/index.d.ts": "// Type definitions for @apptimize/apptimize-web-sdk 1.2\n// Project: https://www.npmjs.com/package/@apptimize/apptimize-web-sdk\n// Definitions by: Vivint Team Innovation \n// Robert Baxter \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\ninterface Dictionary {\n [key: string]: T;\n}\n\n// Named export this interface for use in setup method parameter\nexport interface ConfigAttributes {\n log_level?: 'LOG_LEVEL_VERBOSE' | 'LOG_LEVEL_DEBUG' | 'LOG_LEVEL_INFO' | 'LOG_LEVEL_WARN' | 'LOG_LEVEL_ERROR' | 'LOG_LEVEL_NONE';\n result_post_delay_ms?: number;\n}\n\n// Named export this interface for use in callback methods\nexport interface VariantInfo {\n getAnonymousUserId(): string;\n getCurrentPhase(): number;\n getCycle(): number;\n getExperimentId(): number;\n getExperimentName(): string;\n getExperimentType(): number;\n getExperimentTypeName(): string;\n getParticipationPhase(): number;\n getUserHasParticipated(): boolean;\n getUserId(): string;\n getVariantId(): number;\n getVariantName(): string;\n}\n\ntype simpleData = string | number | boolean;\ntype callback = () => void;\ntype variantInfoCallback = (variantInfo: VariantInfo) => void;\ntype unenrollmentCallback = (variantInfo: VariantInfo, unenrollmentReason: string) => void;\n\ninterface Apptimize {\n flushTracking(): void;\n getApptimizeAnonUserId(): string;\n getApptimizeSDKPlatform(): string;\n getApptimizeSDKVersion(): string;\n getBool(name: string, defaultValue: boolean): boolean;\n getBoolArray(name: string, defaultValue: boolean[]): boolean[];\n getBoolDictionary(name: string, defaultValue: Dictionary): Dictionary;\n getCustomAttributes(): Dictionary;\n getCustomerUserId(): string;\n getDouble(name: string, defaultValue: number): number;\n getDoubleArray(name: string, defaultValue: number[]): number[];\n getDoubleDictionary(name: string, defaultValue: Dictionary): Dictionary;\n getInt(name: string, defaultValue: number): number;\n getIntArray(name: string, defaultValue: number[]): number[];\n getIntDictionary(name: string, defaultValue: Dictionary): Dictionary;\n getString(name: string, defaultValue: string): string;\n getStringArray(name: string, defaultValue: string[]): string[];\n getStringDictionary(name: string, defaultValue: Dictionary): Dictionary;\n getVariantInfo(): VariantInfo[];\n isFeatureFlagEnabled(name: string): boolean;\n runCodeBlock(codeBlockVariableName: string, callback: Dictionary): void;\n setAppName(name: string): void;\n setAppVersion(version: string): void;\n setCustomAttributes(attributes: Dictionary): void;\n setCustomerUserId(id: string): void;\n setOnApptimizeInitializedCallback(callback: callback): void;\n setOnEnrolledInExperimentCallback(callback: variantInfoCallback): void;\n setOnMetadataUpdatedCallback(callback: callback): void;\n setOnParticipatedInExperimentCallback(callback: variantInfoCallback): void;\n setOnUnenrolledInExperimentCallback(callback: unenrollmentCallback): void;\n setPilotTargetingId(id: string): void;\n setup(appKey: string, configAttributes?: ConfigAttributes): void;\n track(eventName: string): void;\n trackValue(eventName: string, value: number): void;\n updateApptimizeMetadataOnce(): void;\n}\n\ndeclare const apptimize: Apptimize;\nexport default apptimize;\n", + "3f689bfb9d310612cdaf7c52c7ead41d1181b52f:types/apptimize__apptimize-web-sdk/index.d.ts": "// Type definitions for @apptimize/apptimize-web-sdk 1.2\n// Project: https://www.npmjs.com/package/@apptimize/apptimize-web-sdk\n// Definitions by: Vivint Team Innovation \n// Robert Baxter \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\ninterface Dictionary {\n [key: string]: T;\n}\n\n// Named export this interface for use in setup method parameter\nexport interface ConfigAttributes {\n log_level?: 'LOG_LEVEL_VERBOSE' | 'LOG_LEVEL_DEBUG' | 'LOG_LEVEL_INFO' | 'LOG_LEVEL_WARN' | 'LOG_LEVEL_ERROR' | 'LOG_LEVEL_NONE';\n result_post_delay_ms?: number;\n}\n\n// Named export this interface for use in callback methods\nexport interface VariantInfo {\n getAnonymousUserId(): string;\n getCurrentPhase(): number;\n getCycle(): number;\n getExperimentId(): number;\n getExperimentName(): string;\n getExperimentType(): number;\n getExperimentTypeName(): string;\n getParticipationPhase(): number;\n getUserHasParticipated(): boolean;\n getUserId(): string;\n getVariantId(): number;\n getVariantName(): string;\n}\n\ntype simpleData = string | number | boolean;\ntype callback = () => void;\ntype variantInfoCallback = (variantInfo: VariantInfo) => void;\ntype unenrollmentCallback = (variantInfo: VariantInfo, unenrollmentReason: string) => void;\n\ninterface Apptimize {\n flushTracking(): void;\n getApptimizeAnonUserId(): string;\n getApptimizeSDKPlatform(): string;\n getApptimizeSDKVersion(): string;\n getBool(name: string, defaultValue: boolean): boolean;\n getBoolArray(name: string, defaultValue: boolean[]): boolean[];\n getBoolDictionary(name: string, defaultValue: Dictionary): Dictionary;\n getCustomAttributes(): Dictionary;\n getCustomerUserId(): string;\n getDouble(name: string, defaultValue: number): number;\n getDoubleArray(name: string, defaultValue: number[]): number[];\n getDoubleDictionary(name: string, defaultValue: Dictionary): Dictionary;\n getInt(name: string, defaultValue: number): number;\n getIntArray(name: string, defaultValue: number[]): number[];\n getIntDictionary(name: string, defaultValue: Dictionary): Dictionary;\n getString(name: string, defaultValue: string): string;\n getStringArray(name: string, defaultValue: string[]): string[];\n getStringDictionary(name: string, defaultValue: Dictionary): Dictionary;\n getVariantInfo(): VariantInfo[];\n isFeatureFlagEnabled(name: string): boolean;\n runCodeBlock(codeBlockVariableName: string, callback: Dictionary): void;\n setAppName(name: string): void;\n setAppVersion(version: string): void;\n setCustomAttributes(attributes: Dictionary): void;\n setCustomerUserId(id: string): void;\n setOnApptimizeInitializedCallback(callback: callback): void;\n setOnEnrolledInExperimentCallback(callback: variantInfoCallback): void;\n setOnMetadataUpdatedCallback(callback: callback): void;\n setOnParticipatedInExperimentCallback(callback: variantInfoCallback): void;\n setOnUnenrolledInExperimentCallback(callback: unenrollmentCallback): void;\n setPilotTargetingId(id: string): void;\n setup(appKey: string, configAttributes?: ConfigAttributes): void;\n track(eventName: string): void;\n trackValue(eventName: string, value: number): void;\n updateApptimizeMetadataOnce(): void;\n}\n\ndeclare const apptimize: Apptimize;\nexport default apptimize;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/48216/_response.json b/packages/mergebot/src/_tests/fixtures/48216/_response.json new file mode 100644 index 0000000000..761d03f523 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48216/_response.json @@ -0,0 +1,221 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDkzNjExNjMz", + "title": "[apptimize__apptimize-web-sdk] Unmangle scoped package names", + "createdAt": "2020-09-26T18:27:53Z", + "author": { + "login": "jablko", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Check Config", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 48216, + "state": "OPEN", + "headRefOid": "3f689bfb9d310612cdaf7c52c7ead41d1181b52f", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-09-27T17:34:13Z" + }, + { + "__typename": "ReadyForReviewEvent", + "createdAt": "2020-09-27T19:01:23Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-09-27T19:01:58Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-09-27T19:01:59Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-09-27T19:02:00Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3f689bfb9d310612cdaf7c52c7ead41d1181b52f/checks?check_suite_id=1252086451", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3f689bfb9d310612cdaf7c52c7ead41d1181b52f/checks?check_suite_id=1252086451", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3f689bfb9d310612cdaf7c52c7ead41d1181b52f/checks?check_suite_id=1252086960", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3f689bfb9d310612cdaf7c52c7ead41d1181b52f/checks?check_suite_id=1252086960", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-28T18:17:12Z", + "committedDate": "2020-09-27T17:21:32Z", + "pushedDate": "2020-09-27T17:23:58Z", + "abbreviatedOid": "3f689bf", + "oid": "3f689bfb9d310612cdaf7c52c7ead41d1181b52f", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY5OTY2NDI3NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #48216 | diff |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 35.5 | 35.5 | +0.1% |\n| Type count | 2248 | 2248 | 0% |\n| Assignability cache size | 127 | 127 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 155 | 155 | 0% |\n| Identifiers in tests | 155 | 155 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 98.6 | 102.1 | +3.6% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 15.6% | 17.1% | |\n|     Worst duration (ms) | 145.6 | 148.5 | +2.0% |\n|     Worst identifier | [runCodeBlock](/DefinitelyTyped/DefinitelyTyped/blob/962988086377b24102db89d0cb3d97e8a7675c66/types/apptimize__apptimize-web-sdk/apptimize__apptimize-web-sdk-tests.ts#L54) | [setup](/DefinitelyTyped/DefinitelyTyped/blob/51177a3021bb94499193e5371bdd0f09dbf95007/types/apptimize__apptimize-web-sdk/apptimize__apptimize-web-sdk-tests.ts#L74) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 97.1 | 99.7 | +2.7% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 16.0% | 16.7% | +4.4% |\n|     Worst duration (ms) | 140.6 | 143.8 | +2.2% |\n|     Worst identifier | [setup](/DefinitelyTyped/DefinitelyTyped/blob/962988086377b24102db89d0cb3d97e8a7675c66/types/apptimize__apptimize-web-sdk/apptimize__apptimize-web-sdk-tests.ts#L74) | [setup](/DefinitelyTyped/DefinitelyTyped/blob/51177a3021bb94499193e5371bdd0f09dbf95007/types/apptimize__apptimize-web-sdk/apptimize__apptimize-web-sdk-tests.ts#L74) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-09-27T17:34:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY5OTY3NDQ3NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@jablko Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n- `apptimize__apptimize-web-sdk` [on npm](https://www.npmjs.com/package/@apptimize/apptimize-web-sdk), [on unpkg](https://unpkg.com/browse/@apptimize/apptimize-web-sdk@latest/)\n\n## Code Reviews\n\nBecause this PR edits the configuration file, it can be merged once it's reviewed by a DT maintainer.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ A DT maintainer needs to approve changes which affect module config files\n - `apptimize__apptimize-web-sdk/tsconfig.json`: changes outside of \"files\" list\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": "2020-09-27T19:01:59Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY5OTY3NDQ3OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @innovation-team @rlbaxter — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48216/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": "2020-09-27T19:02:00Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/apptimize__apptimize-web-sdk/apptimize__apptimize-web-sdk-tests.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/apptimize__apptimize-web-sdk/tsconfig.json", + "additions": 6, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDYyMzQ5NjQ=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy", + "name": "Needs Maintainer Review", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/48216/derived.json b/packages/mergebot/src/_tests/fixtures/48216/derived.json new file mode 100644 index 0000000000..353c9b2c20 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48216/derived.json @@ -0,0 +1,40 @@ +{ + "type": "info", + "now": "2020-09-27T19:02:30.338Z", + "pr_number": 48216, + "author": "jablko", + "headCommitOid": "3f689bfb9d310612cdaf7c52c7ead41d1181b52f", + "mergeBaseOid": "master", + "lastPushDate": "2020-09-27T17:23:58.000Z", + "lastActivityDate": "2020-09-27T19:01:23.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "apptimize__apptimize-web-sdk", + "kind": "edit", + "files": [ + { + "path": "types/apptimize__apptimize-web-sdk/apptimize__apptimize-web-sdk-tests.ts", + "kind": "test" + }, + { + "path": "types/apptimize__apptimize-web-sdk/tsconfig.json", + "kind": "package-meta-ok" + } + ], + "owners": [ + "innovation-team", + "rlbaxter" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/48216/mutations.json b/packages/mergebot/src/_tests/fixtures/48216/mutations.json new file mode 100644 index 0000000000..ca222efae5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48216/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY5OTY3NDQ3NQ==", + "body": "@jablko Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `apptimize__apptimize-web-sdk` — [on npm](https://www.npmjs.com/package/@apptimize/apptimize-web-sdk), [on unpkg](https://unpkg.com/browse/@apptimize/apptimize-web-sdk@latest/)\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=48216&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, 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" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDkzNjExNjMz" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNDYyMzQ5NjQ=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/48216/result.json b/packages/mergebot/src/_tests/fixtures/48216/result.json new file mode 100644 index 0000000000..bc8d65d2cf --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48216/result.json @@ -0,0 +1,17 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [], + "responseComments": [ + { + "tag": "welcome", + "status": "@jablko Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `apptimize__apptimize-web-sdk` — [on npm](https://www.npmjs.com/package/@apptimize/apptimize-web-sdk), [on unpkg](https://unpkg.com/browse/@apptimize/apptimize-web-sdk@latest/)\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=48216&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, 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 ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @innovation-team @rlbaxter — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48216/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/48236/_downloads.json b/packages/mergebot/src/_tests/fixtures/48236/_downloads.json new file mode 100644 index 0000000000..7f4a5378ba --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48236/_downloads.json @@ -0,0 +1,3 @@ +{ + "woocommerce__woocommerce-rest-api": 1271 +} diff --git a/packages/mergebot/src/_tests/fixtures/48236/_files.json b/packages/mergebot/src/_tests/fixtures/48236/_files.json new file mode 100644 index 0000000000..5b4ee87a52 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48236/_files.json @@ -0,0 +1,6 @@ +{ + "b4d71f672f0f204a514002348ebc2025d18866ca:types/woocommerce__woocommerce-rest-api/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictFunctionTypes\": true,\n \"strictNullChecks\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"paths\": {\n \"@woocommerce/*\": [\n \"woocommerce__*\"\n ]\n }\n },\n \"files\": [\n \"index.d.ts\",\n \"woocommerce__woocommerce-rest-api-tests.ts\"\n ]\n}\n", + "master:types/woocommerce__woocommerce-rest-api/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictFunctionTypes\": true,\n \"strictNullChecks\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"woocommerce__woocommerce-rest-api-tests.ts\"\n ]\n}\n", + "master:types/woocommerce__woocommerce-rest-api/index.d.ts": "// Type definitions for @woocommerce/woocommerce-rest-api 1.0\n// Project: https://github.com/woocommerce/woocommerce-rest-api-js-lib\n// Definitions by: KaKa \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\nexport type WooCommerceRestApiVersion = 'wc/v3' | 'wc/v2' | 'wc/v1' | 'wc-api/v3' | 'wc-api/v2' | 'wc-api/v1';\nexport type WooCommerceRestApiEncoding = 'utf-8' | 'ascii';\nexport type WooCommerceRestApiMethod = 'get' | 'post' | 'put' | 'delete' | 'options';\n\nexport interface WooCommerceRestApiOptions {\n /* Your Store URL, example: http://woo.dev/ */\n url: string;\n /* Your API consumer key */\n consumerKey: string;\n /* Your API consumer secret */\n consumerSecret: string;\n /* Custom WP REST API URL prefix, used to support custom prefixes created with the `rest_url_prefix filter` */\n wpAPIPrefix?: string;\n /* API version, default is `v3` */\n version?: WooCommerceRestApiVersion;\n /* Encoding, default is 'utf-8' */\n encoding?: WooCommerceRestApiEncoding;\n /* When `true` and using under HTTPS force Basic Authentication as query string, default is `false` */\n queryStringAuth?: boolean;\n /* Provide support for URLs with ports, eg: `8080` */\n port?: number;\n /* Define the request timeout */\n timeout?: number;\n /* Define the custom Axios config, also override this library options */\n axiosConfig?: any;\n}\n\nexport interface WooCommerceRestApiQuery {\n [key: string]: string;\n}\n\n/**\n * WooCommerce REST API wrapper\n */\nexport default class WooCommerceRestApi {\n classVersion: string;\n url: string;\n consumerKey: string;\n consumerSecret: string;\n wpAPIPrefix: string;\n version: WooCommerceRestApiVersion;\n encoding: WooCommerceRestApiEncoding;\n queryStringAuth: boolean;\n port: number;\n timeout: number;\n axiosConfig: any;\n\n /**\n * Class constructor.\n */\n constructor(opt: WooCommerceRestApiOptions | WooCommerceRestApi);\n\n /**\n * Set default options\n */\n _setDefaultsOptions(opt: WooCommerceRestApiOptions): void;\n\n /**\n * Parse params object.\n */\n _parseParamsObject(params: any, query: any): WooCommerceRestApiQuery;\n\n /**\n * Normalize query string for oAuth\n */\n _normalizeQueryString(url: string, params: any): string;\n\n /**\n * Get URL\n */\n _getUrl(endpoint: string, params: any): string;\n\n /**\n * Get OAuth\n */\n _getOAuth(): any;\n\n /**\n * Do requests\n */\n _request(method: WooCommerceRestApiMethod, endpoint: string, data: any, params: any): Promise;\n\n /**\n * GET requests\n */\n get(endpoint: string, params?: any): Promise;\n\n /**\n * POST requests\n */\n post(endpoint: string, data: any, params?: any): Promise;\n\n /**\n * PUT requests\n */\n put(endpoint: string, data: any, params?: any): Promise;\n\n /**\n * DELETE requests\n */\n delete(endpoint: string, params?: any): Promise;\n\n /**\n * OPTIONS requests\n */\n options(endpoint: string, params?: any): Promise;\n}\n\n/**\n * Options Exception.\n */\nexport class OptionsException {\n name: 'Options Error';\n message: string;\n\n /**\n * Constructor.\n */\n constructor(message: string);\n}\n", + "b4d71f672f0f204a514002348ebc2025d18866ca:types/woocommerce__woocommerce-rest-api/index.d.ts": "// Type definitions for @woocommerce/woocommerce-rest-api 1.0\n// Project: https://github.com/woocommerce/woocommerce-rest-api-js-lib\n// Definitions by: KaKa \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\nexport type WooCommerceRestApiVersion = 'wc/v3' | 'wc/v2' | 'wc/v1' | 'wc-api/v3' | 'wc-api/v2' | 'wc-api/v1';\nexport type WooCommerceRestApiEncoding = 'utf-8' | 'ascii';\nexport type WooCommerceRestApiMethod = 'get' | 'post' | 'put' | 'delete' | 'options';\n\nexport interface WooCommerceRestApiOptions {\n /* Your Store URL, example: http://woo.dev/ */\n url: string;\n /* Your API consumer key */\n consumerKey: string;\n /* Your API consumer secret */\n consumerSecret: string;\n /* Custom WP REST API URL prefix, used to support custom prefixes created with the `rest_url_prefix filter` */\n wpAPIPrefix?: string;\n /* API version, default is `v3` */\n version?: WooCommerceRestApiVersion;\n /* Encoding, default is 'utf-8' */\n encoding?: WooCommerceRestApiEncoding;\n /* When `true` and using under HTTPS force Basic Authentication as query string, default is `false` */\n queryStringAuth?: boolean;\n /* Provide support for URLs with ports, eg: `8080` */\n port?: number;\n /* Define the request timeout */\n timeout?: number;\n /* Define the custom Axios config, also override this library options */\n axiosConfig?: any;\n}\n\nexport interface WooCommerceRestApiQuery {\n [key: string]: string;\n}\n\n/**\n * WooCommerce REST API wrapper\n */\nexport default class WooCommerceRestApi {\n classVersion: string;\n url: string;\n consumerKey: string;\n consumerSecret: string;\n wpAPIPrefix: string;\n version: WooCommerceRestApiVersion;\n encoding: WooCommerceRestApiEncoding;\n queryStringAuth: boolean;\n port: number;\n timeout: number;\n axiosConfig: any;\n\n /**\n * Class constructor.\n */\n constructor(opt: WooCommerceRestApiOptions | WooCommerceRestApi);\n\n /**\n * Set default options\n */\n _setDefaultsOptions(opt: WooCommerceRestApiOptions): void;\n\n /**\n * Parse params object.\n */\n _parseParamsObject(params: any, query: any): WooCommerceRestApiQuery;\n\n /**\n * Normalize query string for oAuth\n */\n _normalizeQueryString(url: string, params: any): string;\n\n /**\n * Get URL\n */\n _getUrl(endpoint: string, params: any): string;\n\n /**\n * Get OAuth\n */\n _getOAuth(): any;\n\n /**\n * Do requests\n */\n _request(method: WooCommerceRestApiMethod, endpoint: string, data: any, params: any): Promise;\n\n /**\n * GET requests\n */\n get(endpoint: string, params?: any): Promise;\n\n /**\n * POST requests\n */\n post(endpoint: string, data: any, params?: any): Promise;\n\n /**\n * PUT requests\n */\n put(endpoint: string, data: any, params?: any): Promise;\n\n /**\n * DELETE requests\n */\n delete(endpoint: string, params?: any): Promise;\n\n /**\n * OPTIONS requests\n */\n options(endpoint: string, params?: any): Promise;\n}\n\n/**\n * Options Exception.\n */\nexport class OptionsException {\n name: 'Options Error';\n message: string;\n\n /**\n * Constructor.\n */\n constructor(message: string);\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/48236/_response.json b/packages/mergebot/src/_tests/fixtures/48236/_response.json new file mode 100644 index 0000000000..131f06f4a3 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48236/_response.json @@ -0,0 +1,362 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NDkzNjEyMTI3", + "title": "[woocommerce__woocommerce-rest-api] Unmangle scoped package names", + "createdAt": "2020-09-26T18:31:44Z", + "author": { + "login": "jablko", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Check Config", + "__typename": "Label" + }, + { + "name": "Maintainer Approved", + "__typename": "Label" + }, + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Other Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 48236, + "state": "OPEN", + "headRefOid": "b4d71f672f0f204a514002348ebc2025d18866ca", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-09-27T17:49:46Z" + }, + { + "__typename": "ReadyForReviewEvent", + "createdAt": "2020-09-27T19:03:37Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-09-27T19:04:12Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-09-27T19:04:13Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-09-27T19:04:14Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-09-30T00:08:24Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-09-30T00:08:26Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "jablko", + "__typename": "User" + }, + "createdAt": "2020-10-02T18:45:57Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-02T18:46:31Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-02T19:13:40Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "b4d71f672f0f204a514002348ebc2025d18866ca", + "abbreviatedOid": "b4d71f6", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-09-27T22:17:06Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48236#pullrequestreview-497115580", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "amcasey", + "__typename": "User" + }, + "commit": { + "oid": "b4d71f672f0f204a514002348ebc2025d18866ca", + "abbreviatedOid": "b4d71f6", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-09-30T00:07:50Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48236#pullrequestreview-499005740", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "b4d71f672f0f204a514002348ebc2025d18866ca", + "abbreviatedOid": "b4d71f6", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-02T19:13:08Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48236#pullrequestreview-501385349", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/b4d71f672f0f204a514002348ebc2025d18866ca/checks?check_suite_id=1252088488", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/b4d71f672f0f204a514002348ebc2025d18866ca/checks?check_suite_id=1252088488", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/b4d71f672f0f204a514002348ebc2025d18866ca/checks?check_suite_id=1252088986", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/b4d71f672f0f204a514002348ebc2025d18866ca/checks?check_suite_id=1252088986", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-08-28T18:17:12Z", + "committedDate": "2020-09-27T17:23:10Z", + "pushedDate": "2020-09-27T17:25:18Z", + "abbreviatedOid": "b4d71f6", + "oid": "b4d71f672f0f204a514002348ebc2025d18866ca", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDY5OTY2NTk3MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #48236 | diff |\n| ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 36.9 | 37.3 | +1.0% |\n| Type count | 2190 | 2190 | 0% |\n| Assignability cache size | 100 | 100 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 48 | 48 | 0% |\n| Identifiers in tests | 48 | 48 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 107.1 | 107.3 | +0.2% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 26.1% | 24.3% | |\n|     Worst duration (ms) | 127.2 | 142.8 | +12.3% |\n|     Worst identifier | [delete](/DefinitelyTyped/DefinitelyTyped/blob/962988086377b24102db89d0cb3d97e8a7675c66/types/woocommerce__woocommerce-rest-api/woocommerce__woocommerce-rest-api-tests.ts#L21) | [Promise](/DefinitelyTyped/DefinitelyTyped/blob/ef1c123b683a92060fcba727b0e2015c5c1e3c23/types/woocommerce__woocommerce-rest-api/woocommerce__woocommerce-rest-api-tests.ts#L23) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 105.2 | 106.0 | +0.8% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 25.5% | 23.7% | -7.2% |\n|     Worst duration (ms) | 130.9 | 133.3 | +1.8% |\n|     Worst identifier | [Promise](/DefinitelyTyped/DefinitelyTyped/blob/962988086377b24102db89d0cb3d97e8a7675c66/types/woocommerce__woocommerce-rest-api/woocommerce__woocommerce-rest-api-tests.ts#L21) | [delete](/DefinitelyTyped/DefinitelyTyped/blob/ef1c123b683a92060fcba727b0e2015c5c1e3c23/types/woocommerce__woocommerce-rest-api/woocommerce__woocommerce-rest-api-tests.ts#L21) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-09-27T17:49:46Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY5OTY3NDc5MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@jablko Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n- `woocommerce__woocommerce-rest-api` [on npm](https://www.npmjs.com/package/@woocommerce/woocommerce-rest-api), [on unpkg](https://unpkg.com/browse/@woocommerce/woocommerce-rest-api@latest/)\n\n## Code Reviews\n\nBecause this PR edits the configuration file, it can be merged once it's reviewed by a DT maintainer.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ A DT maintainer needs to approve changes which affect module config files\n - `woocommerce__woocommerce-rest-api/tsconfig.json`: changes outside of \"files\" list\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", + "createdAt": "2020-09-27T19:04:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY5OTY3NDc5NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @climba03003 — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48236/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": "2020-09-27T19:04:14Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwMTA1ODc1Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@jablko Everything looks good here. Great job! I am ready to merge this PR (at b4d71f6) on your behalf.\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(@climba03003: you can do this too.)\n", + "createdAt": "2020-09-30T00:08:26Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwMjg5ODQzNg==", + "author": { + "login": "jablko", + "__typename": "User" + }, + "body": "Ready to merge", + "createdAt": "2020-10-02T18:45:57Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/woocommerce__woocommerce-rest-api/tsconfig.json", + "additions": 6, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/woocommerce__woocommerce-rest-api/woocommerce__woocommerce-rest-api-tests.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDYyMzUxMDY=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz", + "name": "Waiting for Author to Merge", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/48236/derived.json b/packages/mergebot/src/_tests/fixtures/48236/derived.json new file mode 100644 index 0000000000..e7770433a5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48236/derived.json @@ -0,0 +1,55 @@ +{ + "type": "info", + "now": "2020-10-05T00:43:22.594Z", + "pr_number": 48236, + "author": "jablko", + "headCommitOid": "b4d71f672f0f204a514002348ebc2025d18866ca", + "mergeBaseOid": "master", + "lastPushDate": "2020-09-27T17:25:18.000Z", + "lastActivityDate": "2020-10-02T19:13:08.000Z", + "mergeOfferDate": "2020-09-30T00:08:26.000Z", + "mergeRequestDate": "2020-10-02T18:45:57.000Z", + "mergeRequestUser": "jablko", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "woocommerce__woocommerce-rest-api", + "kind": "edit", + "files": [ + { + "path": "types/woocommerce__woocommerce-rest-api/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/woocommerce__woocommerce-rest-api/woocommerce__woocommerce-rest-api-tests.ts", + "kind": "test" + } + ], + "owners": [ + "climba03003" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "peterblazejewicz", + "date": "2020-10-02T19:13:08.000Z", + "isMaintainer": false + }, + { + "type": "approved", + "reviewer": "amcasey", + "date": "2020-09-30T00:07:50.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/48236/mutations.json b/packages/mergebot/src/_tests/fixtures/48236/mutations.json new file mode 100644 index 0000000000..b335ca55b0 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48236/mutations.json @@ -0,0 +1,52 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY5OTY3NDc5MQ==", + "body": "@jablko Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `woocommerce__woocommerce-rest-api` — [on npm](https://www.npmjs.com/package/@woocommerce/woocommerce-rest-api), [on unpkg](https://unpkg.com/browse/@woocommerce/woocommerce-rest-api@latest/)\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=48236&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, DT maintainers or others\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## Inactive\n\nThis PR has been inactive for 5 days.\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwxNjA4NTUyNDEw", + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NDkzNjEyMTI3" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNDYyMzUxMDY=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI1" + } + } + }, + { + "mutation": "mutation ($input: MergePullRequestInput!) {\n mergePullRequest(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "commitHeadline": "🤖 Merge PR #48236 [woocommerce__woocommerce-rest-api] Unmangle scoped package names by @jablko", + "expectedHeadOid": "b4d71f672f0f204a514002348ebc2025d18866ca", + "mergeMethod": "SQUASH", + "pullRequestId": "MDExOlB1bGxSZXF1ZXN0NDkzNjEyMTI3" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDcwMTA1ODc1Nw==", + "body": "@jablko: Everything looks good here. I am ready to merge this PR (at b4d71f6) 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(@climba03003: you can do this too.)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/48236/result.json b/packages/mergebot/src/_tests/fixtures/48236/result.json new file mode 100644 index 0000000000..8c79904bcf --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48236/result.json @@ -0,0 +1,24 @@ +{ + "projectColumn": "Recently Merged", + "labels": [ + "Other Approved", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@jablko Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `woocommerce__woocommerce-rest-api` — [on npm](https://www.npmjs.com/package/@woocommerce/woocommerce-rest-api), [on unpkg](https://unpkg.com/browse/@woocommerce/woocommerce-rest-api@latest/)\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=48236&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, DT maintainers or others\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## Inactive\n\nThis PR has been inactive for 5 days.\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @climba03003 — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48236/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." + }, + { + "tag": "merge-offer", + "status": "@jablko: Everything looks good here. I am ready to merge this PR (at b4d71f6) 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(@climba03003: you can do this too.)" + } + ], + "shouldClose": false, + "shouldMerge": true, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-merge-offer/_downloads.json b/packages/mergebot/src/_tests/fixtures/48652-merge-offer/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-merge-offer/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/48652-merge-offer/_files.json b/packages/mergebot/src/_tests/fixtures/48652-merge-offer/_files.json new file mode 100644 index 0000000000..8aac89f737 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-merge-offer/_files.json @@ -0,0 +1,6 @@ +{ + "master:types/angular-sanitize/index.d.ts": "// Type definitions for Angular JS (ngSanitize module) 1.7\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Michał Lipiński \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n", + "06d8d678f1fc73f43ee6e8efe11230c4db92cc83:types/angular-sanitize/index.d.ts": "// Type definitions for Angular JS (ngSanitize module) 1.8\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Michał Lipiński \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n", + "master:types/angular/index.d.ts": "// Type definitions for Angular JS 1.7\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Georgii Dolzhykov \n// Caleb St-Denis \n// Leonard Thieu \n// Steffen Kowalski \n// Piotr Błażejewicz \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n", + "06d8d678f1fc73f43ee6e8efe11230c4db92cc83:types/angular/index.d.ts": "// Type definitions for Angular JS 1.8\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Georgii Dolzhykov \n// Caleb St-Denis \n// Leonard Thieu \n// Steffen Kowalski \n// Piotr Błażejewicz \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-merge-offer/_response.json b/packages/mergebot/src/_tests/fixtures/48652-merge-offer/_response.json new file mode 100644 index 0000000000..7274bb8830 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-merge-offer/_response.json @@ -0,0 +1,770 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "title": "Update typings for AngularJS 1.8.1 (packages: `angular`, `angular-sanitize`)", + "createdAt": "2020-10-09T16:07:46Z", + "author": { + "login": "mgol", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Edits multiple packages", + "__typename": "Label" + }, + { + "name": "Maintainer Approved", + "__typename": "Label" + }, + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 48652, + "state": "OPEN", + "headRefOid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "changedFiles": 3, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:08:22Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:08:23Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:14:18Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:14:57Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T18:18:39Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-10-11T11:39:04Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "createdAt": "2020-10-11T15:57:16Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:56:07Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:56:09Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:30:40Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:30:42Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:32:25Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:35:37Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:37:11Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "orta", + "__typename": "User" + }, + "createdAt": "2020-10-16T18:15:49Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "orta", + "__typename": "User" + }, + "createdAt": "2020-10-16T18:15:57Z", + "projectColumnName": "Waiting for Code Reviews" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-16T18:16:32Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-26T04:21:14Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-29T23:55:24Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-11-02T14:15:36Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-11-02T20:15:49Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-03T02:25:16Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-03T02:25:17Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-04T00:32:28Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "753cdb3bd4c27ade5335dcc067a0aadd76a05283", + "abbreviatedOid": "753cdb3", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-09T20:26:25Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-505969002", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "falsyvalues", + "__typename": "User" + }, + "commit": { + "oid": "753cdb3bd4c27ade5335dcc067a0aadd76a05283", + "abbreviatedOid": "753cdb3", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-12T07:07:50Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-506344303", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "commit": { + "oid": "753cdb3bd4c27ade5335dcc067a0aadd76a05283", + "abbreviatedOid": "753cdb3", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:52:16Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:52:43Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:52:56Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:53:13Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:53:25Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:53:57Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-10-12T08:55:30Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-506420182", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "commit": { + "oid": "fa21531bf01c1039bcd9c5d04bb2e985ba3de267", + "abbreviatedOid": "fa21531", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-13T08:31:51Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-507193643", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "commit": { + "oid": "fa21531bf01c1039bcd9c5d04bb2e985ba3de267", + "abbreviatedOid": "fa21531", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2020-10-29T23:54:49Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-520167312", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "abbreviatedOid": "06d8d67", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-11-02T19:14:54Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-521922634", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "abbreviatedOid": "06d8d67", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2020-11-04T00:31:53Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-522968677", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 4, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-09T15:56:45Z", + "committedDate": "2020-11-02T15:55:57Z", + "pushedDate": null, + "abbreviatedOid": "943e9f6", + "oid": "943e9f6a268e954d584c00bc6280fb3e6b8464b0", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-13T08:23:51Z", + "committedDate": "2020-11-02T15:55:57Z", + "pushedDate": null, + "abbreviatedOid": "372002c", + "oid": "372002c351a709a2771aa57d74ef14ca9e70ef84", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-13T08:22:47Z", + "committedDate": "2020-11-02T15:55:57Z", + "pushedDate": null, + "abbreviatedOid": "4eb3afb", + "oid": "4eb3afbc5c36d84f2e9b8810ffdffec91668ab82", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438246535", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438246535", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438247886", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438247886", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-02T14:11:00Z", + "committedDate": "2020-11-02T15:55:58Z", + "pushedDate": "2020-11-02T15:56:23Z", + "abbreviatedOid": "06d8d67", + "oid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 15, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI2OTA0NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mgol 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 which I will keep updated.***\n\n## 2 packages in this PR\n\n- `angular-sanitize` [on npm](https://www.npmjs.com/package/angular-sanitize), [on unpkg](https://unpkg.com/browse/angular-sanitize@latest/)\n- `angular` [on npm](https://www.npmjs.com/package/angular), [on unpkg](https://unpkg.com/browse/angular@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\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ A DT maintainer needs to approve changes which affect more than one package\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", + "createdAt": "2020-10-09T16:08:22Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI2OTA1MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @diegovilar @falsyvalues @thorn0 @calebstdenis @leonard-thieu @scipper @peterblazejewicz — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652/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": "2020-10-09T16:08:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI3MjAxNw==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## angular-sanitize ([unpkg](https://unpkg.com/browse/angular-sanitize@latest/))\nwas missing the following properties:\n1. padStart\n1. padEnd\n1. trimLeft\n1. trimRight\n1. trimStart\n\n
\nas well as these 1 other properties...\n

trimEnd

\n
\n\n

\n Generated by :no_entry_sign: dangerJS against 06d8d678f1fc73f43ee6e8efe11230c4db92cc83\n

\n", + "createdAt": "2020-10-09T16:14:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjMzMjk1OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n### angular-sanitize/v*\n\n\n
\nComparison details for angular-sanitize/* 📊\n\n| | master | #48652 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 84.7 | 74.6 | -11.9% |\n| Type count | 10418 | 10417 | 0% |\n| Assignability cache size | 3043 | 3043 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 59 | 59 | 0% |\n| Identifiers in tests | 59 | 59 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 447.5 | 438.7 | -2.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 13.0% | 11.2% | |\n|     Worst duration (ms) | 556.1 | 513.0 | -7.8% |\n|     Worst identifier | [$sanitizeProvider](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular-sanitize/angular-sanitize-tests.ts#L9) | [$sanitizeProvider](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular-sanitize/angular-sanitize-tests.ts#L9) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 439.8 | 435.9 | -0.9% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.7% | 10.8% | +1.4% |\n|     Worst duration (ms) | 533.1 | 562.4 | +5.5% |\n|     Worst identifier | [addValidElements](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular-sanitize/angular-sanitize-tests.ts#L9) | [shouldBeSanitizeProvider](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular-sanitize/angular-sanitize-tests.ts#L12) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.\n\n### angular/v*\n\n\n
\nComparison details for angular/* 📊\n\n| | master | #48652 | diff |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 127.9 | 118.5 | -7.3% |\n| Type count | 30634 | 30633 | 0% |\n| Assignability cache size | 5338 | 5338 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 2708 | 2708 | 0% |\n| Identifiers in tests | 2984 | 2984 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 655.4 | 649.9 | -0.8% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 4.5% | 4.6% | |\n|     Worst duration (ms) | 1313.6 | 1219.7 | -7.1% |\n|     Worst identifier | [transclude](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular/angular-tests.ts#L1183) | [transclude](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular/angular-tests.ts#L1183) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 653.8 | 649.5 | -0.7% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 4.8% | 4.8% | -0.9% |\n|     Worst duration (ms) | 1181.1 | 1108.1 | -6.2% |\n|     Worst identifier | [append](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular/angular-tests.ts#L1182) | [append](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular/angular-tests.ts#L1183) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-10-09T18:18:39Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjY5MTY2MQ==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "@peterblazejewicz what's the procedure now? Do I just wait for a DefinitelyTyped maintainer to notice this PR and do a review? Should I split the `angular-sanitize` changes out to a separate PR?", + "createdAt": "2020-10-11T11:39:04Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjcyNTgwOQ==", + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "body": "@mgol \r\nSo, because you've not included tests for your changes, there is no quick path here (the other pair of eyes from the community need to review the PR, the tests are added/amended, the CIs pass, etc).\r\nSo either wait for DT maintainer to arrive and review that one (it's already labelled with 'owner approved', so it would be quick), or amend your PR to incorporate tests for both packages. Thx!", + "createdAt": "2020-10-11T15:57:16Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjk4MjEzOA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mgol One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-10-12T08:56:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNzU4Mjg5Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@peterblazejewicz Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-10-13T08:30:42Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNzU4NTc3NA==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "Comments addressed, apart from tests. It turns out AngularJS changelog is incorrect & some of the APIs have different names than the changelog specifies: https://github.com/angular/angular.js/issues/17088. I changed them.\r\n\r\nI'll look into adding some tests later.", + "createdAt": "2020-10-13T08:35:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcxMDM2MDI5Mg==", + "author": { + "login": "orta", + "__typename": "User" + }, + "body": "Classing as acceptable from the DT maintainers perspective, which means it can be self-merged in the future after the tests are added 👍🏻 ", + "createdAt": "2020-10-16T18:15:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDQ5Nzc0OQ==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "I rebased & added a new commit with tests for the `angular` changes. I'd appreciate if someone looked at those tests before this gets merged.", + "createdAt": "2020-11-02T14:15:36Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDcwMDE5OQ==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "NOT Ready to NOT merge", + "createdAt": "2020-11-02T20:15:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDg3MTI2OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@thorn0, @falsyvalues Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-11-03T02:25:17Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/angular-sanitize/index.d.ts", + "additions": 8, + "deletions": 4, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/angular/angular-tests.ts", + "additions": 28, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/angular/index.d.ts", + "additions": 21, + "deletions": 7, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 3 + }, + "projectCards": { + "nodes": [], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-merge-offer/derived.json b/packages/mergebot/src/_tests/fixtures/48652-merge-offer/derived.json new file mode 100644 index 0000000000..c5d0b69189 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-merge-offer/derived.json @@ -0,0 +1,92 @@ +{ + "type": "info", + "now": "2020-11-04T01:23:45.000Z", + "pr_number": 48652, + "author": "mgol", + "headCommitOid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "mergeBaseOid": "master", + "lastPushDate": "2020-11-02T15:56:23.000Z", + "lastActivityDate": "2020-11-04T00:31:53.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "angular-sanitize", + "kind": "edit", + "files": [ + { + "path": "types/angular-sanitize/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "diegovilar", + "falsyvalues" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + }, + { + "name": "angular", + "kind": "edit", + "files": [ + { + "path": "types/angular/angular-tests.ts", + "kind": "test" + }, + { + "path": "types/angular/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "diegovilar", + "thorn0", + "calebstdenis", + "leonard-thieu", + "scipper", + "peterblazejewicz" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "andrewbranch", + "date": "2020-11-04T00:31:53.000Z", + "isMaintainer": true + }, + { + "type": "approved", + "reviewer": "peterblazejewicz", + "date": "2020-11-02T19:14:54.000Z", + "isMaintainer": false + }, + { + "type": "stale", + "reviewer": "RyanCavanaugh", + "date": "2020-10-29T23:54:49.000Z", + "abbrOid": "fa21531" + }, + { + "type": "stale", + "reviewer": "thorn0", + "date": "2020-10-13T08:31:51.000Z", + "abbrOid": "fa21531" + }, + { + "type": "stale", + "reviewer": "falsyvalues", + "date": "2020-10-12T07:07:50.000Z", + "abbrOid": "753cdb3" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-merge-offer/mutations.json b/packages/mergebot/src/_tests/fixtures/48652-merge-offer/mutations.json new file mode 100644 index 0000000000..b761bd39f1 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-merge-offer/mutations.json @@ -0,0 +1,49 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI2OTA0NA==", + "body": "@mgol Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `angular-sanitize` — [on npm](https://www.npmjs.com/package/angular-sanitize), [on unpkg](https://unpkg.com/browse/angular-sanitize@latest/)\n* `angular` — [on npm](https://www.npmjs.com/package/angular), [on unpkg](https://unpkg.com/browse/angular@latest/)\n - owner-approval: @peterblazejewicz\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=48652&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\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: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2ODQzMjE1NzY=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "body": "@mgol: Everything looks good here. I am ready to merge this PR (at 06d8d67) 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" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "body": "@RyanCavanaugh, @thorn0, @falsyvalues Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/48652-merge-offer/result.json b/packages/mergebot/src/_tests/fixtures/48652-merge-offer/result.json new file mode 100644 index 0000000000..5800567171 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-merge-offer/result.json @@ -0,0 +1,26 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Owner Approved", + "Maintainer Approved", + "Edits multiple packages", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@mgol Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `angular-sanitize` — [on npm](https://www.npmjs.com/package/angular-sanitize), [on unpkg](https://unpkg.com/browse/angular-sanitize@latest/)\n* `angular` — [on npm](https://www.npmjs.com/package/angular), [on unpkg](https://unpkg.com/browse/angular@latest/)\n - owner-approval: @peterblazejewicz\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=48652&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\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": "@mgol: Everything looks good here. I am ready to merge this PR (at 06d8d67) 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" + }, + { + "tag": "stale-ping-024242-753cdb3", + "status": "@RyanCavanaugh, @thorn0, @falsyvalues Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-prereq/_downloads.json b/packages/mergebot/src/_tests/fixtures/48652-prereq/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-prereq/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/48652-prereq/_files.json b/packages/mergebot/src/_tests/fixtures/48652-prereq/_files.json new file mode 100644 index 0000000000..8aac89f737 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-prereq/_files.json @@ -0,0 +1,6 @@ +{ + "master:types/angular-sanitize/index.d.ts": "// Type definitions for Angular JS (ngSanitize module) 1.7\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Michał Lipiński \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n", + "06d8d678f1fc73f43ee6e8efe11230c4db92cc83:types/angular-sanitize/index.d.ts": "// Type definitions for Angular JS (ngSanitize module) 1.8\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Michał Lipiński \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n", + "master:types/angular/index.d.ts": "// Type definitions for Angular JS 1.7\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Georgii Dolzhykov \n// Caleb St-Denis \n// Leonard Thieu \n// Steffen Kowalski \n// Piotr Błażejewicz \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n", + "06d8d678f1fc73f43ee6e8efe11230c4db92cc83:types/angular/index.d.ts": "// Type definitions for Angular JS 1.8\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Georgii Dolzhykov \n// Caleb St-Denis \n// Leonard Thieu \n// Steffen Kowalski \n// Piotr Błażejewicz \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-prereq/_response.json b/packages/mergebot/src/_tests/fixtures/48652-prereq/_response.json new file mode 100644 index 0000000000..3e9dacf5d1 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-prereq/_response.json @@ -0,0 +1,770 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "title": "Update typings for AngularJS 1.8.1 (packages: `angular`, `angular-sanitize`)", + "createdAt": "2020-10-09T16:07:46Z", + "author": { + "login": "mgol", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Edits multiple packages", + "__typename": "Label" + }, + { + "name": "Maintainer Approved", + "__typename": "Label" + }, + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 48652, + "state": "OPEN", + "headRefOid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "changedFiles": 3, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:08:22Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:08:23Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:14:18Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:14:57Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T18:18:39Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-10-11T11:39:04Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "createdAt": "2020-10-11T15:57:16Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:56:07Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:56:09Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:30:40Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:30:42Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:32:25Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:35:37Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:37:11Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "orta", + "__typename": "User" + }, + "createdAt": "2020-10-16T18:15:49Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "orta", + "__typename": "User" + }, + "createdAt": "2020-10-16T18:15:57Z", + "projectColumnName": "Waiting for Code Reviews" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-16T18:16:32Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-26T04:21:14Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-29T23:55:24Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-11-02T14:15:36Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-11-02T20:15:49Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-03T02:25:16Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-03T02:25:17Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-04T00:32:28Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "753cdb3bd4c27ade5335dcc067a0aadd76a05283", + "abbreviatedOid": "753cdb3", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-09T20:26:25Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-505969002", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "falsyvalues", + "__typename": "User" + }, + "commit": { + "oid": "753cdb3bd4c27ade5335dcc067a0aadd76a05283", + "abbreviatedOid": "753cdb3", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-12T07:07:50Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-506344303", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "commit": { + "oid": "753cdb3bd4c27ade5335dcc067a0aadd76a05283", + "abbreviatedOid": "753cdb3", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:52:16Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:52:43Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:52:56Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:53:13Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:53:25Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:53:57Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-10-12T08:55:30Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-506420182", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "commit": { + "oid": "fa21531bf01c1039bcd9c5d04bb2e985ba3de267", + "abbreviatedOid": "fa21531", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-13T08:31:51Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-507193643", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "commit": { + "oid": "fa21531bf01c1039bcd9c5d04bb2e985ba3de267", + "abbreviatedOid": "fa21531", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2020-10-29T23:54:49Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-520167312", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "abbreviatedOid": "06d8d67", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-11-02T19:14:54Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-521922634", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "abbreviatedOid": "06d8d67", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2020-11-04T00:31:53Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-522968677", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 4, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-09T15:56:45Z", + "committedDate": "2020-11-02T15:55:57Z", + "pushedDate": null, + "abbreviatedOid": "943e9f6", + "oid": "943e9f6a268e954d584c00bc6280fb3e6b8464b0", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-13T08:23:51Z", + "committedDate": "2020-11-02T15:55:57Z", + "pushedDate": null, + "abbreviatedOid": "372002c", + "oid": "372002c351a709a2771aa57d74ef14ca9e70ef84", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-13T08:22:47Z", + "committedDate": "2020-11-02T15:55:57Z", + "pushedDate": null, + "abbreviatedOid": "4eb3afb", + "oid": "4eb3afbc5c36d84f2e9b8810ffdffec91668ab82", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438246535", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438246535", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438247886", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438247886", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-02T14:11:00Z", + "committedDate": "2020-11-02T15:55:58Z", + "pushedDate": "2020-11-02T15:56:23Z", + "abbreviatedOid": "06d8d67", + "oid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 15, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI2OTA0NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mgol 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 which I will keep updated.***\n\n## 2 packages in this PR\n\n- `angular-sanitize` [on npm](https://www.npmjs.com/package/angular-sanitize), [on unpkg](https://unpkg.com/browse/angular-sanitize@latest/)\n- `angular` [on npm](https://www.npmjs.com/package/angular), [on unpkg](https://unpkg.com/browse/angular@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\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ A DT maintainer needs to approve changes which affect more than one package\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", + "createdAt": "2020-10-09T16:08:22Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI2OTA1MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @diegovilar @falsyvalues @thorn0 @calebstdenis @leonard-thieu @scipper @peterblazejewicz — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652/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": "2020-10-09T16:08:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI3MjAxNw==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## angular-sanitize ([unpkg](https://unpkg.com/browse/angular-sanitize@latest/))\nwas missing the following properties:\n1. padStart\n1. padEnd\n1. trimLeft\n1. trimRight\n1. trimStart\n\n
\nas well as these 1 other properties...\n

trimEnd

\n
\n\n

\n Generated by :no_entry_sign: dangerJS against 06d8d678f1fc73f43ee6e8efe11230c4db92cc83\n

\n", + "createdAt": "2020-10-09T16:14:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjMzMjk1OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n### angular-sanitize/v*\n\n\n
\nComparison details for angular-sanitize/* 📊\n\n| | master | #48652 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 84.7 | 74.6 | -11.9% |\n| Type count | 10418 | 10417 | 0% |\n| Assignability cache size | 3043 | 3043 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 59 | 59 | 0% |\n| Identifiers in tests | 59 | 59 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 447.5 | 438.7 | -2.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 13.0% | 11.2% | |\n|     Worst duration (ms) | 556.1 | 513.0 | -7.8% |\n|     Worst identifier | [$sanitizeProvider](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular-sanitize/angular-sanitize-tests.ts#L9) | [$sanitizeProvider](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular-sanitize/angular-sanitize-tests.ts#L9) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 439.8 | 435.9 | -0.9% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.7% | 10.8% | +1.4% |\n|     Worst duration (ms) | 533.1 | 562.4 | +5.5% |\n|     Worst identifier | [addValidElements](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular-sanitize/angular-sanitize-tests.ts#L9) | [shouldBeSanitizeProvider](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular-sanitize/angular-sanitize-tests.ts#L12) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.\n\n### angular/v*\n\n\n
\nComparison details for angular/* 📊\n\n| | master | #48652 | diff |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 127.9 | 118.5 | -7.3% |\n| Type count | 30634 | 30633 | 0% |\n| Assignability cache size | 5338 | 5338 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 2708 | 2708 | 0% |\n| Identifiers in tests | 2984 | 2984 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 655.4 | 649.9 | -0.8% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 4.5% | 4.6% | |\n|     Worst duration (ms) | 1313.6 | 1219.7 | -7.1% |\n|     Worst identifier | [transclude](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular/angular-tests.ts#L1183) | [transclude](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular/angular-tests.ts#L1183) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 653.8 | 649.5 | -0.7% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 4.8% | 4.8% | -0.9% |\n|     Worst duration (ms) | 1181.1 | 1108.1 | -6.2% |\n|     Worst identifier | [append](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular/angular-tests.ts#L1182) | [append](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular/angular-tests.ts#L1183) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-10-09T18:18:39Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjY5MTY2MQ==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "@peterblazejewicz what's the procedure now? Do I just wait for a DefinitelyTyped maintainer to notice this PR and do a review? Should I split the `angular-sanitize` changes out to a separate PR?", + "createdAt": "2020-10-11T11:39:04Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjcyNTgwOQ==", + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "body": "@mgol \r\nSo, because you've not included tests for your changes, there is no quick path here (the other pair of eyes from the community need to review the PR, the tests are added/amended, the CIs pass, etc).\r\nSo either wait for DT maintainer to arrive and review that one (it's already labelled with 'owner approved', so it would be quick), or amend your PR to incorporate tests for both packages. Thx!", + "createdAt": "2020-10-11T15:57:16Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjk4MjEzOA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mgol One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-10-12T08:56:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNzU4Mjg5Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@peterblazejewicz Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-10-13T08:30:42Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNzU4NTc3NA==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "Comments addressed, apart from tests. It turns out AngularJS changelog is incorrect & some of the APIs have different names than the changelog specifies: https://github.com/angular/angular.js/issues/17088. I changed them.\r\n\r\nI'll look into adding some tests later.", + "createdAt": "2020-10-13T08:35:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcxMDM2MDI5Mg==", + "author": { + "login": "orta", + "__typename": "User" + }, + "body": "Classing as acceptable from the DT maintainers perspective, which means it can be self-merged in the future after the tests are added 👍🏻 ", + "createdAt": "2020-10-16T18:15:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDQ5Nzc0OQ==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "I rebased & added a new commit with tests for the `angular` changes. I'd appreciate if someone looked at those tests before this gets merged.", + "createdAt": "2020-11-02T14:15:36Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDcwMDE5OQ==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "Ready to merge", + "createdAt": "2020-11-02T20:15:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDg3MTI2OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@thorn0, @falsyvalues Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-11-03T02:25:17Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/angular-sanitize/index.d.ts", + "additions": 8, + "deletions": 4, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/angular/angular-tests.ts", + "additions": 28, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/angular/index.d.ts", + "additions": 21, + "deletions": 7, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 3 + }, + "projectCards": { + "nodes": [], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-prereq/derived.json b/packages/mergebot/src/_tests/fixtures/48652-prereq/derived.json new file mode 100644 index 0000000000..ac5509e97b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-prereq/derived.json @@ -0,0 +1,94 @@ +{ + "type": "info", + "now": "2020-11-04T01:23:45.000Z", + "pr_number": 48652, + "author": "mgol", + "headCommitOid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "mergeBaseOid": "master", + "lastPushDate": "2020-11-02T15:56:23.000Z", + "lastActivityDate": "2020-11-04T00:31:53.000Z", + "mergeRequestDate": "2020-11-02T20:15:49.000Z", + "mergeRequestUser": "mgol", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "angular-sanitize", + "kind": "edit", + "files": [ + { + "path": "types/angular-sanitize/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "diegovilar", + "falsyvalues" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + }, + { + "name": "angular", + "kind": "edit", + "files": [ + { + "path": "types/angular/angular-tests.ts", + "kind": "test" + }, + { + "path": "types/angular/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "diegovilar", + "thorn0", + "calebstdenis", + "leonard-thieu", + "scipper", + "peterblazejewicz" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "andrewbranch", + "date": "2020-11-04T00:31:53.000Z", + "isMaintainer": true + }, + { + "type": "approved", + "reviewer": "peterblazejewicz", + "date": "2020-11-02T19:14:54.000Z", + "isMaintainer": false + }, + { + "type": "stale", + "reviewer": "RyanCavanaugh", + "date": "2020-10-29T23:54:49.000Z", + "abbrOid": "fa21531" + }, + { + "type": "stale", + "reviewer": "thorn0", + "date": "2020-10-13T08:31:51.000Z", + "abbrOid": "fa21531" + }, + { + "type": "stale", + "reviewer": "falsyvalues", + "date": "2020-10-12T07:07:50.000Z", + "abbrOid": "753cdb3" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-prereq/mutations.json b/packages/mergebot/src/_tests/fixtures/48652-prereq/mutations.json new file mode 100644 index 0000000000..99e18929c4 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-prereq/mutations.json @@ -0,0 +1,58 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI2OTA0NA==", + "body": "@mgol Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `angular-sanitize` — [on npm](https://www.npmjs.com/package/angular-sanitize), [on unpkg](https://unpkg.com/browse/angular-sanitize@latest/)\n* `angular` — [on npm](https://www.npmjs.com/package/angular), [on unpkg](https://unpkg.com/browse/angular@latest/)\n - owner-approval: @peterblazejewicz\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=48652&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\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: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2ODQzMjE1NzY=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "body": "@mgol: Everything looks good here. I am ready to merge this PR (at 06d8d67) 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" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "body": "@RyanCavanaugh, @thorn0, @falsyvalues Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "body": ":passport_control: Hi @mgol,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-???) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/48652-prereq/result.json b/packages/mergebot/src/_tests/fixtures/48652-prereq/result.json new file mode 100644 index 0000000000..e01d00c9be --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-prereq/result.json @@ -0,0 +1,30 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Owner Approved", + "Maintainer Approved", + "Edits multiple packages", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@mgol Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `angular-sanitize` — [on npm](https://www.npmjs.com/package/angular-sanitize), [on unpkg](https://unpkg.com/browse/angular-sanitize@latest/)\n* `angular` — [on npm](https://www.npmjs.com/package/angular), [on unpkg](https://unpkg.com/browse/angular@latest/)\n - owner-approval: @peterblazejewicz\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=48652&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\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": "@mgol: Everything looks good here. I am ready to merge this PR (at 06d8d67) 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" + }, + { + "tag": "stale-ping-024242-753cdb3", + "status": "@RyanCavanaugh, @thorn0, @falsyvalues Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?" + }, + { + "tag": "wait-for-merge-offer-06d8d67", + "status": ":passport_control: Hi @mgol,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-???) are green. I will let you know once that happens.\n\nThanks, and happy typing!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/_downloads.json b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/_files.json b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/_files.json new file mode 100644 index 0000000000..8aac89f737 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/_files.json @@ -0,0 +1,6 @@ +{ + "master:types/angular-sanitize/index.d.ts": "// Type definitions for Angular JS (ngSanitize module) 1.7\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Michał Lipiński \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n", + "06d8d678f1fc73f43ee6e8efe11230c4db92cc83:types/angular-sanitize/index.d.ts": "// Type definitions for Angular JS (ngSanitize module) 1.8\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Michał Lipiński \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n", + "master:types/angular/index.d.ts": "// Type definitions for Angular JS 1.7\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Georgii Dolzhykov \n// Caleb St-Denis \n// Leonard Thieu \n// Steffen Kowalski \n// Piotr Błażejewicz \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n", + "06d8d678f1fc73f43ee6e8efe11230c4db92cc83:types/angular/index.d.ts": "// Type definitions for Angular JS 1.8\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Georgii Dolzhykov \n// Caleb St-Denis \n// Leonard Thieu \n// Steffen Kowalski \n// Piotr Błażejewicz \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/_response.json b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/_response.json new file mode 100644 index 0000000000..ca96a6c110 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/_response.json @@ -0,0 +1,798 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "title": "Update typings for AngularJS 1.8.1 (packages: `angular`, `angular-sanitize`)", + "createdAt": "2020-10-09T16:07:46Z", + "author": { + "login": "mgol", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Edits multiple packages", + "__typename": "Label" + }, + { + "name": "Maintainer Approved", + "__typename": "Label" + }, + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 48652, + "state": "OPEN", + "headRefOid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "changedFiles": 3, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:08:22Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:08:23Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:14:18Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:14:57Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T18:18:39Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-10-11T11:39:04Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "createdAt": "2020-10-11T15:57:16Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:56:07Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:56:09Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:30:40Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:30:42Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:32:25Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:35:37Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:37:11Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "orta", + "__typename": "User" + }, + "createdAt": "2020-10-16T18:15:49Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "orta", + "__typename": "User" + }, + "createdAt": "2020-10-16T18:15:57Z", + "projectColumnName": "Waiting for Code Reviews" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-16T18:16:32Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-26T04:21:14Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-29T23:55:24Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-11-02T14:15:36Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-11-02T20:15:49Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-03T02:25:16Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-03T02:25:17Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-04T00:32:28Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "753cdb3bd4c27ade5335dcc067a0aadd76a05283", + "abbreviatedOid": "753cdb3", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-09T20:26:25Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-505969002", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "falsyvalues", + "__typename": "User" + }, + "commit": { + "oid": "753cdb3bd4c27ade5335dcc067a0aadd76a05283", + "abbreviatedOid": "753cdb3", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-12T07:07:50Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-506344303", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "commit": { + "oid": "753cdb3bd4c27ade5335dcc067a0aadd76a05283", + "abbreviatedOid": "753cdb3", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:52:16Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:52:43Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:52:56Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:53:13Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:53:25Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:53:57Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-10-12T08:55:30Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-506420182", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "commit": { + "oid": "fa21531bf01c1039bcd9c5d04bb2e985ba3de267", + "abbreviatedOid": "fa21531", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-13T08:31:51Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-507193643", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "commit": { + "oid": "fa21531bf01c1039bcd9c5d04bb2e985ba3de267", + "abbreviatedOid": "fa21531", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2020-10-29T23:54:49Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-520167312", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "abbreviatedOid": "06d8d67", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-11-02T19:14:54Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-521922634", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "abbreviatedOid": "06d8d67", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-11-04T00:31:53Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-522968677", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 4, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-09T15:56:45Z", + "committedDate": "2020-11-02T15:55:57Z", + "pushedDate": null, + "abbreviatedOid": "943e9f6", + "oid": "943e9f6a268e954d584c00bc6280fb3e6b8464b0", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-13T08:23:51Z", + "committedDate": "2020-11-02T15:55:57Z", + "pushedDate": null, + "abbreviatedOid": "372002c", + "oid": "372002c351a709a2771aa57d74ef14ca9e70ef84", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-13T08:22:47Z", + "committedDate": "2020-11-02T15:55:57Z", + "pushedDate": null, + "abbreviatedOid": "4eb3afb", + "oid": "4eb3afbc5c36d84f2e9b8810ffdffec91668ab82", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438246535", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438246535", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438247886", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438247886", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-02T14:11:00Z", + "committedDate": "2020-11-02T15:55:58Z", + "pushedDate": "2020-11-02T15:56:23Z", + "abbreviatedOid": "06d8d67", + "oid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 15, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI2OTA0NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mgol 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 which I will keep updated.***\n\n## 2 packages in this PR\n\n- `angular-sanitize` [on npm](https://www.npmjs.com/package/angular-sanitize), [on unpkg](https://unpkg.com/browse/angular-sanitize@latest/)\n- `angular` [on npm](https://www.npmjs.com/package/angular), [on unpkg](https://unpkg.com/browse/angular@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\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ A DT maintainer needs to approve changes which affect more than one package\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", + "createdAt": "2020-10-09T16:08:22Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI2OTA1MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @diegovilar @falsyvalues @thorn0 @calebstdenis @leonard-thieu @scipper @peterblazejewicz — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652/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": "2020-10-09T16:08:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI3MjAxNw==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## angular-sanitize ([unpkg](https://unpkg.com/browse/angular-sanitize@latest/))\nwas missing the following properties:\n1. padStart\n1. padEnd\n1. trimLeft\n1. trimRight\n1. trimStart\n\n
\nas well as these 1 other properties...\n

trimEnd

\n
\n\n

\n Generated by :no_entry_sign: dangerJS against 06d8d678f1fc73f43ee6e8efe11230c4db92cc83\n

\n", + "createdAt": "2020-10-09T16:14:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjMzMjk1OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n### angular-sanitize/v*\n\n\n
\nComparison details for angular-sanitize/* 📊\n\n| | master | #48652 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 84.7 | 74.6 | -11.9% |\n| Type count | 10418 | 10417 | 0% |\n| Assignability cache size | 3043 | 3043 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 59 | 59 | 0% |\n| Identifiers in tests | 59 | 59 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 447.5 | 438.7 | -2.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 13.0% | 11.2% | |\n|     Worst duration (ms) | 556.1 | 513.0 | -7.8% |\n|     Worst identifier | [$sanitizeProvider](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular-sanitize/angular-sanitize-tests.ts#L9) | [$sanitizeProvider](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular-sanitize/angular-sanitize-tests.ts#L9) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 439.8 | 435.9 | -0.9% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.7% | 10.8% | +1.4% |\n|     Worst duration (ms) | 533.1 | 562.4 | +5.5% |\n|     Worst identifier | [addValidElements](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular-sanitize/angular-sanitize-tests.ts#L9) | [shouldBeSanitizeProvider](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular-sanitize/angular-sanitize-tests.ts#L12) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.\n\n### angular/v*\n\n\n
\nComparison details for angular/* 📊\n\n| | master | #48652 | diff |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 127.9 | 118.5 | -7.3% |\n| Type count | 30634 | 30633 | 0% |\n| Assignability cache size | 5338 | 5338 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 2708 | 2708 | 0% |\n| Identifiers in tests | 2984 | 2984 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 655.4 | 649.9 | -0.8% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 4.5% | 4.6% | |\n|     Worst duration (ms) | 1313.6 | 1219.7 | -7.1% |\n|     Worst identifier | [transclude](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular/angular-tests.ts#L1183) | [transclude](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular/angular-tests.ts#L1183) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 653.8 | 649.5 | -0.7% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 4.8% | 4.8% | -0.9% |\n|     Worst duration (ms) | 1181.1 | 1108.1 | -6.2% |\n|     Worst identifier | [append](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular/angular-tests.ts#L1182) | [append](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular/angular-tests.ts#L1183) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-10-09T18:18:39Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjY5MTY2MQ==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "@peterblazejewicz what's the procedure now? Do I just wait for a DefinitelyTyped maintainer to notice this PR and do a review? Should I split the `angular-sanitize` changes out to a separate PR?", + "createdAt": "2020-10-11T11:39:04Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjcyNTgwOQ==", + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "body": "@mgol \r\nSo, because you've not included tests for your changes, there is no quick path here (the other pair of eyes from the community need to review the PR, the tests are added/amended, the CIs pass, etc).\r\nSo either wait for DT maintainer to arrive and review that one (it's already labelled with 'owner approved', so it would be quick), or amend your PR to incorporate tests for both packages. Thx!", + "createdAt": "2020-10-11T15:57:16Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjk4MjEzOA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mgol One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-10-12T08:56:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNzU4Mjg5Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@peterblazejewicz Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-10-13T08:30:42Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNzU4NTc3NA==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "Comments addressed, apart from tests. It turns out AngularJS changelog is incorrect & some of the APIs have different names than the changelog specifies: https://github.com/angular/angular.js/issues/17088. I changed them.\r\n\r\nI'll look into adding some tests later.", + "createdAt": "2020-10-13T08:35:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcxMDM2MDI5Mg==", + "author": { + "login": "orta", + "__typename": "User" + }, + "body": "Classing as acceptable from the DT maintainers perspective, which means it can be self-merged in the future after the tests are added 👍🏻 ", + "createdAt": "2020-10-16T18:15:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDQ5Nzc0OQ==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "I rebased & added a new commit with tests for the `angular` changes. I'd appreciate if someone looked at those tests before this gets merged.", + "createdAt": "2020-11-02T14:15:36Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDcwMDE5OQ==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "NOT Ready to NOT merge", + "createdAt": "2020-11-02T20:15:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDg3MTI2OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@thorn0, @falsyvalues Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-11-03T02:25:17Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NzE3MjMxMA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mgol Everything looks good here. Great job! I am ready to merge this PR (at 06d8d67) on your behalf.\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", + "createdAt": "2020-11-04T00:23:45.000Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDcwMDE5OQ==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "Ready to merge", + "createdAt": "2020-11-02T20:15:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/angular-sanitize/index.d.ts", + "additions": 8, + "deletions": 4, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/angular/angular-tests.ts", + "additions": 28, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/angular/index.d.ts", + "additions": 21, + "deletions": 7, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 3 + }, + "projectCards": { + "nodes": [], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/derived.json b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/derived.json new file mode 100644 index 0000000000..b6fa43dd47 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/derived.json @@ -0,0 +1,94 @@ +{ + "type": "info", + "now": "2020-11-04T01:23:45.000Z", + "pr_number": 48652, + "author": "mgol", + "headCommitOid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "mergeBaseOid": "master", + "lastPushDate": "2020-11-02T15:56:23.000Z", + "lastActivityDate": "2020-11-04T00:31:53.000Z", + "mergeOfferDate": "2020-11-04T00:23:45.000Z", + "mergeRequestDate": "2020-11-02T20:15:49.000Z", + "mergeRequestUser": "mgol", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "angular-sanitize", + "kind": "edit", + "files": [ + { + "path": "types/angular-sanitize/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "diegovilar", + "falsyvalues" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + }, + { + "name": "angular", + "kind": "edit", + "files": [ + { + "path": "types/angular/angular-tests.ts", + "kind": "test" + }, + { + "path": "types/angular/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "diegovilar", + "thorn0", + "calebstdenis", + "leonard-thieu", + "scipper", + "peterblazejewicz" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "changereq", + "reviewer": "andrewbranch", + "date": "2020-11-04T00:31:53.000Z" + }, + { + "type": "approved", + "reviewer": "peterblazejewicz", + "date": "2020-11-02T19:14:54.000Z", + "isMaintainer": false + }, + { + "type": "stale", + "reviewer": "RyanCavanaugh", + "date": "2020-10-29T23:54:49.000Z", + "abbrOid": "fa21531" + }, + { + "type": "stale", + "reviewer": "thorn0", + "date": "2020-10-13T08:31:51.000Z", + "abbrOid": "fa21531" + }, + { + "type": "stale", + "reviewer": "falsyvalues", + "date": "2020-10-12T07:07:50.000Z", + "abbrOid": "753cdb3" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/mutations.json b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/mutations.json new file mode 100644 index 0000000000..59f0a5d49f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/mutations.json @@ -0,0 +1,71 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI2OTA0NA==", + "body": "@mgol Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `angular-sanitize` — [on npm](https://www.npmjs.com/package/angular-sanitize), [on unpkg](https://unpkg.com/browse/angular-sanitize@latest/)\n* `angular` — [on npm](https://www.npmjs.com/package/angular), [on unpkg](https://unpkg.com/browse/angular@latest/)\n - owner-approval: @peterblazejewicz\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=48652&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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwzOTU2NzkwNTk=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw5MDUzMzQwOTU=", + "MDU6TGFiZWwxNjA4NTUyNDEw", + "MDU6TGFiZWw2OTcwMTg5NzI=", + "MDU6TGFiZWw2ODQzMjE1NzY=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0" + } + } + }, + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY1NzE3MjMxMA==" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "body": "@mgol One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "body": ":passport_control: Hi @mgol,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-???) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/result.json b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/result.json new file mode 100644 index 0000000000..0df965f2a4 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer-and-prerequest/result.json @@ -0,0 +1,24 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "Revision needed", + "Edits multiple packages" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@mgol Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `angular-sanitize` — [on npm](https://www.npmjs.com/package/angular-sanitize), [on unpkg](https://unpkg.com/browse/angular-sanitize@latest/)\n* `angular` — [on npm](https://www.npmjs.com/package/angular), [on unpkg](https://unpkg.com/browse/angular@latest/)\n - owner-approval: @peterblazejewicz\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=48652&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 ..." + }, + { + "tag": "reviewer-complaint-06d8d67", + "status": "@mgol One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!" + }, + { + "tag": "wait-for-merge-offer-06d8d67", + "status": ":passport_control: Hi @mgol,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-???) are green. I will let you know once that happens.\n\nThanks, and happy typing!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/_downloads.json b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/_files.json b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/_files.json new file mode 100644 index 0000000000..8aac89f737 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/_files.json @@ -0,0 +1,6 @@ +{ + "master:types/angular-sanitize/index.d.ts": "// Type definitions for Angular JS (ngSanitize module) 1.7\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Michał Lipiński \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n", + "06d8d678f1fc73f43ee6e8efe11230c4db92cc83:types/angular-sanitize/index.d.ts": "// Type definitions for Angular JS (ngSanitize module) 1.8\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Michał Lipiński \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n", + "master:types/angular/index.d.ts": "// Type definitions for Angular JS 1.7\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Georgii Dolzhykov \n// Caleb St-Denis \n// Leonard Thieu \n// Steffen Kowalski \n// Piotr Błażejewicz \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n", + "06d8d678f1fc73f43ee6e8efe11230c4db92cc83:types/angular/index.d.ts": "// Type definitions for Angular JS 1.8\n// Project: http://angularjs.org\n// Definitions by: Diego Vilar \n// Georgii Dolzhykov \n// Caleb St-Denis \n// Leonard Thieu \n// Steffen Kowalski \n// Piotr Błażejewicz \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/_response.json b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/_response.json new file mode 100644 index 0000000000..61a0228890 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/_response.json @@ -0,0 +1,784 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "title": "Update typings for AngularJS 1.8.1 (packages: `angular`, `angular-sanitize`)", + "createdAt": "2020-10-09T16:07:46Z", + "author": { + "login": "mgol", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Edits multiple packages", + "__typename": "Label" + }, + { + "name": "Maintainer Approved", + "__typename": "Label" + }, + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 48652, + "state": "OPEN", + "headRefOid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "changedFiles": 3, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:08:22Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:08:23Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:14:18Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T16:14:57Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-09T18:18:39Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-10-11T11:39:04Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "createdAt": "2020-10-11T15:57:16Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:56:07Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:56:09Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:30:40Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:30:42Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:32:25Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:35:37Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-13T08:37:11Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "orta", + "__typename": "User" + }, + "createdAt": "2020-10-16T18:15:49Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "orta", + "__typename": "User" + }, + "createdAt": "2020-10-16T18:15:57Z", + "projectColumnName": "Waiting for Code Reviews" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-16T18:16:32Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-26T04:21:14Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-29T23:55:24Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-11-02T14:15:36Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "mgol", + "__typename": "User" + }, + "createdAt": "2020-11-02T20:15:49Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-03T02:25:16Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-03T02:25:17Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-04T00:32:28Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "753cdb3bd4c27ade5335dcc067a0aadd76a05283", + "abbreviatedOid": "753cdb3", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-09T20:26:25Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-505969002", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "falsyvalues", + "__typename": "User" + }, + "commit": { + "oid": "753cdb3bd4c27ade5335dcc067a0aadd76a05283", + "abbreviatedOid": "753cdb3", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-12T07:07:50Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-506344303", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "commit": { + "oid": "753cdb3bd4c27ade5335dcc067a0aadd76a05283", + "abbreviatedOid": "753cdb3", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:52:16Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:52:43Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:52:56Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:53:13Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:53:25Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "createdAt": "2020-10-12T08:53:57Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-10-12T08:55:30Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-506420182", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "thorn0", + "__typename": "User" + }, + "commit": { + "oid": "fa21531bf01c1039bcd9c5d04bb2e985ba3de267", + "abbreviatedOid": "fa21531", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-13T08:31:51Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-507193643", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "commit": { + "oid": "fa21531bf01c1039bcd9c5d04bb2e985ba3de267", + "abbreviatedOid": "fa21531", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2020-10-29T23:54:49Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-520167312", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "abbreviatedOid": "06d8d67", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-11-02T19:14:54Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-521922634", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "abbreviatedOid": "06d8d67", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-11-04T00:31:53Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652#pullrequestreview-522968677", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 4, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-09T15:56:45Z", + "committedDate": "2020-11-02T15:55:57Z", + "pushedDate": null, + "abbreviatedOid": "943e9f6", + "oid": "943e9f6a268e954d584c00bc6280fb3e6b8464b0", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-13T08:23:51Z", + "committedDate": "2020-11-02T15:55:57Z", + "pushedDate": null, + "abbreviatedOid": "372002c", + "oid": "372002c351a709a2771aa57d74ef14ca9e70ef84", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-13T08:22:47Z", + "committedDate": "2020-11-02T15:55:57Z", + "pushedDate": null, + "abbreviatedOid": "4eb3afb", + "oid": "4eb3afbc5c36d84f2e9b8810ffdffec91668ab82", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438246535", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438246535", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438247886", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/06d8d678f1fc73f43ee6e8efe11230c4db92cc83/checks?check_suite_id=1438247886", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-02T14:11:00Z", + "committedDate": "2020-11-02T15:55:58Z", + "pushedDate": "2020-11-02T15:56:23Z", + "abbreviatedOid": "06d8d67", + "oid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 15, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI2OTA0NA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mgol 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 which I will keep updated.***\n\n## 2 packages in this PR\n\n- `angular-sanitize` [on npm](https://www.npmjs.com/package/angular-sanitize), [on unpkg](https://unpkg.com/browse/angular-sanitize@latest/)\n- `angular` [on npm](https://www.npmjs.com/package/angular), [on unpkg](https://unpkg.com/browse/angular@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\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ A DT maintainer needs to approve changes which affect more than one package\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", + "createdAt": "2020-10-09T16:08:22Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI2OTA1MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @diegovilar @falsyvalues @thorn0 @calebstdenis @leonard-thieu @scipper @peterblazejewicz — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48652/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": "2020-10-09T16:08:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI3MjAxNw==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## angular-sanitize ([unpkg](https://unpkg.com/browse/angular-sanitize@latest/))\nwas missing the following properties:\n1. padStart\n1. padEnd\n1. trimLeft\n1. trimRight\n1. trimStart\n\n
\nas well as these 1 other properties...\n

trimEnd

\n
\n\n

\n Generated by :no_entry_sign: dangerJS against 06d8d678f1fc73f43ee6e8efe11230c4db92cc83\n

\n", + "createdAt": "2020-10-09T16:14:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjMzMjk1OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n### angular-sanitize/v*\n\n\n
\nComparison details for angular-sanitize/* 📊\n\n| | master | #48652 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 84.7 | 74.6 | -11.9% |\n| Type count | 10418 | 10417 | 0% |\n| Assignability cache size | 3043 | 3043 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 59 | 59 | 0% |\n| Identifiers in tests | 59 | 59 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 447.5 | 438.7 | -2.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 13.0% | 11.2% | |\n|     Worst duration (ms) | 556.1 | 513.0 | -7.8% |\n|     Worst identifier | [$sanitizeProvider](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular-sanitize/angular-sanitize-tests.ts#L9) | [$sanitizeProvider](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular-sanitize/angular-sanitize-tests.ts#L9) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 439.8 | 435.9 | -0.9% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.7% | 10.8% | +1.4% |\n|     Worst duration (ms) | 533.1 | 562.4 | +5.5% |\n|     Worst identifier | [addValidElements](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular-sanitize/angular-sanitize-tests.ts#L9) | [shouldBeSanitizeProvider](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular-sanitize/angular-sanitize-tests.ts#L12) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.\n\n### angular/v*\n\n\n
\nComparison details for angular/* 📊\n\n| | master | #48652 | diff |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 127.9 | 118.5 | -7.3% |\n| Type count | 30634 | 30633 | 0% |\n| Assignability cache size | 5338 | 5338 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 2708 | 2708 | 0% |\n| Identifiers in tests | 2984 | 2984 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 655.4 | 649.9 | -0.8% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 4.5% | 4.6% | |\n|     Worst duration (ms) | 1313.6 | 1219.7 | -7.1% |\n|     Worst identifier | [transclude](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular/angular-tests.ts#L1183) | [transclude](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular/angular-tests.ts#L1183) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 653.8 | 649.5 | -0.7% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 4.8% | 4.8% | -0.9% |\n|     Worst duration (ms) | 1181.1 | 1108.1 | -6.2% |\n|     Worst identifier | [append](/DefinitelyTyped/DefinitelyTyped/blob/2e4a5dfdb17c4730d81fec3265ee7167418dfc51/types/angular/angular-tests.ts#L1182) | [append](/DefinitelyTyped/DefinitelyTyped/blob/eade257786cd22b7bd25778cf86ea77be9ce8621/types/angular/angular-tests.ts#L1183) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-10-09T18:18:39Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjY5MTY2MQ==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "@peterblazejewicz what's the procedure now? Do I just wait for a DefinitelyTyped maintainer to notice this PR and do a review? Should I split the `angular-sanitize` changes out to a separate PR?", + "createdAt": "2020-10-11T11:39:04Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjcyNTgwOQ==", + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "body": "@mgol \r\nSo, because you've not included tests for your changes, there is no quick path here (the other pair of eyes from the community need to review the PR, the tests are added/amended, the CIs pass, etc).\r\nSo either wait for DT maintainer to arrive and review that one (it's already labelled with 'owner approved', so it would be quick), or amend your PR to incorporate tests for both packages. Thx!", + "createdAt": "2020-10-11T15:57:16Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjk4MjEzOA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mgol One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-10-12T08:56:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNzU4Mjg5Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@peterblazejewicz Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-10-13T08:30:42Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNzU4NTc3NA==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "Comments addressed, apart from tests. It turns out AngularJS changelog is incorrect & some of the APIs have different names than the changelog specifies: https://github.com/angular/angular.js/issues/17088. I changed them.\r\n\r\nI'll look into adding some tests later.", + "createdAt": "2020-10-13T08:35:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcxMDM2MDI5Mg==", + "author": { + "login": "orta", + "__typename": "User" + }, + "body": "Classing as acceptable from the DT maintainers perspective, which means it can be self-merged in the future after the tests are added 👍🏻 ", + "createdAt": "2020-10-16T18:15:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDQ5Nzc0OQ==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "I rebased & added a new commit with tests for the `angular` changes. I'd appreciate if someone looked at those tests before this gets merged.", + "createdAt": "2020-11-02T14:15:36Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDcwMDE5OQ==", + "author": { + "login": "mgol", + "__typename": "User" + }, + "body": "NOT Ready to NOT merge", + "createdAt": "2020-11-02T20:15:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDg3MTI2OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@thorn0, @falsyvalues Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-11-03T02:25:17Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDY1NzE3MjMxMA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@mgol Everything looks good here. Great job! I am ready to merge this PR (at 06d8d67) on your behalf.\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", + "createdAt": "2020-11-04T00:23:45.000Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/angular-sanitize/index.d.ts", + "additions": 8, + "deletions": 4, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/angular/angular-tests.ts", + "additions": 28, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/angular/index.d.ts", + "additions": 21, + "deletions": 7, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 3 + }, + "projectCards": { + "nodes": [], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/derived.json b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/derived.json new file mode 100644 index 0000000000..567df1a61f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/derived.json @@ -0,0 +1,92 @@ +{ + "type": "info", + "now": "2020-11-04T01:23:45.000Z", + "pr_number": 48652, + "author": "mgol", + "headCommitOid": "06d8d678f1fc73f43ee6e8efe11230c4db92cc83", + "mergeBaseOid": "master", + "lastPushDate": "2020-11-02T15:56:23.000Z", + "lastActivityDate": "2020-11-04T00:31:53.000Z", + "mergeOfferDate": "2020-11-04T00:23:45.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "angular-sanitize", + "kind": "edit", + "files": [ + { + "path": "types/angular-sanitize/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "diegovilar", + "falsyvalues" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + }, + { + "name": "angular", + "kind": "edit", + "files": [ + { + "path": "types/angular/angular-tests.ts", + "kind": "test" + }, + { + "path": "types/angular/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "diegovilar", + "thorn0", + "calebstdenis", + "leonard-thieu", + "scipper", + "peterblazejewicz" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "changereq", + "reviewer": "andrewbranch", + "date": "2020-11-04T00:31:53.000Z" + }, + { + "type": "approved", + "reviewer": "peterblazejewicz", + "date": "2020-11-02T19:14:54.000Z", + "isMaintainer": false + }, + { + "type": "stale", + "reviewer": "RyanCavanaugh", + "date": "2020-10-29T23:54:49.000Z", + "abbrOid": "fa21531" + }, + { + "type": "stale", + "reviewer": "thorn0", + "date": "2020-10-13T08:31:51.000Z", + "abbrOid": "fa21531" + }, + { + "type": "stale", + "reviewer": "falsyvalues", + "date": "2020-10-12T07:07:50.000Z", + "abbrOid": "753cdb3" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/mutations.json b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/mutations.json new file mode 100644 index 0000000000..32e450db7f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/mutations.json @@ -0,0 +1,62 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDcwNjI2OTA0NA==", + "body": "@mgol Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `angular-sanitize` — [on npm](https://www.npmjs.com/package/angular-sanitize), [on unpkg](https://unpkg.com/browse/angular-sanitize@latest/)\n* `angular` — [on npm](https://www.npmjs.com/package/angular), [on unpkg](https://unpkg.com/browse/angular@latest/)\n - owner-approval: @peterblazejewicz\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=48652&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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwzOTU2NzkwNTk=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw5MDUzMzQwOTU=", + "MDU6TGFiZWwxNjA4NTUyNDEw", + "MDU6TGFiZWw2OTcwMTg5NzI=", + "MDU6TGFiZWw2ODQzMjE1NzY=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0" + } + } + }, + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDY1NzE3MjMxMA==" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTAwNjg4ODM0", + "body": "@mgol One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/result.json b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/result.json new file mode 100644 index 0000000000..bd313219ce --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48652-retract-merge-offer/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "Revision needed", + "Edits multiple packages" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@mgol Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 2 packages in this PR\n\n* `angular-sanitize` — [on npm](https://www.npmjs.com/package/angular-sanitize), [on unpkg](https://unpkg.com/browse/angular-sanitize@latest/)\n* `angular` — [on npm](https://www.npmjs.com/package/angular), [on unpkg](https://unpkg.com/browse/angular@latest/)\n - owner-approval: @peterblazejewicz\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=48652&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 ..." + }, + { + "tag": "reviewer-complaint-06d8d67", + "status": "@mgol One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/48708/_downloads.json b/packages/mergebot/src/_tests/fixtures/48708/_downloads.json new file mode 100644 index 0000000000..73de6fe9da --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48708/_downloads.json @@ -0,0 +1,3 @@ +{ + "jquery": 5540159 +} diff --git a/packages/mergebot/src/_tests/fixtures/48708/_files.json b/packages/mergebot/src/_tests/fixtures/48708/_files.json new file mode 100644 index 0000000000..2a38b40e74 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48708/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/jquery/index.d.ts": "// Type definitions for jquery 3.5\n// Project: https://jquery.com\n// Definitions by: Leonard Thieu \n// Boris Yankov \n// Christian Hoffmeister \n// Steve Fenton \n// Diullei Gomes \n// Tass Iliopoulos \n// Jason Swearingen \n// Sean Hill \n// Guus Goossens \n// Kelly Summerlin \n// Basarat Ali Syed \n// Nicholas Wolverson \n// Derek Cicerone \n// Andrew Gaspar \n// Seikichi Kondo \n// Benjamin Jackman \n// Poul Sorensen \n// Josh Strobl \n// John Reilly \n// Dick van den Brink \n// Thomas Schulz \n// Terry Mun \n// Martin Badin \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.7\n\n/// \n/// \n/// \n/// \n/// \n\nexport = jQuery;\n", + "eb13547e342b1316aeea85df84983a534cfb092f:types/jquery/index.d.ts": "// Type definitions for jquery 3.5\n// Project: https://jquery.com\n// Definitions by: Leonard Thieu \n// Boris Yankov \n// Christian Hoffmeister \n// Steve Fenton \n// Diullei Gomes \n// Tass Iliopoulos \n// Jason Swearingen \n// Sean Hill \n// Guus Goossens \n// Kelly Summerlin \n// Basarat Ali Syed \n// Nicholas Wolverson \n// Derek Cicerone \n// Andrew Gaspar \n// Seikichi Kondo \n// Benjamin Jackman \n// Poul Sorensen \n// Josh Strobl \n// John Reilly \n// Dick van den Brink \n// Thomas Schulz \n// Terry Mun \n// Martin Badin \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.7\n\n/// \n/// \n/// \n/// \n/// \n\nexport = jQuery;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/48708/_response.json b/packages/mergebot/src/_tests/fixtures/48708/_response.json new file mode 100644 index 0000000000..31bdc4596e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48708/_response.json @@ -0,0 +1,366 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NTAxNTQ0NDEz", + "title": "[jquery] Update return type for height function", + "createdAt": "2020-10-12T12:27:56Z", + "author": { + "login": "martin-badin", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Revision needed", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 48708, + "state": "OPEN", + "headRefOid": "eb13547e342b1316aeea85df84983a534cfb092f", + "changedFiles": 3, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T12:28:32Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T12:28:33Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T12:41:25Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T13:10:18Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T13:10:20Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-12T14:32:58Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "martin-badin", + "__typename": "User" + }, + "createdAt": "2020-10-14T17:33:54Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "leonard-thieu", + "__typename": "User" + }, + "createdAt": "2020-10-15T11:45:09Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "martin-badin", + "__typename": "User" + }, + "createdAt": "2020-10-15T15:53:50Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-12T20:22:27Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "leonard-thieu", + "__typename": "User" + }, + "commit": { + "oid": "eb13547e342b1316aeea85df84983a534cfb092f", + "abbreviatedOid": "eb13547", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-10-12T13:09:45Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48708#pullrequestreview-506604643", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/eb13547e342b1316aeea85df84983a534cfb092f/checks?check_suite_id=1325716211", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/eb13547e342b1316aeea85df84983a534cfb092f/checks?check_suite_id=1325716211", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/eb13547e342b1316aeea85df84983a534cfb092f/checks?check_suite_id=1325717570", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/eb13547e342b1316aeea85df84983a534cfb092f/checks?check_suite_id=1325717570", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-12T12:24:57Z", + "committedDate": "2020-10-12T12:24:57Z", + "pushedDate": null, + "abbreviatedOid": "eb13547", + "oid": "eb13547e342b1316aeea85df84983a534cfb092f", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 8, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNzA5MDA1OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@martin-badin Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n- `jquery` [on npm](https://www.npmjs.com/package/jquery), [on unpkg](https://unpkg.com/browse/jquery@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can help you merge this PR once someone else signs off on it.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\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## Inactive\n\nThis PR has been inactive for 28 days — it is considered nearly abandoned!\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2020-10-12T12:28:32Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNzA5MDA2Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @leonard-thieu @borisyankov @choffmeister @Steve-Fenton @Diullei @tasoili @jasons-novaleaf @seanski @Guuz @ksummerlin @basarat @nwolverson @derekcicerone @AndrewGaspar @seikichi @benjaminjackman @s093294 @JoshStrobl @johnnyreilly @DickvdBrink @King2500 @terrymun — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48708/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": "2020-10-12T12:28:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNzExMDU1OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@martin-badin One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-10-12T13:10:20Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwNzE1NzY4MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #48708 | diff |\n| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 154.6 | 153.3 | -0.8% |\n| Type count | 84815 | 84815 | 0% |\n| Assignability cache size | 7585 | 7585 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 4593 | 4489 | -2% |\n| Identifiers in tests | 18716 | 18716 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 780.1 | 799.2 | +2.4% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 0.0% | 0.0% | |\n|     Worst duration (ms) | 1742.4 | 1748.6 | +0.4% |\n|     Worst identifier | [$](/DefinitelyTyped/DefinitelyTyped/blob/844db8d4c5416914b4c5481fa5ccc49fd6bd7054/types/jquery/jquery-tests.ts#L5485) | [$](/DefinitelyTyped/DefinitelyTyped/blob/1e1f2a9df459a5188fc5fc10e2632108ccc8164c/types/jquery/jquery-tests.ts#L5605) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 784.2 | 801.6 | +2.2% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 0.0% | 0.0% | |\n|     Worst duration (ms) | 1622.1 | 1817.3 | +12.0% |\n|     Worst identifier | [createElement](/DefinitelyTyped/DefinitelyTyped/blob/844db8d4c5416914b4c5481fa5ccc49fd6bd7054/types/jquery/jquery-tests.ts#L2414) | [index](/DefinitelyTyped/DefinitelyTyped/blob/1e1f2a9df459a5188fc5fc10e2632108ccc8164c/types/jquery/jquery-tests.ts#L5622) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-10-12T14:32:58Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwODU1MTg1Ng==", + "author": { + "login": "martin-badin", + "__typename": "User" + }, + "body": "> `.height()` can return `undefined` when called on an empty set.\r\n> \r\n> https://jsfiddle.net/leonard_thieu/avspk27w/3/\r\n\r\nYou are right but I think that the problem is in the missing element, not in the function.", + "createdAt": "2020-10-14T17:33:54Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwOTIzMTU2NA==", + "author": { + "login": "leonard-thieu", + "__typename": "User" + }, + "body": "I'm not sure I understand what you mean. With this change, users won't expect `.height()` to potentially return `undefined`. Are you suggesting that users should be using it in a different way?", + "createdAt": "2020-10-15T11:45:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcwOTQyMDQ0OQ==", + "author": { + "login": "martin-badin", + "__typename": "User" + }, + "body": "The function returns `undefined` if the element doesn't exist, all right? Then the user should inspect if the element exists. \r\n\r\nExample\r\n```\r\nvar empty = $('#none');\r\n\r\nif(empty.length) {\r\n console.dir(empty.width());\r\n console.dir(empty.height());\r\n console.dir(empty.innerWidth());\r\n console.dir(empty.innerHeight());\r\n}\r\n```", + "createdAt": "2020-10-15T15:53:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyNjMyMDI0OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@martin-badin I haven't seen any activity on this PR in more than 3 weeks, and this PR currently has problems that prevent it from being merged. The PR will be closed in a week if the issues aren't addressed.\n", + "createdAt": "2020-11-12T20:22:27Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/jquery/JQuery.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/jquery/jquery-tests.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/jquery/test/example-tests.ts", + "additions": 4, + "deletions": 4, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 3 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDcxOTc3NDM=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/48708/derived.json b/packages/mergebot/src/_tests/fixtures/48708/derived.json new file mode 100644 index 0000000000..949dcea68e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48708/derived.json @@ -0,0 +1,71 @@ +{ + "type": "info", + "now": "2020-11-12T21:06:07.910Z", + "pr_number": 48708, + "author": "martin-badin", + "headCommitOid": "eb13547e342b1316aeea85df84983a534cfb092f", + "mergeBaseOid": "master", + "lastPushDate": "2020-10-12T12:27:56.000Z", + "lastActivityDate": "2020-10-15T15:53:50.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "jquery", + "kind": "edit", + "files": [ + { + "path": "types/jquery/JQuery.d.ts", + "kind": "definition" + }, + { + "path": "types/jquery/jquery-tests.ts", + "kind": "test" + }, + { + "path": "types/jquery/test/example-tests.ts", + "kind": "test" + } + ], + "owners": [ + "leonard-thieu", + "borisyankov", + "choffmeister", + "Steve-Fenton", + "Diullei", + "tasoili", + "jasons-novaleaf", + "seanski", + "Guuz", + "ksummerlin", + "basarat", + "nwolverson", + "derekcicerone", + "AndrewGaspar", + "seikichi", + "benjaminjackman", + "s093294", + "JoshStrobl", + "johnnyreilly", + "DickvdBrink", + "King2500", + "terrymun", + "martin-badin" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [ + { + "type": "changereq", + "reviewer": "leonard-thieu", + "date": "2020-10-12T13:09:45.000Z" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/48708/mutations.json b/packages/mergebot/src/_tests/fixtures/48708/mutations.json new file mode 100644 index 0000000000..51a7ec8b39 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48708/mutations.json @@ -0,0 +1,32 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDcwNzA5MDA1OQ==", + "body": "@martin-badin Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `jquery` — [on npm](https://www.npmjs.com/package/jquery), [on unpkg](https://unpkg.com/browse/jquery@latest/) (author is owner)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=48708&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 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## Inactive\n\nThis PR has been inactive for 28 days — it is considered nearly abandoned!\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwxNjA4NjM0NDg0", + "MDU6TGFiZWw2NDQxMTYxNzA=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTAxNTQ0NDEz" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDcyNjMyMDI0OQ==", + "body": "@martin-badin I haven't seen any activity on this PR in more than three weeks, and it still has problems that prevent it from being merged. The PR will be closed on Nov 14th (in a week) if the issues aren't addressed.\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/48708/result.json b/packages/mergebot/src/_tests/fixtures/48708/result.json new file mode 100644 index 0000000000..cf753e370b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48708/result.json @@ -0,0 +1,26 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "Revision needed", + "Critical package", + "Author is Owner", + "Abandoned" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@martin-badin Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `jquery` — [on npm](https://www.npmjs.com/package/jquery), [on unpkg](https://unpkg.com/browse/jquery@latest/) (author is owner)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=48708&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 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## Inactive\n\nThis PR has been inactive for 28 days — it is considered nearly abandoned!\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "reviewer-complaint-eb13547", + "status": "@martin-badin One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!" + }, + { + "tag": "Abandoned:nearly:2020-10-15", + "status": "@martin-badin I haven't seen any activity on this PR in more than three weeks, and it still has problems that prevent it from being merged. The PR will be closed on Nov 14th (in a week) if the issues aren't addressed." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/48945/_downloads.json b/packages/mergebot/src/_tests/fixtures/48945/_downloads.json new file mode 100644 index 0000000000..23db52282d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48945/_downloads.json @@ -0,0 +1,3 @@ +{ + "gapi.client.calendar": 2325 +} diff --git a/packages/mergebot/src/_tests/fixtures/48945/_files.json b/packages/mergebot/src/_tests/fixtures/48945/_files.json new file mode 100644 index 0000000000..b052164644 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48945/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/gapi.client.calendar/index.d.ts": "// Type definitions for non-npm package Calendar API v3 3.0\n// Project: https://developers.google.com/google-apps/calendar/firstapp\n// Definitions by: Maxim Mazurok \n// Google API Typings Generator \n// Nick Amoscato \n// Declan Vong \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\n// IMPORTANT\n// This file was generated by https://github.com/Maxim-Mazurok/google-api-typings-generator. Please do not edit it manually.\n// In case of any problems please post issue to https://github.com/Maxim-Mazurok/google-api-typings-generator\n// Generated from: https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest\n// Revision: 20200917\n\n/// \n\ndeclare namespace gapi.client {\n /** Load Calendar API v3 */\n function load(name: \"calendar\", version: \"v3\"): PromiseLike;\n function load(name: \"calendar\", version: \"v3\", callback: () => any): void;\n\n namespace calendar {\n interface Acl {\n /** ETag of the collection. */\n etag?: string;\n /** List of rules on the access control list. */\n items?: AclRule[];\n /** Type of the collection (\"calendar#acl\"). */\n kind?: string;\n /** Token used to access the next page of this result. Omitted if no further results are available, in which case nextSyncToken is provided. */\n nextPageToken?: string;\n /**\n * Token used at a later point in time to retrieve only the entries that have changed since this result was returned. Omitted if further results are available, in which case\n * nextPageToken is provided.\n */\n nextSyncToken?: string;\n }\n interface AclRule {\n /** ETag of the resource. */\n etag?: string;\n /** Identifier of the ACL rule. */\n id?: string;\n /** Type of the resource (\"calendar#aclRule\"). */\n kind?: string;\n /**\n * The role assigned to the scope. Possible values are:\n * - \"none\" - Provides no access.\n * - \"freeBusyReader\" - Provides read access to free/busy information.\n * - \"reader\" - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden.\n * - \"writer\" - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible.\n * - \"owner\" - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs.\n */\n role?: string;\n /** The scope of the rule. */\n scope?: {\n /**\n * The type of the scope. Possible values are:\n * - \"default\" - The public scope. This is the default value.\n * - \"user\" - Limits the scope to a single user.\n * - \"group\" - Limits the scope to a group.\n * - \"domain\" - Limits the scope to a domain. Note: The permissions granted to the \"default\", or public, scope apply to any user, authenticated or not.\n */\n type?: string;\n /** The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type \"default\". */\n value?: string;\n };\n }\n interface Calendar {\n /** Conferencing properties for this calendar, for example what types of conferences are allowed. */\n conferenceProperties?: ConferenceProperties;\n /** Description of the calendar. Optional. */\n description?: string;\n /** ETag of the resource. */\n etag?: string;\n /** Identifier of the calendar. To retrieve IDs call the calendarList.list() method. */\n id?: string;\n /** Type of the resource (\"calendar#calendar\"). */\n kind?: string;\n /** Geographic location of the calendar as free-form text. Optional. */\n location?: string;\n /** Title of the calendar. */\n summary?: string;\n /** The time zone of the calendar. (Formatted as an IANA Time Zone Database name, e.g. \"Europe/Zurich\".) Optional. */\n timeZone?: string;\n }\n interface CalendarList {\n /** ETag of the collection. */\n etag?: string;\n /** Calendars that are present on the user's calendar list. */\n items?: CalendarListEntry[];\n /** Type of the collection (\"calendar#calendarList\"). */\n kind?: string;\n /** Token used to access the next page of this result. Omitted if no further results are available, in which case nextSyncToken is provided. */\n nextPageToken?: string;\n /**\n * Token used at a later point in time to retrieve only the entries that have changed since this result was returned. Omitted if further results are available, in which case\n * nextPageToken is provided.\n */\n nextSyncToken?: string;\n }\n interface CalendarListEntry {\n /**\n * The effective access role that the authenticated user has on the calendar. Read-only. Possible values are:\n * - \"freeBusyReader\" - Provides read access to free/busy information.\n * - \"reader\" - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden.\n * - \"writer\" - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible.\n * - \"owner\" - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs.\n */\n accessRole?: string;\n /**\n * The main color of the calendar in the hexadecimal format \"#0088aa\". This property supersedes the index-based colorId property. To set or change this property, you need to specify\n * colorRgbFormat=true in the parameters of the insert, update and patch methods. Optional.\n */\n backgroundColor?: string;\n /**\n * The color of the calendar. This is an ID referring to an entry in the calendar section of the colors definition (see the colors endpoint). This property is superseded by the\n * backgroundColor and foregroundColor properties and can be ignored when using these properties. Optional.\n */\n colorId?: string;\n /** Conferencing properties for this calendar, for example what types of conferences are allowed. */\n conferenceProperties?: ConferenceProperties;\n /** The default reminders that the authenticated user has for this calendar. */\n defaultReminders?: EventReminder[];\n /** Whether this calendar list entry has been deleted from the calendar list. Read-only. Optional. The default is False. */\n deleted?: boolean;\n /** Description of the calendar. Optional. Read-only. */\n description?: string;\n /** ETag of the resource. */\n etag?: string;\n /**\n * The foreground color of the calendar in the hexadecimal format \"#ffffff\". This property supersedes the index-based colorId property. To set or change this property, you need to\n * specify colorRgbFormat=true in the parameters of the insert, update and patch methods. Optional.\n */\n foregroundColor?: string;\n /** Whether the calendar has been hidden from the list. Optional. The attribute is only returned when the calendar is hidden, in which case the value is true. */\n hidden?: boolean;\n /** Identifier of the calendar. */\n id?: string;\n /** Type of the resource (\"calendar#calendarListEntry\"). */\n kind?: string;\n /** Geographic location of the calendar as free-form text. Optional. Read-only. */\n location?: string;\n /** The notifications that the authenticated user is receiving for this calendar. */\n notificationSettings?: {\n /** The list of notifications set for this calendar. */\n notifications?: CalendarNotification[];\n };\n /** Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False. */\n primary?: boolean;\n /** Whether the calendar content shows up in the calendar UI. Optional. The default is False. */\n selected?: boolean;\n /** Title of the calendar. Read-only. */\n summary?: string;\n /** The summary that the authenticated user has set for this calendar. Optional. */\n summaryOverride?: string;\n /** The time zone of the calendar. Optional. Read-only. */\n timeZone?: string;\n }\n interface CalendarNotification {\n /**\n * The method used to deliver the notification. The possible value is:\n * - \"email\" - Notifications are sent via email.\n * Required when adding a notification.\n */\n method?: string;\n /**\n * The type of notification. Possible values are:\n * - \"eventCreation\" - Notification sent when a new event is put on the calendar.\n * - \"eventChange\" - Notification sent when an event is changed.\n * - \"eventCancellation\" - Notification sent when an event is cancelled.\n * - \"eventResponse\" - Notification sent when an attendee responds to the event invitation.\n * - \"agenda\" - An agenda with the events of the day (sent out i", + "759b4cb2339ff12a22c8101f143a7a68ed535c70:types/gapi.client.calendar/index.d.ts": "// Type definitions for non-npm package Calendar API v3 3.0\n// Project: https://developers.google.com/google-apps/calendar/firstapp\n// Definitions by: Maxim Mazurok \n// Google API Typings Generator \n// Nick Amoscato \n// Declan Vong \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\n// IMPORTANT\n// This file was generated by https://github.com/Maxim-Mazurok/google-api-typings-generator. Please do not edit it manually.\n// In case of any problems please post issue to https://github.com/Maxim-Mazurok/google-api-typings-generator\n// Generated from: https://calendar-json.googleapis.com/$discovery/rest?version=v3\n// Revision: 20201015\n\n/// \n\ndeclare namespace gapi.client {\n /** Load Calendar API v3 */\n function load(name: \"calendar\", version: \"v3\"): PromiseLike;\n function load(name: \"calendar\", version: \"v3\", callback: () => any): void;\n\n namespace calendar {\n interface Acl {\n /** ETag of the collection. */\n etag?: string;\n /** List of rules on the access control list. */\n items?: AclRule[];\n /** Type of the collection (\"calendar#acl\"). */\n kind?: string;\n /** Token used to access the next page of this result. Omitted if no further results are available, in which case nextSyncToken is provided. */\n nextPageToken?: string;\n /**\n * Token used at a later point in time to retrieve only the entries that have changed since this result was returned. Omitted if further results are available, in which case\n * nextPageToken is provided.\n */\n nextSyncToken?: string;\n }\n interface AclRule {\n /** ETag of the resource. */\n etag?: string;\n /** Identifier of the ACL rule. */\n id?: string;\n /** Type of the resource (\"calendar#aclRule\"). */\n kind?: string;\n /**\n * The role assigned to the scope. Possible values are:\n * - \"none\" - Provides no access.\n * - \"freeBusyReader\" - Provides read access to free/busy information.\n * - \"reader\" - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden.\n * - \"writer\" - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible.\n * - \"owner\" - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs.\n */\n role?: string;\n /** The scope of the rule. */\n scope?: {\n /**\n * The type of the scope. Possible values are:\n * - \"default\" - The public scope. This is the default value.\n * - \"user\" - Limits the scope to a single user.\n * - \"group\" - Limits the scope to a group.\n * - \"domain\" - Limits the scope to a domain. Note: The permissions granted to the \"default\", or public, scope apply to any user, authenticated or not.\n */\n type?: string;\n /** The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type \"default\". */\n value?: string;\n };\n }\n interface Calendar {\n /** Conferencing properties for this calendar, for example what types of conferences are allowed. */\n conferenceProperties?: ConferenceProperties;\n /** Description of the calendar. Optional. */\n description?: string;\n /** ETag of the resource. */\n etag?: string;\n /** Identifier of the calendar. To retrieve IDs call the calendarList.list() method. */\n id?: string;\n /** Type of the resource (\"calendar#calendar\"). */\n kind?: string;\n /** Geographic location of the calendar as free-form text. Optional. */\n location?: string;\n /** Title of the calendar. */\n summary?: string;\n /** The time zone of the calendar. (Formatted as an IANA Time Zone Database name, e.g. \"Europe/Zurich\".) Optional. */\n timeZone?: string;\n }\n interface CalendarList {\n /** ETag of the collection. */\n etag?: string;\n /** Calendars that are present on the user's calendar list. */\n items?: CalendarListEntry[];\n /** Type of the collection (\"calendar#calendarList\"). */\n kind?: string;\n /** Token used to access the next page of this result. Omitted if no further results are available, in which case nextSyncToken is provided. */\n nextPageToken?: string;\n /**\n * Token used at a later point in time to retrieve only the entries that have changed since this result was returned. Omitted if further results are available, in which case\n * nextPageToken is provided.\n */\n nextSyncToken?: string;\n }\n interface CalendarListEntry {\n /**\n * The effective access role that the authenticated user has on the calendar. Read-only. Possible values are:\n * - \"freeBusyReader\" - Provides read access to free/busy information.\n * - \"reader\" - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden.\n * - \"writer\" - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible.\n * - \"owner\" - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs.\n */\n accessRole?: string;\n /**\n * The main color of the calendar in the hexadecimal format \"#0088aa\". This property supersedes the index-based colorId property. To set or change this property, you need to specify\n * colorRgbFormat=true in the parameters of the insert, update and patch methods. Optional.\n */\n backgroundColor?: string;\n /**\n * The color of the calendar. This is an ID referring to an entry in the calendar section of the colors definition (see the colors endpoint). This property is superseded by the\n * backgroundColor and foregroundColor properties and can be ignored when using these properties. Optional.\n */\n colorId?: string;\n /** Conferencing properties for this calendar, for example what types of conferences are allowed. */\n conferenceProperties?: ConferenceProperties;\n /** The default reminders that the authenticated user has for this calendar. */\n defaultReminders?: EventReminder[];\n /** Whether this calendar list entry has been deleted from the calendar list. Read-only. Optional. The default is False. */\n deleted?: boolean;\n /** Description of the calendar. Optional. Read-only. */\n description?: string;\n /** ETag of the resource. */\n etag?: string;\n /**\n * The foreground color of the calendar in the hexadecimal format \"#ffffff\". This property supersedes the index-based colorId property. To set or change this property, you need to\n * specify colorRgbFormat=true in the parameters of the insert, update and patch methods. Optional.\n */\n foregroundColor?: string;\n /** Whether the calendar has been hidden from the list. Optional. The attribute is only returned when the calendar is hidden, in which case the value is true. */\n hidden?: boolean;\n /** Identifier of the calendar. */\n id?: string;\n /** Type of the resource (\"calendar#calendarListEntry\"). */\n kind?: string;\n /** Geographic location of the calendar as free-form text. Optional. Read-only. */\n location?: string;\n /** The notifications that the authenticated user is receiving for this calendar. */\n notificationSettings?: {\n /** The list of notifications set for this calendar. */\n notifications?: CalendarNotification[];\n };\n /** Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False. */\n primary?: boolean;\n /** Whether the calendar content shows up in the calendar UI. Optional. The default is False. */\n selected?: boolean;\n /** Title of the calendar. Read-only. */\n summary?: string;\n /** The summary that the authenticated user has set for this calendar. Optional. */\n summaryOverride?: string;\n /** The time zone of the calendar. Optional. Read-only. */\n timeZone?: string;\n }\n interface CalendarNotification {\n /**\n * The method used to deliver the notification. The possible value is:\n * - \"email\" - Notifications are sent via email.\n * Required when adding a notification.\n */\n method?: string;\n /**\n * The type of notification. Possible values are:\n * - \"eventCreation\" - Notification sent when a new event is put on the calendar.\n * - \"eventChange\" - Notification sent when an event is changed.\n * - \"eventCancellation\" - Notification sent when an event is cancelled.\n * - \"eventResponse\" - Notification sent when an attendee responds to the event invitation.\n * - \"agenda\" - An agenda with the events of the day (sent out" +} diff --git a/packages/mergebot/src/_tests/fixtures/48945/_response.json b/packages/mergebot/src/_tests/fixtures/48945/_response.json new file mode 100644 index 0000000000..1a41fb27cf --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48945/_response.json @@ -0,0 +1,366 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NTA2NzE0ODc2", + "title": "[gapi.client.calendar] automatic update", + "createdAt": "2020-10-20T11:30:33Z", + "author": { + "login": "google-api-typings-generator", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Revision needed", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 48945, + "state": "OPEN", + "headRefOid": "759b4cb2339ff12a22c8101f143a7a68ed535c70", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "Maxim-Mazurok", + "__typename": "User" + }, + "createdAt": "2020-10-20T11:30:38Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-20T11:31:11Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-20T11:35:45Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-10-20T12:40:24Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "Maxim-Mazurok", + "__typename": "User" + }, + "createdAt": "2020-10-24T00:55:51Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-02T04:17:42Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-03T02:26:21Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-03T02:26:22Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "Maxim-Mazurok", + "__typename": "User" + }, + "createdAt": "2020-11-03T02:30:59Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "Maxim-Mazurok", + "__typename": "User" + }, + "commit": { + "oid": "759b4cb2339ff12a22c8101f143a7a68ed535c70", + "abbreviatedOid": "759b4cb", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-10-20T11:30:36Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48945#pullrequestreview-512606528", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "commit": { + "oid": "759b4cb2339ff12a22c8101f143a7a68ed535c70", + "abbreviatedOid": "759b4cb", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-11-02T16:19:48Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48945#pullrequestreview-521782725", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/759b4cb2339ff12a22c8101f143a7a68ed535c70/checks?check_suite_id=1368807126", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/759b4cb2339ff12a22c8101f143a7a68ed535c70/checks?check_suite_id=1368807126", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/759b4cb2339ff12a22c8101f143a7a68ed535c70/checks?check_suite_id=1368808470", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/759b4cb2339ff12a22c8101f143a7a68ed535c70/checks?check_suite_id=1368808470", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-10-20T11:25:36Z", + "committedDate": "2020-10-20T11:25:36Z", + "pushedDate": "2020-10-20T11:30:40Z", + "abbreviatedOid": "759b4cb", + "oid": "759b4cb2339ff12a22c8101f143a7a68ed535c70", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 7, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDcxMjc4NTEzMA==", + "author": { + "login": "Maxim-Mazurok", + "__typename": "User" + }, + "body": "Ready to merge", + "createdAt": "2020-10-20T11:30:38Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcxMjc4NTQwOA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@google-api-typings-generator Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n- `gapi.client.calendar` [on npm](https://www.npmjs.com/package/gapi.client.calendar), [on unpkg](https://unpkg.com/browse/gapi.client.calendar@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can help you merge this PR once someone else signs off on it.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ Most recent commit is approved by type definition owners, DT maintainers or others\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## Inactive\n\nThis PR has been inactive for 4 days.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2020-10-20T11:31:11Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcxMjc4NzQ2Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@google-api-typings-generator Everything looks good here. Great job! I am ready to merge this PR (at 759b4cb) on your behalf.\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(@Maxim-Mazurok, @namoscato, @declanvong: you can do this too.)\n", + "createdAt": "2020-10-20T11:35:45Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcxMjgyMDAxMg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #48945 | diff |\n| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 74.3 | 75.3 | +1.3% |\n| Type count | 10933 | 10933 | 0% |\n| Assignability cache size | 3487 | 3487 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 1005 | 1005 | 0% |\n| Identifiers in tests | 1005 | 1005 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 389.5 | 383.5 | -1.5% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 8.9% | 8.5% | |\n|     Worst duration (ms) | 513.2 | 486.5 | -5.2% |\n|     Worst identifier | [pin](/DefinitelyTyped/DefinitelyTyped/blob/0459aa7e3bde36938d1b4c3aa1ec7269c62f5a5a/types/gapi.client.calendar/gapi.client.calendar-tests.ts#L940) | [updated](/DefinitelyTyped/DefinitelyTyped/blob/704af584877e4ae5c3338b05e5c33f6e04ff6aea/types/gapi.client.calendar/gapi.client.calendar-tests.ts#L1031) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 393.1 | 387.1 | -1.5% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.0% | 8.5% | -5.8% |\n|     Worst duration (ms) | 541.8 | 507.1 | -6.4% |\n|     Worst identifier | [regionCode](/DefinitelyTyped/DefinitelyTyped/blob/0459aa7e3bde36938d1b4c3aa1ec7269c62f5a5a/types/gapi.client.calendar/gapi.client.calendar-tests.ts#L941) | [regionCode](/DefinitelyTyped/DefinitelyTyped/blob/704af584877e4ae5c3338b05e5c33f6e04ff6aea/types/gapi.client.calendar/gapi.client.calendar-tests.ts#L941) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-10-20T12:40:24Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcxNTY0NzAwOQ==", + "author": { + "login": "Maxim-Mazurok", + "__typename": "User" + }, + "body": "Do not merge this one yet, please, while I'm waiting for a reply from support (see https://github.com/Maxim-Mazurok/google-api-typings-generator/issues/383)", + "createdAt": "2020-10-24T00:55:51Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDg3MTUzNQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@google-api-typings-generator One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2020-11-03T02:26:22Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMDg3MjQ5NA==", + "author": { + "login": "Maxim-Mazurok", + "__typename": "User" + }, + "body": "Dear maintainers, please, close this, because #49235\r\nAnd @google-api-typings-generator bot can't do this because it has restricted access", + "createdAt": "2020-11-03T02:30:59Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/gapi.client.calendar/gapi.client.calendar-tests.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/gapi.client.calendar/index.d.ts", + "additions": 2, + "deletions": 2, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDc3MjA2NjE=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/48945/derived.json b/packages/mergebot/src/_tests/fixtures/48945/derived.json new file mode 100644 index 0000000000..1ac08b29f9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48945/derived.json @@ -0,0 +1,55 @@ +{ + "type": "info", + "now": "2020-11-12T20:09:30.051Z", + "pr_number": 48945, + "author": "google-api-typings-generator", + "headCommitOid": "759b4cb2339ff12a22c8101f143a7a68ed535c70", + "mergeBaseOid": "master", + "lastPushDate": "2020-10-20T11:30:40.000Z", + "lastActivityDate": "2020-11-03T02:30:59.000Z", + "mergeOfferDate": "2020-10-20T11:35:45.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "gapi.client.calendar", + "kind": "edit", + "files": [ + { + "path": "types/gapi.client.calendar/gapi.client.calendar-tests.ts", + "kind": "test" + }, + { + "path": "types/gapi.client.calendar/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "Maxim-Mazurok", + "google-api-typings-generator", + "namoscato", + "declanvong" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "changereq", + "reviewer": "RyanCavanaugh", + "date": "2020-11-02T16:19:48.000Z" + }, + { + "type": "approved", + "reviewer": "Maxim-Mazurok", + "date": "2020-10-20T11:30:36.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/48945/mutations.json b/packages/mergebot/src/_tests/fixtures/48945/mutations.json new file mode 100644 index 0000000000..d742dfbc9e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48945/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDcxMjc4NTQwOA==", + "body": "@google-api-typings-generator Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `gapi.client.calendar` — [on npm](https://www.npmjs.com/package/gapi.client.calendar), [on unpkg](https://unpkg.com/browse/gapi.client.calendar@latest/) (author is owner)\n - owner-approval: @Maxim-Mazurok\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=48945&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, 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## Inactive\n\nThis PR has been inactive for 9 days.\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw5MDUzMzQwOTU=", + "MDU6TGFiZWw2OTcwMTg5NzI=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTA2NzE0ODc2" + } + } + }, + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDcxMjc4NzQ2Ng==" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/48945/result.json b/packages/mergebot/src/_tests/fixtures/48945/result.json new file mode 100644 index 0000000000..e3ae206b64 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/48945/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "Revision needed", + "Author is Owner" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@google-api-typings-generator Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `gapi.client.calendar` — [on npm](https://www.npmjs.com/package/gapi.client.calendar), [on unpkg](https://unpkg.com/browse/gapi.client.calendar@latest/) (author is owner)\n - owner-approval: @Maxim-Mazurok\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=48945&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, 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## Inactive\n\nThis PR has been inactive for 9 days.\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "reviewer-complaint-759b4cb", + "status": "@google-api-typings-generator One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/49417/_downloads.json b/packages/mergebot/src/_tests/fixtures/49417/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49417/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/49417/_files.json b/packages/mergebot/src/_tests/fixtures/49417/_files.json new file mode 100644 index 0000000000..0adc23b514 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49417/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/d3-array/index.d.ts": "// Type definitions for D3JS d3-array module 2.7\n// Project: https://github.com/d3/d3-array, https://d3js.org/d3-array\n// Definitions by: Alex Ford \n// Boris Yankov \n// Tom Wanzek \n// denisname \n// Hugues Stefanski \n// Nathan Bierema \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n// Last module patch version validated against: 2.7.1\n", + "2b9d0980329843dc436a18460f85bb2e2d2f688c:types/d3-array/index.d.ts": "// Type definitions for D3JS d3-array module 2.8\n// Project: https://github.com/d3/d3-array, https://d3js.org/d3-array\n// Definitions by: Alex Ford \n// Boris Yankov \n// Tom Wanzek \n// denisname \n// Hugues Stefanski \n// Nathan Bierema \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n// Last module patch version validated against: 2.8.0\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/49417/_response.json b/packages/mergebot/src/_tests/fixtures/49417/_response.json new file mode 100644 index 0000000000..db02d2bb36 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49417/_response.json @@ -0,0 +1,742 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NTE3MTkwNTIz", + "title": "[d3-array] Update types to v2.8", + "createdAt": "2020-11-07T20:48:53Z", + "author": { + "login": "Methuselah96", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "Maintainer Approved", + "__typename": "Label" + }, + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Other Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 49417, + "state": "OPEN", + "headRefOid": "2b9d0980329843dc436a18460f85bb2e2d2f688c", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-07T20:49:32Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-07T20:49:33Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-11-07T20:53:06Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-07T22:54:09Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-08T07:57:39Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "Methuselah96", + "__typename": "User" + }, + "createdAt": "2020-11-14T14:45:10Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-15T15:22:23Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-15T15:22:24Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-15T20:49:03Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-16T16:47:52Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-16T16:47:53Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "tuuling", + "__typename": "User" + }, + "commit": { + "oid": "525f75c2fecceb410d9fa026bb218476fbe1c66a", + "abbreviatedOid": "525f75c", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "tuuling", + "__typename": "User" + }, + "createdAt": "2020-11-07T21:37:04Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-07T21:37:04Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49417#pullrequestreview-525684716", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Methuselah96", + "__typename": "User" + }, + "commit": { + "oid": "525f75c2fecceb410d9fa026bb218476fbe1c66a", + "abbreviatedOid": "525f75c", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "Methuselah96", + "__typename": "User" + }, + "createdAt": "2020-11-08T07:52:09Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-08T07:52:09Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49417#pullrequestreview-525783277", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Ledragon", + "__typename": "User" + }, + "commit": { + "oid": "2b9d0980329843dc436a18460f85bb2e2d2f688c", + "abbreviatedOid": "2b9d098", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "Ledragon", + "__typename": "User" + }, + "createdAt": "2020-11-15T15:20:32Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-11-15T15:21:49Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49417#pullrequestreview-530808186", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "tuuling", + "__typename": "User" + }, + "commit": { + "oid": "2b9d0980329843dc436a18460f85bb2e2d2f688c", + "abbreviatedOid": "2b9d098", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "tuuling", + "__typename": "User" + }, + "createdAt": "2020-11-15T17:45:44Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-15T17:45:44Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49417#pullrequestreview-530819795", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Methuselah96", + "__typename": "User" + }, + "commit": { + "oid": "2b9d0980329843dc436a18460f85bb2e2d2f688c", + "abbreviatedOid": "2b9d098", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "Methuselah96", + "__typename": "User" + }, + "createdAt": "2020-11-15T17:57:10Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-15T17:57:10Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49417#pullrequestreview-530820589", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Ledragon", + "__typename": "User" + }, + "commit": { + "oid": "2b9d0980329843dc436a18460f85bb2e2d2f688c", + "abbreviatedOid": "2b9d098", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "Ledragon", + "__typename": "User" + }, + "createdAt": "2020-11-15T19:51:47Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-15T19:51:47Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49417#pullrequestreview-530829279", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Methuselah96", + "__typename": "User" + }, + "commit": { + "oid": "2b9d0980329843dc436a18460f85bb2e2d2f688c", + "abbreviatedOid": "2b9d098", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "Methuselah96", + "__typename": "User" + }, + "createdAt": "2020-11-15T20:19:22Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-15T20:19:23Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49417#pullrequestreview-530831464", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Ledragon", + "__typename": "User" + }, + "commit": { + "oid": "2b9d0980329843dc436a18460f85bb2e2d2f688c", + "abbreviatedOid": "2b9d098", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "Ledragon", + "__typename": "User" + }, + "createdAt": "2020-11-15T20:48:18Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-15T20:48:18Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49417#pullrequestreview-530833769", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Ledragon", + "__typename": "User" + }, + "commit": { + "oid": "2b9d0980329843dc436a18460f85bb2e2d2f688c", + "abbreviatedOid": "2b9d098", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-11-15T20:48:29Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49417#pullrequestreview-530833785", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Methuselah96", + "__typename": "User" + }, + "commit": { + "oid": "2b9d0980329843dc436a18460f85bb2e2d2f688c", + "abbreviatedOid": "2b9d098", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "Methuselah96", + "__typename": "User" + }, + "createdAt": "2020-11-15T21:04:31Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-15T21:04:31Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49417#pullrequestreview-530835040", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "Ledragon", + "__typename": "User" + }, + "commit": { + "oid": "2b9d0980329843dc436a18460f85bb2e2d2f688c", + "abbreviatedOid": "2b9d098", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "Ledragon", + "__typename": "User" + }, + "createdAt": "2020-11-15T21:30:59Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-15T21:30:59Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49417#pullrequestreview-530837273", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "tuuling", + "__typename": "User" + }, + "commit": { + "oid": "2b9d0980329843dc436a18460f85bb2e2d2f688c", + "abbreviatedOid": "2b9d098", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "tuuling", + "__typename": "User" + }, + "createdAt": "2020-11-16T07:38:51Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-16T07:38:51Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49417#pullrequestreview-530983247", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 4, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-07T20:00:23Z", + "committedDate": "2020-11-07T20:00:23Z", + "pushedDate": null, + "abbreviatedOid": "2b223b6", + "oid": "2b223b6f17bea88533e1e5efc15fbf7221eae1db", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-07T20:33:15Z", + "committedDate": "2020-11-07T20:33:15Z", + "pushedDate": null, + "abbreviatedOid": "5778b5f", + "oid": "5778b5f4eb2ed06de91400d868a1fd3d530405ee", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/525f75c2fecceb410d9fa026bb218476fbe1c66a/checks?check_suite_id=1466843544", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/525f75c2fecceb410d9fa026bb218476fbe1c66a/checks?check_suite_id=1466843544", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/525f75c2fecceb410d9fa026bb218476fbe1c66a/checks?check_suite_id=1466843681", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/525f75c2fecceb410d9fa026bb218476fbe1c66a/checks?check_suite_id=1466843681", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-07T20:47:01Z", + "committedDate": "2020-11-07T20:47:01Z", + "pushedDate": "2020-11-07T20:48:03Z", + "abbreviatedOid": "525f75c", + "oid": "525f75c2fecceb410d9fa026bb218476fbe1c66a", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/2b9d0980329843dc436a18460f85bb2e2d2f688c/checks?check_suite_id=1467907548", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/2b9d0980329843dc436a18460f85bb2e2d2f688c/checks?check_suite_id=1467907548", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/2b9d0980329843dc436a18460f85bb2e2d2f688c/checks?check_suite_id=1467907815", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/2b9d0980329843dc436a18460f85bb2e2d2f688c/checks?check_suite_id=1467907815", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-08T07:51:54Z", + "committedDate": "2020-11-08T07:51:54Z", + "pushedDate": "2020-11-08T07:52:53Z", + "abbreviatedOid": "2b9d098", + "oid": "2b9d0980329843dc436a18460f85bb2e2d2f688c", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 10, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMzQ5MzkyNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@Methuselah96 Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n- `d3-array` [on npm](https://www.npmjs.com/package/d3-array), [on unpkg](https://unpkg.com/browse/d3-array@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can help you merge this PR once someone else signs off on it.\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", + "createdAt": "2020-11-07T20:49:32Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMzQ5MzkyOQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @gustavderdrache @borisyankov @tomwanzek @denisname @ledragon — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49417/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": "2020-11-07T20:49:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMzQ5NDI0OA==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## d3-array ([unpkg](https://unpkg.com/browse/d3-array@latest/))\nwas missing the following properties:\n1. scan\n

\n Generated by :no_entry_sign: dangerJS against 2b9d0980329843dc436a18460f85bb2e2d2f688c\n

\n", + "createdAt": "2020-11-07T20:53:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMzUwNTE0Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\nThese typings are for a version of d3-array that doesn’t yet exist on master, so I’ve compared them with v2.7.\n\n\n
\nComparison details 📊\n\n| | 2.7@master | 2.8 in #49417 | diff |\n| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 83.4 | 90.8 | +8.9% |\n| Type count | 14225 | 14486 | +2% |\n| Assignability cache size | 4084 | 4124 | +1% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 3160 | 3225 | +2% |\n| Identifiers in tests | 3160 | 3225 | +2% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 460.4 | 447.8 | -2.7% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 7.9% | 6.4% | |\n|     Worst duration (ms) | 696.5 | 816.4 | +17.2% |\n|     Worst identifier | [readonlyMixedObjectOrUndefinedArray](/DefinitelyTyped/DefinitelyTyped/blob/fdf2a38b605502827b4fa86f26fa4081df062d55/types/d3-array/d3-array-tests.ts#L165) | [age](/DefinitelyTyped/DefinitelyTyped/blob/2cbb4ec7ae9743d6efec26b869eb8805b0baf234/types/d3-array/d3-array-tests.ts#L217) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 456.2 | 442.6 | -3.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 7.9% | 6.2% | -21.1% |\n|     Worst duration (ms) | 786.0 | 673.4 | -14.3% |\n|     Worst identifier | [b](/DefinitelyTyped/DefinitelyTyped/blob/fdf2a38b605502827b4fa86f26fa4081df062d55/types/d3-array/d3-array-tests.ts#L459) | [shuffle](/DefinitelyTyped/DefinitelyTyped/blob/2cbb4ec7ae9743d6efec26b869eb8805b0baf234/types/d3-array/d3-array-tests.ts#L874) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-11-07T22:54:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyMzU0MzI2MQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@tuuling Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2020-11-08T07:57:39Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyNzIxNzM0OQ==", + "author": { + "login": "Methuselah96", + "__typename": "User" + }, + "body": "@tuuling @Ledragon Can I get a review?", + "createdAt": "2020-11-14T14:45:10Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/d3-array/d3-array-tests.ts", + "additions": 67, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/d3-array/index.d.ts", + "additions": 124, + "deletions": 7, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDg5MDg2NDg=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz", + "name": "Waiting for Author to Merge", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/49417/derived.json b/packages/mergebot/src/_tests/fixtures/49417/derived.json new file mode 100644 index 0000000000..68876af16d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49417/derived.json @@ -0,0 +1,57 @@ +{ + "type": "info", + "now": "2020-11-16T07:38:51.000Z", + "pr_number": 49417, + "author": "Methuselah96", + "headCommitOid": "2b9d0980329843dc436a18460f85bb2e2d2f688c", + "mergeBaseOid": "master", + "lastPushDate": "2020-11-08T07:52:53.000Z", + "lastActivityDate": "2020-11-16T07:38:51.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "d3-array", + "kind": "edit", + "files": [ + { + "path": "types/d3-array/d3-array-tests.ts", + "kind": "test" + }, + { + "path": "types/d3-array/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "gustavderdrache", + "borisyankov", + "tomwanzek", + "denisname", + "ledragon", + "Methuselah96" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "Ledragon", + "date": "2020-11-15T20:48:29.000Z", + "isMaintainer": false + }, + { + "type": "stale", + "reviewer": "tuuling", + "date": "2020-11-07T21:37:04.000Z", + "abbrOid": "525f75c" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/49417/mutations.json b/packages/mergebot/src/_tests/fixtures/49417/mutations.json new file mode 100644 index 0000000000..00dbbf9443 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49417/mutations.json @@ -0,0 +1,44 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDcyMzQ5MzkyNw==", + "body": "@Methuselah96 Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `d3-array` — [on npm](https://www.npmjs.com/package/d3-array), [on unpkg](https://unpkg.com/browse/d3-array@latest/) (author is owner)\n - owner-approval: @Ledragon\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=49417&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, DT maintainers or others\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": [ + "MDU6TGFiZWw5MDUzMzQwOTU=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTE3MTkwNTIz" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw1ODYxNzcwNjM=", + "MDU6TGFiZWwxNjA4NTUyNDEw", + "MDU6TGFiZWw2ODQzMjE1NzY=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTE3MTkwNTIz" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTE3MTkwNTIz", + "body": "@Methuselah96: Everything looks good here. I am ready to merge this PR (at 2b9d098) 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(@gustavderdrache, @borisyankov, @tomwanzek, @denisname, @ledragon: you can do this too.)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/49417/result.json b/packages/mergebot/src/_tests/fixtures/49417/result.json new file mode 100644 index 0000000000..43b9a77533 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49417/result.json @@ -0,0 +1,25 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Owner Approved", + "Author is Owner", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@Methuselah96 Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `d3-array` — [on npm](https://www.npmjs.com/package/d3-array), [on unpkg](https://unpkg.com/browse/d3-array@latest/) (author is owner)\n - owner-approval: @Ledragon\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=49417&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, DT maintainers or others\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": "@Methuselah96: Everything looks good here. I am ready to merge this PR (at 2b9d098) 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(@gustavderdrache, @borisyankov, @tomwanzek, @denisname, @ledragon: you can do this too.)" + }, + { + "tag": "stale-ping-98aca3-525f75c", + "status": "@tuuling Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/49548/_downloads.json b/packages/mergebot/src/_tests/fixtures/49548/_downloads.json new file mode 100644 index 0000000000..480f3c7ee2 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49548/_downloads.json @@ -0,0 +1,3 @@ +{ + "gulp-sourcemaps": 125190 +} diff --git a/packages/mergebot/src/_tests/fixtures/49548/_files.json b/packages/mergebot/src/_tests/fixtures/49548/_files.json new file mode 100644 index 0000000000..af10a3017f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49548/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/gulp-sourcemaps/index.d.ts": "// Type definitions for gulp-sourcemaps\n// Project: https://github.com/floridoo/gulp-sourcemaps\n// Definitions by: Asana \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n/// \n\n\ninterface InitOptions {\n loadMaps?: boolean;\n debug?: boolean;\n}\n\ninterface WriteMapper {\n (file: string): string;\n}\n\ninterface CloneOptions {\n contents?: boolean;\n deep?: boolean;\n}\n\ninterface WriteOptions {\n addComment?: boolean;\n includeContent?: boolean;\n sourceRoot?: string | WriteMapper;\n sourceMappingURLPrefix?: string | WriteMapper;\n clone?: boolean | CloneOptions;\n}\n\nexport declare function init(opts?: InitOptions): NodeJS.ReadWriteStream;\nexport declare function write(path?: string, opts?: WriteOptions): NodeJS.ReadWriteStream;\nexport declare function write(opts?: WriteOptions): NodeJS.ReadWriteStream;\n", + "9301e16b32453cda501e3c8b9886661da391d232:types/gulp-sourcemaps/index.d.ts": "// Type definitions for gulp-sourcemaps\n// Project: https://github.com/gulp-sourcemaps/gulp-sourcemaps\n// Definitions by: Phips Peter \n// Concision \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n/// \n\nimport File = require(\"vinyl\");\n\ninterface InitOptions {\n loadMaps?: boolean;\n debug?: boolean;\n}\n\ninterface WriteMapper {\n (file: string): string;\n}\n\ninterface SourceUrlMapper {\n (file: File): string;\n}\n\ninterface MapFilenameMapper {\n (mapFilePath: string): string;\n}\n\ninterface CloneOptions {\n contents?: boolean;\n deep?: boolean;\n}\n\ninterface WriteOptions {\n addComment?: boolean;\n includeContent?: boolean;\n sourceRoot?: string | WriteMapper;\n sourceMappingURLPrefix?: string | WriteMapper;\n sourceMappingURL?: SourceUrlMapper;\n destPath?: string;\n mapFile?: MapFilenameMapper;\n charset?: BufferEncoding;\n clone?: boolean | CloneOptions;\n}\n\nexport declare function init(opts?: InitOptions): NodeJS.ReadWriteStream;\nexport declare function write(path?: string, opts?: WriteOptions): NodeJS.ReadWriteStream;\nexport declare function write(opts?: WriteOptions): NodeJS.ReadWriteStream;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/49548/_response.json b/packages/mergebot/src/_tests/fixtures/49548/_response.json new file mode 100644 index 0000000000..e5ea5331e6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49548/_response.json @@ -0,0 +1,377 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NTIwODA1MjIx", + "title": "feat(@types/gulp-sourcemaps): updated modules typings", + "createdAt": "2020-11-13T19:27:48Z", + "author": { + "login": "concision", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Edits Owners", + "__typename": "Label" + }, + { + "name": "No Other Owners", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 49548, + "state": "OPEN", + "headRefOid": "9301e16b32453cda501e3c8b9886661da391d232", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-13T19:28:28Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-13T19:28:29Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "createdAt": "2020-11-13T19:31:57Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "concision", + "__typename": "User" + }, + "createdAt": "2020-11-13T19:42:07Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-13T19:47:27Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-11-16T20:00:48Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "pspeter3", + "__typename": "User" + }, + "createdAt": "2020-11-16T20:06:03Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "concision", + "__typename": "User" + }, + "createdAt": "2020-11-16T20:15:33Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/6f21a9e9278ef783fd905de59daaaf345376ea58/checks?check_suite_id=1499567365", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/6f21a9e9278ef783fd905de59daaaf345376ea58/checks?check_suite_id=1499567365", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/6f21a9e9278ef783fd905de59daaaf345376ea58/checks?check_suite_id=1499567671", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/6f21a9e9278ef783fd905de59daaaf345376ea58/checks?check_suite_id=1499567671", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-13T19:13:07Z", + "committedDate": "2020-11-13T19:13:07Z", + "pushedDate": "2020-11-13T19:13:49Z", + "abbreviatedOid": "6f21a9e", + "oid": "6f21a9e9278ef783fd905de59daaaf345376ea58", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9301e16b32453cda501e3c8b9886661da391d232/checks?check_suite_id=1511209594", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9301e16b32453cda501e3c8b9886661da391d232/checks?check_suite_id=1511209594", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9301e16b32453cda501e3c8b9886661da391d232/checks?check_suite_id=1511210323", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9301e16b32453cda501e3c8b9886661da391d232/checks?check_suite_id=1511210323", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-16T20:10:48Z", + "committedDate": "2020-11-16T20:10:48Z", + "pushedDate": "2020-11-16T20:11:05Z", + "abbreviatedOid": "9301e16", + "oid": "9301e16b32453cda501e3c8b9886661da391d232", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 8, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDcyNjk4OTM0NQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@concision 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 which I will keep updated.***\n\n## 1 package in this PR\n\n* `gulp-sourcemaps` [on npm](https://www.npmjs.com/package/gulp-sourcemaps), [on unpkg](https://unpkg.com/browse/gulp-sourcemaps@latest/)\n - 2 added owners: @pspeter3, ✎@concision\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can help you merge this PR once someone else signs off on it.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\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## Inactive\n\nThis PR has been inactive for 14 days.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2020-11-13T19:28:28Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyNjk4OTM1MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @concision — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49548/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2020-11-13T19:28:29Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyNjk5MDg1Mg==", + "author": { + "login": "danger-public", + "__typename": "User" + }, + "body": "\n\n\n\n\nInspecting the JavaScript source for this package found some properties that are not in the .d.ts files.\nThe check for missing properties isn't always right, so take this list as advice, not a requirement.\n## gulp-sourcemaps ([unpkg](https://unpkg.com/browse/gulp-sourcemaps@latest/))\nwas missing the following properties:\n1. mapSources\n1. identityMap\n

\n Generated by :no_entry_sign: dangerJS against 9301e16b32453cda501e3c8b9886661da391d232\n

\n", + "createdAt": "2020-11-13T19:31:57Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyNjk5NTI4MQ==", + "author": { + "login": "concision", + "__typename": "User" + }, + "body": "In response to @danger-public's bot response, `mapSources` and `identityMap` _are_ exported properties that are missing. However, the implementation in `gulp-sourcemaps/gulp-sourcemaps` is as follows:\r\n\r\nhttps://github.com/gulp-sourcemaps/gulp-sourcemaps/blob/d8bed0c282f6975daa48b4ecd2053528a0b7b2e5/index.js#L6-L7\r\n\r\nSince the transitive dependencies `@gulp-sourcemaps/map-sources` and `@gulp-sourcemaps/identity-map` are not existing DefinitelyTyped packages, implementing this change would go beyond the scope of modifying a single module's typings (in this PR: `gulp-sourcemaps`). Several additional PRs would be necessary to add typings for these packages.\r\n", + "createdAt": "2020-11-13T19:42:07Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyNjk5NzUxMA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #49548 | diff |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------ |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 66.4 | 75.4 | +13.7% |\n| Type count | 8743 | 8769 | 0% |\n| Assignability cache size | 880 | 884 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 216 | 300 | +39% |\n| Identifiers in tests | 216 | 300 | +39% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 338.8 | 338.9 | 0.0% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.0% | 9.7% | |\n|     Worst duration (ms) | 424.4 | 427.4 | +0.7% |\n|     Worst identifier | [dest](/DefinitelyTyped/DefinitelyTyped/blob/acd551e6200f3c55dee83990e5a3419a2e0b7e56/types/gulp-sourcemaps/gulp-sourcemaps-tests.ts#L118) | [sourcemaps](/DefinitelyTyped/DefinitelyTyped/blob/2091b6c637cb26a3f852997a379344a92dbcf461/types/gulp-sourcemaps/gulp-sourcemaps-tests.ts#L78) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 339.7 | 336.0 | -1.1% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.1% | 8.9% | -11.9% |\n|     Worst duration (ms) | 451.7 | 438.4 | -2.9% |\n|     Worst identifier | [pipe](/DefinitelyTyped/DefinitelyTyped/blob/acd551e6200f3c55dee83990e5a3419a2e0b7e56/types/gulp-sourcemaps/gulp-sourcemaps-tests.ts#L31) | [gulp](/DefinitelyTyped/DefinitelyTyped/blob/2091b6c637cb26a3f852997a379344a92dbcf461/types/gulp-sourcemaps/gulp-sourcemaps-tests.ts#L77) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2020-11-13T19:47:27Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyODI5MjAwMA==", + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "body": "@pspeter3: looking at the blame for this package, you're the one who added `Asana ` as an owner. These lines are used to ping people for review, so that line is useless ATM. Do you mind being put on the list instead, or someone else from the group?", + "createdAt": "2020-11-16T20:00:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyODI5NDY4Ng==", + "author": { + "login": "pspeter3", + "__typename": "User" + }, + "body": "I'm happy to be put as the reference. That line predates the review ping tool.", + "createdAt": "2020-11-16T20:06:03Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "elibarzilay", + "__typename": "User" + }, + "__typename": "Reaction" + }, + { + "user": { + "login": "concision", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDcyODI5OTQzNg==", + "author": { + "login": "concision", + "__typename": "User" + }, + "body": "@pspeter3 I have added you as a [\"definition owner\"](https://github.com/DefinitelyTyped/DefinitelyTyped#definition-owners) for this package. However, I am not sure what the ramifications are in terms of the approval process on this specific PR (since it also \"adds\" you as an owner).\r\n\r\nThere is another PR on this same package as well that can likely be fast-tracked if the new definition owners are successfully merged: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49243", + "createdAt": "2020-11-16T20:15:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/gulp-sourcemaps/gulp-sourcemaps-tests.ts", + "additions": 51, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/gulp-sourcemaps/index.d.ts", + "additions": 16, + "deletions": 2, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 2 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDkzMjE3NzM=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/49548/derived.json b/packages/mergebot/src/_tests/fixtures/49548/derived.json new file mode 100644 index 0000000000..bd9e9c4e99 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49548/derived.json @@ -0,0 +1,40 @@ +{ + "type": "info", + "now": "2020-12-01T20:08:04.932Z", + "pr_number": 49548, + "author": "concision", + "headCommitOid": "9301e16b32453cda501e3c8b9886661da391d232", + "mergeBaseOid": "master", + "lastPushDate": "2020-11-16T20:11:05.000Z", + "lastActivityDate": "2020-11-16T20:15:33.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "gulp-sourcemaps", + "kind": "edit", + "files": [ + { + "path": "types/gulp-sourcemaps/gulp-sourcemaps-tests.ts", + "kind": "test" + }, + { + "path": "types/gulp-sourcemaps/index.d.ts", + "kind": "definition" + } + ], + "owners": [], + "addedOwners": [ + "pspeter3", + "concision" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/49548/mutations.json b/packages/mergebot/src/_tests/fixtures/49548/mutations.json new file mode 100644 index 0000000000..5b6af55eac --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49548/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDcyNjk4OTM0NQ==", + "body": "@concision 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* `gulp-sourcemaps` — [on npm](https://www.npmjs.com/package/gulp-sourcemaps), [on unpkg](https://unpkg.com/browse/gulp-sourcemaps@latest/)\n - 2 added owners: @pspeter3, ✎@concision\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=49548&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, 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## Inactive\n\nThis PR has been inactive for 14 days — please try to get reviewers!\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyNDYyODA0MzE1" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTIwODA1MjIx" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTIwODA1MjIx", + "body": "Re-ping @«anyone?»:\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/49548/result.json b/packages/mergebot/src/_tests/fixtures/49548/result.json new file mode 100644 index 0000000000..e42861635c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49548/result.json @@ -0,0 +1,25 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Edits Owners", + "No Other Owners", + "Unreviewed" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@concision 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* `gulp-sourcemaps` — [on npm](https://www.npmjs.com/package/gulp-sourcemaps), [on unpkg](https://unpkg.com/browse/gulp-sourcemaps@latest/)\n - 2 added owners: @pspeter3, ✎@concision\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=49548&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, 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## Inactive\n\nThis PR has been inactive for 14 days — please try to get reviewers!\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "pinging-reviewers-others", + "status": "🔔 @concision — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49548/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + }, + { + "tag": "Unreviewed:nearly:2020-11-16", + "status": "Re-ping @«anyone?»:\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!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/49575/_downloads.json b/packages/mergebot/src/_tests/fixtures/49575/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49575/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/49575/_files.json b/packages/mergebot/src/_tests/fixtures/49575/_files.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49575/_files.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/49575/_response.json b/packages/mergebot/src/_tests/fixtures/49575/_response.json new file mode 100644 index 0000000000..c770a72968 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49575/_response.json @@ -0,0 +1,751 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NTIxMTM3NjEy", + "title": "Move tslint.json advice from PULL_REQUEST_TEMPLATE.md", + "createdAt": "2020-11-15T03:25:30Z", + "author": { + "login": "jablko", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Edits Infrastructure", + "__typename": "Label" + }, + { + "name": "Maintainer Approved", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 49575, + "state": "OPEN", + "headRefOid": "cdd66f483bb0103f6e6d1eb7b07192ff95718f25", + "changedFiles": 7, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "sheetalkamat", + "__typename": "User" + }, + "createdAt": "2020-11-23T20:49:44Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "rbuckton", + "__typename": "User" + }, + "createdAt": "2020-12-11T00:00:50Z" + }, + { + "__typename": "IssueComment", + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-12-11T16:34:06Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "commit": { + "oid": "6400f4c47e063373c0d9e3d5978b4b24ec14048c", + "abbreviatedOid": "6400f4c", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-11-15T06:56:24Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-11-15T06:59:02Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-11-15T07:00:31Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-11-15T07:00:39Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-530771686", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "sandersn", + "__typename": "User" + }, + "commit": { + "oid": "6400f4c47e063373c0d9e3d5978b4b24ec14048c", + "abbreviatedOid": "6400f4c", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-11-16T16:27:02Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-531487745", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "commit": { + "oid": "f55f95bcf01674dc20e2f3cf0f9dbce4710f582d", + "abbreviatedOid": "f55f95b", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "createdAt": "2020-11-16T17:12:36Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-16T17:12:36Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-531532162", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "commit": { + "oid": "f55f95bcf01674dc20e2f3cf0f9dbce4710f582d", + "abbreviatedOid": "f55f95b", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "createdAt": "2020-11-16T17:13:59Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-16T17:13:59Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-531533372", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "commit": { + "oid": "f55f95bcf01674dc20e2f3cf0f9dbce4710f582d", + "abbreviatedOid": "f55f95b", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "createdAt": "2020-11-16T17:14:09Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-16T17:14:09Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-531533505", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "commit": { + "oid": "84495e87102cbe52430828596821ec7647742f65", + "abbreviatedOid": "84495e8", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-11-17T08:56:50Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-11-17T09:01:35Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-11-17T09:03:29Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-11-17T09:06:12Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-11-17T09:13:27Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2020-11-17T09:17:36Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2020-11-17T09:18:17Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-532144684", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "commit": { + "oid": "cd5cc0c6e9f922a5686adfdd2b1dfa4fa0c4ce92", + "abbreviatedOid": "cd5cc0c", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "createdAt": "2020-11-17T20:44:58Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-17T20:44:58Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-532797068", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "commit": { + "oid": "cd5cc0c6e9f922a5686adfdd2b1dfa4fa0c4ce92", + "abbreviatedOid": "cd5cc0c", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "createdAt": "2020-11-17T20:45:18Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-17T20:45:18Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-532797285", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "commit": { + "oid": "cd5cc0c6e9f922a5686adfdd2b1dfa4fa0c4ce92", + "abbreviatedOid": "cd5cc0c", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "createdAt": "2020-11-17T20:45:35Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-17T20:45:35Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-532797467", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "commit": { + "oid": "cd5cc0c6e9f922a5686adfdd2b1dfa4fa0c4ce92", + "abbreviatedOid": "cd5cc0c", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "createdAt": "2020-11-17T20:46:27Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-17T20:46:27Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-532798093", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "amcasey", + "__typename": "User" + }, + "commit": { + "oid": "08733870ea4eb468ed857e8946383f2cc14f881d", + "abbreviatedOid": "0873387", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "amcasey", + "__typename": "User" + }, + "createdAt": "2020-11-30T18:46:26Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "amcasey", + "__typename": "User" + }, + "createdAt": "2020-11-30T18:47:08Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-30T18:49:05Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-541193432", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "commit": { + "oid": "90ff51a18d0788afe4a5264435a52da028dd5252", + "abbreviatedOid": "90ff51a", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jablko", + "__typename": "User" + }, + "createdAt": "2020-11-30T22:11:21Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "COMMENTED", + "submittedAt": "2020-11-30T22:11:22Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-541336430", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "amcasey", + "__typename": "User" + }, + "commit": { + "oid": "90ff51a18d0788afe4a5264435a52da028dd5252", + "abbreviatedOid": "90ff51a", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-12-01T00:15:16Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-541395420", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "commit": { + "oid": "90ff51a18d0788afe4a5264435a52da028dd5252", + "abbreviatedOid": "90ff51a", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-12-03T12:09:12Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-543889072", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "amcasey", + "__typename": "User" + }, + "commit": { + "oid": "cdd66f483bb0103f6e6d1eb7b07192ff95718f25", + "abbreviatedOid": "cdd66f4", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2020-12-08T17:01:18Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575#pullrequestreview-547437938", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 4, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-14T22:55:19Z", + "committedDate": "2020-12-03T17:48:26Z", + "pushedDate": null, + "abbreviatedOid": "5c2ccb5", + "oid": "5c2ccb517816caf8389bedf4c121eb6397a7f45f", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-16T16:32:00Z", + "committedDate": "2020-12-03T17:59:48Z", + "pushedDate": null, + "abbreviatedOid": "31f180a", + "oid": "31f180ab9d1bb3968e51ba3cbe361b4124173eb3", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-17T15:38:29Z", + "committedDate": "2020-12-03T18:30:33Z", + "pushedDate": null, + "abbreviatedOid": "9f77330", + "oid": "9f773300c4ec49329a8c4ae9bd8b0487a946de30", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/cdd66f483bb0103f6e6d1eb7b07192ff95718f25/checks?check_suite_id=1604607531", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/cdd66f483bb0103f6e6d1eb7b07192ff95718f25/checks?check_suite_id=1604607531", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/cdd66f483bb0103f6e6d1eb7b07192ff95718f25/checks?check_suite_id=1604608237", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/cdd66f483bb0103f6e6d1eb7b07192ff95718f25/checks?check_suite_id=1604608237", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-30T22:05:19Z", + "committedDate": "2020-12-03T18:30:37Z", + "pushedDate": "2020-12-03T18:35:07Z", + "abbreviatedOid": "cdd66f4", + "oid": "cdd66f483bb0103f6e6d1eb7b07192ff95718f25", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDczMjQxODI2Mw==", + "author": { + "login": "sheetalkamat", + "__typename": "User" + }, + "body": "@elibarzilay do you want to take a look again before i merge this.", + "createdAt": "2020-11-23T20:49:44Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDc0Mjg3Njg3Mw==", + "author": { + "login": "rbuckton", + "__typename": "User" + }, + "body": "The bot didn't comment about being able to self merge. Will that still work or do we have to merge this manually?", + "createdAt": "2020-12-11T00:00:50Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDc0MzI5NTk0MA==", + "author": { + "login": "elibarzilay", + "__typename": "User" + }, + "body": "@rbuckton, yeah needs to be merged manually like all PRs in NMA... (And a just-merged PR from @jablko removes the label in this case, with another one that hopefully I'll get to soon-ish enabling more self-merges.)\r\n", + "createdAt": "2020-12-11T16:34:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 7, + "nodes": [ + { + "path": ".github/PULL_REQUEST_TEMPLATE.md", + "additions": 1, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "README.cn.md", + "additions": 29, + "deletions": 45, + "__typename": "PullRequestChangedFile" + }, + { + "path": "README.es.md", + "additions": 26, + "deletions": 39, + "__typename": "PullRequestChangedFile" + }, + { + "path": "README.ko.md", + "additions": 26, + "deletions": 39, + "__typename": "PullRequestChangedFile" + }, + { + "path": "README.md", + "additions": 30, + "deletions": 48, + "__typename": "PullRequestChangedFile" + }, + { + "path": "README.pt.md", + "additions": 30, + "deletions": 49, + "__typename": "PullRequestChangedFile" + }, + { + "path": "README.ru.md", + "additions": 26, + "deletions": 44, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNDkzNjY1NzY=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2", + "name": "Needs Maintainer Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/49575/derived.json b/packages/mergebot/src/_tests/fixtures/49575/derived.json new file mode 100644 index 0000000000..9cac774180 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49575/derived.json @@ -0,0 +1,77 @@ +{ + "type": "info", + "now": "2020-12-11T17:35:36.572Z", + "pr_number": 49575, + "author": "jablko", + "headCommitOid": "cdd66f483bb0103f6e6d1eb7b07192ff95718f25", + "mergeBaseOid": "master", + "lastPushDate": "2020-12-03T18:35:07.000Z", + "lastActivityDate": "2020-12-11T16:34:06.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": null, + "kind": "edit", + "files": [ + { + "path": ".github/PULL_REQUEST_TEMPLATE.md", + "kind": "infrastructure" + }, + { + "path": "README.cn.md", + "kind": "infrastructure" + }, + { + "path": "README.es.md", + "kind": "infrastructure" + }, + { + "path": "README.ko.md", + "kind": "infrastructure" + }, + { + "path": "README.md", + "kind": "infrastructure" + }, + { + "path": "README.pt.md", + "kind": "infrastructure" + }, + { + "path": "README.ru.md", + "kind": "infrastructure" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical", + "isSafeInfrastructureEdit": false + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "amcasey", + "date": "2020-12-08T17:01:18.000Z", + "isMaintainer": false + }, + { + "type": "stale", + "reviewer": "elibarzilay", + "date": "2020-12-03T12:09:12.000Z", + "abbrOid": "90ff51a" + }, + { + "type": "stale", + "reviewer": "sandersn", + "date": "2020-11-16T16:27:02.000Z", + "abbrOid": "6400f4c" + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/49575/mutations.json b/packages/mergebot/src/_tests/fixtures/49575/mutations.json new file mode 100644 index 0000000000..3d0669ad3b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49575/mutations.json @@ -0,0 +1,51 @@ +[ + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTIxMTM3NjEy", + "body": "@jablko Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 0 packages in this PR (and infra files)\n\n* Infra files\n - [`.github/PULL_REQUEST_TEMPLATE.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-18813c86948efc57e661623d7ba48ff94325c9b5421ec9177f724922dd553a35)\n - [`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235)\n - [`README.es.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-42010a55cd1784b825a37c762cc91d75421f3ed4515f1047cf5506444949a0c2)\n - [`README.ko.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-86fa6921bcebf260d55d8a3742c1b513bd78f4ea18366db989b5a03c68c563ae)\n - [`README.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5)\n - [`README.pt.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-822bdbb1cbe31bcc1afd1ddbbd7b3191052e07c9996334e645a22694e3cc2119)\n - [`README.ru.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-fb460bf71153d8224708cfa7298df0409d20c207f5b252b74906895bd8e1ac42)\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=49575&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 DT infrastructure ([`.github/PULL_REQUEST_TEMPLATE.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-18813c86948efc57e661623d7ba48ff94325c9b5421ec9177f724922dd553a35), [`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235), [`README.es.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-42010a55cd1784b825a37c762cc91d75421f3ed4515f1047cf5506444949a0c2), [`README.ko.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-86fa6921bcebf260d55d8a3742c1b513bd78f4ea18366db989b5a03c68c563ae), [`README.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5), [`README.pt.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-822bdbb1cbe31bcc1afd1ddbbd7b3191052e07c9996334e645a22694e3cc2119), [`README.ru.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-fb460bf71153d8224708cfa7298df0409d20c207f5b252b74906895bd8e1ac42))\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 7 days.\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw1ODYxNzcwNjM=" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTIxMTM3NjEy" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwxNjA4NTUyNDEw" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTIxMTM3NjEy" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTIxMTM3NjEy", + "body": "🔔 @jablko — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTIxMTM3NjEy", + "body": "@elibarzilay, @sandersn Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/49575/result.json b/packages/mergebot/src/_tests/fixtures/49575/result.json new file mode 100644 index 0000000000..8007550287 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49575/result.json @@ -0,0 +1,24 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "Other Approved", + "Edits Infrastructure" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@jablko Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 0 packages in this PR (and infra files)\n\n* Infra files\n - [`.github/PULL_REQUEST_TEMPLATE.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-18813c86948efc57e661623d7ba48ff94325c9b5421ec9177f724922dd553a35)\n - [`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235)\n - [`README.es.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-42010a55cd1784b825a37c762cc91d75421f3ed4515f1047cf5506444949a0c2)\n - [`README.ko.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-86fa6921bcebf260d55d8a3742c1b513bd78f4ea18366db989b5a03c68c563ae)\n - [`README.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5)\n - [`README.pt.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-822bdbb1cbe31bcc1afd1ddbbd7b3191052e07c9996334e645a22694e3cc2119)\n - [`README.ru.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-fb460bf71153d8224708cfa7298df0409d20c207f5b252b74906895bd8e1ac42)\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=49575&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 DT infrastructure ([`.github/PULL_REQUEST_TEMPLATE.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-18813c86948efc57e661623d7ba48ff94325c9b5421ec9177f724922dd553a35), [`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235), [`README.es.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-42010a55cd1784b825a37c762cc91d75421f3ed4515f1047cf5506444949a0c2), [`README.ko.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-86fa6921bcebf260d55d8a3742c1b513bd78f4ea18366db989b5a03c68c563ae), [`README.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5), [`README.pt.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-822bdbb1cbe31bcc1afd1ddbbd7b3191052e07c9996334e645a22694e3cc2119), [`README.ru.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files/cdd66f483bb0103f6e6d1eb7b07192ff95718f25#diff-fb460bf71153d8224708cfa7298df0409d20c207f5b252b74906895bd8e1ac42))\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 7 days.\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "pinging-reviewers-others", + "status": "🔔 @jablko — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49575/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + }, + { + "tag": "stale-ping-d2e897-6400f4c", + "status": "@elibarzilay, @sandersn Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/49841/_downloads.json b/packages/mergebot/src/_tests/fixtures/49841/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49841/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/49841/_files.json b/packages/mergebot/src/_tests/fixtures/49841/_files.json new file mode 100644 index 0000000000..7700231f98 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49841/_files.json @@ -0,0 +1,5 @@ +{ + "4849e8876b0ab7adc889ccc35b55fde6f0274837:types/react-native-sha1/tsconfig.json": "{\r\n \"compilerOptions\": {\r\n \"module\": \"commonjs\",\r\n \"lib\": [\r\n \"es6\"\r\n ],\r\n \"noImplicitAny\": true,\r\n \"noImplicitThis\": true,\r\n \"strictNullChecks\": true,\r\n \"strictFunctionTypes\": true,\r\n \"baseUrl\": \"../\",\r\n \"typeRoots\": [\r\n \"../\"\r\n ],\r\n \"types\": [],\r\n \"noEmit\": true,\r\n \"target\": \"es6\",\r\n \"forceConsistentCasingInFileNames\": true\r\n },\r\n \"files\": [\r\n \"index.d.ts\",\r\n \"react-native-sha1-test.ts\"\r\n ]\r\n}", + "4849e8876b0ab7adc889ccc35b55fde6f0274837:types/react-native-sha1/tslint.json": "{ \"extends\": \"@definitelytyped/dtslint/dt.json\" }", + "4849e8876b0ab7adc889ccc35b55fde6f0274837:types/react-native-sha1/index.d.ts": "// Definitions by: Amir Hossein Shekari \r\n\r\n\r\n\r\nexport function sha1(input: string): Promise;" +} diff --git a/packages/mergebot/src/_tests/fixtures/49841/_response.json b/packages/mergebot/src/_tests/fixtures/49841/_response.json new file mode 100644 index 0000000000..da3c23b031 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49841/_response.json @@ -0,0 +1,173 @@ +{ + "data": { + "repository": { + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NTI4OTE2Mjg5", + "title": "Add react-native-sha1 typescript type", + "createdAt": "2020-11-28T09:17:28Z", + "author": { + "login": "shekari-ah", + "__typename": "User" + }, + "authorAssociation": "NONE", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Mergebot Error", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 49841, + "state": "OPEN", + "headRefOid": "4849e8876b0ab7adc889ccc35b55fde6f0274837", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "__typename": "IssueComment", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2020-11-28T09:18:08Z" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4849e8876b0ab7adc889ccc35b55fde6f0274837/checks?check_suite_id=1574877739", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4849e8876b0ab7adc889ccc35b55fde6f0274837/checks?check_suite_id=1574877739", + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4849e8876b0ab7adc889ccc35b55fde6f0274837/checks?check_suite_id=1574878204", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4849e8876b0ab7adc889ccc35b55fde6f0274837/checks?check_suite_id=1574878204", + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2020-11-28T09:12:27Z", + "committedDate": "2020-11-28T09:12:27Z", + "pushedDate": "2020-11-28T09:12:34Z", + "abbreviatedOid": "4849e88", + "oid": "4849e8876b0ab7adc889ccc35b55fde6f0274837", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 1, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDczNTE3ODAxNw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@shekari-ah — There was an error that prevented me from properly processing this PR:\n\n error parsing owners: At 1:1 : Expected /\\/\\/ Type definitions for (non-npm package )?/\n", + "createdAt": "2020-11-28T09:18:08Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "nodes": [ + { + "path": "types/react-native-sha1/index.d.ts", + "additions": 5, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react-native-sha1/react-native-sha1-test.ts", + "additions": 5, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react-native-sha1/tsconfig.json", + "additions": 24, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react-native-sha1/tslint.json", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4 + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNTAyMTU4MjU=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI2", + "name": "Other", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7, + "stale": false +} diff --git a/packages/mergebot/src/_tests/fixtures/49841/derived.json b/packages/mergebot/src/_tests/fixtures/49841/derived.json new file mode 100644 index 0000000000..ca6813859b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49841/derived.json @@ -0,0 +1,47 @@ +{ + "type": "info", + "now": "2020-11-30T23:30:29.827Z", + "pr_number": 49841, + "author": "shekari-ah", + "headCommitOid": "4849e8876b0ab7adc889ccc35b55fde6f0274837", + "mergeBaseOid": "master", + "lastPushDate": "2020-11-28T09:12:34.000Z", + "lastActivityDate": "2020-11-28T09:17:28.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "react-native-sha1", + "kind": "add", + "files": [ + { + "path": "types/react-native-sha1/index.d.ts", + "kind": "definition" + }, + { + "path": "types/react-native-sha1/react-native-sha1-test.ts", + "kind": "test" + }, + { + "path": "types/react-native-sha1/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/react-native-sha1/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "fail", + "ciUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4849e8876b0ab7adc889ccc35b55fde6f0274837/checks?check_suite_id=1574877739" +} diff --git a/packages/mergebot/src/_tests/fixtures/49841/mutations.json b/packages/mergebot/src/_tests/fixtures/49841/mutations.json new file mode 100644 index 0000000000..6787228f09 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49841/mutations.json @@ -0,0 +1,62 @@ +[ + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTI4OTE2Mjg5", + "body": "@shekari-ah Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `react-native-sha1` (*new!*) — [on npm](https://www.npmjs.com/package/react-native-sha1), [on unpkg](https://unpkg.com/browse/react-native-sha1@latest/)\n - Config files to check:\n - [`react-native-sha1/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49841/files/4849e8876b0ab7adc889ccc35b55fde6f0274837#diff-c49c80ca1af4d5a39aa39502c0fa3893350f5b5bc80a47ca7e4126b4131272ba): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=49841&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMDk2NzQzNjAw", + "MDU6TGFiZWw2NDY3ODg4ODg=", + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTI4OTE2Mjg5" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTk3MzU2OTA1" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTI4OTE2Mjg5" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNTAyMTU4MjU=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTI4OTE2Mjg5", + "body": "🔔 @shekari-ah — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49841/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTI4OTE2Mjg5", + "body": "@shekari-ah The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4849e8876b0ab7adc889ccc35b55fde6f0274837/checks?check_suite_id=1574877739).\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/49841/result.json b/packages/mergebot/src/_tests/fixtures/49841/result.json new file mode 100644 index 0000000000..816d375452 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/49841/result.json @@ -0,0 +1,25 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "The CI failed", + "New Definition", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@shekari-ah Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `react-native-sha1` (*new!*) — [on npm](https://www.npmjs.com/package/react-native-sha1), [on unpkg](https://unpkg.com/browse/react-native-sha1@latest/)\n - Config files to check:\n - [`react-native-sha1/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49841/files/4849e8876b0ab7adc889ccc35b55fde6f0274837#diff-c49c80ca1af4d5a39aa39502c0fa3893350f5b5bc80a47ca7e4126b4131272ba): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=49841&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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", + "status": "🔔 @shekari-ah — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/49841/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + }, + { + "tag": "gh-actions-complaint-4849e88", + "status": "@shekari-ah The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4849e8876b0ab7adc889ccc35b55fde6f0274837/checks?check_suite_id=1574877739).\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.**" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/50429/_downloads.json b/packages/mergebot/src/_tests/fixtures/50429/_downloads.json new file mode 100644 index 0000000000..6a3cd26a18 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/50429/_downloads.json @@ -0,0 +1,3 @@ +{ + "omise-js": 0 +} diff --git a/packages/mergebot/src/_tests/fixtures/50429/_files.json b/packages/mergebot/src/_tests/fixtures/50429/_files.json new file mode 100644 index 0000000000..5bacbd69f9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/50429/_files.json @@ -0,0 +1,5 @@ +{ + "8454d0853c273f9a20b08bd68cfd5c6b4f70c018:types/omise-js/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictFunctionTypes\": true,\n \"strictNullChecks\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\"\n ]\n}\n", + "8454d0853c273f9a20b08bd68cfd5c6b4f70c018:types/omise-js/tslint.json": "{ \n \"extends\": \"dtslint/dtslint.json\",\n \"rules\": {\n \"no-redundant-jsdoc\": false,\n \"strict-export-declare-modifiers\": false,\n \"max-line-length\": false\n }\n}\n", + "8454d0853c273f9a20b08bd68cfd5c6b4f70c018:types/omise-js/index.d.ts": "/**\n * Third-party Omise.js TypeScript's typings support.\n */\nimport Omise from './lib/omise';\nimport OmiseCard from './lib/omiseCard';\ndeclare global {\n interface Window {\n /**\n * You can use the following methods on `OmiseCard` to customize the appearance and behavior of your form.\n *\n * @see https://www.omise.co/omise-js#omisecard-methods\n */\n Omise: Omise;\n /**\n * You can use the following methods on `Omise` to create a one-time-use token or source.\n *\n * @see https://www.omise.co/omise-js#omise-methods\n */\n OmiseCard: OmiseCard;\n }\n}\nexport { Omise, OmiseCard };\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/50429/_response.json b/packages/mergebot/src/_tests/fixtures/50429/_response.json new file mode 100644 index 0000000000..cf4fefea47 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/50429/_response.json @@ -0,0 +1,276 @@ +{ + "data": { + "repository": { + "__typename": "Repository", + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "__typename": "PullRequest", + "id": "MDExOlB1bGxSZXF1ZXN0NTUwNDE0ODEz", + "title": "omise-js: Initial Types Support", + "createdAt": "2021-01-06T12:58:18Z", + "author": { + "__typename": "User", + "login": "SaltyAom" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "__typename": "Ref", + "name": "master" + }, + "labels": { + "__typename": "LabelConnection", + "nodes": [ + { + "__typename": "Label", + "name": "Check Config" + }, + { + "__typename": "Label", + "name": "New Definition" + } + ] + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 50429, + "state": "OPEN", + "headRefOid": "8454d0853c273f9a20b08bd68cfd5c6b4f70c018", + "changedFiles": 7, + "commitIds": {}, + "timelineItems": { + "__typename": "PullRequestTimelineItemsConnection", + "nodes": [ + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "__typename": "User", + "login": "typescript-bot" + }, + "createdAt": "2021-01-06T13:00:38Z", + "projectColumnName": "Waiting for Code Reviews" + } + ] + }, + "reviews": { + "__typename": "PullRequestReviewConnection", + "nodes": [] + }, + "commits": { + "__typename": "PullRequestCommitConnection", + "totalCount": 2, + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "__typename": "Commit", + "checkSuites": { + "__typename": "CheckSuiteConnection", + "nodes": [] + }, + "status": null, + "authoredDate": "2021-01-06T12:40:49Z", + "committedDate": "2021-01-06T12:40:49Z", + "pushedDate": "2021-01-06T12:41:06Z", + "oid": "73ccf075a42e7017c403b6dab552d2aff3c4bc56" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "__typename": "Commit", + "checkSuites": { + "__typename": "CheckSuiteConnection", + "nodes": [ + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "GitHub Actions" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/8454d0853c273f9a20b08bd68cfd5c6b4f70c018/checks?check_suite_id=1778052320", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/8454d0853c273f9a20b08bd68cfd5c6b4f70c018/checks?check_suite_id=1778052320", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "build" + } + ] + } + }, + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "GitHub Actions" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/8454d0853c273f9a20b08bd68cfd5c6b4f70c018/checks?check_suite_id=1778052567", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/8454d0853c273f9a20b08bd68cfd5c6b4f70c018/checks?check_suite_id=1778052567", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "test" + } + ] + } + }, + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "Azure Pipelines" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/8454d0853c273f9a20b08bd68cfd5c6b4f70c018/checks?check_suite_id=1778053747", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/8454d0853c273f9a20b08bd68cfd5c6b4f70c018/checks?check_suite_id=1778053747", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "Build #81621 failed" + } + ] + } + } + ] + }, + "status": null, + "authoredDate": "2021-01-06T12:57:32Z", + "committedDate": "2021-01-06T12:57:32Z", + "pushedDate": "2021-01-06T12:58:19Z", + "oid": "8454d0853c273f9a20b08bd68cfd5c6b4f70c018" + } + } + ] + }, + "comments": { + "__typename": "IssueCommentConnection", + "totalCount": 3, + "nodes": [ + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NTI4NDk3Mw==", + "author": { + "__typename": "User", + "login": "typescript-bot" + }, + "body": "@SaltyAom 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 which I will keep updated.***\n\n## 1 package in this PR\n\n* `omise-js` (*new!*) [on npm](https://www.npmjs.com/package/omise-js), [on unpkg](https://unpkg.com/browse/omise-js@latest/)\n - Config files to check:\n - [`omise-js/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50429/files/8454d0853c273f9a20b08bd68cfd5c6b4f70c018#diff-651e0e95c5e0be3d22dccf8cb88166e0cfe629300ebbfc9882793cd008c0d109): not [the expected form](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-linter-tslintjson)\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ Only a DT maintainer can approve changes when there are new packages added\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": "2021-01-06T12:58:54Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + }, + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NTI4NDk4Mg==", + "author": { + "__typename": "User", + "login": "typescript-bot" + }, + "body": "🔔 @SaltyAom — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50429/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2021-01-06T12:58:55Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + }, + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NTczOTU1OQ==", + "author": { + "__typename": "User", + "login": "andrewbranch" + }, + "body": "@typescript-bot try again", + "createdAt": "2021-01-06T22:00:43Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + } + ] + }, + "files": { + "__typename": "PullRequestChangedFileConnection", + "totalCount": 7, + "nodes": [ + { + "__typename": "PullRequestChangedFile", + "path": "types/omise-js/index.d.ts", + "additions": 22, + "deletions": 0 + }, + { + "__typename": "PullRequestChangedFile", + "path": "types/omise-js/lib/omise.d.ts", + "additions": 116, + "deletions": 0 + }, + { + "__typename": "PullRequestChangedFile", + "path": "types/omise-js/lib/omiseCard.d.ts", + "additions": 74, + "deletions": 0 + }, + { + "__typename": "PullRequestChangedFile", + "path": "types/omise-js/lib/utils.d.ts", + "additions": 12, + "deletions": 0 + }, + { + "__typename": "PullRequestChangedFile", + "path": "types/omise-js/omise-js-tests.ts", + "additions": 1, + "deletions": 0 + }, + { + "__typename": "PullRequestChangedFile", + "path": "types/omise-js/tsconfig.json", + "additions": 22, + "deletions": 0 + }, + { + "__typename": "PullRequestChangedFile", + "path": "types/omise-js/tslint.json", + "additions": 8, + "deletions": 0 + } + ] + }, + "projectCards": { + "__typename": "ProjectCardConnection", + "nodes": [ + { + "__typename": "ProjectCard", + "id": "MDExOlByb2plY3RDYXJkNTIyOTYzODM=", + "project": { + "__typename": "Project", + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board" + }, + "column": { + "__typename": "ProjectColumn", + "id": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2", + "name": "Needs Maintainer Action" + } + } + ] + } + } + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/50429/derived.json b/packages/mergebot/src/_tests/fixtures/50429/derived.json new file mode 100644 index 0000000000..cee6ba98ef --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/50429/derived.json @@ -0,0 +1,59 @@ +{ + "type": "info", + "now": "2021-01-06T22:31:53.940Z", + "pr_number": 50429, + "author": "SaltyAom", + "headCommitOid": "8454d0853c273f9a20b08bd68cfd5c6b4f70c018", + "mergeBaseOid": "master", + "lastPushDate": "2021-01-06T12:58:19.000Z", + "lastActivityDate": "2021-01-06T22:00:43.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "omise-js", + "kind": "add", + "files": [ + { + "path": "types/omise-js/index.d.ts", + "kind": "definition" + }, + { + "path": "types/omise-js/lib/omise.d.ts", + "kind": "definition" + }, + { + "path": "types/omise-js/lib/omiseCard.d.ts", + "kind": "definition" + }, + { + "path": "types/omise-js/lib/utils.d.ts", + "kind": "definition" + }, + { + "path": "types/omise-js/omise-js-tests.ts", + "kind": "test" + }, + { + "path": "types/omise-js/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/omise-js/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "fail", + "ciUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/8454d0853c273f9a20b08bd68cfd5c6b4f70c018/checks?check_suite_id=1778052567" +} diff --git a/packages/mergebot/src/_tests/fixtures/50429/mutations.json b/packages/mergebot/src/_tests/fixtures/50429/mutations.json new file mode 100644 index 0000000000..174cc49758 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/50429/mutations.json @@ -0,0 +1,49 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDc1NTI4NDk3Mw==", + "body": "@SaltyAom 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* `omise-js` (*new!*) — [on npm](https://www.npmjs.com/package/omise-js), [on unpkg](https://unpkg.com/browse/omise-js@latest/)\n - Config files to check:\n - [`omise-js/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50429/files/8454d0853c273f9a20b08bd68cfd5c6b4f70c018#diff-651e0e95c5e0be3d22dccf8cb88166e0cfe629300ebbfc9882793cd008c0d109): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=50429&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMDk2NzQzNjAw" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTUwNDE0ODEz" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNTIyOTYzODM=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDc1NTI4NDk4Mg==", + "body": "🔔 @SaltyAom — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50429/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTUwNDE0ODEz", + "body": "@SaltyAom The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/8454d0853c273f9a20b08bd68cfd5c6b4f70c018/checks?check_suite_id=1778052567).\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/50429/result.json b/packages/mergebot/src/_tests/fixtures/50429/result.json new file mode 100644 index 0000000000..c0df245638 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/50429/result.json @@ -0,0 +1,25 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "The CI failed", + "New Definition", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@SaltyAom 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* `omise-js` (*new!*) — [on npm](https://www.npmjs.com/package/omise-js), [on unpkg](https://unpkg.com/browse/omise-js@latest/)\n - Config files to check:\n - [`omise-js/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50429/files/8454d0853c273f9a20b08bd68cfd5c6b4f70c018#diff-651e0e95c5e0be3d22dccf8cb88166e0cfe629300ebbfc9882793cd008c0d109): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=50429&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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", + "status": "🔔 @SaltyAom — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50429/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + }, + { + "tag": "gh-actions-complaint-8454d08", + "status": "@SaltyAom The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/8454d0853c273f9a20b08bd68cfd5c6b4f70c018/checks?check_suite_id=1778052567).\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.**" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/50443/_downloads.json b/packages/mergebot/src/_tests/fixtures/50443/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/50443/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/50443/_files.json b/packages/mergebot/src/_tests/fixtures/50443/_files.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/50443/_files.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/50443/_response.json b/packages/mergebot/src/_tests/fixtures/50443/_response.json new file mode 100644 index 0000000000..3e94ca58e3 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/50443/_response.json @@ -0,0 +1,869 @@ +{ + "data": { + "repository": { + "__typename": "Repository", + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "__typename": "PullRequest", + "id": "MDExOlB1bGxSZXF1ZXN0NTUwNjA3Mzgw", + "title": "Types for reefjs", + "createdAt": "2021-01-06T18:43:31Z", + "author": { + "__typename": "User", + "login": "shockdevv" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "__typename": "Ref", + "name": "master" + }, + "labels": { + "__typename": "LabelConnection", + "nodes": [ + { + "__typename": "Label", + "name": "Check Config" + }, + { + "__typename": "Label", + "name": "Maintainer Approved" + }, + { + "__typename": "Label", + "name": "New Definition" + }, + { + "__typename": "Label", + "name": "Self Merge" + } + ] + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 50443, + "state": "OPEN", + "headRefOid": "130c0882b07fc556c9690dac5f5ac231905c0636", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "__typename": "PullRequestTimelineItemsConnection", + "nodes": [ + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "__typename": "User", + "login": "typescript-bot" + }, + "createdAt": "2021-01-06T18:45:44Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "__typename": "User", + "login": "typescript-bot" + }, + "createdAt": "2021-01-06T20:21:15Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "__typename": "User", + "login": "typescript-bot" + }, + "createdAt": "2021-01-06T21:31:16Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "__typename": "User", + "login": "typescript-bot" + }, + "createdAt": "2021-01-06T21:43:18Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "__typename": "User", + "login": "typescript-bot" + }, + "createdAt": "2021-01-06T21:49:04Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "__typename": "User", + "login": "typescript-bot" + }, + "createdAt": "2021-01-07T20:34:51Z" + }, + { + "__typename": "MovedColumnsInProjectEvent", + "actor": { + "__typename": "User", + "login": "typescript-bot" + }, + "createdAt": "2021-01-07T21:15:27Z" + } + ] + }, + "reviews": { + "__typename": "PullRequestReviewConnection", + "nodes": [ + { + "__typename": "PullRequestReview", + "author": { + "__typename": "User", + "login": "danger-public" + }, + "commit": { + "__typename": "Commit", + "oid": "130c0882b07fc556c9690dac5f5ac231905c0636" + }, + "comments": { + "__typename": "PullRequestReviewCommentConnection", + "nodes": [ + { + "__typename": "PullRequestReviewComment", + "author": { + "__typename": "User", + "login": "danger-public" + }, + "createdAt": "2021-01-06T21:48:24Z" + } + ] + }, + "authorAssociation": "NONE", + "state": "COMMENTED", + "submittedAt": "2021-01-06T21:48:24Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50443#pullrequestreview-563057860" + }, + { + "__typename": "PullRequestReview", + "author": { + "__typename": "User", + "login": "andrewbranch" + }, + "commit": { + "__typename": "Commit", + "oid": "130c0882b07fc556c9690dac5f5ac231905c0636" + }, + "comments": { + "__typename": "PullRequestReviewCommentConnection", + "nodes": [] + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2021-01-07T20:34:13Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50443#pullrequestreview-563806940" + } + ] + }, + "commits": { + "__typename": "PullRequestCommitConnection", + "totalCount": 8, + "nodes": [ + { + "__typename": "PullRequestCommit", + "commit": { + "__typename": "Commit", + "checkSuites": { + "__typename": "CheckSuiteConnection", + "nodes": [ + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "GitHub Actions" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/89846dab5857b86dbac49686645b3731591012f8/checks?check_suite_id=1780201839", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/89846dab5857b86dbac49686645b3731591012f8/checks?check_suite_id=1780201839", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "build" + } + ] + } + }, + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "GitHub Actions" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/89846dab5857b86dbac49686645b3731591012f8/checks?check_suite_id=1780202074", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/89846dab5857b86dbac49686645b3731591012f8/checks?check_suite_id=1780202074", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "test" + } + ] + } + }, + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "Azure Pipelines" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/89846dab5857b86dbac49686645b3731591012f8/checks?check_suite_id=1780203199", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/89846dab5857b86dbac49686645b3731591012f8/checks?check_suite_id=1780203199", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "Build #81681 succeeded" + } + ] + } + } + ] + }, + "status": null, + "authoredDate": "2021-01-06T18:31:19Z", + "committedDate": "2021-01-06T18:31:19Z", + "pushedDate": null, + "oid": "89846dab5857b86dbac49686645b3731591012f8" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "__typename": "Commit", + "checkSuites": { + "__typename": "CheckSuiteConnection", + "nodes": [ + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "GitHub Actions" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9852541a17c0d889df8a0d40db83fc76a3d021fb/checks?check_suite_id=1780710482", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9852541a17c0d889df8a0d40db83fc76a3d021fb/checks?check_suite_id=1780710482", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "test" + } + ] + } + }, + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "Azure Pipelines" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9852541a17c0d889df8a0d40db83fc76a3d021fb/checks?check_suite_id=1780711722", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9852541a17c0d889df8a0d40db83fc76a3d021fb/checks?check_suite_id=1780711722", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "Build #81698 succeeded" + } + ] + } + } + ] + }, + "status": null, + "authoredDate": "2021-01-06T20:12:35Z", + "committedDate": "2021-01-06T20:13:24Z", + "pushedDate": null, + "oid": "9852541a17c0d889df8a0d40db83fc76a3d021fb" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "__typename": "Commit", + "checkSuites": { + "__typename": "CheckSuiteConnection", + "nodes": [ + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "GitHub Actions" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/b9eaf96a673b37d40fcd4455279d74b5ae94db5b/checks?check_suite_id=1780862531", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/b9eaf96a673b37d40fcd4455279d74b5ae94db5b/checks?check_suite_id=1780862531", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "test" + } + ] + } + }, + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "Azure Pipelines" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/b9eaf96a673b37d40fcd4455279d74b5ae94db5b/checks?check_suite_id=1780863201", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/b9eaf96a673b37d40fcd4455279d74b5ae94db5b/checks?check_suite_id=1780863201", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "Build #81712 succeeded" + } + ] + } + } + ] + }, + "status": null, + "authoredDate": "2021-01-06T20:45:08Z", + "committedDate": "2021-01-06T20:45:08Z", + "pushedDate": null, + "oid": "b9eaf96a673b37d40fcd4455279d74b5ae94db5b" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "__typename": "Commit", + "checkSuites": { + "__typename": "CheckSuiteConnection", + "nodes": [ + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "GitHub Actions" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/017c45ea763284cabca7adff5f28df9198f8db23/checks?check_suite_id=1781009035", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/017c45ea763284cabca7adff5f28df9198f8db23/checks?check_suite_id=1781009035", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "test" + } + ] + } + }, + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "Azure Pipelines" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/017c45ea763284cabca7adff5f28df9198f8db23/checks?check_suite_id=1781010012", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/017c45ea763284cabca7adff5f28df9198f8db23/checks?check_suite_id=1781010012", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "Build #81715 succeeded" + } + ] + } + } + ] + }, + "status": null, + "authoredDate": "2021-01-06T21:13:46Z", + "committedDate": "2021-01-06T21:13:46Z", + "pushedDate": null, + "oid": "017c45ea763284cabca7adff5f28df9198f8db23" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "__typename": "Commit", + "checkSuites": { + "__typename": "CheckSuiteConnection", + "nodes": [ + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "GitHub Actions" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/16342d605be28ff4d836c1fc5417358900db8e24/checks?check_suite_id=1781061388", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/16342d605be28ff4d836c1fc5417358900db8e24/checks?check_suite_id=1781061388", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": null + } + ] + } + }, + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "Azure Pipelines" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/16342d605be28ff4d836c1fc5417358900db8e24/checks?check_suite_id=1781062049", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/16342d605be28ff4d836c1fc5417358900db8e24/checks?check_suite_id=1781062049", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "Build #81717 succeeded" + } + ] + } + }, + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "GitHub Actions" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/16342d605be28ff4d836c1fc5417358900db8e24/checks?check_suite_id=1781083415", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/16342d605be28ff4d836c1fc5417358900db8e24/checks?check_suite_id=1781083415", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "build" + } + ] + } + } + ] + }, + "status": null, + "authoredDate": "2021-01-06T21:25:56Z", + "committedDate": "2021-01-06T21:25:56Z", + "pushedDate": null, + "oid": "16342d605be28ff4d836c1fc5417358900db8e24" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "__typename": "Commit", + "checkSuites": { + "__typename": "CheckSuiteConnection", + "nodes": [] + }, + "status": null, + "authoredDate": "2021-01-06T21:37:01Z", + "committedDate": "2021-01-06T21:37:01Z", + "pushedDate": null, + "oid": "4f58564cff6399f1a9e7585f4265467cc335399f" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "__typename": "Commit", + "checkSuites": { + "__typename": "CheckSuiteConnection", + "nodes": [ + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "GitHub Actions" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/46e731c05339fa78ee3349804cb403096e024de6/checks?check_suite_id=1781122312", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/46e731c05339fa78ee3349804cb403096e024de6/checks?check_suite_id=1781122312", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "test" + } + ] + } + }, + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "Azure Pipelines" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/46e731c05339fa78ee3349804cb403096e024de6/checks?check_suite_id=1781123060", + "status": "QUEUED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/46e731c05339fa78ee3349804cb403096e024de6/checks?check_suite_id=1781123060", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": null + } + ] + } + } + ] + }, + "status": null, + "authoredDate": "2021-01-06T21:37:43Z", + "committedDate": "2021-01-06T21:37:43Z", + "pushedDate": null, + "oid": "46e731c05339fa78ee3349804cb403096e024de6" + } + }, + { + "__typename": "PullRequestCommit", + "commit": { + "__typename": "Commit", + "checkSuites": { + "__typename": "CheckSuiteConnection", + "nodes": [ + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "GitHub Actions" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/130c0882b07fc556c9690dac5f5ac231905c0636/checks?check_suite_id=1781151391", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/130c0882b07fc556c9690dac5f5ac231905c0636/checks?check_suite_id=1781151391", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": null + } + ] + } + }, + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "Azure Pipelines" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/130c0882b07fc556c9690dac5f5ac231905c0636/checks?check_suite_id=1781152035", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/130c0882b07fc556c9690dac5f5ac231905c0636/checks?check_suite_id=1781152035", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "Build #81721 succeeded" + } + ] + } + }, + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "GitHub Actions" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/130c0882b07fc556c9690dac5f5ac231905c0636/checks?check_suite_id=1781171203", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/130c0882b07fc556c9690dac5f5ac231905c0636/checks?check_suite_id=1781171203", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "build" + } + ] + } + }, + { + "__typename": "CheckSuite", + "app": { + "__typename": "App", + "name": "GitHub Actions" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/130c0882b07fc556c9690dac5f5ac231905c0636/checks?check_suite_id=1787984852", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/130c0882b07fc556c9690dac5f5ac231905c0636/checks?check_suite_id=1787984852", + "checkRuns": { + "__typename": "CheckRunConnection", + "nodes": [ + { + "__typename": "CheckRun", + "title": "build" + } + ] + } + } + ] + }, + "status": null, + "authoredDate": "2021-01-06T21:43:41Z", + "committedDate": "2021-01-06T21:43:41Z", + "pushedDate": null, + "oid": "130c0882b07fc556c9690dac5f5ac231905c0636" + } + } + ] + }, + "comments": { + "__typename": "IssueCommentConnection", + "totalCount": 11, + "nodes": [ + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NTUwMTE4Nw==", + "author": { + "__typename": "User", + "login": "typescript-bot" + }, + "body": "@shockdevv 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 which I will keep updated.***\n\n## 1 package in this PR\n\n* `reefjs` (*new!*) [on npm](https://www.npmjs.com/package/reefjs), [on unpkg](https://unpkg.com/browse/reefjs@latest/)\n - 2 added owners: ✎@shockdevv, @cferdinandi\n - Config files to check:\n - [`reefjs/tsconfig.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50443/files/130c0882b07fc556c9690dac5f5ac231905c0636#diff-f2ab97c7d5c9144a70d65c5b96aaeecff962b1a2ab0d774091917da217073e16): not [the expected form](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-tsconfigjson)\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ✅ Only a DT maintainer can approve changes when there are new packages added\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", + "createdAt": "2021-01-06T18:44:08Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + }, + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NTUwMTIxMQ==", + "author": { + "__typename": "User", + "login": "typescript-bot" + }, + "body": "🔔 @shockdevv — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50443/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2021-01-06T18:44:09Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + }, + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NTUxMDU3Mw==", + "author": { + "__typename": "User", + "login": "typescript-bot" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\nThese typings are for a package that doesn’t yet exist on master, so I don’t have anything to compare against yet! In the future, I’ll be able to compare PRs to reefjs with its source on master.\n\n\n
\nComparison details 📊\n\n| **Batch compilation** | |\n| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |\n| Type count | 10524 |\n| Assignability cache size | 3672 |\n| | |\n| **Language service measurements** | |\n| Samples taken | 103 |\n| Identifiers in tests | 103 |\n| **`getCompletionsAtPosition`** | |\n|     Mean duration (ms) | 376.7 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 10.2% |\n|     Worst duration (ms) | 511.3 |\n|     Worst identifier | [copyOfData](/DefinitelyTyped/DefinitelyTyped/blob/5206c7741f50f4dcb979e0ea8870d0ac559fa56d/types/reefjs/reefjs-tests.ts#L62) |\n| **`getQuickInfoAtPosition`** | |\n|     Mean duration (ms) | 391.3 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.9% |\n|     Worst duration (ms) | 502.2 |\n|     Worst identifier | [clone](/DefinitelyTyped/DefinitelyTyped/blob/5206c7741f50f4dcb979e0ea8870d0ac559fa56d/types/reefjs/reefjs-tests.ts#L61) |\n| | |\n| **System information** | |\n| Node version | v14.15.1 |\n| CPU count | 2 |\n| CPU speed | 2.294 GHz |\n| CPU model | Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz |\n| CPU Architecture | x64 |\n| Memory | 6.8 GiB |\n| Platform | linux |\n| Release | 4.15.0-1100-azure |\n\n\n
\n", + "createdAt": "2021-01-06T18:51:30Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + }, + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NTYzNDY2NA==", + "author": { + "__typename": "User", + "login": "typescript-bot" + }, + "body": "@shockdevv The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9852541a17c0d889df8a0d40db83fc76a3d021fb/checks?check_suite_id=1780710482).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2021-01-06T20:21:17Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + }, + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NTY3NjE1Nw==", + "author": { + "__typename": "User", + "login": "typescript-bot" + }, + "body": "@shockdevv The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/b9eaf96a673b37d40fcd4455279d74b5ae94db5b/checks?check_suite_id=1780862531).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2021-01-06T20:51:13Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + }, + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NTcxNTQ3OA==", + "author": { + "__typename": "User", + "login": "typescript-bot" + }, + "body": "@shockdevv The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/017c45ea763284cabca7adff5f28df9198f8db23/checks?check_suite_id=1781009035).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2021-01-06T21:20:08Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + }, + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NTczMjE3Ng==", + "author": { + "__typename": "User", + "login": "typescript-bot" + }, + "body": "@shockdevv The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/46e731c05339fa78ee3349804cb403096e024de6/checks?check_suite_id=1781122312).\r\n\r\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n", + "createdAt": "2021-01-06T21:43:20Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + }, + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NjI3NDEyNw==", + "author": { + "__typename": "User", + "login": "shockdevv" + }, + "body": "What's wrong with my config file? It should be fine.", + "createdAt": "2021-01-07T17:50:09Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + }, + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NjM2ODA4NA==", + "author": { + "__typename": "User", + "login": "typescript-bot" + }, + "body": "@shockdevv Everything looks good here. Great job! I am ready to merge this PR (at 130c088) on your behalf.\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", + "createdAt": "2021-01-07T20:34:53Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + }, + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NjM4ODU2Nw==", + "author": { + "__typename": "User", + "login": "shockdevv" + }, + "body": "Ready to merge", + "createdAt": "2021-01-07T21:14:55Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + }, + { + "__typename": "IssueComment", + "id": "MDEyOklzc3VlQ29tbWVudDc1NjM5MzAwMw==", + "author": { + "__typename": "User", + "login": "typescript-bot" + }, + "body": "I just published [`@types/reefjs@7.6.0` to npm](https://www.npmjs.com/package/@types/reefjs).", + "createdAt": "2021-01-07T21:22:18Z", + "reactions": { + "__typename": "ReactionConnection", + "nodes": [] + } + } + ] + }, + "files": { + "__typename": "PullRequestChangedFileConnection", + "totalCount": 4, + "nodes": [ + { + "__typename": "PullRequestChangedFile", + "path": "types/reefjs/index.d.ts", + "additions": 173, + "deletions": 0 + }, + { + "__typename": "PullRequestChangedFile", + "path": "types/reefjs/reefjs-tests.ts", + "additions": 113, + "deletions": 0 + }, + { + "__typename": "PullRequestChangedFile", + "path": "types/reefjs/tsconfig.json", + "additions": 24, + "deletions": 0 + }, + { + "__typename": "PullRequestChangedFile", + "path": "types/reefjs/tslint.json", + "additions": 1, + "deletions": 0 + } + ] + }, + "projectCards": { + "__typename": "ProjectCardConnection", + "nodes": [ + { + "__typename": "ProjectCard", + "id": "MDExOlByb2plY3RDYXJkNTIzMTg2ODk=", + "project": { + "__typename": "Project", + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board" + }, + "column": { + "__typename": "ProjectColumn", + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI1", + "name": "Recently Merged" + } + } + ] + } + } + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/50443/derived.json b/packages/mergebot/src/_tests/fixtures/50443/derived.json new file mode 100644 index 0000000000..0e10a91309 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/50443/derived.json @@ -0,0 +1,56 @@ +{ + "type": "info", + "now": "2021-01-13T16:53:37.338Z", + "pr_number": 50443, + "author": "shockdevv", + "headCommitOid": "130c0882b07fc556c9690dac5f5ac231905c0636", + "mergeBaseOid": "master", + "lastPushDate": "2021-01-06T18:43:31.000Z", + "lastActivityDate": "2021-01-07T21:14:55.000Z", + "mergeOfferDate": "2021-01-07T20:34:53.000Z", + "mergeRequestDate": "2021-01-07T21:14:55.000Z", + "mergeRequestUser": "shockdevv", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "reefjs", + "kind": "add", + "files": [ + { + "path": "types/reefjs/index.d.ts", + "kind": "definition" + }, + { + "path": "types/reefjs/reefjs-tests.ts", + "kind": "test" + }, + { + "path": "types/reefjs/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/reefjs/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "andrewbranch", + "date": "2021-01-07T20:34:13.000Z", + "isMaintainer": true + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/50443/mutations.json b/packages/mergebot/src/_tests/fixtures/50443/mutations.json new file mode 100644 index 0000000000..46522e4346 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/50443/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDc1NTUwMTE4Nw==", + "body": "@shockdevv Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `reefjs` (*new!*) — [on npm](https://www.npmjs.com/package/reefjs), [on unpkg](https://unpkg.com/browse/reefjs@latest/)\n - Config files to check:\n - [`reefjs/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50443/files/130c0882b07fc556c9690dac5f5ac231905c0636#diff-863d2743beaae339df8ac84e41ae21f7511dbd86e14aa07cabd21a308efd9bd6): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=50443&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 when there are new packages added\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## Inactive\n\nThis PR has been inactive for 5 days.\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: MergePullRequestInput!) {\n mergePullRequest(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "commitHeadline": "🤖 Merge PR #50443 Types for reefjs by @shockdevv", + "expectedHeadOid": "130c0882b07fc556c9690dac5f5ac231905c0636", + "mergeMethod": "SQUASH", + "pullRequestId": "MDExOlB1bGxSZXF1ZXN0NTUwNjA3Mzgw" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDc1NjM2ODA4NA==", + "body": "@shockdevv: Everything looks good here. I am ready to merge this PR (at 130c088) 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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/50443/result.json b/packages/mergebot/src/_tests/fixtures/50443/result.json new file mode 100644 index 0000000000..908bc4ffa0 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/50443/result.json @@ -0,0 +1,22 @@ +{ + "projectColumn": "Recently Merged", + "labels": [ + "Maintainer Approved", + "New Definition", + "Check Config", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@shockdevv Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `reefjs` (*new!*) — [on npm](https://www.npmjs.com/package/reefjs), [on unpkg](https://unpkg.com/browse/reefjs@latest/)\n - Config files to check:\n - [`reefjs/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50443/files/130c0882b07fc556c9690dac5f5ac231905c0636#diff-863d2743beaae339df8ac84e41ae21f7511dbd86e14aa07cabd21a308efd9bd6): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=50443&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 when there are new packages added\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## Inactive\n\nThis PR has been inactive for 5 days.\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "merge-offer", + "status": "@shockdevv: Everything looks good here. I am ready to merge this PR (at 130c088) 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" + } + ], + "shouldClose": false, + "shouldMerge": true, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/51338/_downloads.json b/packages/mergebot/src/_tests/fixtures/51338/_downloads.json new file mode 100644 index 0000000000..d7428204f2 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/51338/_downloads.json @@ -0,0 +1,3 @@ +{ + "koa": 5708514 +} diff --git a/packages/mergebot/src/_tests/fixtures/51338/_files.json b/packages/mergebot/src/_tests/fixtures/51338/_files.json new file mode 100644 index 0000000000..0bfa4bb27c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/51338/_files.json @@ -0,0 +1,6 @@ +{ + "4a7712f61d17eb33e89171f317deeb31b3d555ae:types/koa/tsconfig.json": "{\n \"files\": [\n \"index.d.ts\",\n \"test/index.ts\",\n \"test/default.ts\",\n \"test/response-body.ts\",\n \"test/settings.ts\"\n ],\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"esModuleInterop\": true\n }\n}\n", + "master:types/koa/tsconfig.json": "{\n \"files\": [\n \"index.d.ts\",\n \"test/index.ts\",\n \"test/default.ts\",\n \"test/response-body.ts\",\n \"test/settings.ts\"\n ],\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n }\n}\n", + "master:types/koa/index.d.ts": "// Type definitions for Koa 2.13.0\n// Project: http://koajs.com\n// Definitions by: DavidCai1993 \n// jKey Lu \n// Brice Bernard \n// harryparkdotio \n// Wooram Jun \n// Christian Vaagland Tellnes \n// Piotr Kuczynski \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.0\n\n/* =================== USAGE ===================\n\n import * as Koa from \"koa\"\n const app = new Koa()\n\n async function (ctx: Koa.Context, next: Koa.Next) {\n // ...\n }\n\n =============================================== */\n/// \nimport * as accepts from 'accepts';\nimport * as Cookies from 'cookies';\nimport { EventEmitter } from 'events';\nimport { IncomingMessage, ServerResponse, Server, IncomingHttpHeaders, OutgoingHttpHeaders } from 'http';\nimport { Http2ServerRequest, Http2ServerResponse } from 'http2';\nimport * as httpAssert from 'http-assert';\nimport * as HttpErrors from 'http-errors';\nimport * as Keygrip from 'keygrip';\nimport * as compose from 'koa-compose';\nimport { Socket, ListenOptions } from 'net';\nimport * as url from 'url';\nimport * as contentDisposition from 'content-disposition';\nimport { ParsedUrlQuery } from 'querystring';\n\ndeclare interface ContextDelegatedRequest {\n /**\n * Return request header.\n */\n header: IncomingHttpHeaders;\n\n /**\n * Return request header, alias as request.header\n */\n headers: IncomingHttpHeaders;\n\n /**\n * Get/Set request URL.\n */\n url: string;\n\n /**\n * Get origin of URL.\n */\n origin: string;\n\n /**\n * Get full request URL.\n */\n href: string;\n\n /**\n * Get/Set request method.\n */\n method: string;\n\n /**\n * Get request pathname.\n * Set pathname, retaining the query-string when present.\n */\n path: string;\n\n /**\n * Get parsed query-string.\n * Set query-string as an object.\n */\n query: ParsedUrlQuery;\n\n /**\n * Get/Set query string.\n */\n querystring: string;\n\n /**\n * Get the search string. Same as the querystring\n * except it includes the leading ?.\n *\n * Set the search string. Same as\n * response.querystring= but included for ubiquity.\n */\n search: string;\n\n /**\n * Parse the \"Host\" header field host\n * and support X-Forwarded-Host when a\n * proxy is enabled.\n */\n host: string;\n\n /**\n * Parse the \"Host\" header field hostname\n * and support X-Forwarded-Host when a\n * proxy is enabled.\n */\n hostname: string;\n\n /**\n * Get WHATWG parsed URL object.\n */\n URL: url.URL;\n\n /**\n * Check if the request is fresh, aka\n * Last-Modified and/or the ETag\n * still match.\n */\n fresh: boolean;\n\n /**\n * Check if the request is stale, aka\n * \"Last-Modified\" and / or the \"ETag\" for the\n * resource has changed.\n */\n stale: boolean;\n\n /**\n * Check if the request is idempotent.\n */\n idempotent: boolean;\n\n /**\n * Return the request socket.\n */\n socket: Socket;\n\n /**\n * Return the protocol string \"http\" or \"https\"\n * when requested with TLS. When the proxy setting\n * is enabled the \"X-Forwarded-Proto\" header\n * field will be trusted. If you're running behind\n * a reverse proxy that supplies https for you this\n * may be enabled.\n */\n protocol: string;\n\n /**\n * Short-hand for:\n *\n * this.protocol == 'https'\n */\n secure: boolean;\n\n /**\n * Request remote address. Supports X-Forwarded-For when app.proxy is true.\n */\n ip: string;\n\n /**\n * When `app.proxy` is `true`, parse\n * the \"X-Forwarded-For\" ip address list.\n *\n * For example if the value were \"client, proxy1, proxy2\"\n * you would receive the array `[\"client\", \"proxy1\", \"proxy2\"]`\n * where \"proxy2\" is the furthest down-stream.\n */\n ips: string[];\n\n /**\n * Return subdomains as an array.\n *\n * Subdomains are the dot-separated parts of the host before the main domain\n * of the app. By default, the domain of the app is assumed to be the last two\n * parts of the host. This can be changed by setting `app.subdomainOffset`.\n *\n * For example, if the domain is \"tobi.ferrets.example.com\":\n * If `app.subdomainOffset` is not set, this.subdomains is\n * `[\"ferrets\", \"tobi\"]`.\n * If `app.subdomainOffset` is 3, this.subdomains is `[\"tobi\"]`.\n */\n subdomains: string[];\n\n /**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `false`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\" or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * this.accepts('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * this.accepts('html');\n * // => \"html\"\n * this.accepts('text/html');\n * // => \"text/html\"\n * this.accepts('json', 'text');\n * // => \"json\"\n * this.accepts('application/json');\n * // => \"application/json\"\n *\n * // Accept: text/*, application/json\n * this.accepts('image/png');\n * this.accepts('png');\n * // => undefined\n *\n * // Accept: text/*;q=.5, application/json\n * this.accepts(['html', 'json']);\n * this.accepts('html', 'json');\n * // => \"json\"\n */\n accepts(): string[];\n accepts(...types: string[]): string | false;\n accepts(types: string[]): string | false;\n\n /**\n * Return accepted encodings or best fit based on `encodings`.\n *\n * Given `Accept-Encoding: gzip, deflate`\n * an array sorted by quality is returned:\n *\n * ['gzip', 'deflate']\n */\n acceptsEncodings(): string[];\n acceptsEncodings(...encodings: string[]): string | false;\n acceptsEncodings(encodings: string[]): string | false;\n\n /**\n * Return accepted charsets or best fit based on `charsets`.\n *\n * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`\n * an array sorted by quality is returned:\n *\n * ['utf-8', 'utf-7', 'iso-8859-1']\n */\n acceptsCharsets(): string[];\n acceptsCharsets(...charsets: string[]): string | false;\n acceptsCharsets(charsets: string[]): string | false;\n\n /**\n * Return accepted languages or best fit based on `langs`.\n *\n * Given `Accept-Language: en;q=0.8, es, pt`\n * an array sorted by quality is returned:\n *\n * ['es', 'pt', 'en']\n */\n acceptsLanguages(): string[];\n acceptsLanguages(...langs: string[]): string | false;\n acceptsLanguages(langs: string[]): string | false;\n\n /**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains any of the give mime `type`s.\n * If there is no request body, `null` is returned.\n * If there is no content type, `false` is returned.\n * Otherwise, it returns the first `type` that matches.\n *\n * Examples:\n *\n * // With Content-Type: text/html; charset=utf-8\n * this.is('html'); // => 'html'\n * this.is('text/html'); // => 'text/html'\n * this.is('text/*', 'application/json'); // => 'text/html'\n *\n * // When Content-Type is application/json\n * this.is('json', 'urlencoded'); // => 'json'\n * this.is('application/json'); // => 'application/json'\n * this.is('html', 'application/*'); // => 'application/json'\n *\n * this.is('html'); // => false\n */\n // is(): string | boolean;\n is(...types: string[]): string | false | null;\n is(types: string[]): string | false | null;\n\n /**\n * Return request header. If the header is not set, will return an empty\n * string.\n *\n * The `Referrer` header field is special-cased, both `Referrer` and\n * `Referer` are interchangeable.\n *\n * Examples:\n *\n * this.get('Content-Type');\n * // => \"text/plain\"\n *\n * this.get('content-type');\n * // => \"text/plain\"\n *\n * this.get('Something');\n * // => ''\n */\n get(field: string): string;\n}\n\ndeclare interface ContextDelegatedResponse {\n /**\n * Get/Set response status code.\n */\n status: number;\n\n /**\n * Get response status message\n */\n message: string;\n\n /**\n * Get/Set response body.\n */\n body: unknown;\n\n /**\n * Return parsed response Content-Length when present.\n * Set Content-Length field to `n`.\n */\n length: number;\n\n /**\n * Check if a header has been written to the socket.\n */\n headerSent: boolean;\n\n /**\n * Vary on `field`.\n */\n vary(field: string): void;\n\n /**\n * Perform a 302 redirect to `url`.\n *\n * The string \"back\" is special-cased\n * to provide Referrer support, when Referrer\n * is not present `alt` or \"/\" is used.\n *\n * Examples:\n *\n * this.redirect('back');\n * this.redirect('back', '/index.html');\n * this.redirect('/login');\n * this.redirect('http://google.com');\n */\n redirect(url: string, alt?: string): void;\n\n /**\n * Set Content-Disposition to \"attachment\" to signal the client to prompt for download.\n * Optionally specify the filename of the download and some options.\n */\n attachment(filename?: string, options?: contentDisposition.Options): void;\n\n /**\n * Return the response mime type void of\n * parameters such as \"charset\".\n *\n * Set Content-Type response header with `type` through `mime.lookup()`\n * when it does not contain a charset.\n", + "4a7712f61d17eb33e89171f317deeb31b3d555ae:types/koa/index.d.ts": "// Type definitions for Koa 2.13.0\n// Project: http://koajs.com\n// Definitions by: DavidCai1993 \n// jKey Lu \n// Brice Bernard \n// harryparkdotio \n// Wooram Jun \n// Christian Vaagland Tellnes \n// Piotr Kuczynski \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.0\n\n/* =================== USAGE ===================\n\n import * as Koa from \"koa\"\n const app = new Koa()\n\n async function (ctx: Koa.Context, next: Koa.Next) {\n // ...\n }\n\n =============================================== */\n/// \nimport * as accepts from 'accepts';\nimport * as Cookies from 'cookies';\nimport { EventEmitter } from 'events';\nimport { IncomingMessage, ServerResponse, Server, IncomingHttpHeaders, OutgoingHttpHeaders } from 'http';\nimport { Http2ServerRequest, Http2ServerResponse } from 'http2';\nimport httpAssert = require('http-assert');\nimport * as HttpErrors from 'http-errors';\nimport * as Keygrip from 'keygrip';\nimport * as compose from 'koa-compose';\nimport { Socket, ListenOptions } from 'net';\nimport * as url from 'url';\nimport * as contentDisposition from 'content-disposition';\nimport { ParsedUrlQuery } from 'querystring';\n\ndeclare interface ContextDelegatedRequest {\n /**\n * Return request header.\n */\n header: IncomingHttpHeaders;\n\n /**\n * Return request header, alias as request.header\n */\n headers: IncomingHttpHeaders;\n\n /**\n * Get/Set request URL.\n */\n url: string;\n\n /**\n * Get origin of URL.\n */\n origin: string;\n\n /**\n * Get full request URL.\n */\n href: string;\n\n /**\n * Get/Set request method.\n */\n method: string;\n\n /**\n * Get request pathname.\n * Set pathname, retaining the query-string when present.\n */\n path: string;\n\n /**\n * Get parsed query-string.\n * Set query-string as an object.\n */\n query: ParsedUrlQuery;\n\n /**\n * Get/Set query string.\n */\n querystring: string;\n\n /**\n * Get the search string. Same as the querystring\n * except it includes the leading ?.\n *\n * Set the search string. Same as\n * response.querystring= but included for ubiquity.\n */\n search: string;\n\n /**\n * Parse the \"Host\" header field host\n * and support X-Forwarded-Host when a\n * proxy is enabled.\n */\n host: string;\n\n /**\n * Parse the \"Host\" header field hostname\n * and support X-Forwarded-Host when a\n * proxy is enabled.\n */\n hostname: string;\n\n /**\n * Get WHATWG parsed URL object.\n */\n URL: url.URL;\n\n /**\n * Check if the request is fresh, aka\n * Last-Modified and/or the ETag\n * still match.\n */\n fresh: boolean;\n\n /**\n * Check if the request is stale, aka\n * \"Last-Modified\" and / or the \"ETag\" for the\n * resource has changed.\n */\n stale: boolean;\n\n /**\n * Check if the request is idempotent.\n */\n idempotent: boolean;\n\n /**\n * Return the request socket.\n */\n socket: Socket;\n\n /**\n * Return the protocol string \"http\" or \"https\"\n * when requested with TLS. When the proxy setting\n * is enabled the \"X-Forwarded-Proto\" header\n * field will be trusted. If you're running behind\n * a reverse proxy that supplies https for you this\n * may be enabled.\n */\n protocol: string;\n\n /**\n * Short-hand for:\n *\n * this.protocol == 'https'\n */\n secure: boolean;\n\n /**\n * Request remote address. Supports X-Forwarded-For when app.proxy is true.\n */\n ip: string;\n\n /**\n * When `app.proxy` is `true`, parse\n * the \"X-Forwarded-For\" ip address list.\n *\n * For example if the value were \"client, proxy1, proxy2\"\n * you would receive the array `[\"client\", \"proxy1\", \"proxy2\"]`\n * where \"proxy2\" is the furthest down-stream.\n */\n ips: string[];\n\n /**\n * Return subdomains as an array.\n *\n * Subdomains are the dot-separated parts of the host before the main domain\n * of the app. By default, the domain of the app is assumed to be the last two\n * parts of the host. This can be changed by setting `app.subdomainOffset`.\n *\n * For example, if the domain is \"tobi.ferrets.example.com\":\n * If `app.subdomainOffset` is not set, this.subdomains is\n * `[\"ferrets\", \"tobi\"]`.\n * If `app.subdomainOffset` is 3, this.subdomains is `[\"tobi\"]`.\n */\n subdomains: string[];\n\n /**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `false`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\" or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * this.accepts('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * this.accepts('html');\n * // => \"html\"\n * this.accepts('text/html');\n * // => \"text/html\"\n * this.accepts('json', 'text');\n * // => \"json\"\n * this.accepts('application/json');\n * // => \"application/json\"\n *\n * // Accept: text/*, application/json\n * this.accepts('image/png');\n * this.accepts('png');\n * // => undefined\n *\n * // Accept: text/*;q=.5, application/json\n * this.accepts(['html', 'json']);\n * this.accepts('html', 'json');\n * // => \"json\"\n */\n accepts(): string[];\n accepts(...types: string[]): string | false;\n accepts(types: string[]): string | false;\n\n /**\n * Return accepted encodings or best fit based on `encodings`.\n *\n * Given `Accept-Encoding: gzip, deflate`\n * an array sorted by quality is returned:\n *\n * ['gzip', 'deflate']\n */\n acceptsEncodings(): string[];\n acceptsEncodings(...encodings: string[]): string | false;\n acceptsEncodings(encodings: string[]): string | false;\n\n /**\n * Return accepted charsets or best fit based on `charsets`.\n *\n * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`\n * an array sorted by quality is returned:\n *\n * ['utf-8', 'utf-7', 'iso-8859-1']\n */\n acceptsCharsets(): string[];\n acceptsCharsets(...charsets: string[]): string | false;\n acceptsCharsets(charsets: string[]): string | false;\n\n /**\n * Return accepted languages or best fit based on `langs`.\n *\n * Given `Accept-Language: en;q=0.8, es, pt`\n * an array sorted by quality is returned:\n *\n * ['es', 'pt', 'en']\n */\n acceptsLanguages(): string[];\n acceptsLanguages(...langs: string[]): string | false;\n acceptsLanguages(langs: string[]): string | false;\n\n /**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains any of the give mime `type`s.\n * If there is no request body, `null` is returned.\n * If there is no content type, `false` is returned.\n * Otherwise, it returns the first `type` that matches.\n *\n * Examples:\n *\n * // With Content-Type: text/html; charset=utf-8\n * this.is('html'); // => 'html'\n * this.is('text/html'); // => 'text/html'\n * this.is('text/*', 'application/json'); // => 'text/html'\n *\n * // When Content-Type is application/json\n * this.is('json', 'urlencoded'); // => 'json'\n * this.is('application/json'); // => 'application/json'\n * this.is('html', 'application/*'); // => 'application/json'\n *\n * this.is('html'); // => false\n */\n // is(): string | boolean;\n is(...types: string[]): string | false | null;\n is(types: string[]): string | false | null;\n\n /**\n * Return request header. If the header is not set, will return an empty\n * string.\n *\n * The `Referrer` header field is special-cased, both `Referrer` and\n * `Referer` are interchangeable.\n *\n * Examples:\n *\n * this.get('Content-Type');\n * // => \"text/plain\"\n *\n * this.get('content-type');\n * // => \"text/plain\"\n *\n * this.get('Something');\n * // => ''\n */\n get(field: string): string;\n}\n\ndeclare interface ContextDelegatedResponse {\n /**\n * Get/Set response status code.\n */\n status: number;\n\n /**\n * Get response status message\n */\n message: string;\n\n /**\n * Get/Set response body.\n */\n body: unknown;\n\n /**\n * Return parsed response Content-Length when present.\n * Set Content-Length field to `n`.\n */\n length: number;\n\n /**\n * Check if a header has been written to the socket.\n */\n headerSent: boolean;\n\n /**\n * Vary on `field`.\n */\n vary(field: string): void;\n\n /**\n * Perform a 302 redirect to `url`.\n *\n * The string \"back\" is special-cased\n * to provide Referrer support, when Referrer\n * is not present `alt` or \"/\" is used.\n *\n * Examples:\n *\n * this.redirect('back');\n * this.redirect('back', '/index.html');\n * this.redirect('/login');\n * this.redirect('http://google.com');\n */\n redirect(url: string, alt?: string): void;\n\n /**\n * Set Content-Disposition to \"attachment\" to signal the client to prompt for download.\n * Optionally specify the filename of the download and some options.\n */\n attachment(filename?: string, options?: contentDisposition.Options): void;\n\n /**\n * Return the response mime type void of\n * parameters such as \"charset\".\n *\n * Set Content-Type response header with `type` through `mime.lookup()`\n * when it does not contain a charset." +} diff --git a/packages/mergebot/src/_tests/fixtures/51338/_response.json b/packages/mergebot/src/_tests/fixtures/51338/_response.json new file mode 100644 index 0000000000..75b3334151 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/51338/_response.json @@ -0,0 +1,308 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NTc2NTk4OTQ2", + "title": "[koa] Fix http-assert import issue", + "createdAt": "2021-02-19T17:14:27Z", + "author": { + "login": "pkuczynski", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Author is Owner", + "__typename": "Label" + }, + { + "name": "Check Config", + "__typename": "Label" + }, + { + "name": "Critical package", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Perf: Same", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 51338, + "state": "OPEN", + "headRefOid": "4a7712f61d17eb33e89171f317deeb31b3d555ae", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-02-19T18:52:03Z", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "tellnes", + "__typename": "User" + }, + "commit": { + "oid": "4a7712f61d17eb33e89171f317deeb31b3d555ae", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2021-02-20T14:48:26Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/51338#pullrequestreview-594758328", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4a7712f61d17eb33e89171f317deeb31b3d555ae/checks?check_suite_id=2079549099", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4a7712f61d17eb33e89171f317deeb31b3d555ae/checks?check_suite_id=2079549099", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4a7712f61d17eb33e89171f317deeb31b3d555ae/checks?check_suite_id=2079551193", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4a7712f61d17eb33e89171f317deeb31b3d555ae/checks?check_suite_id=2079551193", + "checkRuns": { + "nodes": [ + { + "title": "Build #87669 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4a7712f61d17eb33e89171f317deeb31b3d555ae/checks?check_suite_id=2084628457", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4a7712f61d17eb33e89171f317deeb31b3d555ae/checks?check_suite_id=2084628457", + "checkRuns": { + "nodes": [ + { + "title": "build", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2021-02-19T17:22:04Z", + "committedDate": "2021-02-19T17:22:04Z", + "pushedDate": "2021-02-19T17:22:27Z", + "oid": "4a7712f61d17eb33e89171f317deeb31b3d555ae", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 7, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDc4MjIxMzI3OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "Hey @pkuczynski,\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": "2021-02-19T17:15:04Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDc4MjIxMzI4Nw==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@pkuczynski Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n* `koa` [on npm](https://www.npmjs.com/package/koa), [on unpkg](https://unpkg.com/browse/koa@latest/) (author is owner)\n - owner-approval: @tellnes\n - Config files to check:\n - [`koa/tsconfig.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/51338/files/4a7712f61d17eb33e89171f317deeb31b3d555ae#diff-1730c5405d0220a98f28feeec2de3f5a511ebc6a04ceadf12415b81de841672e): not [the expected form](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-tsconfigjson) and not moving towards it\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * ❌ A DT maintainer needs to approve changes which affect module config files\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 11 days — please try to get reviewers!\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2021-02-19T17:15:05Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDc4MjIxMzMwMA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @DavidCai1993 @jkeylu @brikou @harryparkdotio @chatoo2412 @tellnes — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/51338/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": "2021-02-19T17:15:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDc4MjIxNzk2MA==", + "author": { + "login": "pkuczynski", + "__typename": "User" + }, + "body": "I added `\"esModuleInterop\": true` to `tsconfig` as this is the case when `import * as httpAssert from 'http-assert';` fails.", + "createdAt": "2021-02-19T17:23:10Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDc4MjIxODU2Mg==", + "author": { + "login": "pkuczynski", + "__typename": "User" + }, + "body": "@tellnes can you please have a look at this as an urgent matter, as our last merge #50249 broke the types ", + "createdAt": "2021-02-19T17:24:17Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDc4MjIzMDI5OQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\n\n\n
\nComparison details 📊\n\n| | master | #51338 | diff |\n| ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **Batch compilation** | | | |\n| Memory usage (MiB) | 80.2 | 81.9 | +2.1% |\n| Type count | 12179 | 12239 | 0% |\n| Assignability cache size | 2743 | 2743 | 0% |\n| | | | |\n| **Language service** | | | |\n| Samples taken | 270 | 270 | 0% |\n| Identifiers in tests | 270 | 270 | 0% |\n| **`getCompletionsAtPosition`** | | | |\n|     Mean duration (ms) | 367.8 | 370.4 | +0.7% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.6% | 10.2% | |\n|     Worst duration (ms) | 474.6 | 478.1 | +0.7% |\n|     Worst identifier | [assert](/DefinitelyTyped/DefinitelyTyped/blob/21c58cfbf416717f8b69973bddce00dbe82bddfd/types/koa/test/index.ts#L46) | [attachment](/DefinitelyTyped/DefinitelyTyped/blob/bbb8d7db2b15488a6824ac7047fba7f08229bffd/types/koa/test/default.ts#L56) | |\n| **`getQuickInfoAtPosition`** | | | |\n|     Mean duration (ms) | 371.7 | 376.7 | +1.3% |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 9.5% | 9.4% | |\n|     Worst duration (ms) | 468.4 | 484.4 | +3.4% |\n|     Worst identifier | [use](/DefinitelyTyped/DefinitelyTyped/blob/21c58cfbf416717f8b69973bddce00dbe82bddfd/types/koa/test/default.ts#L36) | [assert](/DefinitelyTyped/DefinitelyTyped/blob/bbb8d7db2b15488a6824ac7047fba7f08229bffd/types/koa/test/index.ts#L46) | |\n\n\n
\n\nIt looks like nothing changed too much. I won’t post performance data again unless it gets worse.", + "createdAt": "2021-02-19T17:44:31Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 2, + "nodes": [ + { + "path": "types/koa/index.d.ts", + "additions": 2, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/koa/tsconfig.json", + "additions": 2, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNTUyOTAyODI=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy", + "name": "Needs Maintainer Review", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/51338/derived.json b/packages/mergebot/src/_tests/fixtures/51338/derived.json new file mode 100644 index 0000000000..e93c411178 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/51338/derived.json @@ -0,0 +1,53 @@ +{ + "type": "info", + "now": "2021-03-02T21:43:39.396Z", + "pr_number": 51338, + "author": "pkuczynski", + "headCommitOid": "4a7712f61d17eb33e89171f317deeb31b3d555ae", + "mergeBaseOid": "master", + "lastPushDate": "2021-02-19T17:22:27.000Z", + "lastActivityDate": "2021-02-20T14:48:26.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "koa", + "kind": "edit", + "files": [ + { + "path": "types/koa/index.d.ts", + "kind": "definition" + }, + { + "path": "types/koa/tsconfig.json", + "kind": "package-meta", + "suspect": "not [the expected form](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-tsconfigjson) and not moving towards it (check: `compilerOptions.esModuleInterop`)" + } + ], + "owners": [ + "DavidCai1993", + "jkeylu", + "brikou", + "harryparkdotio", + "chatoo2412", + "tellnes", + "pkuczynski" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "tellnes", + "date": "2021-02-20T14:48:26.000Z", + "isMaintainer": false + } + ], + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/51338/mutations.json b/packages/mergebot/src/_tests/fixtures/51338/mutations.json new file mode 100644 index 0000000000..472c24b782 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/51338/mutations.json @@ -0,0 +1,40 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDc4MjIxMzI4Nw==", + "body": "@pkuczynski Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `koa` — [on npm](https://www.npmjs.com/package/koa), [on unpkg](https://unpkg.com/browse/koa@latest/) (author is owner)\n - owner-approval: @tellnes\n - Config files to check:\n - [`koa/tsconfig.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/51338/files/4a7712f61d17eb33e89171f317deeb31b3d555ae#diff-1730c5405d0220a98f28feeec2de3f5a511ebc6a04ceadf12415b81de841672e): not [the expected form](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-tsconfigjson) and not moving towards it (check: `compilerOptions.esModuleInterop`)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=51338&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 module config files\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 11 days — please try to get reviewers!\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyNDYyODA0MzE1" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NTc2NTk4OTQ2" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTc2NTk4OTQ2", + "body": ":hourglass_flowing_sand: Hi @pkuczynski,\n\nIt's been a few days since this PR was approved by tellnes 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" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NTc2NTk4OTQ2", + "body": "Re-ping @DavidCai1993, @jkeylu, @brikou, @harryparkdotio, @chatoo2412:\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/51338/result.json b/packages/mergebot/src/_tests/fixtures/51338/result.json new file mode 100644 index 0000000000..78659a6de4 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/51338/result.json @@ -0,0 +1,32 @@ +{ + "projectColumn": "Needs Maintainer Review", + "labels": [ + "Critical package", + "Owner Approved", + "Author is Owner", + "Check Config", + "Untested Change", + "Unreviewed" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @pkuczynski,\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": "@pkuczynski Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `koa` — [on npm](https://www.npmjs.com/package/koa), [on unpkg](https://unpkg.com/browse/koa@latest/) (author is owner)\n - owner-approval: @tellnes\n - Config files to check:\n - [`koa/tsconfig.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/51338/files/4a7712f61d17eb33e89171f317deeb31b3d555ae#diff-1730c5405d0220a98f28feeec2de3f5a511ebc6a04ceadf12415b81de841672e): not [the expected form](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-tsconfigjson) and not moving towards it (check: `compilerOptions.esModuleInterop`)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=51338&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 module config files\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 11 days — please try to get reviewers!\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "wait-for-merge-offer-4a7712f", + "status": ":hourglass_flowing_sand: Hi @pkuczynski,\n\nIt's been a few days since this PR was approved by tellnes 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." + }, + { + "tag": "Unreviewed:nearly:2021-02-19", + "status": "Re-ping @DavidCai1993, @jkeylu, @brikou, @harryparkdotio, @chatoo2412:\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!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/52579-edits-infra/_downloads.json b/packages/mergebot/src/_tests/fixtures/52579-edits-infra/_downloads.json new file mode 100644 index 0000000000..b06e74596f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52579-edits-infra/_downloads.json @@ -0,0 +1,3 @@ +{ + "vertx__eventbus-bridge-client.js": 0 +} diff --git a/packages/mergebot/src/_tests/fixtures/52579-edits-infra/_files.json b/packages/mergebot/src/_tests/fixtures/52579-edits-infra/_files.json new file mode 100644 index 0000000000..a30a69c84d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52579-edits-infra/_files.json @@ -0,0 +1,5 @@ +{ + "5337ea17b2407707bead503cd20c9ca29438f5df:types/vertx__eventbus-bridge-client.js/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictFunctionTypes\": true,\n \"strictNullChecks\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"vertx__eventbus-bridge-client.js-tests.ts\"\n ]\n}\n", + "5337ea17b2407707bead503cd20c9ca29438f5df:types/vertx__eventbus-bridge-client.js/tslint.json": "{ \"extends\": \"@definitelytyped/dtslint/dt.json\" }\n", + "5337ea17b2407707bead503cd20c9ca29438f5df:package.json": "{}" +} diff --git a/packages/mergebot/src/_tests/fixtures/52579-edits-infra/_response.json b/packages/mergebot/src/_tests/fixtures/52579-edits-infra/_response.json new file mode 100644 index 0000000000..4f9712dde8 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52579-edits-infra/_response.json @@ -0,0 +1,234 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NjIyODUxNTk2", + "title": "new definition for @vertx/eventbus-bridge-client.js", + "createdAt": "2021-04-25T22:27:45Z", + "author": { + "login": "Phong6698", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "changedFiles": 4, + "commitIds": {}, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 52579, + "state": "OPEN", + "headRefOid": "5337ea17b2407707bead503cd20c9ca29438f5df", + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-04-25T22:30:06Z", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/5337ea17b2407707bead503cd20c9ca29438f5df/checks?check_suite_id=2579289453", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/5337ea17b2407707bead503cd20c9ca29438f5df/checks?check_suite_id=2579289453", + "checkRuns": { + "nodes": [ + { + "title": "build", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 123456, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "ACTION_REQUIRED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/5337ea17b2407707bead503cd20c9ca29438f5df/checks?check_suite_id=2579289527", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/5337ea17b2407707bead503cd20c9ca29438f5df/checks?check_suite_id=2579289527", + "checkRuns": { + "nodes": [], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/5337ea17b2407707bead503cd20c9ca29438f5df/checks?check_suite_id=2579289989", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/5337ea17b2407707bead503cd20c9ca29438f5df/checks?check_suite_id=2579289989", + "checkRuns": { + "nodes": [ + { + "title": "Build #95853 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2021-04-25T22:24:54Z", + "committedDate": "2021-04-25T22:24:54Z", + "pushedDate": "2021-04-25T22:25:04Z", + "oid": "5337ea17b2407707bead503cd20c9ca29438f5df", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDgyNjM5OTk2OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@Phong6698 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 which I will keep updated.***\n\n## 1 package in this PR\n\n* `vertx__eventbus-bridge-client.js` (*new!*) [on npm](https://www.npmjs.com/package/@vertx/eventbus-bridge-client.js), [on unpkg](https://unpkg.com/browse/@vertx/eventbus-bridge-client.js@latest/)\n - 1 added owner: ✎@Phong6698\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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": "2021-04-25T22:28:24Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDgyNjM5OTk3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @Phong6698 — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52579/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2021-04-25T22:28:24Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDgyNjQwMDU1Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\nThese typings are for a package that doesn’t yet exist on master, so I don’t have anything to compare against yet! In the future, I’ll be able to compare PRs to vertx__eventbus-bridge-client.js with its source on master.\n\n\n
\nComparison details 📊\n\n| **Batch compilation** | |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Type count | 2159 |\n| Assignability cache size | 95 |\n| | |\n| **Language service measurements** | |\n| Samples taken | 3 |\n| Identifiers in tests | 3 |\n| **`getCompletionsAtPosition`** | |\n|     Mean duration (ms) | 121.8 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 33.7% |\n|     Worst duration (ms) | 135.1 |\n|     Worst identifier | [EventBus](/DefinitelyTyped/DefinitelyTyped/blob/43964b6b3855ea074d509c41d4d60cd9e2f8db28/types/vertx__eventbus-bridge-client.js/vertx__eventbus-bridge-client.js-tests.ts#L3) |\n| **`getQuickInfoAtPosition`** | |\n|     Mean duration (ms) | 104.1 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 19.0% |\n|     Worst duration (ms) | 109.4 |\n|     Worst identifier | [EventBus](/DefinitelyTyped/DefinitelyTyped/blob/43964b6b3855ea074d509c41d4d60cd9e2f8db28/types/vertx__eventbus-bridge-client.js/vertx__eventbus-bridge-client.js-tests.ts#L3) |\n| | |\n| **System information** | |\n| Node version | v14.16.1 |\n| CPU count | 2 |\n| CPU speed | 2.294 GHz |\n| CPU model | Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz |\n| CPU Architecture | x64 |\n| Memory | 6.8 GiB |\n| Platform | linux |\n| Release | 4.15.0-1113-azure |\n\n\n
\n", + "createdAt": "2021-04-25T22:33:17Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 4, + "nodes": [ + { + "path": "package.json", + "additions": 39, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/vertx__eventbus-bridge-client.js/tsconfig.json", + "additions": 23, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/vertx__eventbus-bridge-client.js/tslint.json", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/vertx__eventbus-bridge-client.js/vertx__eventbus-bridge-client.js-tests.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNTk3OTk5NDQ=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2", + "name": "Needs Maintainer Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/52579-edits-infra/derived.json b/packages/mergebot/src/_tests/fixtures/52579-edits-infra/derived.json new file mode 100644 index 0000000000..d3fd0cfc20 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52579-edits-infra/derived.json @@ -0,0 +1,60 @@ +{ + "type": "info", + "now": "2021-04-26T11:48:53.676Z", + "pr_number": 52579, + "author": "Phong6698", + "headCommitOid": "5337ea17b2407707bead503cd20c9ca29438f5df", + "mergeBaseOid": "master", + "lastPushDate": "2021-04-25T22:25:04.000Z", + "lastActivityDate": "2021-04-25T22:27:45.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": null, + "kind": "edit", + "files": [ + { + "path": "package.json", + "kind": "infrastructure" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical", + "isSafeInfrastructureEdit": false + }, + { + "name": "vertx__eventbus-bridge-client.js", + "kind": "add", + "files": [ + { + "path": "types/vertx__eventbus-bridge-client.js/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/vertx__eventbus-bridge-client.js/tslint.json", + "kind": "package-meta", + "suspect": "edited" + }, + { + "path": "types/vertx__eventbus-bridge-client.js/vertx__eventbus-bridge-client.js-tests.ts", + "kind": "test" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "action_required", + "reRunCheckSuiteIDs": [ + 123456 + ] +} diff --git a/packages/mergebot/src/_tests/fixtures/52579-edits-infra/mutations.json b/packages/mergebot/src/_tests/fixtures/52579-edits-infra/mutations.json new file mode 100644 index 0000000000..78177653db --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52579-edits-infra/mutations.json @@ -0,0 +1,33 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDgyNjM5OTk2OA==", + "body": "@Phong6698 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\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and infra files)\n\n* `vertx__eventbus-bridge-client.js` (*new!*) — [on npm](https://www.npmjs.com/package/@vertx/eventbus-bridge-client.js), [on unpkg](https://unpkg.com/browse/@vertx/eventbus-bridge-client.js@latest/)\n - Config files to check:\n - [`vertx__eventbus-bridge-client.js/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52579/files/5337ea17b2407707bead503cd20c9ca29438f5df#diff-7a7a9c37f9e343e2d23c2035a897f76a6b7eb960c9758448fab35553c655621e): edited\n* Infra files\n - [`package.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52579/files/5337ea17b2407707bead503cd20c9ca29438f5df#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519)\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=52579&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🔐 Continuous integration tests waiting for a maintainer to authorize a run\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyOTUzOTk2NDAx", + "MDU6TGFiZWwxNjA4MjA4ODM1", + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NjIyODUxNTk2" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDgyNjM5OTk3MA==", + "body": "🔔 @Phong6698 — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52579/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/52579-edits-infra/result.json b/packages/mergebot/src/_tests/fixtures/52579-edits-infra/result.json new file mode 100644 index 0000000000..56075b3a2f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52579-edits-infra/result.json @@ -0,0 +1,22 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "The CI is blocked", + "New Definition", + "Edits Infrastructure", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@Phong6698 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\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and infra files)\n\n* `vertx__eventbus-bridge-client.js` (*new!*) — [on npm](https://www.npmjs.com/package/@vertx/eventbus-bridge-client.js), [on unpkg](https://unpkg.com/browse/@vertx/eventbus-bridge-client.js@latest/)\n - Config files to check:\n - [`vertx__eventbus-bridge-client.js/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52579/files/5337ea17b2407707bead503cd20c9ca29438f5df#diff-7a7a9c37f9e343e2d23c2035a897f76a6b7eb960c9758448fab35553c655621e): edited\n* Infra files\n - [`package.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52579/files/5337ea17b2407707bead503cd20c9ca29438f5df#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519)\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=52579&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🔐 Continuous integration tests waiting for a maintainer to authorize a run\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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", + "status": "🔔 @Phong6698 — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52579/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/52579/_downloads.json b/packages/mergebot/src/_tests/fixtures/52579/_downloads.json new file mode 100644 index 0000000000..b06e74596f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52579/_downloads.json @@ -0,0 +1,3 @@ +{ + "vertx__eventbus-bridge-client.js": 0 +} diff --git a/packages/mergebot/src/_tests/fixtures/52579/_files.json b/packages/mergebot/src/_tests/fixtures/52579/_files.json new file mode 100644 index 0000000000..6b20eb2538 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52579/_files.json @@ -0,0 +1,5 @@ +{ + "5337ea17b2407707bead503cd20c9ca29438f5df:types/vertx__eventbus-bridge-client.js/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictFunctionTypes\": true,\n \"strictNullChecks\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"vertx__eventbus-bridge-client.js-tests.ts\"\n ]\n}\n", + "5337ea17b2407707bead503cd20c9ca29438f5df:types/vertx__eventbus-bridge-client.js/tslint.json": "{ \"extends\": \"@definitelytyped/dtslint/dt.json\" }\n", + "5337ea17b2407707bead503cd20c9ca29438f5df:types/vertx__eventbus-bridge-client.js/index.d.ts": "// Type definitions for @vertx/eventbus-bridge-client.js 1.0\n// Project: http://vertx.io\n// Definitions by: Chiramet Phong Penglerd \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\ndeclare namespace EventBus {\n type EventBusStatic = new(url: string, options?: any) => EventBus;\n\n interface EventBus {\n url: string;\n options?: EventBusOptions;\n onopen(): void;\n onerror(error: EventBusError): void;\n onclose(): void;\n registerHandler(address: string, headers?: object, callback?: (error: Error, message: any) => void): void;\n unregisterHandler(address: string, headers?: object, callback?: (error: Error, message: any) => void): void;\n send(address: string, message: any, headers?: object, callback?: (error: Error, message: any) => void): void;\n publish(address: string, message: any, headers?: any): void;\n enableReconnect(enable: boolean): void;\n enablePing(enable: boolean): void;\n close(): void;\n }\n\n interface EventBusOptions {\n vertxbus_reconnect_attempts_max: number; // Max reconnect attempts\n vertxbus_reconnect_delay_min: number; // Initial delay (in ms) before first reconnect attempt\n vertxbus_reconnect_delay_max: number; // Max delay (in ms) between reconnect attempts\n vertxbus_reconnect_exponent: number; // Exponential backoff factor\n vertxbus_randomization_factor: number; // Randomization factor between 0 and 1\n }\n\n interface EventBusError {\n body: string;\n type: string;\n }\n}\n\ndeclare var EventBus: EventBus.EventBusStatic;\nexport = EventBus;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/52579/_response.json b/packages/mergebot/src/_tests/fixtures/52579/_response.json new file mode 100644 index 0000000000..825b58e6d3 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52579/_response.json @@ -0,0 +1,234 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NjIyODUxNTk2", + "title": "new definition for @vertx/eventbus-bridge-client.js", + "createdAt": "2021-04-25T22:27:45Z", + "author": { + "login": "Phong6698", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 52579, + "state": "OPEN", + "headRefOid": "5337ea17b2407707bead503cd20c9ca29438f5df", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-04-25T22:30:06Z", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/5337ea17b2407707bead503cd20c9ca29438f5df/checks?check_suite_id=2579289453", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/5337ea17b2407707bead503cd20c9ca29438f5df/checks?check_suite_id=2579289453", + "checkRuns": { + "nodes": [ + { + "title": "build", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 123456, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "ACTION_REQUIRED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/5337ea17b2407707bead503cd20c9ca29438f5df/checks?check_suite_id=2579289527", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/5337ea17b2407707bead503cd20c9ca29438f5df/checks?check_suite_id=2579289527", + "checkRuns": { + "nodes": [], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/5337ea17b2407707bead503cd20c9ca29438f5df/checks?check_suite_id=2579289989", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/5337ea17b2407707bead503cd20c9ca29438f5df/checks?check_suite_id=2579289989", + "checkRuns": { + "nodes": [ + { + "title": "Build #95853 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2021-04-25T22:24:54Z", + "committedDate": "2021-04-25T22:24:54Z", + "pushedDate": "2021-04-25T22:25:04Z", + "oid": "5337ea17b2407707bead503cd20c9ca29438f5df", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDgyNjM5OTk2OA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@Phong6698 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 which I will keep updated.***\n\n## 1 package in this PR\n\n* `vertx__eventbus-bridge-client.js` (*new!*) [on npm](https://www.npmjs.com/package/@vertx/eventbus-bridge-client.js), [on unpkg](https://unpkg.com/browse/@vertx/eventbus-bridge-client.js@latest/)\n - 1 added owner: ✎@Phong6698\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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": "2021-04-25T22:28:24Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDgyNjM5OTk3MA==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @Phong6698 — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52579/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2021-04-25T22:28:24Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDgyNjQwMDU1Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "\n\n👋 **Hi there!** I’ve run some quick measurements against master and your PR. These metrics should help the humans reviewing this PR gauge whether it might negatively affect compile times or editor responsiveness for users who install these typings.\n\n\nLet’s review the numbers, shall we?\n\nThese typings are for a package that doesn’t yet exist on master, so I don’t have anything to compare against yet! In the future, I’ll be able to compare PRs to vertx__eventbus-bridge-client.js with its source on master.\n\n\n
\nComparison details 📊\n\n| **Batch compilation** | |\n| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Type count | 2159 |\n| Assignability cache size | 95 |\n| | |\n| **Language service measurements** | |\n| Samples taken | 3 |\n| Identifiers in tests | 3 |\n| **`getCompletionsAtPosition`** | |\n|     Mean duration (ms) | 121.8 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 33.7% |\n|     Worst duration (ms) | 135.1 |\n|     Worst identifier | [EventBus](/DefinitelyTyped/DefinitelyTyped/blob/43964b6b3855ea074d509c41d4d60cd9e2f8db28/types/vertx__eventbus-bridge-client.js/vertx__eventbus-bridge-client.js-tests.ts#L3) |\n| **`getQuickInfoAtPosition`** | |\n|     Mean duration (ms) | 104.1 |\n|     Mean [CV](https://en.wikipedia.org/wiki/Coefficient_of_variation) | 19.0% |\n|     Worst duration (ms) | 109.4 |\n|     Worst identifier | [EventBus](/DefinitelyTyped/DefinitelyTyped/blob/43964b6b3855ea074d509c41d4d60cd9e2f8db28/types/vertx__eventbus-bridge-client.js/vertx__eventbus-bridge-client.js-tests.ts#L3) |\n| | |\n| **System information** | |\n| Node version | v14.16.1 |\n| CPU count | 2 |\n| CPU speed | 2.294 GHz |\n| CPU model | Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz |\n| CPU Architecture | x64 |\n| Memory | 6.8 GiB |\n| Platform | linux |\n| Release | 4.15.0-1113-azure |\n\n\n
\n", + "createdAt": "2021-04-25T22:33:17Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 4, + "nodes": [ + { + "path": "types/vertx__eventbus-bridge-client.js/index.d.ts", + "additions": 39, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/vertx__eventbus-bridge-client.js/tsconfig.json", + "additions": 23, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/vertx__eventbus-bridge-client.js/tslint.json", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/vertx__eventbus-bridge-client.js/vertx__eventbus-bridge-client.js-tests.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNTk3OTk5NDQ=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2", + "name": "Needs Maintainer Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/52579/derived.json b/packages/mergebot/src/_tests/fixtures/52579/derived.json new file mode 100644 index 0000000000..1c73d71188 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52579/derived.json @@ -0,0 +1,51 @@ +{ + "type": "info", + "now": "2021-04-26T11:48:53.676Z", + "pr_number": 52579, + "author": "Phong6698", + "headCommitOid": "5337ea17b2407707bead503cd20c9ca29438f5df", + "mergeBaseOid": "master", + "lastPushDate": "2021-04-25T22:25:04.000Z", + "lastActivityDate": "2021-04-25T22:27:45.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "vertx__eventbus-bridge-client.js", + "kind": "add", + "files": [ + { + "path": "types/vertx__eventbus-bridge-client.js/index.d.ts", + "kind": "definition" + }, + { + "path": "types/vertx__eventbus-bridge-client.js/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/vertx__eventbus-bridge-client.js/tslint.json", + "kind": "package-meta", + "suspect": "edited" + }, + { + "path": "types/vertx__eventbus-bridge-client.js/vertx__eventbus-bridge-client.js-tests.ts", + "kind": "test" + } + ], + "owners": [], + "addedOwners": [ + "Phong6698" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "ciResult": "action_required", + "reRunCheckSuiteIDs": [ + 123456 + ] +} diff --git a/packages/mergebot/src/_tests/fixtures/52579/mutations.json b/packages/mergebot/src/_tests/fixtures/52579/mutations.json new file mode 100644 index 0000000000..7687689e66 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52579/mutations.json @@ -0,0 +1,35 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDgyNjM5OTk2OA==", + "body": "@Phong6698 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* `vertx__eventbus-bridge-client.js` (*new!*) — [on npm](https://www.npmjs.com/package/@vertx/eventbus-bridge-client.js), [on unpkg](https://unpkg.com/browse/@vertx/eventbus-bridge-client.js@latest/)\n - 1 added owner: ✎@Phong6698\n - Config files to check:\n - [`vertx__eventbus-bridge-client.js/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52579/files/5337ea17b2407707bead503cd20c9ca29438f5df#diff-7a7a9c37f9e343e2d23c2035a897f76a6b7eb960c9758448fab35553c655621e): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=52579&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NjIyODUxNTk2" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNTk3OTk5NDQ=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw" + } + } + }, + { + "method": "POST", + "op": "check-suites/123456/rerequest" + } +] diff --git a/packages/mergebot/src/_tests/fixtures/52579/result.json b/packages/mergebot/src/_tests/fixtures/52579/result.json new file mode 100644 index 0000000000..9c04bb5e53 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52579/result.json @@ -0,0 +1,23 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "New Definition", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@Phong6698 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* `vertx__eventbus-bridge-client.js` (*new!*) — [on npm](https://www.npmjs.com/package/@vertx/eventbus-bridge-client.js), [on unpkg](https://unpkg.com/browse/@vertx/eventbus-bridge-client.js@latest/)\n - 1 added owner: ✎@Phong6698\n - Config files to check:\n - [`vertx__eventbus-bridge-client.js/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52579/files/5337ea17b2407707bead503cd20c9ca29438f5df#diff-7a7a9c37f9e343e2d23c2035a897f76a6b7eb960c9758448fab35553c655621e): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=52579&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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", + "status": "🔔 @Phong6698 — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52579/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true, + "reRunActionsCheckSuiteIDs": [ + 123456 + ] +} diff --git a/packages/mergebot/src/_tests/fixtures/52848/_downloads.json b/packages/mergebot/src/_tests/fixtures/52848/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52848/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/52848/_files.json b/packages/mergebot/src/_tests/fixtures/52848/_files.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52848/_files.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/52848/_response.json b/packages/mergebot/src/_tests/fixtures/52848/_response.json new file mode 100644 index 0000000000..472a8b29f9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52848/_response.json @@ -0,0 +1,245 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NjM3MDk5NjE4", + "title": "update some Chinese translation", + "createdAt": "2021-05-10T07:59:10Z", + "author": { + "login": "Runtu4378", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Edits Infrastructure", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 52848, + "state": "OPEN", + "headRefOid": "14499debca98ea23cfc47a80a288d5bd32798cff", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "elibarzilay", + "__typename": "User" + }, + "createdAt": "2021-05-10T15:42:52Z", + "projectColumnName": "Waiting for Author to Merge", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-05-10T15:43:44Z", + "projectColumnName": "Needs Maintainer Action", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 2696551272, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/14499debca98ea23cfc47a80a288d5bd32798cff/checks?check_suite_id=2696551272", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/14499debca98ea23cfc47a80a288d5bd32798cff/checks?check_suite_id=2696551272", + "checkRuns": { + "nodes": [ + { + "title": "build", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 2696551642, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/14499debca98ea23cfc47a80a288d5bd32798cff/checks?check_suite_id=2696551642", + "status": "IN_PROGRESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/14499debca98ea23cfc47a80a288d5bd32798cff/checks?check_suite_id=2696551642", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 2696551646, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/14499debca98ea23cfc47a80a288d5bd32798cff/checks?check_suite_id=2696551646", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/14499debca98ea23cfc47a80a288d5bd32798cff/checks?check_suite_id=2696551646", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 2696552691, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/14499debca98ea23cfc47a80a288d5bd32798cff/checks?check_suite_id=2696552691", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/14499debca98ea23cfc47a80a288d5bd32798cff/checks?check_suite_id=2696552691", + "checkRuns": { + "nodes": [ + { + "title": "Build #97749 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2021-05-10T07:57:06Z", + "committedDate": "2021-05-10T07:57:06Z", + "pushedDate": "2021-05-10T07:57:17Z", + "oid": "14499debca98ea23cfc47a80a288d5bd32798cff", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 2, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDgzNjMyODk5Mg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "@Runtu4378 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 which I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 0 packages in this PR (and infra files)\n\n* Infra files\n - [`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52848/files/14499debca98ea23cfc47a80a288d5bd32798cff#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235)\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed.\n\n## Status\n\n * ✅ No merge conflicts\n * ✅ Continuous integration tests have passed\n * 🕐 A DT maintainer needs to approve changes which affect DT infrastructure ([`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52848/files/14499debca98ea23cfc47a80a288d5bd32798cff#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235))\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": "2021-05-10T07:59:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDgzNjMyOTAwMg==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "body": "🔔 @Runtu4378 — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52848/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2021-05-10T07:59:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 1, + "nodes": [ + { + "path": "README.cn.md", + "additions": 81, + "deletions": 56, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNjA3NjQ2MTM=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2", + "name": "Needs Maintainer Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/52848/derived.json b/packages/mergebot/src/_tests/fixtures/52848/derived.json new file mode 100644 index 0000000000..05f3083fab --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52848/derived.json @@ -0,0 +1,35 @@ +{ + "type": "info", + "now": "2021-05-10T15:46:37.788Z", + "pr_number": 52848, + "author": "Runtu4378", + "headCommitOid": "14499debca98ea23cfc47a80a288d5bd32798cff", + "mergeBaseOid": "master", + "lastPushDate": "2021-05-10T07:57:17.000Z", + "lastActivityDate": "2021-05-10T15:42:52.000Z", + "maintainerBlessed": "Waiting for Author to Merge", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": null, + "kind": "edit", + "files": [ + { + "path": "README.cn.md", + "kind": "infrastructure" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical", + "isSafeInfrastructureEdit": false + } + ], + "reviews": [], + "ciResult": "unknown" +} diff --git a/packages/mergebot/src/_tests/fixtures/52848/mutations.json b/packages/mergebot/src/_tests/fixtures/52848/mutations.json new file mode 100644 index 0000000000..f8bad65fed --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52848/mutations.json @@ -0,0 +1,29 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDgzNjMyODk5Mg==", + "body": "@Runtu4378 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\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 0 packages in this PR (and infra files)\n\n* Infra files\n - [`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52848/files/14499debca98ea23cfc47a80a288d5bd32798cff#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235)\n\n## Code Reviews\n\nThis PR can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=52848&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * ✅ A DT maintainer needs to approve changes that affect DT infrastructure ([`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52848/files/14499debca98ea23cfc47a80a288d5bd32798cff#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235))\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" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "MDExOlByb2plY3RDYXJkNjA3NjQ2MTM=", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDgzNjMyOTAwMg==", + "body": "🔔 @Runtu4378 — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52848/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/52848/result.json b/packages/mergebot/src/_tests/fixtures/52848/result.json new file mode 100644 index 0000000000..a771b7d4ae --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/52848/result.json @@ -0,0 +1,19 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Edits Infrastructure" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@Runtu4378 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\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 0 packages in this PR (and infra files)\n\n* Infra files\n - [`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52848/files/14499debca98ea23cfc47a80a288d5bd32798cff#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235)\n\n## Code Reviews\n\nThis PR can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=52848&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * ✅ A DT maintainer needs to approve changes that affect DT infrastructure ([`README.cn.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52848/files/14499debca98ea23cfc47a80a288d5bd32798cff#diff-97a2a8d47e133a2b24ad7bc1a2e25710f534470e28a73efb62da312a3bb19235))\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", + "status": "🔔 @Runtu4378 — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/52848/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/53121/_downloads.json b/packages/mergebot/src/_tests/fixtures/53121/_downloads.json new file mode 100644 index 0000000000..ae177e3d2c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/53121/_downloads.json @@ -0,0 +1,3 @@ +{ + "mathjs": 498592 +} diff --git a/packages/mergebot/src/_tests/fixtures/53121/_files.json b/packages/mergebot/src/_tests/fixtures/53121/_files.json new file mode 100644 index 0000000000..99e071478a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/53121/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/mathjs/index.d.ts": "// Type definitions for mathjs 9.3\n// Project: https://mathjs.org/\n// Definitions by: Ilya Shestakov ,\n// Andy Patterson ,\n// Brad Besserman ,\n// Pawel Krol ,\n// Charlee Li ,\n// Mark Wiemer \n// Opportunity Liu \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.2\n\nimport { Decimal } from \"decimal.js\";\n\ndeclare const math: math.MathJsStatic;\nexport as namespace math;\nexport = math;\n\ntype NoLiteralType = T extends number ? number : T extends string ? string : T extends boolean ? boolean : T;\ndeclare namespace math {\n type MathArray = number[] | number[][];\n type MathType = number | BigNumber | Fraction | Complex | Unit | MathArray | Matrix;\n type MathExpression = string | string[] | MathArray | Matrix;\n\n type FactoryFunction = (scope: any) => T;\n\n // FactoryFunctionMap can be nested; all nested objects will be flattened\n interface FactoryFunctionMap {\n [key: string]: FactoryFunction | FactoryFunctionMap;\n }\n\n /** Available options for parse */\n interface ParseOptions {\n /** a set of custom nodes */\n nodes?: Record;\n }\n /**\n * Parse an expression. Returns a node tree, which can be evaluated by\n * invoking node.evaluate().\n *\n * Note the evaluating arbitrary expressions may involve security risks,\n * see [https://mathjs.org/docs/expressions/security.html](https://mathjs.org/docs/expressions/security.html) for more information.\n *\n * Syntax:\n *\n * math.parse(expr)\n * math.parse(expr, options)\n * math.parse([expr1, expr2, expr3, ...])\n * math.parse([expr1, expr2, expr3, ...], options)\n *\n * Example:\n *\n * const node1 = math.parse('sqrt(3^2 + 4^2)')\n * node1.compile().evaluate() // 5\n *\n * let scope = {a:3, b:4}\n * const node2 = math.parse('a * b') // 12\n * const code2 = node2.compile()\n * code2.evaluate(scope) // 12\n * scope.a = 5\n * code2.evaluate(scope) // 20\n *\n * const nodes = math.parse(['a = 3', 'b = 4', 'a * b'])\n * nodes[2].compile().evaluate() // 12\n *\n * See also:\n *\n * evaluate, compile\n */\n interface ParseFunction {\n /**\n * Parse an expression. Returns a node tree, which can be evaluated by\n * invoking node.evaluate();\n *\n * @param expr Expression to be parsed\n * @param options Available options\n * @returns A node\n */\n (expr: MathExpression, options?: ParseOptions): MathNode;\n\n /**\n * Parse an expression. Returns a node tree, which can be evaluated by\n * invoking node.evaluate();\n *\n * @param exprs Expressions to be parsed\n * @param options Available options\n * @returns An array of nodes\n */\n (exprs: MathExpression[], options?: ParseOptions): MathNode[];\n\n /**\n * Checks whether the current character `c` is a valid alpha character:\n *\n * - A latin letter (upper or lower case) Ascii: a-z, A-Z\n * - An underscore Ascii: _\n * - A dollar sign Ascii: $\n * - A latin letter with accents Unicode: \\u00C0 - \\u02AF\n * - A greek letter Unicode: \\u0370 - \\u03FF\n * - A mathematical alphanumeric symbol Unicode: \\u{1D400} - \\u{1D7FF} excluding invalid code points\n *\n * The previous and next characters are needed to determine whether\n * this character is part of a unicode surrogate pair.\n *\n * @param c Current character in the expression\n * @param cPrev Previous character\n * @param cNext Next character\n */\n isAlpha(c: string, cPrev: string, cNext: string): boolean;\n /**\n * Test whether a character is a valid latin, greek, or letter-like character\n *\n * @param c\n */\n isValidLatinOrGreek(c: string): boolean;\n /**\n * Test whether two given 16 bit characters form a surrogate pair of a\n * unicode math symbol.\n *\n * https://unicode-table.com/en/\n * https://www.wikiwand.com/en/Mathematical_operators_and_symbols_in_Unicode\n *\n * Note: In ES6 will be unicode aware:\n * https://stackoverflow.com/questions/280712/javascript-unicode-regexes\n * https://mathiasbynens.be/notes/es6-unicode-regex\n *\n * @param high\n * @param low\n */\n isValidMathSymbol(high: string, low: string): boolean;\n /**\n * Check whether given character c is a white space character: space, tab, or enter\n *\n * @param c\n * @param nestingLevel\n */\n isWhitespace(c: string, nestingLevel: number): boolean;\n /**\n * Test whether the character c is a decimal mark (dot).\n * This is the case when it's not the start of a delimiter '.*', './', or '.^'\n *\n * @param c\n * @param cNext\n */\n isDecimalMark(c: string, cNext: string): boolean;\n /**\n * checks if the given char c is a digit or dot\n *\n * @param c a string with one character\n */\n isDigitDot(c: string): boolean;\n /**\n * checks if the given char c is a digit\n *\n * @param c a string with one character\n */\n isDigit(c: string): boolean;\n /**\n * checks if the given char c is a hex digit\n *\n * @param c a string with one character\n */\n isHexDigit(c: string): boolean;\n }\n\n type MathJsFunctionName = keyof MathJsStatic;\n\n interface MathJsStatic extends FactoryDependencies {\n e: number;\n pi: number;\n i: number;\n Infinity: number;\n LN2: number;\n LN10: number;\n LOG2E: number;\n LOG10E: number;\n NaN: number;\n phi: number;\n SQRT1_2: number;\n SQRT2: number;\n tau: number;\n\n uninitialized: any;\n version: string;\n\n expression: MathNode;\n json: MathJsJson;\n\n /**\n * If null were to be included in this interface, it would be\n * auto-suggested as an import in VSCode. This causes issues because\n * `null` is not a valid label.\n *\n * @see https://github.com/josdejong/mathjs/issues/2019\n */\n // null: number;\n\n /*************************************************************************\n * Core functions\n ************************************************************************/\n\n /**\n * Set configuration options for math.js, and get current options. Will\n * emit a ‘config’ event, with arguments (curr, prev, changes).\n * @param options Available options: {number} epsilon Minimum relative\n * difference between two compared values, used by all comparison\n * functions. {string} matrix A string ‘Matrix’ (default) or ‘Array’.\n * {string} number A string ‘number’ (default), ‘BigNumber’, or\n * ‘Fraction’ {number} precision The number of significant digits for\n * BigNumbers. Not applicable for Numbers. {string} parenthesis How to\n * display parentheses in LaTeX and string output. {string} randomSeed\n * Random seed for seeded pseudo random number generator. Set to null to\n * randomly seed.\n * @returns Returns the current configuration\n */\n config: (options: ConfigOptions) => ConfigOptions;\n /**\n * Create a typed-function which checks the types of the arguments and\n * can match them against multiple provided signatures. The\n * typed-function automatically converts inputs in order to find a\n * matching signature. Typed functions throw informative errors in case\n * of wrong input arguments.\n * @param name Optional name for the typed-function\n * @param signatures Object with one or multiple function signatures\n * @returns The created typed-function.\n */\n typed: (name: string, signatures: Record any>) => (...args: any[]) => any;\n\n /*************************************************************************\n * Construction functions\n ************************************************************************/\n\n /**\n * Create a BigNumber, which can store numbers with arbitrary precision.\n * When a matrix is provided, all elements will be converted to\n * BigNumber.\n * @param x Value for the big number, 0 by default.\n * @returns The created bignumber\n */\n bignumber(\n x?: number | string | Fraction | BigNumber | MathArray | Matrix | boolean | Fraction | null,\n ): BigNumber;\n\n /**\n * Create a boolean or convert a string or number to a boolean. In case\n * of a number, true is returned for non-zero numbers, and false in case\n * of zero. Strings can be 'true' or 'false', or can contain a number.\n * When value is a matrix, all elements will be converted to boolean.\n * @param x A value of any type\n * @returns The boolean value\n */\n boolean(x: string | number | boolean | MathArray | Matrix | null): boolean | MathArray | Matrix;\n\n /**\n * Wrap any value in a chain, allowing to perform chained operations on\n * the value. All methods available in the math.js library can be called\n * upon the chain, and then will be evaluated with the value itself as\n * first argument. The chain can be closed by executing chain.done(),\n * which returns the final value. The chain has a number of spec", + "c13f5d7c969561db0ac38464086406b6554e711c:types/mathjs/index.d.ts": "// Type definitions for mathjs 9.3\n// Project: https://mathjs.org/\n// Definitions by: Ilya Shestakov ,\n// Andy Patterson ,\n// Brad Besserman ,\n// Pawel Krol ,\n// Charlee Li ,\n// Mark Wiemer \n// Opportunity Liu \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.2\n\nimport { Decimal } from \"decimal.js\";\n\ndeclare const math: math.MathJsStatic;\nexport as namespace math;\nexport = math;\n\ntype NoLiteralType = T extends number ? number : T extends string ? string : T extends boolean ? boolean : T;\ndeclare namespace math {\n type MathArray = number[] | number[][];\n type MathType = number | BigNumber | Fraction | Complex | Unit | MathArray | Matrix;\n type MathExpression = string | string[] | MathArray | Matrix;\n\n type FactoryFunction = (scope: any) => T;\n\n // FactoryFunctionMap can be nested; all nested objects will be flattened\n interface FactoryFunctionMap {\n [key: string]: FactoryFunction | FactoryFunctionMap;\n }\n\n /** Available options for parse */\n interface ParseOptions {\n /** a set of custom nodes */\n nodes?: Record;\n }\n /**\n * Parse an expression. Returns a node tree, which can be evaluated by\n * invoking node.evaluate().\n *\n * Note the evaluating arbitrary expressions may involve security risks,\n * see [https://mathjs.org/docs/expressions/security.html](https://mathjs.org/docs/expressions/security.html) for more information.\n *\n * Syntax:\n *\n * math.parse(expr)\n * math.parse(expr, options)\n * math.parse([expr1, expr2, expr3, ...])\n * math.parse([expr1, expr2, expr3, ...], options)\n *\n * Example:\n *\n * const node1 = math.parse('sqrt(3^2 + 4^2)')\n * node1.compile().evaluate() // 5\n *\n * let scope = {a:3, b:4}\n * const node2 = math.parse('a * b') // 12\n * const code2 = node2.compile()\n * code2.evaluate(scope) // 12\n * scope.a = 5\n * code2.evaluate(scope) // 20\n *\n * const nodes = math.parse(['a = 3', 'b = 4', 'a * b'])\n * nodes[2].compile().evaluate() // 12\n *\n * See also:\n *\n * evaluate, compile\n */\n interface ParseFunction {\n /**\n * Parse an expression. Returns a node tree, which can be evaluated by\n * invoking node.evaluate();\n *\n * @param expr Expression to be parsed\n * @param options Available options\n * @returns A node\n */\n (expr: MathExpression, options?: ParseOptions): MathNode;\n\n /**\n * Parse an expression. Returns a node tree, which can be evaluated by\n * invoking node.evaluate();\n *\n * @param exprs Expressions to be parsed\n * @param options Available options\n * @returns An array of nodes\n */\n (exprs: MathExpression[], options?: ParseOptions): MathNode[];\n\n /**\n * Checks whether the current character `c` is a valid alpha character:\n *\n * - A latin letter (upper or lower case) Ascii: a-z, A-Z\n * - An underscore Ascii: _\n * - A dollar sign Ascii: $\n * - A latin letter with accents Unicode: \\u00C0 - \\u02AF\n * - A greek letter Unicode: \\u0370 - \\u03FF\n * - A mathematical alphanumeric symbol Unicode: \\u{1D400} - \\u{1D7FF} excluding invalid code points\n *\n * The previous and next characters are needed to determine whether\n * this character is part of a unicode surrogate pair.\n *\n * @param c Current character in the expression\n * @param cPrev Previous character\n * @param cNext Next character\n */\n isAlpha(c: string, cPrev: string, cNext: string): boolean;\n /**\n * Test whether a character is a valid latin, greek, or letter-like character\n *\n * @param c\n */\n isValidLatinOrGreek(c: string): boolean;\n /**\n * Test whether two given 16 bit characters form a surrogate pair of a\n * unicode math symbol.\n *\n * https://unicode-table.com/en/\n * https://www.wikiwand.com/en/Mathematical_operators_and_symbols_in_Unicode\n *\n * Note: In ES6 will be unicode aware:\n * https://stackoverflow.com/questions/280712/javascript-unicode-regexes\n * https://mathiasbynens.be/notes/es6-unicode-regex\n *\n * @param high\n * @param low\n */\n isValidMathSymbol(high: string, low: string): boolean;\n /**\n * Check whether given character c is a white space character: space, tab, or enter\n *\n * @param c\n * @param nestingLevel\n */\n isWhitespace(c: string, nestingLevel: number): boolean;\n /**\n * Test whether the character c is a decimal mark (dot).\n * This is the case when it's not the start of a delimiter '.*', './', or '.^'\n *\n * @param c\n * @param cNext\n */\n isDecimalMark(c: string, cNext: string): boolean;\n /**\n * checks if the given char c is a digit or dot\n *\n * @param c a string with one character\n */\n isDigitDot(c: string): boolean;\n /**\n * checks if the given char c is a digit\n *\n * @param c a string with one character\n */\n isDigit(c: string): boolean;\n /**\n * checks if the given char c is a hex digit\n *\n * @param c a string with one character\n */\n isHexDigit(c: string): boolean;\n }\n\n type MathJsFunctionName = keyof MathJsStatic;\n\n interface MathJsStatic extends FactoryDependencies {\n e: number;\n pi: number;\n i: number;\n Infinity: number;\n LN2: number;\n LN10: number;\n LOG2E: number;\n LOG10E: number;\n NaN: number;\n phi: number;\n SQRT1_2: number;\n SQRT2: number;\n tau: number;\n\n uninitialized: any;\n version: string;\n\n expression: MathNode;\n json: MathJsJson;\n\n /**\n * If null were to be included in this interface, it would be\n * auto-suggested as an import in VSCode. This causes issues because\n * `null` is not a valid label.\n *\n * @see https://github.com/josdejong/mathjs/issues/2019\n */\n // null: number;\n\n /*************************************************************************\n * Core functions\n ************************************************************************/\n\n /**\n * Set configuration options for math.js, and get current options. Will\n * emit a ‘config’ event, with arguments (curr, prev, changes).\n * @param options Available options: {number} epsilon Minimum relative\n * difference between two compared values, used by all comparison\n * functions. {string} matrix A string ‘Matrix’ (default) or ‘Array’.\n * {string} number A string ‘number’ (default), ‘BigNumber’, or\n * ‘Fraction’ {number} precision The number of significant digits for\n * BigNumbers. Not applicable for Numbers. {string} parenthesis How to\n * display parentheses in LaTeX and string output. {string} randomSeed\n * Random seed for seeded pseudo random number generator. Set to null to\n * randomly seed.\n * @returns Returns the current configuration\n */\n config: (options: ConfigOptions) => ConfigOptions;\n /**\n * Create a typed-function which checks the types of the arguments and\n * can match them against multiple provided signatures. The\n * typed-function automatically converts inputs in order to find a\n * matching signature. Typed functions throw informative errors in case\n * of wrong input arguments.\n * @param name Optional name for the typed-function\n * @param signatures Object with one or multiple function signatures\n * @returns The created typed-function.\n */\n typed: (name: string, signatures: Record any>) => (...args: any[]) => any;\n\n /*************************************************************************\n * Construction functions\n ************************************************************************/\n\n /**\n * Create a BigNumber, which can store numbers with arbitrary precision.\n * When a matrix is provided, all elements will be converted to\n * BigNumber.\n * @param x Value for the big number, 0 by default.\n * @returns The created bignumber\n */\n bignumber(\n x?: number | string | Fraction | BigNumber | MathArray | Matrix | boolean | Fraction | null,\n ): BigNumber;\n\n /**\n * Create a boolean or convert a string or number to a boolean. In case\n * of a number, true is returned for non-zero numbers, and false in case\n * of zero. Strings can be 'true' or 'false', or can contain a number.\n * When value is a matrix, all elements will be converted to boolean.\n * @param x A value of any type\n * @returns The boolean value\n */\n boolean(x: string | number | boolean | MathArray | Matrix | null): boolean | MathArray | Matrix;\n\n /**\n * Wrap any value in a chain, allowing to perform chained operations on\n * the value. All methods available in the math.js library can be called\n * upon the chain, and then will be evaluated with the value itself as\n * first argument. The chain can be closed by executing chain.done(),\n * which returns the final value. The chain has a number of spec" +} diff --git a/packages/mergebot/src/_tests/fixtures/53121/_response.json b/packages/mergebot/src/_tests/fixtures/53121/_response.json new file mode 100644 index 0000000000..72929b566b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/53121/_response.json @@ -0,0 +1,213 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NjQ4NjIzMjYy", + "title": "[mathjs]: Fix simplify argument types", + "createdAt": "2021-05-20T09:16:27Z", + "author": { + "login": "nitroin", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Popular package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 53121, + "state": "OPEN", + "headRefOid": "c13f5d7c969561db0ac38464086406b6554e711c", + "changedFiles": 2, + "commitIds": {}, + "timelineItems": { + "nodes": [], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 2787240197, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/c13f5d7c969561db0ac38464086406b6554e711c/checks?check_suite_id=2787240197", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/c13f5d7c969561db0ac38464086406b6554e711c/checks?check_suite_id=2787240197", + "checkRuns": { + "nodes": [ + { + "title": "build", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 2787240441, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/c13f5d7c969561db0ac38464086406b6554e711c/checks?check_suite_id=2787240441", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/c13f5d7c969561db0ac38464086406b6554e711c/checks?check_suite_id=2787240441", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 2787241779, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/c13f5d7c969561db0ac38464086406b6554e711c/checks?check_suite_id=2787241779", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/c13f5d7c969561db0ac38464086406b6554e711c/checks?check_suite_id=2787241779", + "checkRuns": { + "nodes": [ + { + "title": "Build #20210520.18 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2021-05-20T09:09:10Z", + "committedDate": "2021-05-20T09:09:10Z", + "pushedDate": "2021-05-20T09:10:15Z", + "oid": "c13f5d7c969561db0ac38464086406b6554e711c", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 2, + "nodes": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDg0NDg5OTYzOQ==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 844899639, + "body": "@nitroin 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 which I will keep updated.***\n\n## 1 package in this PR\n\n* `mathjs` — [on npm](https://www.npmjs.com/package/mathjs), [on unpkg](https://unpkg.com/browse/mathjs@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), I can help you merge this PR once someone else signs off on it.\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\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": "2021-05-20T09:17:04Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDg0NDg5OTY1Ng==", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 844899656, + "body": "🔔 @siavol @andnp @bradbesserman @pawkrol @charlee @mark-wiemer @OpportunityLiu — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/53121/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": "2021-05-20T09:17:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 2, + "nodes": [ + { + "path": "types/mathjs/index.d.ts", + "additions": 14, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/mathjs/mathjs-tests.ts", + "additions": 16, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "Mg", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "MDExOlByb2plY3RDYXJkNjE0ODYyMDY=", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/53121/derived.json b/packages/mergebot/src/_tests/fixtures/53121/derived.json new file mode 100644 index 0000000000..88dff3675b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/53121/derived.json @@ -0,0 +1,46 @@ +{ + "type": "info", + "now": "2021-05-20T13:55:13.459Z", + "pr_number": 53121, + "author": "nitroin", + "headCommitOid": "c13f5d7c969561db0ac38464086406b6554e711c", + "mergeBaseOid": "master", + "lastPushDate": "2021-05-20T09:10:15.000Z", + "lastActivityDate": "2021-05-20T09:16:27.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": "mathjs", + "kind": "edit", + "files": [ + { + "path": "types/mathjs/index.d.ts", + "kind": "definition" + }, + { + "path": "types/mathjs/mathjs-tests.ts", + "kind": "test" + } + ], + "owners": [ + "siavol", + "andnp", + "bradbesserman", + "pawkrol", + "charlee", + "mark-wiemer", + "OpportunityLiu" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [], + "mainBotCommentID": 844899639, + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/53121/mutations.json b/packages/mergebot/src/_tests/fixtures/53121/mutations.json new file mode 100644 index 0000000000..bd464aa635 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/53121/mutations.json @@ -0,0 +1,11 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "MDEyOklzc3VlQ29tbWVudDg0NDg5OTYzOQ==", + "body": "@nitroin 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* `mathjs` — [on npm](https://www.npmjs.com/package/mathjs), [on unpkg](https://unpkg.com/browse/mathjs@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=53121&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\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/53121/result.json b/packages/mergebot/src/_tests/fixtures/53121/result.json new file mode 100644 index 0000000000..6c331b49e3 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/53121/result.json @@ -0,0 +1,19 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Popular package" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@nitroin 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* `mathjs` — [on npm](https://www.npmjs.com/package/mathjs), [on unpkg](https://unpkg.com/browse/mathjs@latest/)\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=53121&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\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", + "status": "🔔 @siavol @andnp @bradbesserman @pawkrol @charlee @mark-wiemer @OpportunityLiu — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/53121/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/55035/_downloads.json b/packages/mergebot/src/_tests/fixtures/55035/_downloads.json new file mode 100644 index 0000000000..8a36add9e7 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55035/_downloads.json @@ -0,0 +1,3 @@ +{ + "jsreport-core": 5044 +} diff --git a/packages/mergebot/src/_tests/fixtures/55035/_files.json b/packages/mergebot/src/_tests/fixtures/55035/_files.json new file mode 100644 index 0000000000..8dddcf0fe7 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55035/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/jsreport-core/index.d.ts": "// Type definitions for jsreport-core 2.0\n// Project: http://jsreport.net\n// Definitions by: taoqf \n// pofider \n// Keith Kikta \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// \n\nimport * as fs from 'fs';\n\ndeclare namespace JsReport {\n type Helpers = string | { [fun: string]: (...args: any[]) => any };\n\n type Engine = \"none\";\n\n type Recipe = \"html\";\n\n interface TemplateBase {\n /** template for the engine */\n content?: string | undefined;\n /** templating engine used to assemble document */\n engine: Engine | string;\n /** javascript helper functions used by templating engines */\n helpers?: Helpers | undefined;\n /** recipe used for printing previously assembled document */\n recipe: Recipe | string;\n pathToEngine?: string | undefined;\n }\n\n interface Template extends TemplateBase {\n /** template for the engine */\n content: string;\n }\n\n interface TemplateRegistry {\n Template: Template;\n }\n\n type TemplateLike = TemplateRegistry[keyof TemplateRegistry]; // Template | NamedTemplate\n\n interface RequestOptions {\n preview?: boolean | undefined;\n /** sets the request timeout in milliseconds */\n timeout?: number | undefined;\n /** defines the name of the report being to be generated */\n reportName?: string | undefined;\n }\n\n interface Request {\n /** @default true */\n value?: boolean | undefined;\n /** @default false */\n writable?: boolean | undefined;\n /** @default false */\n configurable?: boolean | undefined;\n /** @default false */\n enumerable?: boolean | undefined;\n /** defines the template of used for report generation */\n template: TemplateLike;\n /** defines options such as report name and request timeout */\n options?: Partial | undefined;\n context?: Context | undefined;\n data?: any;\n }\n\n interface Context {\n shared?: any;\n originalInputDataIsEmpty?: boolean | undefined;\n isChildRequest?: boolean | undefined;\n logs: any;\n timeoutLimit: number;\n }\n\n interface Response {\n content: Buffer;\n stream: NodeJS.ReadableStream;\n headers: {\n [header: string]: string | number | boolean;\n };\n }\n\n interface ListenerCollection {\n add(\n type: string,\n callback: (req: Request, res: Response, err?: any) => Promise | void\n ): void;\n }\n\n interface Collection {\n find(query: { [field: string]: any }): Promise;\n update(query: { [field: string]: any }, update: object, options?: object): Promise;\n remove(query: { [field: string]: any }): Promise;\n insert(obj: object): Promise;\n }\n\n interface DocumentStore {\n collection(name: string): Collection;\n }\n\n type Extension = (reporter: Reporter, definition: object) => void;\n\n interface ExtensionDefinition {\n options: any;\n main: any;\n directory: string;\n }\n\n interface ReporterInstance {\n defaults?: Defaults | undefined;\n options?: Configuration | undefined;\n afterRenderListeners: ListenerCollection;\n afterTemplatingEnginesExecutedListeners: ListenerCollection;\n beforeRenderListeners: ListenerCollection;\n closeListeners: ListenerCollection;\n documentStore: DocumentStore;\n blobStorage: BlobStorage;\n initializeListeners: ListenerCollection;\n renderErrorListeners: ListenerCollection;\n // it would be nice to add winston.LoggerInstance here\n // however adding import winston = require('winston') breaks exported enums\n logger?: any;\n validateRenderListeners: ListenerCollection;\n version?: string | undefined;\n settings: Settings;\n optionsValidator: SchemaValidator;\n entityTypeValidator: SchemaValidator;\n }\n\n interface Reporter extends ReporterInstance {\n use(extension: Extension | ExtensionDefinition): Reporter;\n init(): Promise;\n render(request: Request, parent?: Request): Promise;\n discover(): Reporter;\n createListenerCollection(): ListenerCollection;\n close(): Promise;\n extensionsLoad(opts: any): Promise;\n checkValidEntityName(c: string, doc: any, req: Request): Promise;\n createError(message: string, options?: any): any;\n getAvailableRenderTimeout(req: Request, defaultValue: number): number;\n executeScript(inputs: any, options: any, req: Request): Promise;\n afterConfigLoaded(cb: () => void): Reporter;\n addRequestContextMetaConfig(property: any, options: any): void;\n getRequestContextMetaConfig(property: any): any;\n addPathToWatchForAutoCleanup(customPath: string): void;\n getPathsToWatchForAutoCleanup(): string[];\n ensureTempDirectoryExists(): Promise;\n readTempFile(filename: string, opts: any): Promise;\n writeTempFile(filenameFn: () => string, content: any, opts: any): Promise;\n readTempFileStream(filename: string, opts: any): Promise;\n writeTempFileStream(filenameFn: () => string, opts: any): Promise;\n silentLogs(logger: any): void;\n }\n\n interface Defaults {\n loadConfig?: boolean | undefined;\n rootDirectory?: string | undefined;\n }\n\n type ReporterOptionsStoreProvider = 'memory';\n type ReporterOptionsBlobStorageProvider = 'memory' | 'fs';\n type EngineStrategy = 'dedicated-process' | 'http-server' | 'in-process';\n\n interface Configuration {\n mode?: any;\n /** specifies where is the application root and where jsreport searches for extensions */\n rootDirectory?: string | undefined;\n /** specifies directory of the script that was used to start node.js, this value is mostly metadata that is useful for your own code inside jsreport scripts */\n appDirectory?: string | undefined;\n /**\n * specifies where jsreport stores temporary files used by the conversion pipelineDef\n * @default getDefaultTempDirectory()\n */\n tempDirectory?: string | undefined;\n /**\n * specifies if jsreport should load configuration values from external sources (cli args, env vars, configuration files) or not\n * @default getDefaultLoadConfig()\n */\n loadConfig?: boolean | undefined;\n /** specifies if after some interval jsreport should automatically clean up temporary files generated while rendering reports */\n autoTempCleanup?: boolean | undefined;\n /** specifies if jsreport should discover/search installed extensions in project and use them automatically */\n discover?: boolean | undefined;\n /**\n * wheter if jsreport should read list of extensions from a previous generated cache or if it should crawl and try to search extensions again, set it to false when you want to always\n * force crawling node_modules when searching for extensions while starting jsreport\n * @default true\n */\n useExtensionsLocationCache?: boolean | undefined;\n logger?: {\n silent?: boolean | undefined;\n } | undefined;\n /** global single timeout that controls how much a report generation should wait before it times out */\n reportTimeout?: number | undefined;\n /**\n * option that enables passing a custom report timeout per request using req.options.timeout. this enables that the caller of the report generation control the report timeout so enable it\n * only when you trust the caller\n * @default false\n */\n enableRequestReportTimeout?: boolean | undefined;\n /** @default false */\n allowLocalFilesAccess?: boolean | undefined;\n encryption?: {\n /** lenght must be 16 characters */\n secretKey: string;\n /** @default true */\n enabled?: boolean | undefined;\n } | undefined;\n templatingEngines?: {\n /** @default 'dedicated-process' */\n strategy?: EngineStrategy | undefined;\n /**\n * defines the number of worker processes used for generating reports\n * @default 1\n */\n numberOfWorkers?: number | undefined;\n forkOptions?: {\n execArgv?: string | string[] | undefined;\n } | undefined;\n allowedModules?: string | string[] | undefined;\n /** sets the reporter timeout in milliseconds */\n timeout?: number | undefined;\n templateCache?: {\n max: number;\n enabled: boolean;\n } | undefined;\n } | undefined;\n store?: {\n provider?: ReporterOptionsStoreProvider | undefined;\n } | undefined;\n blobStorge?: {\n provider?: ReporterOptionsBlobStorageProvider | undefined;\n } | undefined;\n extensions?: any;\n extensionsList?: string[] | undefined;\n /** @default true */\n migrateEntitySetsToFolders?: boolean | undefined;\n connectionString?: string | undefined;\n }\n\n interface Settings {\n add(key: string, value: any, req: Request): any;\n get(key: string): [SettingItem];\n findValue(key: string, req: Request): any;\n set(key: string, avalue: any, req: Request): any;\n addOrSet(key: string, avalue: any, req: Request): number | null;\n init(documentStore: any, authorization: any): any;\n _collection: SettingItem[];\n documentStore: any;\n registerEntity(documentStore: any): void;\n }\n\n interface SettingItem {\n key: string;\n value: any;\n }\n\n interface SchemaValidator {\n schemaVersion: string;\n ", + "7eca0aa421c535497e59aa231b955ea2b47712e4:types/jsreport-core/index.d.ts": "// Type definitions for jsreport-core 2.0\n// Project: http://jsreport.net\n// Definitions by: taoqf \n// pofider \n// Keith Kikta \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// \n\nimport * as fs from 'fs';\n\ndeclare namespace JsReport {\n type Helpers = string | { [fun: string]: (...args: any[]) => any };\n\n type Engine = \"none\";\n\n type Recipe = \"html\";\n\n interface TemplateBase {\n /** template for the engine */\n content?: string | undefined;\n /** templating engine used to assemble document */\n engine: Engine | string;\n /** javascript helper functions used by templating engines */\n helpers?: Helpers | undefined;\n /** recipe used for printing previously assembled document */\n recipe: Recipe | string;\n pathToEngine?: string | undefined;\n }\n\n interface Template extends TemplateBase {\n /** template for the engine */\n content: string;\n }\n\n interface TemplateRegistry {\n Template: Template;\n }\n\n type TemplateLike = TemplateRegistry[keyof TemplateRegistry]; // Template | NamedTemplate\n\n interface RequestOptions {\n preview?: boolean | undefined;\n /** sets the request timeout in milliseconds */\n timeout?: number | undefined;\n /** defines the name of the report being to be generated */\n reportName?: string | undefined;\n }\n\n interface Request {\n /** @default true */\n value?: boolean | undefined;\n /** @default false */\n writable?: boolean | undefined;\n /** @default false */\n configurable?: boolean | undefined;\n /** @default false */\n enumerable?: boolean | undefined;\n /** defines the template of used for report generation */\n template: TemplateLike;\n /** defines options such as report name and request timeout */\n options?: Partial | undefined;\n context?: Context | undefined;\n data?: any;\n }\n\n interface Context {\n shared?: any;\n originalInputDataIsEmpty?: boolean | undefined;\n isChildRequest?: boolean | undefined;\n logs: any;\n timeoutLimit: number;\n }\n\n interface Response {\n content: Buffer;\n stream: NodeJS.ReadableStream;\n headers: {\n [header: string]: string | number | boolean;\n };\n }\n\n interface ListenerCollection {\n add(\n type: string,\n callback: (req: Request, res: Response, err?: any) => Promise | void\n ): void;\n }\n\n interface Collection {\n find(query: { [field: string]: any }): Promise;\n update(query: { [field: string]: any }, update: object, options?: object): Promise;\n remove(query: { [field: string]: any }): Promise;\n insert(obj: object): Promise;\n }\n\n interface DocumentStore {\n collection(name: string): Collection;\n registerEntityType(name:string, options:any): void;\n registerEntitySet(name:string, options:any): void;\n }\n\n type Extension = (reporter: Reporter, definition: object) => void;\n\n interface ExtensionDefinition {\n options: any;\n main: any;\n directory: string;\n }\n\n interface ReporterInstance {\n defaults?: Defaults | undefined;\n options?: Configuration | undefined;\n afterRenderListeners: ListenerCollection;\n afterTemplatingEnginesExecutedListeners: ListenerCollection;\n beforeRenderListeners: ListenerCollection;\n closeListeners: ListenerCollection;\n documentStore: DocumentStore;\n blobStorage: BlobStorage;\n initializeListeners: ListenerCollection;\n renderErrorListeners: ListenerCollection;\n // it would be nice to add winston.LoggerInstance here\n // however adding import winston = require('winston') breaks exported enums\n logger?: any;\n validateRenderListeners: ListenerCollection;\n version?: string | undefined;\n settings: Settings;\n optionsValidator: SchemaValidator;\n entityTypeValidator: SchemaValidator;\n }\n\n interface Reporter extends ReporterInstance {\n use(extension: Extension | ExtensionDefinition): Reporter;\n init(): Promise;\n render(request: Request, parent?: Request): Promise;\n discover(): Reporter;\n createListenerCollection(): ListenerCollection;\n close(): Promise;\n extensionsLoad(opts: any): Promise;\n checkValidEntityName(c: string, doc: any, req: Request): Promise;\n createError(message: string, options?: any): any;\n getAvailableRenderTimeout(req: Request, defaultValue: number): number;\n executeScript(inputs: any, options: any, req: Request): Promise;\n afterConfigLoaded(cb: () => void): Reporter;\n addRequestContextMetaConfig(property: any, options: any): void;\n getRequestContextMetaConfig(property: any): any;\n addPathToWatchForAutoCleanup(customPath: string): void;\n getPathsToWatchForAutoCleanup(): string[];\n ensureTempDirectoryExists(): Promise;\n readTempFile(filename: string, opts: any): Promise;\n writeTempFile(filenameFn: () => string, content: any, opts: any): Promise;\n readTempFileStream(filename: string, opts: any): Promise;\n writeTempFileStream(filenameFn: () => string, opts: any): Promise;\n silentLogs(logger: any): void;\n }\n\n interface Defaults {\n loadConfig?: boolean | undefined;\n rootDirectory?: string | undefined;\n }\n\n type ReporterOptionsStoreProvider = 'memory';\n type ReporterOptionsBlobStorageProvider = 'memory' | 'fs';\n type EngineStrategy = 'dedicated-process' | 'http-server' | 'in-process';\n\n interface Configuration {\n mode?: any;\n /** specifies where is the application root and where jsreport searches for extensions */\n rootDirectory?: string | undefined;\n /** specifies directory of the script that was used to start node.js, this value is mostly metadata that is useful for your own code inside jsreport scripts */\n appDirectory?: string | undefined;\n /**\n * specifies where jsreport stores temporary files used by the conversion pipelineDef\n * @default getDefaultTempDirectory()\n */\n tempDirectory?: string | undefined;\n /**\n * specifies if jsreport should load configuration values from external sources (cli args, env vars, configuration files) or not\n * @default getDefaultLoadConfig()\n */\n loadConfig?: boolean | undefined;\n /** specifies if after some interval jsreport should automatically clean up temporary files generated while rendering reports */\n autoTempCleanup?: boolean | undefined;\n /** specifies if jsreport should discover/search installed extensions in project and use them automatically */\n discover?: boolean | undefined;\n /**\n * wheter if jsreport should read list of extensions from a previous generated cache or if it should crawl and try to search extensions again, set it to false when you want to always\n * force crawling node_modules when searching for extensions while starting jsreport\n * @default true\n */\n useExtensionsLocationCache?: boolean | undefined;\n logger?: {\n silent?: boolean | undefined;\n } | undefined;\n /** global single timeout that controls how much a report generation should wait before it times out */\n reportTimeout?: number | undefined;\n /**\n * option that enables passing a custom report timeout per request using req.options.timeout. this enables that the caller of the report generation control the report timeout so enable it\n * only when you trust the caller\n * @default false\n */\n enableRequestReportTimeout?: boolean | undefined;\n /** @default false */\n allowLocalFilesAccess?: boolean | undefined;\n encryption?: {\n /** lenght must be 16 characters */\n secretKey: string;\n /** @default true */\n enabled?: boolean | undefined;\n } | undefined;\n templatingEngines?: {\n /** @default 'dedicated-process' */\n strategy?: EngineStrategy | undefined;\n /**\n * defines the number of worker processes used for generating reports\n * @default 1\n */\n numberOfWorkers?: number | undefined;\n forkOptions?: {\n execArgv?: string | string[] | undefined;\n } | undefined;\n allowedModules?: string | string[] | undefined;\n /** sets the reporter timeout in milliseconds */\n timeout?: number | undefined;\n templateCache?: {\n max: number;\n enabled: boolean;\n } | undefined;\n } | undefined;\n store?: {\n provider?: ReporterOptionsStoreProvider | undefined;\n } | undefined;\n blobStorge?: {\n provider?: ReporterOptionsBlobStorageProvider | undefined;\n } | undefined;\n extensions?: any;\n extensionsList?: string[] | undefined;\n /** @default true */\n migrateEntitySetsToFolders?: boolean | undefined;\n connectionString?: string | undefined;\n }\n\n interface Settings {\n add(key: string, value: any, req: Request): any;\n get(key: string): [SettingItem];\n findValue(key: string, req: Request): any;\n set(key: string, avalue: any, req: Request): any;\n addOrSet(key: string, avalue: any, req: Request): number | null;\n init(documentStore: any, authorization: any): any;\n _collection: SettingItem[];\n documentStore: any;\n registerEntity(documentStore: any): void;\n }\n\n interface Setting" +} diff --git a/packages/mergebot/src/_tests/fixtures/55035/_response.json b/packages/mergebot/src/_tests/fixtures/55035/_response.json new file mode 100644 index 0000000000..5d5d3bd4c2 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55035/_response.json @@ -0,0 +1,348 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NzA2NjY4NDgw", + "title": "Add missing document store functions", + "createdAt": "2021-08-09T16:31:15Z", + "author": { + "login": "shoopapa", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Other Approved", + "__typename": "Label" + }, + { + "name": "Abandoned", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "The CI failed", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 55035, + "state": "OPEN", + "headRefOid": "7eca0aa421c535497e59aa231b955ea2b47712e4", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-08-09T16:36:55Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-08-10T17:10:55Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-08-10T17:15:39Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "kkikta-bcg", + "__typename": "User" + }, + "commit": { + "oid": "7eca0aa421c535497e59aa231b955ea2b47712e4", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "NONE", + "state": "APPROVED", + "submittedAt": "2021-08-13T18:37:59Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55035#pullrequestreview-729879946", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "newbish", + "__typename": "User" + }, + "commit": { + "oid": "7eca0aa421c535497e59aa231b955ea2b47712e4", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2021-08-13T18:40:30Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55035#pullrequestreview-729881642", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "pofider", + "__typename": "User" + }, + "commit": { + "oid": "7eca0aa421c535497e59aa231b955ea2b47712e4", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2021-08-16T10:04:47Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55035#pullrequestreview-730538734", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 3460073804, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460073804", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460073804", + "checkRuns": { + "nodes": [ + { + "title": "test", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 3460076596, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460076596", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460076596", + "checkRuns": { + "nodes": [ + { + "title": "Build #20210810.42 failed", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2021-08-10T17:10:10Z", + "committedDate": "2021-08-10T17:10:10Z", + "pushedDate": "2021-08-10T17:10:15Z", + "oid": "7eca0aa421c535497e59aa231b955ea2b47712e4", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 6, + "nodes": [ + { + "id": "IC_kwDOAFz6BM41Xjgt", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 895367213, + "body": "@shoopapa 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 which I will keep updated.***\n\n## 1 package in this PR\n\n* `jsreport-core` — [on npm](https://www.npmjs.com/package/jsreport-core), [on unpkg](https://unpkg.com/browse/jsreport-core@latest/)\n - owner-approval: @pofider, @newbish\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=55035&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\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 24 days — it is considered nearly abandoned!\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2021-08-09T16:31:54Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM41XjhS", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 895367250, + "body": "Hey @shoopapa,\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": "2021-08-09T16:31:56Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM41XjhY", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 895367256, + "body": "🔔 @taoqf @pofider @newbish — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55035/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": "2021-08-09T16:31:57Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM41XkVT", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 895370579, + "body": "@shoopapa The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/d05a3553812b8bbddc4d3ad3aab8933df5b011a3/checks?check_suite_id=3449794103).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds which are failing do not end up on the list of PRs for the DT maintainers to review.**\n", + "createdAt": "2021-08-09T16:36:56Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM41amij", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 896166051, + "body": "@shoopapa The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460073804).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds which are failing do not end up on the list of PRs for the DT maintainers to review.**\n", + "createdAt": "2021-08-10T17:15:40Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42jTf-", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 915224574, + "body": "@shoopapa I haven't seen any activity on this PR in more than three weeks, and it still has problems that prevent it from being merged. The PR will be closed on Sep 15th (in a week) if the issues aren't addressed.\n", + "createdAt": "2021-09-08T13:09:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 1, + "nodes": [ + { + "path": "types/jsreport-core/index.d.ts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgP24_0", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/55035/derived.json b/packages/mergebot/src/_tests/fixtures/55035/derived.json new file mode 100644 index 0000000000..653a61e3eb --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55035/derived.json @@ -0,0 +1,58 @@ +{ + "type": "info", + "now": "2021-09-09T18:47:06.228Z", + "pr_number": 55035, + "author": "shoopapa", + "headCommitOid": "7eca0aa421c535497e59aa231b955ea2b47712e4", + "mergeBaseOid": "master", + "lastPushDate": "2021-08-10T17:10:15.000Z", + "lastActivityDate": "2021-08-16T10:04:47.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "jsreport-core", + "kind": "edit", + "files": [ + { + "path": "types/jsreport-core/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "taoqf", + "pofider", + "newbish" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "pofider", + "date": "2021-08-16T10:04:47.000Z", + "isMaintainer": false + }, + { + "type": "approved", + "reviewer": "newbish", + "date": "2021-08-13T18:40:30.000Z", + "isMaintainer": false + }, + { + "type": "approved", + "reviewer": "kkikta-bcg", + "date": "2021-08-13T18:37:59.000Z", + "isMaintainer": false + } + ], + "mainBotCommentID": 895367213, + "ciResult": "fail", + "ciUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460073804" +} diff --git a/packages/mergebot/src/_tests/fixtures/55035/mutations.json b/packages/mergebot/src/_tests/fixtures/55035/mutations.json new file mode 100644 index 0000000000..b276ad97dd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55035/mutations.json @@ -0,0 +1,29 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM41Xjgt", + "body": "@shoopapa 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* `jsreport-core` — [on npm](https://www.npmjs.com/package/jsreport-core), [on unpkg](https://unpkg.com/browse/jsreport-core@latest/)\n - owner-approval: @pofider, @newbish\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=55035&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\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 24 days — it is considered nearly abandoned!\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM41amij", + "body": "@shoopapa The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460073804).\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" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NzA2NjY4NDgw", + "body": ":hourglass_flowing_sand: Hi @shoopapa,\n\nIt's been a few days since this PR was approved by pofider, newbish, kkikta-bcg and we're waiting for you to fix the test failures and then for a maintainer approval.\n\nIf you would like to short-circuit another wait for a maintainer, 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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/55035/result.json b/packages/mergebot/src/_tests/fixtures/55035/result.json new file mode 100644 index 0000000000..fc4802c87e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55035/result.json @@ -0,0 +1,35 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "The CI failed", + "Other Approved", + "Owner Approved", + "Untested Change", + "Abandoned" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @shoopapa,\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": "@shoopapa 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* `jsreport-core` — [on npm](https://www.npmjs.com/package/jsreport-core), [on unpkg](https://unpkg.com/browse/jsreport-core@latest/)\n - owner-approval: @pofider, @newbish\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=55035&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\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 24 days — it is considered nearly abandoned!\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "gh-actions-complaint-7eca0aa", + "status": "@shoopapa The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460073804).\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.**" + }, + { + "tag": "wait-for-merge-offer-7eca0aa", + "status": ":hourglass_flowing_sand: Hi @shoopapa,\n\nIt's been a few days since this PR was approved by pofider, newbish, kkikta-bcg and we're waiting for you to fix the test failures and then for a maintainer approval.\n\nIf you would like to short-circuit another wait for a maintainer, 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." + }, + { + "tag": "Abandoned:nearly:2021-08-16", + "status": "@shoopapa I haven't seen any activity on this PR in more than three weeks, and it still has problems that prevent it from being merged. The PR will be closed on Sep 15th (in a week) if the issues aren't addressed." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/55210/_downloads.json b/packages/mergebot/src/_tests/fixtures/55210/_downloads.json new file mode 100644 index 0000000000..7526a8a682 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55210/_downloads.json @@ -0,0 +1,3 @@ +{ + "xald-parse-sdk": 0 +} diff --git a/packages/mergebot/src/_tests/fixtures/55210/_files.json b/packages/mergebot/src/_tests/fixtures/55210/_files.json new file mode 100644 index 0000000000..61b8a593f9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55210/_files.json @@ -0,0 +1,8 @@ +{ + "fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe:types/xald-parse-sdk/package.json": "{\n \"private\": true,\n \"types\": \"index\",\n \"typesVersions\": {\n \"<=3.6\": {\n \"*\": [\n \"ts3.6/*\"\n ]\n }\n }\n}\n", + "fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe:types/xald-parse-sdk/ts3.6/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\",\n \"dom\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"baseUrl\": \"../../\",\n \"typeRoots\": [\n \"../../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"xald-parse-sdk-tests.ts\"\n ]\n}\n", + "fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe:types/xald-parse-sdk/ts3.6/tslint.json": "{\n \"extends\": \"@definitelytyped/dtslint/dt.json\",\n \"rules\": {\n \"ban-types\": false,\n \"no-unnecessary-generics\": false\n }\n}\n", + "fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe:types/xald-parse-sdk/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\",\n \"dom\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictFunctionTypes\": true,\n \"strictNullChecks\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"xald-parse-sdk-tests.ts\"\n ]\n}\n", + "fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe:types/xald-parse-sdk/tslint.json": "{\n \"extends\": \"@definitelytyped/dtslint/dt.json\",\n \"rules\": {\n \"ban-types\": false,\n \"no-unnecessary-generics\": false\n }\n}", + "fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe:types/xald-parse-sdk/index.d.ts": "// Type definitions for xald-parse-sdk 1.0\n// Project: https://parseplatform.org/\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// Minimum TypeScript Version: 3.5\n\n/// \n/// \n\nimport { EventEmitter } from \"events\";\n\ndeclare enum ErrorCode {\n OTHER_CAUSE = -1,\n INTERNAL_SERVER_ERROR = 1,\n CONNECTION_FAILED = 100,\n OBJECT_NOT_FOUND = 101,\n INVALID_QUERY = 102,\n INVALID_CLASS_NAME = 103,\n MISSING_OBJECT_ID = 104,\n INVALID_KEY_NAME = 105,\n INVALID_POINTER = 106,\n INVALID_JSON = 107,\n COMMAND_UNAVAILABLE = 108,\n NOT_INITIALIZED = 109,\n INCORRECT_TYPE = 111,\n INVALID_CHANNEL_NAME = 112,\n PUSH_MISCONFIGURED = 115,\n OBJECT_TOO_LARGE = 116,\n OPERATION_FORBIDDEN = 119,\n CACHE_MISS = 120,\n INVALID_NESTED_KEY = 121,\n INVALID_FILE_NAME = 122,\n INVALID_ACL = 123,\n TIMEOUT = 124,\n INVALID_EMAIL_ADDRESS = 125,\n MISSING_CONTENT_TYPE = 126,\n MISSING_CONTENT_LENGTH = 127,\n INVALID_CONTENT_LENGTH = 128,\n FILE_TOO_LARGE = 129,\n FILE_SAVE_ERROR = 130,\n DUPLICATE_VALUE = 137,\n INVALID_ROLE_NAME = 139,\n EXCEEDED_QUOTA = 140,\n SCRIPT_FAILED = 141,\n VALIDATION_ERROR = 142,\n INVALID_IMAGE_DATA = 150,\n UNSAVED_FILE_ERROR = 151,\n INVALID_PUSH_TIME_ERROR = 152,\n FILE_DELETE_ERROR = 153,\n REQUEST_LIMIT_EXCEEDED = 155,\n INVALID_EVENT_NAME = 160,\n USERNAME_MISSING = 200,\n PASSWORD_MISSING = 201,\n USERNAME_TAKEN = 202,\n EMAIL_TAKEN = 203,\n EMAIL_MISSING = 204,\n EMAIL_NOT_FOUND = 205,\n SESSION_MISSING = 206,\n MUST_CREATE_USER_THROUGH_SIGNUP = 207,\n ACCOUNT_ALREADY_LINKED = 208,\n INVALID_SESSION_TOKEN = 209,\n LINKED_ID_MISSING = 250,\n INVALID_LINKED_SESSION = 251,\n UNSUPPORTED_SERVICE = 252,\n AGGREGATE_ERROR = 600,\n FILE_READ_ERROR = 601,\n X_DOMAIN_REQUEST = 602,\n}\n\ndeclare global {\n namespace Parse {\n let applicationId: string;\n let javaScriptKey: string | undefined;\n let liveQueryServerURL: string;\n let masterKey: string | undefined;\n let serverAuthToken: string | undefined;\n let serverAuthType: string | undefined;\n let serverURL: string;\n let secret: string;\n let idempotency: boolean;\n let encryptedUser: boolean;\n let env: string;\n let cloudAppId: string;\n let cloudTimeOut: string;\n\n interface BatchSizeOption {\n batchSize?: number | undefined;\n }\n\n interface CascadeSaveOption {\n /** If `false`, nested objects will not be saved (default is `true`). */\n cascadeSave?: boolean | undefined;\n }\n\n interface SuccessOption {\n success?: Function | undefined;\n }\n\n interface ErrorOption {\n error?: Function | undefined;\n }\n\n interface ContextOption {\n context?: {[key: string]: any};\n }\n\n interface FullOptions {\n success?: Function | undefined;\n error?: Function | undefined;\n useMasterKey?: boolean | undefined;\n sessionToken?: string | undefined;\n installationId?: string | undefined;\n progress?: Function | undefined;\n }\n\n interface RequestOptions {\n useMasterKey?: boolean | undefined;\n sessionToken?: string | undefined;\n installationId?: string | undefined;\n batchSize?: number | undefined;\n include?: string | string[] | undefined;\n progress?: Function | undefined;\n }\n\n interface SuccessFailureOptions extends SuccessOption, ErrorOption {}\n\n interface SignUpOptions {\n useMasterKey?: boolean | undefined;\n installationId?: string | undefined;\n }\n\n interface SessionTokenOption {\n sessionToken?: string | undefined;\n }\n\n interface WaitOption {\n /**\n * Set to true to wait for the server to confirm success\n * before triggering an event.\n */\n wait?: boolean | undefined;\n }\n\n interface UseMasterKeyOption {\n /**\n * In Cloud Code and Node only, causes the Master Key to be used for this request.\n */\n useMasterKey?: boolean | undefined;\n }\n\n interface ScopeOptions extends SessionTokenOption, UseMasterKeyOption {}\n\n interface SilentOption {\n /**\n * Set to true to avoid firing the event.\n */\n silent?: boolean | undefined;\n }\n\n interface Pointer {\n __type: string;\n className: string;\n objectId: string;\n }\n\n interface AuthData {\n [key: string]: any;\n }\n\n /**\n * Interface declaration for Authentication Providers\n * https://parseplatform.org/Parse-SDK-JS/api/master/AuthProvider.html\n */\n interface AuthProvider {\n /**\n * Called when _linkWith isn't passed authData. Handle your own authentication here.\n */\n authenticate: () => void;\n /**\n * (Optional) Called when service is unlinked. Handle any cleanup here.\n */\n deauthenticate?: (() => void) | undefined;\n /**\n * Unique identifier for this Auth Provider.\n */\n getAuthType: () => string;\n /**\n * Called when auth data is syncronized. Can be used to determine if authData is still valid\n */\n restoreAuthentication: () => boolean;\n }\n\n interface BaseAttributes {\n createdAt: Date;\n objectId: string;\n updatedAt: Date;\n }\n\n interface CommonAttributes {\n ACL: ACL;\n }\n\n interface JSONBaseAttributes {\n createdAt: string;\n objectId: string;\n updatedAt: string;\n }\n\n /**\n * Creates a new ACL.\n * If no argument is given, the ACL has no permissions for anyone.\n * If the argument is a Parse.User, the ACL will have read and write\n * permission for only that user.\n * If the argument is any other JSON object, that object will be interpretted\n * as a serialized ACL created with toJSON().\n * @see Parse.Object#setACL\n *\n *

An ACL, or Access Control List can be added to any\n * Parse.Object to restrict access to only a subset of users\n * of your application.

\n */\n class ACL {\n permissionsById: any;\n\n constructor(arg1?: any);\n\n setPublicReadAccess(allowed: boolean): void;\n getPublicReadAccess(): boolean;\n\n setPublicWriteAccess(allowed: boolean): void;\n getPublicWriteAccess(): boolean;\n\n setReadAccess(userId: User | string, allowed: boolean): void;\n getReadAccess(userId: User | string): boolean;\n\n setWriteAccess(userId: User | string, allowed: boolean): void;\n getWriteAccess(userId: User | string): boolean;\n\n setRoleReadAccess(role: Role | string, allowed: boolean): void;\n getRoleReadAccess(role: Role | string): boolean;\n\n setRoleWriteAccess(role: Role | string, allowed: boolean): void;\n getRoleWriteAccess(role: Role | string): boolean;\n\n toJSON(): any;\n }\n\n /**\n * A Parse.File is a local representation of a file that is saved to the Parse\n * cloud.\n * @param name The file's name. This will be prefixed by a unique\n * value once the file has finished saving. The file name must begin with\n * an alphanumeric character, and consist of alphanumeric characters,\n * periods, spaces, underscores, or dashes.\n * @param data The data for the file, as either:\n * 1. an Array of byte value Numbers, or\n * 2. an Object like { base64: \"...\" } with a base64-encoded String.\n * 3. a File object selected with a file upload control. (3) only works\n * in Firefox 3.6+, Safari 6.0.2+, Chrome 7+, and IE 10+.\n * For example:
\n         * var fileUploadControl = $(\"#profilePhotoFileUpload\")[0];\n         * if (fileUploadControl.files.length > 0) {\n         *   var file = fileUploadControl.files[0];\n         *   var name = \"photo.jpg\";\n         *   var parseFile = new Parse.File(name, file);\n         *   parseFile.save().then(function() {\n         *     // The file has been saved to Parse.\n         *   }, function(error) {\n         *     // The file either could not be read, or could not be saved to Parse.\n         *   });\n         * }
\n * @param type Optional Content-Type header to use for the file. If\n * this is omitted, the content type will be inferred from the name's\n * extension.\n */\n class File {\n constructor(\n name: string,\n data: number[] | { base64: string } | { size: number; type: string } | { uri: string },\n type?: string,\n );\n /**\n * Return the data for the file, downloading it if not already present.\n * Data is present if initialized with Byte Array, Base64 or Saved with Uri.\n * Data is cleared if saved with File object selected with a file upload control\n *\n * @returns Promise that is resolved with base64 data\n */\n getData(): Promise;\n url(options?: { forceSecure?: boolean | undefined }): string;\n metadata(): Record;\n tags(): Record;\n name(): string;\n save(options?: FullOptions): Promise;\n cancel(): void;\n destroy(): Promise;\n toJSON(): { __type: string; name: string; url: string };\n equals(other: File): boolean;\n setMetadata(metadata: Record): void;\n addMetadata(key: string, value: any)" +} diff --git a/packages/mergebot/src/_tests/fixtures/55210/_response.json b/packages/mergebot/src/_tests/fixtures/55210/_response.json new file mode 100644 index 0000000000..fed97cadbe --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55210/_response.json @@ -0,0 +1,454 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NzE0NzAxNDcz", + "title": "Extend xald-parse-sdk module types", + "createdAt": "2021-08-18T02:55:27Z", + "author": { + "login": "Dssssds", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + }, + { + "name": "The CI failed", + "__typename": "Label" + }, + { + "name": "Check Config", + "__typename": "Label" + }, + { + "name": "Huge Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 55210, + "state": "OPEN", + "headRefOid": "fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe", + "changedFiles": 11, + "commitIds": {}, + "additions": 7590, + "deletions": 0, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-08-18T03:01:01Z", + "projectColumnName": "Needs Maintainer Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-08-24T21:37:02Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-08-24T22:04:00Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-08-24T22:05:28Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "23d91a572fd51e64a17babfb662883885f9f5186", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2021-08-23T19:16:42Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55210#pullrequestreview-736480341", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "RaschidJFR", + "__typename": "User" + }, + "commit": { + "oid": "23d91a572fd51e64a17babfb662883885f9f5186", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2021-08-24T21:36:25Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55210#pullrequestreview-737715006", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "commit": { + "oid": "23d91a572fd51e64a17babfb662883885f9f5186", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "createdAt": "2021-08-24T22:02:42Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2021-08-24T22:02:43Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55210#pullrequestreview-737731087", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 3585693499, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe/checks?check_suite_id=3585693499", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe/checks?check_suite_id=3585693499", + "checkRuns": { + "nodes": [ + { + "title": "test", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 3585694165, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe/checks?check_suite_id=3585694165", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe/checks?check_suite_id=3585694165", + "checkRuns": { + "nodes": [ + { + "title": "Build #20210824.106 failed", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2021-08-24T22:03:24Z", + "committedDate": "2021-08-24T22:03:24Z", + "pushedDate": "2021-08-24T22:03:32Z", + "oid": "fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 8, + "nodes": [ + { + "id": "IC_kwDOAFz6BM41sLf3", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 900773879, + "body": "@Dssssds 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 which I will keep updated.***\n\n## 1 package in this PR\n\n* `xald-parse-sdk` (*new!*) — [on npm](https://www.npmjs.com/package/xald-parse-sdk), [on unpkg](https://unpkg.com/browse/xald-parse-sdk@latest/)\n - Config files to check:\n - [`xald-parse-sdk/ts3.6/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55210/files/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe#diff-bfc1b741f010db81cead2207a1b4172e9a907b81e1b2e00aaf5634ec6e5f3e7b): not [the expected form](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-linter-tslintjson) (check: `rules`)\n - [`xald-parse-sdk/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55210/files/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe#diff-c9e04178a7818e4f645fba6421d9c18e7f9e8be46343ae904ed4ada61296c628): not [the expected form](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-linter-tslintjson) (check: `rules`)\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=55210&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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 20 days.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2021-08-18T02:56:05Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM41sLgG", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 900773894, + "body": "🔔 @Dssssds — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55210/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2021-08-18T02:56:07Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM41sLi4", + "author": { + "login": "Dssssds", + "__typename": "User" + }, + "databaseId": 900774072, + "body": "Created for the first time, Taobao parse expanded", + "createdAt": "2021-08-18T02:56:35Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM414qDd", + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "databaseId": 904044765, + "body": "what are those all Github handles? Why are you adding those people? \r\nAre those coming from copied @types/parse header? What's the reason?\r\nis your intent to create types only for 'tabao' extension?", + "createdAt": "2021-08-23T19:15:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM416Gp_", + "author": { + "login": "LinusU", + "__typename": "User" + }, + "databaseId": 904424063, + "body": "I would not like to be a maintainer of these new typings ☺️ ", + "createdAt": "2021-08-24T08:14:17Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM417HXj", + "author": { + "login": "rdhelms", + "__typename": "User" + }, + "databaseId": 904689123, + "body": "I also would like to be removed from the maintainers list here 👍🏻", + "createdAt": "2021-08-24T14:23:51Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM418RxI", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 904993864, + "body": "@Dssssds One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2021-08-24T21:37:03Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM418VN8", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 905007996, + "body": "@Dssssds The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe/checks?check_suite_id=3585693499).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds which are failing do not end up on the list of PRs for the DT maintainers to review.**\n", + "createdAt": "2021-08-24T22:05:28Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 11, + "nodes": [ + { + "path": "types/xald-parse-sdk/index.d.ts", + "additions": 1724, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/xald-parse-sdk/package.json", + "additions": 11, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/xald-parse-sdk/taobao.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/xald-parse-sdk/ts3.6/index.d.ts", + "additions": 1712, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/xald-parse-sdk/ts3.6/taobao.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/xald-parse-sdk/ts3.6/tsconfig.json", + "additions": 24, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/xald-parse-sdk/ts3.6/tslint.json", + "additions": 7, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/xald-parse-sdk/ts3.6/xald-parse-sdk-tests.ts", + "additions": 2041, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/xald-parse-sdk/tsconfig.json", + "additions": 24, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/xald-parse-sdk/tslint.json", + "additions": 7, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/xald-parse-sdk/xald-parse-sdk-tests.ts", + "additions": 2034, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MTE", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgP-3Pw", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/55210/derived.json b/packages/mergebot/src/_tests/fixtures/55210/derived.json new file mode 100644 index 0000000000..eebb5f99fb --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55210/derived.json @@ -0,0 +1,90 @@ +{ + "type": "info", + "now": "2021-09-14T20:02:38.482Z", + "pr_number": 55210, + "author": "Dssssds", + "headCommitOid": "fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe", + "mergeBaseOid": "master", + "lastPushDate": "2021-08-24T22:03:32.000Z", + "lastActivityDate": "2021-08-24T22:03:32.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": true, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "xald-parse-sdk", + "kind": "add", + "files": [ + { + "path": "types/xald-parse-sdk/index.d.ts", + "kind": "definition" + }, + { + "path": "types/xald-parse-sdk/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/xald-parse-sdk/taobao.d.ts", + "kind": "definition" + }, + { + "path": "types/xald-parse-sdk/ts3.6/index.d.ts", + "kind": "definition" + }, + { + "path": "types/xald-parse-sdk/ts3.6/taobao.d.ts", + "kind": "definition" + }, + { + "path": "types/xald-parse-sdk/ts3.6/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/xald-parse-sdk/ts3.6/tslint.json", + "kind": "package-meta", + "suspect": "edited" + }, + { + "path": "types/xald-parse-sdk/ts3.6/xald-parse-sdk-tests.ts", + "kind": "test" + }, + { + "path": "types/xald-parse-sdk/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/xald-parse-sdk/tslint.json", + "kind": "package-meta", + "suspect": "edited" + }, + { + "path": "types/xald-parse-sdk/xald-parse-sdk-tests.ts", + "kind": "test" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "stale", + "reviewer": "peterblazejewicz", + "date": "2021-08-24T22:02:43.000Z", + "abbrOid": "23d91a5" + }, + { + "type": "stale", + "reviewer": "RaschidJFR", + "date": "2021-08-24T21:36:25.000Z", + "abbrOid": "23d91a5" + } + ], + "mainBotCommentID": 900773879, + "ciResult": "fail", + "ciUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe/checks?check_suite_id=3585693499" +} diff --git a/packages/mergebot/src/_tests/fixtures/55210/mutations.json b/packages/mergebot/src/_tests/fixtures/55210/mutations.json new file mode 100644 index 0000000000..dcc1f990a7 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55210/mutations.json @@ -0,0 +1,29 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM41sLf3", + "body": "@Dssssds 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* `xald-parse-sdk` (*new!*) — [on npm](https://www.npmjs.com/package/xald-parse-sdk), [on unpkg](https://unpkg.com/browse/xald-parse-sdk@latest/)\n - Config files to check:\n - [`xald-parse-sdk/ts3.6/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55210/files/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe#diff-bfc1b741f010db81cead2207a1b4172e9a907b81e1b2e00aaf5634ec6e5f3e7b): edited\n - [`xald-parse-sdk/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55210/files/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe#diff-c9e04178a7818e4f645fba6421d9c18e7f9e8be46343ae904ed4ada61296c628): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=55210&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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 20 days.\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM41sLgG", + "body": "🔔 @Dssssds — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55210/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM418VN8", + "body": "@Dssssds The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe/checks?check_suite_id=3585693499).\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/55210/result.json b/packages/mergebot/src/_tests/fixtures/55210/result.json new file mode 100644 index 0000000000..714d6084f0 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55210/result.json @@ -0,0 +1,26 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "The CI failed", + "New Definition", + "Check Config", + "Huge Change" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@Dssssds 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* `xald-parse-sdk` (*new!*) — [on npm](https://www.npmjs.com/package/xald-parse-sdk), [on unpkg](https://unpkg.com/browse/xald-parse-sdk@latest/)\n - Config files to check:\n - [`xald-parse-sdk/ts3.6/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55210/files/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe#diff-bfc1b741f010db81cead2207a1b4172e9a907b81e1b2e00aaf5634ec6e5f3e7b): edited\n - [`xald-parse-sdk/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55210/files/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe#diff-c9e04178a7818e4f645fba6421d9c18e7f9e8be46343ae904ed4ada61296c628): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=55210&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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 20 days.\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "pinging-reviewers-others", + "status": "🔔 @Dssssds — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55210/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + }, + { + "tag": "gh-actions-complaint-fc6b2c1", + "status": "@Dssssds The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/fc6b2c11d8ef528a4a2b554b0fe7071b6959f9fe/checks?check_suite_id=3585693499).\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.**" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/55508/_downloads.json b/packages/mergebot/src/_tests/fixtures/55508/_downloads.json new file mode 100644 index 0000000000..5a8d8d11e5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55508/_downloads.json @@ -0,0 +1,3 @@ +{ + "chrome": 702255 +} diff --git a/packages/mergebot/src/_tests/fixtures/55508/_files.json b/packages/mergebot/src/_tests/fixtures/55508/_files.json new file mode 100644 index 0000000000..a1b480879a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55508/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/chrome/index.d.ts": "// Type definitions for Chrome extension development\n// Project: http://developer.chrome.com/extensions/\n// Definitions by: Matthew Kimber \n// otiai10 \n// couven92 \n// RReverser \n// sreimer15 \n// MatCarlson \n// ekinsol \n// Thierry Régagnon \n// Brian Wilson \n// Sebastiaan Pasma \n// bdbai \n// pokutuna \n// Jason Xian \n// userTim \n// Idan Zeierman \n// Nicolas Rodriguez \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.4\n\n/// \n/// \n\n////////////////////\n// Global object\n////////////////////\ninterface Window {\n chrome: typeof chrome;\n}\n\n////////////////////\n// Accessibility Features\n////////////////////\n/**\n * Use the chrome.accessibilityFeatures API to manage Chrome's accessibility features. This API relies on the ChromeSetting prototype of the type API for getting and setting individual accessibility features. In order to get feature states the extension must request accessibilityFeatures.read permission. For modifying feature state, the extension needs accessibilityFeatures.modify permission. Note that accessibilityFeatures.modify does not imply accessibilityFeatures.read permission.\n * Availability: Since Chrome 37.\n * Permissions: \"accessibilityFeatures.read\"\n * Important: This API works only on Chrome OS.\n */\ndeclare namespace chrome.accessibilityFeatures {\n /** **ChromeOS only.** Spoken feedback (text-to-speech). */\n export var spokenFeedback: chrome.types.ChromeSetting;\n /** **ChromeOS only.** Enlarged cursor. */\n export var largeCursor: chrome.types.ChromeSetting;\n /** **ChromeOS only.** Sticky modifier keys (like shift or alt). */\n export var stickyKeys: chrome.types.ChromeSetting;\n /** **ChromeOS only.** High contrast rendering mode. */\n export var highContrast: chrome.types.ChromeSetting;\n /** **ChromeOS only.** Full screen magnification. */\n export var screenMagnifier: chrome.types.ChromeSetting;\n /** **ChromeOS only.** Auto mouse click after mouse stops moving. */\n export var autoclick: chrome.types.ChromeSetting;\n /** **ChromeOS only.** Virtual on-screen keyboard. */\n export var virtualKeyboard: chrome.types.ChromeSetting;\n /**\n * **ChromeOS only.**\n * Caret highlighting.\n * @since Chrome 51.\n */\n export var caretHighlight: chrome.types.ChromeSetting;\n /**\n * **ChromeOS only.**\n * Cursor highlighting.\n * @since Chrome 51.\n */\n export var cursorHighlight: chrome.types.ChromeSetting;\n /**\n * **ChromeOS only.**\n * Focus highlighting.\n * @since Chrome 51.\n */\n export var focusHighlight: chrome.types.ChromeSetting;\n /**\n * **ChromeOS only.**\n * Select-to-speak.\n * @since Chrome 51.\n */\n export var selectToSpeak: chrome.types.ChromeSetting;\n /**\n * **ChromeOS only.**\n * Switch Access.\n * @since Chrome 51.\n */\n export var switchAccess: chrome.types.ChromeSetting;\n /**\n * @since Chrome 42.\n */\n export var animationPolicy: chrome.types.ChromeSetting;\n}\n\n////////////////////\n// Action\n////////////////////\n/**\n * Use the chrome.action API to control the extension's icon in the Google Chrome toolbar.\n * Availability: Since Chrome 88. Manifest v3.\n * Manifest: \"action\": {...}\n */\ndeclare namespace chrome.action {\n export interface BadgeBackgroundColorDetails {\n /** An array of four integers in the range [0,255] that make up the RGBA color of the badge. For example, opaque red is [255, 0, 0, 255]. Can also be a string with a CSS value, with opaque red being #FF0000 or #F00. */\n color: string | ColorArray;\n /** Optional. Limits the change to when a particular tab is selected. Automatically resets when the tab is closed. */\n tabId?: number | undefined;\n }\n\n export interface BadgeTextDetails {\n /** Any number of characters can be passed, but only about four can fit in the space. */\n text: string;\n /** Optional. Limits the change to when a particular tab is selected. Automatically resets when the tab is closed. */\n tabId?: number | undefined;\n }\n\n export type ColorArray = [number, number, number, number];\n\n export interface TitleDetails {\n /** The string the action should display when moused over. */\n title: string;\n /** Optional. Limits the change to when a particular tab is selected. Automatically resets when the tab is closed. */\n tabId?: number | undefined;\n }\n\n export interface PopupDetails {\n /** Optional. Limits the change to when a particular tab is selected. Automatically resets when the tab is closed. */\n tabId?: number | undefined;\n /** The html file to show in a popup. If set to the empty string (''), no popup is shown. */\n popup: string;\n }\n\n export interface BrowserClickedEvent extends chrome.events.Event<(tab: chrome.tabs.Tab) => void> {}\n\n export interface TabIconDetails {\n /** Optional. Either a relative image path or a dictionary {size -> relative image path} pointing to icon to be set. If the icon is specified as a dictionary, the actual image to be used is chosen depending on screen's pixel density. If the number of image pixels that fit into one screen space unit equals scale, then image with size scale * 19 will be selected. Initially only scales 1 and 2 will be supported. At least one image must be specified. Note that 'details.path = foo' is equivalent to 'details.imageData = {'19': foo}' */\n path?: string | { [index: number]: string } | undefined;\n /** Optional. Limits the change to when a particular tab is selected. Automatically resets when the tab is closed. */\n tabId?: number | undefined;\n /** Optional. Either an ImageData object or a dictionary {size -> ImageData} representing icon to be set. If the icon is specified as a dictionary, the actual image to be used is chosen depending on screen's pixel density. If the number of image pixels that fit into one screen space unit equals scale, then image with size scale * 19 will be selected. Initially only scales 1 and 2 will be supported. At least one image must be specified. Note that 'details.imageData = foo' is equivalent to 'details.imageData = {'19': foo}' */\n imageData?: ImageData | { [index: number]: ImageData } | undefined;\n }\n\n export interface TabDetails {\n /** Optional. The ID of the tab to query state for. If no tab is specified, the non-tab-specific state is returned. */\n tabId?: number | undefined;\n }\n\n /**\n * Since Chrome 88.\n * Disables the action for a tab.\n * @param tabId The id of the tab for which you want to modify the action.\n * @return The `disable` method provides its result via callback or returned as a `Promise` (MV3 only). It has no parameters.\n */\n export function disable(tabId?: number): Promise;\n\n /**\n * Since Chrome 88.\n * Disables the action for a tab.\n * @param tabId The id of the tab for which you want to modify the action.\n * @param callback\n */\n export function disable(tabId?: number, callback?: () => void): void;\n\n /**\n * Since Chrome 88.\n * Enables the action for a tab. By default, actions are enabled.\n * @param tabId The id of the tab for which you want to modify the action.\n * @return The `enable` method provides its result via callback or returned as a `Promise` (MV3 only). It has no parameters.\n */\n export function enable(tabId?: number): Promise;\n\n /**\n * Since Chrome 88.\n * Enables the action for a tab. By default, actions are enabled.\n * @param tabId The id of the tab for which you want to modify the action.\n * @param callback\n */\n export function enable(tabId?: number, callback?: () => void): void;\n\n /**\n * Since Chrome 88.\n * Gets the background color of the action.\n * @param callback The callback parameter should be a function that looks like this:\n * (result: ColorArray) => {...}\n */\n export function getBadgeBackgroundColor(details: TabDetails, callback: (result: ColorArray) => void): void;\n /**\n * Since Chrome 88.\n * Gets the background color of the action.\n * @return The `getBadgeBackgroundColor` method provides its result via callback or returned as a `Promise` (MV3 only).\n */\n export function getBadgeBackgroundColor(details: TabDetails): Promise;\n\n /**\n * Since Chrome 88.\n * Gets the badge text of the action. If no tab is specified, the non-tab-specific badge text is returned.\n * If displayActionCountAsBadgeText is enabled, a placeholder text will be returned unless the\n * declarativeNetRequestFeedback permission is present or tab-specific badge text was provided.\n * @param callback The callback parameter should be a function that looks like this:\n * (result: string) => {...}\n */\n export function getBadgeText(details: TabDetails, callback: (result: string) => void): void;\n\n /**\n * Since Chrome 88.\n * Gets the badge text of the action. If no tab is specified, the non-tab-specific badge text is returned.\n * If displayActionCountAsBadgeText is enabled, a placeholder text will be returned unless the\n * declarativeNetRequestFeedback permission is present or tab-specific badge text was provided.\n * @return The `getBadgeText` method provides its result via callback or returned as a `Promise` (MV3 only).\n */", + "7288ad262198cd40a8457837580b67f9d1b68c7b:types/chrome/index.d.ts": "// Type definitions for Chrome extension development\n// Project: http://developer.chrome.com/extensions/\n// Definitions by: Matthew Kimber \n// otiai10 \n// couven92 \n// RReverser \n// sreimer15 \n// MatCarlson \n// ekinsol \n// Thierry Régagnon \n// Brian Wilson \n// Sebastiaan Pasma \n// bdbai \n// pokutuna \n// Jason Xian \n// userTim \n// Idan Zeierman \n// Nicolas Rodriguez \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.4\n\n/// \n/// \n\n////////////////////\n// Global object\n////////////////////\ninterface Window {\n chrome: typeof chrome;\n}\n\n////////////////////\n// Accessibility Features\n////////////////////\n/**\n * Use the chrome.accessibilityFeatures API to manage Chrome's accessibility features. This API relies on the ChromeSetting prototype of the type API for getting and setting individual accessibility features. In order to get feature states the extension must request accessibilityFeatures.read permission. For modifying feature state, the extension needs accessibilityFeatures.modify permission. Note that accessibilityFeatures.modify does not imply accessibilityFeatures.read permission.\n * Availability: Since Chrome 37.\n * Permissions: \"accessibilityFeatures.read\"\n * Important: This API works only on Chrome OS.\n */\ndeclare namespace chrome.accessibilityFeatures {\n /** **ChromeOS only.** Spoken feedback (text-to-speech). */\n export var spokenFeedback: chrome.types.ChromeSetting;\n /** **ChromeOS only.** Enlarged cursor. */\n export var largeCursor: chrome.types.ChromeSetting;\n /** **ChromeOS only.** Sticky modifier keys (like shift or alt). */\n export var stickyKeys: chrome.types.ChromeSetting;\n /** **ChromeOS only.** High contrast rendering mode. */\n export var highContrast: chrome.types.ChromeSetting;\n /** **ChromeOS only.** Full screen magnification. */\n export var screenMagnifier: chrome.types.ChromeSetting;\n /** **ChromeOS only.** Auto mouse click after mouse stops moving. */\n export var autoclick: chrome.types.ChromeSetting;\n /** **ChromeOS only.** Virtual on-screen keyboard. */\n export var virtualKeyboard: chrome.types.ChromeSetting;\n /**\n * **ChromeOS only.**\n * Caret highlighting.\n * @since Chrome 51.\n */\n export var caretHighlight: chrome.types.ChromeSetting;\n /**\n * **ChromeOS only.**\n * Cursor highlighting.\n * @since Chrome 51.\n */\n export var cursorHighlight: chrome.types.ChromeSetting;\n /**\n * **ChromeOS only.**\n * Focus highlighting.\n * @since Chrome 51.\n */\n export var focusHighlight: chrome.types.ChromeSetting;\n /**\n * **ChromeOS only.**\n * Select-to-speak.\n * @since Chrome 51.\n */\n export var selectToSpeak: chrome.types.ChromeSetting;\n /**\n * **ChromeOS only.**\n * Switch Access.\n * @since Chrome 51.\n */\n export var switchAccess: chrome.types.ChromeSetting;\n /**\n * @since Chrome 42.\n */\n export var animationPolicy: chrome.types.ChromeSetting;\n}\n\n////////////////////\n// Action\n////////////////////\n/**\n * Use the chrome.action API to control the extension's icon in the Google Chrome toolbar.\n * Availability: Since Chrome 88. Manifest v3.\n * Manifest: \"action\": {...}\n */\ndeclare namespace chrome.action {\n export interface BadgeBackgroundColorDetails {\n /** An array of four integers in the range [0,255] that make up the RGBA color of the badge. For example, opaque red is [255, 0, 0, 255]. Can also be a string with a CSS value, with opaque red being #FF0000 or #F00. */\n color: string | ColorArray;\n /** Optional. Limits the change to when a particular tab is selected. Automatically resets when the tab is closed. */\n tabId?: number | undefined;\n }\n\n export interface BadgeTextDetails {\n /** Any number of characters can be passed, but only about four can fit in the space. */\n text: string;\n /** Optional. Limits the change to when a particular tab is selected. Automatically resets when the tab is closed. */\n tabId?: number | undefined;\n }\n\n export type ColorArray = [number, number, number, number];\n\n export interface TitleDetails {\n /** The string the action should display when moused over. */\n title: string;\n /** Optional. Limits the change to when a particular tab is selected. Automatically resets when the tab is closed. */\n tabId?: number | undefined;\n }\n\n export interface PopupDetails {\n /** Optional. Limits the change to when a particular tab is selected. Automatically resets when the tab is closed. */\n tabId?: number | undefined;\n /** The html file to show in a popup. If set to the empty string (''), no popup is shown. */\n popup: string;\n }\n\n export interface BrowserClickedEvent extends chrome.events.Event<(tab: chrome.tabs.Tab) => void> { }\n\n export interface TabIconDetails {\n /** Optional. Either a relative image path or a dictionary {size -> relative image path} pointing to icon to be set. If the icon is specified as a dictionary, the actual image to be used is chosen depending on screen's pixel density. If the number of image pixels that fit into one screen space unit equals scale, then image with size scale * 19 will be selected. Initially only scales 1 and 2 will be supported. At least one image must be specified. Note that 'details.path = foo' is equivalent to 'details.imageData = {'19': foo}' */\n path?: string | { [index: number]: string } | undefined;\n /** Optional. Limits the change to when a particular tab is selected. Automatically resets when the tab is closed. */\n tabId?: number | undefined;\n /** Optional. Either an ImageData object or a dictionary {size -> ImageData} representing icon to be set. If the icon is specified as a dictionary, the actual image to be used is chosen depending on screen's pixel density. If the number of image pixels that fit into one screen space unit equals scale, then image with size scale * 19 will be selected. Initially only scales 1 and 2 will be supported. At least one image must be specified. Note that 'details.imageData = foo' is equivalent to 'details.imageData = {'19': foo}' */\n imageData?: ImageData | { [index: number]: ImageData } | undefined;\n }\n\n export interface TabDetails {\n /** Optional. The ID of the tab to query state for. If no tab is specified, the non-tab-specific state is returned. */\n tabId?: number | undefined;\n }\n\n /**\n * Since Chrome 88.\n * Disables the action for a tab.\n * @param tabId The id of the tab for which you want to modify the action.\n * @return The `disable` method provides its result via callback or returned as a `Promise` (MV3 only). It has no parameters.\n */\n export function disable(tabId: number): Promise;\n\n /**\n * Since Chrome 88.\n * Disables the action for a tab.\n * @param tabId The id of the tab for which you want to modify the action.\n * @param callback\n */\n export function disable(tabId: number, callback?: () => void): void;\n\n /**\n * Since Chrome 88.\n * Enables the action for a tab. By default, actions are enabled.\n * @param tabId The id of the tab for which you want to modify the action.\n * @return The `enable` method provides its result via callback or returned as a `Promise` (MV3 only). It has no parameters.\n */\n export function enable(tabId: number): Promise;\n\n /**\n * Since Chrome 88.\n * Enables the action for a tab. By default, actions are enabled.\n * @param tabId The id of the tab for which you want to modify the action.\n * @param callback\n */\n export function enable(tabId: number, callback?: () => void): void;\n\n /**\n * Since Chrome 88.\n * Gets the background color of the action.\n * @param callback The callback parameter should be a function that looks like this:\n * (result: ColorArray) => {...}\n */\n export function getBadgeBackgroundColor(details: TabDetails, callback: (result: ColorArray) => void): void;\n /**\n * Since Chrome 88.\n * Gets the background color of the action.\n * @return The `getBadgeBackgroundColor` method provides its result via callback or returned as a `Promise` (MV3 only).\n */\n export function getBadgeBackgroundColor(details: TabDetails): Promise;\n\n /**\n * Since Chrome 88.\n * Gets the badge text of the action. If no tab is specified, the non-tab-specific badge text is returned.\n * If displayActionCountAsBadgeText is enabled, a placeholder text will be returned unless the\n * declarativeNetRequestFeedback permission is present or tab-specific badge text was provided.\n * @param callback The callback parameter should be a function that looks like this:\n * (result: string) => {...}\n */\n export function getBadgeText(details: TabDetails, callback: (result: string) => void): void;\n\n /**\n * Since Chrome 88.\n * Gets the badge text of the action. If no tab is specified, the non-tab-specific badge text is returned.\n * If displayActionCountAsBadgeText is enabled, a placeholder text will be returned unless the\n * declarativeNetRequestFeedback permission is present or tab-specific badge text was provided.\n * @return The `getBadgeText` method provides its result via callback or returned as a `Promise` (MV3 only).\n */\n " +} diff --git a/packages/mergebot/src/_tests/fixtures/55508/_response.json b/packages/mergebot/src/_tests/fixtures/55508/_response.json new file mode 100644 index 0000000000..8a05b5de5a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55508/_response.json @@ -0,0 +1,735 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NzIzMzAzODAx", + "title": "Updated \"chrome.downloads\"", + "createdAt": "2021-08-31T12:00:59Z", + "author": { + "login": "avi12", + "__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" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 55508, + "state": "OPEN", + "headRefOid": "7288ad262198cd40a8457837580b67f9d1b68c7b", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-08-31T12:06:45Z", + "projectColumnName": "Needs Maintainer Review", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-08-31T12:43:49Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-08-31T13:39:37Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-08-31T13:46:27Z", + "projectColumnName": "Needs Maintainer Review", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-08-31T14:55:01Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-09-01T09:13:52Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-09-01T09:18:44Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-09-01T10:25:50Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-09-01T10:30:47Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-09-01T12:12:50Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-09-01T12:17:44Z", + "projectColumnName": "Needs Maintainer Review", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-09-01T12:28:17Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-09-01T12:30:32Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-09-01T12:35:34Z", + "projectColumnName": "Needs Maintainer Review", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "commit": { + "oid": "14188c3b9c7f7b8329485f86fccede3c883599fb", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "createdAt": "2021-08-31T12:34:48Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "createdAt": "2021-08-31T12:35:04Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2021-08-31T12:42:48Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55508#pullrequestreview-742666100", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "avi12", + "__typename": "User" + }, + "commit": { + "oid": "c90e5830dfdffafd7362a697a0b3026cdc9d3e85", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "avi12", + "__typename": "User" + }, + "createdAt": "2021-08-31T13:41:33Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "NONE", + "state": "COMMENTED", + "submittedAt": "2021-08-31T13:41:34Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55508#pullrequestreview-742744242", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "avi12", + "__typename": "User" + }, + "commit": { + "oid": "c90e5830dfdffafd7362a697a0b3026cdc9d3e85", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "avi12", + "__typename": "User" + }, + "createdAt": "2021-08-31T13:42:00Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "NONE", + "state": "COMMENTED", + "submittedAt": "2021-08-31T13:42:00Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55508#pullrequestreview-742744823", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "commit": { + "oid": "42183f97e87038014a22dccccc414c84054a5202", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "createdAt": "2021-08-31T14:12:23Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "createdAt": "2021-08-31T14:14:40Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "createdAt": "2021-08-31T14:52:23Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "createdAt": "2021-08-31T14:53:32Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2021-08-31T14:54:24Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55508#pullrequestreview-742784963", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "commit": { + "oid": "e531c812cd9e1c19d70b397e403612aa2186b598", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "createdAt": "2021-09-01T12:27:21Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "CHANGES_REQUESTED", + "submittedAt": "2021-09-01T12:27:43Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55508#pullrequestreview-743857405", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "commit": { + "oid": "7288ad262198cd40a8457837580b67f9d1b68c7b", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2021-09-01T12:38:30Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55508#pullrequestreview-743868774", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "userTim", + "__typename": "User" + }, + "commit": { + "oid": "7288ad262198cd40a8457837580b67f9d1b68c7b", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2021-09-01T14:59:00Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55508#pullrequestreview-744045372", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 7, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 3652983301, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/7288ad262198cd40a8457837580b67f9d1b68c7b/checks?check_suite_id=3652983301", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7288ad262198cd40a8457837580b67f9d1b68c7b/checks?check_suite_id=3652983301", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 3652985844, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/7288ad262198cd40a8457837580b67f9d1b68c7b/checks?check_suite_id=3652985844", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7288ad262198cd40a8457837580b67f9d1b68c7b/checks?check_suite_id=3652985844", + "checkRuns": { + "nodes": [ + { + "title": "Build #20210901.18 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2021-09-01T12:29:58Z", + "committedDate": "2021-09-01T12:29:58Z", + "pushedDate": "2021-09-01T12:30:10Z", + "oid": "7288ad262198cd40a8457837580b67f9d1b68c7b", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 15, + "nodes": [ + { + "id": "IC_kwDOAFz6BM42MNiP", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 909170831, + "body": "@avi12 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 which 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: @userTim, @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=55508&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----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2021-08-31T12:01:34Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42MNin", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 909170855, + "body": "Hey @avi12,\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": "2021-08-31T12:01:36Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42MNix", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 909170865, + "body": "🔔 @matthewkimber @otiai10 @couven92 @rreverser @sreimer15 @MatCarlson @ekinsol @tregagnon @echoabstract @spasma @bdbai @pokutuna @JasonXian @usertim @idan315 @nicolas377 — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55508/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": "2021-08-31T12:01:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42MUfX", + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "databaseId": 909199319, + "body": "Hey @avi12! You should probably modify tests for this change. It makes it a lot easier for us to merge this PR. Also, your top comment should follow this format:\r\n\r\n```\r\nPlease fill in this template.\r\n\r\n- [ ] Use a meaningful title for the pull request. Include the name of the package modified.\r\n- [ ] Test the change in your own code. (Compile and run.)\r\n- [ ] [Add or edit tests](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/README.md#my-package-teststs) to reflect the change.\r\n- [ ] Follow the advice from the [readme](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/README.md#make-a-pull-request).\r\n- [ ] Avoid [common mistakes](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/README.md#common-mistakes).\r\n- [ ] [Run `npm test `](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/README.md#running-tests).\r\n\r\nIf changing an existing definition:\r\n- [ ] Provide a URL to documentation or source code which provides context for the suggested changes: <>\r\n- [ ] If this PR brings the type definitions up to date with a new version of the JS library, update the version number in the header.```", + "createdAt": "2021-08-31T12:40:00Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42MVCZ", + "author": { + "login": "avi12", + "__typename": "User" + }, + "databaseId": 909201561, + "body": "> You should probably modify tests for this change.\r\n\r\nApologies. I'm honestly not used to making PRs.\r\n\r\n> Also, your top comment should follow this format:\r\n\r\nApologies. I made the pull request directly from the online VSCode (accessed via \"`.`\"), and I do not remember it offering me to add a description.", + "createdAt": "2021-08-31T12:43:15Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42MVIX", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 909201943, + "body": "@avi12 One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2021-08-31T12:43:49Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42MVW-", + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "databaseId": 909202878, + "body": "That's fine!", + "createdAt": "2021-08-31T12:45:10Z", + "reactions": { + "nodes": [ + { + "user": { + "login": "avi12", + "__typename": "User" + }, + "__typename": "Reaction" + } + ], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42MhzK", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 909253834, + "body": "@nicolas377 Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2021-08-31T13:46:27Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42Mwj4", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 909314296, + "body": "@avi12 One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2021-08-31T14:55:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42PwAM", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 910098444, + "body": "@avi12 The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/b083a84b808480af07a1e5049b630a037e7e3ad1/checks?check_suite_id=3651267318).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds which are failing do not end up on the list of PRs for the DT maintainers to review.**\n", + "createdAt": "2021-09-01T09:18:45Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42P9St", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 910152877, + "body": "@avi12 The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/6d3b290140ec106883a1b665a62fbce245ed45d7/checks?check_suite_id=3651921424).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds which are failing do not end up on the list of PRs for the DT maintainers to review.**\n", + "createdAt": "2021-09-01T10:30:48Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42QP3F", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 910228933, + "body": "@nicolas377 Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2021-09-01T12:17:44Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42QRrg", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 910236384, + "body": "@avi12 One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2021-09-01T12:28:17Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42QS-Q", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 910241680, + "body": "@nicolas377 Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2021-09-01T12:35:34Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42QUCP", + "author": { + "login": "nicolas377", + "__typename": "User" + }, + "databaseId": 910246031, + "body": "@orta This PR is good to go! Could you approve it?", + "createdAt": "2021-09-01T12:41:45Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 1, + "nodes": [ + { + "path": "types/chrome/index.d.ts", + "additions": 16, + "deletions": 8, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgQLTuM", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy", + "name": "Needs Maintainer Review", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/55508/derived.json b/packages/mergebot/src/_tests/fixtures/55508/derived.json new file mode 100644 index 0000000000..703f803ea9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55508/derived.json @@ -0,0 +1,64 @@ +{ + "type": "info", + "now": "2021-09-06T21:31:20.974Z", + "pr_number": 55508, + "author": "avi12", + "headCommitOid": "7288ad262198cd40a8457837580b67f9d1b68c7b", + "mergeBaseOid": "master", + "lastPushDate": "2021-09-01T12:30:10.000Z", + "lastActivityDate": "2021-09-01T14:59:00.000Z", + "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", + "couven92", + "rreverser", + "sreimer15", + "MatCarlson", + "ekinsol", + "tregagnon", + "echoabstract", + "spasma", + "bdbai", + "pokutuna", + "JasonXian", + "usertim", + "idan315", + "nicolas377" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "userTim", + "date": "2021-09-01T14:59:00.000Z", + "isMaintainer": false + }, + { + "type": "approved", + "reviewer": "nicolas377", + "date": "2021-09-01T12:38:30.000Z", + "isMaintainer": false + } + ], + "mainBotCommentID": 909170831, + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/55508/mutations.json b/packages/mergebot/src/_tests/fixtures/55508/mutations.json new file mode 100644 index 0000000000..ea707bdb03 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55508/mutations.json @@ -0,0 +1,20 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM42MNiP", + "body": "@avi12 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: @userTim, @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=55508&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----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NzIzMzAzODAx", + "body": ":hourglass_flowing_sand: Hi @avi12,\n\nIt's been a few days since this PR was approved by userTim, 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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/55508/result.json b/packages/mergebot/src/_tests/fixtures/55508/result.json new file mode 100644 index 0000000000..9c066f3986 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55508/result.json @@ -0,0 +1,25 @@ +{ + "projectColumn": "Needs Maintainer Review", + "labels": [ + "Popular package", + "Owner Approved", + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @avi12,\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": "@avi12 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: @userTim, @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=55508&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----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "wait-for-merge-offer-7288ad2", + "status": ":hourglass_flowing_sand: Hi @avi12,\n\nIt's been a few days since this PR was approved by userTim, 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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/55512/_downloads.json b/packages/mergebot/src/_tests/fixtures/55512/_downloads.json new file mode 100644 index 0000000000..663d3c49ff --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55512/_downloads.json @@ -0,0 +1,3 @@ +{ + "react-datepicker": 1437773 +} diff --git a/packages/mergebot/src/_tests/fixtures/55512/_files.json b/packages/mergebot/src/_tests/fixtures/55512/_files.json new file mode 100644 index 0000000000..dfe8c96762 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55512/_files.json @@ -0,0 +1,4 @@ +{ + "master:types/react-datepicker/index.d.ts": "// Type definitions for react-datepicker 4.1\n// Project: https://github.com/Hacker0x01/react-datepicker\n// Definitions by: Rajab Shakirov ,\n// Andrey Balokha ,\n// Greg Smith ,\n// Roy Xue \n// Koala Human \n// Justin Grant \n// Jake Boone \n// Roman Nuritdinov \n// Avi Klaiman \n// Naoki Sekiguchi \n// tu4mo \n// Kerry Gougeon \n// Shiftr Tech SAS \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// Minimum TypeScript Version: 3.8\n\nimport * as React from 'react';\nimport * as Popper from '@popperjs/core';\nimport { Locale } from 'date-fns';\nimport { Modifier, StrictModifierNames } from 'react-popper';\n\nexport function registerLocale(localeName: string, localeData: {}): void;\nexport function setDefaultLocale(localeName: string): void;\nexport function getDefaultLocale(): string;\nexport function CalendarContainer(props: {\n className?: string | undefined;\n children?: React.ReactNode | undefined;\n showPopperArrow?: boolean | undefined;\n arrowProps?: { [propName: string]: any } | undefined;\n}): React.ReactElement;\n\ninterface HighlightDates {\n [className: string]: Date[];\n}\n\nexport interface ReactDatePickerProps {\n adjustDateOnChange?: boolean | undefined;\n allowSameDay?: boolean | undefined;\n ariaDescribedBy?: string | undefined;\n ariaInvalid?: string | undefined;\n ariaLabelClose?: string | undefined;\n ariaLabelledBy?: string | undefined;\n ariaRequired?: string | undefined;\n autoComplete?: string | undefined;\n autoFocus?: boolean | undefined;\n calendarClassName?: string | undefined;\n calendarContainer?(props: { children: React.ReactNode[] }): React.ReactNode;\n calendarStartDay?: number | undefined;\n children?: React.ReactNode | undefined;\n chooseDayAriaLabelPrefix?: string | undefined;\n className?: string | undefined;\n clearButtonClassName?: string | undefined;\n clearButtonTitle?: string | undefined;\n closeOnScroll?: boolean | ((e: Event) => boolean) | undefined;\n customInput?: React.ReactNode | undefined;\n customInputRef?: string | undefined;\n customTimeInput?: React.ReactNode | undefined;\n dateFormat?: string | string[] | undefined;\n dateFormatCalendar?: string | undefined;\n dayClassName?(date: Date): string | null;\n weekDayClassName?(date: Date): string | null;\n monthClassName?(date: Date): string | null;\n timeClassName?(date: Date): string | null;\n disabledDayAriaLabelPrefix?: string | undefined;\n disabled?: boolean | undefined;\n disabledKeyboardNavigation?: boolean | undefined;\n dropdownMode?: 'scroll' | 'select' | undefined;\n endDate?: Date | null | undefined;\n excludeDates?: Date[] | undefined;\n excludeTimes?: Date[] | undefined;\n filterDate?(date: Date): boolean;\n filterTime?(date: Date): boolean;\n fixedHeight?: boolean | undefined;\n forceShowMonthNavigation?: boolean | undefined;\n formatWeekDay?(formattedDate: string): React.ReactNode;\n formatWeekNumber?(date: Date): string | number;\n highlightDates?: Array | undefined;\n id?: string | undefined;\n includeDates?: Date[] | undefined;\n includeTimes?: Date[] | undefined;\n injectTimes?: Date[] | undefined;\n inline?: boolean | undefined;\n focusSelectedMonth?: boolean | undefined;\n isClearable?: boolean | undefined;\n locale?: string | Locale | undefined;\n maxDate?: Date | null | undefined;\n maxTime?: Date | undefined;\n minDate?: Date | null | undefined;\n minTime?: Date | undefined;\n monthsShown?: number | undefined;\n name?: string | undefined;\n nextMonthButtonLabel?: string | React.ReactNode | undefined;\n nextYearButtonLabel?: string | undefined;\n onBlur?(event: React.FocusEvent): void;\n onCalendarClose?(): void;\n onCalendarOpen?(): void;\n onChange(\n date: Date | [Date | null, Date | null] | /* for selectsRange */ null,\n event: React.SyntheticEvent | undefined,\n ): void;\n onChangeRaw?(event: React.FocusEvent): void;\n onClickOutside?(event: React.MouseEvent): void;\n onDayMouseEnter?: ((date: Date) => void) | undefined;\n onFocus?(event: React.FocusEvent): void;\n onInputClick?(): void;\n onInputError?(err: { code: number; msg: string }): void;\n onKeyDown?(event: React.KeyboardEvent): void;\n onMonthChange?(date: Date): void;\n onMonthMouseLeave?: (() => void) | undefined;\n onSelect?(date: Date, event: React.SyntheticEvent | undefined): void;\n onWeekSelect?(\n firstDayOfWeek: Date,\n weekNumber: string | number,\n event: React.SyntheticEvent | undefined,\n ): void;\n onYearChange?(date: Date): void;\n open?: boolean | undefined;\n openToDate?: Date | undefined;\n peekNextMonth?: boolean | undefined;\n placeholderText?: string | undefined;\n popperClassName?: string | undefined;\n popperContainer?(props: { children: React.ReactNode[] }): React.ReactNode;\n popperModifiers?: ReadonlyArray> | undefined;\n popperPlacement?: Popper.Placement | undefined;\n popperProps?: {} | undefined;\n preventOpenOnFocus?: boolean | undefined;\n previousMonthButtonLabel?: string | React.ReactNode | undefined;\n previousYearButtonLabel?: string | undefined;\n readOnly?: boolean | undefined;\n renderCustomHeader?(params: {\n monthDate: Date;\n date: Date;\n changeYear(year: number): void;\n changeMonth(month: number): void;\n customHeaderCount: number;\n decreaseMonth(): void;\n increaseMonth(): void;\n prevMonthButtonDisabled: boolean;\n nextMonthButtonDisabled: boolean;\n decreaseYear(): void;\n increaseYear(): void;\n prevYearButtonDisabled: boolean;\n nextYearButtonDisabled: boolean;\n }): React.ReactNode;\n renderDayContents?(dayOfMonth: number, date?: Date): React.ReactNode;\n required?: boolean | undefined;\n scrollableMonthYearDropdown?: boolean | undefined;\n scrollableYearDropdown?: boolean | undefined;\n selected?: Date | null | undefined;\n selectsEnd?: boolean | undefined;\n selectsStart?: boolean | undefined;\n selectsRange?: boolean | undefined;\n shouldCloseOnSelect?: boolean | undefined;\n showDisabledMonthNavigation?: boolean | undefined;\n showFullMonthYearPicker?: boolean | undefined;\n showMonthDropdown?: boolean | undefined;\n showMonthYearDropdown?: boolean | undefined;\n showMonthYearPicker?: boolean | undefined;\n showPopperArrow?: boolean | undefined;\n showPreviousMonths?: boolean | undefined;\n showQuarterYearPicker?: boolean | undefined;\n showTimeInput?: boolean | undefined;\n showTimeSelect?: boolean | undefined;\n showTimeSelectOnly?: boolean | undefined;\n showTwoColumnMonthYearPicker?: boolean | undefined;\n showFourColumnMonthYearPicker?: boolean | undefined;\n showWeekNumbers?: boolean | undefined;\n showYearDropdown?: boolean | undefined;\n showYearPicker?: boolean | undefined;\n startDate?: Date | null | undefined;\n startOpen?: boolean | undefined;\n strictParsing?: boolean | undefined;\n tabIndex?: number | undefined;\n timeCaption?: string | undefined;\n timeFormat?: string | undefined;\n timeInputLabel?: string | undefined;\n timeIntervals?: number | undefined;\n title?: string | undefined;\n todayButton?: React.ReactNode | undefined;\n useShortMonthInDropdown?: boolean | undefined;\n useWeekdaysShort?: boolean | undefined;\n weekAriaLabelPrefix?: string | undefined;\n value?: string | undefined;\n weekLabel?: string | undefined;\n withPortal?: boolean | undefined;\n portalId?: string | undefined;\n wrapperClassName?: string | undefined;\n yearDropdownItemNumber?: number | undefined;\n excludeScrollbar?: boolean | undefined;\n enableTabLoop?: boolean | undefined;\n yearItemNumber?: number | undefined;\n}\n\nexport class ReactDatePicker extends React.Component<\n ReactDatePickerProps\n> {\n readonly setBlur: () => void;\n readonly setFocus: () => void;\n readonly setOpen: (open: boolean, skipSetBlur?: boolean) => void;\n readonly isCalendarOpen: () => boolean;\n}\n\nexport default ReactDatePicker;\n", + "e90d61bddfd00fa6db114993d0689cdb367be7e5:types/react-datepicker/index.d.ts": "// Type definitions for react-datepicker 4.1\n// Project: https://github.com/Hacker0x01/react-datepicker\n// Definitions by: Rajab Shakirov ,\n// Andrey Balokha ,\n// Greg Smith ,\n// Roy Xue \n// Koala Human \n// Justin Grant \n// Jake Boone \n// Roman Nuritdinov \n// Avi Klaiman \n// Naoki Sekiguchi \n// tu4mo \n// Kerry Gougeon \n// Shiftr Tech SAS \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// Minimum TypeScript Version: 3.8\n\nimport * as React from 'react';\nimport * as Popper from '@popperjs/core';\nimport { Locale } from 'date-fns';\nimport { Modifier } from 'react-popper';\n\nexport function registerLocale(localeName: string, localeData: Locale): void;\nexport function setDefaultLocale(localeName: string): void;\nexport function getDefaultLocale(): string;\nexport function CalendarContainer(props: {\n className?: string | undefined;\n children?: React.ReactNode | undefined;\n showPopperArrow?: boolean | undefined;\n arrowProps?: { [propName: string]: any } | undefined;\n}): React.ReactElement;\n\ninterface HighlightDates {\n [className: string]: Date[];\n}\n\nexport interface ReactDatePickerProps {\n adjustDateOnChange?: boolean | undefined;\n allowSameDay?: boolean | undefined;\n ariaDescribedBy?: string | undefined;\n ariaInvalid?: string | undefined;\n ariaLabelClose?: string | undefined;\n ariaLabelledBy?: string | undefined;\n ariaRequired?: string | undefined;\n autoComplete?: string | undefined;\n autoFocus?: boolean | undefined;\n calendarClassName?: string | undefined;\n calendarContainer?(props: { children: React.ReactNode[] }): React.ReactNode;\n calendarStartDay?: number | undefined;\n children?: React.ReactNode | undefined;\n chooseDayAriaLabelPrefix?: string | undefined;\n className?: string | undefined;\n clearButtonClassName?: string | undefined;\n clearButtonTitle?: string | undefined;\n closeOnScroll?: boolean | ((e: Event) => boolean) | undefined;\n customInput?: React.ReactNode | undefined;\n customInputRef?: string | undefined;\n customTimeInput?: React.ReactNode | undefined;\n dateFormat?: string | string[] | undefined;\n dateFormatCalendar?: string | undefined;\n dayClassName?(date: Date): string | null;\n weekDayClassName?(date: Date): string | null;\n monthClassName?(date: Date): string | null;\n timeClassName?(date: Date): string | null;\n disabledDayAriaLabelPrefix?: string | undefined;\n disabled?: boolean | undefined;\n disabledKeyboardNavigation?: boolean | undefined;\n dropdownMode?: 'scroll' | 'select' | undefined;\n endDate?: Date | null | undefined;\n excludeDates?: Date[] | undefined;\n excludeTimes?: Date[] | undefined;\n filterDate?(date: Date): boolean;\n filterTime?(date: Date): boolean;\n fixedHeight?: boolean | undefined;\n forceShowMonthNavigation?: boolean | undefined;\n formatWeekDay?(formattedDate: string): React.ReactNode;\n formatWeekNumber?(date: Date): string | number;\n highlightDates?: Array | undefined;\n id?: string | undefined;\n includeDates?: Date[] | undefined;\n includeTimes?: Date[] | undefined;\n injectTimes?: Date[] | undefined;\n inline?: boolean | undefined;\n focusSelectedMonth?: boolean | undefined;\n isClearable?: boolean | undefined;\n locale?: string | Locale | undefined;\n maxDate?: Date | null | undefined;\n maxTime?: Date | undefined;\n minDate?: Date | null | undefined;\n minTime?: Date | undefined;\n monthsShown?: number | undefined;\n name?: string | undefined;\n nextMonthButtonLabel?: string | React.ReactNode | undefined;\n nextYearButtonLabel?: string | undefined;\n onBlur?(event: React.FocusEvent): void;\n onCalendarClose?(): void;\n onCalendarOpen?(): void;\n onChange(\n date: Date | [Date | null, Date | null] | /* for selectsRange */ null,\n event: React.SyntheticEvent | undefined,\n ): void;\n onChangeRaw?(event: React.FocusEvent): void;\n onClickOutside?(event: React.MouseEvent): void;\n onDayMouseEnter?: ((date: Date) => void) | undefined;\n onFocus?(event: React.FocusEvent): void;\n onInputClick?(): void;\n onInputError?(err: { code: number; msg: string }): void;\n onKeyDown?(event: React.KeyboardEvent): void;\n onMonthChange?(date: Date): void;\n onMonthMouseLeave?: (() => void) | undefined;\n onSelect?(date: Date, event: React.SyntheticEvent | undefined): void;\n onWeekSelect?(\n firstDayOfWeek: Date,\n weekNumber: string | number,\n event: React.SyntheticEvent | undefined,\n ): void;\n onYearChange?(date: Date): void;\n open?: boolean | undefined;\n openToDate?: Date | undefined;\n peekNextMonth?: boolean | undefined;\n placeholderText?: string | undefined;\n popperClassName?: string | undefined;\n popperContainer?(props: { children: React.ReactNode[] }): React.ReactNode;\n popperModifiers?: ReadonlyArray> | undefined;\n popperPlacement?: Popper.Placement | undefined;\n popperProps?: {} | undefined;\n preventOpenOnFocus?: boolean | undefined;\n previousMonthButtonLabel?: string | React.ReactNode | undefined;\n previousYearButtonLabel?: string | undefined;\n readOnly?: boolean | undefined;\n renderCustomHeader?(params: {\n monthDate: Date;\n date: Date;\n changeYear(year: number): void;\n changeMonth(month: number): void;\n customHeaderCount: number;\n decreaseMonth(): void;\n increaseMonth(): void;\n prevMonthButtonDisabled: boolean;\n nextMonthButtonDisabled: boolean;\n decreaseYear(): void;\n increaseYear(): void;\n prevYearButtonDisabled: boolean;\n nextYearButtonDisabled: boolean;\n }): React.ReactNode;\n renderDayContents?(dayOfMonth: number, date?: Date): React.ReactNode;\n required?: boolean | undefined;\n scrollableMonthYearDropdown?: boolean | undefined;\n scrollableYearDropdown?: boolean | undefined;\n selected?: Date | null | undefined;\n selectsEnd?: boolean | undefined;\n selectsStart?: boolean | undefined;\n selectsRange?: boolean | undefined;\n shouldCloseOnSelect?: boolean | undefined;\n showDisabledMonthNavigation?: boolean | undefined;\n showFullMonthYearPicker?: boolean | undefined;\n showMonthDropdown?: boolean | undefined;\n showMonthYearDropdown?: boolean | undefined;\n showMonthYearPicker?: boolean | undefined;\n showPopperArrow?: boolean | undefined;\n showPreviousMonths?: boolean | undefined;\n showQuarterYearPicker?: boolean | undefined;\n showTimeInput?: boolean | undefined;\n showTimeSelect?: boolean | undefined;\n showTimeSelectOnly?: boolean | undefined;\n showTwoColumnMonthYearPicker?: boolean | undefined;\n showFourColumnMonthYearPicker?: boolean | undefined;\n showWeekNumbers?: boolean | undefined;\n showYearDropdown?: boolean | undefined;\n showYearPicker?: boolean | undefined;\n startDate?: Date | null | undefined;\n startOpen?: boolean | undefined;\n strictParsing?: boolean | undefined;\n tabIndex?: number | undefined;\n timeCaption?: string | undefined;\n timeFormat?: string | undefined;\n timeInputLabel?: string | undefined;\n timeIntervals?: number | undefined;\n title?: string | undefined;\n todayButton?: React.ReactNode | undefined;\n useShortMonthInDropdown?: boolean | undefined;\n useWeekdaysShort?: boolean | undefined;\n weekAriaLabelPrefix?: string | undefined;\n value?: string | undefined;\n weekLabel?: string | undefined;\n withPortal?: boolean | undefined;\n portalId?: string | undefined;\n wrapperClassName?: string | undefined;\n yearDropdownItemNumber?: number | undefined;\n excludeScrollbar?: boolean | undefined;\n enableTabLoop?: boolean | undefined;\n yearItemNumber?: number | undefined;\n}\n\ndeclare class ReactDatePicker extends React.Component> {\n readonly setBlur: () => void;\n readonly setFocus: () => void;\n readonly setOpen: (open: boolean, skipSetBlur?: boolean) => void;\n readonly isCalendarOpen: () => boolean;\n}\n\nexport default ReactDatePicker;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/55512/_response.json b/packages/mergebot/src/_tests/fixtures/55512/_response.json new file mode 100644 index 0000000000..5a7d9a6062 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55512/_response.json @@ -0,0 +1,239 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NzIzNDc0ODMy", + "title": "fix(react-datepicker): fix registerLocale localData type", + "createdAt": "2021-08-31T15:14:41Z", + "author": { + "login": "philibea", + "__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" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 55512, + "state": "OPEN", + "headRefOid": "e90d61bddfd00fa6db114993d0689cdb367be7e5", + "changedFiles": 1, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-08-31T15:19:36Z", + "projectColumnName": "Needs Maintainer Review", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "Ky6uk", + "__typename": "User" + }, + "commit": { + "oid": "e90d61bddfd00fa6db114993d0689cdb367be7e5", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2021-08-31T18:33:55Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55512#pullrequestreview-743070006", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 3643302080, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/e90d61bddfd00fa6db114993d0689cdb367be7e5/checks?check_suite_id=3643302080", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e90d61bddfd00fa6db114993d0689cdb367be7e5/checks?check_suite_id=3643302080", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 3643303283, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/e90d61bddfd00fa6db114993d0689cdb367be7e5/checks?check_suite_id=3643303283", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/e90d61bddfd00fa6db114993d0689cdb367be7e5/checks?check_suite_id=3643303283", + "checkRuns": { + "nodes": [ + { + "title": "Build #20210831.26 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2021-08-31T15:13:13Z", + "committedDate": "2021-08-31T15:13:13Z", + "pushedDate": "2021-08-31T15:13:30Z", + "oid": "e90d61bddfd00fa6db114993d0689cdb367be7e5", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "IC_kwDOAFz6BM42M0xH", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 909331527, + "body": "@philibea 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 which I will keep updated.***\n\n## 1 package in this PR\n\n* `react-datepicker` — [on npm](https://www.npmjs.com/package/react-datepicker), [on unpkg](https://unpkg.com/browse/react-datepicker@latest/)\n - owner-approval: @Ky6uk\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=55512&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----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2021-08-31T15:15:16Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42M0xo", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 909331560, + "body": "Hey @philibea,\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": "2021-08-31T15:15:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42M0xz", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 909331571, + "body": "🔔 @radziksh @andrewBalekha @smrq @royxue @KoalaHuman @justingrant @jakeboone02 @Ky6uk @aviklai @seckie @tu4mo @kerry-g @ShiftrTechSAS — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55512/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": "2021-08-31T15:15:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 1, + "nodes": [ + { + "path": "types/react-datepicker/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgQLi2w", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy", + "name": "Needs Maintainer Review", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/55512/derived.json b/packages/mergebot/src/_tests/fixtures/55512/derived.json new file mode 100644 index 0000000000..cd817c6c26 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55512/derived.json @@ -0,0 +1,55 @@ +{ + "type": "info", + "now": "2021-09-06T20:42:33.690Z", + "pr_number": 55512, + "author": "philibea", + "headCommitOid": "e90d61bddfd00fa6db114993d0689cdb367be7e5", + "mergeBaseOid": "master", + "lastPushDate": "2021-08-31T15:13:30.000Z", + "lastActivityDate": "2021-08-31T18:33:55.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": "react-datepicker", + "kind": "edit", + "files": [ + { + "path": "types/react-datepicker/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "radziksh", + "andrewBalekha", + "smrq", + "royxue", + "KoalaHuman", + "justingrant", + "jakeboone02", + "Ky6uk", + "aviklai", + "seckie", + "tu4mo", + "kerry-g", + "ShiftrTechSAS" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "Ky6uk", + "date": "2021-08-31T18:33:55.000Z", + "isMaintainer": false + } + ], + "mainBotCommentID": 909331527, + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/55512/mutations.json b/packages/mergebot/src/_tests/fixtures/55512/mutations.json new file mode 100644 index 0000000000..92cc2a4ccc --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55512/mutations.json @@ -0,0 +1,20 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM42M0xH", + "body": "@philibea 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* `react-datepicker` — [on npm](https://www.npmjs.com/package/react-datepicker), [on unpkg](https://unpkg.com/browse/react-datepicker@latest/)\n - owner-approval: @Ky6uk\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=55512&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----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "MDExOlB1bGxSZXF1ZXN0NzIzNDc0ODMy", + "body": ":hourglass_flowing_sand: Hi @philibea,\n\nIt's been a few days since this PR was approved by Ky6uk 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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/55512/result.json b/packages/mergebot/src/_tests/fixtures/55512/result.json new file mode 100644 index 0000000000..650126bfad --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55512/result.json @@ -0,0 +1,25 @@ +{ + "projectColumn": "Needs Maintainer Review", + "labels": [ + "Popular package", + "Owner Approved", + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @philibea,\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": "@philibea 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* `react-datepicker` — [on npm](https://www.npmjs.com/package/react-datepicker), [on unpkg](https://unpkg.com/browse/react-datepicker@latest/)\n - owner-approval: @Ky6uk\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=55512&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----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "wait-for-merge-offer-e90d61b", + "status": ":hourglass_flowing_sand: Hi @philibea,\n\nIt's been a few days since this PR was approved by Ky6uk 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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/55741/_downloads.json b/packages/mergebot/src/_tests/fixtures/55741/_downloads.json new file mode 100644 index 0000000000..52321ec9f8 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55741/_downloads.json @@ -0,0 +1,3 @@ +{ + "ax": 0 +} diff --git a/packages/mergebot/src/_tests/fixtures/55741/_files.json b/packages/mergebot/src/_tests/fixtures/55741/_files.json new file mode 100644 index 0000000000..c612579f4d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55741/_files.json @@ -0,0 +1,5 @@ +{ + "aded751196aea4180928204085f088eb530d7b88:types/ax/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictFunctionTypes\": true,\n \"strictNullChecks\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"ax-tests.ts\"\n ]\n}\n", + "aded751196aea4180928204085f088eb530d7b88:types/ax/tslint.json": "{ \"extends\": \"@definitelytyped/dtslint/dt.json\" }\n", + "aded751196aea4180928204085f088eb530d7b88:types/ax/index.d.ts": "// Type definitions for ax 0.1\n// Project: https://github.com/AstroxNetwork/ax\n// Definitions by: Hsehoiki \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\ninterface AxType {\n /**\n * ax function\n */\n setNavigationBarTitle: (text: string) => boolean;\n setNavigationBarColor: (color: string) => boolean;\n}\n\n/**\n * ax is global object\n */\ndeclare const ax: AxType;\n\nexport = ax;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/55741/_response.json b/packages/mergebot/src/_tests/fixtures/55741/_response.json new file mode 100644 index 0000000000..562fdb2f09 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55741/_response.json @@ -0,0 +1,293 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "MDExOlB1bGxSZXF1ZXN0NzMyNTEwMzkx", + "title": "Feat/kasumisk", + "createdAt": "2021-09-13T08:32:21Z", + "author": { + "login": "kasumisk", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 55741, + "state": "OPEN", + "headRefOid": "aded751196aea4180928204085f088eb530d7b88", + "changedFiles": 4, + "commitIds": {}, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-09-13T08:40:11Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "createdAt": "2021-09-13T08:41:20Z", + "__typename": "ReopenedEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2021-09-13T08:44:47Z", + "projectColumnName": "Needs Maintainer Action", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 3751060170, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/aded751196aea4180928204085f088eb530d7b88/checks?check_suite_id=3751060170", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/aded751196aea4180928204085f088eb530d7b88/checks?check_suite_id=3751060170", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 3751061670, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/aded751196aea4180928204085f088eb530d7b88/checks?check_suite_id=3751061670", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/aded751196aea4180928204085f088eb530d7b88/checks?check_suite_id=3751061670", + "checkRuns": { + "nodes": [ + { + "title": "Build #20210913.8 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 3751075506, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/aded751196aea4180928204085f088eb530d7b88/checks?check_suite_id=3751075506", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/aded751196aea4180928204085f088eb530d7b88/checks?check_suite_id=3751075506", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2021-09-13T08:39:27Z", + "committedDate": "2021-09-13T08:39:27Z", + "pushedDate": "2021-09-13T08:39:37Z", + "oid": "aded751196aea4180928204085f088eb530d7b88", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "IC_kwDOAFz6BM42twsQ", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 917965584, + "body": "@kasumisk 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 which I will keep updated.***\n\n## 1 package in this PR\n\n* `ax` (*new!*) — [on npm](https://www.npmjs.com/package/ax), [on unpkg](https://unpkg.com/browse/ax@latest/)\n - 1 added owner: @AstroxNetwork\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=55741&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 when there are new packages added\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": "2021-09-13T08:34:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42twsu", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 917965614, + "body": "🔔 @kasumisk — you're the only owner, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55741/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2021-09-13T08:34:32Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42tws1", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 917965621, + "body": "@kasumisk The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f37f01fdf29022d7f5bf05988adc1fb28f84db9d/checks?check_suite_id=3750996288).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds which are failing do not end up on the list of PRs for the DT maintainers to review.**\n", + "createdAt": "2021-09-13T08:34:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42txtB", + "author": { + "login": "kasumisk", + "__typename": "User" + }, + "databaseId": 917969729, + "body": "add ax", + "createdAt": "2021-09-13T08:40:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM42wAqN", + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "databaseId": 918555277, + "body": "what's the relation to this declaration:\r\nhttps://github.com/AstroxNetwork/ax/blob/master/index.d.ts\r\nhttps://github.com/AstroxNetwork/ax/blob/master/package.json#L6", + "createdAt": "2021-09-13T20:35:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 4, + "nodes": [ + { + "path": "types/ax/ax-tests.ts", + "additions": 4, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/ax/index.d.ts", + "additions": 19, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/ax/tsconfig.json", + "additions": 23, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/ax/tslint.json", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "NA", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgQXZbg", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2", + "name": "Needs Maintainer Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/55741/derived.json b/packages/mergebot/src/_tests/fixtures/55741/derived.json new file mode 100644 index 0000000000..58540a7333 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55741/derived.json @@ -0,0 +1,49 @@ +{ + "type": "info", + "now": "2021-09-14T10:47:18.683Z", + "pr_number": 55741, + "author": "kasumisk", + "headCommitOid": "aded751196aea4180928204085f088eb530d7b88", + "mergeBaseOid": "master", + "lastPushDate": "2021-09-13T08:39:37.000Z", + "lastActivityDate": "2021-09-13T20:35:23.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "ax", + "kind": "add", + "files": [ + { + "path": "types/ax/ax-tests.ts", + "kind": "test" + }, + { + "path": "types/ax/index.d.ts", + "kind": "definition" + }, + { + "path": "types/ax/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/ax/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [ + "AstroxNetwork" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "mainBotCommentID": 917965584, + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/55741/mutations.json b/packages/mergebot/src/_tests/fixtures/55741/mutations.json new file mode 100644 index 0000000000..340ea13154 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55741/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM42twsQ", + "body": "@kasumisk 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* `ax` (*new!*) — [on npm](https://www.npmjs.com/package/ax), [on unpkg](https://unpkg.com/browse/ax@latest/)\n - 1 added owner: @AstroxNetwork\n - Config files to check:\n - [`ax/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55741/files/aded751196aea4180928204085f088eb530d7b88#diff-209b5dbfc4cf08a4407de0f6d35907910a65d04f5dc8ec94176e9bd46d8ce275): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=55741&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 when there are new packages added\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "MDExOlB1bGxSZXF1ZXN0NzMyNTEwMzkx" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM42twsu", + "body": "🔔 @kasumisk — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55741/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/55741/result.json b/packages/mergebot/src/_tests/fixtures/55741/result.json new file mode 100644 index 0000000000..7fa2771854 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/55741/result.json @@ -0,0 +1,20 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "New Definition", + "Check Config" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@kasumisk 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* `ax` (*new!*) — [on npm](https://www.npmjs.com/package/ax), [on unpkg](https://unpkg.com/browse/ax@latest/)\n - 1 added owner: @AstroxNetwork\n - Config files to check:\n - [`ax/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55741/files/aded751196aea4180928204085f088eb530d7b88#diff-209b5dbfc4cf08a4407de0f6d35907910a65d04f5dc8ec94176e9bd46d8ce275): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=55741&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 when there are new packages added\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", + "status": "🔔 @kasumisk — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55741/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/58632/_downloads.json b/packages/mergebot/src/_tests/fixtures/58632/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/58632/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/58632/_files.json b/packages/mergebot/src/_tests/fixtures/58632/_files.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/58632/_files.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/58632/_response.json b/packages/mergebot/src/_tests/fixtures/58632/_response.json new file mode 100644 index 0000000000..ba1b261647 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/58632/_response.json @@ -0,0 +1,325 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM4yI35U", + "title": "Remove contributors with deleted accounts", + "createdAt": "2022-02-07T00:04:01Z", + "author": { + "login": "github-actions", + "__typename": "Bot" + }, + "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": "Where is GH Actions?", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + }, + { + "name": "Edits Owners", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 58632, + "state": "MERGED", + "headRefOid": "d7304db2a17425c0b41451f5c2e056d063725ecf", + "changedFiles": 6, + "additions": 8, + "deletions": 12, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "d7304db2a17425c0b41451f5c2e056d063725ecf", + "parents": { + "nodes": [ + { + "oid": "e33d3fe8b10acee209c6353529cf180b3cac25ac", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "alitaheri", + "__typename": "User" + }, + "commit": { + "oid": "d7304db2a17425c0b41451f5c2e056d063725ecf", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2022-02-08T14:24:13Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/58632#pullrequestreview-876105577", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "candyapplecorn", + "__typename": "User" + }, + "commit": { + "oid": "d7304db2a17425c0b41451f5c2e056d063725ecf", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2022-02-09T22:06:31Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/58632#pullrequestreview-878109819", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "al-fyodorov", + "__typename": "User" + }, + "commit": { + "oid": "d7304db2a17425c0b41451f5c2e056d063725ecf", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2022-02-15T11:39:02Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/58632#pullrequestreview-882856991", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 5197815169, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/d7304db2a17425c0b41451f5c2e056d063725ecf/checks?check_suite_id=5197815169", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/d7304db2a17425c0b41451f5c2e056d063725ecf/checks?check_suite_id=5197815169", + "checkRuns": { + "nodes": [ + { + "title": "Build #20220207.1 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 5197815175, + "app": { + "name": "Dependabot", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/d7304db2a17425c0b41451f5c2e056d063725ecf/checks?check_suite_id=5197815175", + "status": "QUEUED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/d7304db2a17425c0b41451f5c2e056d063725ecf/checks?check_suite_id=5197815175", + "checkRuns": { + "nodes": [], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2022-02-07T00:03:58Z", + "committedDate": "2022-02-07T00:03:58Z", + "pushedDate": "2022-02-07T00:04:05Z", + "oid": "d7304db2a17425c0b41451f5c2e056d063725ecf", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 4, + "nodes": [ + { + "id": "IC_kwDOAFz6BM49cv4g", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1030946336, + "body": "@github-actions Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 6 packages in this PR\n\n* `mithril-global` — [on npm](https://www.npmjs.com/package/mithril-global), [on unpkg](https://unpkg.com/browse/mithril-global@latest/)\n - 1 removed owner: @isiahmeadows\n* `mithril` — [on npm](https://www.npmjs.com/package/mithril), [on unpkg](https://unpkg.com/browse/mithril@latest/)\n - 1 removed owner: @isiahmeadows\n* `ospec` — [on npm](https://www.npmjs.com/package/ospec), [on unpkg](https://unpkg.com/browse/ospec@latest/)\n - 1 removed owner: @isiahmeadows\n* `react-grid-layout` — [on npm](https://www.npmjs.com/package/react-grid-layout), [on unpkg](https://unpkg.com/browse/react-grid-layout@latest/)\n - owner-approval: @al-fyodorov, @alitaheri\n - 1 removed owner: @catusmagnus\n* `react-native-fbsdk` — [on npm](https://www.npmjs.com/package/react-native-fbsdk), [on unpkg](https://unpkg.com/browse/react-native-fbsdk@latest/)\n - 1 removed owner: @UHKim\n* `ssh2-sftp-client` — [on npm](https://www.npmjs.com/package/ssh2-sftp-client), [on unpkg](https://unpkg.com/browse/ssh2-sftp-client@latest/)\n - owner-approval: @candyapplecorn\n - 1 removed owner: @sgalizia\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=58632&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❓ Continuous integration tests have gone missing\n * 🕐 A DT maintainer needs to approve changes which 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## Inactive\n\nThis PR has been inactive for 10 days.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2022-02-07T00:04:41Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM49cv4q", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1030946346, + "body": "🔔 @spacejack @isiahmeadows @maranomynet @abirkholz @alitaheri @ZheyangSong @andrewhathaway @manav-m @al-fyodorov @catusmagnus @ifiokjr @titozzz @stuartforrest-infinity @UHKim @igrayson @ascariandrea @kartik2406 @viamuli @gbhmt @builtbylane @loru88 @sgalizia @hengkx @candyapplecorn @tsop14 — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/58632/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": "2022-02-07T00:04:43Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM49pTyu", + "author": { + "login": "candyapplecorn", + "__typename": "User" + }, + "databaseId": 1034239150, + "body": "This doesn't seem morally right. I don't know how to remove my approval, but if I could I would.\r\nJust because their accounts were deleted, doesn't invalidate their past work.\r\nEdit - Unless the purpose of putting ones' name is to let other contributors have people to contact for info/help? But in my experience, it's always been just as much about getting one's name on a contributor list, as it is about recording a breadcrumb trail of past contributors for new contributors to access as a resource.", + "createdAt": "2022-02-09T22:08:45Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM4-MZQM", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "databaseId": 1043436556, + "body": "@candyapplecorn the purpose of the header comment is not attribution; it’s ongoing maintenance. These accounts get automatically pinged for reviews on future PRs (like you were pinged here), and when they approve, the PRs get fast-tracked to merge. The reason we have to delete inactive ones is that GitHub releases the usernames of deleted accounts after a while, so new users could be signing up and be getting pinged for reviews of something they’ve never heard of. I’m sympathetic to the unintended consequence of erasing something that someone wanted attribution for, but the reality is that people intentionally remove themselves from these headers all the time when they want to stop getting pinged for reviews, and we have no way of continuing to list them as contributors either, other than in the historical record (both in the git history and in the published package.jsons)—that’s just not what the header was made for.", + "createdAt": "2022-02-17T21:00:53Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 6, + "nodes": [ + { + "path": "types/mithril-global/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/mithril/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/ospec/index.d.ts", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react-grid-layout/index.d.ts", + "additions": 6, + "deletions": 7, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react-native-fbsdk/index.d.ts", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/ssh2-sftp-client/index.d.ts", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "Ng", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/58632/derived.json b/packages/mergebot/src/_tests/fixtures/58632/derived.json new file mode 100644 index 0000000000..3f65fbc1d6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/58632/derived.json @@ -0,0 +1,6 @@ +{ + "type": "remove", + "now": "2022-02-17T22:40:31.072Z", + "message": "PR is not active", + "isDraft": false +} diff --git a/packages/mergebot/src/_tests/fixtures/58632/mutations.json b/packages/mergebot/src/_tests/fixtures/58632/mutations.json new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/58632/mutations.json @@ -0,0 +1 @@ +[] diff --git a/packages/mergebot/src/_tests/fixtures/58632/result.json b/packages/mergebot/src/_tests/fixtures/58632/result.json new file mode 100644 index 0000000000..25a0649e05 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/58632/result.json @@ -0,0 +1,8 @@ +{ + "labels": [], + "responseComments": [], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": false, + "projectColumn": "*REMOVE*" +} diff --git a/packages/mergebot/src/_tests/fixtures/58764/_downloads.json b/packages/mergebot/src/_tests/fixtures/58764/_downloads.json new file mode 100644 index 0000000000..c612b99f94 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/58764/_downloads.json @@ -0,0 +1,11 @@ +{ + "bootstrap.v3.datetimepicker": 2109, + "mithril-global": 23, + "mithril": 15949, + "ospec": 791, + "react-grid-layout": 520136, + "react-native-fbsdk": 78391, + "react-virtualized": 1521648, + "ssh2-sftp-client": 307276, + "styled-components": 8672781 +} diff --git a/packages/mergebot/src/_tests/fixtures/58764/_files.json b/packages/mergebot/src/_tests/fixtures/58764/_files.json new file mode 100644 index 0000000000..53922449e2 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/58764/_files.json @@ -0,0 +1,20 @@ +{ + "2cee47aedc9b4d321e378d7020984adf005fef64:types/bootstrap.v3.datetimepicker/index.d.ts": "// Type definitions for non-npm package Bootstrap 3 Datepicker 4.17\n// Project: http://eonasdan.github.io/bootstrap-datetimepicker\n// Definitions by: Katona Péter \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n// based on the previous version created by Jesica N. Fera \n\n/**\n * bootstrap-datetimepicker.js 4.17.45 Copyright (c) 2015 Jonathan Peterson\n * Available via the MIT license.\n * see: http://eonasdan.github.io/bootstrap-datetimepicker or https://github.com/Eonasdan/bootstrap-datetimepicker for details.\n */\n\n/// \n\nimport * as moment from \"moment\";\n\nexport as namespace BootstrapV3DatetimePicker;\n\nexport type InputParser = (input: string | Date | moment.Moment) => moment.Moment;\n\nexport interface Datetimepicker {\n /** Clears the datepicker by setting the value to null */\n clear(): void;\n /** Returns the component's model current date, a moment object or null if not set. */\n date(): moment.Moment;\n /**\n * Takes string, Date, moment, null parameter and sets the components model current moment to it.\n * Passing a null value unsets the components model current moment.\n * Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.\n * Throws:\n * - TypeError - in case the newDate cannot be parsed\n *\n * Emits:\n * - dp.change - In case newDate is different from current moment\n */\n date(date: moment.Moment | Date | string | null): void;\n /** Destroys the widget and removes all attached event listeners */\n destroy(): void;\n /**\n * Disables the input element, the component is attached to, by adding a disabled=\"true\" attribute to it. If the widget was visible before that call it is hidden.\n * Emits:\n * - dp.hide - if the widget was visible before that call\n */\n disable(): void;\n /** Enables the input element, the component is attached to, by removing disabled attribute from it. */\n enable(): void;\n /**\n * Hides the widget\n * Emits:\n * - dp.hide - if the widget was visible before that call\n */\n hide(): void;\n /**\n * Returns the components current options object.\n * Note that the changing the values of the returned object does not change the components actual configuration.\n */\n options(): DatetimepickerOptions;\n /** Takes an object variable with option key:value properties and configures the component. Use this to update multiple options on the component. */\n options(options: DatetimepickerOptions): void;\n /**\n * Shows the widget\n * Emits:\n * - dp.show - if the widget was hidden before that call\n * - dp.change - if the widget is opened for the first time and the useCurrent is set to true or to a granularity value and the input element the component is attached to has an empty value\n */\n show(): void;\n /**\n * Shows or hides the widget\n * Emits:\n * - dp.hide - if the widget is hidden after the toggle call\n * - dp.show - if the widget is show after the toggle call\n * - dp.change - if the widget is opened for the first time and the input element is empty and options.useCurrent != false\n */\n toggle(): void;\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n //// Below are the getters/setters for the properties of the 'options(): DatetimepickerOptions' ////\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n\n /** Returns the options.allowInputToggle option. */\n allowInputToggle(): boolean;\n /** If true, the picker will show on textbox focus and icon click when used in a button group */\n allowInputToggle(value: boolean): void;\n /** Returns the current options.calendarWeeks option configuration */\n calendarWeeks(): boolean;\n /** Set if the week numbers will appear to the left on the days view */\n calendarWeeks(value: boolean): void;\n /** Returns the options.collapse option configuration */\n collapse(): boolean;\n /** If set to false the picker will display similar to sideBySide except vertical. */\n collapse(value: boolean): void;\n /**\n * Returns the options.daysOfWeekDisabled configuration\n * IMPORTANT! Throws exception if not set explicitly https://github.com/Eonasdan/bootstrap-datetimepicker/issues/1459\n */\n daysOfWeekDisabled(): number[];\n /**\n * Takes an [ Number:0 to 6 ] and disallow the user to select weekdays that exist in this array.\n * This has lower priority over the options.minDate, options.maxDate, options.disabledDates and options.enabledDates configuration settings.\n * Emits:\n * - dp.change - if the currently selected moment falls in the values passed on the daysOfWeek parameter.\n * - dp.error - if the currently selected moment falls in the values passed on the daysOfWeek parameter.\n */\n daysOfWeekDisabled(days: number[]): void;\n /** Returns the options.dayViewHeaderFormat option. */\n dayViewHeaderFormat(): string;\n /** Used to customize the header of the day view. */\n dayViewHeaderFormat(value: string): void;\n /** Returns a moment with the options.defaultDate option configuration or false if not set */\n defaultDate(): moment.Moment | boolean;\n /**\n * Will set the picker's inital date.\n * If a boolean:false value is passed the options.defaultDate parameter is cleared.\n * Throws:\n * - TypeError - if the provided date doesn't pass validation, including disabledDates, enabledDates, minDate, maxDate, and daysOfWeekDisabled\n * - TypeError - if the provided date cannot be parsed by momentjs\n */\n defaultDate(date: string | Date | moment.Moment | boolean): void;\n /**\n * Returns the options.disabledDates option.\n * NOTES: probably should be: disabledDates(): boolean | Array; see: DatetimepickerOptions\n */\n disabledDates(): boolean | any;\n /**\n * Takes an array of values and disallows the user to select those days.\n * Setting this takes precedence over options.minDate, options.maxDate configuration.\n * Also calling this function removes the configuration of options.enabledDates if such exist.\n * Note: These values are matched with Day granularity.\n */\n disabledDates(dates: boolean | Array): void;\n /**\n * Returns the options.disabledHours option.\n * NOTES: probably should be: disabledHours(): boolean | number[]; see: DatetimepickerOptions\n */\n disabledHours(): boolean | any;\n /**\n * Must be in 24 hour format. Will disallow hour selections (much like disabledTimeIntervals) but will affect all days.\n * Like en/disabledDates, the en/disabledHours options are mutually exclusive and will reset one of the options back to false.\n */\n disabledHours(value: boolean | number[]): void;\n /**\n * Returns the options.disabledTimeIntervals option, or... not exactly\n * IMPORTANT! Creates an object from the options.disabledTimeIntervals with the keys being numbers, the values being the moment arrays.\n * eg { \"0\": [, ], \"1\": [...] }\n * https://github.com/Eonasdan/bootstrap-datetimepicker/issues/1498\n */\n disabledTimeIntervals(): boolean | moment.Moment[][];\n /**\n * Disables time selection between the given moments\n * eg: [[moment({ h: 0 }), moment({ h: 8 })], [moment({ h: 18 }), moment({ h: 24 })]]\n */\n disabledTimeIntervals(value: boolean | moment.Moment[][]): void;\n /**\n * Returns the options.enabledDates option\n * NOTES: probably should be: enabledDates(): boolean | Array; see: DatetimepickerOptions\n */\n enabledDates(): boolean | any;\n /**\n * Takes an array of values and allows the user to select only from those days.\n * Setting this takes precedence over options.minDate, options.maxDate configuration.\n * Also calling this function removes the configuration of options.disabledDates if such exist.\n * Note: These values are matched with Day granularity.\n */\n enabledDates(dates: boolean | Array): void;\n /**\n * Returns the options.enabledHours option.\n * NOTES: probably should be: enabledHours(): boolean | number[]; see: DatetimepickerOptions\n */\n enabledHours(): boolean | any;\n /**\n * Must be in 24 hour format. Will allow hour selections (much like enabledTimeIntervals) but will affect all days.\n * Like en/disabledDates, the en/disabledHours options are mutually exclusive and will reset one of the options back to false.\n */\n enabledHours(value: boolean | number[]): void;\n /** Returns a boolean or array with the options.extraFormats option configuration */\n extraFormats(): boolean | Array;\n /** Takes an array of valid input moment format options, or boolean:false */\n extraFormats(formats: boolean | Array): void;\n /** Returns the options.focusOnShow option. */\n focusOnShow(): boolean;\n /** If false, the textbox will not be given focus when the picker is shown */\n focusOnShow(value: boolean): void;\n /** Returns the component's options.format string */\n format(): boolean | string | moment.MomentBuiltinFormat;\n /**\n * Takes a moment.js format string and sets the components options.format.\n * This is used for displaying and also for parsing input strings either from the input element the component is attached to or the date() function.\n * The parameter can also be a boolean:false in which case the format is set to the locale's L LT.\n * Note: this is also used to determine if the TimePicker sub component will display the hours in 12 or 24 format. (if \"a\" or \"h\" exists in the passed string then a 12 hour mode is set)\n * Throws:\n * - TypeError - if format is boolean:true\n */\n format(format: boolean | string | moment.MomentBuiltinFormat): void;\n /** Returns options.icons */\n icons(): Icons;\n /*", + "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070:types/bootstrap.v3.datetimepicker/index.d.ts": "// Type definitions for non-npm package Bootstrap 3 Datepicker 4.17\n// Project: http://eonasdan.github.io/bootstrap-datetimepicker\n// Definitions by: Katona Péter \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n// based on the previous version created by Jesica N. Fera \n\n/**\n * bootstrap-datetimepicker.js 4.17.45 Copyright (c) 2015 Jonathan Peterson\n * Available via the MIT license.\n * see: http://eonasdan.github.io/bootstrap-datetimepicker or https://github.com/Eonasdan/bootstrap-datetimepicker for details.\n */\n\n/// \n\nimport * as moment from \"moment\";\n\nexport as namespace BootstrapV3DatetimePicker;\n\nexport type InputParser = (input: string | Date | moment.Moment) => moment.Moment;\n\nexport interface Datetimepicker {\n /** Clears the datepicker by setting the value to null */\n clear(): void;\n /** Returns the component's model current date, a moment object or null if not set. */\n date(): moment.Moment;\n /**\n * Takes string, Date, moment, null parameter and sets the components model current moment to it.\n * Passing a null value unsets the components model current moment.\n * Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.\n * Throws:\n * - TypeError - in case the newDate cannot be parsed\n *\n * Emits:\n * - dp.change - In case newDate is different from current moment\n */\n date(date: moment.Moment | Date | string | null): void;\n /** Destroys the widget and removes all attached event listeners */\n destroy(): void;\n /**\n * Disables the input element, the component is attached to, by adding a disabled=\"true\" attribute to it. If the widget was visible before that call it is hidden.\n * Emits:\n * - dp.hide - if the widget was visible before that call\n */\n disable(): void;\n /** Enables the input element, the component is attached to, by removing disabled attribute from it. */\n enable(): void;\n /**\n * Hides the widget\n * Emits:\n * - dp.hide - if the widget was visible before that call\n */\n hide(): void;\n /**\n * Returns the components current options object.\n * Note that the changing the values of the returned object does not change the components actual configuration.\n */\n options(): DatetimepickerOptions;\n /** Takes an object variable with option key:value properties and configures the component. Use this to update multiple options on the component. */\n options(options: DatetimepickerOptions): void;\n /**\n * Shows the widget\n * Emits:\n * - dp.show - if the widget was hidden before that call\n * - dp.change - if the widget is opened for the first time and the useCurrent is set to true or to a granularity value and the input element the component is attached to has an empty value\n */\n show(): void;\n /**\n * Shows or hides the widget\n * Emits:\n * - dp.hide - if the widget is hidden after the toggle call\n * - dp.show - if the widget is show after the toggle call\n * - dp.change - if the widget is opened for the first time and the input element is empty and options.useCurrent != false\n */\n toggle(): void;\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n //// Below are the getters/setters for the properties of the 'options(): DatetimepickerOptions' ////\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n\n /** Returns the options.allowInputToggle option. */\n allowInputToggle(): boolean;\n /** If true, the picker will show on textbox focus and icon click when used in a button group */\n allowInputToggle(value: boolean): void;\n /** Returns the current options.calendarWeeks option configuration */\n calendarWeeks(): boolean;\n /** Set if the week numbers will appear to the left on the days view */\n calendarWeeks(value: boolean): void;\n /** Returns the options.collapse option configuration */\n collapse(): boolean;\n /** If set to false the picker will display similar to sideBySide except vertical. */\n collapse(value: boolean): void;\n /**\n * Returns the options.daysOfWeekDisabled configuration\n * IMPORTANT! Throws exception if not set explicitly https://github.com/Eonasdan/bootstrap-datetimepicker/issues/1459\n */\n daysOfWeekDisabled(): number[];\n /**\n * Takes an [ Number:0 to 6 ] and disallow the user to select weekdays that exist in this array.\n * This has lower priority over the options.minDate, options.maxDate, options.disabledDates and options.enabledDates configuration settings.\n * Emits:\n * - dp.change - if the currently selected moment falls in the values passed on the daysOfWeek parameter.\n * - dp.error - if the currently selected moment falls in the values passed on the daysOfWeek parameter.\n */\n daysOfWeekDisabled(days: number[]): void;\n /** Returns the options.dayViewHeaderFormat option. */\n dayViewHeaderFormat(): string;\n /** Used to customize the header of the day view. */\n dayViewHeaderFormat(value: string): void;\n /** Returns a moment with the options.defaultDate option configuration or false if not set */\n defaultDate(): moment.Moment | boolean;\n /**\n * Will set the picker's inital date.\n * If a boolean:false value is passed the options.defaultDate parameter is cleared.\n * Throws:\n * - TypeError - if the provided date doesn't pass validation, including disabledDates, enabledDates, minDate, maxDate, and daysOfWeekDisabled\n * - TypeError - if the provided date cannot be parsed by momentjs\n */\n defaultDate(date: string | Date | moment.Moment | boolean): void;\n /**\n * Returns the options.disabledDates option.\n * NOTES: probably should be: disabledDates(): boolean | Array; see: DatetimepickerOptions\n */\n disabledDates(): boolean | any;\n /**\n * Takes an array of values and disallows the user to select those days.\n * Setting this takes precedence over options.minDate, options.maxDate configuration.\n * Also calling this function removes the configuration of options.enabledDates if such exist.\n * Note: These values are matched with Day granularity.\n */\n disabledDates(dates: boolean | Array): void;\n /**\n * Returns the options.disabledHours option.\n * NOTES: probably should be: disabledHours(): boolean | number[]; see: DatetimepickerOptions\n */\n disabledHours(): boolean | any;\n /**\n * Must be in 24 hour format. Will disallow hour selections (much like disabledTimeIntervals) but will affect all days.\n * Like en/disabledDates, the en/disabledHours options are mutually exclusive and will reset one of the options back to false.\n */\n disabledHours(value: boolean | number[]): void;\n /**\n * Returns the options.disabledTimeIntervals option, or... not exactly\n * IMPORTANT! Creates an object from the options.disabledTimeIntervals with the keys being numbers, the values being the moment arrays.\n * eg { \"0\": [, ], \"1\": [...] }\n * https://github.com/Eonasdan/bootstrap-datetimepicker/issues/1498\n */\n disabledTimeIntervals(): boolean | moment.Moment[][];\n /**\n * Disables time selection between the given moments\n * eg: [[moment({ h: 0 }), moment({ h: 8 })], [moment({ h: 18 }), moment({ h: 24 })]]\n */\n disabledTimeIntervals(value: boolean | moment.Moment[][]): void;\n /**\n * Returns the options.enabledDates option\n * NOTES: probably should be: enabledDates(): boolean | Array; see: DatetimepickerOptions\n */\n enabledDates(): boolean | any;\n /**\n * Takes an array of values and allows the user to select only from those days.\n * Setting this takes precedence over options.minDate, options.maxDate configuration.\n * Also calling this function removes the configuration of options.disabledDates if such exist.\n * Note: These values are matched with Day granularity.\n */\n enabledDates(dates: boolean | Array): void;\n /**\n * Returns the options.enabledHours option.\n * NOTES: probably should be: enabledHours(): boolean | number[]; see: DatetimepickerOptions\n */\n enabledHours(): boolean | any;\n /**\n * Must be in 24 hour format. Will allow hour selections (much like enabledTimeIntervals) but will affect all days.\n * Like en/disabledDates, the en/disabledHours options are mutually exclusive and will reset one of the options back to false.\n */\n enabledHours(value: boolean | number[]): void;\n /** Returns a boolean or array with the options.extraFormats option configuration */\n extraFormats(): boolean | Array;\n /** Takes an array of valid input moment format options, or boolean:false */\n extraFormats(formats: boolean | Array): void;\n /** Returns the options.focusOnShow option. */\n focusOnShow(): boolean;\n /** If false, the textbox will not be given focus when the picker is shown */\n focusOnShow(value: boolean): void;\n /** Returns the component's options.format string */\n format(): boolean | string | moment.MomentBuiltinFormat;\n /**\n * Takes a moment.js format string and sets the components options.format.\n * This is used for displaying and also for parsing input strings either from the input element the component is attached to or the date() function.\n * The parameter can also be a boolean:false in which case the format is set to the locale's L LT.\n * Note: this is also used to determine if the TimePicker sub component will display the hours in 12 or 24 format. (if \"a\" or \"h\" exists in the passed string then a 12 hour mode is set)\n * Throws:\n * - TypeError - if format is boolean:true\n */\n format(format: boolean | string | moment.MomentBuiltinFormat): void;\n /** Returns options.icons */\n icons(): Icons;\n /*", + "2cee47aedc9b4d321e378d7020984adf005fef64:types/mithril-global/index.d.ts": "// Type definitions for non-npm package Mithril 2.0\n// Project: https://mithril.js.org/\n// Definitions by: Mike Linkovich , Isiah Meadows \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.2\n\n// Global Mithril types\n\n/// \n\nimport * as mithril from 'mithril';\nimport * as stream from 'mithril/stream';\n\ndeclare namespace MithrilGlobal {\n export type CommonAttributes = mithril.CommonAttributes;\n export type Hyperscript = mithril.Hyperscript;\n export type RouteResolver = mithril.RouteResolver;\n export type RouteDefs = mithril.RouteDefs;\n export type RouteOptions = mithril.RouteOptions;\n export type Route = mithril.Route;\n export type RequestOptions = mithril.RequestOptions;\n export type JsonpOptions = mithril.JsonpOptions;\n export type Child = mithril.Child;\n export type ChildArray = mithril.ChildArray;\n export type Children = mithril.Children;\n export type ChildArrayOrPrimitive = mithril.ChildArrayOrPrimitive;\n export type Vnode = mithril.Vnode;\n export type VnodeDOM = mithril.VnodeDOM;\n export type CVnode = mithril.CVnode;\n export type CVnodeDOM = mithril.CVnodeDOM;\n export type Component = mithril.Component;\n export type Comp> = {}> = mithril.Comp;\n export type ClassComponent = mithril.ClassComponent;\n export type FactoryComponent = mithril.FactoryComponent;\n export type ComponentTypes> = {}> = mithril.ComponentTypes;\n export type Attributes = mithril.Attributes;\n export type Static = mithril.Static & { stream: typeof stream };\n export type Stream = stream;\n}\n\ndeclare const MithrilGlobal: MithrilGlobal.Static;\nexport = MithrilGlobal;\nexport as namespace m;\n", + "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070:types/mithril-global/index.d.ts": "// Type definitions for non-npm package Mithril 2.0\n// Project: https://mithril.js.org/\n// Definitions by: Mike Linkovich \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.2\n\n// Global Mithril types\n\n/// \n\nimport * as mithril from 'mithril';\nimport * as stream from 'mithril/stream';\n\ndeclare namespace MithrilGlobal {\n export type CommonAttributes = mithril.CommonAttributes;\n export type Hyperscript = mithril.Hyperscript;\n export type RouteResolver = mithril.RouteResolver;\n export type RouteDefs = mithril.RouteDefs;\n export type RouteOptions = mithril.RouteOptions;\n export type Route = mithril.Route;\n export type RequestOptions = mithril.RequestOptions;\n export type JsonpOptions = mithril.JsonpOptions;\n export type Child = mithril.Child;\n export type ChildArray = mithril.ChildArray;\n export type Children = mithril.Children;\n export type ChildArrayOrPrimitive = mithril.ChildArrayOrPrimitive;\n export type Vnode = mithril.Vnode;\n export type VnodeDOM = mithril.VnodeDOM;\n export type CVnode = mithril.CVnode;\n export type CVnodeDOM = mithril.CVnodeDOM;\n export type Component = mithril.Component;\n export type Comp> = {}> = mithril.Comp;\n export type ClassComponent = mithril.ClassComponent;\n export type FactoryComponent = mithril.FactoryComponent;\n export type ComponentTypes> = {}> = mithril.ComponentTypes;\n export type Attributes = mithril.Attributes;\n export type Static = mithril.Static & { stream: typeof stream };\n export type Stream = stream;\n}\n\ndeclare const MithrilGlobal: MithrilGlobal.Static;\nexport = MithrilGlobal;\nexport as namespace m;\n", + "2cee47aedc9b4d321e378d7020984adf005fef64:types/mithril/index.d.ts": "// Type definitions for Mithril 2.0\n// Project: https://mithril.js.org/, https://github.com/mithriljs/mithril.js\n// Definitions by: Mike Linkovich , Isiah Meadows \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.2\n\n/** Renders a vnode structure into a DOM element. */\ndeclare function render(el: Element, vnodes: Mithril.Children): void;\n\n/** Mounts a component to a DOM element, enabling it to autoredraw on user events. */\ndeclare function mount(element: Element, component: Mithril.ComponentTypes): void;\n/** Unmounts a component from a DOM element. */\ndeclare function mount(element: Element, component: null): void; // tslint:disable-line unified-signatures\n\n/** Makes an XHR request and returns a promise. */\ndeclare function request(options: Mithril.RequestOptions & { url: string }): Promise;\n/** Makes an XHR request and returns a promise. */\ndeclare function request(url: string, options?: Mithril.RequestOptions): Promise;\n\n/** Makes a JSON-P request and returns a promise. */\ndeclare function jsonp(options: Mithril.JsonpOptions & { url: string }): Promise; // tslint:disable-line:no-unnecessary-generics\n/** Makes a JSON-P request and returns a promise. */\ndeclare function jsonp(url: string, options?: Mithril.JsonpOptions): Promise; // tslint:disable-line:no-unnecessary-generics\n\ndeclare namespace Mithril {\n interface CommonAttributes {\n /** The oninit hook is called before a vnode is touched by the virtual DOM engine. */\n oninit?(this: State, vnode: Vnode): any;\n /** The oncreate hook is called after a DOM element is created and attached to the document. */\n oncreate?(this: State, vnode: VnodeDOM): any;\n /** The onbeforeremove hook is called before a DOM element is detached from the document. If a Promise is returned, Mithril only detaches the DOM element after the promise completes. */\n onbeforeremove?(this: State, vnode: VnodeDOM): Promise | void;\n /** The onremove hook is called before a DOM element is removed from the document. */\n onremove?(this: State, vnode: VnodeDOM): any;\n /** The onbeforeupdate hook is called before a vnode is diffed in a update. */\n onbeforeupdate?(this: State, vnode: Vnode, old: VnodeDOM): boolean | void;\n /** The onupdate hook is called after a DOM element is updated, while attached to the document. */\n onupdate?(this: State, vnode: VnodeDOM): any;\n /** A key to optionally associate with this element. */\n key?: string | number | undefined;\n }\n\n interface Hyperscript {\n /** Creates a virtual element (Vnode). */\n (selector: string, ...children: Children[]): Vnode;\n /** Creates a virtual element (Vnode). */\n (selector: string, attributes: Attributes, ...children: Children[]): Vnode;\n /** Creates a virtual element (Vnode). */\n (component: ComponentTypes, ...args: Children[]): Vnode;\n /** Creates a virtual element (Vnode). */\n (\n component: ComponentTypes,\n attributes: Attrs & CommonAttributes,\n ...args: Children[]\n ): Vnode;\n /** Creates a fragment virtual element (Vnode). */\n fragment(attrs: CommonAttributes & { [key: string]: any }, children: ChildArrayOrPrimitive): Vnode;\n /** Turns an HTML string into a virtual element (Vnode). Do not use trust on unsanitized user input. */\n trust(html: string): Vnode;\n }\n\n interface RouteResolver {\n /** The onmatch hook is called when the router needs to find a component to render. */\n onmatch?(\n this: this,\n args: Attrs,\n requestedPath: string,\n route: string,\n ): ComponentTypes | Promise | void;\n /** The render method is called on every redraw for a matching route. */\n render?(this: this, vnode: Vnode): Children;\n }\n\n /** This represents a key-value mapping linking routes to components. */\n interface RouteDefs {\n /** The key represents the route. The value represents the corresponding component. */\n [url: string]: ComponentTypes | RouteResolver;\n }\n\n interface RouteOptions {\n /** Routing parameters. If path has routing parameter slots, the properties of this object are interpolated into the path string. */\n replace?: boolean | undefined;\n /** The state object to pass to the underlying history.pushState / history.replaceState call. */\n state?: any;\n /** The title string to pass to the underlying history.pushState / history.replaceState call. */\n title?: string | undefined;\n }\n\n interface RouteLinkAttrs extends Attributes {\n href: string;\n selector?: string | ComponentTypes | undefined;\n options?: RouteOptions | undefined;\n }\n\n interface Route {\n /** Creates application routes and mounts Components and/or RouteResolvers to a DOM element. */\n (element: Element, defaultRoute: string, routes: RouteDefs): void;\n /** Returns the last fully resolved routing path, without the prefix. */\n get(): string;\n /** Redirects to a matching route or to the default route if no matching routes can be found. */\n set(route: string, data?: any, options?: RouteOptions): void;\n /** Defines a router prefix which is a fragment of the URL that dictates the underlying strategy used by the router. */\n prefix: string;\n /** This Component renders a link that will use the current routing strategy */\n Link: Component;\n /** Returns the named parameter value from the current route. */\n param(name: string): string;\n /** Gets all route parameters. */\n param(): any;\n }\n\n interface RequestOptions {\n /** The HTTP method to use. */\n method?: string | undefined;\n /** The data to be interpolated into the URL and serialized into the querystring. */\n params?: { [key: string]: any } | undefined;\n /** The data to be serialized into the request body. */\n body?: (XMLHttpRequest['send'] extends (x: infer R) => any ? R : never) | (object & { [id: string]: any }) | undefined;\n /** Whether the request should be asynchronous. Defaults to true. */\n async?: boolean | undefined;\n /** A username for HTTP authorization. */\n user?: string | undefined;\n /** A password for HTTP authorization. */\n password?: string | undefined;\n /** Whether to send cookies to 3rd party domains. */\n withCredentials?: boolean | undefined;\n /** Exposes the underlying XMLHttpRequest object for low-level configuration. */\n config?(xhr: XMLHttpRequest, options: this): XMLHttpRequest | void;\n /** Headers to append to the request before sending it. */\n headers?: { [key: string]: string } | undefined;\n /** A constructor to be applied to each object in the response. */\n type?: new (o: any) => any;\n /** A serialization method to be applied to data. Defaults to JSON.stringify, or if options.data is an instance of FormData, defaults to the identity function. */\n serialize?(data: any): any;\n /** A deserialization method to be applied to the response. Defaults to a small wrapper around JSON.parse that returns null for empty responses. */\n deserialize?(data: string): T;\n /** A hook to specify how the XMLHttpRequest response should be read. Useful for reading response headers and cookies. Defaults to a function that returns xhr.responseText */\n extract?(xhr: XMLHttpRequest, options: this): T;\n /**\n * Force the use of the HTTP body section for data in GET requests when set to true,\n * or the use of querystring for other HTTP methods when set to false.\n * Defaults to false for GET requests and true for other methods.\n */\n useBody?: boolean | undefined;\n /** If false, redraws mounted components upon completion of the request. If true, it does not. */\n background?: boolean | undefined;\n /** Milliseconds a request can take before automatically being terminated. */\n timeout?: number | undefined;\n /** The expected type of the response, as a legal value of XMLHttpRequest.responseType. */\n responseType?: '' | 'arraybuffer' | 'blob' | 'document' | 'json' | 'text' | undefined;\n }\n\n interface JsonpOptions {\n /** The data to be interpolated into the URL and serialized into the querystring. */\n params?: { [id: string]: any } | undefined;\n /** The data to be serialized into the request body. */\n body?: any;\n /** A constructor to be applied to each object in the response. */\n type?: new (o: any) => any;\n /** The name of the function that will be called as the callback. */\n callbackName?: string | undefined;\n /** The name of the querystring parameter name that specifies the callback name. */\n callbackKey?: string | undefined;\n /** If false, redraws mounted components upon completion of the request. If true, it does not. */\n background?: boolean | undefined;\n }\n\n interface Redraw {\n /** Manually triggers an asynchronous redraw of mounted components. */\n (): void;\n /** Manually triggers a synchronous redraw of mounted components. */\n sync(): void;\n }\n\n type Params = object & ParamsRec;\n\n interface ParamsRec {\n // Ideally, it'd be this:\n // `[key: string | number]: Params | !symbol & !object`\n [key: string]: string | number | boolean | null | undefined | Params;\n }\n\n interface Static extends Hyperscript {\n route: Route;\n mount: typeof mount;\n", + "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070:types/mithril/index.d.ts": "// Type definitions for Mithril 2.0\n// Project: https://mithril.js.org/, https://github.com/mithriljs/mithril.js\n// Definitions by: Mike Linkovich \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.2\n\n/** Renders a vnode structure into a DOM element. */\ndeclare function render(el: Element, vnodes: Mithril.Children): void;\n\n/** Mounts a component to a DOM element, enabling it to autoredraw on user events. */\ndeclare function mount(element: Element, component: Mithril.ComponentTypes): void;\n/** Unmounts a component from a DOM element. */\ndeclare function mount(element: Element, component: null): void; // tslint:disable-line unified-signatures\n\n/** Makes an XHR request and returns a promise. */\ndeclare function request(options: Mithril.RequestOptions & { url: string }): Promise;\n/** Makes an XHR request and returns a promise. */\ndeclare function request(url: string, options?: Mithril.RequestOptions): Promise;\n\n/** Makes a JSON-P request and returns a promise. */\ndeclare function jsonp(options: Mithril.JsonpOptions & { url: string }): Promise; // tslint:disable-line:no-unnecessary-generics\n/** Makes a JSON-P request and returns a promise. */\ndeclare function jsonp(url: string, options?: Mithril.JsonpOptions): Promise; // tslint:disable-line:no-unnecessary-generics\n\ndeclare namespace Mithril {\n interface CommonAttributes {\n /** The oninit hook is called before a vnode is touched by the virtual DOM engine. */\n oninit?(this: State, vnode: Vnode): any;\n /** The oncreate hook is called after a DOM element is created and attached to the document. */\n oncreate?(this: State, vnode: VnodeDOM): any;\n /** The onbeforeremove hook is called before a DOM element is detached from the document. If a Promise is returned, Mithril only detaches the DOM element after the promise completes. */\n onbeforeremove?(this: State, vnode: VnodeDOM): Promise | void;\n /** The onremove hook is called before a DOM element is removed from the document. */\n onremove?(this: State, vnode: VnodeDOM): any;\n /** The onbeforeupdate hook is called before a vnode is diffed in a update. */\n onbeforeupdate?(this: State, vnode: Vnode, old: VnodeDOM): boolean | void;\n /** The onupdate hook is called after a DOM element is updated, while attached to the document. */\n onupdate?(this: State, vnode: VnodeDOM): any;\n /** A key to optionally associate with this element. */\n key?: string | number | undefined;\n }\n\n interface Hyperscript {\n /** Creates a virtual element (Vnode). */\n (selector: string, ...children: Children[]): Vnode;\n /** Creates a virtual element (Vnode). */\n (selector: string, attributes: Attributes, ...children: Children[]): Vnode;\n /** Creates a virtual element (Vnode). */\n (component: ComponentTypes, ...args: Children[]): Vnode;\n /** Creates a virtual element (Vnode). */\n (\n component: ComponentTypes,\n attributes: Attrs & CommonAttributes,\n ...args: Children[]\n ): Vnode;\n /** Creates a fragment virtual element (Vnode). */\n fragment(attrs: CommonAttributes & { [key: string]: any }, children: ChildArrayOrPrimitive): Vnode;\n /** Turns an HTML string into a virtual element (Vnode). Do not use trust on unsanitized user input. */\n trust(html: string): Vnode;\n }\n\n interface RouteResolver {\n /** The onmatch hook is called when the router needs to find a component to render. */\n onmatch?(\n this: this,\n args: Attrs,\n requestedPath: string,\n route: string,\n ): ComponentTypes | Promise | void;\n /** The render method is called on every redraw for a matching route. */\n render?(this: this, vnode: Vnode): Children;\n }\n\n /** This represents a key-value mapping linking routes to components. */\n interface RouteDefs {\n /** The key represents the route. The value represents the corresponding component. */\n [url: string]: ComponentTypes | RouteResolver;\n }\n\n interface RouteOptions {\n /** Routing parameters. If path has routing parameter slots, the properties of this object are interpolated into the path string. */\n replace?: boolean | undefined;\n /** The state object to pass to the underlying history.pushState / history.replaceState call. */\n state?: any;\n /** The title string to pass to the underlying history.pushState / history.replaceState call. */\n title?: string | undefined;\n }\n\n interface RouteLinkAttrs extends Attributes {\n href: string;\n selector?: string | ComponentTypes | undefined;\n options?: RouteOptions | undefined;\n }\n\n interface Route {\n /** Creates application routes and mounts Components and/or RouteResolvers to a DOM element. */\n (element: Element, defaultRoute: string, routes: RouteDefs): void;\n /** Returns the last fully resolved routing path, without the prefix. */\n get(): string;\n /** Redirects to a matching route or to the default route if no matching routes can be found. */\n set(route: string, data?: any, options?: RouteOptions): void;\n /** Defines a router prefix which is a fragment of the URL that dictates the underlying strategy used by the router. */\n prefix: string;\n /** This Component renders a link that will use the current routing strategy */\n Link: Component;\n /** Returns the named parameter value from the current route. */\n param(name: string): string;\n /** Gets all route parameters. */\n param(): any;\n }\n\n interface RequestOptions {\n /** The HTTP method to use. */\n method?: string | undefined;\n /** The data to be interpolated into the URL and serialized into the querystring. */\n params?: { [key: string]: any } | undefined;\n /** The data to be serialized into the request body. */\n body?: (XMLHttpRequest['send'] extends (x: infer R) => any ? R : never) | (object & { [id: string]: any }) | undefined;\n /** Whether the request should be asynchronous. Defaults to true. */\n async?: boolean | undefined;\n /** A username for HTTP authorization. */\n user?: string | undefined;\n /** A password for HTTP authorization. */\n password?: string | undefined;\n /** Whether to send cookies to 3rd party domains. */\n withCredentials?: boolean | undefined;\n /** Exposes the underlying XMLHttpRequest object for low-level configuration. */\n config?(xhr: XMLHttpRequest, options: this): XMLHttpRequest | void;\n /** Headers to append to the request before sending it. */\n headers?: { [key: string]: string } | undefined;\n /** A constructor to be applied to each object in the response. */\n type?: new (o: any) => any;\n /** A serialization method to be applied to data. Defaults to JSON.stringify, or if options.data is an instance of FormData, defaults to the identity function. */\n serialize?(data: any): any;\n /** A deserialization method to be applied to the response. Defaults to a small wrapper around JSON.parse that returns null for empty responses. */\n deserialize?(data: string): T;\n /** A hook to specify how the XMLHttpRequest response should be read. Useful for reading response headers and cookies. Defaults to a function that returns xhr.responseText */\n extract?(xhr: XMLHttpRequest, options: this): T;\n /**\n * Force the use of the HTTP body section for data in GET requests when set to true,\n * or the use of querystring for other HTTP methods when set to false.\n * Defaults to false for GET requests and true for other methods.\n */\n useBody?: boolean | undefined;\n /** If false, redraws mounted components upon completion of the request. If true, it does not. */\n background?: boolean | undefined;\n /** Milliseconds a request can take before automatically being terminated. */\n timeout?: number | undefined;\n /** The expected type of the response, as a legal value of XMLHttpRequest.responseType. */\n responseType?: '' | 'arraybuffer' | 'blob' | 'document' | 'json' | 'text' | undefined;\n }\n\n interface JsonpOptions {\n /** The data to be interpolated into the URL and serialized into the querystring. */\n params?: { [id: string]: any } | undefined;\n /** The data to be serialized into the request body. */\n body?: any;\n /** A constructor to be applied to each object in the response. */\n type?: new (o: any) => any;\n /** The name of the function that will be called as the callback. */\n callbackName?: string | undefined;\n /** The name of the querystring parameter name that specifies the callback name. */\n callbackKey?: string | undefined;\n /** If false, redraws mounted components upon completion of the request. If true, it does not. */\n background?: boolean | undefined;\n }\n\n interface Redraw {\n /** Manually triggers an asynchronous redraw of mounted components. */\n (): void;\n /** Manually triggers a synchronous redraw of mounted components. */\n sync(): void;\n }\n\n type Params = object & ParamsRec;\n\n interface ParamsRec {\n // Ideally, it'd be this:\n // `[key: string | number]: Params | !symbol & !object`\n [key: string]: string | number | boolean | null | undefined | Params;\n }\n\n interface Static extends Hyperscript {\n route: Route;\n mount: typeof mount;\n render: typeof render;\n redraw: Re", + "2cee47aedc9b4d321e378d7020984adf005fef64:types/ospec/index.d.ts": "// Type definitions for ospec 4.0\n// Project: https://github.com/MithrilJS/mithril.js/tree/next/ospec\n// Definitions by: Már Örlygsson \n// Mike Linkovich \n// Isiah Meadows \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.1\n\ntype ObjectConstructor = new (...args: any[]) => any;\n\ndeclare namespace o {\n type AssertionDescriber = (description: string) => void;\n\n interface Spy {\n (...args: Args): Returns;\n /** The number of times the function has been called */\n readonly callCount: number;\n /** The arguments that were passed to the function in the last time it was called */\n readonly args: Args;\n /** List of arguments that were passed to the function each tine it was called */\n readonly calls: Args[];\n }\n\n interface Assertion {\n /** Asserts that two values are strictly equal */\n equals(expected: T): AssertionDescriber;\n /** Asserts that two values are **not** strictly equal */\n notEquals(value: T): AssertionDescriber;\n\n /** Asserts that two objects are recursively equal */\n deepEquals(expected: T): AssertionDescriber;\n /** Asserts that two objects are **not** recursively equal */\n notDeepEquals(value: T): AssertionDescriber;\n\n /** Asserts that the function throws an error of a given type */\n throws(this: Assertion<() => any>, error: string | ObjectConstructor): AssertionDescriber;\n /** Asserts that the function does **not** throw an error of given type */\n notThrows(this: Assertion<() => any>, error: string | ObjectConstructor): AssertionDescriber; // See above\n }\n\n type Definer = (done: (error?: Error | null) => void, timeout: (delay: number) => void) => void | PromiseLike;\n\n interface Result {\n pass: boolean | null;\n context: string;\n message: string;\n error: Error | null;\n testError: Error | null;\n }\n\n type Reporter = (results: Result[]) => number;\n\n interface Ospec {\n /** Starts an assertion */\n (actual: T): Assertion;\n\n /** Defines a test */\n (name: string, assertions: Definer): void;\n\n /** Defines a test */\n only(name: string, assertions: Definer): void;\n\n /** Defines a group of tests */\n spec(name: string, tests: () => void): void;\n\n /** Defines code to be run at the beginning of a test group */\n before(setup: Definer): void;\n /** Defines code to be run before each test in a group */\n beforeEach(teardown: Definer): void;\n /** Defines code to be run at the end of a test group */\n after(setup: Definer): void;\n /** Defines code to be run after each test in a group */\n afterEach(teardown: Definer): void;\n\n /** Returns a function that records the number of times it gets called, and its arguments */\n spy(): Spy; // tslint:disable-line:no-unnecessary-generics\n spy(fn: (...args: A) => R): Spy;\n\n /** Amount of time (in milliseconds) to wait until bailing out of a test */\n timeout(delay: number): void;\n /** Configure the default amount of time (in milliseconds) to wait until bailing out of a group of tests */\n specTimeout(delay: number): void;\n\n /** Runs the test suite */\n run(reporter?: Reporter): void;\n /** Default reporter used by `o.run()` */\n report: Reporter;\n\n 'new'(): Ospec;\n }\n}\n\ndeclare const o: o.Ospec;\nexport = o;\nexport as namespace o;\n", + "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070:types/ospec/index.d.ts": "// Type definitions for ospec 4.0\n// Project: https://github.com/MithrilJS/mithril.js/tree/next/ospec\n// Definitions by: Már Örlygsson \n// Mike Linkovich \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.1\n\ntype ObjectConstructor = new (...args: any[]) => any;\n\ndeclare namespace o {\n type AssertionDescriber = (description: string) => void;\n\n interface Spy {\n (...args: Args): Returns;\n /** The number of times the function has been called */\n readonly callCount: number;\n /** The arguments that were passed to the function in the last time it was called */\n readonly args: Args;\n /** List of arguments that were passed to the function each tine it was called */\n readonly calls: Args[];\n }\n\n interface Assertion {\n /** Asserts that two values are strictly equal */\n equals(expected: T): AssertionDescriber;\n /** Asserts that two values are **not** strictly equal */\n notEquals(value: T): AssertionDescriber;\n\n /** Asserts that two objects are recursively equal */\n deepEquals(expected: T): AssertionDescriber;\n /** Asserts that two objects are **not** recursively equal */\n notDeepEquals(value: T): AssertionDescriber;\n\n /** Asserts that the function throws an error of a given type */\n throws(this: Assertion<() => any>, error: string | ObjectConstructor): AssertionDescriber;\n /** Asserts that the function does **not** throw an error of given type */\n notThrows(this: Assertion<() => any>, error: string | ObjectConstructor): AssertionDescriber; // See above\n }\n\n type Definer = (done: (error?: Error | null) => void, timeout: (delay: number) => void) => void | PromiseLike;\n\n interface Result {\n pass: boolean | null;\n context: string;\n message: string;\n error: Error | null;\n testError: Error | null;\n }\n\n type Reporter = (results: Result[]) => number;\n\n interface Ospec {\n /** Starts an assertion */\n (actual: T): Assertion;\n\n /** Defines a test */\n (name: string, assertions: Definer): void;\n\n /** Defines a test */\n only(name: string, assertions: Definer): void;\n\n /** Defines a group of tests */\n spec(name: string, tests: () => void): void;\n\n /** Defines code to be run at the beginning of a test group */\n before(setup: Definer): void;\n /** Defines code to be run before each test in a group */\n beforeEach(teardown: Definer): void;\n /** Defines code to be run at the end of a test group */\n after(setup: Definer): void;\n /** Defines code to be run after each test in a group */\n afterEach(teardown: Definer): void;\n\n /** Returns a function that records the number of times it gets called, and its arguments */\n spy(): Spy; // tslint:disable-line:no-unnecessary-generics\n spy(fn: (...args: A) => R): Spy;\n\n /** Amount of time (in milliseconds) to wait until bailing out of a test */\n timeout(delay: number): void;\n /** Configure the default amount of time (in milliseconds) to wait until bailing out of a group of tests */\n specTimeout(delay: number): void;\n\n /** Runs the test suite */\n run(reporter?: Reporter): void;\n /** Default reporter used by `o.run()` */\n report: Reporter;\n\n 'new'(): Ospec;\n }\n}\n\ndeclare const o: o.Ospec;\nexport = o;\nexport as namespace o;\n", + "2cee47aedc9b4d321e378d7020984adf005fef64:types/react-grid-layout/index.d.ts": "// Type definitions for react-grid-layout 1.3\n// Project: https://github.com/STRML/react-grid-layout\n// Definitions by: Andrew Birkholz ,\n// Ali Taheri ,\n// Zheyang Song ,\n// Andrew Hathaway ,\n// Manav Mishra ,\n// Alexey Fyodorov ,\n// Catus Magnus \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\nimport * as React from 'react';\n\nexport as namespace ReactGridLayout;\nexport = ReactGridLayout;\n\ndeclare class ReactGridLayout extends React.Component {}\n\ntype ResizeHandle = 's' | 'w' | 'e' | 'n' | 'sw' | 'nw' | 'se' | 'ne';\n\ndeclare namespace ReactGridLayout {\n interface Layout {\n /**\n * A string corresponding to the component key.\n * Uses the index of components instead if not provided.\n */\n i: string;\n\n /**\n * X position in grid units.\n */\n x: number;\n\n /**\n * Y position in grid units.\n */\n y: number;\n\n /**\n * Width in grid units.\n */\n w: number;\n\n /**\n * Height in grid units.\n */\n h: number;\n\n /**\n * Minimum width in grid units.\n */\n minW?: number | undefined;\n\n /**\n * Maximum width in grid units.\n */\n maxW?: number | undefined;\n\n /**\n * Minimum height in grid units.\n */\n minH?: number | undefined;\n\n /**\n * Maximum height in grid units.\n */\n maxH?: number | undefined;\n\n /**\n * set by DragEvents (onDragStart, onDrag, onDragStop) and ResizeEvents (onResizeStart, onResize, onResizeStop)\n */\n moved?: boolean | undefined;\n\n /**\n * If true, equal to `isDraggable: false` and `isResizable: false`.\n */\n static?: boolean | undefined;\n\n /**\n * If false, will not be draggable. Overrides `static`.\n */\n isDraggable?: boolean | undefined;\n\n /**\n * If false, will not be resizable. Overrides `static`.\n */\n isResizable?: boolean | undefined;\n\n /**\n * By default, a handle is only shown on the bottom-right (southeast) corner.\n * Note that resizing from the top or left is generally not intuitive.\n */\n resizeHandles?: ResizeHandle[] | undefined;\n\n /**\n * If true and draggable, item will be moved only within grid.\n */\n isBounded?: boolean | undefined;\n }\n\n interface Layouts {\n [P: string]: Layout[];\n }\n\n type ItemCallback = (\n layout: Layout[],\n oldItem: Layout,\n newItem: Layout,\n placeholder: Layout,\n event: MouseEvent,\n element: HTMLElement,\n ) => void;\n\n type DragOverEvent = MouseEvent & {\n nativeEvent: {\n layerX: number,\n layerY: number,\n } & Event\n };\n\n interface CoreProps {\n /**\n * The classname to add to the root element.\n */\n className?: string | undefined;\n\n /**\n * Inline-style object to pass to the root element.\n */\n style?: React.CSSProperties | undefined;\n\n /**\n * This allows setting the initial width on the server side.\n * This is required unless using the HOC or similar.\n */\n width?: number | undefined;\n\n /**\n * If true, the container height swells and contracts to fit contents.\n */\n autoSize?: boolean | undefined;\n\n /**\n * A CSS selector for tags that will not be draggable.\n * For example: `draggableCancel: '.MyNonDraggableAreaClassName'`\n * If you forget the leading. it will not work.\n * \"\".react-resizable-handle\" is always prepended to this value.\n */\n draggableCancel?: string | undefined;\n\n /**\n * A CSS selector for tags that will act as the draggable handle.\n * For example: `draggableHandle: '.MyDragHandleClassName'`\n * If you forget the leading . it will not work.\n */\n draggableHandle?: string | undefined;\n\n /**\n * Compaction type.\n */\n compactType?: 'vertical' | 'horizontal' | null | undefined;\n\n /**\n * Rows have a static height, but you can change this based on breakpoints if you like.\n */\n rowHeight?: number | undefined;\n\n /**\n * Configuration of a dropping element. Dropping element is a \"virtual\" element\n * which appears when you drag over some element from outside.\n */\n droppingItem?: {\n i: string;\n w: number;\n h: number;\n } | undefined;\n\n /**\n * If true, the layout will compact vertically.\n */\n verticalCompact?: boolean | undefined;\n\n /**\n * Default Infinity, but you can specify a max here if you like.\n * Note that this isn't fully fleshed out and won't error if you specify a layout that\n * extends beyond the row capacity. It will, however, not allow users to drag/resize\n * an item past the barrier. They can push items beyond the barrier, though.\n * Intentionally not documented for this reason.\n */\n maxRows?: number | undefined;\n\n // Flags:\n\n /**\n * If set to false it will disable dragging on all children.\n */\n isDraggable?: boolean | undefined;\n\n /**\n * If set to false it will disable resizing on all children.\n */\n isResizable?: boolean | undefined;\n\n /**\n * If true and draggable, all items will be moved only within grid.\n */\n isBounded?: boolean | undefined;\n\n /**\n * Uses CSS3 `translate()` instead of position top/left.\n * This makes about 6x faster paint performance.\n */\n useCSSTransforms?: boolean | undefined;\n\n /**\n * If parent DOM node of ResponsiveReactGridLayout or ReactGridLayout has \"transform: scale(n)\" css property,\n * we should set scale coefficient to avoid render artefacts while dragging.\n */\n transformScale?: number | undefined;\n\n /**\n * If true, grid can be placed one over the other.\n */\n allowOverlap?: boolean | undefined;\n\n /**\n * If true, grid items won't change position when being dragged over.\n */\n preventCollision?: boolean | undefined;\n\n /**\n * If true, droppable elements (with `draggable={true}` attribute)\n * can be dropped on the grid. It triggers \"onDrop\" callback\n * with position and event object as parameters.\n * It can be useful for dropping an element in a specific position\n * NOTE: In case of using Firefox you should add\n * `onDragStart={e => e.dataTransfer.setData('text/plain', '')}` attribute\n * along with `draggable={true}` otherwise this feature will work incorrect.\n * onDragStart attribute is required for Firefox for a dragging initialization\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=568313\n */\n isDroppable?: boolean | undefined;\n\n /**\n * Defines which resize handles should be rendered\n * Allows for any combination of:\n * 's' - South handle (bottom-center)\n * 'w' - West handle (left-center)\n * 'e' - East handle (right-center)\n * 'n' - North handle (top-center)\n * 'sw' - Southwest handle (bottom-left)\n * 'nw' - Northwest handle (top-left)\n * 'se' - Southeast handle (bottom-right)\n * 'ne' - Northeast handle (top-right)\n */\n resizeHandles?: ResizeHandle[] | undefined;\n\n /**\n * Defines custom component for resize handle\n */\n resizeHandle?: React.ReactNode | ((resizeHandle: ResizeHandle) => React.ReactNode) | undefined;\n\n /**\n * Calls when drag starts.\n */\n onDragStart?: ItemCallback | undefined;\n\n /**\n * Calls on each drag movement.\n */\n onDrag?: ItemCallback | undefined;\n\n /**\n * Calls when drag is complete.\n */\n onDragStop?: ItemCallback | undefined;\n\n /**\n * Calls when resize starts.\n */\n onResizeStart?: ItemCallback | undefined;\n\n /**\n * Calls when resize movement happens.\n */\n onResize?: ItemCallback | undefined;\n\n /**\n * Calls when resize is complete.\n */\n onResizeStop?: ItemCallback | undefined;\n\n /**\n * Calls when some element has been dropped\n */\n onDrop?(layout: Layout[], item: Layout, e: Event): void;\n\n /**\n * Calls when an element is being dragged over the grid from outside as above.\n * This callback should return an object to dynamically change the droppingItem size\n * Return false to short-circuit the dragover\n */\n onDropDragOver?(e: DragOverEvent): { w?: number, h?: number } | false | undefined;\n\n /**\n * Ref for getting a reference for the grid's wrapping div.\n * You can use this instead of a regular ref and the deprecated `ReactDOM.findDOMNode()`` function.\n */\n innerRef?: React.Ref;\n }\n\n interface ReactGridLayoutProps extends CoreProps {\n children?: React.ReactNode;\n\n /**\n * Number of columns in this layout.\n */\n cols?: number | undefined;\n\n /**\n * Margin between items `[x, y]` in px.\n */\n margin?: [number, number] | undefined;\n\n /**\n * Padding inside the container `[x, y]` in px.\n */\n containerPadding?: [number, number] | undefined;\n\n /**\n * Layout is an array of object with the format:\n ", + "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070:types/react-grid-layout/index.d.ts": "// Type definitions for react-grid-layout 1.3\n// Project: https://github.com/STRML/react-grid-layout\n// Definitions by: Andrew Birkholz \n// Ali Taheri \n// Zheyang Song \n// Andrew Hathaway \n// Manav Mishra \n// Alexey Fyodorov \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\nimport * as React from 'react';\n\nexport as namespace ReactGridLayout;\nexport = ReactGridLayout;\n\ndeclare class ReactGridLayout extends React.Component {}\n\ntype ResizeHandle = 's' | 'w' | 'e' | 'n' | 'sw' | 'nw' | 'se' | 'ne';\n\ndeclare namespace ReactGridLayout {\n interface Layout {\n /**\n * A string corresponding to the component key.\n * Uses the index of components instead if not provided.\n */\n i: string;\n\n /**\n * X position in grid units.\n */\n x: number;\n\n /**\n * Y position in grid units.\n */\n y: number;\n\n /**\n * Width in grid units.\n */\n w: number;\n\n /**\n * Height in grid units.\n */\n h: number;\n\n /**\n * Minimum width in grid units.\n */\n minW?: number | undefined;\n\n /**\n * Maximum width in grid units.\n */\n maxW?: number | undefined;\n\n /**\n * Minimum height in grid units.\n */\n minH?: number | undefined;\n\n /**\n * Maximum height in grid units.\n */\n maxH?: number | undefined;\n\n /**\n * set by DragEvents (onDragStart, onDrag, onDragStop) and ResizeEvents (onResizeStart, onResize, onResizeStop)\n */\n moved?: boolean | undefined;\n\n /**\n * If true, equal to `isDraggable: false` and `isResizable: false`.\n */\n static?: boolean | undefined;\n\n /**\n * If false, will not be draggable. Overrides `static`.\n */\n isDraggable?: boolean | undefined;\n\n /**\n * If false, will not be resizable. Overrides `static`.\n */\n isResizable?: boolean | undefined;\n\n /**\n * By default, a handle is only shown on the bottom-right (southeast) corner.\n * Note that resizing from the top or left is generally not intuitive.\n */\n resizeHandles?: ResizeHandle[] | undefined;\n\n /**\n * If true and draggable, item will be moved only within grid.\n */\n isBounded?: boolean | undefined;\n }\n\n interface Layouts {\n [P: string]: Layout[];\n }\n\n type ItemCallback = (\n layout: Layout[],\n oldItem: Layout,\n newItem: Layout,\n placeholder: Layout,\n event: MouseEvent,\n element: HTMLElement,\n ) => void;\n\n type DragOverEvent = MouseEvent & {\n nativeEvent: {\n layerX: number,\n layerY: number,\n } & Event\n };\n\n interface CoreProps {\n /**\n * The classname to add to the root element.\n */\n className?: string | undefined;\n\n /**\n * Inline-style object to pass to the root element.\n */\n style?: React.CSSProperties | undefined;\n\n /**\n * This allows setting the initial width on the server side.\n * This is required unless using the HOC or similar.\n */\n width?: number | undefined;\n\n /**\n * If true, the container height swells and contracts to fit contents.\n */\n autoSize?: boolean | undefined;\n\n /**\n * A CSS selector for tags that will not be draggable.\n * For example: `draggableCancel: '.MyNonDraggableAreaClassName'`\n * If you forget the leading. it will not work.\n * \"\".react-resizable-handle\" is always prepended to this value.\n */\n draggableCancel?: string | undefined;\n\n /**\n * A CSS selector for tags that will act as the draggable handle.\n * For example: `draggableHandle: '.MyDragHandleClassName'`\n * If you forget the leading . it will not work.\n */\n draggableHandle?: string | undefined;\n\n /**\n * Compaction type.\n */\n compactType?: 'vertical' | 'horizontal' | null | undefined;\n\n /**\n * Rows have a static height, but you can change this based on breakpoints if you like.\n */\n rowHeight?: number | undefined;\n\n /**\n * Configuration of a dropping element. Dropping element is a \"virtual\" element\n * which appears when you drag over some element from outside.\n */\n droppingItem?: {\n i: string;\n w: number;\n h: number;\n } | undefined;\n\n /**\n * If true, the layout will compact vertically.\n */\n verticalCompact?: boolean | undefined;\n\n /**\n * Default Infinity, but you can specify a max here if you like.\n * Note that this isn't fully fleshed out and won't error if you specify a layout that\n * extends beyond the row capacity. It will, however, not allow users to drag/resize\n * an item past the barrier. They can push items beyond the barrier, though.\n * Intentionally not documented for this reason.\n */\n maxRows?: number | undefined;\n\n // Flags:\n\n /**\n * If set to false it will disable dragging on all children.\n */\n isDraggable?: boolean | undefined;\n\n /**\n * If set to false it will disable resizing on all children.\n */\n isResizable?: boolean | undefined;\n\n /**\n * If true and draggable, all items will be moved only within grid.\n */\n isBounded?: boolean | undefined;\n\n /**\n * Uses CSS3 `translate()` instead of position top/left.\n * This makes about 6x faster paint performance.\n */\n useCSSTransforms?: boolean | undefined;\n\n /**\n * If parent DOM node of ResponsiveReactGridLayout or ReactGridLayout has \"transform: scale(n)\" css property,\n * we should set scale coefficient to avoid render artefacts while dragging.\n */\n transformScale?: number | undefined;\n\n /**\n * If true, grid can be placed one over the other.\n */\n allowOverlap?: boolean | undefined;\n\n /**\n * If true, grid items won't change position when being dragged over.\n */\n preventCollision?: boolean | undefined;\n\n /**\n * If true, droppable elements (with `draggable={true}` attribute)\n * can be dropped on the grid. It triggers \"onDrop\" callback\n * with position and event object as parameters.\n * It can be useful for dropping an element in a specific position\n * NOTE: In case of using Firefox you should add\n * `onDragStart={e => e.dataTransfer.setData('text/plain', '')}` attribute\n * along with `draggable={true}` otherwise this feature will work incorrect.\n * onDragStart attribute is required for Firefox for a dragging initialization\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=568313\n */\n isDroppable?: boolean | undefined;\n\n /**\n * Defines which resize handles should be rendered\n * Allows for any combination of:\n * 's' - South handle (bottom-center)\n * 'w' - West handle (left-center)\n * 'e' - East handle (right-center)\n * 'n' - North handle (top-center)\n * 'sw' - Southwest handle (bottom-left)\n * 'nw' - Northwest handle (top-left)\n * 'se' - Southeast handle (bottom-right)\n * 'ne' - Northeast handle (top-right)\n */\n resizeHandles?: ResizeHandle[] | undefined;\n\n /**\n * Defines custom component for resize handle\n */\n resizeHandle?: React.ReactNode | ((resizeHandle: ResizeHandle) => React.ReactNode) | undefined;\n\n /**\n * Calls when drag starts.\n */\n onDragStart?: ItemCallback | undefined;\n\n /**\n * Calls on each drag movement.\n */\n onDrag?: ItemCallback | undefined;\n\n /**\n * Calls when drag is complete.\n */\n onDragStop?: ItemCallback | undefined;\n\n /**\n * Calls when resize starts.\n */\n onResizeStart?: ItemCallback | undefined;\n\n /**\n * Calls when resize movement happens.\n */\n onResize?: ItemCallback | undefined;\n\n /**\n * Calls when resize is complete.\n */\n onResizeStop?: ItemCallback | undefined;\n\n /**\n * Calls when some element has been dropped\n */\n onDrop?(layout: Layout[], item: Layout, e: Event): void;\n\n /**\n * Calls when an element is being dragged over the grid from outside as above.\n * This callback should return an object to dynamically change the droppingItem size\n * Return false to short-circuit the dragover\n */\n onDropDragOver?(e: DragOverEvent): { w?: number, h?: number } | false | undefined;\n\n /**\n * Ref for getting a reference for the grid's wrapping div.\n * You can use this instead of a regular ref and the deprecated `ReactDOM.findDOMNode()`` function.\n */\n innerRef?: React.Ref;\n }\n\n interface ReactGridLayoutProps extends CoreProps {\n children?: React.ReactNode;\n\n /**\n * Number of columns in this layout.\n */\n cols?: number | undefined;\n\n /**\n * Margin between items `[x, y]` in px.\n */\n margin?: [number, number] | undefined;\n\n /**\n * Padding inside the container `[x, y]` in px.\n */\n containerPadding?: [number, number] | undefined;\n\n /**\n * Layout is an array of object with the format:\n *\n * `{x: number, y: number, w: number, h: number}`\n ", + "2cee47aedc9b4d321e378d7020984adf005fef64:types/react-native-fbsdk/index.d.ts": "// Type definitions for react-native-fbsdk 3.0\n// Project: https://github.com/facebook/react-native-fbsdk\n// Definitions by: Ifiok Jr. \n// Thibault Malbranche \n// Stuart Forrest \n// Un Ha Kim \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\nimport { ComponentClass, Component } from 'react';\nimport { ViewStyle } from 'react-native';\n\n/**\n * Commonly used Facebook permissions\n */\nexport type Permissions =\n | 'public_profile'\n | 'user_friends'\n | 'email'\n | 'user_about_me'\n | 'user_actions.books'\n | 'user_actions.fitness'\n | 'user_actions.music'\n | 'user_actions.news'\n | 'user_actions.video'\n | 'user_birthday'\n | 'user_education_history'\n | 'user_events'\n | 'user_games_activity'\n | 'user_hometown'\n | 'user_likes'\n | 'user_location'\n | 'user_managed_groups'\n | 'user_photos'\n | 'user_posts'\n | 'user_relationships'\n | 'user_relationship_details'\n | 'user_religion_politics'\n | 'user_tagged_places'\n | 'user_videos'\n | 'user_website'\n | 'user_work_history'\n | 'read_custom_friendlists'\n | 'read_insights'\n | 'read_audience_network_insights'\n | 'read_page_mailboxes'\n | 'manage_pages'\n | 'publish_pages'\n | 'publish_actions'\n | 'rsvp_event'\n | 'pages_show_list'\n | 'pages_manage_cta'\n | 'pages_manage_instant_articles'\n | 'ads_read'\n | 'ads_management'\n | 'business_management'\n | 'pages_messaging'\n | 'pages_messaging_subscriptions'\n | 'pages_messaging_payments'\n | 'pages_messaging_phone_number'\n | string;\n\n/**\n * Specifies the privacy of a group.\n */\nexport type AppGroupPrivacy =\n // Anyone can see the group, who's in in and what members post.\n | 'Open'\n // Anyone can see the group and who's in it, but only members can see posts.\n | 'Closed';\n\n/**\n * A model for app groups.\n */\nexport interface AppGroupCreationContent {\n /**\n * The description of the group.\n */\n description: string;\n\n /**\n * The name of the group.\n */\n name: string;\n\n /**\n * The privacy for the group.\n */\n privacy: AppGroupPrivacy;\n}\n\n/**\n * A model for app invites.\n */\nexport interface AppInviteContent {\n /**\n * A URL to a preview image that will be displayed with the app invite.\n * This is optional. If you don't include it, a fallback image will be used.\n */\n previewImageUrl?: string | undefined;\n\n /**\n * An app link target that will be used as a target when the user accepts the invite.\n */\n applinkUrl: string;\n\n /**\n * Promotional code to be displayed while sending and receiving the invite.\n * This is optional. This can be between 0 and 10 characters long and can contain\n * alphanumeric characters only. To set a promo code, you need to set promo text.\n */\n promotionCode?: string | undefined;\n\n /**\n * Promotional text to be displayed while sending and receiving the invite.\n * This is optional. This can be between 0 and 80 characters long and can contain\n * alphanumeric and spaces only.\n */\n promotionText?: string | undefined;\n}\n\nexport type GameRequestActionType =\n // The user is sending an object to their friends.\n | 'send'\n // The user is asking for an object from friends.\n | 'askfor'\n // It is the turn of the friends to play against the user in a match.\n | 'turn';\n\nexport type GameRequestFilters =\n // Friends using the app can be displayed.\n | 'app_users'\n // Friends not using the app can be displayed.\n | 'app_non_users';\n\n/**\n * A model for a game request.\n */\nexport interface GameRequestContent {\n /**\n * A plain-text message to be sent as part of the request. Required.\n */\n message: string;\n\n /**\n * Used when defining additional context about the nature of the request.\n * The parameter 'objectID' is required if the action type is either 'send' or 'ask-for'.\n */\n actionType?: GameRequestActionType | undefined;\n\n /**\n * Additional freeform data you may pass for tracking. The maximum length is 255 characters.\n */\n data?: string | undefined;\n\n /**\n * Controls the set of friends someone sees if a multi-friend selector is shown.\n */\n filters?: GameRequestFilters | undefined;\n\n /**\n * The Open Graph object ID of the object being sent/asked for. This cannot be null for ActionType SEND and\n * ASKFOR.\n */\n objectId?: string | undefined;\n\n /**\n * An array of user IDs, usernames or invite tokens of people to send requests to.\n */\n recipients?: string[] | undefined;\n\n /**\n * An array of user IDs that will be included in the dialog as the first suggested friends.\n * Can't be used together with filters.\n */\n suggestions?: string[] | undefined;\n\n /**\n * The title for the dialog.\n */\n title?: string | undefined;\n}\n\nexport type ObjectIdActionType = 'unknown' | 'open_graph' | 'page';\n\n/**\n * A base interface for content to be shared.\n */\nexport interface ObjectIdAndType {\n /**\n * The object ID, this can be a URL or a Facebook ID.\n */\n objectId: string;\n\n /**\n * Encapsulates the valid values for the facebook:object_type\n * attribute for a LikeView\n */\n objectType: ObjectIdActionType;\n}\n\nexport type ShareContent = ShareLinkContent | SharePhotoContent | ShareVideoContent | ShareOpenGraphContent;\n/**\n * A base interface for content to be shared.\n */\nexport interface ShareContentCommonParameters {\n /**\n * List of IDs for taggable people to tag with this content.\n */\n peopleIds?: string[] | undefined;\n\n /**\n * The ID for a place to tag with this content.\n */\n placeId?: string | undefined;\n\n /**\n * A value to be added to the referrer URL when a person follows a link from\n * this shared content on feed.\n */\n ref?: string | undefined;\n\n /**\n * A hashtag to be added to the share interface. The hashtag must be 32 characters or less.\n */\n hashtag?: string | undefined;\n}\n\n/**\n * A model for status and link content to be shared.\n */\nexport interface ShareLinkContent {\n /**\n * The type of content to be shared is link.\n */\n contentType: 'link';\n\n /**\n * Common parameters for share content;\n */\n commonParameters?: ShareContentCommonParameters | undefined;\n\n /**\n * URL for the content being shared.\n */\n contentUrl: string;\n\n /**\n * The Description of the link.\n * If not specified, this field is automatically populated by information scraped\n * from the contentURL, typically the title of the page.\n * @deprecated `contentDescription` is deprecated from Graph API 2.9.\n * For more information, see https://developers.facebook.com/docs/apps/changelog#v2_9_deprecations.\n */\n contentDescription?: string | undefined;\n\n /**\n * The title to display for this link.\n * @deprecated `contentTitle` is deprecated from Graph API 2.9.\n * For more information, see https://developers.facebook.com/docs/apps/changelog#v2_9_deprecations.\n */\n contentTitle?: string | undefined;\n\n /**\n * The URL of a picture to attach to this comment.\n * @deprecated `imageUrl` is deprecated from Graph API 2.9.\n * For more information, see https://developers.facebook.com/docs/apps/changelog#v2_9_deprecations.\n */\n imageUrl?: string | undefined;\n\n /**\n * The predefined quote to attach to this comment.\n * If specified, the quote text will render with custom styling on top of the link.\n */\n quote?: string | undefined;\n}\n\nexport interface OpenGraphProperties {\n [key: string]: OpenGraphValue;\n}\n\nexport interface OpenGraphValue {\n type: OpenGraphValueType;\n\n value: any;\n}\n\nexport type OpenGraphValueType = 'number' | 'open-graph-object' | 'photo' | 'string';\n\nexport interface ShareOpenGraphValueContainer {\n /**\n * Sets a number for the specified key.\n */\n putNumber(key: string, number: number): void;\n\n /**\n * Sets an open graph object for the specified key.\n */\n putObject(key: string, object: ShareOpenGraphValueContainer): void;\n\n /**\n * Sets a photo for the specified key.\n */\n putPhoto(key: string, photo: SharePhoto): void;\n\n /**\n * Sets a string for the specified key.\n */\n putString(key: string, string: string): void;\n\n /**\n * Gets an entry for the given key.\n */\n getEntry(key: string): OpenGraphValue;\n}\n\n/**\n * Represents an interface for adding and retrieving values to open graph objects and actions.\n */\nexport class ShareOpenGraphValueContainer {\n private _properties: OpenGraphProperties;\n\n constructor(properties: OpenGraphProperties);\n}\n\n/**\n * Represents an open graph action.\n */\nexport class ShareOpenGraphAction extends ShareOpenGraphValueContainer {\n /**\n * The action type.\n */\n actionType: string;\n\n constructor(actionType: string);\n}\n\n/**\n * Represents a content object containing information about an Open Graph Action.\n */\nexport interface ShareOpenGraphContent {\n /**\n * The type of content to be shared is open graph content.\n */\n contentType: 'open-graph';\n\n /**\n * Common parameters for share content;\n */\n commonParameters?: ShareContentCommonParameters | undefined;\n\n /**\n * URL for the content being shared.\n */\n contentUrl?: string | undefined;\n\n /**\n * Open Graph Action to be shared.\n */\n action: ShareOpenGraphAction;\n\n /**\n * Property name that points to the primary Open Graph Object in the action.\n */\n previewPropertyName: string;\n}\n\n/**\n * Represents an open graph object.\n */\nexport class ShareOpenGraphObject extends ShareOpenGraphValueContainer {}\n\n/**\n * A photo for sharing.\n */\nexport interface SharePhoto {\n /**\n * The URL to the photo.\n * Note that when sharing SharePhotoContent with Share Button, the imageUrl\n * of a SharePhoto cannot be the Uri of an image on the web.\n */\n imageUrl: string;\n\n /**\n * Speci", + "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070:types/react-native-fbsdk/index.d.ts": "// Type definitions for react-native-fbsdk 3.0\n// Project: https://github.com/facebook/react-native-fbsdk\n// Definitions by: Ifiok Jr. \n// Thibault Malbranche \n// Stuart Forrest \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\nimport { ComponentClass, Component } from 'react';\nimport { ViewStyle } from 'react-native';\n\n/**\n * Commonly used Facebook permissions\n */\nexport type Permissions =\n | 'public_profile'\n | 'user_friends'\n | 'email'\n | 'user_about_me'\n | 'user_actions.books'\n | 'user_actions.fitness'\n | 'user_actions.music'\n | 'user_actions.news'\n | 'user_actions.video'\n | 'user_birthday'\n | 'user_education_history'\n | 'user_events'\n | 'user_games_activity'\n | 'user_hometown'\n | 'user_likes'\n | 'user_location'\n | 'user_managed_groups'\n | 'user_photos'\n | 'user_posts'\n | 'user_relationships'\n | 'user_relationship_details'\n | 'user_religion_politics'\n | 'user_tagged_places'\n | 'user_videos'\n | 'user_website'\n | 'user_work_history'\n | 'read_custom_friendlists'\n | 'read_insights'\n | 'read_audience_network_insights'\n | 'read_page_mailboxes'\n | 'manage_pages'\n | 'publish_pages'\n | 'publish_actions'\n | 'rsvp_event'\n | 'pages_show_list'\n | 'pages_manage_cta'\n | 'pages_manage_instant_articles'\n | 'ads_read'\n | 'ads_management'\n | 'business_management'\n | 'pages_messaging'\n | 'pages_messaging_subscriptions'\n | 'pages_messaging_payments'\n | 'pages_messaging_phone_number'\n | string;\n\n/**\n * Specifies the privacy of a group.\n */\nexport type AppGroupPrivacy =\n // Anyone can see the group, who's in in and what members post.\n | 'Open'\n // Anyone can see the group and who's in it, but only members can see posts.\n | 'Closed';\n\n/**\n * A model for app groups.\n */\nexport interface AppGroupCreationContent {\n /**\n * The description of the group.\n */\n description: string;\n\n /**\n * The name of the group.\n */\n name: string;\n\n /**\n * The privacy for the group.\n */\n privacy: AppGroupPrivacy;\n}\n\n/**\n * A model for app invites.\n */\nexport interface AppInviteContent {\n /**\n * A URL to a preview image that will be displayed with the app invite.\n * This is optional. If you don't include it, a fallback image will be used.\n */\n previewImageUrl?: string | undefined;\n\n /**\n * An app link target that will be used as a target when the user accepts the invite.\n */\n applinkUrl: string;\n\n /**\n * Promotional code to be displayed while sending and receiving the invite.\n * This is optional. This can be between 0 and 10 characters long and can contain\n * alphanumeric characters only. To set a promo code, you need to set promo text.\n */\n promotionCode?: string | undefined;\n\n /**\n * Promotional text to be displayed while sending and receiving the invite.\n * This is optional. This can be between 0 and 80 characters long and can contain\n * alphanumeric and spaces only.\n */\n promotionText?: string | undefined;\n}\n\nexport type GameRequestActionType =\n // The user is sending an object to their friends.\n | 'send'\n // The user is asking for an object from friends.\n | 'askfor'\n // It is the turn of the friends to play against the user in a match.\n | 'turn';\n\nexport type GameRequestFilters =\n // Friends using the app can be displayed.\n | 'app_users'\n // Friends not using the app can be displayed.\n | 'app_non_users';\n\n/**\n * A model for a game request.\n */\nexport interface GameRequestContent {\n /**\n * A plain-text message to be sent as part of the request. Required.\n */\n message: string;\n\n /**\n * Used when defining additional context about the nature of the request.\n * The parameter 'objectID' is required if the action type is either 'send' or 'ask-for'.\n */\n actionType?: GameRequestActionType | undefined;\n\n /**\n * Additional freeform data you may pass for tracking. The maximum length is 255 characters.\n */\n data?: string | undefined;\n\n /**\n * Controls the set of friends someone sees if a multi-friend selector is shown.\n */\n filters?: GameRequestFilters | undefined;\n\n /**\n * The Open Graph object ID of the object being sent/asked for. This cannot be null for ActionType SEND and\n * ASKFOR.\n */\n objectId?: string | undefined;\n\n /**\n * An array of user IDs, usernames or invite tokens of people to send requests to.\n */\n recipients?: string[] | undefined;\n\n /**\n * An array of user IDs that will be included in the dialog as the first suggested friends.\n * Can't be used together with filters.\n */\n suggestions?: string[] | undefined;\n\n /**\n * The title for the dialog.\n */\n title?: string | undefined;\n}\n\nexport type ObjectIdActionType = 'unknown' | 'open_graph' | 'page';\n\n/**\n * A base interface for content to be shared.\n */\nexport interface ObjectIdAndType {\n /**\n * The object ID, this can be a URL or a Facebook ID.\n */\n objectId: string;\n\n /**\n * Encapsulates the valid values for the facebook:object_type\n * attribute for a LikeView\n */\n objectType: ObjectIdActionType;\n}\n\nexport type ShareContent = ShareLinkContent | SharePhotoContent | ShareVideoContent | ShareOpenGraphContent;\n/**\n * A base interface for content to be shared.\n */\nexport interface ShareContentCommonParameters {\n /**\n * List of IDs for taggable people to tag with this content.\n */\n peopleIds?: string[] | undefined;\n\n /**\n * The ID for a place to tag with this content.\n */\n placeId?: string | undefined;\n\n /**\n * A value to be added to the referrer URL when a person follows a link from\n * this shared content on feed.\n */\n ref?: string | undefined;\n\n /**\n * A hashtag to be added to the share interface. The hashtag must be 32 characters or less.\n */\n hashtag?: string | undefined;\n}\n\n/**\n * A model for status and link content to be shared.\n */\nexport interface ShareLinkContent {\n /**\n * The type of content to be shared is link.\n */\n contentType: 'link';\n\n /**\n * Common parameters for share content;\n */\n commonParameters?: ShareContentCommonParameters | undefined;\n\n /**\n * URL for the content being shared.\n */\n contentUrl: string;\n\n /**\n * The Description of the link.\n * If not specified, this field is automatically populated by information scraped\n * from the contentURL, typically the title of the page.\n * @deprecated `contentDescription` is deprecated from Graph API 2.9.\n * For more information, see https://developers.facebook.com/docs/apps/changelog#v2_9_deprecations.\n */\n contentDescription?: string | undefined;\n\n /**\n * The title to display for this link.\n * @deprecated `contentTitle` is deprecated from Graph API 2.9.\n * For more information, see https://developers.facebook.com/docs/apps/changelog#v2_9_deprecations.\n */\n contentTitle?: string | undefined;\n\n /**\n * The URL of a picture to attach to this comment.\n * @deprecated `imageUrl` is deprecated from Graph API 2.9.\n * For more information, see https://developers.facebook.com/docs/apps/changelog#v2_9_deprecations.\n */\n imageUrl?: string | undefined;\n\n /**\n * The predefined quote to attach to this comment.\n * If specified, the quote text will render with custom styling on top of the link.\n */\n quote?: string | undefined;\n}\n\nexport interface OpenGraphProperties {\n [key: string]: OpenGraphValue;\n}\n\nexport interface OpenGraphValue {\n type: OpenGraphValueType;\n\n value: any;\n}\n\nexport type OpenGraphValueType = 'number' | 'open-graph-object' | 'photo' | 'string';\n\nexport interface ShareOpenGraphValueContainer {\n /**\n * Sets a number for the specified key.\n */\n putNumber(key: string, number: number): void;\n\n /**\n * Sets an open graph object for the specified key.\n */\n putObject(key: string, object: ShareOpenGraphValueContainer): void;\n\n /**\n * Sets a photo for the specified key.\n */\n putPhoto(key: string, photo: SharePhoto): void;\n\n /**\n * Sets a string for the specified key.\n */\n putString(key: string, string: string): void;\n\n /**\n * Gets an entry for the given key.\n */\n getEntry(key: string): OpenGraphValue;\n}\n\n/**\n * Represents an interface for adding and retrieving values to open graph objects and actions.\n */\nexport class ShareOpenGraphValueContainer {\n private _properties: OpenGraphProperties;\n\n constructor(properties: OpenGraphProperties);\n}\n\n/**\n * Represents an open graph action.\n */\nexport class ShareOpenGraphAction extends ShareOpenGraphValueContainer {\n /**\n * The action type.\n */\n actionType: string;\n\n constructor(actionType: string);\n}\n\n/**\n * Represents a content object containing information about an Open Graph Action.\n */\nexport interface ShareOpenGraphContent {\n /**\n * The type of content to be shared is open graph content.\n */\n contentType: 'open-graph';\n\n /**\n * Common parameters for share content;\n */\n commonParameters?: ShareContentCommonParameters | undefined;\n\n /**\n * URL for the content being shared.\n */\n contentUrl?: string | undefined;\n\n /**\n * Open Graph Action to be shared.\n */\n action: ShareOpenGraphAction;\n\n /**\n * Property name that points to the primary Open Graph Object in the action.\n */\n previewPropertyName: string;\n}\n\n/**\n * Represents an open graph object.\n */\nexport class ShareOpenGraphObject extends ShareOpenGraphValueContainer {}\n\n/**\n * A photo for sharing.\n */\nexport interface SharePhoto {\n /**\n * The URL to the photo.\n * Note that when sharing SharePhotoContent with Share Button, the imageUrl\n * of a SharePhoto cannot be the Uri of an image on the web.\n */\n imageUrl: string;\n\n /**\n * Specifies whether the photo was generated by the user or the ", + "2cee47aedc9b4d321e378d7020984adf005fef64:types/react-virtualized/index.d.ts": "// Type definitions for react-virtualized 9.21\n// Project: https://github.com/bvaughn/react-virtualized\n// Definitions by: Kalle Ott \n// John Gunther \n// Konstantin Nesterov \n// Steve Zhang \n// Maciej Goszczycki \n// Brandon Hall \n// Sebastian Busch \n// Adam Zmenak \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\nexport {\n ArrowKeyStepper,\n ArrowKeyStepperProps,\n ChildProps as ArrowKeyStepperChildProps,\n ScrollIndices,\n} from './dist/es/ArrowKeyStepper';\nexport { AutoSizer, AutoSizerProps, Dimensions, Size } from './dist/es/AutoSizer';\nexport {\n CellMeasurer,\n CellMeasurerCache,\n CellMeasurerCacheParams,\n CellMeasurerProps,\n KeyMapper,\n} from './dist/es/CellMeasurer';\nexport {\n Collection,\n CollectionCellGroupRenderer,\n CollectionCellGroupRendererParams,\n CollectionCellRenderer,\n CollectionCellRendererParams,\n CollectionCellSizeAndPosition,\n CollectionCellSizeAndPositionGetter,\n CollectionProps,\n} from './dist/es/Collection';\nexport { ColumnSizer, ColumnSizerProps, SizedColumnProps } from './dist/es/ColumnSizer';\nexport {\n accessibilityOverscanIndicesGetter,\n defaultOverscanIndicesGetter,\n defaultCellRangeRenderer,\n Grid,\n CellSizeAndPositionManager,\n ConfigureParams,\n ContainerSizeAndOffset,\n GetVisibleCellRangeParams,\n GridCellProps,\n GridCellRangeProps,\n GridCellRangeRenderer,\n GridCellRenderer,\n GridProps,\n GridState,\n OverscanIndices,\n OverscanIndicesGetterParams,\n ScrollDirection,\n ScrollParams,\n SectionRenderedParams,\n SizeAndPositionData,\n VisibleCellRange,\n ScrollbarPresenceParams,\n} from './dist/es/Grid';\nexport { InfiniteLoader, InfiniteLoaderChildProps, InfiniteLoaderProps } from './dist/es/InfiniteLoader';\nexport { List, ListProps, ListRowProps, ListRowRenderer } from './dist/es/List';\nexport {\n createCellPositioner as createMasonryCellPositioner,\n Masonry,\n CellRenderer,\n MasonryCellProps,\n MasonryProps,\n MasonryState,\n OnCellsRenderedCallback,\n OnScrollCallback,\n Position,\n Positioner,\n} from './dist/es/Masonry';\nexport { MultiGrid, MultiGridProps, MultiGridState } from './dist/es/MultiGrid';\nexport {\n ScrollSync,\n OnScrollParams,\n ScrollSyncChildProps,\n ScrollSyncProps,\n ScrollSyncState,\n} from './dist/es/ScrollSync';\nexport {\n createMultiSort as createTableMultiSort,\n defaultCellDataGetter as defaultTableCellDataGetter,\n defaultCellRenderer as defaultTableCellRenderer,\n defaultHeaderRenderer as defaultTableHeaderRenderer,\n defaultHeaderRowRenderer as defaultTableHeaderRowRenderer,\n defaultRowRenderer as defaultTableRowRenderer,\n Table,\n Column,\n SortDirection,\n SortIndicator,\n ColumnProps,\n HeaderMouseEventHandlerParams,\n RowMouseEventHandlerParams,\n SortDirectionType,\n TableCellDataGetter,\n TableCellDataGetterParams,\n TableCellProps,\n TableCellRenderer,\n TableHeaderProps,\n TableHeaderRenderer,\n TableHeaderRowProps,\n TableHeaderRowRenderer,\n TableProps,\n TableRowProps,\n TableRowRenderer,\n SortParams,\n} from './dist/es/Table';\nexport {\n WindowScroller,\n WindowScrollerChildProps,\n WindowScrollerProps,\n WindowScrollerState,\n IS_SCROLLING_TIMEOUT,\n} from './dist/es/WindowScroller';\n\nexport type Index = {\n index: number;\n};\n\nexport type PositionInfo = {\n x: number;\n y: number;\n};\n\nexport type ScrollPosition = {\n scrollLeft: number;\n scrollTop: number;\n};\n\nexport type SizeInfo = {\n height: number;\n width: number;\n};\n\nexport type SizeAndPositionInfo = SizeInfo & PositionInfo;\n\nexport type Map = { [key: string]: T };\n\nexport type Alignment = 'auto' | 'end' | 'start' | 'center';\n\nexport type IndexRange = {\n startIndex: number;\n stopIndex: number;\n};\n\nexport type OverscanIndexRange = {\n overscanStartIndex: number;\n overscanStopIndex: number;\n};\n\nexport type ScrollEventData = {\n clientHeight: number;\n scrollHeight: number;\n scrollTop: number;\n};\n", + "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070:types/react-virtualized/index.d.ts": "// Type definitions for react-virtualized 9.21\n// Project: https://github.com/bvaughn/react-virtualized\n// Definitions by: Kalle Ott \n// John Gunther \n// Konstantin Nesterov \n// Steve Zhang \n// Brandon Hall \n// Sebastian Busch \n// Adam Zmenak \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\nexport {\n ArrowKeyStepper,\n ArrowKeyStepperProps,\n ChildProps as ArrowKeyStepperChildProps,\n ScrollIndices,\n} from './dist/es/ArrowKeyStepper';\nexport { AutoSizer, AutoSizerProps, Dimensions, Size } from './dist/es/AutoSizer';\nexport {\n CellMeasurer,\n CellMeasurerCache,\n CellMeasurerCacheParams,\n CellMeasurerProps,\n KeyMapper,\n} from './dist/es/CellMeasurer';\nexport {\n Collection,\n CollectionCellGroupRenderer,\n CollectionCellGroupRendererParams,\n CollectionCellRenderer,\n CollectionCellRendererParams,\n CollectionCellSizeAndPosition,\n CollectionCellSizeAndPositionGetter,\n CollectionProps,\n} from './dist/es/Collection';\nexport { ColumnSizer, ColumnSizerProps, SizedColumnProps } from './dist/es/ColumnSizer';\nexport {\n accessibilityOverscanIndicesGetter,\n defaultOverscanIndicesGetter,\n defaultCellRangeRenderer,\n Grid,\n CellSizeAndPositionManager,\n ConfigureParams,\n ContainerSizeAndOffset,\n GetVisibleCellRangeParams,\n GridCellProps,\n GridCellRangeProps,\n GridCellRangeRenderer,\n GridCellRenderer,\n GridProps,\n GridState,\n OverscanIndices,\n OverscanIndicesGetterParams,\n ScrollDirection,\n ScrollParams,\n SectionRenderedParams,\n SizeAndPositionData,\n VisibleCellRange,\n ScrollbarPresenceParams,\n} from './dist/es/Grid';\nexport { InfiniteLoader, InfiniteLoaderChildProps, InfiniteLoaderProps } from './dist/es/InfiniteLoader';\nexport { List, ListProps, ListRowProps, ListRowRenderer } from './dist/es/List';\nexport {\n createCellPositioner as createMasonryCellPositioner,\n Masonry,\n CellRenderer,\n MasonryCellProps,\n MasonryProps,\n MasonryState,\n OnCellsRenderedCallback,\n OnScrollCallback,\n Position,\n Positioner,\n} from './dist/es/Masonry';\nexport { MultiGrid, MultiGridProps, MultiGridState } from './dist/es/MultiGrid';\nexport {\n ScrollSync,\n OnScrollParams,\n ScrollSyncChildProps,\n ScrollSyncProps,\n ScrollSyncState,\n} from './dist/es/ScrollSync';\nexport {\n createMultiSort as createTableMultiSort,\n defaultCellDataGetter as defaultTableCellDataGetter,\n defaultCellRenderer as defaultTableCellRenderer,\n defaultHeaderRenderer as defaultTableHeaderRenderer,\n defaultHeaderRowRenderer as defaultTableHeaderRowRenderer,\n defaultRowRenderer as defaultTableRowRenderer,\n Table,\n Column,\n SortDirection,\n SortIndicator,\n ColumnProps,\n HeaderMouseEventHandlerParams,\n RowMouseEventHandlerParams,\n SortDirectionType,\n TableCellDataGetter,\n TableCellDataGetterParams,\n TableCellProps,\n TableCellRenderer,\n TableHeaderProps,\n TableHeaderRenderer,\n TableHeaderRowProps,\n TableHeaderRowRenderer,\n TableProps,\n TableRowProps,\n TableRowRenderer,\n SortParams,\n} from './dist/es/Table';\nexport {\n WindowScroller,\n WindowScrollerChildProps,\n WindowScrollerProps,\n WindowScrollerState,\n IS_SCROLLING_TIMEOUT,\n} from './dist/es/WindowScroller';\n\nexport type Index = {\n index: number;\n};\n\nexport type PositionInfo = {\n x: number;\n y: number;\n};\n\nexport type ScrollPosition = {\n scrollLeft: number;\n scrollTop: number;\n};\n\nexport type SizeInfo = {\n height: number;\n width: number;\n};\n\nexport type SizeAndPositionInfo = SizeInfo & PositionInfo;\n\nexport type Map = { [key: string]: T };\n\nexport type Alignment = 'auto' | 'end' | 'start' | 'center';\n\nexport type IndexRange = {\n startIndex: number;\n stopIndex: number;\n};\n\nexport type OverscanIndexRange = {\n overscanStartIndex: number;\n overscanStopIndex: number;\n};\n\nexport type ScrollEventData = {\n clientHeight: number;\n scrollHeight: number;\n scrollTop: number;\n};\n", + "2cee47aedc9b4d321e378d7020984adf005fef64:types/ssh2-sftp-client/index.d.ts": "// Type definitions for ssh2-sftp-client 7.0\n// Project: https://github.com/theophilusx/ssh2-sftp-client\n// Definitions by: igrayson \n// Ascari Andrea \n// Kartik Malik \n// Michael Pertl \n// Taylor Herron \n// Lane Goldberg \n// Lorenzo Adinolfi \n// Sam Galizia \n// Tom Xu \n// Joseph Burger \n// Emma Milner \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\nimport * as ssh2 from 'ssh2';\n\nexport = sftp;\n\ntype FileInfoType = 'd' | '-' | 'l';\n\ndeclare class sftp {\n constructor(name?: string);\n connect(options: sftp.ConnectOptions): Promise;\n\n list(remoteFilePath: string, pattern?: string | RegExp): Promise;\n\n exists(remotePath: string): Promise;\n\n stat(remotePath: string): Promise;\n\n realPath(remotePath: string): Promise;\n\n get(\n path: string,\n dst?: string | NodeJS.WritableStream,\n options?: sftp.TransferOptions,\n ): Promise;\n\n fastGet(remoteFilePath: string, localPath: string, options?: sftp.FastGetTransferOptions): Promise;\n\n put(\n input: string | Buffer | NodeJS.ReadableStream,\n remoteFilePath: string,\n options?: sftp.TransferOptions,\n ): Promise;\n\n fastPut(localPath: string, remoteFilePath: string, options?: sftp.FastPutTransferOptions): Promise;\n\n cwd(): Promise;\n\n mkdir(remoteFilePath: string, recursive?: boolean): Promise;\n\n rmdir(remoteFilePath: string, recursive?: boolean): Promise;\n\n delete(remoteFilePath: string, noErrorOK?: boolean): Promise;\n\n rename(remoteSourcePath: string, remoteDestPath: string): Promise;\n\n chmod(remotePath: string, mode: number | string): Promise;\n\n append(\n input: Buffer | NodeJS.ReadableStream,\n remotePath: string,\n options?: sftp.WriteStreamOptions,\n ): Promise;\n\n uploadDir(srcDir: string, destDir: string, filter?: string | RegExp): Promise;\n\n downloadDir(srcDir: string, destDir: string, filter?: string | RegExp): Promise;\n\n end(): Promise;\n\n on(event: string, callback: (...args: any[]) => void): void;\n\n removeListener(event: string, callback: (...args: any[]) => void): void;\n\n posixRename(fromPath: string, toPath: string): Promise;\n}\n\ndeclare namespace sftp {\n interface ConnectOptions extends ssh2.ConnectConfig {\n retries?: number;\n retry_factor?: number;\n retry_minTimeout?: number;\n }\n\n interface ModeOption {\n mode?: number | string;\n }\n\n interface PipeOptions {\n end?: boolean;\n }\n\n interface ReadStreamOptions extends ModeOption {\n flags?: 'r';\n encoding?: null | string;\n handle?: null | string;\n autoClose?: boolean;\n }\n\n interface WriteStreamOptions extends ModeOption {\n flags?: 'w' | 'a';\n encoding?: null | string;\n autoClose?: boolean;\n }\n\n interface TransferOptions {\n pipeOptions?: PipeOptions;\n writeStreamOptions?: WriteStreamOptions;\n readStreamOptions?: ReadStreamOptions;\n }\n\n interface FastGetTransferOptions {\n concurrency?: number;\n chunkSize?: number;\n step?: (totalTransferred: number, chunk: number, total: number) => void;\n }\n\n interface FastPutTransferOptions extends FastGetTransferOptions, ModeOption {}\n\n interface FileInfo {\n type: FileInfoType;\n name: string;\n size: number;\n modifyTime: number;\n accessTime: number;\n rights: {\n user: string;\n group: string;\n other: string;\n };\n owner: number;\n group: number;\n }\n\n interface FileStats {\n mode: number;\n uid: number;\n gid: number;\n size: number;\n accessTime: number;\n modifyTime: number;\n isDirectory: boolean;\n isFile: boolean;\n isBlockDevice: boolean;\n isCharacterDevice: boolean;\n isSymbolicLink: boolean;\n isFIFO: boolean;\n isSocket: boolean;\n }\n}\n", + "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070:types/ssh2-sftp-client/index.d.ts": "// Type definitions for ssh2-sftp-client 7.0\n// Project: https://github.com/theophilusx/ssh2-sftp-client\n// Definitions by: igrayson \n// Ascari Andrea \n// Kartik Malik \n// Michael Pertl \n// Taylor Herron \n// Lane Goldberg \n// Lorenzo Adinolfi \n// Tom Xu \n// Joseph Burger \n// Emma Milner \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\nimport * as ssh2 from 'ssh2';\n\nexport = sftp;\n\ntype FileInfoType = 'd' | '-' | 'l';\n\ndeclare class sftp {\n constructor(name?: string);\n connect(options: sftp.ConnectOptions): Promise;\n\n list(remoteFilePath: string, pattern?: string | RegExp): Promise;\n\n exists(remotePath: string): Promise;\n\n stat(remotePath: string): Promise;\n\n realPath(remotePath: string): Promise;\n\n get(\n path: string,\n dst?: string | NodeJS.WritableStream,\n options?: sftp.TransferOptions,\n ): Promise;\n\n fastGet(remoteFilePath: string, localPath: string, options?: sftp.FastGetTransferOptions): Promise;\n\n put(\n input: string | Buffer | NodeJS.ReadableStream,\n remoteFilePath: string,\n options?: sftp.TransferOptions,\n ): Promise;\n\n fastPut(localPath: string, remoteFilePath: string, options?: sftp.FastPutTransferOptions): Promise;\n\n cwd(): Promise;\n\n mkdir(remoteFilePath: string, recursive?: boolean): Promise;\n\n rmdir(remoteFilePath: string, recursive?: boolean): Promise;\n\n delete(remoteFilePath: string, noErrorOK?: boolean): Promise;\n\n rename(remoteSourcePath: string, remoteDestPath: string): Promise;\n\n chmod(remotePath: string, mode: number | string): Promise;\n\n append(\n input: Buffer | NodeJS.ReadableStream,\n remotePath: string,\n options?: sftp.WriteStreamOptions,\n ): Promise;\n\n uploadDir(srcDir: string, destDir: string, filter?: string | RegExp): Promise;\n\n downloadDir(srcDir: string, destDir: string, filter?: string | RegExp): Promise;\n\n end(): Promise;\n\n on(event: string, callback: (...args: any[]) => void): void;\n\n removeListener(event: string, callback: (...args: any[]) => void): void;\n\n posixRename(fromPath: string, toPath: string): Promise;\n}\n\ndeclare namespace sftp {\n interface ConnectOptions extends ssh2.ConnectConfig {\n retries?: number;\n retry_factor?: number;\n retry_minTimeout?: number;\n }\n\n interface ModeOption {\n mode?: number | string;\n }\n\n interface PipeOptions {\n end?: boolean;\n }\n\n interface ReadStreamOptions extends ModeOption {\n flags?: 'r';\n encoding?: null | string;\n handle?: null | string;\n autoClose?: boolean;\n }\n\n interface WriteStreamOptions extends ModeOption {\n flags?: 'w' | 'a';\n encoding?: null | string;\n autoClose?: boolean;\n }\n\n interface TransferOptions {\n pipeOptions?: PipeOptions;\n writeStreamOptions?: WriteStreamOptions;\n readStreamOptions?: ReadStreamOptions;\n }\n\n interface FastGetTransferOptions {\n concurrency?: number;\n chunkSize?: number;\n step?: (totalTransferred: number, chunk: number, total: number) => void;\n }\n\n interface FastPutTransferOptions extends FastGetTransferOptions, ModeOption {}\n\n interface FileInfo {\n type: FileInfoType;\n name: string;\n size: number;\n modifyTime: number;\n accessTime: number;\n rights: {\n user: string;\n group: string;\n other: string;\n };\n owner: number;\n group: number;\n }\n\n interface FileStats {\n mode: number;\n uid: number;\n gid: number;\n size: number;\n accessTime: number;\n modifyTime: number;\n isDirectory: boolean;\n isFile: boolean;\n isBlockDevice: boolean;\n isCharacterDevice: boolean;\n isSymbolicLink: boolean;\n isFIFO: boolean;\n isSocket: boolean;\n }\n}\n", + "2cee47aedc9b4d321e378d7020984adf005fef64:types/styled-components/index.d.ts": "// Type definitions for styled-components 5.1\n// Project: https://github.com/styled-components/styled-components, https://styled-components.com\n// Definitions by: Igor Oleinikov \n// Ihor Chulinda \n// Jessica Franco \n// Jason Killian \n// Sebastian Silbermann \n// Matthew Wagerfield \n// Yuki Ito \n// Maciej Goszczycki \n// Aaron Reisman \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n// forward declarations\ndeclare global {\n namespace NodeJS {\n // tslint:disable-next-line:no-empty-interface\n interface ReadableStream {}\n }\n}\n\nimport * as CSS from 'csstype';\nimport * as React from 'react';\nimport * as hoistNonReactStatics from 'hoist-non-react-statics';\n\nexport type CSSProperties = CSS.Properties;\n\nexport type CSSPseudos = { [K in CSS.Pseudos]?: CSSObject };\n\nexport interface CSSObject extends CSSProperties, CSSPseudos {\n [key: string]: CSSObject | string | number | undefined;\n}\n\nexport type CSSKeyframes = object & { [key: string]: CSSObject };\n\nexport interface ThemeProps {\n theme: T;\n}\n\nexport type ThemedStyledProps = P & ThemeProps;\nexport type StyledProps

= ThemedStyledProps>;\nexport type IntrinsicElementsKeys = keyof JSX.IntrinsicElements;\n\n// Any prop that has a default prop becomes optional, but its type is unchanged\n// Undeclared default props are augmented into the resulting allowable attributes\n// If declared props have indexed properties, ignore default props entirely as keyof gets widened\n// Wrap in an outer-level conditional type to allow distribution over props that are unions\ntype Defaultize = P extends any\n ? string extends keyof P\n ? P\n : PickU> &\n Partial>> &\n Partial>>\n : never;\n\ntype ReactDefaultizedProps = C extends { defaultProps: infer D } ? Defaultize : P;\n\ntype MakeAttrsOptional<\n C extends string | React.ComponentType,\n O extends object,\n A extends keyof P,\n P = React.ComponentPropsWithRef ? C : never>,\n> =\n // Distribute unions early to avoid quadratic expansion\n P extends any ? OmitU & O, A> & Partial> : never;\n\nexport type StyledComponentProps<\n // The Component from whose props are derived\n C extends string | React.ComponentType,\n // The Theme from the current context\n T extends object,\n // The other props added by the template\n O extends object,\n // The props that are made optional by .attrs\n A extends keyof any,\n // The Component passed with \"forwardedAs\" prop\n FAsC extends string | React.ComponentType = C\n> =\n // Distribute O if O is a union type\n O extends object\n ? WithOptionalTheme<\n MakeAttrsOptional & MakeAttrsOptional,\n T\n > &\n WithChildrenIfReactComponentClass\n : never;\n\n// Because of React typing quirks, when getting props from a React.ComponentClass,\n// we need to manually add a `children` field.\n// See https://github.com/DefinitelyTyped/DefinitelyTyped/pull/31945\n// and https://github.com/DefinitelyTyped/DefinitelyTyped/pull/32843\ntype WithChildrenIfReactComponentClass> = C extends React.ComponentClass<\n any\n>\n ? { children?: React.ReactNode | undefined }\n : {};\n\ntype StyledComponentPropsWithAs<\n C extends string | React.ComponentType,\n T extends object,\n O extends object,\n A extends keyof any,\n AsC extends string | React.ComponentType = C,\n FAsC extends string | React.ComponentType = C\n> = StyledComponentProps & { as?: AsC | undefined; forwardedAs?: FAsC | undefined };\n\nexport type FalseyValue = undefined | null | false;\nexport type Interpolation

= InterpolationValue | InterpolationFunction

| FlattenInterpolation

;\n// cannot be made a self-referential interface, breaks WithPropNested\n// see https://github.com/microsoft/TypeScript/issues/34796\nexport type FlattenInterpolation

= ReadonlyArray>;\nexport type InterpolationValue = string | number | FalseyValue | Keyframes | StyledComponentInterpolation | CSSObject;\nexport type SimpleInterpolation = InterpolationValue | FlattenSimpleInterpolation;\nexport type FlattenSimpleInterpolation = ReadonlyArray;\n\nexport type InterpolationFunction

= (props: P) => Interpolation

;\n\ntype Attrs, T> = ((props: ThemedStyledProps) => A) | A;\n\nexport type ThemedGlobalStyledClassProps = WithOptionalTheme & {\n suppressMultiMountWarning?: boolean | undefined;\n};\n\nexport interface GlobalStyleComponent extends React.ComponentClass> {}\n\n// remove the call signature from StyledComponent so Interpolation can still infer InterpolationFunction\ntype StyledComponentInterpolation =\n | PickU, keyof StyledComponentBase>\n | PickU, keyof StyledComponentBase>;\n\n// abuse Pick to strip the call signature from ForwardRefExoticComponent\ntype ForwardRefExoticBase

= PickU, keyof React.ForwardRefExoticComponent>;\n\n// Config to be used with withConfig\nexport interface StyledConfig {\n // TODO: Add all types from the original StyledComponentWrapperProperties\n componentId?: string;\n displayName?: string;\n shouldForwardProp?: ((prop: keyof O, defaultValidatorFn: (prop: keyof O) => boolean) => boolean) | undefined;\n}\n\n// extracts React defaultProps\ntype ReactDefaultProps = C extends { defaultProps: infer D } ? D : never;\n\n// any doesn't count as assignable to never in the extends clause, and we default A to never\nexport type AnyStyledComponent = StyledComponent | StyledComponent;\n\nexport type StyledComponent<\n C extends keyof JSX.IntrinsicElements | React.ComponentType,\n T extends object,\n O extends object = {},\n A extends keyof any = never\n> = // the \"string\" allows this to be used as an object key\n // I really want to avoid this if possible but it's the only way to use nesting with object styles...\n string &\n StyledComponentBase &\n hoistNonReactStatics.NonReactStatics ? C : never>;\n\nexport interface StyledComponentBase<\n C extends string | React.ComponentType,\n T extends object,\n O extends object = {},\n A extends keyof any = never\n> extends ForwardRefExoticBase> {\n // add our own fake call signature to implement the polymorphic 'as' prop\n (props: StyledComponentProps & { as?: never | undefined; forwardedAs?: never | undefined }): React.ReactElement<\n StyledComponentProps\n >;\n = C, FAsC extends string | React.ComponentType = AsC>(\n props: StyledComponentPropsWithAs,\n ): React.ReactElement>;\n\n withComponent(\n component: WithC,\n ): StyledComponent<\n StyledComponentInnerComponent,\n T,\n O & StyledComponentInnerOtherProps,\n A | StyledComponentInnerAttrs\n >;\n withComponent>(\n component: WithC,\n ): StyledComponent;\n}\n\nexport interface ThemedStyledFunctionBase<\n C extends keyof JSX.IntrinsicElements | React.ComponentType,\n T extends object,\n O extends object = {},\n A extends keyof any = never\n> {\n (first: TemplateStringsArray): StyledComponent;\n (\n first:\n | TemplateStringsArray\n | CSSObject\n | InterpolationFunction & O, T>>,\n ...rest: Array & O, T>>>\n ): StyledComponent;\n (\n first:\n | TemplateStringsArray\n | CSSObject\n | InterpolationFunction & O & U, T>>,\n ...rest: Array & O & U, T>>>\n ): StyledComponent;\n}\n\nexport interface ThemedStyledFunction<\n C extends keyof JSX.IntrinsicElements | React.ComponentType,\n T extends object,\n O extends object = {},\n A extends keyof any = never\n> extends ThemedStyledFunctionBase {\n // Fun thing: 'attrs' can also provide a polymorphic 'as' prop\n // My head already hurts enough so maybe later...\n attrs<\n U,\n NewA extends Partial & U> & {\n [others: string]: any;\n } = {}\n >(\n attrs: Attrs & U, NewA, T>,\n ): ThemedStyledFunction;\n\n withConfig: (\n config: StyledConfig & Props>,\n ) => ThemedStyledFunction;\n}\n\nexport type StyledFunction> = ThemedStyledFunction<\n C,\n any\n>;\n\ntype ThemedStyledComponentFactories = {\n [TTag in keyof JSX.IntrinsicElements]: ThemedStyledFunction;\n};\n\nexport type StyledComponentInnerComponent> = C extends StyledComponent<\n ", + "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070:types/styled-components/index.d.ts": "// Type definitions for styled-components 5.1\n// Project: https://github.com/styled-components/styled-components, https://styled-components.com\n// Definitions by: Igor Oleinikov \n// Ihor Chulinda \n// Jessica Franco \n// Jason Killian \n// Sebastian Silbermann \n// Matthew Wagerfield \n// Yuki Ito \n// Aaron Reisman \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n// forward declarations\ndeclare global {\n namespace NodeJS {\n // tslint:disable-next-line:no-empty-interface\n interface ReadableStream {}\n }\n}\n\nimport * as CSS from 'csstype';\nimport * as React from 'react';\nimport * as hoistNonReactStatics from 'hoist-non-react-statics';\n\nexport type CSSProperties = CSS.Properties;\n\nexport type CSSPseudos = { [K in CSS.Pseudos]?: CSSObject };\n\nexport interface CSSObject extends CSSProperties, CSSPseudos {\n [key: string]: CSSObject | string | number | undefined;\n}\n\nexport type CSSKeyframes = object & { [key: string]: CSSObject };\n\nexport interface ThemeProps {\n theme: T;\n}\n\nexport type ThemedStyledProps = P & ThemeProps;\nexport type StyledProps

= ThemedStyledProps>;\nexport type IntrinsicElementsKeys = keyof JSX.IntrinsicElements;\n\n// Any prop that has a default prop becomes optional, but its type is unchanged\n// Undeclared default props are augmented into the resulting allowable attributes\n// If declared props have indexed properties, ignore default props entirely as keyof gets widened\n// Wrap in an outer-level conditional type to allow distribution over props that are unions\ntype Defaultize = P extends any\n ? string extends keyof P\n ? P\n : PickU> &\n Partial>> &\n Partial>>\n : never;\n\ntype ReactDefaultizedProps = C extends { defaultProps: infer D } ? Defaultize : P;\n\ntype MakeAttrsOptional<\n C extends string | React.ComponentType,\n O extends object,\n A extends keyof P,\n P = React.ComponentPropsWithRef ? C : never>,\n> =\n // Distribute unions early to avoid quadratic expansion\n P extends any ? OmitU & O, A> & Partial> : never;\n\nexport type StyledComponentProps<\n // The Component from whose props are derived\n C extends string | React.ComponentType,\n // The Theme from the current context\n T extends object,\n // The other props added by the template\n O extends object,\n // The props that are made optional by .attrs\n A extends keyof any,\n // The Component passed with \"forwardedAs\" prop\n FAsC extends string | React.ComponentType = C\n> =\n // Distribute O if O is a union type\n O extends object\n ? WithOptionalTheme<\n MakeAttrsOptional & MakeAttrsOptional,\n T\n > &\n WithChildrenIfReactComponentClass\n : never;\n\n// Because of React typing quirks, when getting props from a React.ComponentClass,\n// we need to manually add a `children` field.\n// See https://github.com/DefinitelyTyped/DefinitelyTyped/pull/31945\n// and https://github.com/DefinitelyTyped/DefinitelyTyped/pull/32843\ntype WithChildrenIfReactComponentClass> = C extends React.ComponentClass<\n any\n>\n ? { children?: React.ReactNode | undefined }\n : {};\n\ntype StyledComponentPropsWithAs<\n C extends string | React.ComponentType,\n T extends object,\n O extends object,\n A extends keyof any,\n AsC extends string | React.ComponentType = C,\n FAsC extends string | React.ComponentType = C\n> = StyledComponentProps & { as?: AsC | undefined; forwardedAs?: FAsC | undefined };\n\nexport type FalseyValue = undefined | null | false;\nexport type Interpolation

= InterpolationValue | InterpolationFunction

| FlattenInterpolation

;\n// cannot be made a self-referential interface, breaks WithPropNested\n// see https://github.com/microsoft/TypeScript/issues/34796\nexport type FlattenInterpolation

= ReadonlyArray>;\nexport type InterpolationValue = string | number | FalseyValue | Keyframes | StyledComponentInterpolation | CSSObject;\nexport type SimpleInterpolation = InterpolationValue | FlattenSimpleInterpolation;\nexport type FlattenSimpleInterpolation = ReadonlyArray;\n\nexport type InterpolationFunction

= (props: P) => Interpolation

;\n\ntype Attrs, T> = ((props: ThemedStyledProps) => A) | A;\n\nexport type ThemedGlobalStyledClassProps = WithOptionalTheme & {\n suppressMultiMountWarning?: boolean | undefined;\n};\n\nexport interface GlobalStyleComponent extends React.ComponentClass> {}\n\n// remove the call signature from StyledComponent so Interpolation can still infer InterpolationFunction\ntype StyledComponentInterpolation =\n | PickU, keyof StyledComponentBase>\n | PickU, keyof StyledComponentBase>;\n\n// abuse Pick to strip the call signature from ForwardRefExoticComponent\ntype ForwardRefExoticBase

= PickU, keyof React.ForwardRefExoticComponent>;\n\n// Config to be used with withConfig\nexport interface StyledConfig {\n // TODO: Add all types from the original StyledComponentWrapperProperties\n componentId?: string;\n displayName?: string;\n shouldForwardProp?: ((prop: keyof O, defaultValidatorFn: (prop: keyof O) => boolean) => boolean) | undefined;\n}\n\n// extracts React defaultProps\ntype ReactDefaultProps = C extends { defaultProps: infer D } ? D : never;\n\n// any doesn't count as assignable to never in the extends clause, and we default A to never\nexport type AnyStyledComponent = StyledComponent | StyledComponent;\n\nexport type StyledComponent<\n C extends keyof JSX.IntrinsicElements | React.ComponentType,\n T extends object,\n O extends object = {},\n A extends keyof any = never\n> = // the \"string\" allows this to be used as an object key\n // I really want to avoid this if possible but it's the only way to use nesting with object styles...\n string &\n StyledComponentBase &\n hoistNonReactStatics.NonReactStatics ? C : never>;\n\nexport interface StyledComponentBase<\n C extends string | React.ComponentType,\n T extends object,\n O extends object = {},\n A extends keyof any = never\n> extends ForwardRefExoticBase> {\n // add our own fake call signature to implement the polymorphic 'as' prop\n (props: StyledComponentProps & { as?: never | undefined; forwardedAs?: never | undefined }): React.ReactElement<\n StyledComponentProps\n >;\n = C, FAsC extends string | React.ComponentType = AsC>(\n props: StyledComponentPropsWithAs,\n ): React.ReactElement>;\n\n withComponent(\n component: WithC,\n ): StyledComponent<\n StyledComponentInnerComponent,\n T,\n O & StyledComponentInnerOtherProps,\n A | StyledComponentInnerAttrs\n >;\n withComponent>(\n component: WithC,\n ): StyledComponent;\n}\n\nexport interface ThemedStyledFunctionBase<\n C extends keyof JSX.IntrinsicElements | React.ComponentType,\n T extends object,\n O extends object = {},\n A extends keyof any = never\n> {\n (first: TemplateStringsArray): StyledComponent;\n (\n first:\n | TemplateStringsArray\n | CSSObject\n | InterpolationFunction & O, T>>,\n ...rest: Array & O, T>>>\n ): StyledComponent;\n (\n first:\n | TemplateStringsArray\n | CSSObject\n | InterpolationFunction & O & U, T>>,\n ...rest: Array & O & U, T>>>\n ): StyledComponent;\n}\n\nexport interface ThemedStyledFunction<\n C extends keyof JSX.IntrinsicElements | React.ComponentType,\n T extends object,\n O extends object = {},\n A extends keyof any = never\n> extends ThemedStyledFunctionBase {\n // Fun thing: 'attrs' can also provide a polymorphic 'as' prop\n // My head already hurts enough so maybe later...\n attrs<\n U,\n NewA extends Partial & U> & {\n [others: string]: any;\n } = {}\n >(\n attrs: Attrs & U, NewA, T>,\n ): ThemedStyledFunction;\n\n withConfig: (\n config: StyledConfig & Props>,\n ) => ThemedStyledFunction;\n}\n\nexport type StyledFunction> = ThemedStyledFunction<\n C,\n any\n>;\n\ntype ThemedStyledComponentFactories = {\n [TTag in keyof JSX.IntrinsicElements]: ThemedStyledFunction;\n};\n\nexport type StyledComponentInnerComponent> = C extends StyledComponent<\n infer I,\n any,\n any,\n any\n>\n ? I\n : C extends Styl" +} diff --git a/packages/mergebot/src/_tests/fixtures/58764/_response.json b/packages/mergebot/src/_tests/fixtures/58764/_response.json new file mode 100644 index 0000000000..177e412c6e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/58764/_response.json @@ -0,0 +1,302 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM4yvxmj", + "title": "Remove contributors with deleted accounts", + "createdAt": "2022-02-14T00:04:08Z", + "author": { + "login": "github-actions", + "__typename": "Bot" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Edits multiple packages", + "__typename": "Label" + }, + { + "name": "Critical package", + "__typename": "Label" + }, + { + "name": "Where is GH Actions?", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + }, + { + "name": "Edits Owners", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 58764, + "state": "OPEN", + "headRefOid": "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070", + "changedFiles": 9, + "additions": 9, + "deletions": 15, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070", + "parents": { + "nodes": [ + { + "oid": "2cee47aedc9b4d321e378d7020984adf005fef64", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "kaoDev", + "__typename": "User" + }, + "commit": { + "oid": "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2022-02-14T18:07:29Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/58764#pullrequestreview-882009864", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 5290726535, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070/checks?check_suite_id=5290726535", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070/checks?check_suite_id=5290726535", + "checkRuns": { + "nodes": [ + { + "title": "Build #20220214.1 failed", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 5290726540, + "app": { + "name": "Dependabot", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070/checks?check_suite_id=5290726540", + "status": "QUEUED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070/checks?check_suite_id=5290726540", + "checkRuns": { + "nodes": [], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2022-02-14T00:04:05Z", + "committedDate": "2022-02-14T00:04:05Z", + "pushedDate": "2022-02-14T00:04:13Z", + "oid": "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "IC_kwDOAFz6BM495gup", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1038486441, + "body": "@github-actions Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 9 packages in this PR\n\n* `bootstrap.v3.datetimepicker` — [on npm](https://www.npmjs.com/package/bootstrap.v3.datetimepicker), [on unpkg](https://unpkg.com/browse/bootstrap.v3.datetimepicker@latest/)\n* `mithril-global` — [on npm](https://www.npmjs.com/package/mithril-global), [on unpkg](https://unpkg.com/browse/mithril-global@latest/)\n - 1 removed owner: @isiahmeadows\n* `mithril` — [on npm](https://www.npmjs.com/package/mithril), [on unpkg](https://unpkg.com/browse/mithril@latest/)\n - 1 removed owner: @isiahmeadows\n* `ospec` — [on npm](https://www.npmjs.com/package/ospec), [on unpkg](https://unpkg.com/browse/ospec@latest/)\n - 1 removed owner: @isiahmeadows\n* `react-grid-layout` — [on npm](https://www.npmjs.com/package/react-grid-layout), [on unpkg](https://unpkg.com/browse/react-grid-layout@latest/)\n - 1 removed owner: @catusmagnus\n* `react-native-fbsdk` — [on npm](https://www.npmjs.com/package/react-native-fbsdk), [on unpkg](https://unpkg.com/browse/react-native-fbsdk@latest/)\n - 1 removed owner: @UHKim\n* `react-virtualized` — [on npm](https://www.npmjs.com/package/react-virtualized), [on unpkg](https://unpkg.com/browse/react-virtualized@latest/)\n - owner-approval: @kaoDev\n - 1 removed owner: @mgoszcz2\n* `ssh2-sftp-client` — [on npm](https://www.npmjs.com/package/ssh2-sftp-client), [on unpkg](https://unpkg.com/browse/ssh2-sftp-client@latest/)\n - 1 removed owner: @sgalizia\n* `styled-components` — [on npm](https://www.npmjs.com/package/styled-components), [on unpkg](https://unpkg.com/browse/styled-components@latest/)\n - 1 removed owner: @mgoszcz2\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=58764&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❓ Continuous integration tests have gone missing\n * 🕐 A DT maintainer needs to approve changes which 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": "2022-02-14T00:04:52Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM495gu5", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1038486457, + "body": "Hey @github-actions,\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": "2022-02-14T00:04:53Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM495gu_", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1038486463, + "body": "🔔 @katonap @spacejack @isiahmeadows @maranomynet @abirkholz @alitaheri @ZheyangSong @andrewhathaway @manav-m @al-fyodorov @catusmagnus @ifiokjr @titozzz @stuartforrest-infinity @UHKim @kaoDev @guntherjh @wasd171 @Stevearzh @mgoszcz2 @brandonhall @sbusch @azmenak @igrayson @ascariandrea @kartik2406 @viamuli @gbhmt @builtbylane @loru88 @sgalizia @hengkx @candyapplecorn @tsop14 @Igorbek @Igmat @Jessidhia @jkillian @eps1lon @wagerfield @Lazyuki @lifeiscontent — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/58764/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": "2022-02-14T00:04:54Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 9, + "nodes": [ + { + "path": "types/bootstrap.v3.datetimepicker/v3/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/mithril-global/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/mithril/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/ospec/index.d.ts", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react-grid-layout/index.d.ts", + "additions": 6, + "deletions": 7, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react-native-fbsdk/index.d.ts", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react-virtualized/index.d.ts", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/ssh2-sftp-client/index.d.ts", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/styled-components/index.d.ts", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "OQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgSgr8E", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI2", + "name": "Other", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/58764/derived.json b/packages/mergebot/src/_tests/fixtures/58764/derived.json new file mode 100644 index 0000000000..7bd8e35f32 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/58764/derived.json @@ -0,0 +1,225 @@ +{ + "type": "info", + "now": "2022-02-17T22:11:42.329Z", + "pr_number": 58764, + "author": "github-actions", + "headCommitOid": "9ba7dfc289e4ce1023a9d398b9e04a91ae3a9070", + "mergeBaseOid": "2cee47aedc9b4d321e378d7020984adf005fef64", + "lastPushDate": "2022-02-14T00:04:13.000Z", + "lastActivityDate": "2022-02-14T18:07:29.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "bootstrap.v3.datetimepicker", + "kind": "edit", + "files": [ + { + "path": "types/bootstrap.v3.datetimepicker/v3/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "katonap" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + }, + { + "name": "mithril-global", + "kind": "edit", + "files": [ + { + "path": "types/mithril-global/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "spacejack", + "isiahmeadows" + ], + "addedOwners": [], + "deletedOwners": [ + "isiahmeadows" + ], + "popularityLevel": "Well-liked by everyone" + }, + { + "name": "mithril", + "kind": "edit", + "files": [ + { + "path": "types/mithril/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "spacejack", + "isiahmeadows" + ], + "addedOwners": [], + "deletedOwners": [ + "isiahmeadows" + ], + "popularityLevel": "Well-liked by everyone" + }, + { + "name": "ospec", + "kind": "edit", + "files": [ + { + "path": "types/ospec/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "maranomynet", + "spacejack", + "isiahmeadows" + ], + "addedOwners": [], + "deletedOwners": [ + "isiahmeadows" + ], + "popularityLevel": "Well-liked by everyone" + }, + { + "name": "react-grid-layout", + "kind": "edit", + "files": [ + { + "path": "types/react-grid-layout/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "abirkholz", + "alitaheri", + "ZheyangSong", + "andrewhathaway", + "manav-m", + "al-fyodorov", + "catusmagnus" + ], + "addedOwners": [], + "deletedOwners": [ + "catusmagnus" + ], + "popularityLevel": "Popular" + }, + { + "name": "react-native-fbsdk", + "kind": "edit", + "files": [ + { + "path": "types/react-native-fbsdk/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "ifiokjr", + "titozzz", + "stuartforrest-infinity", + "UHKim" + ], + "addedOwners": [], + "deletedOwners": [ + "UHKim" + ], + "popularityLevel": "Well-liked by everyone" + }, + { + "name": "react-virtualized", + "kind": "edit", + "files": [ + { + "path": "types/react-virtualized/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "kaoDev", + "guntherjh", + "wasd171", + "Stevearzh", + "mgoszcz2", + "brandonhall", + "sbusch", + "azmenak" + ], + "addedOwners": [], + "deletedOwners": [ + "mgoszcz2" + ], + "popularityLevel": "Popular" + }, + { + "name": "ssh2-sftp-client", + "kind": "edit", + "files": [ + { + "path": "types/ssh2-sftp-client/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "igrayson", + "ascariandrea", + "kartik2406", + "viamuli", + "gbhmt", + "builtbylane", + "loru88", + "sgalizia", + "hengkx", + "candyapplecorn", + "tsop14" + ], + "addedOwners": [], + "deletedOwners": [ + "sgalizia" + ], + "popularityLevel": "Popular" + }, + { + "name": "styled-components", + "kind": "edit", + "files": [ + { + "path": "types/styled-components/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "Igorbek", + "Igmat", + "Jessidhia", + "jkillian", + "eps1lon", + "wagerfield", + "Lazyuki", + "mgoszcz2", + "lifeiscontent" + ], + "addedOwners": [], + "deletedOwners": [ + "mgoszcz2" + ], + "popularityLevel": "Critical" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "kaoDev", + "date": "2022-02-14T18:07:29.000Z", + "isMaintainer": false + } + ], + "mainBotCommentID": 1038486441, + "ciResult": "missing" +} diff --git a/packages/mergebot/src/_tests/fixtures/58764/mutations.json b/packages/mergebot/src/_tests/fixtures/58764/mutations.json new file mode 100644 index 0000000000..4003788f92 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/58764/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM495gup", + "body": "@github-actions Thank you for submitting this PR!From one bot to another, beep bloop boople bloop.\n\n***This is a live comment that I will keep updated.***\n\n## 9 packages in this PR\n\n* `bootstrap.v3.datetimepicker` — [on npm](https://www.npmjs.com/package/bootstrap.v3.datetimepicker), [on unpkg](https://unpkg.com/browse/bootstrap.v3.datetimepicker@latest/)\n* `mithril-global` — [on npm](https://www.npmjs.com/package/mithril-global), [on unpkg](https://unpkg.com/browse/mithril-global@latest/)\n - 1 removed owner: @isiahmeadows\n* `mithril` — [on npm](https://www.npmjs.com/package/mithril), [on unpkg](https://unpkg.com/browse/mithril@latest/)\n - 1 removed owner: @isiahmeadows\n* `ospec` — [on npm](https://www.npmjs.com/package/ospec), [on unpkg](https://unpkg.com/browse/ospec@latest/)\n - 1 removed owner: @isiahmeadows\n* `react-grid-layout` — [on npm](https://www.npmjs.com/package/react-grid-layout), [on unpkg](https://unpkg.com/browse/react-grid-layout@latest/)\n - 1 removed owner: @catusmagnus\n* `react-native-fbsdk` — [on npm](https://www.npmjs.com/package/react-native-fbsdk), [on unpkg](https://unpkg.com/browse/react-native-fbsdk@latest/)\n - 1 removed owner: @UHKim\n* `react-virtualized` — [on npm](https://www.npmjs.com/package/react-virtualized), [on unpkg](https://unpkg.com/browse/react-virtualized@latest/)\n - owner-approval: @kaoDev\n - 1 removed owner: @mgoszcz2\n* `ssh2-sftp-client` — [on npm](https://www.npmjs.com/package/ssh2-sftp-client), [on unpkg](https://unpkg.com/browse/ssh2-sftp-client@latest/)\n - 1 removed owner: @sgalizia\n* `styled-components` — [on npm](https://www.npmjs.com/package/styled-components), [on unpkg](https://unpkg.com/browse/styled-components@latest/)\n - 1 removed owner: @mgoszcz2\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=58764&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❓ Continuous integration tests have gone missing\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" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMDk2NzQ1NzQx" + ], + "labelableId": "PR_kwDOAFz6BM4yvxmj" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "PRC_lALOAFz6BM4AORWwzgSgr8E", + "columnId": "MDEzOlByb2plY3RDb2x1bW45ODY3MDA2" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/58764/result.json b/packages/mergebot/src/_tests/fixtures/58764/result.json new file mode 100644 index 0000000000..1360de0997 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/58764/result.json @@ -0,0 +1,22 @@ +{ + "projectColumn": "Needs Maintainer Action", + "labels": [ + "Critical package", + "Edits Owners", + "Edits multiple packages", + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @github-actions,\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": "@github-actions Thank you for submitting this PR!From one bot to another, beep bloop boople bloop.\n\n***This is a live comment that I will keep updated.***\n\n## 9 packages in this PR\n\n* `bootstrap.v3.datetimepicker` — [on npm](https://www.npmjs.com/package/bootstrap.v3.datetimepicker), [on unpkg](https://unpkg.com/browse/bootstrap.v3.datetimepicker@latest/)\n* `mithril-global` — [on npm](https://www.npmjs.com/package/mithril-global), [on unpkg](https://unpkg.com/browse/mithril-global@latest/)\n - 1 removed owner: @isiahmeadows\n* `mithril` — [on npm](https://www.npmjs.com/package/mithril), [on unpkg](https://unpkg.com/browse/mithril@latest/)\n - 1 removed owner: @isiahmeadows\n* `ospec` — [on npm](https://www.npmjs.com/package/ospec), [on unpkg](https://unpkg.com/browse/ospec@latest/)\n - 1 removed owner: @isiahmeadows\n* `react-grid-layout` — [on npm](https://www.npmjs.com/package/react-grid-layout), [on unpkg](https://unpkg.com/browse/react-grid-layout@latest/)\n - 1 removed owner: @catusmagnus\n* `react-native-fbsdk` — [on npm](https://www.npmjs.com/package/react-native-fbsdk), [on unpkg](https://unpkg.com/browse/react-native-fbsdk@latest/)\n - 1 removed owner: @UHKim\n* `react-virtualized` — [on npm](https://www.npmjs.com/package/react-virtualized), [on unpkg](https://unpkg.com/browse/react-virtualized@latest/)\n - owner-approval: @kaoDev\n - 1 removed owner: @mgoszcz2\n* `ssh2-sftp-client` — [on npm](https://www.npmjs.com/package/ssh2-sftp-client), [on unpkg](https://unpkg.com/browse/ssh2-sftp-client@latest/)\n - 1 removed owner: @sgalizia\n* `styled-components` — [on npm](https://www.npmjs.com/package/styled-components), [on unpkg](https://unpkg.com/browse/styled-components@latest/)\n - 1 removed owner: @mgoszcz2\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=58764&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❓ Continuous integration tests have gone missing\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 ..." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/59628/_downloads.json b/packages/mergebot/src/_tests/fixtures/59628/_downloads.json new file mode 100644 index 0000000000..25a2871d2d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/59628/_downloads.json @@ -0,0 +1,3 @@ +{ + "twemoji": 242870 +} diff --git a/packages/mergebot/src/_tests/fixtures/59628/_files.json b/packages/mergebot/src/_tests/fixtures/59628/_files.json new file mode 100644 index 0000000000..a598a5d441 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/59628/_files.json @@ -0,0 +1,3 @@ +{ + "e11ae5d76bb7c11e606ed5aa0e47c1f1e81fd88d:types/twemoji/index.d.ts": "// Type definitions for twemoji 12.1\n// Project: https://github.com/twitter/twemoji\n// Definitions by: Markus Tacker \n// Piotr Błażejewicz \n// David Wheatley \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.2\n\n/**\n * A simple library that provides standard Unicode emoji support across all platforms.\n * Twemoji v12.0 adheres to the Unicode 12.0 spec and supports the Emoji 12.0 spec\n * The Twemoji library offers support for 3,075 emojis.\n */\nexport as namespace twemoji;\n\n/**\n * default assets url, by default will be Twitter Inc. CDN\n */\nexport const base: string;\n\n/**\n * default assets file extensions, by default '.png'\n */\nexport const ext: string;\n\n/**\n * default assets/folder size, by default \"72x72\"\n * available via Twitter CDN: 72\n */\nexport const size: string;\n\n/**\n * default class name, by default 'emoji'\n */\nexport const className: string;\n\n/**\n * basic utilities / helpers to convert code points\n * to JavaScript surrogates and vice versa\n */\nexport const convert: {\n /**\n * Given an HEX codepoint, returns UTF16 surrogate pairs.\n *\n * @param codepoint string generic codepoint, i.e. '1F4A9'\n * @return string codepoint transformed into utf16 surrogates pair,\n * i.e. \\uD83D\\uDCA9\n *\n * @example\n * twemoji.convert.fromCodePoint('1f1e8');\n * // \"\\ud83c\\udde8\"\n *\n * '1f1e8-1f1f3'.split('-').map(twemoji.convert.fromCodePoint).join('')\n * // \"\\ud83c\\udde8\\ud83c\\uddf3\"\n */\n fromCodePoint: (codepoint: string) => string;\n\n /**\n * Given UTF16 surrogate pairs, returns the equivalent HEX codepoint.\n *\n * @param unicodeSurrogates string generic utf16 surrogates pair, i.e. \\uD83D\\uDCA9\n * @param sep string optional separator for double code points, default='-'\n * @return string utf16 transformed into codepoint, i.e. '1F4A9'\n *\n * @example\n * twemoji.convert.toCodePoint('\\ud83c\\udde8\\ud83c\\uddf3');\n * // \"1f1e8-1f1f3\"\n *\n * twemoji.convert.toCodePoint('\\ud83c\\udde8\\ud83c\\uddf3', '~');\n * // \"1f1e8~1f1f3\"\n */\n toCodePoint: (unicodeSurrogates: string, sep?: string) => string;\n};\n\n/**\n * User first: used to remove missing images\n * preserving the original text intent when\n * a fallback for network problems is desired.\n * Automatically added to Image nodes via DOM\n * It could be recycled for string operations via:\n * $('img.emoji').on('error', twemoji.onerror)\n */\nexport function onerror(): void;\n\n/**\n * Given a string, invokes the callback argument\n * per each emoji found in such string.\n * This is the most raw version used by\n * the .parse(string) method itself.\n *\n * @param text string generic string to parse\n * @param callback Function a generic callback that will be\n * invoked to replace the content.\n * This calback wil receive standard\n * String.prototype.replace(str, callback)\n * arguments such:\n * callback(\n * rawText, // the emoji match\n * );\n *\n * and others commonly received via replace.\n */\nexport function replace(text: string, callback: () => void): string;\n\n/**\n * Simplify string tests against emoji.\n *\n * @param text string some text that might contain emoji\n * @return boolean true if any emoji was found, false otherwise.\n *\n * @example\n *\n * if (twemoji.test(someContent)) {\n * console.log(\"emoji All The Things!\");\n * }\n */\nexport function test(text: string): boolean;\n\n/**\n * If given to parse, this callback will be invoked per each found emoji.\n *\n * If this callback returns a falsy value instead of a valid `src` to use for the image, nothing will actually change for that specific emoji.\n *\n * @param icon the lower case HEX code point i.e. \"1f4a9\"\n * @param options all info for this parsing operation\n * @param variant the optional \\uFE0F (\"as image\") variant, in case this info is anyhow meaningful. By default this is ignored.\n */\nexport type ParseCallback = (icon: string, options: object, variant: string) => string | false;\n\n/**\n * If given to parse, this object with all properties will be used per each found emoji.\n *\n * callback Function the callback to invoke per each found emoji.\n * base string the base url, by default twemoji.base\n * ext string the image extension, by default twemoji.ext\n * size string the assets size, by default twemoji.size\n */\nexport interface ParseObject {\n /**\n * the callback to invoke per each found emoji.\n *\n * default: the common replacer\n */\n callback: ParseCallback;\n /**\n * The function to invoke in order to generate additional, custom attributes for the image tag.\n *\n * @param the lower case HEX code point i.e. \"1f4a9\"\n * @param variant the optional \\uFE0F (\"as image\") variant, in case this info is anyhow meaningful. By default this is ignored.\n */\n attributes: (icon: string, variant: string) => object;\n /**\n * default: MaxCDN\n */\n base: string;\n /**\n * default: \".png\"\n */\n ext: string;\n /**\n * default: \"emoji\"\n */\n className: string;\n /**\n * default: \"72x72\"\n */\n size: string | number;\n /**\n * in case it's specified it replaces .size info, if any\n */\n folder: string;\n}\n\n/**\n * Main method/logic to generate either tags or HTMLImage nodes.\n * \"emojify\" a generic text or DOM Element.\n *\n * @overloads\n *\n * String replacement for `innerHTML` or server side operations\n * twemoji.parse(string);\n * twemoji.parse(string, Function);\n * twemoji.parse(string, Object);\n *\n * HTMLElement tree parsing for safer operations over existing DOM\n * twemoji.parse(HTMLElement);\n * twemoji.parse(HTMLElement, Function);\n * twemoji.parse(HTMLElement, Object);\n *\n * @param what string|HTMLElement the source to parse and enrich with emoji.\n *\n * string replace emoji matches with tags.\n * Mainly used to inject emoji via `innerHTML`\n * It does **not** parse the string or validate it,\n * it simply replaces found emoji with a tag.\n * NOTE: be sure this won't affect security.\n *\n * HTMLElement walk through the DOM tree and find emoji\n * that are inside **text node only** (nodeType === 3)\n * Mainly used to put emoji in already generated DOM\n * without compromising surrounding nodes and\n * **avoiding** the usage of `innerHTML`.\n * NOTE: Using DOM elements instead of strings should\n * improve security without compromising too much\n * performance compared with a less safe `innerHTML`.\n *\n * @param how object|Function\n *\n * @example\n *\n * twemoji.parse(\"I \\u2764\\uFE0F emoji!\");\n * // I \"❤️\" emoji!\n *\n *\n * twemoji.parse(\"I \\u2764\\uFE0F emoji!\", function(iconId, options) {\n * return '/assets/' + iconId + '.gif';\n * });\n * // I \"❤️\" emoji!\n *\n *\n * twemoji.parse(\"I \\u2764\\uFE0F emoji!\", {\n * size: 72,\n * callback: function(iconId, options) {\n * return '/assets/' + options.size + '/' + iconId + options.ext;\n * }\n * });\n * // I \"❤️\" emoji!\n */\nexport function parse(what: T, how?: Partial | ParseCallback): T;\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/59628/_response.json b/packages/mergebot/src/_tests/fixtures/59628/_response.json new file mode 100644 index 0000000000..8afc7fa345 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/59628/_response.json @@ -0,0 +1,357 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM41bNTc", + "title": ":tada: 'twemoji' no longer required", + "createdAt": "2022-03-31T19:26:36Z", + "author": { + "login": "peterblazejewicz", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Popular package", + "__typename": "Label" + }, + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Edits Infrastructure", + "__typename": "Label" + }, + { + "name": "Maintainer Approved", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 59628, + "state": "OPEN", + "headRefOid": "15c10d80e670b01133ffe2d37c4ffe3d3c3f3941", + "changedFiles": 6, + "additions": 4, + "deletions": 313, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "15c10d80e670b01133ffe2d37c4ffe3d3c3f3941", + "parents": { + "nodes": [ + { + "oid": "e11ae5d76bb7c11e606ed5aa0e47c1f1e81fd88d", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2022-03-31T19:32:10Z", + "projectColumnName": "Needs Maintainer Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2022-03-31T22:12:55Z", + "projectColumnName": "Waiting for Author to Merge", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "davwheat", + "__typename": "User" + }, + "commit": { + "oid": "15c10d80e670b01133ffe2d37c4ffe3d3c3f3941", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2022-03-31T19:33:37Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59628#pullrequestreview-928083763", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "15c10d80e670b01133ffe2d37c4ffe3d3c3f3941", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2022-03-31T22:12:17Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59628#pullrequestreview-928237599", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 5883803312, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/15c10d80e670b01133ffe2d37c4ffe3d3c3f3941/checks?check_suite_id=5883803312", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/15c10d80e670b01133ffe2d37c4ffe3d3c3f3941/checks?check_suite_id=5883803312", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 5883805587, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/15c10d80e670b01133ffe2d37c4ffe3d3c3f3941/checks?check_suite_id=5883805587", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/15c10d80e670b01133ffe2d37c4ffe3d3c3f3941/checks?check_suite_id=5883805587", + "checkRuns": { + "nodes": [ + { + "title": "Build #20220331.39 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2022-03-31T19:23:51Z", + "committedDate": "2022-03-31T19:23:51Z", + "pushedDate": "2022-03-31T19:26:15Z", + "oid": "15c10d80e670b01133ffe2d37c4ffe3d3c3f3941", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "IC_kwDOAFz6BM5ArAD6", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1085014266, + "body": "@peterblazejewicz Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and infra files)\n\n* `twemoji` (*probably deleted!*) — [on npm](https://www.npmjs.com/package/twemoji), [on unpkg](https://unpkg.com/browse/twemoji@latest/) (author is owner)\n - owner-approval: @davwheat\n* Infra files\n - [`notNeededPackages.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59628/files/15c10d80e670b01133ffe2d37c4ffe3d3c3f3941#diff-a275c2eae7b8f788a52327e76809026ee1bc5ea614393806c8f3cbab07202621)\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=59628&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 which affect DT infrastructure ([`notNeededPackages.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59628/files/15c10d80e670b01133ffe2d37c4ffe3d3c3f3941#diff-a275c2eae7b8f788a52327e76809026ee1bc5ea614393806c8f3cbab07202621))\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", + "createdAt": "2022-03-31T19:27:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5ArAEU", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1085014292, + "body": "🔔 @coderbyheart @davwheat — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59628/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": "2022-03-31T19:27:16Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5AroSK", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1085179018, + "body": "@peterblazejewicz: Everything looks good here. I am ready to merge this PR (at 15c10d8) 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(@coderbyheart, @davwheat: you can do this too.)\n", + "createdAt": "2022-03-31T22:12:56Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5ArpCN", + "author": { + "login": "davwheat", + "__typename": "User" + }, + "databaseId": 1085182093, + "body": "Ready to merge", + "createdAt": "2022-03-31T22:17:03Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5ArxKw", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "databaseId": 1085215408, + "body": "@typescript-bot 🤨", + "createdAt": "2022-03-31T23:05:00Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 6, + "nodes": [ + { + "path": "notNeededPackages.json", + "additions": 4, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/twemoji/index.d.ts", + "additions": 0, + "deletions": 229, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/twemoji/test/twemoji-tests.common-js.ts", + "additions": 0, + "deletions": 30, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/twemoji/test/twemoji-tests.global.ts", + "additions": 0, + "deletions": 28, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/twemoji/tsconfig.json", + "additions": 0, + "deletions": 25, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/twemoji/tslint.json", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "Ng", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgTEe7s", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIz", + "name": "Waiting for Author to Merge", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/59628/derived.json b/packages/mergebot/src/_tests/fixtures/59628/derived.json new file mode 100644 index 0000000000..6e19342115 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/59628/derived.json @@ -0,0 +1,86 @@ +{ + "type": "info", + "now": "2022-03-31T23:12:03.301Z", + "pr_number": 59628, + "author": "peterblazejewicz", + "headCommitOid": "15c10d80e670b01133ffe2d37c4ffe3d3c3f3941", + "mergeBaseOid": "e11ae5d76bb7c11e606ed5aa0e47c1f1e81fd88d", + "lastPushDate": "2022-03-31T19:26:15.000Z", + "lastActivityDate": "2022-03-31T23:05:00.000Z", + "mergeOfferDate": "2022-03-31T22:12:56.000Z", + "mergeRequestDate": "2022-03-31T22:17:03.000Z", + "mergeRequestUser": "davwheat", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": null, + "kind": "edit", + "files": [ + { + "path": "notNeededPackages.json", + "kind": "infrastructure" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical", + "isSafeInfrastructureEdit": false + }, + { + "name": "twemoji", + "kind": "delete", + "files": [ + { + "path": "types/twemoji/index.d.ts", + "kind": "definition" + }, + { + "path": "types/twemoji/test/twemoji-tests.common-js.ts", + "kind": "test" + }, + { + "path": "types/twemoji/test/twemoji-tests.global.ts", + "kind": "test" + }, + { + "path": "types/twemoji/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/twemoji/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [ + "coderbyheart", + "peterblazejewicz", + "davwheat" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "andrewbranch", + "date": "2022-03-31T22:12:17.000Z", + "isMaintainer": true + }, + { + "type": "approved", + "reviewer": "davwheat", + "date": "2022-03-31T19:33:37.000Z", + "isMaintainer": false + } + ], + "mainBotCommentID": 1085014266, + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/59628/mutations.json b/packages/mergebot/src/_tests/fixtures/59628/mutations.json new file mode 100644 index 0000000000..a38a7aea2f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/59628/mutations.json @@ -0,0 +1,42 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM5ArAD6", + "body": "@peterblazejewicz Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and infra files)\n\n* `twemoji` (*probably deleted!*) — [on npm](https://www.npmjs.com/package/twemoji), [on unpkg](https://unpkg.com/browse/twemoji@latest/) (author is owner)\n - owner-approval: @davwheat\n - Config files to check:\n - [`twemoji/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59628/files/15c10d80e670b01133ffe2d37c4ffe3d3c3f3941#diff-c4ce12913ee9780af4c13ff7652c33c38080c0f278ee4e2b8649589932ea4b2c): edited\n* Infra files\n - [`notNeededPackages.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59628/files/15c10d80e670b01133ffe2d37c4ffe3d3c3f3941#diff-a275c2eae7b8f788a52327e76809026ee1bc5ea614393806c8f3cbab07202621)\n\n## Code Reviews\n\nBecause this PR edits the configuration file, 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=59628&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 DT infrastructure ([`notNeededPackages.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59628/files/15c10d80e670b01133ffe2d37c4ffe3d3c3f3941#diff-a275c2eae7b8f788a52327e76809026ee1bc5ea614393806c8f3cbab07202621))\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": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "PR_kwDOAFz6BM41bNTc" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "PRC_lALOAFz6BM4AORWwzgTEe7s", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI1" + } + } + }, + { + "mutation": "mutation ($input: MergePullRequestInput!) {\n mergePullRequest(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "commitHeadline": "🤖 Merge PR #59628 :tada: 'twemoji' no longer required by @peterblazejewicz", + "expectedHeadOid": "15c10d80e670b01133ffe2d37c4ffe3d3c3f3941", + "mergeMethod": "SQUASH", + "pullRequestId": "PR_kwDOAFz6BM41bNTc" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/59628/result.json b/packages/mergebot/src/_tests/fixtures/59628/result.json new file mode 100644 index 0000000000..bcca09e3e6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/59628/result.json @@ -0,0 +1,24 @@ +{ + "projectColumn": "Recently Merged", + "labels": [ + "Popular package", + "Owner Approved", + "Maintainer Approved", + "Edits Infrastructure", + "Check Config", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@peterblazejewicz Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and infra files)\n\n* `twemoji` (*probably deleted!*) — [on npm](https://www.npmjs.com/package/twemoji), [on unpkg](https://unpkg.com/browse/twemoji@latest/) (author is owner)\n - owner-approval: @davwheat\n - Config files to check:\n - [`twemoji/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59628/files/15c10d80e670b01133ffe2d37c4ffe3d3c3f3941#diff-c4ce12913ee9780af4c13ff7652c33c38080c0f278ee4e2b8649589932ea4b2c): edited\n* Infra files\n - [`notNeededPackages.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59628/files/15c10d80e670b01133ffe2d37c4ffe3d3c3f3941#diff-a275c2eae7b8f788a52327e76809026ee1bc5ea614393806c8f3cbab07202621)\n\n## Code Reviews\n\nBecause this PR edits the configuration file, 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=59628&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 DT infrastructure ([`notNeededPackages.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59628/files/15c10d80e670b01133ffe2d37c4ffe3d3c3f3941#diff-a275c2eae7b8f788a52327e76809026ee1bc5ea614393806c8f3cbab07202621))\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": "@peterblazejewicz: Everything looks good here. I am ready to merge this PR (at 15c10d8) 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(@coderbyheart, @davwheat: you can do this too.)" + } + ], + "shouldClose": false, + "shouldMerge": true, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/66742/_downloads.json b/packages/mergebot/src/_tests/fixtures/66742/_downloads.json new file mode 100644 index 0000000000..914a4da7a2 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66742/_downloads.json @@ -0,0 +1,3 @@ +{ + "twine-sugarcube": 393 +} diff --git a/packages/mergebot/src/_tests/fixtures/66742/_files.json b/packages/mergebot/src/_tests/fixtures/66742/_files.json new file mode 100644 index 0000000000..1bffd4589d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66742/_files.json @@ -0,0 +1,4 @@ +{ + "3090530f3f230f7cfb2920b28bf49a938cd8aa59:types/twine-sugarcube/index.d.ts": "// Type definitions for non-npm package sugarcube 2.36\n// Project: https://github.com/tmedwards/sugarcube-2\n// Definitions by: ezsh \n// Thomas M. Edwards \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n// Minimum TypeScript Version: 3.9\n\n/// \n\nexport as namespace TwineSugarCube;\n\nexport * from \"./extensions\";\nexport * from \"./functions\";\nexport * from \"./globals\";\nexport * from \"./jquery\";\n\nexport * from \"./audio\";\nexport * from \"./config\";\nexport * from \"./engine\";\nexport * from \"./macro\";\nexport * from \"./passage\";\nexport * from \"./save\";\nexport * from \"./scripting\";\nexport * from \"./settings\";\nexport * from \"./state\";\nexport * from \"./story\";\nexport * from \"./sugarcube\";\nexport * from \"./template\";\nexport * from \"./ui\";\nexport * from \"./userdata\";\nexport * from \"./wiki\";\n", + "7a7f91980d3ac5f8c6b6916ca70a44aa08215698:types/twine-sugarcube/index.d.ts": "// Type definitions for non-npm package sugarcube 2.36\n// Project: https://github.com/tmedwards/sugarcube-2\n// Definitions by: ezsh \n// Thomas M. Edwards \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n// Minimum TypeScript Version: 3.9\n\n/// \n\nexport as namespace TwineSugarCube;\n\nexport * from \"./extensions\";\nexport * from \"./functions\";\nexport * from \"./globals\";\nexport * from \"./jquery\";\n\nexport * from \"./audio\";\nexport * from \"./config\";\nexport * from \"./engine\";\nexport * from \"./macro\";\nexport * from \"./passage\";\nexport * from \"./save\";\nexport * from \"./scripting\";\nexport * from \"./settings\";\nexport * from \"./state\";\nexport * from \"./story\";\nexport * from \"./sugarcube\";\nexport * from \"./template\";\nexport * from \"./ui\";\nexport * from \"./userdata\";\nexport * from \"./wiki\";\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/66742/_response.json b/packages/mergebot/src/_tests/fixtures/66742/_response.json new file mode 100644 index 0000000000..f7f2280ed0 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66742/_response.json @@ -0,0 +1,406 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM5anpFP", + "title": "[twine-sugarcube] Add Math.easeInOut, remove Math.trunc", + "createdAt": "2023-09-18T23:01:42Z", + "author": { + "login": "BawdyInkSlinger", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Revision needed", + "__typename": "Label" + }, + { + "name": "New Definition", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 66742, + "state": "OPEN", + "headRefOid": "7a7f91980d3ac5f8c6b6916ca70a44aa08215698", + "changedFiles": 2, + "additions": 10, + "deletions": 7, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "f52e88c32bdd7ec420d38632e6b79c78677dffdf", + "parents": { + "nodes": [ + { + "oid": "3090530f3f230f7cfb2920b28bf49a938cd8aa59", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "7a7f91980d3ac5f8c6b6916ca70a44aa08215698", + "parents": { + "nodes": [ + { + "oid": "f52e88c32bdd7ec420d38632e6b79c78677dffdf", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2023-09-30T07:13:56Z", + "projectColumnName": "Waiting for Author to Merge", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2023-10-18T01:03:59Z", + "projectColumnName": "Needs Maintainer Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2023-10-18T01:35:39Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "ezsh", + "__typename": "User" + }, + "commit": { + "oid": "7a7f91980d3ac5f8c6b6916ca70a44aa08215698", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2023-09-30T07:13:11Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66742#pullrequestreview-1651651355", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "tmedwards", + "__typename": "User" + }, + "commit": { + "oid": "7a7f91980d3ac5f8c6b6916ca70a44aa08215698", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "NONE", + "state": "CHANGES_REQUESTED", + "submittedAt": "2023-10-18T01:34:56Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66742#pullrequestreview-1683740673", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 16304448883, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/7a7f91980d3ac5f8c6b6916ca70a44aa08215698/checks?check_suite_id=16304448883", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7a7f91980d3ac5f8c6b6916ca70a44aa08215698/checks?check_suite_id=16304448883", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 16304452004, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/7a7f91980d3ac5f8c6b6916ca70a44aa08215698/checks?check_suite_id=16304452004", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7a7f91980d3ac5f8c6b6916ca70a44aa08215698/checks?check_suite_id=16304452004", + "checkRuns": { + "nodes": [ + { + "title": "Build #20230918.38 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2023-09-18T22:56:53Z", + "committedDate": "2023-09-18T22:56:53Z", + "pushedDate": null, + "oid": "7a7f91980d3ac5f8c6b6916ca70a44aa08215698", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 9, + "nodes": [ + { + "id": "IC_kwDOAFz6BM5myvnU", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1724578260, + "body": "@BawdyInkSlinger 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 which I will keep updated.***\n\n## 1 package in this PR\n\n* `twine-sugarcube` (*new!*) — [on npm](https://www.npmjs.com/package/twine-sugarcube), [on unpkg](https://unpkg.com/browse/twine-sugarcube@latest/)\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=66742&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 when there are new packages added\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": "2023-09-18T23:02:27Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5myvoV", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1724578325, + "body": "🔔 @ezsh @tmedwards — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66742/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": "2023-09-18T23:02:28Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5nzuX9", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1741612541, + "body": "Re-ping @ezsh, @tmedwards:\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": "2023-09-30T01:03:57Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5n1NZA", + "author": { + "login": "BawdyInkSlinger", + "__typename": "User" + }, + "databaseId": 1742001728, + "body": "You may want to undo this @ezsh See https://github.com/tmedwards/sugarcube-2/issues/267", + "createdAt": "2023-10-01T08:18:40Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5ooMoy", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1755367986, + "body": "Re-ping @BawdyInkSlinger / @tmedwards:\n\nThis PR has been ready to merge for over a week, and I haven't seen any requests to merge it. I will close it on Oct 30th (in three weeks) if this doesn't happen.\n\n(If there's no reason to avoid merging it, please do so. Otherwise, if it shouldn't be merged or if it needs more time, please close it or turn it into a draft.)\n", + "createdAt": "2023-10-10T12:53:20Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5o0niN", + "author": { + "login": "BawdyInkSlinger", + "__typename": "User" + }, + "databaseId": 1758623885, + "body": "I don't think it should be merged. ", + "createdAt": "2023-10-11T22:17:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5pWOLR", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1767432913, + "body": "🔔 @BawdyInkSlinger — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66742/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2023-10-18T01:04:01Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5pWOLz", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1767432947, + "body": "It has been more than two weeks and this PR still has no reviews.\n\nI'll bump it to the DT maintainer queue. Thank you for your patience, @BawdyInkSlinger.\n\n(Ping @«anyone?».)\n", + "createdAt": "2023-10-18T01:04:02Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5pWWU1", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1767466293, + "body": "@BawdyInkSlinger One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2023-10-18T01:35:40Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 2, + "nodes": [ + { + "path": "types/twine-sugarcube/extensions.d.ts", + "additions": 8, + "deletions": 6, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/twine-sugarcube/test/extensions.ts", + "additions": 2, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "Mg", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgVmD1U", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/66742/derived.json b/packages/mergebot/src/_tests/fixtures/66742/derived.json new file mode 100644 index 0000000000..b20c57a1fe --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66742/derived.json @@ -0,0 +1,53 @@ +{ + "type": "info", + "now": "2023-10-18T01:59:04.603Z", + "pr_number": 66742, + "author": "BawdyInkSlinger", + "headCommitOid": "7a7f91980d3ac5f8c6b6916ca70a44aa08215698", + "mergeBaseOid": "3090530f3f230f7cfb2920b28bf49a938cd8aa59", + "lastPushDate": "2023-09-18T23:01:42.000Z", + "lastActivityDate": "2023-10-18T01:34:56.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "twine-sugarcube", + "kind": "edit", + "files": [ + { + "path": "types/twine-sugarcube/extensions.d.ts", + "kind": "definition" + }, + { + "path": "types/twine-sugarcube/test/extensions.ts", + "kind": "test" + } + ], + "owners": [ + "ezsh", + "tmedwards" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "changereq", + "reviewer": "tmedwards", + "date": "2023-10-18T01:34:56.000Z" + }, + { + "type": "approved", + "reviewer": "ezsh", + "date": "2023-09-30T07:13:11.000Z", + "isMaintainer": false + } + ], + "mainBotCommentID": 1724578260, + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/66742/mutations.json b/packages/mergebot/src/_tests/fixtures/66742/mutations.json new file mode 100644 index 0000000000..4ce514b1fb --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66742/mutations.json @@ -0,0 +1,22 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM5myvnU", + "body": "@BawdyInkSlinger 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* `twine-sugarcube` — [on npm](https://www.npmjs.com/package/twine-sugarcube), [on unpkg](https://unpkg.com/browse/twine-sugarcube@latest/)\n - owner-approval: @ezsh\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=66742&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, 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" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2NDY3ODg4ODg=" + ], + "labelableId": "PR_kwDOAFz6BM5anpFP" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/66742/result.json b/packages/mergebot/src/_tests/fixtures/66742/result.json new file mode 100644 index 0000000000..86ca2a5cc6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66742/result.json @@ -0,0 +1,19 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "Revision needed" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@BawdyInkSlinger 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* `twine-sugarcube` — [on npm](https://www.npmjs.com/package/twine-sugarcube), [on unpkg](https://unpkg.com/browse/twine-sugarcube@latest/)\n - owner-approval: @ezsh\n\n## Code Reviews\n\nBecause you edited one package and updated the tests (👏), 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=66742&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, 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 ..." + }, + { + "tag": "reviewer-complaint-7a7f919", + "status": "@BawdyInkSlinger One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/66757/_downloads.json b/packages/mergebot/src/_tests/fixtures/66757/_downloads.json new file mode 100644 index 0000000000..9b93b9f1d4 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66757/_downloads.json @@ -0,0 +1,3 @@ +{ + "react-table": 3928231 +} diff --git a/packages/mergebot/src/_tests/fixtures/66757/_files.json b/packages/mergebot/src/_tests/fixtures/66757/_files.json new file mode 100644 index 0000000000..a930a50cc6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66757/_files.json @@ -0,0 +1,4 @@ +{ + "53e0cf9afba254ecae4add3ed008bf9972db16f5:types/react-table/index.d.ts": "// Type definitions for react-table 7.7\n// Project: https://github.com/tannerlinsley/react-table\n// Definitions by: Guy Gascoigne-Piggford ,\n// Rohit Garg \n// Jason Clark \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.5\n// reflects react-table@7.7.0\n\n// tslint:disable:no-empty-interface\n// no-empty-interface is disabled to allow easy extension with declaration merging\n\n/* eslint-disable @definitelytyped/no-unnecessary-generics */\n// no-unnecessary-generics is disabled because many of these definitions are either used in a generic\n// context or the signatures are required to match for declaration merging\n\n// The changelog for the important changes is located in the Readme.md\n\nimport {\n ChangeEvent,\n ComponentType,\n CSSProperties,\n DependencyList,\n EffectCallback,\n MouseEvent,\n ReactElement,\n ReactFragment,\n ReactNode,\n} from 'react';\n\nexport {};\n\n/**\n * The empty definitions of below provides a base definition for the parts used by useTable, that can then be extended in the users code.\n *\n * @example\n * export interface TableOptions\n * extends\n * UseExpandedOptions,\n * UseFiltersOptions {}\n * see https://gist.github.com/ggascoigne/646e14c9d54258e40588a13aabf0102d for more details\n */\nexport interface TableOptions extends UseTableOptions {}\n\nexport interface TableInstance\n extends Omit, 'columns' | 'pageCount'>,\n UseTableInstanceProps {}\n\nexport interface TableState {\n hiddenColumns?: Array> | undefined;\n}\n\nexport interface Hooks extends UseTableHooks {}\n\nexport interface Cell extends UseTableCellProps {}\n\nexport interface ColumnInterface extends UseTableColumnOptions {}\n\nexport interface ColumnInterfaceBasedOnValue {\n Cell?: Renderer> | undefined;\n}\n\nexport interface ColumnGroupInterface {\n columns: Array>;\n}\n\nexport type ColumnGroup =\n & ColumnInterface\n & ColumnGroupInterface\n & (\n | { Header: string; }\n | ({ id: IdType; } & {\n Header: Renderer>;\n })\n )\n // Not used, but needed for backwards compatibility\n & { accessor?: Accessor | undefined; };\n\ntype ValueOf = T[keyof T];\n\n// The accessors like `foo.bar` are not supported, use functions instead\nexport type ColumnWithStrictAccessor =\n & ColumnInterface\n & ValueOf<{\n [K in keyof D]: {\n accessor: K;\n } & ColumnInterfaceBasedOnValue;\n }>;\n\nexport type ColumnWithLooseAccessor =\n & ColumnInterface\n & ColumnInterfaceBasedOnValue\n & (\n | { Header: string }\n | { id: IdType }\n | { accessor: keyof D extends never ? IdType : never }\n )\n & { accessor?: (keyof D extends never ? IdType | Accessor : Accessor) | undefined; };\n\nexport type Column =\n | ColumnGroup\n | ColumnWithLooseAccessor\n | ColumnWithStrictAccessor;\n\nexport interface ColumnInstance\n extends Omit, 'id'>,\n ColumnInterfaceBasedOnValue,\n UseTableColumnProps {}\n\nexport interface HeaderGroup extends ColumnInstance, UseTableHeaderGroupProps {}\n\nexport interface Row extends UseTableRowProps {}\n\nexport interface TableCommonProps {\n style?: CSSProperties | undefined;\n className?: string | undefined;\n role?: string | undefined;\n}\n\nexport interface TableProps extends TableCommonProps {}\n\nexport interface TableBodyProps extends TableCommonProps {}\n\nexport interface TableKeyedProps extends TableCommonProps {\n key: React.Key;\n}\n\nexport interface TableHeaderGroupProps extends TableKeyedProps {}\n\nexport interface TableFooterGroupProps extends TableKeyedProps {}\n\nexport interface TableHeaderProps extends TableKeyedProps {}\n\nexport interface TableFooterProps extends TableKeyedProps {}\n\nexport interface TableRowProps extends TableKeyedProps {}\n\nexport interface TableCellProps extends TableKeyedProps {}\n\nexport interface TableToggleCommonProps extends TableCommonProps {\n onChange?: ((e: ChangeEvent) => void) | undefined;\n checked?: boolean | undefined;\n title?: string | undefined;\n indeterminate?: boolean | undefined;\n}\n\nexport interface MetaBase {\n instance: TableInstance;\n userProps: any;\n}\n\n// inspired by ExtendState in https://github.com/reduxjs/redux/blob/master/src/types/store.ts\nexport type Meta> = [Extension] extends [never]\n ? M\n : M & Extension;\n\n//#region useTable\nexport function useTable(\n options: TableOptions,\n ...plugins: Array>\n): TableInstance;\n\n/**\n * NOTE: To use custom options, use \"Interface Merging\" to add the custom options\n */\nexport type UseTableOptions = {\n columns: ReadonlyArray>;\n data: readonly D[];\n} & Partial<{\n initialState: Partial>;\n stateReducer: (newState: TableState, action: ActionType, previousState: TableState, instance?: TableInstance) => TableState;\n useControlledState: (state: TableState, meta: Meta) => TableState;\n defaultColumn: Partial>;\n getSubRows: (originalRow: D, relativeIndex: number) => D[];\n getRowId: (originalRow: D, relativeIndex: number, parent?: Row) => string;\n autoResetHiddenColumns: boolean;\n}>;\n\nexport type PropGetter> =\n | ((props: P, meta: Meta) => P | P[])\n | P\n | P[];\n\nexport type TablePropGetter = PropGetter;\n\nexport type TableBodyPropGetter = PropGetter;\n\nexport type HeaderPropGetter = PropGetter }>;\n\nexport type FooterGroupPropGetter = PropGetter }>;\n\nexport type HeaderGroupPropGetter = PropGetter }>;\n\nexport type FooterPropGetter = PropGetter }>;\n\nexport type RowPropGetter = PropGetter }>;\n\nexport type CellPropGetter = PropGetter }>;\n\nexport interface ReducerTableState extends TableState, Record {}\n\nexport interface UseTableHooks extends Record {\n useOptions: Array<(options: TableOptions, args: TableOptions) => TableOptions>;\n stateReducers: Array<\n (\n newState: TableState,\n action: ActionType,\n previousState?: TableState,\n instance?: TableInstance,\n ) => ReducerTableState | undefined\n >;\n columns: Array<(columns: Array>, meta: Meta) => Array>>;\n columnsDeps: Array<(deps: any[], meta: Meta) => any[]>;\n allColumns: Array<(allColumns: Array>, meta: Meta) => Array>>;\n allColumnsDeps: Array<(deps: any[], meta: Meta) => any[]>;\n visibleColumns: Array<(allColumns: Array>, meta: Meta) => Array>>;\n visibleColumnsDeps: Array<(deps: any[], meta: Meta) => any[]>;\n headerGroups: Array<(allColumns: Array>, meta: Meta) => Array>>;\n headerGroupsDeps: Array<(deps: any[], meta: Meta) => any[]>;\n useInstanceBeforeDimensions: Array<(instance: TableInstance) => void>;\n useInstance: Array<(instance: TableInstance) => void>;\n prepareRow: Array<(row: Row, meta: Meta) => void>;\n useControlledState: Array<(state: TableState, meta: Meta) => TableState>;\n\n getTableProps: Array>;\n getTableBodyProps: Array>;\n getHeaderGroupProps: Array>;\n getFooterGroupProps: Array>;\n getHeaderProps: Array>;\n getFooterProps: Array>;\n getRowProps: Array>;\n getCellProps: Array>;\n useFinalInstance: Array<(instance: TableInstance) => void>;\n}\n\nexport interface UseTableColumnOptions {\n id?: IdType | undefined;\n Header?: Renderer> | undefined;\n Footer?: Renderer> | undefined;\n width?: number | string | undefined;\n minWidth?: number | undefined;\n maxWidth?: number | undefined;\n}\n\ntype UpdateHiddenColumns = (oldHidden: Array>) => Array>;\n\nexport interface TableToggleHideAllColumnProps extends TableToggleCommonProps {}\n\nexport interface UseTableInstanceProps {\n state: TableState;\n plugins: Array>;\n dispatch: TableDispatch;\n columns: Array>;\n allColumns: Array>;\n visibleColumns: Array>;\n headerGroups: Array>;\n footerGroups: Array>;\n headers: Array>;\n flatHeaders: Array>;\n rows: Array>;\n rowsById: Record>;\n getTableProps: (propGetter?: TablePropGetter) => TableProps;\n getTableBodyProps: (propGetter?: TableBodyPropGetter) => TableBodyProps;\n prepareRow: (row: Row) => void;\n flatRows: Array>;\n totalColumnsWidth: number;\n allColumnsHidden: boolean;\n toggleHideColumn: (columnId: IdType, value?: boolean) => void;\n setHiddenColumns: (param: Array> | UpdateHiddenColumns) => vo", + "42fb091d993517a72a32aae4e8e98271ecbf5ec3:types/react-table/index.d.ts": "// Type definitions for react-table 7.7\n// Project: https://github.com/tannerlinsley/react-table\n// Definitions by: Guy Gascoigne-Piggford ,\n// Rohit Garg \n// Jason Clark \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 3.5\n// reflects react-table@7.7.0\n\n// tslint:disable:no-empty-interface\n// no-empty-interface is disabled to allow easy extension with declaration merging\n\n/* eslint-disable @definitelytyped/no-unnecessary-generics */\n// no-unnecessary-generics is disabled because many of these definitions are either used in a generic\n// context or the signatures are required to match for declaration merging\n\n// The changelog for the important changes is located in the Readme.md\n\nimport {\n ChangeEvent,\n ComponentType,\n CSSProperties,\n DependencyList,\n EffectCallback,\n MouseEvent,\n ReactElement,\n ReactFragment,\n ReactNode,\n} from 'react';\n\nexport {};\n\n/**\n * The empty definitions of below provides a base definition for the parts used by useTable, that can then be extended in the users code.\n *\n * @example\n * export interface TableOptions\n * extends\n * UseExpandedOptions,\n * UseFiltersOptions {}\n * see https://gist.github.com/ggascoigne/646e14c9d54258e40588a13aabf0102d for more details\n */\nexport interface TableOptions extends UseTableOptions {}\n\nexport interface TableInstance\n extends Omit, 'columns' | 'pageCount'>,\n UseTableInstanceProps {}\n\nexport interface TableState {\n hiddenColumns?: Array> | undefined;\n}\n\nexport interface Hooks extends UseTableHooks {}\n\nexport interface Cell extends UseTableCellProps {}\n\nexport interface ColumnInterface extends UseTableColumnOptions {}\n\nexport interface ColumnInterfaceBasedOnValue {\n Cell?: Renderer> | undefined;\n}\n\nexport interface ColumnGroupInterface {\n columns: Array>;\n}\n\nexport type ColumnGroup =\n & ColumnInterface\n & ColumnGroupInterface\n & (\n | { Header: string; }\n | ({ id: IdType; } & {\n Header: Renderer>;\n })\n )\n // Not used, but needed for backwards compatibility\n & { accessor?: Accessor | undefined; };\n\ntype ValueOf = T[keyof T];\n\n// The accessors like `foo.bar` are not supported, use functions instead\nexport type ColumnWithStrictAccessor =\n & ColumnInterface\n & ValueOf<{\n [K in keyof D]: {\n accessor: K;\n } & ColumnInterfaceBasedOnValue;\n }>;\n\nexport type ColumnWithLooseAccessor =\n & ColumnInterface\n & ColumnInterfaceBasedOnValue\n & (\n | { Header: string }\n | { id: IdType }\n | { accessor: keyof D extends never ? IdType : never }\n )\n & { accessor?: (keyof D extends never ? IdType | Accessor : Accessor) | undefined; };\n\nexport type Column =\n | ColumnGroup\n | ColumnWithLooseAccessor\n | ColumnWithStrictAccessor;\n\nexport interface ColumnInstance\n extends Omit, 'id'>,\n ColumnInterfaceBasedOnValue,\n UseTableColumnProps {}\n\nexport interface HeaderGroup extends ColumnInstance, UseTableHeaderGroupProps {}\n\nexport interface Row extends UseTableRowProps {}\n\nexport interface TableCommonProps {\n style?: CSSProperties | undefined;\n className?: string | undefined;\n role?: string | undefined;\n}\n\nexport interface TableProps extends TableCommonProps {}\n\nexport interface TableBodyProps extends TableCommonProps {}\n\nexport interface TableKeyedProps extends TableCommonProps {\n key: React.Key;\n}\n\nexport interface TableHeaderGroupProps extends TableKeyedProps {}\n\nexport interface TableFooterGroupProps extends TableKeyedProps {}\n\nexport interface TableHeaderProps extends TableKeyedProps {}\n\nexport interface TableFooterProps extends TableKeyedProps {}\n\nexport interface TableRowProps extends TableKeyedProps {}\n\nexport interface TableCellProps extends TableKeyedProps {}\n\nexport interface TableToggleCommonProps extends TableCommonProps {\n onChange?: ((e: ChangeEvent) => void) | undefined;\n checked?: boolean | undefined;\n title?: string | undefined;\n indeterminate?: boolean | undefined;\n}\n\nexport interface MetaBase {\n instance: TableInstance;\n userProps: any;\n}\n\n// inspired by ExtendState in https://github.com/reduxjs/redux/blob/master/src/types/store.ts\nexport type Meta> = [Extension] extends [never]\n ? M\n : M & Extension;\n\n//#region useTable\nexport function useTable(\n options: TableOptions,\n ...plugins: Array>\n): TableInstance;\n\n/**\n * NOTE: To use custom options, use \"Interface Merging\" to add the custom options\n */\nexport type UseTableOptions = {\n columns: ReadonlyArray>;\n data: readonly D[];\n} & Partial<{\n initialState: Partial>;\n stateReducer: (newState: TableState, action: ActionType, previousState: TableState, instance?: TableInstance) => TableState;\n useControlledState: (state: TableState, meta: Meta) => TableState;\n defaultColumn: Partial>;\n getSubRows: (originalRow: D, relativeIndex: number) => D[];\n getRowId: (originalRow: D, relativeIndex: number, parent?: Row) => string;\n autoResetHiddenColumns: boolean;\n}>;\n\nexport type PropGetter> =\n | ((props: P, meta: Meta) => P | P[])\n | P\n | P[];\n\nexport type TablePropGetter = PropGetter;\n\nexport type TableBodyPropGetter = PropGetter;\n\nexport type HeaderPropGetter = PropGetter }>;\n\nexport type FooterGroupPropGetter = PropGetter }>;\n\nexport type HeaderGroupPropGetter = PropGetter }>;\n\nexport type FooterPropGetter = PropGetter }>;\n\nexport type RowPropGetter = PropGetter }>;\n\nexport type CellPropGetter = PropGetter }>;\n\nexport interface ReducerTableState extends TableState, Record {}\n\nexport interface UseTableHooks extends Record {\n useOptions: Array<(options: TableOptions, args: TableOptions) => TableOptions>;\n stateReducers: Array<\n (\n newState: TableState,\n action: ActionType,\n previousState?: TableState,\n instance?: TableInstance,\n ) => ReducerTableState | undefined\n >;\n columns: Array<(columns: Array>, meta: Meta) => Array>>;\n columnsDeps: Array<(deps: any[], meta: Meta) => any[]>;\n allColumns: Array<(allColumns: Array>, meta: Meta) => Array>>;\n allColumnsDeps: Array<(deps: any[], meta: Meta) => any[]>;\n visibleColumns: Array<(allColumns: Array>, meta: Meta) => Array>>;\n visibleColumnsDeps: Array<(deps: any[], meta: Meta) => any[]>;\n headerGroups: Array<(allColumns: Array>, meta: Meta) => Array>>;\n headerGroupsDeps: Array<(deps: any[], meta: Meta) => any[]>;\n useInstanceBeforeDimensions: Array<(instance: TableInstance) => void>;\n useInstance: Array<(instance: TableInstance) => void>;\n prepareRow: Array<(row: Row, meta: Meta) => void>;\n useControlledState: Array<(state: TableState, meta: Meta) => TableState>;\n\n getTableProps: Array>;\n getTableBodyProps: Array>;\n getHeaderGroupProps: Array>;\n getFooterGroupProps: Array>;\n getHeaderProps: Array>;\n getFooterProps: Array>;\n getRowProps: Array>;\n getCellProps: Array>;\n useFinalInstance: Array<(instance: TableInstance) => void>;\n}\n\nexport interface UseTableColumnOptions {\n id?: IdType | undefined;\n Header?: Renderer> | undefined;\n Footer?: Renderer> | undefined;\n width?: number | string | undefined;\n minWidth?: number | undefined;\n maxWidth?: number | undefined;\n}\n\ntype UpdateHiddenColumns = (oldHidden: Array>) => Array>;\n\nexport interface TableToggleHideAllColumnProps extends TableToggleCommonProps {}\n\nexport interface UseTableInstanceProps {\n state: TableState;\n plugins: Array>;\n dispatch: TableDispatch;\n columns: Array>;\n allColumns: Array>;\n visibleColumns: Array>;\n headerGroups: Array>;\n footerGroups: Array>;\n headers: Array>;\n flatHeaders: Array>;\n rows: Array>;\n rowsById: Record>;\n getTableProps: (propGetter?: TablePropGetter) => TableProps;\n getTableBodyProps: (propGetter?: TableBodyPropGetter) => TableBodyProps;\n prepareRow: (row: Row) => void;\n flatRows: Array>;\n totalColumnsWidth: number;\n allColumnsHidden: boolean;\n toggleHideColumn: (columnId: IdType, value?: boolean) => void;\n setHiddenColumns: (param: Array> | UpdateHiddenColumns) => vo" +} diff --git a/packages/mergebot/src/_tests/fixtures/66757/_response.json b/packages/mergebot/src/_tests/fixtures/66757/_response.json new file mode 100644 index 0000000000..6aa62d4823 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66757/_response.json @@ -0,0 +1,323 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM5auiRi", + "title": "Improved autocomplete for sortType and filter props", + "createdAt": "2023-09-20T00:56:41Z", + "author": { + "login": "AlonBru", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Revision needed", + "__typename": "Label" + }, + { + "name": "Abandoned", + "__typename": "Label" + }, + { + "name": "New Definition", + "__typename": "Label" + }, + { + "name": "Popular package", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 66757, + "state": "OPEN", + "headRefOid": "42fb091d993517a72a32aae4e8e98271ecbf5ec3", + "changedFiles": 1, + "additions": 2, + "deletions": 2, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "42fb091d993517a72a32aae4e8e98271ecbf5ec3", + "parents": { + "nodes": [ + { + "oid": "53e0cf9afba254ecae4add3ed008bf9972db16f5", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2023-09-20T01:02:38Z", + "projectColumnName": "Needs Maintainer Review", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2023-09-20T17:25:32Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "sheetalkamat", + "__typename": "User" + }, + "commit": { + "oid": "42fb091d993517a72a32aae4e8e98271ecbf5ec3", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "CHANGES_REQUESTED", + "submittedAt": "2023-09-20T17:24:47Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66757#pullrequestreview-1636166525", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 16349206691, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/42fb091d993517a72a32aae4e8e98271ecbf5ec3/checks?check_suite_id=16349206691", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/42fb091d993517a72a32aae4e8e98271ecbf5ec3/checks?check_suite_id=16349206691", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 16349210494, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/42fb091d993517a72a32aae4e8e98271ecbf5ec3/checks?check_suite_id=16349210494", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/42fb091d993517a72a32aae4e8e98271ecbf5ec3/checks?check_suite_id=16349210494", + "checkRuns": { + "nodes": [ + { + "title": "Build #20230920.1 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2023-09-20T00:53:23Z", + "committedDate": "2023-09-20T00:53:23Z", + "pushedDate": null, + "oid": "42fb091d993517a72a32aae4e8e98271ecbf5ec3", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 6, + "nodes": [ + { + "id": "IC_kwDOAFz6BM5m69B0", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1726730356, + "body": "@AlonBru 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 which I will keep updated.***\n\n## 1 package in this PR\n\n* `react-table` (*new!*) — [on npm](https://www.npmjs.com/package/react-table), [on unpkg](https://unpkg.com/browse/react-table@latest/)\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=66757&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 when there are new packages added\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 27 days — it is considered nearly abandoned!\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2023-09-20T00:57:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5m69CP", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1726730383, + "body": "Hey @AlonBru,\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-adding-tests-to-a-new-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": "2023-09-20T00:57:26Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5m69CZ", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1726730393, + "body": "🔔 @ggascoigne @gargroh @riceboyler — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66757/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": "2023-09-20T00:57:27Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5nAYP7", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1728152571, + "body": "@AlonBru One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2023-09-20T17:25:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5nBgY0", + "author": { + "login": "AlonBru", + "__typename": "User" + }, + "databaseId": 1728448052, + "body": "> DefaultFilterTypes\r\n\r\n@sheetalkamat That's the issue I'm fixing.\r\nSince `string` is included in the union, the defaults is not shown in autocomplete:\r\n![image](https://github.com/DefinitelyTyped/DefinitelyTyped/assets/66993391/db8a5f02-aa9e-4ca6-b4fb-36051374bcc2)\r\n\r\nwith my fix it will:\r\n![image](https://github.com/DefinitelyTyped/DefinitelyTyped/assets/66993391/2667d4e9-287e-4c71-ae3a-50091a1019fa)\r\n", + "createdAt": "2023-09-20T21:25:38Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5pDPbL", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1762457291, + "body": "@AlonBru I haven't seen any activity on this PR in more than three weeks, and it still has problems that prevent it from being merged. The PR will be closed on Oct 20th (in a week) if the issues aren't addressed.\n", + "createdAt": "2023-10-14T01:02:27Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 1, + "nodes": [ + { + "path": "types/react-table/index.d.ts", + "additions": 2, + "deletions": 2, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgVmPO4", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/66757/derived.json b/packages/mergebot/src/_tests/fixtures/66757/derived.json new file mode 100644 index 0000000000..7b5f7b7c54 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66757/derived.json @@ -0,0 +1,44 @@ +{ + "type": "info", + "now": "2023-10-18T01:59:43.008Z", + "pr_number": 66757, + "author": "AlonBru", + "headCommitOid": "42fb091d993517a72a32aae4e8e98271ecbf5ec3", + "mergeBaseOid": "53e0cf9afba254ecae4add3ed008bf9972db16f5", + "lastPushDate": "2023-09-20T00:56:41.000Z", + "lastActivityDate": "2023-09-20T21:25:38.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Popular", + "pkgInfo": [ + { + "name": "react-table", + "kind": "edit", + "files": [ + { + "path": "types/react-table/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "ggascoigne", + "gargroh", + "riceboyler" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Popular" + } + ], + "reviews": [ + { + "type": "changereq", + "reviewer": "sheetalkamat", + "date": "2023-09-20T17:24:47.000Z" + } + ], + "mainBotCommentID": 1726730356, + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/66757/mutations.json b/packages/mergebot/src/_tests/fixtures/66757/mutations.json new file mode 100644 index 0000000000..49cf3c9784 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66757/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM5m69B0", + "body": "@AlonBru 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* `react-table` — [on npm](https://www.npmjs.com/package/react-table), [on unpkg](https://unpkg.com/browse/react-table@latest/)\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=66757&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 27 days — it is considered nearly abandoned!\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2NDY3ODg4ODg=" + ], + "labelableId": "PR_kwDOAFz6BM5auiRi" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM5m69CP", + "body": "Hey @AlonBru,\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/66757/result.json b/packages/mergebot/src/_tests/fixtures/66757/result.json new file mode 100644 index 0000000000..a00f26b801 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66757/result.json @@ -0,0 +1,30 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "Revision needed", + "Popular package", + "Untested Change", + "Abandoned" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @AlonBru,\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": "@AlonBru 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* `react-table` — [on npm](https://www.npmjs.com/package/react-table), [on unpkg](https://unpkg.com/browse/react-table@latest/)\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=66757&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 27 days — it is considered nearly abandoned!\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "reviewer-complaint-42fb091", + "status": "@AlonBru One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!" + }, + { + "tag": "Abandoned:nearly:2023-09-20", + "status": "@AlonBru I haven't seen any activity on this PR in more than three weeks, and it still has problems that prevent it from being merged. The PR will be closed on Oct 20th (in a week) if the issues aren't addressed." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/66979/_downloads.json b/packages/mergebot/src/_tests/fixtures/66979/_downloads.json new file mode 100644 index 0000000000..801254ac4e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66979/_downloads.json @@ -0,0 +1,3 @@ +{ + "react-blessed": 267 +} diff --git a/packages/mergebot/src/_tests/fixtures/66979/_files.json b/packages/mergebot/src/_tests/fixtures/66979/_files.json new file mode 100644 index 0000000000..8310f135be --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66979/_files.json @@ -0,0 +1,4 @@ +{ + "7ba7b83f2147403af9578673a88aaa765cae3d76:types/react-blessed/index.d.ts": "// Type definitions for react-blessed 0.7\n// Project: https://github.com/yomguithereal/react-blessed#readme\n// Definitions by: Century Guo \n// Robbie Nichols \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// Minimum TypeScript Version: 4.1\n\nimport * as React from \"react\";\nimport * as Blessed from \"blessed\";\n\nexport {};\n\n/* RENDERER *****************************************************************/\n\nexport type Callback = () => void | null | undefined;\nexport type renderer = (c: JSX.Element, s: Blessed.Widgets.Screen, callback?: Callback) => React.Component | null;\nexport function render(c: JSX.Element, s: Blessed.Widgets.Screen, callback?: Callback): React.Component | null;\n\nexport function createBlessedRenderer(bls: any): renderer;\n\n/* BLESSED ELEMENTS **********************************************************/\n\nexport type Element = Blessed.Widgets.BlessedElement;\nexport type ScrollableBoxElement = Blessed.Widgets.ScrollableBoxElement;\nexport type ScrollableTextElement = Blessed.Widgets.ScrollableTextElement;\nexport type BoxElement = Blessed.Widgets.BoxElement;\nexport type TextElement = Blessed.Widgets.TextElement;\nexport type LineElement = Blessed.Widgets.LineElement;\nexport type BigTextElement = Blessed.Widgets.BigTextElement;\nexport type ListElement = Blessed.Widgets.ListElement;\nexport type FileManagerElement = Blessed.Widgets.FileManagerElement;\nexport type ListTableElement = Blessed.Widgets.ListTableElement;\nexport type ListbarElement = Blessed.Widgets.ListbarElement;\nexport type InputElement = Blessed.Widgets.InputElement;\nexport type TextareaElement = Blessed.Widgets.TextareaElement;\nexport type TextboxElement = Blessed.Widgets.TextboxElement;\nexport type ButtonElement = Blessed.Widgets.ButtonElement;\nexport type CheckboxElement = Blessed.Widgets.CheckboxElement;\nexport type RadioSetElement = Blessed.Widgets.RadioSetElement;\nexport type RadioButtonElement = Blessed.Widgets.RadioButtonElement;\nexport type TableElement = Blessed.Widgets.TableElement;\nexport type PromptElement = Blessed.Widgets.PromptElement;\nexport type QuestionElement = Blessed.Widgets.QuestionElement;\nexport type MessageElement = Blessed.Widgets.MessageElement;\nexport type LoadingElement = Blessed.Widgets.LoadingElement;\nexport type LogElement = Blessed.Widgets.Log;\nexport type ProgressBarElement = Blessed.Widgets.ProgressBarElement;\nexport type TerminalElement = Blessed.Widgets.TerminalElement;\nexport type LayoutElement = Blessed.Widgets.LayoutElement;\n\n/* EVENTS *******************************************************************/\n\ntype Prefix = `${T}${P}`;\n\n// create event handlers that map to 'blessed' events. see\n// https://github.com/Yomguithereal/react-blessed/blob/f5e1f791dea1788745695d557040b91f573f9ef5/src/fiber/events.js\ntype EventHandlerProp void> = {\n [key in `on${Capitalize}`]?: E;\n};\n\n// 'react-blessed' handles 'blessed' events by matching event names to\n// handlers by prefixing event names with with \"on\" and camelCasing the\n// result. this cannot be fully recreated in TS so we must manually map them\n// here.\ntype ScreenElement = \"click\" | \"mouseover\" | \"mouseout\" | \"mouseup\";\ntype ScreenElementPrefix = \"element\";\ntype ExludedScreenEventNames = Prefix>;\ntype CamelCasedScreenEventNames = Prefix>;\n\ntype ScreenEventNames =\n | Exclude\n | CamelCasedScreenEventNames;\n\ntype GenericContentPrefix = \"set\" | \"parsed\";\ntype GenericContent = \"content\";\ntype ExludedGenericEventNames = Prefix>;\ntype CamelCasedGenericEventNames = Prefix>;\n\ntype GenericEventNames =\n | Exclude\n | CamelCasedGenericEventNames;\n\ntype ProgressBarEventNames = Parameters[0];\n\ntype SpreadableArgs = K;\n\ninterface EventHandler {\n (...args: SpreadableArgs): void;\n}\n\n// event args need to be manually typed because Blessed.Widgets.NodeWithEvents\n// overloads the event handlers (making it impossible? to extract the\n// parameters with TS utils) and does not expose the event callbacks as\n// importable types\n\nexport type ScreenEvent = Blessed.Widgets.Screen;\nexport type ScreenEventHandler = EventHandler;\ntype ScreenEventProps = EventHandlerProp;\n\nexport type MouseEvent = Blessed.Widgets.Events.IMouseEventArg;\nexport type MouseEventHandler = EventHandler;\ntype MouseEventProps = EventHandlerProp;\n\nexport type GenericEvent = undefined;\nexport type GenericEventHandler = EventHandler;\ntype GenericEventProps = EventHandlerProp;\n\nexport type KeyPressEvent = [key: any, event: Blessed.Widgets.Events.IKeyEventArg];\nexport type KeyPressEventHandler = EventHandler;\ntype KeyPressEventProps = EventHandlerProp<\"keypress\", KeyPressEventHandler>;\n\nexport type WarningEvent = string;\nexport type WarningEventHandler = EventHandler;\ntype WarningEventProps = EventHandlerProp<\"warning\", WarningEventHandler>;\n\nexport type ProgressBarEvent = undefined;\nexport type ProgressBarEventHandler = EventHandler;\ntype ProgressBarEventProps = EventHandlerProp;\ninterface EventProps\n extends ScreenEventProps,\n GenericEventProps,\n MouseEventProps,\n KeyPressEventProps,\n WarningEventProps {}\n\n/* BLESSED-REACT LOCALLY DEFINED PROPS **************************************/\n\n// @types/blessed defines 'styles' as 'any' but 'blessed' can only can only\n// take certain values. define them here.\n\ninterface BorderStyle {\n type?: \"line\" | \"bg\";\n ch?: string;\n bg?: string;\n fg?: string;\n bold?: boolean;\n underline?: boolean;\n}\ninterface ItemStyle {\n bg?: string;\n fg?: string;\n bold?: boolean;\n underline?: boolean;\n blink?: boolean;\n inverse?: boolean;\n invisible?: boolean;\n}\ninterface ListStyle extends ElementStyle {\n selected?: ItemStyle;\n item?: ItemStyle;\n}\ninterface ProgressBarStyle extends ElementStyle {\n bar?: { bg?: string; fg?: string };\n}\ninterface ElementStyle extends ItemStyle {\n border?: BorderStyle;\n focus?: { bg?: string; fg?: string };\n hover?: { bg?: string; fg?: string };\n transparent?: boolean;\n scrollbar?: { bg?: string; fg?: string; track?: { bg?: string; fg?: string } };\n}\n\n// remove indexers\n// https://stackoverflow.com/questions/51465182/how-to-remove-index-signature-using-mapped-types\ntype KnownKeys = {\n [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];\n};\n\ntype WithClassProp = T & { class?: K | K[] };\ntype ProgressBarProps = T extends ProgressBarElement ? ProgressBarEventProps & { style?: ProgressBarStyle } : {};\ntype ListProps = T extends ListElement ? ProgressBarEventProps & { style?: ListStyle; selected?: number } : {};\n// layout does not require prop 'layout' in Blessed.Widgets.LayoutOptions--make it optional\ntype LayoutProps = T extends LayoutElement ? Partial : {};\n\n// remove {[key: string]: any} indexer defined in Blessed.Widgets.IOptions.\n// 'blessed' doesn't exist in a DOM so it probably doesn't make sense to allow any property\ntype FilterOptions> = Partial, \"style\" | \"children\">>;\n\ntype ModifiedBlessedOptions> = FilterOptions & { children?: React.ReactNode; style?: ElementStyle } & EventProps;\n\n/* REACT-BLESSED JSX ********************************************************/\n\n/**\n *\n * this type can be used to get props for 'react-blessed' elements in the same\n * manner that React.HTMLProps can be used to get DOM element props. e.g.\n * ```ts\n * import { FC } from 'react'\n * import { BlessedProps, BoxElement } from 'react-blessed';\n * type MyBoxProps = BlessedProps;\n * const MyBox: React.FC = props => ;\n * ```\n * @see DetailedBlessedProps\n * @see React.HTMLAttributes\n */\nexport type BlessedAttributes = WithClassProp<\n ModifiedBlessedOptions & ProgressBarProps & ListProps & LayoutProps\n>;\n\n/**\n * mirrors react prop generation for HTML JSX.IntrinsicElements.\n * @see React.DetailedHTMLProps\n */\nexport type DetailedBlessedProps = BlessedAttributes & React.ClassAttributes;\n\nexport interface BlessedIntrinsicElements {\n element: DetailedBlessedProps;\n box: DetailedBlessedProps;\n scrollablebox: DetailedBlessedProps;\n scrollabletext: DetailedBlessedProps;\n bigtext: DetailedBlessedProps;\n list: DetailedBlessedProps;\n filemanager: DetailedBlessedProps;\n listtable: DetailedBlessedProps;\n listbar: DetailedBlessedProps;\n textbox: DetailedBlessedProps;\n checkbox: DetailedBlessedProps;\n radioset: DetailedBlessedProps;\n radiobutton: DetailedBlessedProps;\n prompt: DetailedBlessedProps;\n question: DetailedBlessedProps;\n message: DetailedBlessedProps;\n loading: DetailedBlessedProps;\n log: DetailedBlessedProps;\n progressbar: DetailedBlessedProps;\n terminal: DetailedBlessedProps;\n layout: DetailedBlessedProps;\n // escape: Blessed.escape is not an element\n // program: Blessed.Widgets.Program is not an element\n}\n\n// 'react-blessed' accepts JSX with 'blessed' ", + "f11a1a009614559b5c5db1f68732927f1b8ab5f2:types/react-blessed/index.d.ts": "// Type definitions for react-blessed 0.7\n// Project: https://github.com/yomguithereal/react-blessed#readme\n// Definitions by: Century Guo \n// Robbie Nichols \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// Minimum TypeScript Version: 4.1\n\nimport * as Blessed from \"blessed\";\nimport * as React from \"react\";\n\nexport {};\n\n/* RENDERER *****************************************************************/\n\nexport type Callback = () => void | null | undefined;\nexport type renderer = (c: JSX.Element, s: Blessed.Widgets.Screen, callback?: Callback) => React.Component | null;\nexport function render(c: JSX.Element, s: Blessed.Widgets.Screen, callback?: Callback): React.Component | null;\n\nexport function createBlessedRenderer(bls: any): renderer;\n\n/* BLESSED ELEMENTS **********************************************************/\n\nexport type Element = Blessed.Widgets.BlessedElement;\nexport type ScrollableBoxElement = Blessed.Widgets.ScrollableBoxElement;\nexport type ScrollableTextElement = Blessed.Widgets.ScrollableTextElement;\nexport type BoxElement = Blessed.Widgets.BoxElement;\nexport type TextElement = Blessed.Widgets.TextElement;\nexport type LineElement = Blessed.Widgets.LineElement;\nexport type BigTextElement = Blessed.Widgets.BigTextElement;\nexport type ListElement = Blessed.Widgets.ListElement;\nexport type FileManagerElement = Blessed.Widgets.FileManagerElement;\nexport type ListTableElement = Blessed.Widgets.ListTableElement;\nexport type ListbarElement = Blessed.Widgets.ListbarElement;\nexport type InputElement = Blessed.Widgets.InputElement;\nexport type TextareaElement = Blessed.Widgets.TextareaElement;\nexport type TextboxElement = Blessed.Widgets.TextboxElement;\nexport type ButtonElement = Blessed.Widgets.ButtonElement;\nexport type CheckboxElement = Blessed.Widgets.CheckboxElement;\nexport type RadioSetElement = Blessed.Widgets.RadioSetElement;\nexport type RadioButtonElement = Blessed.Widgets.RadioButtonElement;\nexport type TableElement = Blessed.Widgets.TableElement;\nexport type PromptElement = Blessed.Widgets.PromptElement;\nexport type QuestionElement = Blessed.Widgets.QuestionElement;\nexport type MessageElement = Blessed.Widgets.MessageElement;\nexport type LoadingElement = Blessed.Widgets.LoadingElement;\nexport type LogElement = Blessed.Widgets.Log;\nexport type ProgressBarElement = Blessed.Widgets.ProgressBarElement;\nexport type TerminalElement = Blessed.Widgets.TerminalElement;\nexport type LayoutElement = Blessed.Widgets.LayoutElement;\n\n/* EVENTS *******************************************************************/\n\ntype Prefix = `${T}${P}`;\n\n// create event handlers that map to 'blessed' events. see\n// https://github.com/Yomguithereal/react-blessed/blob/f5e1f791dea1788745695d557040b91f573f9ef5/src/fiber/events.js\ntype EventHandlerProp void> = {\n [key in `on${Capitalize}`]?: E;\n};\n\n// 'react-blessed' handles 'blessed' events by matching event names to\n// handlers by prefixing event names with with \"on\" and camelCasing the\n// result. this cannot be fully recreated in TS so we must manually map them\n// here.\ntype ScreenElement = \"click\" | \"mouseover\" | \"mouseout\" | \"mouseup\";\ntype ScreenElementPrefix = \"element\";\ntype ExludedScreenEventNames = Prefix>;\ntype CamelCasedScreenEventNames = Prefix>;\n\ntype ScreenEventNames =\n | Exclude\n | CamelCasedScreenEventNames;\n\ntype GenericContentPrefix = \"set\" | \"parsed\";\ntype GenericContent = \"content\";\ntype ExludedGenericEventNames = Prefix>;\ntype CamelCasedGenericEventNames = Prefix>;\n\ntype GenericEventNames =\n | Exclude\n | CamelCasedGenericEventNames;\n\ntype ProgressBarEventNames = Parameters[0];\n\ntype SpreadableArgs = K;\n\ninterface EventHandler {\n (...args: SpreadableArgs): void;\n}\n\n// event args need to be manually typed because Blessed.Widgets.NodeWithEvents\n// overloads the event handlers (making it impossible? to extract the\n// parameters with TS utils) and does not expose the event callbacks as\n// importable types\n\nexport type ScreenEvent = Blessed.Widgets.Screen;\nexport type ScreenEventHandler = EventHandler;\ntype ScreenEventProps = EventHandlerProp;\n\nexport type MouseEvent = Blessed.Widgets.Events.IMouseEventArg;\nexport type MouseEventHandler = EventHandler;\ntype MouseEventProps = EventHandlerProp;\n\nexport type GenericEvent = undefined;\nexport type GenericEventHandler = EventHandler;\ntype GenericEventProps = EventHandlerProp;\n\nexport type KeyPressEvent = [key: any, event: Blessed.Widgets.Events.IKeyEventArg];\nexport type KeyPressEventHandler = EventHandler;\ntype KeyPressEventProps = EventHandlerProp<\"keypress\", KeyPressEventHandler>;\n\nexport type WarningEvent = string;\nexport type WarningEventHandler = EventHandler;\ntype WarningEventProps = EventHandlerProp<\"warning\", WarningEventHandler>;\n\nexport type ProgressBarEvent = undefined;\nexport type ProgressBarEventHandler = EventHandler;\ntype ProgressBarEventProps = EventHandlerProp;\ninterface EventProps\n extends ScreenEventProps, GenericEventProps, MouseEventProps, KeyPressEventProps, WarningEventProps\n{}\n\n/* BLESSED-REACT LOCALLY DEFINED PROPS **************************************/\n\n// @types/blessed defines 'styles' as 'any' but 'blessed' can only can only\n// take certain values. define them here.\n\ninterface BorderStyle {\n type?: \"line\" | \"bg\";\n ch?: string;\n bg?: string;\n fg?: string;\n bold?: boolean;\n underline?: boolean;\n}\ninterface ItemStyle {\n bg?: string;\n fg?: string;\n bold?: boolean;\n underline?: boolean;\n blink?: boolean;\n inverse?: boolean;\n invisible?: boolean;\n}\ninterface ListStyle extends ElementStyle {\n selected?: ItemStyle;\n item?: ItemStyle;\n}\ninterface ProgressBarStyle extends ElementStyle {\n bar?: { bg?: string; fg?: string };\n}\ninterface ElementStyle extends ItemStyle {\n border?: BorderStyle;\n focus?: { bg?: string; fg?: string };\n hover?: { bg?: string; fg?: string };\n transparent?: boolean;\n scrollbar?: { bg?: string; fg?: string; track?: { bg?: string; fg?: string } };\n}\n\n// remove indexers\n// https://stackoverflow.com/questions/51465182/how-to-remove-index-signature-using-mapped-types\ntype KnownKeys = {\n [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];\n};\n\ntype WithClassProp = T & { class?: K | K[] };\ntype ProgressBarProps = T extends ProgressBarElement ? ProgressBarEventProps & { style?: ProgressBarStyle } : {};\ntype ListProps = T extends ListElement ? ProgressBarEventProps & { style?: ListStyle; selected?: number } : {};\n// layout does not require prop 'layout' in Blessed.Widgets.LayoutOptions--make it optional\ntype LayoutProps = T extends LayoutElement ? Partial : {};\n\n// remove {[key: string]: any} indexer defined in Blessed.Widgets.IOptions.\n// 'blessed' doesn't exist in a DOM so it probably doesn't make sense to allow any property\ntype FilterOptions> = Partial, \"style\" | \"children\">>;\n\ntype ModifiedBlessedOptions> = FilterOptions & {\n children?: React.ReactNode;\n style?: ElementStyle;\n} & EventProps;\n\n/* REACT-BLESSED JSX ********************************************************/\n\n/**\n * this type can be used to get props for 'react-blessed' elements in the same\n * manner that React.HTMLProps can be used to get DOM element props. e.g.\n * ```ts\n * import { FC } from 'react'\n * import { BlessedProps, BoxElement } from 'react-blessed';\n * type MyBoxProps = BlessedProps;\n * const MyBox: React.FC = props => ;\n * ```\n * @see DetailedBlessedProps\n * @see React.HTMLAttributes\n */\nexport type BlessedAttributes = WithClassProp<\n ModifiedBlessedOptions & ProgressBarProps & ListProps & LayoutProps\n>;\n\n/**\n * mirrors react prop generation for HTML JSX.IntrinsicElements.\n * @see React.DetailedHTMLProps\n */\nexport type DetailedBlessedProps = BlessedAttributes & React.ClassAttributes;\n\nexport interface BlessedIntrinsicElements {\n element: DetailedBlessedProps;\n box: DetailedBlessedProps;\n scrollablebox: DetailedBlessedProps;\n scrollabletext: DetailedBlessedProps;\n bigtext: DetailedBlessedProps;\n list: DetailedBlessedProps;\n filemanager: DetailedBlessedProps;\n listtable: DetailedBlessedProps;\n listbar: DetailedBlessedProps;\n textbox: DetailedBlessedProps;\n checkbox: DetailedBlessedProps;\n radioset: DetailedBlessedProps;\n radiobutton: DetailedBlessedProps;\n prompt: DetailedBlessedProps;\n question: DetailedBlessedProps;\n message: DetailedBlessedProps;\n loading: DetailedBlessedProps;\n log: DetailedBlessedProps;\n progressbar: DetailedBlessedProps;\n terminal: DetailedBlessedProps;\n layout: DetailedBlessedProps;\n // escape: Blessed.escape is not an element\n // program: Blessed.Widgets.Program is not an element\n}\n\n// 'react-blessed' accepts JSX with 'blessed' element names with and wit" +} diff --git a/packages/mergebot/src/_tests/fixtures/66979/_response.json b/packages/mergebot/src/_tests/fixtures/66979/_response.json new file mode 100644 index 0000000000..7599d19859 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66979/_response.json @@ -0,0 +1,355 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM5cNx3Z", + "title": "[react-blessed] enable formatting", + "createdAt": "2023-10-09T03:21:23Z", + "author": { + "login": "jakebailey", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Has Merge Conflict", + "__typename": "Label" + }, + { + "name": "New Definition", + "__typename": "Label" + }, + { + "name": "Edits Infrastructure", + "__typename": "Label" + }, + { + "name": "The CI failed", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "CONFLICTING", + "number": 66979, + "state": "OPEN", + "headRefOid": "f11a1a009614559b5c5db1f68732927f1b8ab5f2", + "changedFiles": 3, + "additions": 60, + "deletions": 56, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "a2f47f97c2d3b1b7db74b425ed199fed14d9e4d7", + "parents": { + "nodes": [ + { + "oid": "8c8acf49f96c8a23e8f0d6212e3a76c84ff2d4d3", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "f11a1a009614559b5c5db1f68732927f1b8ab5f2", + "parents": { + "nodes": [ + { + "oid": "a2f47f97c2d3b1b7db74b425ed199fed14d9e4d7", + "__typename": "Commit" + }, + { + "oid": "7ba7b83f2147403af9578673a88aaa765cae3d76", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2023-10-09T03:27:19Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2023-10-09T16:29:30Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2023-10-09T16:34:22Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 17038815705, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/f11a1a009614559b5c5db1f68732927f1b8ab5f2/checks?check_suite_id=17038815705", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f11a1a009614559b5c5db1f68732927f1b8ab5f2/checks?check_suite_id=17038815705", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 17038820083, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/f11a1a009614559b5c5db1f68732927f1b8ab5f2/checks?check_suite_id=17038820083", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f11a1a009614559b5c5db1f68732927f1b8ab5f2/checks?check_suite_id=17038820083", + "checkRuns": { + "nodes": [ + { + "title": "Build #20231009.61 failed", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2023-10-09T16:28:45Z", + "committedDate": "2023-10-09T16:28:45Z", + "pushedDate": null, + "oid": "f11a1a009614559b5c5db1f68732927f1b8ab5f2", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 7, + "nodes": [ + { + "id": "IC_kwDOAFz6BM5oceKz", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1752294067, + "body": "@jakebailey Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and infra files)\n\n* `react-blessed` (*new!*) — [on npm](https://www.npmjs.com/package/react-blessed), [on unpkg](https://unpkg.com/browse/react-blessed@latest/)\n* Infra files\n - [`.dprint.jsonc`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66979/files/f11a1a009614559b5c5db1f68732927f1b8ab5f2#diff-4b0a264a7578f955622f1573a2e9eefec4f81e5e03481b841691b4811855ec8b)\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=66979&install-plugin=playground-dt-review).\n\n## Status\n\n * ❌ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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 8 days.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2023-10-09T03:22:03Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5oceLJ", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1752294089, + "body": "🔔 @guoshencheng @defnotrobbie — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66979/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": "2023-10-09T03:22:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5oce6k", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1752297124, + "body": "@jakebailey The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/a2f47f97c2d3b1b7db74b425ed199fed14d9e4d7/checks?check_suite_id=17015347214).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds which are failing do not end up on the list of PRs for the DT maintainers to review.**\n", + "createdAt": "2023-10-09T03:27:20Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5oc99X", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1752424279, + "body": "@jakebailey Unfortunately, this pull request currently has a merge conflict 😥. Please update your PR branch to be up-to-date with respect to master. Have a nice day!\n", + "createdAt": "2023-10-09T06:42:17Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5ogaVg", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1753326944, + "body": "@jakebailey The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f11a1a009614559b5c5db1f68732927f1b8ab5f2/checks?check_suite_id=17038815705).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds which are failing do not end up on the list of PRs for the DT maintainers to review.**\n", + "createdAt": "2023-10-09T16:34:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5oqvl8", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1756035452, + "body": "@jakebailey Unfortunately, this pull request currently has a merge conflict 😥. Please update your PR branch to be up-to-date with respect to master. Have a nice day!\n", + "createdAt": "2023-10-10T18:46:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5pWO3V", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1767435733, + "body": "🔔 @jakebailey — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66979/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2023-10-18T01:06:34Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 3, + "nodes": [ + { + "path": ".dprint.jsonc", + "additions": 1, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react-blessed/index.d.ts", + "additions": 54, + "deletions": 49, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/react-blessed/react-blessed-tests.tsx", + "additions": 5, + "deletions": 5, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "Mw", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgVpHw4", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/66979/derived.json b/packages/mergebot/src/_tests/fixtures/66979/derived.json new file mode 100644 index 0000000000..83f31b91bf --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66979/derived.json @@ -0,0 +1,57 @@ +{ + "type": "info", + "now": "2023-10-18T01:58:05.634Z", + "pr_number": 66979, + "author": "jakebailey", + "headCommitOid": "f11a1a009614559b5c5db1f68732927f1b8ab5f2", + "mergeBaseOid": "7ba7b83f2147403af9578673a88aaa765cae3d76", + "lastPushDate": "2023-10-09T03:21:23.000Z", + "lastActivityDate": "2023-10-09T03:21:23.000Z", + "hasMergeConflict": true, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": null, + "kind": "edit", + "files": [ + { + "path": ".dprint.jsonc", + "kind": "infrastructure" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical", + "isSafeInfrastructureEdit": false + }, + { + "name": "react-blessed", + "kind": "edit", + "files": [ + { + "path": "types/react-blessed/index.d.ts", + "kind": "definition" + }, + { + "path": "types/react-blessed/react-blessed-tests.tsx", + "kind": "test" + } + ], + "owners": [ + "guoshencheng", + "defnotrobbie" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "mainBotCommentID": 1752294067, + "ciResult": "fail", + "ciUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f11a1a009614559b5c5db1f68732927f1b8ab5f2/checks?check_suite_id=17038815705" +} diff --git a/packages/mergebot/src/_tests/fixtures/66979/mutations.json b/packages/mergebot/src/_tests/fixtures/66979/mutations.json new file mode 100644 index 0000000000..4412168eb6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66979/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM5oceKz", + "body": "@jakebailey Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and infra files)\n\n* `react-blessed` — [on npm](https://www.npmjs.com/package/react-blessed), [on unpkg](https://unpkg.com/browse/react-blessed@latest/)\n* Infra files\n - [`.dprint.jsonc`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66979/files/f11a1a009614559b5c5db1f68732927f1b8ab5f2#diff-4b0a264a7578f955622f1573a2e9eefec4f81e5e03481b841691b4811855ec8b)\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=66979&install-plugin=playground-dt-review).\n\n## Status\n\n * ❌ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 A DT maintainer needs to approve changes that affect DT infrastructure ([`.dprint.jsonc`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66979/files/f11a1a009614559b5c5db1f68732927f1b8ab5f2#diff-4b0a264a7578f955622f1573a2e9eefec4f81e5e03481b841691b4811855ec8b))\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 8 days.\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw2NDY3ODg4ODg=" + ], + "labelableId": "PR_kwDOAFz6BM5cNx3Z" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM5ogaVg", + "body": "@jakebailey The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f11a1a009614559b5c5db1f68732927f1b8ab5f2/checks?check_suite_id=17038815705).\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/66979/result.json b/packages/mergebot/src/_tests/fixtures/66979/result.json new file mode 100644 index 0000000000..d267108581 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/66979/result.json @@ -0,0 +1,29 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "Has Merge Conflict", + "The CI failed", + "Edits Infrastructure" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@jakebailey Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 1 package in this PR (and infra files)\n\n* `react-blessed` — [on npm](https://www.npmjs.com/package/react-blessed), [on unpkg](https://unpkg.com/browse/react-blessed@latest/)\n* Infra files\n - [`.dprint.jsonc`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66979/files/f11a1a009614559b5c5db1f68732927f1b8ab5f2#diff-4b0a264a7578f955622f1573a2e9eefec4f81e5e03481b841691b4811855ec8b)\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=66979&install-plugin=playground-dt-review).\n\n## Status\n\n * ❌ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 A DT maintainer needs to approve changes that affect DT infrastructure ([`.dprint.jsonc`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66979/files/f11a1a009614559b5c5db1f68732927f1b8ab5f2#diff-4b0a264a7578f955622f1573a2e9eefec4f81e5e03481b841691b4811855ec8b))\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 8 days.\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @guoshencheng @defnotrobbie — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66979/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." + }, + { + "tag": "merge-complaint-f11a1a0", + "status": "@jakebailey Unfortunately, this pull request currently has a merge conflict 😥. Please update your PR branch to be up-to-date with respect to master. Have a nice day!" + }, + { + "tag": "gh-actions-complaint-f11a1a0", + "status": "@jakebailey The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f11a1a009614559b5c5db1f68732927f1b8ab5f2/checks?check_suite_id=17038815705).\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.**" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/67090/_downloads.json b/packages/mergebot/src/_tests/fixtures/67090/_downloads.json new file mode 100644 index 0000000000..1c83c08a22 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/67090/_downloads.json @@ -0,0 +1,5 @@ +{ + "ansicolors": 9236, + "cardinal": 0, + "marked-terminal": 58490 +} diff --git a/packages/mergebot/src/_tests/fixtures/67090/_files.json b/packages/mergebot/src/_tests/fixtures/67090/_files.json new file mode 100644 index 0000000000..0a5b6153a9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/67090/_files.json @@ -0,0 +1,12 @@ +{ + "bb7d42f514b9f9cfca6b9a84dc99fac76ac35643:types/cardinal/package.json": "{\n \"name\": \"@types/cardinal\",\n \"version\": \"2.1.9999\",\n \"projects\": [\n \"https://github.com/thlorenz/cardinal\"\n ],\n \"contributors\": [\n {\n \"name\": \"Andrew Branch\",\n \"githubUsername\": \"andrewbranch\"\n }\n ],\n \"devDependencies\": {\n \"@types/ansicolors\": \"^0\",\n \"@types/marked-terminal\": \"workspace:.\"\n }\n}\n", + "bb7d42f514b9f9cfca6b9a84dc99fac76ac35643:types/cardinal/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictFunctionTypes\": true,\n \"strictNullChecks\": true,\n \"baseUrl\": \"../\",\n \"typeRoots\": [\n \"../\"\n ],\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"cardinal-tests.ts\"\n ]\n}\n", + "bb7d42f514b9f9cfca6b9a84dc99fac76ac35643:types/cardinal/tslint.json": "{ \"extends\": \"@definitelytyped/dtslint/dt.json\" }\n", + "bb7d42f514b9f9cfca6b9a84dc99fac76ac35643:types/marked-terminal/package.json": "{\n \"private\": true,\n \"name\": \"@types/marked-terminal\",\n \"version\": \"6.0.9999\",\n \"projects\": [\n \"https://github.com/mikaelbr/marked-terminal\"\n ],\n \"typeScriptVersion\": \"5.3\",\n \"type\": \"module\",\n \"exports\": {\n \"node\": {\n \"import\": \"./index.d.ts\",\n \"require\": \"./index.d.cts\"\n },\n \"default\": \"./index.d.ts\"\n },\n \"dependencies\": {\n \"@types/cardinal\": \"^2.1\",\n \"@types/node\": \"*\",\n \"chalk\": \"^5.3.0\",\n \"marked\": \">=6.0.0 <10\"\n },\n \"devDependencies\": {\n \"@types/marked-terminal\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Bryan Kendall\",\n \"githubUsername\": \"bkendall\"\n }\n ]\n}\n", + "5512d90cdf92cfca25b73ab4e0b9a5c1591ec57a:types/marked-terminal/package.json": "{\n \"private\": true,\n \"name\": \"@types/marked-terminal\",\n \"version\": \"3.1.9999\",\n \"projects\": [\n \"https://github.com/mikaelbr/marked-terminal\"\n ],\n \"dependencies\": {\n \"chalk\": \"^2.4.1\",\n \"marked\": \"^6.0.0\"\n },\n \"devDependencies\": {\n \"@types/marked-terminal\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Bryan Kendall\",\n \"githubUsername\": \"bkendall\"\n }\n ]\n}\n", + "bb7d42f514b9f9cfca6b9a84dc99fac76ac35643:types/marked-terminal/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"node16\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"target\": \"es6\",\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"marked-terminal-tests.ts\"\n ]\n}\n", + "5512d90cdf92cfca25b73ab4e0b9a5c1591ec57a:types/marked-terminal/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\n \"es6\",\n \"dom\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"target\": \"es6\",\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"marked-terminal-tests.ts\"\n ]\n}\n", + "5512d90cdf92cfca25b73ab4e0b9a5c1591ec57a:types/ansicolors/package.json": "{\n \"private\": true,\n \"name\": \"@types/ansicolors\",\n \"version\": \"0.0.9999\",\n \"projects\": [\n \"https://github.com/thlorenz/ansicolors\"\n ],\n \"devDependencies\": {\n \"@types/ansicolors\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Benjamin Arthur Lupton\",\n \"githubUsername\": \"balupton\"\n }\n ]\n}\n", + "bb7d42f514b9f9cfca6b9a84dc99fac76ac35643:types/ansicolors/package.json": "{\n \"private\": true,\n \"name\": \"@types/ansicolors\",\n \"version\": \"0.0.9999\",\n \"projects\": [\n \"https://github.com/thlorenz/ansicolors\"\n ],\n \"devDependencies\": {\n \"@types/ansicolors\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Benjamin Arthur Lupton\",\n \"githubUsername\": \"balupton\"\n }\n ]\n}\n", + "bb7d42f514b9f9cfca6b9a84dc99fac76ac35643:types/cardinal/index.d.ts": "// Type definitions for cardinal 2.1\n// Project: https://github.com/thlorenz/cardinal#readme\n// Definitions by: Andrew Branch \n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\nimport highlight = require(\"./lib/highlight\");\nimport highlightFile = require(\"./lib/highlightFile\");\nimport highlightFileSync = require(\"./lib/highlightFileSync\");\n\ntype CardinalThemeColorizer = (\n value: string,\n info: { tokens: readonly { type: string; value: string }[]; tokenIndex: number },\n) => string;\n\ntype CardinalThemeTokenRule = {\n [key: string]: CardinalThemeColorizer | undefined;\n _default?: CardinalThemeColorizer | undefined;\n};\n\nexport type CardinalTheme = Record & {\n _default?: CardinalThemeColorizer | undefined;\n};\n\nexport interface CardinalOptions {\n /** used to optionally override the theme used to highlight */\n theme?: CardinalTheme | undefined;\n /** if `true` line numbers are included in the highlighted code */\n linenos?: boolean | undefined;\n /** sets line number of the first line when line numbers are printed */\n firstline?: number | undefined;\n /**\n * if true JSX syntax is supported, otherwise cardinal will raise an error when encountering JSX\n * @default false\n */\n jsx?: boolean | undefined;\n}\n\nexport { highlight, highlightFile, highlightFileSync };\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/67090/_response.json b/packages/mergebot/src/_tests/fixtures/67090/_response.json new file mode 100644 index 0000000000..df2b347adf --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/67090/_response.json @@ -0,0 +1,435 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM5dEgcV", + "title": "[marked-terminal, cardinal, ansicolors] Update marked-terminal and add/fix everything it touches", + "createdAt": "2023-10-17T22:45:17Z", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "New Definition", + "__typename": "Label" + }, + { + "name": "Edits multiple packages", + "__typename": "Label" + }, + { + "name": "The CI failed", + "__typename": "Label" + }, + { + "name": "Check Config", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 67090, + "state": "OPEN", + "headRefOid": "bb7d42f514b9f9cfca6b9a84dc99fac76ac35643", + "changedFiles": 20, + "additions": 294, + "deletions": 56, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "36833296d0461e544e7a1f1a82736f07025b219a", + "parents": { + "nodes": [ + { + "oid": "5512d90cdf92cfca25b73ab4e0b9a5c1591ec57a", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "bb7d42f514b9f9cfca6b9a84dc99fac76ac35643", + "parents": { + "nodes": [ + { + "oid": "36833296d0461e544e7a1f1a82736f07025b219a", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2023-10-17T22:56:33Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "36833296d0461e544e7a1f1a82736f07025b219a", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2023-10-17T22:46:00Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2023-10-17T22:47:43Z", + "__typename": "PullRequestReviewComment" + }, + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "createdAt": "2023-10-17T22:48:36Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2023-10-17T22:48:39Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/67090#pullrequestreview-1683590299", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 2, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 17339283595, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/bb7d42f514b9f9cfca6b9a84dc99fac76ac35643/checks?check_suite_id=17339283595", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/bb7d42f514b9f9cfca6b9a84dc99fac76ac35643/checks?check_suite_id=17339283595", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 17339286705, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/bb7d42f514b9f9cfca6b9a84dc99fac76ac35643/checks?check_suite_id=17339286705", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/bb7d42f514b9f9cfca6b9a84dc99fac76ac35643/checks?check_suite_id=17339286705", + "checkRuns": { + "nodes": [ + { + "title": "Build #20231017.45 failed", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2023-10-17T22:46:23Z", + "committedDate": "2023-10-17T22:46:23Z", + "pushedDate": null, + "oid": "bb7d42f514b9f9cfca6b9a84dc99fac76ac35643", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 4, + "nodes": [ + { + "id": "IC_kwDOAFz6BM5pVwbO", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1767311054, + "body": "@andrewbranch Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 3 packages in this PR\n\n* `ansicolors` — [on npm](https://www.npmjs.com/package/ansicolors), [on unpkg](https://unpkg.com/browse/ansicolors@latest/)\n* `cardinal` (*new!*) — [on npm](https://www.npmjs.com/package/cardinal), [on unpkg](https://unpkg.com/browse/cardinal@latest/)\n* `marked-terminal` — [on npm](https://www.npmjs.com/package/marked-terminal), [on unpkg](https://unpkg.com/browse/marked-terminal@latest/)\n - Config files to check:\n - [`marked-terminal/index.d.cts`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/67090/files/bb7d42f514b9f9cfca6b9a84dc99fac76ac35643#diff-5e4cfea677a3d26cff8f1c90abf32caa2f3c310beee12f6f84364821c728aef6): edited\n - [`marked-terminal/marked-terminal-tests.cts`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/67090/files/bb7d42f514b9f9cfca6b9a84dc99fac76ac35643#diff-c57707862a9de137333983d3c0ee294d8a046f4f23a7e2557f7c4f4c77529dd7): edited\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=67090&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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": "2023-10-17T22:46:03Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5pVwbv", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1767311087, + "body": "🔔 @balupton @bkendall — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/67090/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": "2023-10-17T22:46:05Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5pVyrF", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1767320261, + "body": "@andrewbranch The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/bb7d42f514b9f9cfca6b9a84dc99fac76ac35643/checks?check_suite_id=17339283595).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds which are failing do not end up on the list of PRs for the DT maintainers to review.**\n", + "createdAt": "2023-10-17T22:56:34Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5pWX-t", + "author": { + "login": "balupton", + "__typename": "User" + }, + "databaseId": 1767473069, + "body": "Why was I assigned this?", + "createdAt": "2023-10-18T01:41:39Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 20, + "nodes": [ + { + "path": "types/ansicolors/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/cardinal/cardinal-tests.ts", + "additions": 68, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/cardinal/index.d.ts", + "additions": 38, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/cardinal/lib/highlight.d.ts", + "additions": 4, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/cardinal/lib/highlightFile.d.ts", + "additions": 9, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/cardinal/lib/highlightFileSync.d.ts", + "additions": 4, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/cardinal/package.json", + "additions": 17, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/cardinal/themes/default.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/cardinal/themes/empty.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/cardinal/themes/hide-semicolons.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/cardinal/themes/jq.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/cardinal/themes/tomorrow-night.d.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/cardinal/tsconfig.json", + "additions": 23, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/cardinal/tslint.json", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/marked-terminal/index.d.cts", + "additions": 61, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/marked-terminal/index.d.ts", + "additions": 9, + "deletions": 48, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/marked-terminal/marked-terminal-tests.cts", + "additions": 26, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/marked-terminal/marked-terminal-tests.ts", + "additions": 2, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/marked-terminal/package.json", + "additions": 14, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/marked-terminal/tsconfig.json", + "additions": 2, + "deletions": 3, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MjA", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgVqd_4", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/67090/derived.json b/packages/mergebot/src/_tests/fixtures/67090/derived.json new file mode 100644 index 0000000000..e5763369f6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/67090/derived.json @@ -0,0 +1,138 @@ +{ + "type": "info", + "now": "2023-10-18T02:31:54.531Z", + "pr_number": 67090, + "author": "andrewbranch", + "headCommitOid": "bb7d42f514b9f9cfca6b9a84dc99fac76ac35643", + "mergeBaseOid": "5512d90cdf92cfca25b73ab4e0b9a5c1591ec57a", + "lastPushDate": "2023-10-17T22:45:17.000Z", + "lastActivityDate": "2023-10-18T01:41:39.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "ansicolors", + "kind": "edit", + "files": [ + { + "path": "types/ansicolors/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "balupton" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + }, + { + "name": "cardinal", + "kind": "add", + "files": [ + { + "path": "types/cardinal/cardinal-tests.ts", + "kind": "test" + }, + { + "path": "types/cardinal/index.d.ts", + "kind": "definition" + }, + { + "path": "types/cardinal/lib/highlight.d.ts", + "kind": "definition" + }, + { + "path": "types/cardinal/lib/highlightFile.d.ts", + "kind": "definition" + }, + { + "path": "types/cardinal/lib/highlightFileSync.d.ts", + "kind": "definition" + }, + { + "path": "types/cardinal/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/cardinal/themes/default.d.ts", + "kind": "definition" + }, + { + "path": "types/cardinal/themes/empty.d.ts", + "kind": "definition" + }, + { + "path": "types/cardinal/themes/hide-semicolons.d.ts", + "kind": "definition" + }, + { + "path": "types/cardinal/themes/jq.d.ts", + "kind": "definition" + }, + { + "path": "types/cardinal/themes/tomorrow-night.d.ts", + "kind": "definition" + }, + { + "path": "types/cardinal/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/cardinal/tslint.json", + "kind": "package-meta", + "suspect": "edited" + } + ], + "owners": [], + "addedOwners": [ + "andrewbranch" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + }, + { + "name": "marked-terminal", + "kind": "edit", + "files": [ + { + "path": "types/marked-terminal/index.d.cts", + "kind": "definition" + }, + { + "path": "types/marked-terminal/index.d.ts", + "kind": "definition" + }, + { + "path": "types/marked-terminal/marked-terminal-tests.cts", + "kind": "test" + }, + { + "path": "types/marked-terminal/marked-terminal-tests.ts", + "kind": "test" + }, + { + "path": "types/marked-terminal/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/marked-terminal/tsconfig.json", + "kind": "package-meta-ok" + } + ], + "owners": [ + "bkendall" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "mainBotCommentID": 1767311054, + "ciResult": "fail", + "ciUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/bb7d42f514b9f9cfca6b9a84dc99fac76ac35643/checks?check_suite_id=17339283595" +} diff --git a/packages/mergebot/src/_tests/fixtures/67090/mutations.json b/packages/mergebot/src/_tests/fixtures/67090/mutations.json new file mode 100644 index 0000000000..d234e397b3 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/67090/mutations.json @@ -0,0 +1,20 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM5pVwbO", + "body": "@andrewbranch 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* `ansicolors` — [on npm](https://www.npmjs.com/package/ansicolors), [on unpkg](https://unpkg.com/browse/ansicolors@latest/)\n* `cardinal` (*new!*) — [on npm](https://www.npmjs.com/package/cardinal), [on unpkg](https://unpkg.com/browse/cardinal@latest/)\n - 1 added owner: ✎@andrewbranch\n - Config files to check:\n - [`cardinal/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/67090/files/bb7d42f514b9f9cfca6b9a84dc99fac76ac35643#diff-9f471f9ba6ffa73024ae9aeb049dd98078364c565db83ee831e0498cbb678d67): edited\n* `marked-terminal` — [on npm](https://www.npmjs.com/package/marked-terminal), [on unpkg](https://unpkg.com/browse/marked-terminal@latest/)\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=67090&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM5pVyrF", + "body": "@andrewbranch The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/bb7d42f514b9f9cfca6b9a84dc99fac76ac35643/checks?check_suite_id=17339283595).\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" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/67090/result.json b/packages/mergebot/src/_tests/fixtures/67090/result.json new file mode 100644 index 0000000000..e99da39dc5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/67090/result.json @@ -0,0 +1,26 @@ +{ + "projectColumn": "Needs Author Action", + "labels": [ + "The CI failed", + "New Definition", + "Edits multiple packages", + "Check Config" + ], + "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## 3 packages in this PR\n\n* `ansicolors` — [on npm](https://www.npmjs.com/package/ansicolors), [on unpkg](https://unpkg.com/browse/ansicolors@latest/)\n* `cardinal` (*new!*) — [on npm](https://www.npmjs.com/package/cardinal), [on unpkg](https://unpkg.com/browse/cardinal@latest/)\n - 1 added owner: ✎@andrewbranch\n - Config files to check:\n - [`cardinal/tslint.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/67090/files/bb7d42f514b9f9cfca6b9a84dc99fac76ac35643#diff-9f471f9ba6ffa73024ae9aeb049dd98078364c565db83ee831e0498cbb678d67): edited\n* `marked-terminal` — [on npm](https://www.npmjs.com/package/marked-terminal), [on unpkg](https://unpkg.com/browse/marked-terminal@latest/)\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=67090&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes when there are new packages added\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", + "status": "🔔 @balupton @bkendall — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/67090/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." + }, + { + "tag": "gh-actions-complaint-bb7d42f", + "status": "@andrewbranch The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/bb7d42f514b9f9cfca6b9a84dc99fac76ac35643/checks?check_suite_id=17339283595).\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.**" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/68381/_downloads.json b/packages/mergebot/src/_tests/fixtures/68381/_downloads.json new file mode 100644 index 0000000000..697d44a7ca --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68381/_downloads.json @@ -0,0 +1,3 @@ +{ + "express-serve-static-core": 72913989 +} diff --git a/packages/mergebot/src/_tests/fixtures/68381/_files.json b/packages/mergebot/src/_tests/fixtures/68381/_files.json new file mode 100644 index 0000000000..f60849dd28 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68381/_files.json @@ -0,0 +1,4 @@ +{ + "f58f90046075bcc38a262e1462fb06b8a22ab886:types/express-serve-static-core/package.json": "{\n \"private\": true,\n \"name\": \"@types/express-serve-static-core\",\n \"version\": \"4.17.9999\",\n \"projects\": [\n \"http://expressjs.com\"\n ],\n \"dependencies\": {\n \"@types/node\": \"*\",\n \"@types/qs\": \"*\",\n \"@types/range-parser\": \"*\",\n \"@types/send\": \"*\"\n },\n \"devDependencies\": {\n \"@types/express-serve-static-core\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Boris Yankov\",\n \"githubUsername\": \"borisyankov\"\n },\n {\n \"name\": \"Satana Charuwichitratana\",\n \"githubUsername\": \"micksatana\"\n },\n {\n \"name\": \"Sami Jaber\",\n \"githubUsername\": \"samijaber\"\n },\n {\n \"name\": \"Jose Luis Leon\",\n \"githubUsername\": \"JoseLion\"\n },\n {\n \"name\": \"David Stephens\",\n \"githubUsername\": \"dwrss\"\n },\n {\n \"name\": \"Shin Ando\",\n \"githubUsername\": \"andoshin11\"\n }\n ]\n}\n", + "61d76e05e8dfcd20fef3ba19b9b571e2420c8485:types/express-serve-static-core/package.json": "{\n \"private\": true,\n \"name\": \"@types/express-serve-static-core\",\n \"version\": \"4.17.9999\",\n \"projects\": [\n \"http://expressjs.com\"\n ],\n \"dependencies\": {\n \"@types/node\": \"*\",\n \"@types/qs\": \"*\",\n \"@types/range-parser\": \"*\",\n \"@types/send\": \"*\"\n },\n \"devDependencies\": {\n \"@types/express-serve-static-core\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Boris Yankov\",\n \"githubUsername\": \"borisyankov\"\n },\n {\n \"name\": \"Satana Charuwichitratana\",\n \"githubUsername\": \"micksatana\"\n },\n {\n \"name\": \"Sami Jaber\",\n \"githubUsername\": \"samijaber\"\n },\n {\n \"name\": \"Jose Luis Leon\",\n \"githubUsername\": \"JoseLion\"\n },\n {\n \"name\": \"David Stephens\",\n \"githubUsername\": \"dwrss\"\n },\n {\n \"name\": \"Shin Ando\",\n \"githubUsername\": \"andoshin11\"\n }\n ]\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/68381/_response.json b/packages/mergebot/src/_tests/fixtures/68381/_response.json new file mode 100644 index 0000000000..a4bd7c3ef2 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68381/_response.json @@ -0,0 +1,347 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM5lb7_c", + "title": "[@types/express-serve-static-core] Fix `Request.accepts()` example", + "createdAt": "2024-01-30T11:15:06Z", + "author": { + "login": "krzysdz", + "__typename": "User" + }, + "authorAssociation": "FIRST_TIME_CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Critical package", + "__typename": "Label" + }, + { + "name": "The CI failed", + "__typename": "Label" + }, + { + "name": "Untested Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 68381, + "state": "OPEN", + "headRefOid": "61d76e05e8dfcd20fef3ba19b9b571e2420c8485", + "changedFiles": 1, + "additions": 1, + "deletions": 1, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "61d76e05e8dfcd20fef3ba19b9b571e2420c8485", + "parents": { + "nodes": [ + { + "oid": "f58f90046075bcc38a262e1462fb06b8a22ab886", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2024-01-30T11:36:02Z", + "projectColumnName": "Needs Author Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "createdAt": "2024-01-31T08:53:20Z", + "__typename": "ReopenedEvent" + }, + { + "createdAt": "2024-01-31T09:19:27Z", + "__typename": "ReopenedEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 20258158562, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "FAILURE", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/61d76e05e8dfcd20fef3ba19b9b571e2420c8485/checks?check_suite_id=20258158562", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/61d76e05e8dfcd20fef3ba19b9b571e2420c8485/checks?check_suite_id=20258158562", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-01-30T11:15:11Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 20258162835, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/61d76e05e8dfcd20fef3ba19b9b571e2420c8485/checks?check_suite_id=20258162835", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/61d76e05e8dfcd20fef3ba19b9b571e2420c8485/checks?check_suite_id=20258162835", + "checkRuns": { + "nodes": [ + { + "title": "Build #20240131.21 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-01-30T11:15:18Z", + "workflowRun": null, + "__typename": "CheckSuite" + }, + { + "databaseId": 20293722453, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "CANCELLED", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/61d76e05e8dfcd20fef3ba19b9b571e2420c8485/checks?check_suite_id=20293722453", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/61d76e05e8dfcd20fef3ba19b9b571e2420c8485/checks?check_suite_id=20293722453", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-01-31T08:53:25Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 20294561212, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/61d76e05e8dfcd20fef3ba19b9b571e2420c8485/checks?check_suite_id=20294561212", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/61d76e05e8dfcd20fef3ba19b9b571e2420c8485/checks?check_suite_id=20294561212", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-01-31T09:19:32Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2024-01-30T11:04:59Z", + "committedDate": "2024-01-30T11:04:59Z", + "pushedDate": null, + "oid": "61d76e05e8dfcd20fef3ba19b9b571e2420c8485", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 5, + "nodes": [ + { + "id": "IC_kwDOAFz6BM5yPU4k", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1916620324, + "body": "@krzysdz 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 which I will keep updated.***\n\n## 1 package in this PR\n\n* `express-serve-static-core` — [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest/)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68381&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\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----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2024-01-30T11:15:44Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5yPU5a", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1916620378, + "body": "Hey @krzysdz,\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-01-30T11:15:47Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5yPU5n", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1916620391, + "body": "🔔 @borisyankov @micksatana @samijaber @JoseLion @dwrss @andoshin11 — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68381/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-01-30T11:15:47Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5yPc8T", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1916653331, + "body": "@krzysdz The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/61d76e05e8dfcd20fef3ba19b9b571e2420c8485/checks?check_suite_id=20258158562).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds which are failing do not end up on the list of PRs for the DT maintainers to review.**\n", + "createdAt": "2024-01-30T11:36:03Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5yPgDJ", + "author": { + "login": "krzysdz", + "__typename": "User" + }, + "databaseId": 1916666057, + "body": "It looks like the tests fail due to issues with `cassandra-store` (no tests) and `connect-mongodb-session` (`\"exclude\"` in tsconfig).", + "createdAt": "2024-01-30T11:44:30Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 1, + "nodes": [ + { + "path": "types/express-serve-static-core/index.d.ts", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgV3bGY", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0", + "name": "Needs Author Action", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/68381/derived.json b/packages/mergebot/src/_tests/fixtures/68381/derived.json new file mode 100644 index 0000000000..136e011bfb --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68381/derived.json @@ -0,0 +1,41 @@ +{ + "type": "info", + "now": "2024-01-31T18:33:57.058Z", + "pr_number": 68381, + "author": "krzysdz", + "headCommitOid": "61d76e05e8dfcd20fef3ba19b9b571e2420c8485", + "mergeBaseOid": "f58f90046075bcc38a262e1462fb06b8a22ab886", + "lastPushDate": "2024-01-30T11:15:06.000Z", + "lastActivityDate": "2024-01-31T09:19:27.000Z", + "hasMergeConflict": false, + "isFirstContribution": true, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "express-serve-static-core", + "kind": "edit", + "files": [ + { + "path": "types/express-serve-static-core/index.d.ts", + "kind": "definition" + } + ], + "owners": [ + "borisyankov", + "micksatana", + "samijaber", + "JoseLion", + "dwrss", + "andoshin11" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [], + "mainBotCommentID": 1916620324, + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/68381/mutations.json b/packages/mergebot/src/_tests/fixtures/68381/mutations.json new file mode 100644 index 0000000000..2ca1ce343f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68381/mutations.json @@ -0,0 +1,31 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM5yPU4k", + "body": "@krzysdz 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* `express-serve-static-core` — [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest/)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68381&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----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMDk2NzQzNjAw" + ], + "labelableId": "PR_kwDOAFz6BM5lb7_c" + } + } + }, + { + "mutation": "mutation ($input: MoveProjectCardInput!) {\n moveProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "cardId": "PRC_lALOAFz6BM4AORWwzgV3bGY", + "columnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/68381/result.json b/packages/mergebot/src/_tests/fixtures/68381/result.json new file mode 100644 index 0000000000..8ce31d057b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68381/result.json @@ -0,0 +1,24 @@ +{ + "projectColumn": "Needs Maintainer Review", + "labels": [ + "Critical package", + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @krzysdz,\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": "@krzysdz 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* `express-serve-static-core` — [on npm](https://www.npmjs.com/package/express-serve-static-core), [on unpkg](https://unpkg.com/browse/express-serve-static-core@latest/)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68381&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----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @borisyankov @micksatana @samijaber @JoseLion @dwrss @andoshin11 — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68381/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/68386/_downloads.json b/packages/mergebot/src/_tests/fixtures/68386/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68386/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/68386/_files.json b/packages/mergebot/src/_tests/fixtures/68386/_files.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68386/_files.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/68386/_response.json b/packages/mergebot/src/_tests/fixtures/68386/_response.json new file mode 100644 index 0000000000..edd884ffb9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68386/_response.json @@ -0,0 +1,582 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM5leipL", + "title": "Shard testing, do more on GitHub Actions", + "createdAt": "2024-01-30T16:57:13Z", + "author": { + "login": "jakebailey", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Edits Infrastructure", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "UNKNOWN", + "number": 68386, + "state": "MERGED", + "headRefOid": "d4919566e903eadf1e815389f7821d28aa4f187d", + "changedFiles": 5, + "additions": 129, + "deletions": 34, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "be1dba2d980a481ddb2d031d60931dfc09acbfa1", + "parents": { + "nodes": [ + { + "oid": "dfd0ded2deebd54f343fadbc69c9a665ceb97f51", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "94fe71d80eea487f627b2129f816d942cbff315b", + "parents": { + "nodes": [ + { + "oid": "be1dba2d980a481ddb2d031d60931dfc09acbfa1", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "70ae657427e1fbe2fc04b4f8107e1e0a869906a9", + "parents": { + "nodes": [ + { + "oid": "94fe71d80eea487f627b2129f816d942cbff315b", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "c3efb667ac683d98e1fec482b98e96a877c02d95", + "parents": { + "nodes": [ + { + "oid": "70ae657427e1fbe2fc04b4f8107e1e0a869906a9", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "26454f3e73781b25e4e664d162a2d82bc667623a", + "parents": { + "nodes": [ + { + "oid": "c3efb667ac683d98e1fec482b98e96a877c02d95", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "e7946848428fa74bcbf6bcd1f583432f2508783b", + "parents": { + "nodes": [ + { + "oid": "26454f3e73781b25e4e664d162a2d82bc667623a", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "b02dc08cc47ee10837b3549d0419536d3fe64350", + "parents": { + "nodes": [ + { + "oid": "e7946848428fa74bcbf6bcd1f583432f2508783b", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "240cca31fbdc32f349695ed39f348735169423c2", + "parents": { + "nodes": [ + { + "oid": "b02dc08cc47ee10837b3549d0419536d3fe64350", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "e41d4e3046a8fa401cdfbd45af57a0dabb1bfedd", + "parents": { + "nodes": [ + { + "oid": "240cca31fbdc32f349695ed39f348735169423c2", + "__typename": "Commit" + }, + { + "oid": "124c5f37d0e894d6fd10f832ffc4dd426a2c0fa5", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "26c65f399f697383aa06d6177882e64a8e04db4f", + "parents": { + "nodes": [ + { + "oid": "e41d4e3046a8fa401cdfbd45af57a0dabb1bfedd", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "737ec18cdaca099c601a756099d19030eef6d6b5", + "parents": { + "nodes": [ + { + "oid": "26c65f399f697383aa06d6177882e64a8e04db4f", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "267be5d9f25c562eb94ed95d4aa334a2fa4bc152", + "parents": { + "nodes": [ + { + "oid": "737ec18cdaca099c601a756099d19030eef6d6b5", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "d4919566e903eadf1e815389f7821d28aa4f187d", + "parents": { + "nodes": [ + { + "oid": "267be5d9f25c562eb94ed95d4aa334a2fa4bc152", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [ + { + "createdAt": "2024-01-30T23:25:59Z", + "__typename": "ReadyForReviewEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2024-01-30T23:26:36Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2024-01-30T23:27:14Z", + "projectColumnName": "Needs Maintainer Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2024-01-30T23:50:18Z", + "projectColumnName": "Waiting for Author to Merge", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2024-01-31T02:08:12Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2024-01-31T02:08:45Z", + "projectColumnName": "Needs Maintainer Action", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2024-01-31T02:10:29Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2024-01-31T02:13:36Z", + "projectColumnName": "Needs Maintainer Action", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "commit": { + "oid": "737ec18cdaca099c601a756099d19030eef6d6b5", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2024-01-30T23:49:40Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68386#pullrequestreview-1852623458", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jakebailey", + "__typename": "User" + }, + "commit": { + "oid": "737ec18cdaca099c601a756099d19030eef6d6b5", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jakebailey", + "__typename": "User" + }, + "createdAt": "2024-01-31T02:07:26Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2024-01-31T02:07:26Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68386#pullrequestreview-1852771263", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 13, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 20285722744, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/d4919566e903eadf1e815389f7821d28aa4f187d/checks?check_suite_id=20285722744", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/d4919566e903eadf1e815389f7821d28aa4f187d/checks?check_suite_id=20285722744", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-01-31T02:09:59Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 20285722762, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/d4919566e903eadf1e815389f7821d28aa4f187d/checks?check_suite_id=20285722762", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/d4919566e903eadf1e815389f7821d28aa4f187d/checks?check_suite_id=20285722762", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-01-31T02:09:59Z", + "workflowRun": { + "file": { + "path": ".github/workflows/lint-md.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 20285725182, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/d4919566e903eadf1e815389f7821d28aa4f187d/checks?check_suite_id=20285725182", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/d4919566e903eadf1e815389f7821d28aa4f187d/checks?check_suite_id=20285725182", + "checkRuns": { + "nodes": [ + { + "title": "Build #20240131.3 succeeded", + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-01-31T02:10:06Z", + "workflowRun": null, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2024-01-31T02:09:52Z", + "committedDate": "2024-01-31T02:09:52Z", + "pushedDate": null, + "oid": "d4919566e903eadf1e815389f7821d28aa4f187d", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "IC_kwDOAFz6BM5yU6X-", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1918084606, + "body": "@jakebailey Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 0 packages in this PR (and infra files)\n\n* Infra files\n - [`.github/workflows/CI.yml`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68386/files/d4919566e903eadf1e815389f7821d28aa4f187d#diff-3ab46ee209a127470fce3c2cf106b1a1dbadbb929a4b5b13656a4bc4ce19c0b8)\n - [`README.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68386/files/d4919566e903eadf1e815389f7821d28aa4f187d#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5)\n - [`azure-pipelines.yml`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68386/files/d4919566e903eadf1e815389f7821d28aa4f187d#diff-7915b9b726a397ae7ba6af7b9703633d21c031ebf21682f3ee7e6a4ec52837a5)\n - [`scripts/get-ci-matrix.js`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68386/files/d4919566e903eadf1e815389f7821d28aa4f187d#diff-829d6508703c9562da407aebc38f95e778eb5f54859a324c9f843e7b09c58245)\n - [`scripts/get-suggestions-dir.js`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68386/files/d4919566e903eadf1e815389f7821d28aa4f187d#diff-8e98772fd2932ca1b735b10a275e8277a82b49e8685f927d6cb4a86b342f2e45)\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68386&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 which affect DT infrastructure ([`.github/workflows/CI.yml`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68386/files/d4919566e903eadf1e815389f7821d28aa4f187d#diff-3ab46ee209a127470fce3c2cf106b1a1dbadbb929a4b5b13656a4bc4ce19c0b8), [`README.md`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68386/files/d4919566e903eadf1e815389f7821d28aa4f187d#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5), [`azure-pipelines.yml`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68386/files/d4919566e903eadf1e815389f7821d28aa4f187d#diff-7915b9b726a397ae7ba6af7b9703633d21c031ebf21682f3ee7e6a4ec52837a5), [`scripts/get-ci-matrix.js`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68386/files/d4919566e903eadf1e815389f7821d28aa4f187d#diff-829d6508703c9562da407aebc38f95e778eb5f54859a324c9f843e7b09c58245), [`scripts/get-suggestions-dir.js`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68386/files/d4919566e903eadf1e815389f7821d28aa4f187d#diff-8e98772fd2932ca1b735b10a275e8277a82b49e8685f927d6cb4a86b342f2e45))\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-01-30T23:26:35Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5yU6Ym", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1918084646, + "body": "🔔 @jakebailey — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68386/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2024-01-30T23:26:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM5yVgCv", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1918238895, + "body": "@andrewbranch Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2024-01-31T02:08:46Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 5, + "nodes": [ + { + "path": ".github/workflows/CI.yml", + "additions": 99, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "README.md", + "additions": 4, + "deletions": 2, + "__typename": "PullRequestChangedFile" + }, + { + "path": "azure-pipelines.yml", + "additions": 2, + "deletions": 29, + "__typename": "PullRequestChangedFile" + }, + { + "path": "scripts/get-ci-matrix.js", + "additions": 21, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "scripts/get-suggestions-dir.js", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "NQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/68386/derived.json b/packages/mergebot/src/_tests/fixtures/68386/derived.json new file mode 100644 index 0000000000..a0832c1a93 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68386/derived.json @@ -0,0 +1,6 @@ +{ + "type": "remove", + "now": "2024-01-31T18:34:02.737Z", + "message": "PR is not active", + "isDraft": false +} diff --git a/packages/mergebot/src/_tests/fixtures/68386/mutations.json b/packages/mergebot/src/_tests/fixtures/68386/mutations.json new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68386/mutations.json @@ -0,0 +1 @@ +[] diff --git a/packages/mergebot/src/_tests/fixtures/68386/result.json b/packages/mergebot/src/_tests/fixtures/68386/result.json new file mode 100644 index 0000000000..25a0649e05 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68386/result.json @@ -0,0 +1,8 @@ +{ + "labels": [], + "responseComments": [], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": false, + "projectColumn": "*REMOVE*" +} diff --git a/packages/mergebot/src/_tests/fixtures/68510/_downloads.json b/packages/mergebot/src/_tests/fixtures/68510/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68510/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/68510/_files.json b/packages/mergebot/src/_tests/fixtures/68510/_files.json new file mode 100644 index 0000000000..c50e89e8d4 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68510/_files.json @@ -0,0 +1,4 @@ +{ + "073ae8d3a0b71b12ba6bb5b7a1d883d8611d98cb:attw.json": "{\n \"ignoreRules\": [\n \"no-resolution\",\n \"cjs-only-exports-default\",\n \"unexpected-module-syntax\"\n ],\n \"failingPackages\": [\n \"3box\",\n \"absolute-url\",\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-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 \"ali-oss\",\n \"alipayjssdk\",\n \"allure-js-commons\",\n \"alpinejs__anchor\",\n \"alpinejs__collapse\",\n \"alpinejs__focus\",\n \"alpinejs__intersect\",\n \"alpinejs__mask\",\n \"alpinejs__morph\",\n \"alpinejs__persist\",\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-animate\",\n \"angular-aria\",\n \"angular-bootstrap-calendar\",\n \"angular-dialog-service\",\n \"angular-gridster\",\n \"angular-httpi\",\n \"angular-idle\",\n \"angular-material\",\n \"angular-meteor\",\n \"angular-notifications\",\n \"angular-notify\",\n \"angular-odata-resources\",\n \"angular-q-spread\",\n \"angular-resource\",\n \"angular-route\",\n \"angular-scenario\",\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 \"apollo-upload-client\",\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 \"artillery\",\n \"assertsharp\",\n \"async-polling\",\n \"async-retry\",\n \"atlaskit__layer\",\n \"atmosphere.js\",\n \"atom\",\n \"atpl\",\n \"atvlegacycontentkit\",\n \"auth0.widget\",\n \"awesome-notifications\",\n \"aws-cloudfront-function\",\n \"aws-lambda\",\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 \"balanced-match\",\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 \"boom/v3\",\n \"boom/v4\",\n \"bootstrap-colorpicker\",\n \"bootstrap-datepicker\",\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 \"bounce.js\",\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 \"catbox/v7\",\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 \"chrome-webstore-upload\",\n \"chromecast-caf-receiver\",\n \"chromecast-caf-sender\",\n \"chui\",\n \"cldr\",\n \"clearbladejs-client\",\n \"clearbladejs-node\",\n \"clearbladejs-server\",\n \"clmtrackr\",\n \"closure-compiler\",\n \"cloudflare-apps\",\n \"cloudflare-turnstile\",\n \"cloudfour__simple-svg-placeholder\",\n \"cloudinary-uploadwidget-browser\",\n \"clownface\",\n \"cls-hooked\",\n \"cobe\",\n \"code\",\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 \"configstore\",\n \"connect-flash\",\n \"consolidate\",\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 \"core-js\",\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 \"cryptiles\",\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 \"csurf\",\n \"culori\",\n \"curtainsjs\",\n \"custom-functions-runtime\",\n \"cybozulabs-md5\",\n \"cyclonedx\",\n \"cypress-cucumber-preprocessor\",\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 \"debug\",\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 \"diff\",\n \"digital-goods-browser\",\n \"doccookies\",\n \"dock-spawn\",\n \"documentdb-server\",\n \"documentdb-session\",\n \"documentdb\",\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 \"dwt\",\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 \"ebongarde-root\",\n \"editorjs__header\",\n \"egg.js\",\n \"ej.web.all\",\n \"ejs-locals\",\n \"elasticsearch\",\n \"email-prompt\",\n \"email-templates\",\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 \"error-subclass\",\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 \"eth-sig-util\",\n \"evaporate\",\n \"event-to-promise\",\n \"express-async-wrap\",\n \"express-brute-memcached\",\n \"express-pino-logger\",\n \"express-serve-static-core\",\n \"express-simple-locale\",\n \"express-socket.io-session\",\n \"express-status-monitor\",\n \"express-wechat-access\",\n \"extensible-duck\",\n \"extjs\",\n \"extract-files\",\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 \"fbt\",\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-static\",\n \"ffmpeg\",\n \"fhir\",\n \"fibjs\",\n \"figma\",\n \"filemaker-webviewer\",\n \"filesystem\",\n \"filewriter\",\n \"final-form-set-field-data\",\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 \"formidable/v1\",\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 \"gestalt-datepicker\",\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 \"glue\",\n \"glue/v4\",\n \"go\",\n \"golang-wasm-exec\",\n \"google__maps\",\n \"google-ads-scripts\",\n \"google-adwords-scripts\",\n \"google-apps-script-oauth2\",\n \"google-closure-compiler\",\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 \"graphql-upload\",\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-angular-templatecache\",\n \"gulp-changed\",\n \"gulp-cheerio\",\n \"gulp-coffeeify\",\n \"gulp-dtsm\",\n \"gulp-espower\",\n \"gulp-help-doc\",\n \"gulp-imagemin\",\n \"gulp-jasmine-browser\",\n \"gulp-load-plugins\",\n \"gulp-minify-css\",\n \"gulp-mocha\",\n \"gulp-ng-annotate\",\n \"gulp-remember\",\n \"gulp-sourcemaps\",\n \"gulp-task-listing\",\n \"gun\",\n \"h2o2\",\n \"hafas-client\",\n \"hapi__catbox-memory\",\n \"hapi__catbox\",\n \"hapi__shot\",\n \"hapi\",\n \"hapi/v12\",\n \"hapi/v15\",\n \"hapi/v16\",\n \"hapi/v17\",\n \"hapi/v8\",\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 \"hexo-bunyan\",\n \"highlightjs\",\n \"hl7\",\n \"hmscore__react-native-hms-push\",\n \"hoek\",\n \"hookrouter\",\n \"html-escaper\",\n \"html-minifier-terser\",\n \"html-to-draftjs\",\n \"html-to-text\",\n \"html-webpack-plugin\",\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 \"iltorb\",\n \"image-blob-reduce\",\n \"imagemagick\",\n \"imagemapster\",\n \"imagemin-svgo\",\n \"imagemin-upng\",\n \"imagemin-webp\",\n \"imagemin\",\n \"imgur-rest-api\",\n \"inboxsdk\",\n \"inert/v4\",\n \"ineum\",\n \"inherits\",\n \"iniparser\",\n \"input-moment\",\n \"inputmask\",\n \"inquirer-autocomplete-prompt\",\n \"inquirer\",\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 \"is\",\n \"iscroll/v4\",\n \"isomorphic-fetch\",\n \"istanbul-middleware\",\n \"itemsjs\",\n \"itowns\",\n \"ix.js\",\n \"jackrabbit\",\n \"jade\",\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 \"jpm\",\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 \"jqueryui\",\n \"js-clipper\",\n \"js-schema\",\n \"js-url\",\n \"js-worker-search\",\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 \"json2csv\",\n \"jsoneditor-for-react\",\n \"jsoneditor\",\n \"jsoneditoronline\",\n \"jsonpath-plus\",\n \"jsonstream\",\n \"jsqrcode\",\n \"jstorage\",\n \"jsum\",\n \"justifiedgallery\",\n \"jwplayer\",\n \"jxon\",\n \"k6\",\n \"kahoot.js-updated\",\n \"kakao-js-sdk\",\n \"kakao-pixel\",\n \"kakaomaps\",\n \"kamailio-kemi\",\n \"kap-plugin\",\n \"katex\",\n \"keccak\",\n \"keen-tracking\",\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-router\",\n \"koa-sslify\",\n \"koa\",\n \"kolite\",\n \"konami.js\",\n \"kos-core\",\n \"kss\",\n \"kythe\",\n \"lab\",\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 \"leaflet.pm\",\n \"leapmotionts\",\n \"ledgerhq__hw-transport-u2f\",\n \"lestate\",\n \"level-sublevel\",\n \"leveldown\",\n \"lightpick\",\n \"line-reader\",\n \"lint-staged\",\n \"lls\",\n \"loadable__webpack-plugin\",\n \"localizejs-library\",\n \"locutus\",\n \"lodash-es\",\n \"logg\",\n \"login-with-amazon-sdk-browser\",\n \"loopback-boot\",\n \"lowlight\",\n \"ltx\",\n \"luxon\",\n \"macaca-circular-json\",\n \"magic-number\",\n \"magicmirror-module\",\n \"maildev\",\n \"mapbox__mapbox-sdk\",\n \"mapbox__s3urls\",\n \"mapbox\",\n \"mapboxgl-spiderifier\",\n \"mapsjs\",\n \"markdown-it-lazy-headers\",\n \"markdown-it-source-map\",\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 \"mimos\",\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 \"mongoose-sequence\",\n \"motor-hat\",\n \"mpv-script\",\n \"ms.macro\",\n \"msgpack\",\n \"mu2\",\n \"mudder\",\n \"multer\",\n \"multiavatar__multiavatar\",\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 \"nes\",\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-replicate\",\n \"node-sass-middleware\",\n \"node-timecodes\",\n \"node-uuid\",\n \"node-xmpp-client\",\n \"nodegit\",\n \"nodemailer/v3\",\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 \"npmcli__ci-detect\",\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-provider\",\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 \"openlayers/v3\",\n \"openrct2\",\n \"openssi-websdk\",\n \"opentok\",\n \"openui5\",\n \"openurl\",\n \"optimist\",\n \"oracledb/v3\",\n \"osmtogeojson\",\n \"ovenplayer\",\n \"paddle-js-browser\",\n \"page-flip\",\n \"pagedjs-cli\",\n \"pako\",\n \"paralleljs\",\n \"parcel-env\",\n \"parse-listing\",\n \"parse-torrent-file\",\n \"parse/v1\",\n \"passport-discord\",\n \"passport-github2\",\n \"passport-saml\",\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 \"phantom\",\n \"phoenix\",\n \"phonegap-facebook-plugin\",\n \"phonegap-nfc\",\n \"phonegap-plugin-barcodescanner\",\n \"phonegap\",\n \"photoshop\",\n \"pi-spi\",\n \"pino-multi-stream\",\n \"pinterest-sdk\",\n \"piwik-tracker\",\n \"places\",\n \"plaid-link\",\n \"playerframework\",\n \"playmusic\",\n \"plupload\",\n \"plv8-internal\",\n \"podium\",\n \"polylabel\",\n \"polyline\",\n \"polymer\",\n \"poool-access\",\n \"popcorn\",\n \"postcss-functions\",\n \"postcss-js\",\n \"postcss-use\",\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 \"quill\",\n \"qunit/v1\",\n \"rabbit.js\",\n \"radium\",\n \"radius\",\n \"ramda\",\n \"random-string\",\n \"rangy\",\n \"raphael\",\n \"rappid\",\n \"rasa-webchat\",\n \"raty\",\n \"raven\",\n \"raygun4js\",\n \"rbac-a\",\n \"rbush\",\n \"rc-switch\",\n \"rc-tooltip\",\n \"rdf-ext\",\n \"rdf-transform-triple-to-quad\",\n \"rdf-utils-dataset\",\n \"rdfjs__data-model\",\n \"rdfjs__dataset\",\n \"rdfjs__environment\",\n \"rdfjs__express-handler\",\n \"rdfjs__fetch-lite\",\n \"rdfjs__fetch\",\n \"rdfjs__formats-common\",\n \"rdfjs__formats\",\n \"rdfjs__namespace\",\n \"rdfjs__parser-jsonld\",\n \"rdfjs__parser-n3\",\n \"rdfjs__prefix-map\",\n \"rdfjs__score\",\n \"rdfjs__serializer-jsonld-ext\",\n \"rdfjs__serializer-jsonld\",\n \"rdfjs__serializer-ntriples\",\n \"rdfjs__serializer-rdfjs\",\n \"rdfjs__serializer-turtle\",\n \"rdfjs__sink-map\",\n \"rdfjs__term-map\",\n \"rdfjs__term-set\",\n \"rdfjs__traverser\",\n \"react-add-to-calendar\",\n \"react-amplitude\",\n \"react-anchor-link-smooth-scroll\",\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-command-palette\",\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-fa\",\n \"react-facebook-login-component\",\n \"react-facebook-login\",\n \"react-flags-select\",\n \"react-geosuggest\",\n \"react-github-button\",\n \"react-google-maps-loader\",\n \"react-google-places-suggest\",\n \"react-gtm-module\",\n \"react-highcharts\",\n \"react-highlight-words\",\n \"react-highlight.js\",\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-inspector\",\n \"react-instantsearch-dom\",\n \"react-instantsearch-native\",\n \"react-instantsearch\",\n \"react-js-table-with-csv-dl\",\n \"react-jsonschema-form\",\n \"react-key-handler\",\n \"react-leaflet-markercluster\",\n \"react-leaflet-markercluster/v2\",\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-dotenv\",\n \"react-native-google-signin\",\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-responsive\",\n \"react-router-navigation-core\",\n \"react-router-navigation\",\n \"react-router-redux\",\n \"react-rte\",\n \"react-s-alert\",\n \"react-scrollspy\",\n \"react-show-more\",\n \"react-sidebar\",\n \"react-signature-canvas\",\n \"react-sortable-tree-theme-file-explorer\",\n \"react-sortable-tree\",\n \"react-spinner\",\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-twitter-auth\",\n \"react-type-animation\",\n \"react-typical\",\n \"react-typing-effect\",\n \"react-typist\",\n \"react-user-tour\",\n \"react-widgets-moment\",\n \"react-window-size\",\n \"react-world-flags\",\n \"react-youtube-embed\",\n \"read-package-tree\",\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 \"request-promise\",\n \"request\",\n \"require-hacker\",\n \"resize-observer-browser\",\n \"resolve\",\n \"rest\",\n \"restful.js\",\n \"restify-plugins\",\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-json\",\n \"rollup-plugin-node-globals\",\n \"rollup-plugin-progress\",\n \"rollup-plugin-svelte-svg\",\n \"rollup-plugin-url\",\n \"rosbag\",\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 \"sane\",\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 \"semantic-release\",\n \"sencha_touch\",\n \"sequelize\",\n \"sequelize/v3\",\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 \"shot/v3\",\n \"siema\",\n \"sigmajs\",\n \"signalfx-collect\",\n \"signalr/v1\",\n \"simpl-schema\",\n \"simple-cw-node\",\n \"simple-oauth2/v1\",\n \"simple-oauth2/v2\",\n \"simple-react-lightbox\",\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 \"standard-version\",\n \"steam\",\n \"stream-meter\",\n \"stream-series\",\n \"stream-to-array/v0\",\n \"string-similarity/v1\",\n \"stringify-object\",\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 \"supertest-as-promised\",\n \"svg-arc-to-cubic-bezier\",\n \"svg-baker-runtime\",\n \"svg-injector\",\n \"svg-maps__common\",\n \"svgdom\",\n \"svgjs.draggable\",\n \"svgjs.resize\",\n \"swagger-express-middleware\",\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 \"tadashi__koa-jwt-authz\",\n \"tampermonkey\",\n \"tap\",\n \"tape\",\n \"tasker-js-runner\",\n \"taskkill\",\n \"tdweb\",\n \"tea-merge\",\n \"teechart\",\n \"telegram-web-app\",\n \"tern\",\n \"tether-shepherd\",\n \"text-encoding\",\n \"three\",\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-markdown\",\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 \"uglify-es\",\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 \"update-notifier\",\n \"url-format-lax\",\n \"url-join/v0\",\n \"url-parse-lax\",\n \"url-regex-safe\",\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 \"uuid/v2\",\n \"uuid/v3\",\n \"uws\",\n \"valdr-message\",\n \"valerie-browser\",\n \"vanillajs-datepicker\",\n \"vast-client\",\n \"vast-client/v2\",\n \"venn\",\n \"verovio\",\n \"vertx3-eventbus-client\",\n \"video.js\",\n \"videojs-contrib-quality-levels\",\n \"viewporter\",\n \"vimeo\",\n \"vinyl-paths\",\n \"vis\",\n \"vision\",\n \"vision/v4\",\n \"vk-openapi\",\n \"vmap\",\n \"vortex-web-client\",\n \"vscode-notebook-renderer\",\n \"vscode-webview\",\n \"vscode\",\n \"vue-chartkick\",\n \"vue-datetime\",\n \"vue-json-compare\",\n \"vue-ls\",\n \"vue-markdown\",\n \"vue-scroll-up\",\n \"vue-select\",\n \"vue-splitpane\",\n \"vue-tel-input\",\n \"vue2-datepicker\",\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 \"webrtc\",\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 \"why-did-you-update\",\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__custom-templated-path-webpack-plugin\",\n \"wordpress__customize-browser\",\n \"wordpress__library-export-default-webpack-plugin\",\n \"wordwrapjs\",\n \"workerb-api\",\n \"workgrid-core\",\n \"workgrid-toolbar\",\n \"wrap-ansi\",\n \"wreck\",\n \"wreck/v7\",\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 \"xmldom\",\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 \"yawn-yaml\",\n \"ydn-db\",\n \"yelp-fusion-plus\",\n \"youtube-dl\",\n \"youtube-player\",\n \"youtube\",\n \"zchat-browser\",\n \"zedit__upf\",\n \"zeit__next-typescript\",\n \"zengin-code\",\n \"zip.js\",\n \"zmq\",\n \"zumly\",\n \"zwjsbridge\",\n \"zwlog-browser\"\n ]\n}\n", + "9b8dcf375c4aec95878058c610f8279c22527fa0:attw.json": "{\n \"ignoreRules\": [\n \"no-resolution\",\n \"cjs-only-exports-default\",\n \"unexpected-module-syntax\"\n ],\n \"failingPackages\": [\n \"3box\",\n \"absolute-url\",\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 \"ali-oss\",\n \"alipayjssdk\",\n \"allure-js-commons\",\n \"alpinejs__anchor\",\n \"alpinejs__collapse\",\n \"alpinejs__focus\",\n \"alpinejs__intersect\",\n \"alpinejs__mask\",\n \"alpinejs__morph\",\n \"alpinejs__persist\",\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-animate\",\n \"angular-aria\",\n \"angular-bootstrap-calendar\",\n \"angular-dialog-service\",\n \"angular-gridster\",\n \"angular-httpi\",\n \"angular-idle\",\n \"angular-material\",\n \"angular-meteor\",\n \"angular-notifications\",\n \"angular-notify\",\n \"angular-odata-resources\",\n \"angular-q-spread\",\n \"angular-resource\",\n \"angular-route\",\n \"angular-scenario\",\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 \"apollo-upload-client\",\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 \"artillery\",\n \"assertsharp\",\n \"async-polling\",\n \"async-retry\",\n \"atlaskit__layer\",\n \"atmosphere.js\",\n \"atom\",\n \"atpl\",\n \"atvlegacycontentkit\",\n \"auth0.widget\",\n \"awesome-notifications\",\n \"aws-cloudfront-function\",\n \"aws-lambda\",\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 \"balanced-match\",\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 \"boom/v3\",\n \"boom/v4\",\n \"bootstrap-colorpicker\",\n \"bootstrap-datepicker\",\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 \"bounce.js\",\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 \"catbox/v7\",\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 \"chrome-webstore-upload\",\n \"chromecast-caf-receiver\",\n \"chromecast-caf-sender\",\n \"chui\",\n \"cldr\",\n \"clearbladejs-client\",\n \"clearbladejs-node\",\n \"clearbladejs-server\",\n \"clmtrackr\",\n \"closure-compiler\",\n \"cloudflare-apps\",\n \"cloudflare-turnstile\",\n \"cloudfour__simple-svg-placeholder\",\n \"cloudinary-uploadwidget-browser\",\n \"clownface\",\n \"cls-hooked\",\n \"cobe\",\n \"code\",\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 \"configstore\",\n \"connect-flash\",\n \"consolidate\",\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 \"core-js\",\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 \"cryptiles\",\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 \"csurf\",\n \"culori\",\n \"curtainsjs\",\n \"custom-functions-runtime\",\n \"cybozulabs-md5\",\n \"cyclonedx\",\n \"cypress-cucumber-preprocessor\",\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 \"debug\",\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 \"diff\",\n \"digital-goods-browser\",\n \"doccookies\",\n \"dock-spawn\",\n \"documentdb-server\",\n \"documentdb-session\",\n \"documentdb\",\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 \"dwt\",\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 \"ebongarde-root\",\n \"editorjs__header\",\n \"egg.js\",\n \"ej.web.all\",\n \"ejs-locals\",\n \"elasticsearch\",\n \"email-prompt\",\n \"email-templates\",\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 \"error-subclass\",\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 \"eth-sig-util\",\n \"evaporate\",\n \"event-to-promise\",\n \"express-async-wrap\",\n \"express-brute-memcached\",\n \"express-pino-logger\",\n \"express-serve-static-core\",\n \"express-simple-locale\",\n \"express-socket.io-session\",\n \"express-status-monitor\",\n \"express-wechat-access\",\n \"extensible-duck\",\n \"extjs\",\n \"extract-files\",\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 \"fbt\",\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-static\",\n \"ffmpeg\",\n \"fhir\",\n \"fibjs\",\n \"figma\",\n \"filemaker-webviewer\",\n \"filesystem\",\n \"filewriter\",\n \"final-form-set-field-data\",\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 \"formidable/v1\",\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 \"gestalt-datepicker\",\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 \"glue\",\n \"glue/v4\",\n \"go\",\n \"golang-wasm-exec\",\n \"google__maps\",\n \"google-ads-scripts\",\n \"google-adwords-scripts\",\n \"google-apps-script-oauth2\",\n \"google-closure-compiler\",\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 \"graphql-upload\",\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-angular-templatecache\",\n \"gulp-changed\",\n \"gulp-cheerio\",\n \"gulp-coffeeify\",\n \"gulp-dtsm\",\n \"gulp-espower\",\n \"gulp-help-doc\",\n \"gulp-imagemin\",\n \"gulp-jasmine-browser\",\n \"gulp-load-plugins\",\n \"gulp-minify-css\",\n \"gulp-mocha\",\n \"gulp-ng-annotate\",\n \"gulp-remember\",\n \"gulp-sourcemaps\",\n \"gulp-task-listing\",\n \"gun\",\n \"h2o2\",\n \"hafas-client\",\n \"hapi__catbox-memory\",\n \"hapi__catbox\",\n \"hapi__shot\",\n \"hapi\",\n \"hapi/v12\",\n \"hapi/v15\",\n \"hapi/v16\",\n \"hapi/v17\",\n \"hapi/v8\",\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 \"hexo-bunyan\",\n \"highlightjs\",\n \"hl7\",\n \"hmscore__react-native-hms-push\",\n \"hoek\",\n \"hookrouter\",\n \"html-escaper\",\n \"html-minifier-terser\",\n \"html-to-draftjs\",\n \"html-to-text\",\n \"html-webpack-plugin\",\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 \"iltorb\",\n \"image-blob-reduce\",\n \"imagemagick\",\n \"imagemapster\",\n \"imagemin-svgo\",\n \"imagemin-upng\",\n \"imagemin-webp\",\n \"imagemin\",\n \"imgur-rest-api\",\n \"inboxsdk\",\n \"inert/v4\",\n \"ineum\",\n \"inherits\",\n \"iniparser\",\n \"input-moment\",\n \"inputmask\",\n \"inquirer-autocomplete-prompt\",\n \"inquirer\",\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 \"is\",\n \"iscroll/v4\",\n \"isomorphic-fetch\",\n \"istanbul-middleware\",\n \"itemsjs\",\n \"itowns\",\n \"ix.js\",\n \"jackrabbit\",\n \"jade\",\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 \"jpm\",\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 \"jqueryui\",\n \"js-clipper\",\n \"js-schema\",\n \"js-url\",\n \"js-worker-search\",\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 \"json2csv\",\n \"jsoneditor-for-react\",\n \"jsoneditor\",\n \"jsoneditoronline\",\n \"jsonpath-plus\",\n \"jsonstream\",\n \"jsqrcode\",\n \"jstorage\",\n \"jsum\",\n \"justifiedgallery\",\n \"jwplayer\",\n \"jxon\",\n \"k6\",\n \"kahoot.js-updated\",\n \"kakao-js-sdk\",\n \"kakao-pixel\",\n \"kakaomaps\",\n \"kamailio-kemi\",\n \"kap-plugin\",\n \"katex\",\n \"keccak\",\n \"keen-tracking\",\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-router\",\n \"koa-sslify\",\n \"koa\",\n \"kolite\",\n \"konami.js\",\n \"kos-core\",\n \"kss\",\n \"kythe\",\n \"lab\",\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 \"leaflet.pm\",\n \"leapmotionts\",\n \"ledgerhq__hw-transport-u2f\",\n \"lestate\",\n \"level-sublevel\",\n \"leveldown\",\n \"lightpick\",\n \"line-reader\",\n \"lint-staged\",\n \"lls\",\n \"loadable__webpack-plugin\",\n \"localizejs-library\",\n \"locutus\",\n \"lodash-es\",\n \"logg\",\n \"login-with-amazon-sdk-browser\",\n \"loopback-boot\",\n \"lowlight\",\n \"ltx\",\n \"luxon\",\n \"macaca-circular-json\",\n \"magic-number\",\n \"magicmirror-module\",\n \"maildev\",\n \"mapbox__mapbox-sdk\",\n \"mapbox__s3urls\",\n \"mapbox\",\n \"mapboxgl-spiderifier\",\n \"mapsjs\",\n \"markdown-it-lazy-headers\",\n \"markdown-it-source-map\",\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 \"mimos\",\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 \"mongoose-sequence\",\n \"motor-hat\",\n \"mpv-script\",\n \"ms.macro\",\n \"msgpack\",\n \"mu2\",\n \"mudder\",\n \"multer\",\n \"multiavatar__multiavatar\",\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 \"nes\",\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-replicate\",\n \"node-sass-middleware\",\n \"node-timecodes\",\n \"node-uuid\",\n \"node-xmpp-client\",\n \"nodegit\",\n \"nodemailer/v3\",\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 \"npmcli__ci-detect\",\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-provider\",\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 \"openlayers/v3\",\n \"openrct2\",\n \"openssi-websdk\",\n \"opentok\",\n \"openui5\",\n \"openurl\",\n \"optimist\",\n \"oracledb/v3\",\n \"osmtogeojson\",\n \"ovenplayer\",\n \"paddle-js-browser\",\n \"page-flip\",\n \"pagedjs-cli\",\n \"pako\",\n \"paralleljs\",\n \"parcel-env\",\n \"parse-listing\",\n \"parse-torrent-file\",\n \"parse/v1\",\n \"passport-discord\",\n \"passport-github2\",\n \"passport-saml\",\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 \"phantom\",\n \"phoenix\",\n \"phonegap-facebook-plugin\",\n \"phonegap-nfc\",\n \"phonegap-plugin-barcodescanner\",\n \"phonegap\",\n \"photoshop\",\n \"pi-spi\",\n \"pino-multi-stream\",\n \"pinterest-sdk\",\n \"piwik-tracker\",\n \"places\",\n \"plaid-link\",\n \"playerframework\",\n \"playmusic\",\n \"plupload\",\n \"plv8-internal\",\n \"podium\",\n \"polylabel\",\n \"polyline\",\n \"polymer\",\n \"poool-access\",\n \"popcorn\",\n \"postcss-functions\",\n \"postcss-js\",\n \"postcss-use\",\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 \"quill\",\n \"qunit/v1\",\n \"rabbit.js\",\n \"radium\",\n \"radius\",\n \"ramda\",\n \"random-string\",\n \"rangy\",\n \"raphael\",\n \"rappid\",\n \"rasa-webchat\",\n \"raty\",\n \"raven\",\n \"raygun4js\",\n \"rbac-a\",\n \"rbush\",\n \"rc-switch\",\n \"rc-tooltip\",\n \"rdf-ext\",\n \"rdf-transform-triple-to-quad\",\n \"rdf-utils-dataset\",\n \"rdfjs__data-model\",\n \"rdfjs__dataset\",\n \"rdfjs__environment\",\n \"rdfjs__express-handler\",\n \"rdfjs__fetch-lite\",\n \"rdfjs__fetch\",\n \"rdfjs__formats-common\",\n \"rdfjs__formats\",\n \"rdfjs__namespace\",\n \"rdfjs__parser-jsonld\",\n \"rdfjs__parser-n3\",\n \"rdfjs__prefix-map\",\n \"rdfjs__score\",\n \"rdfjs__serializer-jsonld-ext\",\n \"rdfjs__serializer-jsonld\",\n \"rdfjs__serializer-ntriples\",\n \"rdfjs__serializer-rdfjs\",\n \"rdfjs__serializer-turtle\",\n \"rdfjs__sink-map\",\n \"rdfjs__term-map\",\n \"rdfjs__term-set\",\n \"rdfjs__traverser\",\n \"react-add-to-calendar\",\n \"react-amplitude\",\n \"react-anchor-link-smooth-scroll\",\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-command-palette\",\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-fa\",\n \"react-facebook-login-component\",\n \"react-facebook-login\",\n \"react-flags-select\",\n \"react-geosuggest\",\n \"react-github-button\",\n \"react-google-maps-loader\",\n \"react-google-places-suggest\",\n \"react-gtm-module\",\n \"react-highcharts\",\n \"react-highlight-words\",\n \"react-highlight.js\",\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-inspector\",\n \"react-instantsearch-dom\",\n \"react-instantsearch-native\",\n \"react-instantsearch\",\n \"react-js-table-with-csv-dl\",\n \"react-jsonschema-form\",\n \"react-key-handler\",\n \"react-leaflet-markercluster\",\n \"react-leaflet-markercluster/v2\",\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-dotenv\",\n \"react-native-google-signin\",\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-responsive\",\n \"react-router-navigation-core\",\n \"react-router-navigation\",\n \"react-router-redux\",\n \"react-rte\",\n \"react-s-alert\",\n \"react-scrollspy\",\n \"react-show-more\",\n \"react-sidebar\",\n \"react-signature-canvas\",\n \"react-sortable-tree-theme-file-explorer\",\n \"react-sortable-tree\",\n \"react-spinner\",\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-twitter-auth\",\n \"react-type-animation\",\n \"react-typical\",\n \"react-typing-effect\",\n \"react-typist\",\n \"react-user-tour\",\n \"react-widgets-moment\",\n \"react-window-size\",\n \"react-world-flags\",\n \"react-youtube-embed\",\n \"read-package-tree\",\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 \"request-promise\",\n \"request\",\n \"require-hacker\",\n \"resize-observer-browser\",\n \"resolve\",\n \"rest\",\n \"restful.js\",\n \"restify-plugins\",\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-json\",\n \"rollup-plugin-node-globals\",\n \"rollup-plugin-progress\",\n \"rollup-plugin-svelte-svg\",\n \"rollup-plugin-url\",\n \"rosbag\",\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 \"sane\",\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 \"semantic-release\",\n \"sencha_touch\",\n \"sequelize\",\n \"sequelize/v3\",\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 \"shot/v3\",\n \"siema\",\n \"sigmajs\",\n \"signalfx-collect\",\n \"signalr/v1\",\n \"simpl-schema\",\n \"simple-cw-node\",\n \"simple-oauth2/v1\",\n \"simple-oauth2/v2\",\n \"simple-react-lightbox\",\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 \"standard-version\",\n \"steam\",\n \"stream-meter\",\n \"stream-series\",\n \"stream-to-array/v0\",\n \"string-similarity/v1\",\n \"stringify-object\",\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 \"supertest-as-promised\",\n \"svg-arc-to-cubic-bezier\",\n \"svg-baker-runtime\",\n \"svg-injector\",\n \"svg-maps__common\",\n \"svgdom\",\n \"svgjs.draggable\",\n \"svgjs.resize\",\n \"swagger-express-middleware\",\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 \"tadashi__koa-jwt-authz\",\n \"tampermonkey\",\n \"tap\",\n \"tape\",\n \"tasker-js-runner\",\n \"taskkill\",\n \"tdweb\",\n \"tea-merge\",\n \"teechart\",\n \"telegram-web-app\",\n \"tern\",\n \"tether-shepherd\",\n \"text-encoding\",\n \"three\",\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-markdown\",\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 \"uglify-es\",\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 \"update-notifier\",\n \"url-format-lax\",\n \"url-join/v0\",\n \"url-parse-lax\",\n \"url-regex-safe\",\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 \"uuid/v2\",\n \"uuid/v3\",\n \"uws\",\n \"valdr-message\",\n \"valerie-browser\",\n \"vanillajs-datepicker\",\n \"vast-client\",\n \"vast-client/v2\",\n \"venn\",\n \"verovio\",\n \"vertx3-eventbus-client\",\n \"video.js\",\n \"videojs-contrib-quality-levels\",\n \"viewporter\",\n \"vimeo\",\n \"vinyl-paths\",\n \"vis\",\n \"vision\",\n \"vision/v4\",\n \"vk-openapi\",\n \"vmap\",\n \"vortex-web-client\",\n \"vscode-notebook-renderer\",\n \"vscode-webview\",\n \"vscode\",\n \"vue-chartkick\",\n \"vue-datetime\",\n \"vue-json-compare\",\n \"vue-ls\",\n \"vue-markdown\",\n \"vue-scroll-up\",\n \"vue-select\",\n \"vue-splitpane\",\n \"vue-tel-input\",\n \"vue2-datepicker\",\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 \"webrtc\",\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 \"why-did-you-update\",\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__custom-templated-path-webpack-plugin\",\n \"wordpress__customize-browser\",\n \"wordpress__library-export-default-webpack-plugin\",\n \"wordwrapjs\",\n \"workerb-api\",\n \"workgrid-core\",\n \"workgrid-toolbar\",\n \"wrap-ansi\",\n \"wreck\",\n \"wreck/v7\",\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 \"xmldom\",\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 \"yawn-yaml\",\n \"ydn-db\",\n \"yelp-fusion-plus\",\n \"youtube-dl\",\n \"youtube-player\",\n \"youtube\",\n \"zchat-browser\",\n \"zedit__upf\",\n \"zeit__next-typescript\",\n \"zengin-code\",\n \"zip.js\",\n \"zmq\",\n \"zumly\",\n \"zwjsbridge\",\n \"zwlog-browser\"\n ]\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/68510/_response.json b/packages/mergebot/src/_tests/fixtures/68510/_response.json new file mode 100644 index 0000000000..c19e8756a7 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68510/_response.json @@ -0,0 +1,179 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM5mMibM", + "title": "[DO NOT MERGE - infrastructure test] attw.json removal", + "createdAt": "2024-02-06T22:15:36Z", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 68510, + "state": "OPEN", + "headRefOid": "073ae8d3a0b71b12ba6bb5b7a1d883d8611d98cb", + "changedFiles": 1, + "additions": 0, + "deletions": 1, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "073ae8d3a0b71b12ba6bb5b7a1d883d8611d98cb", + "parents": { + "nodes": [ + { + "oid": "9b8dcf375c4aec95878058c610f8279c22527fa0", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 20510180479, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/073ae8d3a0b71b12ba6bb5b7a1d883d8611d98cb/checks?check_suite_id=20510180479", + "status": "QUEUED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/073ae8d3a0b71b12ba6bb5b7a1d883d8611d98cb/checks?check_suite_id=20510180479", + "checkRuns": { + "nodes": [], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-02-06T22:14:50Z", + "workflowRun": null, + "__typename": "CheckSuite" + }, + { + "databaseId": 20510180503, + "app": { + "name": "Dependabot", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/073ae8d3a0b71b12ba6bb5b7a1d883d8611d98cb/checks?check_suite_id=20510180503", + "status": "QUEUED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/073ae8d3a0b71b12ba6bb5b7a1d883d8611d98cb/checks?check_suite_id=20510180503", + "checkRuns": { + "nodes": [], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-02-06T22:14:50Z", + "workflowRun": null, + "__typename": "CheckSuite" + }, + { + "databaseId": 20510206482, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/073ae8d3a0b71b12ba6bb5b7a1d883d8611d98cb/checks?check_suite_id=20510206482", + "status": "IN_PROGRESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/073ae8d3a0b71b12ba6bb5b7a1d883d8611d98cb/checks?check_suite_id=20510206482", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-02-06T22:15:40Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2024-02-06T22:14:48Z", + "committedDate": "2024-02-06T22:14:48Z", + "pushedDate": null, + "oid": "073ae8d3a0b71b12ba6bb5b7a1d883d8611d98cb", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 0, + "nodes": [], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 1, + "nodes": [ + { + "path": "attw.json", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/68510/derived.json b/packages/mergebot/src/_tests/fixtures/68510/derived.json new file mode 100644 index 0000000000..b8001dc3b7 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68510/derived.json @@ -0,0 +1,34 @@ +{ + "type": "info", + "now": "2024-02-06T22:16:07.932Z", + "pr_number": 68510, + "author": "andrewbranch", + "headCommitOid": "073ae8d3a0b71b12ba6bb5b7a1d883d8611d98cb", + "mergeBaseOid": "9b8dcf375c4aec95878058c610f8279c22527fa0", + "lastPushDate": "2024-02-06T22:15:36.000Z", + "lastActivityDate": "2024-02-06T22:15:36.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": null, + "kind": "edit", + "files": [ + { + "path": "attw.json", + "kind": "infrastructure" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical", + "isSafeInfrastructureEdit": true + } + ], + "reviews": [], + "ciResult": "unknown" +} diff --git a/packages/mergebot/src/_tests/fixtures/68510/mutations.json b/packages/mergebot/src/_tests/fixtures/68510/mutations.json new file mode 100644 index 0000000000..edbc7b043c --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68510/mutations.json @@ -0,0 +1,29 @@ +[ + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "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" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "PR_kwDOAFz6BM5mMibM", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "PR_kwDOAFz6BM5mMibM", + "body": "🔔 @andrewbranch — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68510/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/68510/result.json b/packages/mergebot/src/_tests/fixtures/68510/result.json new file mode 100644 index 0000000000..eeffce4ce9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68510/result.json @@ -0,0 +1,17 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [], + "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 ..." + }, + { + "tag": "pinging-reviewers-others", + "status": "🔔 @andrewbranch — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68510/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/68511/_downloads.json b/packages/mergebot/src/_tests/fixtures/68511/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68511/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/68511/_files.json b/packages/mergebot/src/_tests/fixtures/68511/_files.json new file mode 100644 index 0000000000..f136740fe5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68511/_files.json @@ -0,0 +1,4 @@ +{ + "4f1c1cba1a64e338ef17548f98f800b83ebd84cb:attw.json": "{\n \"ignoreRules\": [\n \"no-resolution\",\n \"cjs-only-exports-default\",\n \"unexpected-module-syntax\"\n ],\n \"failingPackages\": [\n \"3boxes\",\n \"absolute-url\",\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 \"ali-oss\",\n \"alipayjssdk\",\n \"allure-js-commons\",\n \"alpinejs__anchor\",\n \"alpinejs__collapse\",\n \"alpinejs__focus\",\n \"alpinejs__intersect\",\n \"alpinejs__mask\",\n \"alpinejs__morph\",\n \"alpinejs__persist\",\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-animate\",\n \"angular-aria\",\n \"angular-bootstrap-calendar\",\n \"angular-dialog-service\",\n \"angular-gridster\",\n \"angular-httpi\",\n \"angular-idle\",\n \"angular-material\",\n \"angular-meteor\",\n \"angular-notifications\",\n \"angular-notify\",\n \"angular-odata-resources\",\n \"angular-q-spread\",\n \"angular-resource\",\n \"angular-route\",\n \"angular-scenario\",\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 \"apollo-upload-client\",\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 \"artillery\",\n \"assertsharp\",\n \"async-polling\",\n \"async-retry\",\n \"atlaskit__layer\",\n \"atmosphere.js\",\n \"atom\",\n \"atpl\",\n \"atvlegacycontentkit\",\n \"auth0.widget\",\n \"awesome-notifications\",\n \"aws-cloudfront-function\",\n \"aws-lambda\",\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 \"balanced-match\",\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 \"boom/v3\",\n \"boom/v4\",\n \"bootstrap-colorpicker\",\n \"bootstrap-datepicker\",\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 \"bounce.js\",\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 \"catbox/v7\",\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 \"chrome-webstore-upload\",\n \"chromecast-caf-receiver\",\n \"chromecast-caf-sender\",\n \"chui\",\n \"cldr\",\n \"clearbladejs-client\",\n \"clearbladejs-node\",\n \"clearbladejs-server\",\n \"clmtrackr\",\n \"closure-compiler\",\n \"cloudflare-apps\",\n \"cloudflare-turnstile\",\n \"cloudfour__simple-svg-placeholder\",\n \"cloudinary-uploadwidget-browser\",\n \"clownface\",\n \"cls-hooked\",\n \"cobe\",\n \"code\",\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 \"configstore\",\n \"connect-flash\",\n \"consolidate\",\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 \"core-js\",\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 \"cryptiles\",\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 \"csurf\",\n \"culori\",\n \"curtainsjs\",\n \"custom-functions-runtime\",\n \"cybozulabs-md5\",\n \"cyclonedx\",\n \"cypress-cucumber-preprocessor\",\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 \"debug\",\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 \"diff\",\n \"digital-goods-browser\",\n \"doccookies\",\n \"dock-spawn\",\n \"documentdb-server\",\n \"documentdb-session\",\n \"documentdb\",\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 \"dwt\",\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 \"ebongarde-root\",\n \"editorjs__header\",\n \"egg.js\",\n \"ej.web.all\",\n \"ejs-locals\",\n \"elasticsearch\",\n \"email-prompt\",\n \"email-templates\",\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 \"error-subclass\",\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 \"eth-sig-util\",\n \"evaporate\",\n \"event-to-promise\",\n \"express-async-wrap\",\n \"express-brute-memcached\",\n \"express-pino-logger\",\n \"express-serve-static-core\",\n \"express-simple-locale\",\n \"express-socket.io-session\",\n \"express-status-monitor\",\n \"express-wechat-access\",\n \"extensible-duck\",\n \"extjs\",\n \"extract-files\",\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 \"fbt\",\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-static\",\n \"ffmpeg\",\n \"fhir\",\n \"fibjs\",\n \"figma\",\n \"filemaker-webviewer\",\n \"filesystem\",\n \"filewriter\",\n \"final-form-set-field-data\",\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 \"formidable/v1\",\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 \"gestalt-datepicker\",\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 \"glue\",\n \"glue/v4\",\n \"go\",\n \"golang-wasm-exec\",\n \"google__maps\",\n \"google-ads-scripts\",\n \"google-adwords-scripts\",\n \"google-apps-script-oauth2\",\n \"google-closure-compiler\",\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 \"graphql-upload\",\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-angular-templatecache\",\n \"gulp-changed\",\n \"gulp-cheerio\",\n \"gulp-coffeeify\",\n \"gulp-dtsm\",\n \"gulp-espower\",\n \"gulp-help-doc\",\n \"gulp-imagemin\",\n \"gulp-jasmine-browser\",\n \"gulp-load-plugins\",\n \"gulp-minify-css\",\n \"gulp-mocha\",\n \"gulp-ng-annotate\",\n \"gulp-remember\",\n \"gulp-sourcemaps\",\n \"gulp-task-listing\",\n \"gun\",\n \"h2o2\",\n \"hafas-client\",\n \"hapi__catbox-memory\",\n \"hapi__catbox\",\n \"hapi__shot\",\n \"hapi\",\n \"hapi/v12\",\n \"hapi/v15\",\n \"hapi/v16\",\n \"hapi/v17\",\n \"hapi/v8\",\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 \"hexo-bunyan\",\n \"highlightjs\",\n \"hl7\",\n \"hmscore__react-native-hms-push\",\n \"hoek\",\n \"hookrouter\",\n \"html-escaper\",\n \"html-minifier-terser\",\n \"html-to-draftjs\",\n \"html-to-text\",\n \"html-webpack-plugin\",\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 \"iltorb\",\n \"image-blob-reduce\",\n \"imagemagick\",\n \"imagemapster\",\n \"imagemin-svgo\",\n \"imagemin-upng\",\n \"imagemin-webp\",\n \"imagemin\",\n \"imgur-rest-api\",\n \"inboxsdk\",\n \"inert/v4\",\n \"ineum\",\n \"inherits\",\n \"iniparser\",\n \"input-moment\",\n \"inputmask\",\n \"inquirer-autocomplete-prompt\",\n \"inquirer\",\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 \"is\",\n \"iscroll/v4\",\n \"isomorphic-fetch\",\n \"istanbul-middleware\",\n \"itemsjs\",\n \"itowns\",\n \"ix.js\",\n \"jackrabbit\",\n \"jade\",\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 \"jpm\",\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 \"jqueryui\",\n \"js-clipper\",\n \"js-schema\",\n \"js-url\",\n \"js-worker-search\",\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 \"json2csv\",\n \"jsoneditor-for-react\",\n \"jsoneditor\",\n \"jsoneditoronline\",\n \"jsonpath-plus\",\n \"jsonstream\",\n \"jsqrcode\",\n \"jstorage\",\n \"jsum\",\n \"justifiedgallery\",\n \"jwplayer\",\n \"jxon\",\n \"k6\",\n \"kahoot.js-updated\",\n \"kakao-js-sdk\",\n \"kakao-pixel\",\n \"kakaomaps\",\n \"kamailio-kemi\",\n \"kap-plugin\",\n \"katex\",\n \"keccak\",\n \"keen-tracking\",\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-router\",\n \"koa-sslify\",\n \"koa\",\n \"kolite\",\n \"konami.js\",\n \"kos-core\",\n \"kss\",\n \"kythe\",\n \"lab\",\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 \"leaflet.pm\",\n \"leapmotionts\",\n \"ledgerhq__hw-transport-u2f\",\n \"lestate\",\n \"level-sublevel\",\n \"leveldown\",\n \"lightpick\",\n \"line-reader\",\n \"lint-staged\",\n \"lls\",\n \"loadable__webpack-plugin\",\n \"localizejs-library\",\n \"locutus\",\n \"lodash-es\",\n \"logg\",\n \"login-with-amazon-sdk-browser\",\n \"loopback-boot\",\n \"lowlight\",\n \"ltx\",\n \"luxon\",\n \"macaca-circular-json\",\n \"magic-number\",\n \"magicmirror-module\",\n \"maildev\",\n \"mapbox__mapbox-sdk\",\n \"mapbox__s3urls\",\n \"mapbox\",\n \"mapboxgl-spiderifier\",\n \"mapsjs\",\n \"markdown-it-lazy-headers\",\n \"markdown-it-source-map\",\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 \"mimos\",\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 \"mongoose-sequence\",\n \"motor-hat\",\n \"mpv-script\",\n \"ms.macro\",\n \"msgpack\",\n \"mu2\",\n \"mudder\",\n \"multer\",\n \"multiavatar__multiavatar\",\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 \"nes\",\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-replicate\",\n \"node-sass-middleware\",\n \"node-timecodes\",\n \"node-uuid\",\n \"node-xmpp-client\",\n \"nodegit\",\n \"nodemailer/v3\",\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 \"npmcli__ci-detect\",\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-provider\",\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 \"openlayers/v3\",\n \"openrct2\",\n \"openssi-websdk\",\n \"opentok\",\n \"openui5\",\n \"openurl\",\n \"optimist\",\n \"oracledb/v3\",\n \"osmtogeojson\",\n \"ovenplayer\",\n \"paddle-js-browser\",\n \"page-flip\",\n \"pagedjs-cli\",\n \"pako\",\n \"paralleljs\",\n \"parcel-env\",\n \"parse-listing\",\n \"parse-torrent-file\",\n \"parse/v1\",\n \"passport-discord\",\n \"passport-github2\",\n \"passport-saml\",\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 \"phantom\",\n \"phoenix\",\n \"phonegap-facebook-plugin\",\n \"phonegap-nfc\",\n \"phonegap-plugin-barcodescanner\",\n \"phonegap\",\n \"photoshop\",\n \"pi-spi\",\n \"pino-multi-stream\",\n \"pinterest-sdk\",\n \"piwik-tracker\",\n \"places\",\n \"plaid-link\",\n \"playerframework\",\n \"playmusic\",\n \"plupload\",\n \"plv8-internal\",\n \"podium\",\n \"polylabel\",\n \"polyline\",\n \"polymer\",\n \"poool-access\",\n \"popcorn\",\n \"postcss-functions\",\n \"postcss-js\",\n \"postcss-use\",\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 \"quill\",\n \"qunit/v1\",\n \"rabbit.js\",\n \"radium\",\n \"radius\",\n \"ramda\",\n \"random-string\",\n \"rangy\",\n \"raphael\",\n \"rappid\",\n \"rasa-webchat\",\n \"raty\",\n \"raven\",\n \"raygun4js\",\n \"rbac-a\",\n \"rbush\",\n \"rc-switch\",\n \"rc-tooltip\",\n \"rdf-ext\",\n \"rdf-transform-triple-to-quad\",\n \"rdf-utils-dataset\",\n \"rdfjs__data-model\",\n \"rdfjs__dataset\",\n \"rdfjs__environment\",\n \"rdfjs__express-handler\",\n \"rdfjs__fetch-lite\",\n \"rdfjs__fetch\",\n \"rdfjs__formats-common\",\n \"rdfjs__formats\",\n \"rdfjs__namespace\",\n \"rdfjs__parser-jsonld\",\n \"rdfjs__parser-n3\",\n \"rdfjs__prefix-map\",\n \"rdfjs__score\",\n \"rdfjs__serializer-jsonld-ext\",\n \"rdfjs__serializer-jsonld\",\n \"rdfjs__serializer-ntriples\",\n \"rdfjs__serializer-rdfjs\",\n \"rdfjs__serializer-turtle\",\n \"rdfjs__sink-map\",\n \"rdfjs__term-map\",\n \"rdfjs__term-set\",\n \"rdfjs__traverser\",\n \"react-add-to-calendar\",\n \"react-amplitude\",\n \"react-anchor-link-smooth-scroll\",\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-command-palette\",\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-fa\",\n \"react-facebook-login-component\",\n \"react-facebook-login\",\n \"react-flags-select\",\n \"react-geosuggest\",\n \"react-github-button\",\n \"react-google-maps-loader\",\n \"react-google-places-suggest\",\n \"react-gtm-module\",\n \"react-highcharts\",\n \"react-highlight-words\",\n \"react-highlight.js\",\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-inspector\",\n \"react-instantsearch-dom\",\n \"react-instantsearch-native\",\n \"react-instantsearch\",\n \"react-js-table-with-csv-dl\",\n \"react-jsonschema-form\",\n \"react-key-handler\",\n \"react-leaflet-markercluster\",\n \"react-leaflet-markercluster/v2\",\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-dotenv\",\n \"react-native-google-signin\",\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-responsive\",\n \"react-router-navigation-core\",\n \"react-router-navigation\",\n \"react-router-redux\",\n \"react-rte\",\n \"react-s-alert\",\n \"react-scrollspy\",\n \"react-show-more\",\n \"react-sidebar\",\n \"react-signature-canvas\",\n \"react-sortable-tree-theme-file-explorer\",\n \"react-sortable-tree\",\n \"react-spinner\",\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-twitter-auth\",\n \"react-type-animation\",\n \"react-typical\",\n \"react-typing-effect\",\n \"react-typist\",\n \"react-user-tour\",\n \"react-widgets-moment\",\n \"react-window-size\",\n \"react-world-flags\",\n \"react-youtube-embed\",\n \"read-package-tree\",\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 \"request-promise\",\n \"request\",\n \"require-hacker\",\n \"resize-observer-browser\",\n \"resolve\",\n \"rest\",\n \"restful.js\",\n \"restify-plugins\",\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-json\",\n \"rollup-plugin-node-globals\",\n \"rollup-plugin-progress\",\n \"rollup-plugin-svelte-svg\",\n \"rollup-plugin-url\",\n \"rosbag\",\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 \"sane\",\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 \"semantic-release\",\n \"sencha_touch\",\n \"sequelize\",\n \"sequelize/v3\",\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 \"shot/v3\",\n \"siema\",\n \"sigmajs\",\n \"signalfx-collect\",\n \"signalr/v1\",\n \"simpl-schema\",\n \"simple-cw-node\",\n \"simple-oauth2/v1\",\n \"simple-oauth2/v2\",\n \"simple-react-lightbox\",\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 \"standard-version\",\n \"steam\",\n \"stream-meter\",\n \"stream-series\",\n \"stream-to-array/v0\",\n \"string-similarity/v1\",\n \"stringify-object\",\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 \"supertest-as-promised\",\n \"svg-arc-to-cubic-bezier\",\n \"svg-baker-runtime\",\n \"svg-injector\",\n \"svg-maps__common\",\n \"svgdom\",\n \"svgjs.draggable\",\n \"svgjs.resize\",\n \"swagger-express-middleware\",\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 \"tadashi__koa-jwt-authz\",\n \"tampermonkey\",\n \"tap\",\n \"tape\",\n \"tasker-js-runner\",\n \"taskkill\",\n \"tdweb\",\n \"tea-merge\",\n \"teechart\",\n \"telegram-web-app\",\n \"tern\",\n \"tether-shepherd\",\n \"text-encoding\",\n \"three\",\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-markdown\",\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 \"uglify-es\",\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 \"update-notifier\",\n \"url-format-lax\",\n \"url-join/v0\",\n \"url-parse-lax\",\n \"url-regex-safe\",\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 \"uuid/v2\",\n \"uuid/v3\",\n \"uws\",\n \"valdr-message\",\n \"valerie-browser\",\n \"vanillajs-datepicker\",\n \"vast-client\",\n \"vast-client/v2\",\n \"venn\",\n \"verovio\",\n \"vertx3-eventbus-client\",\n \"video.js\",\n \"videojs-contrib-quality-levels\",\n \"viewporter\",\n \"vimeo\",\n \"vinyl-paths\",\n \"vis\",\n \"vision\",\n \"vision/v4\",\n \"vk-openapi\",\n \"vmap\",\n \"vortex-web-client\",\n \"vscode-notebook-renderer\",\n \"vscode-webview\",\n \"vscode\",\n \"vue-chartkick\",\n \"vue-datetime\",\n \"vue-json-compare\",\n \"vue-ls\",\n \"vue-markdown\",\n \"vue-scroll-up\",\n \"vue-select\",\n \"vue-splitpane\",\n \"vue-tel-input\",\n \"vue2-datepicker\",\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 \"webrtc\",\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 \"why-did-you-update\",\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__custom-templated-path-webpack-plugin\",\n \"wordpress__customize-browser\",\n \"wordpress__library-export-default-webpack-plugin\",\n \"wordwrapjs\",\n \"workerb-api\",\n \"workgrid-core\",\n \"workgrid-toolbar\",\n \"wrap-ansi\",\n \"wreck\",\n \"wreck/v7\",\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 \"xmldom\",\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 \"yawn-yaml\",\n \"ydn-db\",\n \"yelp-fusion-plus\",\n \"youtube-dl\",\n \"youtube-player\",\n \"youtube\",\n \"zchat-browser\",\n \"zedit__upf\",\n \"zeit__next-typescript\",\n \"zengin-code\",\n \"zip.js\",\n \"zmq\",\n \"zumly\",\n \"zwjsbridge\",\n \"zwlog-browser\"\n ]\n}\n", + "9b8dcf375c4aec95878058c610f8279c22527fa0:attw.json": "{\n \"ignoreRules\": [\n \"no-resolution\",\n \"cjs-only-exports-default\",\n \"unexpected-module-syntax\"\n ],\n \"failingPackages\": [\n \"3box\",\n \"absolute-url\",\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 \"ali-oss\",\n \"alipayjssdk\",\n \"allure-js-commons\",\n \"alpinejs__anchor\",\n \"alpinejs__collapse\",\n \"alpinejs__focus\",\n \"alpinejs__intersect\",\n \"alpinejs__mask\",\n \"alpinejs__morph\",\n \"alpinejs__persist\",\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-animate\",\n \"angular-aria\",\n \"angular-bootstrap-calendar\",\n \"angular-dialog-service\",\n \"angular-gridster\",\n \"angular-httpi\",\n \"angular-idle\",\n \"angular-material\",\n \"angular-meteor\",\n \"angular-notifications\",\n \"angular-notify\",\n \"angular-odata-resources\",\n \"angular-q-spread\",\n \"angular-resource\",\n \"angular-route\",\n \"angular-scenario\",\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 \"apollo-upload-client\",\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 \"artillery\",\n \"assertsharp\",\n \"async-polling\",\n \"async-retry\",\n \"atlaskit__layer\",\n \"atmosphere.js\",\n \"atom\",\n \"atpl\",\n \"atvlegacycontentkit\",\n \"auth0.widget\",\n \"awesome-notifications\",\n \"aws-cloudfront-function\",\n \"aws-lambda\",\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 \"balanced-match\",\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 \"boom/v3\",\n \"boom/v4\",\n \"bootstrap-colorpicker\",\n \"bootstrap-datepicker\",\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 \"bounce.js\",\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 \"catbox/v7\",\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 \"chrome-webstore-upload\",\n \"chromecast-caf-receiver\",\n \"chromecast-caf-sender\",\n \"chui\",\n \"cldr\",\n \"clearbladejs-client\",\n \"clearbladejs-node\",\n \"clearbladejs-server\",\n \"clmtrackr\",\n \"closure-compiler\",\n \"cloudflare-apps\",\n \"cloudflare-turnstile\",\n \"cloudfour__simple-svg-placeholder\",\n \"cloudinary-uploadwidget-browser\",\n \"clownface\",\n \"cls-hooked\",\n \"cobe\",\n \"code\",\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 \"configstore\",\n \"connect-flash\",\n \"consolidate\",\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 \"core-js\",\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 \"cryptiles\",\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 \"csurf\",\n \"culori\",\n \"curtainsjs\",\n \"custom-functions-runtime\",\n \"cybozulabs-md5\",\n \"cyclonedx\",\n \"cypress-cucumber-preprocessor\",\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 \"debug\",\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 \"diff\",\n \"digital-goods-browser\",\n \"doccookies\",\n \"dock-spawn\",\n \"documentdb-server\",\n \"documentdb-session\",\n \"documentdb\",\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 \"dwt\",\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 \"ebongarde-root\",\n \"editorjs__header\",\n \"egg.js\",\n \"ej.web.all\",\n \"ejs-locals\",\n \"elasticsearch\",\n \"email-prompt\",\n \"email-templates\",\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 \"error-subclass\",\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 \"eth-sig-util\",\n \"evaporate\",\n \"event-to-promise\",\n \"express-async-wrap\",\n \"express-brute-memcached\",\n \"express-pino-logger\",\n \"express-serve-static-core\",\n \"express-simple-locale\",\n \"express-socket.io-session\",\n \"express-status-monitor\",\n \"express-wechat-access\",\n \"extensible-duck\",\n \"extjs\",\n \"extract-files\",\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 \"fbt\",\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-static\",\n \"ffmpeg\",\n \"fhir\",\n \"fibjs\",\n \"figma\",\n \"filemaker-webviewer\",\n \"filesystem\",\n \"filewriter\",\n \"final-form-set-field-data\",\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 \"formidable/v1\",\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 \"gestalt-datepicker\",\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 \"glue\",\n \"glue/v4\",\n \"go\",\n \"golang-wasm-exec\",\n \"google__maps\",\n \"google-ads-scripts\",\n \"google-adwords-scripts\",\n \"google-apps-script-oauth2\",\n \"google-closure-compiler\",\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 \"graphql-upload\",\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-angular-templatecache\",\n \"gulp-changed\",\n \"gulp-cheerio\",\n \"gulp-coffeeify\",\n \"gulp-dtsm\",\n \"gulp-espower\",\n \"gulp-help-doc\",\n \"gulp-imagemin\",\n \"gulp-jasmine-browser\",\n \"gulp-load-plugins\",\n \"gulp-minify-css\",\n \"gulp-mocha\",\n \"gulp-ng-annotate\",\n \"gulp-remember\",\n \"gulp-sourcemaps\",\n \"gulp-task-listing\",\n \"gun\",\n \"h2o2\",\n \"hafas-client\",\n \"hapi__catbox-memory\",\n \"hapi__catbox\",\n \"hapi__shot\",\n \"hapi\",\n \"hapi/v12\",\n \"hapi/v15\",\n \"hapi/v16\",\n \"hapi/v17\",\n \"hapi/v8\",\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 \"hexo-bunyan\",\n \"highlightjs\",\n \"hl7\",\n \"hmscore__react-native-hms-push\",\n \"hoek\",\n \"hookrouter\",\n \"html-escaper\",\n \"html-minifier-terser\",\n \"html-to-draftjs\",\n \"html-to-text\",\n \"html-webpack-plugin\",\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 \"iltorb\",\n \"image-blob-reduce\",\n \"imagemagick\",\n \"imagemapster\",\n \"imagemin-svgo\",\n \"imagemin-upng\",\n \"imagemin-webp\",\n \"imagemin\",\n \"imgur-rest-api\",\n \"inboxsdk\",\n \"inert/v4\",\n \"ineum\",\n \"inherits\",\n \"iniparser\",\n \"input-moment\",\n \"inputmask\",\n \"inquirer-autocomplete-prompt\",\n \"inquirer\",\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 \"is\",\n \"iscroll/v4\",\n \"isomorphic-fetch\",\n \"istanbul-middleware\",\n \"itemsjs\",\n \"itowns\",\n \"ix.js\",\n \"jackrabbit\",\n \"jade\",\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 \"jpm\",\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 \"jqueryui\",\n \"js-clipper\",\n \"js-schema\",\n \"js-url\",\n \"js-worker-search\",\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 \"json2csv\",\n \"jsoneditor-for-react\",\n \"jsoneditor\",\n \"jsoneditoronline\",\n \"jsonpath-plus\",\n \"jsonstream\",\n \"jsqrcode\",\n \"jstorage\",\n \"jsum\",\n \"justifiedgallery\",\n \"jwplayer\",\n \"jxon\",\n \"k6\",\n \"kahoot.js-updated\",\n \"kakao-js-sdk\",\n \"kakao-pixel\",\n \"kakaomaps\",\n \"kamailio-kemi\",\n \"kap-plugin\",\n \"katex\",\n \"keccak\",\n \"keen-tracking\",\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-router\",\n \"koa-sslify\",\n \"koa\",\n \"kolite\",\n \"konami.js\",\n \"kos-core\",\n \"kss\",\n \"kythe\",\n \"lab\",\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 \"leaflet.pm\",\n \"leapmotionts\",\n \"ledgerhq__hw-transport-u2f\",\n \"lestate\",\n \"level-sublevel\",\n \"leveldown\",\n \"lightpick\",\n \"line-reader\",\n \"lint-staged\",\n \"lls\",\n \"loadable__webpack-plugin\",\n \"localizejs-library\",\n \"locutus\",\n \"lodash-es\",\n \"logg\",\n \"login-with-amazon-sdk-browser\",\n \"loopback-boot\",\n \"lowlight\",\n \"ltx\",\n \"luxon\",\n \"macaca-circular-json\",\n \"magic-number\",\n \"magicmirror-module\",\n \"maildev\",\n \"mapbox__mapbox-sdk\",\n \"mapbox__s3urls\",\n \"mapbox\",\n \"mapboxgl-spiderifier\",\n \"mapsjs\",\n \"markdown-it-lazy-headers\",\n \"markdown-it-source-map\",\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 \"mimos\",\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 \"mongoose-sequence\",\n \"motor-hat\",\n \"mpv-script\",\n \"ms.macro\",\n \"msgpack\",\n \"mu2\",\n \"mudder\",\n \"multer\",\n \"multiavatar__multiavatar\",\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 \"nes\",\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-replicate\",\n \"node-sass-middleware\",\n \"node-timecodes\",\n \"node-uuid\",\n \"node-xmpp-client\",\n \"nodegit\",\n \"nodemailer/v3\",\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 \"npmcli__ci-detect\",\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-provider\",\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 \"openlayers/v3\",\n \"openrct2\",\n \"openssi-websdk\",\n \"opentok\",\n \"openui5\",\n \"openurl\",\n \"optimist\",\n \"oracledb/v3\",\n \"osmtogeojson\",\n \"ovenplayer\",\n \"paddle-js-browser\",\n \"page-flip\",\n \"pagedjs-cli\",\n \"pako\",\n \"paralleljs\",\n \"parcel-env\",\n \"parse-listing\",\n \"parse-torrent-file\",\n \"parse/v1\",\n \"passport-discord\",\n \"passport-github2\",\n \"passport-saml\",\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 \"phantom\",\n \"phoenix\",\n \"phonegap-facebook-plugin\",\n \"phonegap-nfc\",\n \"phonegap-plugin-barcodescanner\",\n \"phonegap\",\n \"photoshop\",\n \"pi-spi\",\n \"pino-multi-stream\",\n \"pinterest-sdk\",\n \"piwik-tracker\",\n \"places\",\n \"plaid-link\",\n \"playerframework\",\n \"playmusic\",\n \"plupload\",\n \"plv8-internal\",\n \"podium\",\n \"polylabel\",\n \"polyline\",\n \"polymer\",\n \"poool-access\",\n \"popcorn\",\n \"postcss-functions\",\n \"postcss-js\",\n \"postcss-use\",\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 \"quill\",\n \"qunit/v1\",\n \"rabbit.js\",\n \"radium\",\n \"radius\",\n \"ramda\",\n \"random-string\",\n \"rangy\",\n \"raphael\",\n \"rappid\",\n \"rasa-webchat\",\n \"raty\",\n \"raven\",\n \"raygun4js\",\n \"rbac-a\",\n \"rbush\",\n \"rc-switch\",\n \"rc-tooltip\",\n \"rdf-ext\",\n \"rdf-transform-triple-to-quad\",\n \"rdf-utils-dataset\",\n \"rdfjs__data-model\",\n \"rdfjs__dataset\",\n \"rdfjs__environment\",\n \"rdfjs__express-handler\",\n \"rdfjs__fetch-lite\",\n \"rdfjs__fetch\",\n \"rdfjs__formats-common\",\n \"rdfjs__formats\",\n \"rdfjs__namespace\",\n \"rdfjs__parser-jsonld\",\n \"rdfjs__parser-n3\",\n \"rdfjs__prefix-map\",\n \"rdfjs__score\",\n \"rdfjs__serializer-jsonld-ext\",\n \"rdfjs__serializer-jsonld\",\n \"rdfjs__serializer-ntriples\",\n \"rdfjs__serializer-rdfjs\",\n \"rdfjs__serializer-turtle\",\n \"rdfjs__sink-map\",\n \"rdfjs__term-map\",\n \"rdfjs__term-set\",\n \"rdfjs__traverser\",\n \"react-add-to-calendar\",\n \"react-amplitude\",\n \"react-anchor-link-smooth-scroll\",\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-command-palette\",\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-fa\",\n \"react-facebook-login-component\",\n \"react-facebook-login\",\n \"react-flags-select\",\n \"react-geosuggest\",\n \"react-github-button\",\n \"react-google-maps-loader\",\n \"react-google-places-suggest\",\n \"react-gtm-module\",\n \"react-highcharts\",\n \"react-highlight-words\",\n \"react-highlight.js\",\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-inspector\",\n \"react-instantsearch-dom\",\n \"react-instantsearch-native\",\n \"react-instantsearch\",\n \"react-js-table-with-csv-dl\",\n \"react-jsonschema-form\",\n \"react-key-handler\",\n \"react-leaflet-markercluster\",\n \"react-leaflet-markercluster/v2\",\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-dotenv\",\n \"react-native-google-signin\",\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-responsive\",\n \"react-router-navigation-core\",\n \"react-router-navigation\",\n \"react-router-redux\",\n \"react-rte\",\n \"react-s-alert\",\n \"react-scrollspy\",\n \"react-show-more\",\n \"react-sidebar\",\n \"react-signature-canvas\",\n \"react-sortable-tree-theme-file-explorer\",\n \"react-sortable-tree\",\n \"react-spinner\",\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-twitter-auth\",\n \"react-type-animation\",\n \"react-typical\",\n \"react-typing-effect\",\n \"react-typist\",\n \"react-user-tour\",\n \"react-widgets-moment\",\n \"react-window-size\",\n \"react-world-flags\",\n \"react-youtube-embed\",\n \"read-package-tree\",\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 \"request-promise\",\n \"request\",\n \"require-hacker\",\n \"resize-observer-browser\",\n \"resolve\",\n \"rest\",\n \"restful.js\",\n \"restify-plugins\",\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-json\",\n \"rollup-plugin-node-globals\",\n \"rollup-plugin-progress\",\n \"rollup-plugin-svelte-svg\",\n \"rollup-plugin-url\",\n \"rosbag\",\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 \"sane\",\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 \"semantic-release\",\n \"sencha_touch\",\n \"sequelize\",\n \"sequelize/v3\",\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 \"shot/v3\",\n \"siema\",\n \"sigmajs\",\n \"signalfx-collect\",\n \"signalr/v1\",\n \"simpl-schema\",\n \"simple-cw-node\",\n \"simple-oauth2/v1\",\n \"simple-oauth2/v2\",\n \"simple-react-lightbox\",\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 \"standard-version\",\n \"steam\",\n \"stream-meter\",\n \"stream-series\",\n \"stream-to-array/v0\",\n \"string-similarity/v1\",\n \"stringify-object\",\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 \"supertest-as-promised\",\n \"svg-arc-to-cubic-bezier\",\n \"svg-baker-runtime\",\n \"svg-injector\",\n \"svg-maps__common\",\n \"svgdom\",\n \"svgjs.draggable\",\n \"svgjs.resize\",\n \"swagger-express-middleware\",\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 \"tadashi__koa-jwt-authz\",\n \"tampermonkey\",\n \"tap\",\n \"tape\",\n \"tasker-js-runner\",\n \"taskkill\",\n \"tdweb\",\n \"tea-merge\",\n \"teechart\",\n \"telegram-web-app\",\n \"tern\",\n \"tether-shepherd\",\n \"text-encoding\",\n \"three\",\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-markdown\",\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 \"uglify-es\",\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 \"update-notifier\",\n \"url-format-lax\",\n \"url-join/v0\",\n \"url-parse-lax\",\n \"url-regex-safe\",\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 \"uuid/v2\",\n \"uuid/v3\",\n \"uws\",\n \"valdr-message\",\n \"valerie-browser\",\n \"vanillajs-datepicker\",\n \"vast-client\",\n \"vast-client/v2\",\n \"venn\",\n \"verovio\",\n \"vertx3-eventbus-client\",\n \"video.js\",\n \"videojs-contrib-quality-levels\",\n \"viewporter\",\n \"vimeo\",\n \"vinyl-paths\",\n \"vis\",\n \"vision\",\n \"vision/v4\",\n \"vk-openapi\",\n \"vmap\",\n \"vortex-web-client\",\n \"vscode-notebook-renderer\",\n \"vscode-webview\",\n \"vscode\",\n \"vue-chartkick\",\n \"vue-datetime\",\n \"vue-json-compare\",\n \"vue-ls\",\n \"vue-markdown\",\n \"vue-scroll-up\",\n \"vue-select\",\n \"vue-splitpane\",\n \"vue-tel-input\",\n \"vue2-datepicker\",\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 \"webrtc\",\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 \"why-did-you-update\",\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__custom-templated-path-webpack-plugin\",\n \"wordpress__customize-browser\",\n \"wordpress__library-export-default-webpack-plugin\",\n \"wordwrapjs\",\n \"workerb-api\",\n \"workgrid-core\",\n \"workgrid-toolbar\",\n \"wrap-ansi\",\n \"wreck\",\n \"wreck/v7\",\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 \"xmldom\",\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 \"yawn-yaml\",\n \"ydn-db\",\n \"yelp-fusion-plus\",\n \"youtube-dl\",\n \"youtube-player\",\n \"youtube\",\n \"zchat-browser\",\n \"zedit__upf\",\n \"zeit__next-typescript\",\n \"zengin-code\",\n \"zip.js\",\n \"zmq\",\n \"zumly\",\n \"zwjsbridge\",\n \"zwlog-browser\"\n ]\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/68511/_response.json b/packages/mergebot/src/_tests/fixtures/68511/_response.json new file mode 100644 index 0000000000..f7c9bdbbcd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68511/_response.json @@ -0,0 +1,179 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM5mMi_p", + "title": "[DO NOT MERGE - infrastructure test] attw.json change", + "createdAt": "2024-02-06T22:18:00Z", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 68511, + "state": "OPEN", + "headRefOid": "4f1c1cba1a64e338ef17548f98f800b83ebd84cb", + "changedFiles": 1, + "additions": 1, + "deletions": 1, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "4f1c1cba1a64e338ef17548f98f800b83ebd84cb", + "parents": { + "nodes": [ + { + "oid": "9b8dcf375c4aec95878058c610f8279c22527fa0", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 20510252258, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4f1c1cba1a64e338ef17548f98f800b83ebd84cb/checks?check_suite_id=20510252258", + "status": "QUEUED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4f1c1cba1a64e338ef17548f98f800b83ebd84cb/checks?check_suite_id=20510252258", + "checkRuns": { + "nodes": [], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-02-06T22:17:07Z", + "workflowRun": null, + "__typename": "CheckSuite" + }, + { + "databaseId": 20510252280, + "app": { + "name": "Dependabot", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4f1c1cba1a64e338ef17548f98f800b83ebd84cb/checks?check_suite_id=20510252280", + "status": "QUEUED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4f1c1cba1a64e338ef17548f98f800b83ebd84cb/checks?check_suite_id=20510252280", + "checkRuns": { + "nodes": [], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-02-06T22:17:07Z", + "workflowRun": null, + "__typename": "CheckSuite" + }, + { + "databaseId": 20510281928, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4f1c1cba1a64e338ef17548f98f800b83ebd84cb/checks?check_suite_id=20510281928", + "status": "QUEUED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4f1c1cba1a64e338ef17548f98f800b83ebd84cb/checks?check_suite_id=20510281928", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-02-06T22:18:05Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2024-02-06T22:17:05Z", + "committedDate": "2024-02-06T22:17:05Z", + "pushedDate": null, + "oid": "4f1c1cba1a64e338ef17548f98f800b83ebd84cb", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 0, + "nodes": [], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 1, + "nodes": [ + { + "path": "attw.json", + "additions": 1, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/68511/derived.json b/packages/mergebot/src/_tests/fixtures/68511/derived.json new file mode 100644 index 0000000000..46df444920 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68511/derived.json @@ -0,0 +1,34 @@ +{ + "type": "info", + "now": "2024-02-06T22:18:08.721Z", + "pr_number": 68511, + "author": "andrewbranch", + "headCommitOid": "4f1c1cba1a64e338ef17548f98f800b83ebd84cb", + "mergeBaseOid": "9b8dcf375c4aec95878058c610f8279c22527fa0", + "lastPushDate": "2024-02-06T22:18:00.000Z", + "lastActivityDate": "2024-02-06T22:18:00.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": null, + "kind": "edit", + "files": [ + { + "path": "attw.json", + "kind": "infrastructure" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical", + "isSafeInfrastructureEdit": false + } + ], + "reviews": [], + "ciResult": "unknown" +} diff --git a/packages/mergebot/src/_tests/fixtures/68511/mutations.json b/packages/mergebot/src/_tests/fixtures/68511/mutations.json new file mode 100644 index 0000000000..000d680c7a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68511/mutations.json @@ -0,0 +1,40 @@ +[ + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "PR_kwDOAFz6BM5mMi_p", + "body": "@andrewbranch Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 0 packages in this PR (and infra files)\n\n* Infra files\n - [`attw.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68511/files/4f1c1cba1a64e338ef17548f98f800b83ebd84cb#diff-a9fbad9eaca1b40ea7a3a99b7efdd6db757c56afcf5998858c2c4594f17c0cd4)\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68511&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 A DT maintainer needs to approve changes that affect DT infrastructure ([`attw.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68511/files/4f1c1cba1a64e338ef17548f98f800b83ebd84cb#diff-a9fbad9eaca1b40ea7a3a99b7efdd6db757c56afcf5998858c2c4594f17c0cd4))\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwxNjA4MjA4ODM1" + ], + "labelableId": "PR_kwDOAFz6BM5mMi_p" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "PR_kwDOAFz6BM5mMi_p", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "PR_kwDOAFz6BM5mMi_p", + "body": "🔔 @andrewbranch — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68511/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/68511/result.json b/packages/mergebot/src/_tests/fixtures/68511/result.json new file mode 100644 index 0000000000..3a3beebd69 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68511/result.json @@ -0,0 +1,19 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Edits Infrastructure" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@andrewbranch Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 0 packages in this PR (and infra files)\n\n* Infra files\n - [`attw.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68511/files/4f1c1cba1a64e338ef17548f98f800b83ebd84cb#diff-a9fbad9eaca1b40ea7a3a99b7efdd6db757c56afcf5998858c2c4594f17c0cd4)\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68511&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 A DT maintainer needs to approve changes that affect DT infrastructure ([`attw.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68511/files/4f1c1cba1a64e338ef17548f98f800b83ebd84cb#diff-a9fbad9eaca1b40ea7a3a99b7efdd6db757c56afcf5998858c2c4594f17c0cd4))\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", + "status": "🔔 @andrewbranch — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68511/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/68512/_downloads.json b/packages/mergebot/src/_tests/fixtures/68512/_downloads.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68512/_downloads.json @@ -0,0 +1 @@ +{} diff --git a/packages/mergebot/src/_tests/fixtures/68512/_files.json b/packages/mergebot/src/_tests/fixtures/68512/_files.json new file mode 100644 index 0000000000..f2849bd85e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68512/_files.json @@ -0,0 +1,3 @@ +{ + "3cfdbf386128f18892a0e9c2cb73ba46fe325422:attw.json": "{\n \"ignoreRules\": [\n \"no-resolution\",\n \"cjs-only-exports-default\",\n ],\n \"failingPackages\": [\n \"3box\",\n \"absolute-url\",\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 \"ali-oss\",\n \"alipayjssdk\",\n \"allure-js-commons\",\n \"alpinejs__anchor\",\n \"alpinejs__collapse\",\n \"alpinejs__focus\",\n \"alpinejs__intersect\",\n \"alpinejs__mask\",\n \"alpinejs__morph\",\n \"alpinejs__persist\",\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-animate\",\n \"angular-aria\",\n \"angular-bootstrap-calendar\",\n \"angular-dialog-service\",\n \"angular-gridster\",\n \"angular-httpi\",\n \"angular-idle\",\n \"angular-material\",\n \"angular-meteor\",\n \"angular-notifications\",\n \"angular-notify\",\n \"angular-odata-resources\",\n \"angular-q-spread\",\n \"angular-resource\",\n \"angular-route\",\n \"angular-scenario\",\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 \"apollo-upload-client\",\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 \"artillery\",\n \"assertsharp\",\n \"async-polling\",\n \"async-retry\",\n \"atlaskit__layer\",\n \"atmosphere.js\",\n \"atom\",\n \"atpl\",\n \"atvlegacycontentkit\",\n \"auth0.widget\",\n \"awesome-notifications\",\n \"aws-cloudfront-function\",\n \"aws-lambda\",\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 \"balanced-match\",\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 \"boom/v3\",\n \"boom/v4\",\n \"bootstrap-colorpicker\",\n \"bootstrap-datepicker\",\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 \"bounce.js\",\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 \"catbox/v7\",\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 \"chrome-webstore-upload\",\n \"chromecast-caf-receiver\",\n \"chromecast-caf-sender\",\n \"chui\",\n \"cldr\",\n \"clearbladejs-client\",\n \"clearbladejs-node\",\n \"clearbladejs-server\",\n \"clmtrackr\",\n \"closure-compiler\",\n \"cloudflare-apps\",\n \"cloudflare-turnstile\",\n \"cloudfour__simple-svg-placeholder\",\n \"cloudinary-uploadwidget-browser\",\n \"clownface\",\n \"cls-hooked\",\n \"cobe\",\n \"code\",\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 \"configstore\",\n \"connect-flash\",\n \"consolidate\",\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 \"core-js\",\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 \"cryptiles\",\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 \"csurf\",\n \"culori\",\n \"curtainsjs\",\n \"custom-functions-runtime\",\n \"cybozulabs-md5\",\n \"cyclonedx\",\n \"cypress-cucumber-preprocessor\",\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 \"debug\",\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 \"diff\",\n \"digital-goods-browser\",\n \"doccookies\",\n \"dock-spawn\",\n \"documentdb-server\",\n \"documentdb-session\",\n \"documentdb\",\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 \"dwt\",\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 \"ebongarde-root\",\n \"editorjs__header\",\n \"egg.js\",\n \"ej.web.all\",\n \"ejs-locals\",\n \"elasticsearch\",\n \"email-prompt\",\n \"email-templates\",\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 \"error-subclass\",\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 \"eth-sig-util\",\n \"evaporate\",\n \"event-to-promise\",\n \"express-async-wrap\",\n \"express-brute-memcached\",\n \"express-pino-logger\",\n \"express-serve-static-core\",\n \"express-simple-locale\",\n \"express-socket.io-session\",\n \"express-status-monitor\",\n \"express-wechat-access\",\n \"extensible-duck\",\n \"extjs\",\n \"extract-files\",\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 \"fbt\",\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-static\",\n \"ffmpeg\",\n \"fhir\",\n \"fibjs\",\n \"figma\",\n \"filemaker-webviewer\",\n \"filesystem\",\n \"filewriter\",\n \"final-form-set-field-data\",\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 \"formidable/v1\",\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 \"gestalt-datepicker\",\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 \"glue\",\n \"glue/v4\",\n \"go\",\n \"golang-wasm-exec\",\n \"google__maps\",\n \"google-ads-scripts\",\n \"google-adwords-scripts\",\n \"google-apps-script-oauth2\",\n \"google-closure-compiler\",\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 \"graphql-upload\",\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-angular-templatecache\",\n \"gulp-changed\",\n \"gulp-cheerio\",\n \"gulp-coffeeify\",\n \"gulp-dtsm\",\n \"gulp-espower\",\n \"gulp-help-doc\",\n \"gulp-imagemin\",\n \"gulp-jasmine-browser\",\n \"gulp-load-plugins\",\n \"gulp-minify-css\",\n \"gulp-mocha\",\n \"gulp-ng-annotate\",\n \"gulp-remember\",\n \"gulp-sourcemaps\",\n \"gulp-task-listing\",\n \"gun\",\n \"h2o2\",\n \"hafas-client\",\n \"hapi__catbox-memory\",\n \"hapi__catbox\",\n \"hapi__shot\",\n \"hapi\",\n \"hapi/v12\",\n \"hapi/v15\",\n \"hapi/v16\",\n \"hapi/v17\",\n \"hapi/v8\",\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 \"hexo-bunyan\",\n \"highlightjs\",\n \"hl7\",\n \"hmscore__react-native-hms-push\",\n \"hoek\",\n \"hookrouter\",\n \"html-escaper\",\n \"html-minifier-terser\",\n \"html-to-draftjs\",\n \"html-to-text\",\n \"html-webpack-plugin\",\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 \"iltorb\",\n \"image-blob-reduce\",\n \"imagemagick\",\n \"imagemapster\",\n \"imagemin-svgo\",\n \"imagemin-upng\",\n \"imagemin-webp\",\n \"imagemin\",\n \"imgur-rest-api\",\n \"inboxsdk\",\n \"inert/v4\",\n \"ineum\",\n \"inherits\",\n \"iniparser\",\n \"input-moment\",\n \"inputmask\",\n \"inquirer-autocomplete-prompt\",\n \"inquirer\",\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 \"is\",\n \"iscroll/v4\",\n \"isomorphic-fetch\",\n \"istanbul-middleware\",\n \"itemsjs\",\n \"itowns\",\n \"ix.js\",\n \"jackrabbit\",\n \"jade\",\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 \"jpm\",\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 \"jqueryui\",\n \"js-clipper\",\n \"js-schema\",\n \"js-url\",\n \"js-worker-search\",\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 \"json2csv\",\n \"jsoneditor-for-react\",\n \"jsoneditor\",\n \"jsoneditoronline\",\n \"jsonpath-plus\",\n \"jsonstream\",\n \"jsqrcode\",\n \"jstorage\",\n \"jsum\",\n \"justifiedgallery\",\n \"jwplayer\",\n \"jxon\",\n \"k6\",\n \"kahoot.js-updated\",\n \"kakao-js-sdk\",\n \"kakao-pixel\",\n \"kakaomaps\",\n \"kamailio-kemi\",\n \"kap-plugin\",\n \"katex\",\n \"keccak\",\n \"keen-tracking\",\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-router\",\n \"koa-sslify\",\n \"koa\",\n \"kolite\",\n \"konami.js\",\n \"kos-core\",\n \"kss\",\n \"kythe\",\n \"lab\",\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 \"leaflet.pm\",\n \"leapmotionts\",\n \"ledgerhq__hw-transport-u2f\",\n \"lestate\",\n \"level-sublevel\",\n \"leveldown\",\n \"lightpick\",\n \"line-reader\",\n \"lint-staged\",\n \"lls\",\n \"loadable__webpack-plugin\",\n \"localizejs-library\",\n \"locutus\",\n \"lodash-es\",\n \"logg\",\n \"login-with-amazon-sdk-browser\",\n \"loopback-boot\",\n \"lowlight\",\n \"ltx\",\n \"luxon\",\n \"macaca-circular-json\",\n \"magic-number\",\n \"magicmirror-module\",\n \"maildev\",\n \"mapbox__mapbox-sdk\",\n \"mapbox__s3urls\",\n \"mapbox\",\n \"mapboxgl-spiderifier\",\n \"mapsjs\",\n \"markdown-it-lazy-headers\",\n \"markdown-it-source-map\",\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 \"mimos\",\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 \"mongoose-sequence\",\n \"motor-hat\",\n \"mpv-script\",\n \"ms.macro\",\n \"msgpack\",\n \"mu2\",\n \"mudder\",\n \"multer\",\n \"multiavatar__multiavatar\",\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 \"nes\",\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-replicate\",\n \"node-sass-middleware\",\n \"node-timecodes\",\n \"node-uuid\",\n \"node-xmpp-client\",\n \"nodegit\",\n \"nodemailer/v3\",\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 \"npmcli__ci-detect\",\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-provider\",\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 \"openlayers/v3\",\n \"openrct2\",\n \"openssi-websdk\",\n \"opentok\",\n \"openui5\",\n \"openurl\",\n \"optimist\",\n \"oracledb/v3\",\n \"osmtogeojson\",\n \"ovenplayer\",\n \"paddle-js-browser\",\n \"page-flip\",\n \"pagedjs-cli\",\n \"pako\",\n \"paralleljs\",\n \"parcel-env\",\n \"parse-listing\",\n \"parse-torrent-file\",\n \"parse/v1\",\n \"passport-discord\",\n \"passport-github2\",\n \"passport-saml\",\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 \"phantom\",\n \"phoenix\",\n \"phonegap-facebook-plugin\",\n \"phonegap-nfc\",\n \"phonegap-plugin-barcodescanner\",\n \"phonegap\",\n \"photoshop\",\n \"pi-spi\",\n \"pino-multi-stream\",\n \"pinterest-sdk\",\n \"piwik-tracker\",\n \"places\",\n \"plaid-link\",\n \"playerframework\",\n \"playmusic\",\n \"plupload\",\n \"plv8-internal\",\n \"podium\",\n \"polylabel\",\n \"polyline\",\n \"polymer\",\n \"poool-access\",\n \"popcorn\",\n \"postcss-functions\",\n \"postcss-js\",\n \"postcss-use\",\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 \"quill\",\n \"qunit/v1\",\n \"rabbit.js\",\n \"radium\",\n \"radius\",\n \"ramda\",\n \"random-string\",\n \"rangy\",\n \"raphael\",\n \"rappid\",\n \"rasa-webchat\",\n \"raty\",\n \"raven\",\n \"raygun4js\",\n \"rbac-a\",\n \"rbush\",\n \"rc-switch\",\n \"rc-tooltip\",\n \"rdf-ext\",\n \"rdf-transform-triple-to-quad\",\n \"rdf-utils-dataset\",\n \"rdfjs__data-model\",\n \"rdfjs__dataset\",\n \"rdfjs__environment\",\n \"rdfjs__express-handler\",\n \"rdfjs__fetch-lite\",\n \"rdfjs__fetch\",\n \"rdfjs__formats-common\",\n \"rdfjs__formats\",\n \"rdfjs__namespace\",\n \"rdfjs__parser-jsonld\",\n \"rdfjs__parser-n3\",\n \"rdfjs__prefix-map\",\n \"rdfjs__score\",\n \"rdfjs__serializer-jsonld-ext\",\n \"rdfjs__serializer-jsonld\",\n \"rdfjs__serializer-ntriples\",\n \"rdfjs__serializer-rdfjs\",\n \"rdfjs__serializer-turtle\",\n \"rdfjs__sink-map\",\n \"rdfjs__term-map\",\n \"rdfjs__term-set\",\n \"rdfjs__traverser\",\n \"react-add-to-calendar\",\n \"react-amplitude\",\n \"react-anchor-link-smooth-scroll\",\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-command-palette\",\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-fa\",\n \"react-facebook-login-component\",\n \"react-facebook-login\",\n \"react-flags-select\",\n \"react-geosuggest\",\n \"react-github-button\",\n \"react-google-maps-loader\",\n \"react-google-places-suggest\",\n \"react-gtm-module\",\n \"react-highcharts\",\n \"react-highlight-words\",\n \"react-highlight.js\",\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-inspector\",\n \"react-instantsearch-dom\",\n \"react-instantsearch-native\",\n \"react-instantsearch\",\n \"react-js-table-with-csv-dl\",\n \"react-jsonschema-form\",\n \"react-key-handler\",\n \"react-leaflet-markercluster\",\n \"react-leaflet-markercluster/v2\",\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-dotenv\",\n \"react-native-google-signin\",\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-responsive\",\n \"react-router-navigation-core\",\n \"react-router-navigation\",\n \"react-router-redux\",\n \"react-rte\",\n \"react-s-alert\",\n \"react-scrollspy\",\n \"react-show-more\",\n \"react-sidebar\",\n \"react-signature-canvas\",\n \"react-sortable-tree-theme-file-explorer\",\n \"react-sortable-tree\",\n \"react-spinner\",\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-twitter-auth\",\n \"react-type-animation\",\n \"react-typical\",\n \"react-typing-effect\",\n \"react-typist\",\n \"react-user-tour\",\n \"react-widgets-moment\",\n \"react-window-size\",\n \"react-world-flags\",\n \"react-youtube-embed\",\n \"read-package-tree\",\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 \"request-promise\",\n \"request\",\n \"require-hacker\",\n \"resize-observer-browser\",\n \"resolve\",\n \"rest\",\n \"restful.js\",\n \"restify-plugins\",\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-json\",\n \"rollup-plugin-node-globals\",\n \"rollup-plugin-progress\",\n \"rollup-plugin-svelte-svg\",\n \"rollup-plugin-url\",\n \"rosbag\",\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 \"sane\",\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 \"semantic-release\",\n \"sencha_touch\",\n \"sequelize\",\n \"sequelize/v3\",\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 \"shot/v3\",\n \"siema\",\n \"sigmajs\",\n \"signalfx-collect\",\n \"signalr/v1\",\n \"simpl-schema\",\n \"simple-cw-node\",\n \"simple-oauth2/v1\",\n \"simple-oauth2/v2\",\n \"simple-react-lightbox\",\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 \"standard-version\",\n \"steam\",\n \"stream-meter\",\n \"stream-series\",\n \"stream-to-array/v0\",\n \"string-similarity/v1\",\n \"stringify-object\",\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 \"supertest-as-promised\",\n \"svg-arc-to-cubic-bezier\",\n \"svg-baker-runtime\",\n \"svg-injector\",\n \"svg-maps__common\",\n \"svgdom\",\n \"svgjs.draggable\",\n \"svgjs.resize\",\n \"swagger-express-middleware\",\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 \"tadashi__koa-jwt-authz\",\n \"tampermonkey\",\n \"tap\",\n \"tape\",\n \"tasker-js-runner\",\n \"taskkill\",\n \"tdweb\",\n \"tea-merge\",\n \"teechart\",\n \"telegram-web-app\",\n \"tern\",\n \"tether-shepherd\",\n \"text-encoding\",\n \"three\",\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-markdown\",\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 \"uglify-es\",\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 \"update-notifier\",\n \"url-format-lax\",\n \"url-join/v0\",\n \"url-parse-lax\",\n \"url-regex-safe\",\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 \"uuid/v2\",\n \"uuid/v3\",\n \"uws\",\n \"valdr-message\",\n \"valerie-browser\",\n \"vanillajs-datepicker\",\n \"vast-client\",\n \"vast-client/v2\",\n \"venn\",\n \"verovio\",\n \"vertx3-eventbus-client\",\n \"video.js\",\n \"videojs-contrib-quality-levels\",\n \"viewporter\",\n \"vimeo\",\n \"vinyl-paths\",\n \"vis\",\n \"vision\",\n \"vision/v4\",\n \"vk-openapi\",\n \"vmap\",\n \"vortex-web-client\",\n \"vscode-notebook-renderer\",\n \"vscode-webview\",\n \"vscode\",\n \"vue-chartkick\",\n \"vue-datetime\",\n \"vue-json-compare\",\n \"vue-ls\",\n \"vue-markdown\",\n \"vue-scroll-up\",\n \"vue-select\",\n \"vue-splitpane\",\n \"vue-tel-input\",\n \"vue2-datepicker\",\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 \"webrtc\",\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 \"why-did-you-update\",\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__custom-templated-path-webpack-plugin\",\n \"wordpress__customize-browser\",\n \"wordpress__library-export-default-webpack-plugin\",\n \"wordwrapjs\",\n \"workerb-api\",\n \"workgrid-core\",\n \"workgrid-toolbar\",\n \"wrap-ansi\",\n \"wreck\",\n \"wreck/v7\",\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 \"xmldom\",\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 \"yawn-yaml\",\n \"ydn-db\",\n \"yelp-fusion-plus\",\n \"youtube-dl\",\n \"youtube-player\",\n \"youtube\",\n \"zchat-browser\",\n \"zedit__upf\",\n \"zeit__next-typescript\",\n \"zengin-code\",\n \"zip.js\",\n \"zmq\",\n \"zumly\",\n \"zwjsbridge\",\n \"zwlog-browser\"\n ]\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/68512/_response.json b/packages/mergebot/src/_tests/fixtures/68512/_response.json new file mode 100644 index 0000000000..81b93de7e1 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68512/_response.json @@ -0,0 +1,179 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM5mMjbY", + "title": "[DO NOT MERGE - infrastructure test] attw.json config edit", + "createdAt": "2024-02-06T22:19:53Z", + "author": { + "login": "andrewbranch", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 68512, + "state": "OPEN", + "headRefOid": "3cfdbf386128f18892a0e9c2cb73ba46fe325422", + "changedFiles": 1, + "additions": 0, + "deletions": 1, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "3cfdbf386128f18892a0e9c2cb73ba46fe325422", + "parents": { + "nodes": [ + { + "oid": "9b8dcf375c4aec95878058c610f8279c22527fa0", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 20510312099, + "app": { + "name": "Azure Pipelines", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3cfdbf386128f18892a0e9c2cb73ba46fe325422/checks?check_suite_id=20510312099", + "status": "QUEUED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3cfdbf386128f18892a0e9c2cb73ba46fe325422/checks?check_suite_id=20510312099", + "checkRuns": { + "nodes": [], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-02-06T22:19:07Z", + "workflowRun": null, + "__typename": "CheckSuite" + }, + { + "databaseId": 20510312118, + "app": { + "name": "Dependabot", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3cfdbf386128f18892a0e9c2cb73ba46fe325422/checks?check_suite_id=20510312118", + "status": "QUEUED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3cfdbf386128f18892a0e9c2cb73ba46fe325422/checks?check_suite_id=20510312118", + "checkRuns": { + "nodes": [], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-02-06T22:19:07Z", + "workflowRun": null, + "__typename": "CheckSuite" + }, + { + "databaseId": 20510335792, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3cfdbf386128f18892a0e9c2cb73ba46fe325422/checks?check_suite_id=20510335792", + "status": "QUEUED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3cfdbf386128f18892a0e9c2cb73ba46fe325422/checks?check_suite_id=20510335792", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-02-06T22:19:57Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2024-02-06T22:19:05Z", + "committedDate": "2024-02-06T22:19:05Z", + "pushedDate": null, + "oid": "3cfdbf386128f18892a0e9c2cb73ba46fe325422", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 0, + "nodes": [], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 1, + "nodes": [ + { + "path": "attw.json", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/68512/derived.json b/packages/mergebot/src/_tests/fixtures/68512/derived.json new file mode 100644 index 0000000000..fab5243696 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68512/derived.json @@ -0,0 +1,34 @@ +{ + "type": "info", + "now": "2024-02-06T22:20:03.215Z", + "pr_number": 68512, + "author": "andrewbranch", + "headCommitOid": "3cfdbf386128f18892a0e9c2cb73ba46fe325422", + "mergeBaseOid": "9b8dcf375c4aec95878058c610f8279c22527fa0", + "lastPushDate": "2024-02-06T22:19:53.000Z", + "lastActivityDate": "2024-02-06T22:19:53.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": null, + "kind": "edit", + "files": [ + { + "path": "attw.json", + "kind": "infrastructure" + } + ], + "owners": [], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical", + "isSafeInfrastructureEdit": false + } + ], + "reviews": [], + "ciResult": "unknown" +} diff --git a/packages/mergebot/src/_tests/fixtures/68512/mutations.json b/packages/mergebot/src/_tests/fixtures/68512/mutations.json new file mode 100644 index 0000000000..3937e8024f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68512/mutations.json @@ -0,0 +1,40 @@ +[ + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "PR_kwDOAFz6BM5mMjbY", + "body": "@andrewbranch Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 0 packages in this PR (and infra files)\n\n* Infra files\n - [`attw.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68512/files/3cfdbf386128f18892a0e9c2cb73ba46fe325422#diff-a9fbad9eaca1b40ea7a3a99b7efdd6db757c56afcf5998858c2c4594f17c0cd4)\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68512&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 A DT maintainer needs to approve changes that affect DT infrastructure ([`attw.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68512/files/3cfdbf386128f18892a0e9c2cb73ba46fe325422#diff-a9fbad9eaca1b40ea7a3a99b7efdd6db757c56afcf5998858c2c4594f17c0cd4))\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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwxNjA4MjA4ODM1" + ], + "labelableId": "PR_kwDOAFz6BM5mMjbY" + } + } + }, + { + "mutation": "mutation ($input: AddProjectCardInput!) {\n addProjectCard(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "contentId": "PR_kwDOAFz6BM5mMjbY", + "projectColumnId": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw" + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "subjectId": "PR_kwDOAFz6BM5mMjbY", + "body": "🔔 @andrewbranch — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68512/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/68512/result.json b/packages/mergebot/src/_tests/fixtures/68512/result.json new file mode 100644 index 0000000000..b6b5687d14 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68512/result.json @@ -0,0 +1,19 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Edits Infrastructure" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@andrewbranch Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\nThis PR touches some part of DefinitelyTyped infrastructure, so a DT maintainer will need to review it. This is rare — did you mean to do this?\n\n## 0 packages in this PR (and infra files)\n\n* Infra files\n - [`attw.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68512/files/3cfdbf386128f18892a0e9c2cb73ba46fe325422#diff-a9fbad9eaca1b40ea7a3a99b7efdd6db757c56afcf5998858c2c4594f17c0cd4)\n\n## Code Reviews\n\nThere aren't any other owners of this package, so a DT maintainer will review it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68512&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 A DT maintainer needs to approve changes that affect DT infrastructure ([`attw.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68512/files/3cfdbf386128f18892a0e9c2cb73ba46fe325422#diff-a9fbad9eaca1b40ea7a3a99b7efdd6db757c56afcf5998858c2c4594f17c0cd4))\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", + "status": "🔔 @andrewbranch — there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68512/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/68772/_downloads.json b/packages/mergebot/src/_tests/fixtures/68772/_downloads.json new file mode 100644 index 0000000000..ba3e8be1c3 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68772/_downloads.json @@ -0,0 +1,3 @@ +{ + "relationship.js": 21 +} diff --git a/packages/mergebot/src/_tests/fixtures/68772/_files.json b/packages/mergebot/src/_tests/fixtures/68772/_files.json new file mode 100644 index 0000000000..487463cb42 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68772/_files.json @@ -0,0 +1,6 @@ +{ + "3f76a3a2d73f3fe577d32ca07c73c79016707328:types/relationship.js/package.json": "{\n \"private\": true,\n \"name\": \"@types/relationship.js\",\n \"version\": \"1.2.9999\",\n \"projects\": [\n \"https://passer-by.com/relationship/\"\n ],\n \"devDependencies\": {\n \"@types/relationship.js\": \"workspace:.\"\n },\n \"exports\": {\n \".\": {\n \"import\": \"./dist/relationship.min.d.mts\",\n \"require\": \"./dist/relationship.min.d.ts\",\n \"default\": \"./dist/relationship.min.d.ts\"\n },\n \"./mode\": {\n \"import\": \"./dist/relationship-mode.min.d.mts\",\n \"require\": \"./dist/relationship-mode.min.d.ts\",\n \"default\": \"./dist/relationship-mode.min.d.ts\"\n },\n \"./zh-HK\": {\n \"import\": \"./dist/relationship.min.d.mts\",\n \"require\": \"./dist/relationship.min.d.ts\",\n \"default\": \"./dist/relationship.min.d.ts\"\n },\n \"./zh-HK/mode\": {\n \"import\": \"./dist/relationship-mode.min.d.mts\",\n \"require\": \"./dist/relationship-mode.min.d.ts\",\n \"default\": \"./dist/relationship-mode.min.d.ts\"\n }\n },\n \"owners\": [\n {\n \"name\": \"whincwu\",\n \"githubUsername\": \"whinc\"\n }\n ]\n}\n", + "dd92afb5a03c591944601de73a58bf49bb31e1dc:types/relationship.js/package.json": "{\n \"private\": true,\n \"name\": \"@types/relationship.js\",\n \"version\": \"1.2.9999\",\n \"projects\": [\n \"https://passer-by.com/relationship/\"\n ],\n \"devDependencies\": {\n \"@types/relationship.js\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"whincwu\",\n \"githubUsername\": \"whinc\"\n }\n ]\n}\n", + "3f76a3a2d73f3fe577d32ca07c73c79016707328:types/relationship.js/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"node16\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictFunctionTypes\": true,\n \"strictNullChecks\": true,\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"dist/relationship.min.d.ts\",\n \"dist/relationship.min.d.mts\",\n \"dist/relationship-mode.min.d.ts\",\n \"dist/relationship-mode.min.d.mts\",\n \"relationship.js-tests.ts\"\n ]\n}\n", + "dd92afb5a03c591944601de73a58bf49bb31e1dc:types/relationship.js/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"node16\",\n \"lib\": [\n \"es6\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictFunctionTypes\": true,\n \"strictNullChecks\": true,\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"relationship.js-tests.ts\"\n ]\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/68772/_response.json b/packages/mergebot/src/_tests/fixtures/68772/_response.json new file mode 100644 index 0000000000..27c44afa91 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68772/_response.json @@ -0,0 +1,250 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM5n95b9", + "title": "[relationship.js] fix types after upstream restructuring", + "createdAt": "2024-02-26T21:09:25Z", + "author": { + "login": "jakebailey", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Untested Change", + "__typename": "Label" + }, + { + "name": "Check Config", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 68772, + "state": "OPEN", + "headRefOid": "3f76a3a2d73f3fe577d32ca07c73c79016707328", + "changedFiles": 7, + "additions": 86, + "deletions": 83, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "3f76a3a2d73f3fe577d32ca07c73c79016707328", + "parents": { + "nodes": [ + { + "oid": "dd92afb5a03c591944601de73a58bf49bb31e1dc", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 21138681532, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/3f76a3a2d73f3fe577d32ca07c73c79016707328/checks?check_suite_id=21138681532", + "status": "IN_PROGRESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/3f76a3a2d73f3fe577d32ca07c73c79016707328/checks?check_suite_id=21138681532", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-02-26T21:09:28Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2024-02-26T21:08:20Z", + "committedDate": "2024-02-26T21:08:20Z", + "pushedDate": null, + "oid": "3f76a3a2d73f3fe577d32ca07c73c79016707328", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 3, + "nodes": [ + { + "id": "IC_kwDOAFz6BM51I9v-", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1965284350, + "body": "@jakebailey Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n* `relationship.js` — [on npm](https://www.npmjs.com/package/relationship.js), [on unpkg](https://unpkg.com/browse/relationship.js@latest/)\n - Config files to check:\n - [`relationship.js/dist/relationship-mode.min.d.mts`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68772/files/3f76a3a2d73f3fe577d32ca07c73c79016707328#diff-4022014ff2d7b347660d53e41167cee333d9cdff03aed1ac76f4e83acc201cfc): edited\n - [`relationship.js/dist/relationship.min.d.mts`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68772/files/3f76a3a2d73f3fe577d32ca07c73c79016707328#diff-e67f141e10c4751946c0d9e25b13a45b2a98b2bc168885940ab75b51c2f8978a): edited\n\n## Code Reviews\n\nBecause this PR edits the configuration file, 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=68772&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 A DT maintainer needs to approve changes which affect module config files\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-02-26T21:10:06Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM51I9yZ", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1965284505, + "body": "Hey @jakebailey,\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-02-26T21:10:08Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM51I9y5", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1965284537, + "body": "🔔 @whinc — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68772/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-02-26T21:10:09Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 7, + "nodes": [ + { + "path": "types/relationship.js/dist/relationship-mode.min.d.mts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/relationship.js/dist/relationship-mode.min.d.ts", + "additions": 6, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/relationship.js/dist/relationship.min.d.mts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/relationship.js/dist/relationship.min.d.ts", + "additions": 48, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/relationship.js/index.d.ts", + "additions": 2, + "deletions": 83, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/relationship.js/package.json", + "additions": 22, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/relationship.js/tsconfig.json", + "additions": 4, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "Nw", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgV6pnI", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/68772/derived.json b/packages/mergebot/src/_tests/fixtures/68772/derived.json new file mode 100644 index 0000000000..c4047f5cd7 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68772/derived.json @@ -0,0 +1,60 @@ +{ + "type": "info", + "now": "2024-02-26T21:10:54.627Z", + "pr_number": 68772, + "author": "jakebailey", + "headCommitOid": "3f76a3a2d73f3fe577d32ca07c73c79016707328", + "mergeBaseOid": "dd92afb5a03c591944601de73a58bf49bb31e1dc", + "lastPushDate": "2024-02-26T21:09:25.000Z", + "lastActivityDate": "2024-02-26T21:09:25.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "relationship.js", + "kind": "edit", + "files": [ + { + "path": "types/relationship.js/dist/relationship-mode.min.d.mts", + "kind": "definition" + }, + { + "path": "types/relationship.js/dist/relationship-mode.min.d.ts", + "kind": "definition" + }, + { + "path": "types/relationship.js/dist/relationship.min.d.mts", + "kind": "definition" + }, + { + "path": "types/relationship.js/dist/relationship.min.d.ts", + "kind": "definition" + }, + { + "path": "types/relationship.js/index.d.ts", + "kind": "definition" + }, + { + "path": "types/relationship.js/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/relationship.js/tsconfig.json", + "kind": "package-meta-ok" + } + ], + "owners": [ + "whinc" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [], + "mainBotCommentID": 1965284350, + "ciResult": "unknown" +} diff --git a/packages/mergebot/src/_tests/fixtures/68772/mutations.json b/packages/mergebot/src/_tests/fixtures/68772/mutations.json new file mode 100644 index 0000000000..ab1411e020 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68772/mutations.json @@ -0,0 +1,22 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM51I9v-", + "body": "@jakebailey Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `relationship.js` — [on npm](https://www.npmjs.com/package/relationship.js), [on unpkg](https://unpkg.com/browse/relationship.js@latest/)\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=68772&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\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----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyMTU0ODE2NTQ5" + ], + "labelableId": "PR_kwDOAFz6BM5n95b9" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/68772/result.json b/packages/mergebot/src/_tests/fixtures/68772/result.json new file mode 100644 index 0000000000..02298a3383 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68772/result.json @@ -0,0 +1,23 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Untested Change" + ], + "responseComments": [ + { + "tag": "suggest-testing", + "status": "Hey @jakebailey,\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": "@jakebailey Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `relationship.js` — [on npm](https://www.npmjs.com/package/relationship.js), [on unpkg](https://unpkg.com/browse/relationship.js@latest/)\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=68772&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\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----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "pinging-reviewers", + "status": "🔔 @whinc — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68772/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/68908/_downloads.json b/packages/mergebot/src/_tests/fixtures/68908/_downloads.json new file mode 100644 index 0000000000..6980e4705a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68908/_downloads.json @@ -0,0 +1,3 @@ +{ + "node": 449699745 +} diff --git a/packages/mergebot/src/_tests/fixtures/68908/_files.json b/packages/mergebot/src/_tests/fixtures/68908/_files.json new file mode 100644 index 0000000000..bc28243ff5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68908/_files.json @@ -0,0 +1,14 @@ +{ + "b3eeaef096e86260fb5300d4e289257112644f86:types/node/package.json": "{\n \"private\": true,\n \"name\": \"@types/node\",\n \"version\": \"20.11.9999\",\n \"nonNpm\": \"conflict\",\n \"nonNpmDescription\": \"Node.js\",\n \"projects\": [\n \"https://nodejs.org/\"\n ],\n \"tsconfigs\": [\"tsconfig.dom.json\", \"tsconfig.non-dom.json\"],\n \"dependencies\": {\n \"undici-types\": \"~5.26.4\"\n },\n \"devDependencies\": {\n \"@types/node\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Microsoft TypeScript\",\n \"githubUsername\": \"Microsoft\"\n },\n {\n \"name\": \"Alberto Schiabel\",\n \"githubUsername\": \"jkomyno\"\n },\n {\n \"name\": \"Alvis HT Tang\",\n \"githubUsername\": \"alvis\"\n },\n {\n \"name\": \"Andrew Makarov\",\n \"githubUsername\": \"r3nya\"\n },\n {\n \"name\": \"Benjamin Toueg\",\n \"githubUsername\": \"btoueg\"\n },\n {\n \"name\": \"Chigozirim C.\",\n \"githubUsername\": \"smac89\"\n },\n {\n \"name\": \"David Junger\",\n \"githubUsername\": \"touffy\"\n },\n {\n \"name\": \"Deividas Bakanas\",\n \"githubUsername\": \"DeividasBakanas\"\n },\n {\n \"name\": \"Eugene Y. Q. Shen\",\n \"githubUsername\": \"eyqs\"\n },\n {\n \"name\": \"Hannes Magnusson\",\n \"githubUsername\": \"Hannes-Magnusson-CK\"\n },\n {\n \"name\": \"Huw\",\n \"githubUsername\": \"hoo29\"\n },\n {\n \"name\": \"Kelvin Jin\",\n \"githubUsername\": \"kjin\"\n },\n {\n \"name\": \"Klaus Meinhardt\",\n \"githubUsername\": \"ajafff\"\n },\n {\n \"name\": \"Lishude\",\n \"githubUsername\": \"islishude\"\n },\n {\n \"name\": \"Mariusz Wiktorczyk\",\n \"githubUsername\": \"mwiktorczyk\"\n },\n {\n \"name\": \"Mohsen Azimi\",\n \"githubUsername\": \"mohsen1\"\n },\n {\n \"name\": \"Nikita Galkin\",\n \"githubUsername\": \"galkin\"\n },\n {\n \"name\": \"Parambir Singh\",\n \"githubUsername\": \"parambirs\"\n },\n {\n \"name\": \"Sebastian Silbermann\",\n \"githubUsername\": \"eps1lon\"\n },\n {\n \"name\": \"Thomas den Hollander\",\n \"githubUsername\": \"ThomasdenH\"\n },\n {\n \"name\": \"Wilco Bakker\",\n \"githubUsername\": \"WilcoBakker\"\n },\n {\n \"name\": \"wwwy3y3\",\n \"githubUsername\": \"wwwy3y3\"\n },\n {\n \"name\": \"Samuel Ainsworth\",\n \"githubUsername\": \"samuela\"\n },\n {\n \"name\": \"Kyle Uehlein\",\n \"githubUsername\": \"kuehlein\"\n },\n {\n \"name\": \"Thanik Bhongbhibhat\",\n \"githubUsername\": \"bhongy\"\n },\n {\n \"name\": \"Marcin Kopacz\",\n \"githubUsername\": \"chyzwar\"\n },\n {\n \"name\": \"Trivikram Kamat\",\n \"githubUsername\": \"trivikr\"\n },\n {\n \"name\": \"Junxiao Shi\",\n \"githubUsername\": \"yoursunny\"\n },\n {\n \"name\": \"Ilia Baryshnikov\",\n \"githubUsername\": \"qwelias\"\n },\n {\n \"name\": \"ExE Boss\",\n \"githubUsername\": \"ExE-Boss\"\n },\n {\n \"name\": \"Piotr Błażejewicz\",\n \"githubUsername\": \"peterblazejewicz\"\n },\n {\n \"name\": \"Anna Henningsen\",\n \"githubUsername\": \"addaleax\"\n },\n {\n \"name\": \"Victor Perin\",\n \"githubUsername\": \"victorperin\"\n },\n {\n \"name\": \"Yongsheng Zhang\",\n \"githubUsername\": \"ZYSzys\"\n },\n {\n \"name\": \"NodeJS Contributors\",\n \"githubUsername\": \"NodeJS\"\n },\n {\n \"name\": \"Linus Unnebäck\",\n \"githubUsername\": \"LinusU\"\n },\n {\n \"name\": \"wafuwafu13\",\n \"githubUsername\": \"wafuwafu13\"\n },\n {\n \"name\": \"Matteo Collina\",\n \"githubUsername\": \"mcollina\"\n },\n {\n \"name\": \"Dmitry Semigradsky\",\n \"githubUsername\": \"Semigradsky\"\n }\n ]\n}\n", + "aae31da572363bed190729b826be689a2423aac5:types/node/package.json": "{\n \"private\": true,\n \"name\": \"@types/node\",\n \"version\": \"20.11.9999\",\n \"nonNpm\": \"conflict\",\n \"nonNpmDescription\": \"Node.js\",\n \"projects\": [\n \"https://nodejs.org/\"\n ],\n \"types\": \"index\",\n \"typesVersions\": {\n \"<=4.8\": {\n \"*\": [\n \"ts4.8/*\"\n ]\n }\n },\n \"dependencies\": {\n \"undici-types\": \"~5.26.4\"\n },\n \"devDependencies\": {\n \"@types/node\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Microsoft TypeScript\",\n \"githubUsername\": \"Microsoft\"\n },\n {\n \"name\": \"Alberto Schiabel\",\n \"githubUsername\": \"jkomyno\"\n },\n {\n \"name\": \"Alvis HT Tang\",\n \"githubUsername\": \"alvis\"\n },\n {\n \"name\": \"Andrew Makarov\",\n \"githubUsername\": \"r3nya\"\n },\n {\n \"name\": \"Benjamin Toueg\",\n \"githubUsername\": \"btoueg\"\n },\n {\n \"name\": \"Chigozirim C.\",\n \"githubUsername\": \"smac89\"\n },\n {\n \"name\": \"David Junger\",\n \"githubUsername\": \"touffy\"\n },\n {\n \"name\": \"Deividas Bakanas\",\n \"githubUsername\": \"DeividasBakanas\"\n },\n {\n \"name\": \"Eugene Y. Q. Shen\",\n \"githubUsername\": \"eyqs\"\n },\n {\n \"name\": \"Hannes Magnusson\",\n \"githubUsername\": \"Hannes-Magnusson-CK\"\n },\n {\n \"name\": \"Huw\",\n \"githubUsername\": \"hoo29\"\n },\n {\n \"name\": \"Kelvin Jin\",\n \"githubUsername\": \"kjin\"\n },\n {\n \"name\": \"Klaus Meinhardt\",\n \"githubUsername\": \"ajafff\"\n },\n {\n \"name\": \"Lishude\",\n \"githubUsername\": \"islishude\"\n },\n {\n \"name\": \"Mariusz Wiktorczyk\",\n \"githubUsername\": \"mwiktorczyk\"\n },\n {\n \"name\": \"Mohsen Azimi\",\n \"githubUsername\": \"mohsen1\"\n },\n {\n \"name\": \"Nikita Galkin\",\n \"githubUsername\": \"galkin\"\n },\n {\n \"name\": \"Parambir Singh\",\n \"githubUsername\": \"parambirs\"\n },\n {\n \"name\": \"Sebastian Silbermann\",\n \"githubUsername\": \"eps1lon\"\n },\n {\n \"name\": \"Thomas den Hollander\",\n \"githubUsername\": \"ThomasdenH\"\n },\n {\n \"name\": \"Wilco Bakker\",\n \"githubUsername\": \"WilcoBakker\"\n },\n {\n \"name\": \"wwwy3y3\",\n \"githubUsername\": \"wwwy3y3\"\n },\n {\n \"name\": \"Samuel Ainsworth\",\n \"githubUsername\": \"samuela\"\n },\n {\n \"name\": \"Kyle Uehlein\",\n \"githubUsername\": \"kuehlein\"\n },\n {\n \"name\": \"Thanik Bhongbhibhat\",\n \"githubUsername\": \"bhongy\"\n },\n {\n \"name\": \"Marcin Kopacz\",\n \"githubUsername\": \"chyzwar\"\n },\n {\n \"name\": \"Trivikram Kamat\",\n \"githubUsername\": \"trivikr\"\n },\n {\n \"name\": \"Junxiao Shi\",\n \"githubUsername\": \"yoursunny\"\n },\n {\n \"name\": \"Ilia Baryshnikov\",\n \"githubUsername\": \"qwelias\"\n },\n {\n \"name\": \"ExE Boss\",\n \"githubUsername\": \"ExE-Boss\"\n },\n {\n \"name\": \"Piotr Błażejewicz\",\n \"githubUsername\": \"peterblazejewicz\"\n },\n {\n \"name\": \"Anna Henningsen\",\n \"githubUsername\": \"addaleax\"\n },\n {\n \"name\": \"Victor Perin\",\n \"githubUsername\": \"victorperin\"\n },\n {\n \"name\": \"Yongsheng Zhang\",\n \"githubUsername\": \"ZYSzys\"\n },\n {\n \"name\": \"NodeJS Contributors\",\n \"githubUsername\": \"NodeJS\"\n },\n {\n \"name\": \"Linus Unnebäck\",\n \"githubUsername\": \"LinusU\"\n },\n {\n \"name\": \"wafuwafu13\",\n \"githubUsername\": \"wafuwafu13\"\n },\n {\n \"name\": \"Matteo Collina\",\n \"githubUsername\": \"mcollina\"\n },\n {\n \"name\": \"Dmitry Semigradsky\",\n \"githubUsername\": \"Semigradsky\"\n }\n ]\n}\n", + "b3eeaef096e86260fb5300d4e289257112644f86:types/node/tsconfig.json": "{\n \"files\": [\n \"index.d.ts\",\n \"node-tests.ts\",\n \"node-tests-dom.ts\",\n \"node-tests-non-dom.ts\"\n ],\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"target\": \"esnext\",\n \"lib\": [\n \"es6\",\n \"dom\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n }\n}\n", + "aae31da572363bed190729b826be689a2423aac5:types/node/tsconfig.json": "{\n \"files\": [\n \"index.d.ts\",\n \"node-tests.ts\"\n ],\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"target\": \"esnext\",\n \"lib\": [\n \"es6\",\n \"dom\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n }\n}\n", + "b3eeaef096e86260fb5300d4e289257112644f86:types/node/v16/package.json": "{\n \"private\": true,\n \"name\": \"@types/node\",\n \"version\": \"16.18.9999\",\n \"nonNpm\": \"conflict\",\n \"nonNpmDescription\": \"Node.js\",\n \"projects\": [\n \"https://nodejs.org/\"\n ],\n \"tsconfigs\": [\"tsconfig.dom.json\", \"tsconfig.non-dom.json\"],\n \"devDependencies\": {\n \"@types/node\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Microsoft TypeScript\",\n \"githubUsername\": \"Microsoft\"\n },\n {\n \"name\": \"Alberto Schiabel\",\n \"githubUsername\": \"jkomyno\"\n },\n {\n \"name\": \"Alvis HT Tang\",\n \"githubUsername\": \"alvis\"\n },\n {\n \"name\": \"Andrew Makarov\",\n \"githubUsername\": \"r3nya\"\n },\n {\n \"name\": \"Benjamin Toueg\",\n \"githubUsername\": \"btoueg\"\n },\n {\n \"name\": \"Chigozirim C.\",\n \"githubUsername\": \"smac89\"\n },\n {\n \"name\": \"David Junger\",\n \"githubUsername\": \"touffy\"\n },\n {\n \"name\": \"Deividas Bakanas\",\n \"githubUsername\": \"DeividasBakanas\"\n },\n {\n \"name\": \"Eugene Y. Q. Shen\",\n \"githubUsername\": \"eyqs\"\n },\n {\n \"name\": \"Hannes Magnusson\",\n \"githubUsername\": \"Hannes-Magnusson-CK\"\n },\n {\n \"name\": \"Huw\",\n \"githubUsername\": \"hoo29\"\n },\n {\n \"name\": \"Kelvin Jin\",\n \"githubUsername\": \"kjin\"\n },\n {\n \"name\": \"Klaus Meinhardt\",\n \"githubUsername\": \"ajafff\"\n },\n {\n \"name\": \"Lishude\",\n \"githubUsername\": \"islishude\"\n },\n {\n \"name\": \"Mariusz Wiktorczyk\",\n \"githubUsername\": \"mwiktorczyk\"\n },\n {\n \"name\": \"Mohsen Azimi\",\n \"githubUsername\": \"mohsen1\"\n },\n {\n \"name\": \"Nikita Galkin\",\n \"githubUsername\": \"galkin\"\n },\n {\n \"name\": \"Parambir Singh\",\n \"githubUsername\": \"parambirs\"\n },\n {\n \"name\": \"Sebastian Silbermann\",\n \"githubUsername\": \"eps1lon\"\n },\n {\n \"name\": \"Seth Westphal\",\n \"githubUsername\": \"westy92\"\n },\n {\n \"name\": \"Simon Schick\",\n \"githubUsername\": \"SimonSchick\"\n },\n {\n \"name\": \"Thomas den Hollander\",\n \"githubUsername\": \"ThomasdenH\"\n },\n {\n \"name\": \"Wilco Bakker\",\n \"githubUsername\": \"WilcoBakker\"\n },\n {\n \"name\": \"wwwy3y3\",\n \"githubUsername\": \"wwwy3y3\"\n },\n {\n \"name\": \"Samuel Ainsworth\",\n \"githubUsername\": \"samuela\"\n },\n {\n \"name\": \"Kyle Uehlein\",\n \"githubUsername\": \"kuehlein\"\n },\n {\n \"name\": \"Thanik Bhongbhibhat\",\n \"githubUsername\": \"bhongy\"\n },\n {\n \"name\": \"Marcin Kopacz\",\n \"githubUsername\": \"chyzwar\"\n },\n {\n \"name\": \"Trivikram Kamat\",\n \"githubUsername\": \"trivikr\"\n },\n {\n \"name\": \"Junxiao Shi\",\n \"githubUsername\": \"yoursunny\"\n },\n {\n \"name\": \"Ilia Baryshnikov\",\n \"githubUsername\": \"qwelias\"\n },\n {\n \"name\": \"ExE Boss\",\n \"githubUsername\": \"ExE-Boss\"\n },\n {\n \"name\": \"Piotr Błażejewicz\",\n \"githubUsername\": \"peterblazejewicz\"\n },\n {\n \"name\": \"Anna Henningsen\",\n \"githubUsername\": \"addaleax\"\n },\n {\n \"name\": \"Victor Perin\",\n \"githubUsername\": \"victorperin\"\n },\n {\n \"name\": \"Yongsheng Zhang\",\n \"githubUsername\": \"ZYSzys\"\n },\n {\n \"name\": \"NodeJS Contributors\",\n \"githubUsername\": \"NodeJS\"\n },\n {\n \"name\": \"Linus Unnebäck\",\n \"githubUsername\": \"LinusU\"\n },\n {\n \"name\": \"wafuwafu13\",\n \"githubUsername\": \"wafuwafu13\"\n }\n ]\n}\n", + "aae31da572363bed190729b826be689a2423aac5:types/node/v16/package.json": "{\n \"private\": true,\n \"name\": \"@types/node\",\n \"version\": \"16.18.9999\",\n \"nonNpm\": \"conflict\",\n \"nonNpmDescription\": \"Node.js\",\n \"projects\": [\n \"https://nodejs.org/\"\n ],\n \"types\": \"index\",\n \"typesVersions\": {\n \"<=4.8\": {\n \"*\": [\n \"ts4.8/*\"\n ]\n }\n },\n \"devDependencies\": {\n \"@types/node\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Microsoft TypeScript\",\n \"githubUsername\": \"Microsoft\"\n },\n {\n \"name\": \"Alberto Schiabel\",\n \"githubUsername\": \"jkomyno\"\n },\n {\n \"name\": \"Alvis HT Tang\",\n \"githubUsername\": \"alvis\"\n },\n {\n \"name\": \"Andrew Makarov\",\n \"githubUsername\": \"r3nya\"\n },\n {\n \"name\": \"Benjamin Toueg\",\n \"githubUsername\": \"btoueg\"\n },\n {\n \"name\": \"Chigozirim C.\",\n \"githubUsername\": \"smac89\"\n },\n {\n \"name\": \"David Junger\",\n \"githubUsername\": \"touffy\"\n },\n {\n \"name\": \"Deividas Bakanas\",\n \"githubUsername\": \"DeividasBakanas\"\n },\n {\n \"name\": \"Eugene Y. Q. Shen\",\n \"githubUsername\": \"eyqs\"\n },\n {\n \"name\": \"Hannes Magnusson\",\n \"githubUsername\": \"Hannes-Magnusson-CK\"\n },\n {\n \"name\": \"Huw\",\n \"githubUsername\": \"hoo29\"\n },\n {\n \"name\": \"Kelvin Jin\",\n \"githubUsername\": \"kjin\"\n },\n {\n \"name\": \"Klaus Meinhardt\",\n \"githubUsername\": \"ajafff\"\n },\n {\n \"name\": \"Lishude\",\n \"githubUsername\": \"islishude\"\n },\n {\n \"name\": \"Mariusz Wiktorczyk\",\n \"githubUsername\": \"mwiktorczyk\"\n },\n {\n \"name\": \"Mohsen Azimi\",\n \"githubUsername\": \"mohsen1\"\n },\n {\n \"name\": \"Nikita Galkin\",\n \"githubUsername\": \"galkin\"\n },\n {\n \"name\": \"Parambir Singh\",\n \"githubUsername\": \"parambirs\"\n },\n {\n \"name\": \"Sebastian Silbermann\",\n \"githubUsername\": \"eps1lon\"\n },\n {\n \"name\": \"Seth Westphal\",\n \"githubUsername\": \"westy92\"\n },\n {\n \"name\": \"Simon Schick\",\n \"githubUsername\": \"SimonSchick\"\n },\n {\n \"name\": \"Thomas den Hollander\",\n \"githubUsername\": \"ThomasdenH\"\n },\n {\n \"name\": \"Wilco Bakker\",\n \"githubUsername\": \"WilcoBakker\"\n },\n {\n \"name\": \"wwwy3y3\",\n \"githubUsername\": \"wwwy3y3\"\n },\n {\n \"name\": \"Samuel Ainsworth\",\n \"githubUsername\": \"samuela\"\n },\n {\n \"name\": \"Kyle Uehlein\",\n \"githubUsername\": \"kuehlein\"\n },\n {\n \"name\": \"Thanik Bhongbhibhat\",\n \"githubUsername\": \"bhongy\"\n },\n {\n \"name\": \"Marcin Kopacz\",\n \"githubUsername\": \"chyzwar\"\n },\n {\n \"name\": \"Trivikram Kamat\",\n \"githubUsername\": \"trivikr\"\n },\n {\n \"name\": \"Junxiao Shi\",\n \"githubUsername\": \"yoursunny\"\n },\n {\n \"name\": \"Ilia Baryshnikov\",\n \"githubUsername\": \"qwelias\"\n },\n {\n \"name\": \"ExE Boss\",\n \"githubUsername\": \"ExE-Boss\"\n },\n {\n \"name\": \"Piotr Błażejewicz\",\n \"githubUsername\": \"peterblazejewicz\"\n },\n {\n \"name\": \"Anna Henningsen\",\n \"githubUsername\": \"addaleax\"\n },\n {\n \"name\": \"Victor Perin\",\n \"githubUsername\": \"victorperin\"\n },\n {\n \"name\": \"Yongsheng Zhang\",\n \"githubUsername\": \"ZYSzys\"\n },\n {\n \"name\": \"NodeJS Contributors\",\n \"githubUsername\": \"NodeJS\"\n },\n {\n \"name\": \"Linus Unnebäck\",\n \"githubUsername\": \"LinusU\"\n },\n {\n \"name\": \"wafuwafu13\",\n \"githubUsername\": \"wafuwafu13\"\n }\n ]\n}\n", + "b3eeaef096e86260fb5300d4e289257112644f86:types/node/v16/tsconfig.json": "{\n \"files\": [\n \"index.d.ts\",\n \"node-tests.ts\",\n \"node-tests-dom.ts\",\n \"node-tests-non-dom.ts\"\n ],\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"target\": \"esnext\",\n \"lib\": [\n \"es6\",\n \"dom\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n }\n}\n", + "aae31da572363bed190729b826be689a2423aac5:types/node/v16/tsconfig.json": "{\n \"files\": [\n \"index.d.ts\",\n \"node-tests.ts\"\n ],\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"target\": \"esnext\",\n \"lib\": [\n \"es6\",\n \"dom\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n }\n}\n", + "b3eeaef096e86260fb5300d4e289257112644f86:types/node/v18/package.json": "{\n \"private\": true,\n \"name\": \"@types/node\",\n \"version\": \"18.19.9999\",\n \"nonNpm\": \"conflict\",\n \"nonNpmDescription\": \"Node.js\",\n \"projects\": [\n \"https://nodejs.org/\"\n ],\n \"tsconfigs\": [\"tsconfig.dom.json\", \"tsconfig.non-dom.json\"],\n \"dependencies\": {\n \"undici-types\": \"~5.26.4\"\n },\n \"devDependencies\": {\n \"@types/node\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Microsoft TypeScript\",\n \"githubUsername\": \"Microsoft\"\n },\n {\n \"name\": \"Alberto Schiabel\",\n \"githubUsername\": \"jkomyno\"\n },\n {\n \"name\": \"Alvis HT Tang\",\n \"githubUsername\": \"alvis\"\n },\n {\n \"name\": \"Andrew Makarov\",\n \"githubUsername\": \"r3nya\"\n },\n {\n \"name\": \"Benjamin Toueg\",\n \"githubUsername\": \"btoueg\"\n },\n {\n \"name\": \"Chigozirim C.\",\n \"githubUsername\": \"smac89\"\n },\n {\n \"name\": \"David Junger\",\n \"githubUsername\": \"touffy\"\n },\n {\n \"name\": \"Deividas Bakanas\",\n \"githubUsername\": \"DeividasBakanas\"\n },\n {\n \"name\": \"Eugene Y. Q. Shen\",\n \"githubUsername\": \"eyqs\"\n },\n {\n \"name\": \"Hannes Magnusson\",\n \"githubUsername\": \"Hannes-Magnusson-CK\"\n },\n {\n \"name\": \"Huw\",\n \"githubUsername\": \"hoo29\"\n },\n {\n \"name\": \"Kelvin Jin\",\n \"githubUsername\": \"kjin\"\n },\n {\n \"name\": \"Klaus Meinhardt\",\n \"githubUsername\": \"ajafff\"\n },\n {\n \"name\": \"Lishude\",\n \"githubUsername\": \"islishude\"\n },\n {\n \"name\": \"Mariusz Wiktorczyk\",\n \"githubUsername\": \"mwiktorczyk\"\n },\n {\n \"name\": \"Mohsen Azimi\",\n \"githubUsername\": \"mohsen1\"\n },\n {\n \"name\": \"Nikita Galkin\",\n \"githubUsername\": \"galkin\"\n },\n {\n \"name\": \"Parambir Singh\",\n \"githubUsername\": \"parambirs\"\n },\n {\n \"name\": \"Sebastian Silbermann\",\n \"githubUsername\": \"eps1lon\"\n },\n {\n \"name\": \"Simon Schick\",\n \"githubUsername\": \"SimonSchick\"\n },\n {\n \"name\": \"Thomas den Hollander\",\n \"githubUsername\": \"ThomasdenH\"\n },\n {\n \"name\": \"Wilco Bakker\",\n \"githubUsername\": \"WilcoBakker\"\n },\n {\n \"name\": \"wwwy3y3\",\n \"githubUsername\": \"wwwy3y3\"\n },\n {\n \"name\": \"Samuel Ainsworth\",\n \"githubUsername\": \"samuela\"\n },\n {\n \"name\": \"Kyle Uehlein\",\n \"githubUsername\": \"kuehlein\"\n },\n {\n \"name\": \"Thanik Bhongbhibhat\",\n \"githubUsername\": \"bhongy\"\n },\n {\n \"name\": \"Marcin Kopacz\",\n \"githubUsername\": \"chyzwar\"\n },\n {\n \"name\": \"Trivikram Kamat\",\n \"githubUsername\": \"trivikr\"\n },\n {\n \"name\": \"Junxiao Shi\",\n \"githubUsername\": \"yoursunny\"\n },\n {\n \"name\": \"Ilia Baryshnikov\",\n \"githubUsername\": \"qwelias\"\n },\n {\n \"name\": \"ExE Boss\",\n \"githubUsername\": \"ExE-Boss\"\n },\n {\n \"name\": \"Piotr Błażejewicz\",\n \"githubUsername\": \"peterblazejewicz\"\n },\n {\n \"name\": \"Anna Henningsen\",\n \"githubUsername\": \"addaleax\"\n },\n {\n \"name\": \"Victor Perin\",\n \"githubUsername\": \"victorperin\"\n },\n {\n \"name\": \"Yongsheng Zhang\",\n \"githubUsername\": \"ZYSzys\"\n },\n {\n \"name\": \"NodeJS Contributors\",\n \"githubUsername\": \"NodeJS\"\n },\n {\n \"name\": \"Linus Unnebäck\",\n \"githubUsername\": \"LinusU\"\n },\n {\n \"name\": \"wafuwafu13\",\n \"githubUsername\": \"wafuwafu13\"\n },\n {\n \"name\": \"Matteo Collina\",\n \"githubUsername\": \"mcollina\"\n },\n {\n \"name\": \"Dmitry Semigradsky\",\n \"githubUsername\": \"Semigradsky\"\n }\n ]\n}\n", + "aae31da572363bed190729b826be689a2423aac5:types/node/v18/package.json": "{\n \"private\": true,\n \"name\": \"@types/node\",\n \"version\": \"18.19.9999\",\n \"nonNpm\": \"conflict\",\n \"nonNpmDescription\": \"Node.js\",\n \"projects\": [\n \"https://nodejs.org/\"\n ],\n \"types\": \"index\",\n \"typesVersions\": {\n \"<=4.8\": {\n \"*\": [\n \"ts4.8/*\"\n ]\n }\n },\n \"dependencies\": {\n \"undici-types\": \"~5.26.4\"\n },\n \"devDependencies\": {\n \"@types/node\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Microsoft TypeScript\",\n \"githubUsername\": \"Microsoft\"\n },\n {\n \"name\": \"Alberto Schiabel\",\n \"githubUsername\": \"jkomyno\"\n },\n {\n \"name\": \"Alvis HT Tang\",\n \"githubUsername\": \"alvis\"\n },\n {\n \"name\": \"Andrew Makarov\",\n \"githubUsername\": \"r3nya\"\n },\n {\n \"name\": \"Benjamin Toueg\",\n \"githubUsername\": \"btoueg\"\n },\n {\n \"name\": \"Chigozirim C.\",\n \"githubUsername\": \"smac89\"\n },\n {\n \"name\": \"David Junger\",\n \"githubUsername\": \"touffy\"\n },\n {\n \"name\": \"Deividas Bakanas\",\n \"githubUsername\": \"DeividasBakanas\"\n },\n {\n \"name\": \"Eugene Y. Q. Shen\",\n \"githubUsername\": \"eyqs\"\n },\n {\n \"name\": \"Hannes Magnusson\",\n \"githubUsername\": \"Hannes-Magnusson-CK\"\n },\n {\n \"name\": \"Huw\",\n \"githubUsername\": \"hoo29\"\n },\n {\n \"name\": \"Kelvin Jin\",\n \"githubUsername\": \"kjin\"\n },\n {\n \"name\": \"Klaus Meinhardt\",\n \"githubUsername\": \"ajafff\"\n },\n {\n \"name\": \"Lishude\",\n \"githubUsername\": \"islishude\"\n },\n {\n \"name\": \"Mariusz Wiktorczyk\",\n \"githubUsername\": \"mwiktorczyk\"\n },\n {\n \"name\": \"Mohsen Azimi\",\n \"githubUsername\": \"mohsen1\"\n },\n {\n \"name\": \"Nikita Galkin\",\n \"githubUsername\": \"galkin\"\n },\n {\n \"name\": \"Parambir Singh\",\n \"githubUsername\": \"parambirs\"\n },\n {\n \"name\": \"Sebastian Silbermann\",\n \"githubUsername\": \"eps1lon\"\n },\n {\n \"name\": \"Simon Schick\",\n \"githubUsername\": \"SimonSchick\"\n },\n {\n \"name\": \"Thomas den Hollander\",\n \"githubUsername\": \"ThomasdenH\"\n },\n {\n \"name\": \"Wilco Bakker\",\n \"githubUsername\": \"WilcoBakker\"\n },\n {\n \"name\": \"wwwy3y3\",\n \"githubUsername\": \"wwwy3y3\"\n },\n {\n \"name\": \"Samuel Ainsworth\",\n \"githubUsername\": \"samuela\"\n },\n {\n \"name\": \"Kyle Uehlein\",\n \"githubUsername\": \"kuehlein\"\n },\n {\n \"name\": \"Thanik Bhongbhibhat\",\n \"githubUsername\": \"bhongy\"\n },\n {\n \"name\": \"Marcin Kopacz\",\n \"githubUsername\": \"chyzwar\"\n },\n {\n \"name\": \"Trivikram Kamat\",\n \"githubUsername\": \"trivikr\"\n },\n {\n \"name\": \"Junxiao Shi\",\n \"githubUsername\": \"yoursunny\"\n },\n {\n \"name\": \"Ilia Baryshnikov\",\n \"githubUsername\": \"qwelias\"\n },\n {\n \"name\": \"ExE Boss\",\n \"githubUsername\": \"ExE-Boss\"\n },\n {\n \"name\": \"Piotr Błażejewicz\",\n \"githubUsername\": \"peterblazejewicz\"\n },\n {\n \"name\": \"Anna Henningsen\",\n \"githubUsername\": \"addaleax\"\n },\n {\n \"name\": \"Victor Perin\",\n \"githubUsername\": \"victorperin\"\n },\n {\n \"name\": \"Yongsheng Zhang\",\n \"githubUsername\": \"ZYSzys\"\n },\n {\n \"name\": \"NodeJS Contributors\",\n \"githubUsername\": \"NodeJS\"\n },\n {\n \"name\": \"Linus Unnebäck\",\n \"githubUsername\": \"LinusU\"\n },\n {\n \"name\": \"wafuwafu13\",\n \"githubUsername\": \"wafuwafu13\"\n },\n {\n \"name\": \"Matteo Collina\",\n \"githubUsername\": \"mcollina\"\n },\n {\n \"name\": \"Dmitry Semigradsky\",\n \"githubUsername\": \"Semigradsky\"\n }\n ]\n}\n", + "b3eeaef096e86260fb5300d4e289257112644f86:types/node/v18/tsconfig.json": "{\n \"files\": [\n \"index.d.ts\",\n \"node-tests.ts\",\n \"node-tests-dom.ts\",\n \"node-tests-non-dom.ts\"\n ],\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"target\": \"esnext\",\n \"lib\": [\n \"es6\",\n \"dom\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n }\n}\n", + "aae31da572363bed190729b826be689a2423aac5:types/node/v18/tsconfig.json": "{\n \"files\": [\n \"index.d.ts\",\n \"node-tests.ts\"\n ],\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"target\": \"esnext\",\n \"lib\": [\n \"es6\",\n \"dom\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n }\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/68908/_response.json b/packages/mergebot/src/_tests/fixtures/68908/_response.json new file mode 100644 index 0000000000..609f3333d6 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68908/_response.json @@ -0,0 +1,2414 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM5oxruv", + "title": "[node] Remove ts4.8 in favor of new multi-tsconfig testing", + "createdAt": "2024-03-05T23:23:43Z", + "author": { + "login": "jakebailey", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Critical package", + "__typename": "Label" + }, + { + "name": "Check Config", + "__typename": "Label" + }, + { + "name": "Huge Change", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 68908, + "state": "OPEN", + "headRefOid": "b3eeaef096e86260fb5300d4e289257112644f86", + "changedFiles": 352, + "additions": 211, + "deletions": 167601, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "79169ff2095a8daed0279eec38e426f61b2f97c7", + "parents": { + "nodes": [ + { + "oid": "aae31da572363bed190729b826be689a2423aac5", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "3e0ae11e8f4cb7ac8a2c18e58093b999c0f4a7a6", + "parents": { + "nodes": [ + { + "oid": "79169ff2095a8daed0279eec38e426f61b2f97c7", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "b3eeaef096e86260fb5300d4e289257112644f86", + "parents": { + "nodes": [ + { + "oid": "3e0ae11e8f4cb7ac8a2c18e58093b999c0f4a7a6", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [ + { + "createdAt": "2024-03-08T18:34:50Z", + "__typename": "ReadyForReviewEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2024-03-08T18:35:37Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 21533634431, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/b3eeaef096e86260fb5300d4e289257112644f86/checks?check_suite_id=21533634431", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/b3eeaef096e86260fb5300d4e289257112644f86/checks?check_suite_id=21533634431", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-03-08T18:17:42Z", + "workflowRun": { + "file": { + "path": ".github/workflows/lint-md.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + }, + { + "databaseId": 21533634443, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": null, + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/b3eeaef096e86260fb5300d4e289257112644f86/checks?check_suite_id=21533634443", + "status": "IN_PROGRESS", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/b3eeaef096e86260fb5300d4e289257112644f86/checks?check_suite_id=21533634443", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-03-08T18:17:42Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2024-03-06T02:51:10Z", + "committedDate": "2024-03-08T18:17:34Z", + "pushedDate": null, + "oid": "b3eeaef096e86260fb5300d4e289257112644f86", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 4, + "nodes": [ + { + "id": "IC_kwDOAFz6BM52BJog", + "author": { + "login": "jakebailey", + "__typename": "User" + }, + "databaseId": 1980013088, + "body": "Well, the minimum TS version bump breaks basically everything, so I'll just sit on this until 4.6 is gone.", + "createdAt": "2024-03-06T03:31:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM52TQQ5", + "author": { + "login": "jakebailey", + "__typename": "User" + }, + "databaseId": 1984758841, + "body": "Yay, it works (with the PR). Still want to think a little more about this since think other packages are wanting to have multiple tsconfigs for other uses (e.g. testing JSX with more than just react).", + "createdAt": "2024-03-07T23:11:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM52Yyvs", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1986210796, + "body": "@jakebailey Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n* `node` — [on npm](https://www.npmjs.com/package/node), [on unpkg](https://unpkg.com/browse/node@latest/)\n - Config files to check:\n - [`node/ts4.8/scripts/generate-docs/.gitignore`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/files/b3eeaef096e86260fb5300d4e289257112644f86#diff-91526815b4e9495a4a3c4fc39e0d0ec54cfde836d5fba3a1ed2357f249d7cba7): edited\n - [`node/ts4.8/scripts/generate-inspector/inspector.d.ts.template`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/files/b3eeaef096e86260fb5300d4e289257112644f86#diff-451f80f4367421783eca707351dd71c71207e031bc5dff3a4d0b95058e84c7f7): edited\n - [`node/tsconfig.dom.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/files/b3eeaef096e86260fb5300d4e289257112644f86#diff-d86d434c42274d32be0840a33d9da863f2f5ec89f1b3776cb3d4f60fb312f2cb): edited\n - [`node/tsconfig.non-dom.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/files/b3eeaef096e86260fb5300d4e289257112644f86#diff-2a39081f1dc1fafb5465db52779cb19416dae0e79129a3f589dd15eedeb54331): edited\n - [`node/v16/tsconfig.dom.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/files/b3eeaef096e86260fb5300d4e289257112644f86#diff-bf27ee419bcfbee0f6a6d4766ad550eefb067a121450e8bebf33e2e9d64f116b): edited\n - [`node/v16/tsconfig.non-dom.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/files/b3eeaef096e86260fb5300d4e289257112644f86#diff-145b3c6cb77408a271d24ee964b03701e20e8fb1fe2b3ae7e4a33055d2174d9b): edited\n - [`node/v18/tsconfig.dom.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/files/b3eeaef096e86260fb5300d4e289257112644f86#diff-69e3bedcab15965308f94e9c546dc1a02b32c3673636290fa29b4466c569424d): edited\n - [`node/v18/tsconfig.non-dom.json`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/files/b3eeaef096e86260fb5300d4e289257112644f86#diff-3f16313b033115fe3a2799d1569c1a910f7bed679c392296eb5aeaa041383cce): edited\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68908&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 A DT maintainer needs to approve changes which affect module config files\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-03-08T18:35:35Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM52Yywm", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 1986210854, + "body": "🔔 @Microsoft @jkomyno @alvis @r3nya @btoueg @smac89 @touffy @DeividasBakanas @eyqs @Hannes-Magnusson-CK @hoo29 @kjin @ajafff @islishude @mwiktorczyk @mohsen1 @galkin @parambirs @eps1lon @ThomasdenH @WilcoBakker @wwwy3y3 @samuela @kuehlein @bhongy @chyzwar @trivikr @yoursunny @qwelias @ExE-Boss @peterblazejewicz @addaleax @victorperin @ZYSzys @NodeJS @LinusU @wafuwafu13 @mcollina @Semigradsky — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/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-03-08T18:35:38Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 352, + "nodes": [ + { + "path": "types/node/node-tests-dom.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/node-tests-non-dom.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/node-tests.ts", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/package.json", + "additions": 1, + "deletions": 8, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/test/events-dom.ts", + "additions": 0, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/test/events-non-dom.ts", + "additions": 0, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/test/globals-dom.ts", + "additions": 50, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/test/globals-non-dom.ts", + "additions": 0, + "deletions": 54, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/test/globals.ts", + "additions": 0, + "deletions": 51, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/test/perf_hooks-dom.ts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/test/perf_hooks-non-dom.ts", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/test/perf_hooks.ts", + "additions": 0, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/assert.d.ts", + "additions": 0, + "deletions": 996, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/assert/strict.d.ts", + "additions": 0, + "deletions": 8, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/async_hooks.d.ts", + "additions": 0, + "deletions": 539, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/buffer.d.ts", + "additions": 0, + "deletions": 2363, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/child_process.d.ts", + "additions": 0, + "deletions": 1540, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/cluster.d.ts", + "additions": 0, + "deletions": 432, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/console.d.ts", + "additions": 0, + "deletions": 415, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/constants.d.ts", + "additions": 0, + "deletions": 19, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/crypto.d.ts", + "additions": 0, + "deletions": 4487, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/dgram.d.ts", + "additions": 0, + "deletions": 596, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/diagnostics_channel.d.ts", + "additions": 0, + "deletions": 545, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/dns.d.ts", + "additions": 0, + "deletions": 809, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/dns/promises.d.ts", + "additions": 0, + "deletions": 425, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/dom-events.d.ts", + "additions": 0, + "deletions": 122, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/domain.d.ts", + "additions": 0, + "deletions": 170, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/events.d.ts", + "additions": 0, + "deletions": 896, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/fs.d.ts", + "additions": 0, + "deletions": 4311, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/fs/promises.d.ts", + "additions": 0, + "deletions": 1239, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/globals.d.ts", + "additions": 0, + "deletions": 411, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/globals.global.d.ts", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/http.d.ts", + "additions": 0, + "deletions": 1889, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/http2.d.ts", + "additions": 0, + "deletions": 2382, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/https.d.ts", + "additions": 0, + "deletions": 550, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/index.d.ts", + "additions": 0, + "deletions": 88, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/inspector.d.ts", + "additions": 0, + "deletions": 2747, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/module.d.ts", + "additions": 0, + "deletions": 315, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/net.d.ts", + "additions": 0, + "deletions": 954, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/node-tests.ts", + "additions": 0, + "deletions": 275, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/os.d.ts", + "additions": 0, + "deletions": 478, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/path.d.ts", + "additions": 0, + "deletions": 191, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/perf_hooks.d.ts", + "additions": 0, + "deletions": 645, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/process.d.ts", + "additions": 0, + "deletions": 1561, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/punycode.d.ts", + "additions": 0, + "deletions": 117, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/querystring.d.ts", + "additions": 0, + "deletions": 141, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/readline.d.ts", + "additions": 0, + "deletions": 539, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/readline/promises.d.ts", + "additions": 0, + "deletions": 150, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/repl.d.ts", + "additions": 0, + "deletions": 430, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/.gitignore", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/README.md", + "additions": 0, + "deletions": 50, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/ast-processing.ts", + "additions": 0, + "deletions": 564, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/ast-utils.ts", + "additions": 0, + "deletions": 113, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/docs.ts", + "additions": 0, + "deletions": 147, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/html-doc-processing.ts", + "additions": 0, + "deletions": 137, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/node-doc-processing.ts", + "additions": 0, + "deletions": 372, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/package.json", + "additions": 0, + "deletions": 16, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/tsconfig.json", + "additions": 0, + "deletions": 31, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/utils.ts", + "additions": 0, + "deletions": 45, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/README.md", + "additions": 0, + "deletions": 14, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/devtools-protocol-schema.ts", + "additions": 0, + "deletions": 78, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/event-emitter.ts", + "additions": 0, + "deletions": 80, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/generate-substitute-args.ts", + "additions": 0, + "deletions": 200, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/index.ts", + "additions": 0, + "deletions": 94, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/inspector.d.ts.template", + "additions": 0, + "deletions": 94, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/package.json", + "additions": 0, + "deletions": 14, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/tsconfig.json", + "additions": 0, + "deletions": 12, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/utils.ts", + "additions": 0, + "deletions": 105, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/html-doc-processing.ts", + "additions": 0, + "deletions": 137, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/new-version/new-version.ts", + "additions": 0, + "deletions": 74, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/new-version/package.json", + "additions": 0, + "deletions": 12, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/scripts/new-version/tsconfig.json", + "additions": 0, + "deletions": 17, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/stream.d.ts", + "additions": 0, + "deletions": 1701, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/stream/consumers.d.ts", + "additions": 0, + "deletions": 12, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/stream/promises.d.ts", + "additions": 0, + "deletions": 83, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/stream/web.d.ts", + "additions": 0, + "deletions": 366, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/string_decoder.d.ts", + "additions": 0, + "deletions": 67, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test.d.ts", + "additions": 0, + "deletions": 1465, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/assert.ts", + "additions": 0, + "deletions": 182, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/async_hooks.ts", + "additions": 0, + "deletions": 100, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/buffer.ts", + "additions": 0, + "deletions": 516, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/child_process.ts", + "additions": 0, + "deletions": 567, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/cluster.ts", + "additions": 0, + "deletions": 27, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/console.ts", + "additions": 0, + "deletions": 84, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/constants.ts", + "additions": 0, + "deletions": 121, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/crypto.ts", + "additions": 0, + "deletions": 1530, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/dgram.ts", + "additions": 0, + "deletions": 204, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/diagnostics_channel.ts", + "additions": 0, + "deletions": 140, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/dns.ts", + "additions": 0, + "deletions": 147, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/events.ts", + "additions": 0, + "deletions": 182, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/events_generic.ts", + "additions": 0, + "deletions": 233, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/fs.ts", + "additions": 0, + "deletions": 895, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/http.ts", + "additions": 0, + "deletions": 688, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/http2.ts", + "additions": 0, + "deletions": 668, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/https.ts", + "additions": 0, + "deletions": 612, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/inspector.ts", + "additions": 0, + "deletions": 39, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/module.ts", + "additions": 0, + "deletions": 146, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/net.ts", + "additions": 0, + "deletions": 407, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/os.ts", + "additions": 0, + "deletions": 252, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/path.ts", + "additions": 0, + "deletions": 176, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/perf_hooks.ts", + "additions": 0, + "deletions": 127, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/process.ts", + "additions": 0, + "deletions": 189, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/querystring.ts", + "additions": 0, + "deletions": 69, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/readline.ts", + "additions": 0, + "deletions": 355, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/repl.ts", + "additions": 0, + "deletions": 77, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/stream.ts", + "additions": 0, + "deletions": 749, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/string_decoder.ts", + "additions": 0, + "deletions": 35, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/test.ts", + "additions": 0, + "deletions": 758, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/timers.ts", + "additions": 0, + "deletions": 108, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/timers_promises.ts", + "additions": 0, + "deletions": 27, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/tls.ts", + "additions": 0, + "deletions": 328, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/trace_events.ts", + "additions": 0, + "deletions": 8, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/tty.ts", + "additions": 0, + "deletions": 33, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/url.ts", + "additions": 0, + "deletions": 208, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/util.ts", + "additions": 0, + "deletions": 352, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/util_types.ts", + "additions": 0, + "deletions": 178, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/v8.ts", + "additions": 0, + "deletions": 74, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/vm.ts", + "additions": 0, + "deletions": 154, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/wasi.ts", + "additions": 0, + "deletions": 23, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/worker_threads.ts", + "additions": 0, + "deletions": 149, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/test/zlib.ts", + "additions": 0, + "deletions": 191, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/timers.d.ts", + "additions": 0, + "deletions": 240, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/timers/promises.d.ts", + "additions": 0, + "deletions": 93, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/tls.d.ts", + "additions": 0, + "deletions": 1210, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/trace_events.d.ts", + "additions": 0, + "deletions": 182, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/tty.d.ts", + "additions": 0, + "deletions": 208, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/url.d.ts", + "additions": 0, + "deletions": 944, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/util.d.ts", + "additions": 0, + "deletions": 2183, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/v8.d.ts", + "additions": 0, + "deletions": 764, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/vm.d.ts", + "additions": 0, + "deletions": 903, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/wasi.d.ts", + "additions": 0, + "deletions": 179, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/worker_threads.d.ts", + "additions": 0, + "deletions": 691, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/ts4.8/zlib.d.ts", + "additions": 0, + "deletions": 517, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/tsconfig.dom.json", + "additions": 22, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/tsconfig.json", + "additions": 3, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/tsconfig.non-dom.json", + "additions": 2, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/package.json", + "additions": 1, + "deletions": 8, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/test/wasi.ts", + "additions": 6, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/assert.d.ts", + "additions": 0, + "deletions": 986, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/assert/strict.d.ts", + "additions": 0, + "deletions": 8, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/async_hooks.d.ts", + "additions": 0, + "deletions": 501, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/buffer.d.ts", + "additions": 0, + "deletions": 2266, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/child_process.d.ts", + "additions": 0, + "deletions": 1536, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/cluster.d.ts", + "additions": 0, + "deletions": 436, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/console.d.ts", + "additions": 0, + "deletions": 412, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/constants.d.ts", + "additions": 0, + "deletions": 19, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/crypto.d.ts", + "additions": 0, + "deletions": 4346, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/dgram.d.ts", + "additions": 0, + "deletions": 591, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/diagnostics_channel.d.ts", + "additions": 0, + "deletions": 191, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/dns.d.ts", + "additions": 0, + "deletions": 796, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/dns/promises.d.ts", + "additions": 0, + "deletions": 372, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/dom-events.d.ts", + "additions": 0, + "deletions": 122, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/domain.d.ts", + "additions": 0, + "deletions": 170, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/events.d.ts", + "additions": 0, + "deletions": 714, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/fs.d.ts", + "additions": 0, + "deletions": 4030, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/fs/promises.d.ts", + "additions": 0, + "deletions": 1124, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/globals.d.ts", + "additions": 0, + "deletions": 291, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/globals.global.d.ts", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/http.d.ts", + "additions": 0, + "deletions": 1586, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/http2.d.ts", + "additions": 0, + "deletions": 2353, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/https.d.ts", + "additions": 0, + "deletions": 534, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/index.d.ts", + "additions": 0, + "deletions": 86, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/inspector.d.ts", + "additions": 0, + "deletions": 2743, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/module.d.ts", + "additions": 0, + "deletions": 221, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/net.d.ts", + "additions": 0, + "deletions": 858, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/node-tests.ts", + "additions": 0, + "deletions": 274, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/os.d.ts", + "additions": 0, + "deletions": 455, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/path.d.ts", + "additions": 0, + "deletions": 191, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/perf_hooks.d.ts", + "additions": 0, + "deletions": 603, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/process.d.ts", + "additions": 0, + "deletions": 1525, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/punycode.d.ts", + "additions": 0, + "deletions": 117, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/querystring.d.ts", + "additions": 0, + "deletions": 141, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/readline.d.ts", + "additions": 0, + "deletions": 553, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/repl.d.ts", + "additions": 0, + "deletions": 430, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/stream.d.ts", + "additions": 0, + "deletions": 1494, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/stream/consumers.d.ts", + "additions": 0, + "deletions": 12, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/stream/promises.d.ts", + "additions": 0, + "deletions": 83, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/stream/web.d.ts", + "additions": 0, + "deletions": 392, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/string_decoder.d.ts", + "additions": 0, + "deletions": 67, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test.d.ts", + "additions": 0, + "deletions": 190, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/assert.ts", + "additions": 0, + "deletions": 182, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/async_hooks.ts", + "additions": 0, + "deletions": 87, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/buffer.ts", + "additions": 0, + "deletions": 436, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/child_process.ts", + "additions": 0, + "deletions": 566, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/cluster.ts", + "additions": 0, + "deletions": 27, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/console.ts", + "additions": 0, + "deletions": 84, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/constants.ts", + "additions": 0, + "deletions": 138, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/crypto.ts", + "additions": 0, + "deletions": 1496, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/dgram.ts", + "additions": 0, + "deletions": 203, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/diagnostics_channel.ts", + "additions": 0, + "deletions": 24, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/dns.ts", + "additions": 0, + "deletions": 147, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/events.ts", + "additions": 0, + "deletions": 160, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/events_generic.ts", + "additions": 0, + "deletions": 233, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/fs.ts", + "additions": 0, + "deletions": 794, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/globals.ts", + "additions": 0, + "deletions": 41, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/http.ts", + "additions": 0, + "deletions": 636, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/http2.ts", + "additions": 0, + "deletions": 652, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/https.ts", + "additions": 0, + "deletions": 605, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/inspector.ts", + "additions": 0, + "deletions": 39, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/module.ts", + "additions": 0, + "deletions": 110, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/net.ts", + "additions": 0, + "deletions": 372, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/os.ts", + "additions": 0, + "deletions": 245, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/path.ts", + "additions": 0, + "deletions": 176, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/perf_hooks.ts", + "additions": 0, + "deletions": 119, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/process.ts", + "additions": 0, + "deletions": 126, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/querystring.ts", + "additions": 0, + "deletions": 69, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/readline.ts", + "additions": 0, + "deletions": 246, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/repl.ts", + "additions": 0, + "deletions": 77, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/stream.ts", + "additions": 0, + "deletions": 637, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/string_decoder.ts", + "additions": 0, + "deletions": 29, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/test.ts", + "additions": 0, + "deletions": 123, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/timers.ts", + "additions": 0, + "deletions": 96, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/timers_promises.ts", + "additions": 0, + "deletions": 27, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/tls.ts", + "additions": 0, + "deletions": 315, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/trace_events.ts", + "additions": 0, + "deletions": 8, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/tty.ts", + "additions": 0, + "deletions": 33, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/url.ts", + "additions": 0, + "deletions": 208, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/util.ts", + "additions": 0, + "deletions": 237, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/util_types.ts", + "additions": 0, + "deletions": 179, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/v8.ts", + "additions": 0, + "deletions": 66, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/vm.ts", + "additions": 0, + "deletions": 112, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/wasi.ts", + "additions": 0, + "deletions": 23, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/worker_threads.ts", + "additions": 0, + "deletions": 139, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/test/zlib.ts", + "additions": 0, + "deletions": 191, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/timers.d.ts", + "additions": 0, + "deletions": 109, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/timers/promises.d.ts", + "additions": 0, + "deletions": 93, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/tls.d.ts", + "additions": 0, + "deletions": 1099, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/trace_events.d.ts", + "additions": 0, + "deletions": 161, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/tty.d.ts", + "additions": 0, + "deletions": 204, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/url.d.ts", + "additions": 0, + "deletions": 885, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/util.d.ts", + "additions": 0, + "deletions": 1689, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/v8.d.ts", + "additions": 0, + "deletions": 626, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/vm.d.ts", + "additions": 0, + "deletions": 507, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/wasi.d.ts", + "additions": 0, + "deletions": 158, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/worker_threads.d.ts", + "additions": 0, + "deletions": 649, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/ts4.8/zlib.d.ts", + "additions": 0, + "deletions": 517, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/tsconfig.dom.json", + "additions": 2, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/tsconfig.json", + "additions": 3, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v16/tsconfig.non-dom.json", + "additions": 0, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/node-tests-dom.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/node-tests-non-dom.ts", + "additions": 3, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/package.json", + "additions": 1, + "deletions": 8, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/test/events-dom.ts", + "additions": 0, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/test/events-non-dom.ts", + "additions": 0, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/test/globals-dom.ts", + "additions": 33, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/test/globals-non-dom.ts", + "additions": 23, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/test/globals.ts", + "additions": 0, + "deletions": 34, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/test/perf_hooks-dom.ts", + "additions": 2, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/test/perf_hooks-non-dom.ts", + "additions": 1, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/test/perf_hooks.ts", + "additions": 0, + "deletions": 3, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/assert.d.ts", + "additions": 0, + "deletions": 985, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/assert/strict.d.ts", + "additions": 0, + "deletions": 8, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/async_hooks.d.ts", + "additions": 0, + "deletions": 522, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/buffer.d.ts", + "additions": 0, + "deletions": 2353, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/child_process.d.ts", + "additions": 0, + "deletions": 1544, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/cluster.d.ts", + "additions": 0, + "deletions": 432, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/console.d.ts", + "additions": 0, + "deletions": 412, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/constants.d.ts", + "additions": 0, + "deletions": 19, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/crypto.d.ts", + "additions": 0, + "deletions": 4457, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/dgram.d.ts", + "additions": 0, + "deletions": 596, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/diagnostics_channel.d.ts", + "additions": 0, + "deletions": 546, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/dns.d.ts", + "additions": 0, + "deletions": 809, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/dns/promises.d.ts", + "additions": 0, + "deletions": 381, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/dom-events.d.ts", + "additions": 0, + "deletions": 122, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/domain.d.ts", + "additions": 0, + "deletions": 170, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/events.d.ts", + "additions": 0, + "deletions": 819, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/fs.d.ts", + "additions": 0, + "deletions": 4231, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/fs/promises.d.ts", + "additions": 0, + "deletions": 1205, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/globals.d.ts", + "additions": 0, + "deletions": 377, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/globals.global.d.ts", + "additions": 0, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/http.d.ts", + "additions": 0, + "deletions": 1803, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/http2.d.ts", + "additions": 0, + "deletions": 2386, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/https.d.ts", + "additions": 0, + "deletions": 544, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/index.d.ts", + "additions": 0, + "deletions": 88, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/inspector.d.ts", + "additions": 0, + "deletions": 2739, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/module.d.ts", + "additions": 0, + "deletions": 298, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/net.d.ts", + "additions": 0, + "deletions": 918, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/node-tests.ts", + "additions": 0, + "deletions": 275, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/os.d.ts", + "additions": 0, + "deletions": 473, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/path.d.ts", + "additions": 0, + "deletions": 191, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/perf_hooks.d.ts", + "additions": 0, + "deletions": 626, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/process.d.ts", + "additions": 0, + "deletions": 1548, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/punycode.d.ts", + "additions": 0, + "deletions": 117, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/querystring.d.ts", + "additions": 0, + "deletions": 141, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/readline.d.ts", + "additions": 0, + "deletions": 666, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/readline/promises.d.ts", + "additions": 0, + "deletions": 143, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/repl.d.ts", + "additions": 0, + "deletions": 430, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/stream.d.ts", + "additions": 0, + "deletions": 1731, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/stream/consumers.d.ts", + "additions": 0, + "deletions": 12, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/stream/promises.d.ts", + "additions": 0, + "deletions": 83, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/stream/web.d.ts", + "additions": 0, + "deletions": 352, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/string_decoder.d.ts", + "additions": 0, + "deletions": 67, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test.d.ts", + "additions": 0, + "deletions": 1113, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/assert.ts", + "additions": 0, + "deletions": 182, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/async_hooks.ts", + "additions": 0, + "deletions": 100, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/buffer.ts", + "additions": 0, + "deletions": 491, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/child_process.ts", + "additions": 0, + "deletions": 567, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/cluster.ts", + "additions": 0, + "deletions": 27, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/console.ts", + "additions": 0, + "deletions": 84, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/constants.ts", + "additions": 0, + "deletions": 138, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/crypto.ts", + "additions": 0, + "deletions": 1542, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/dgram.ts", + "additions": 0, + "deletions": 204, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/diagnostics_channel.ts", + "additions": 0, + "deletions": 140, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/dns.ts", + "additions": 0, + "deletions": 147, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/events.ts", + "additions": 0, + "deletions": 179, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/events_generic.ts", + "additions": 0, + "deletions": 233, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/fs.ts", + "additions": 0, + "deletions": 874, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/globals.ts", + "additions": 0, + "deletions": 77, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/http.ts", + "additions": 0, + "deletions": 683, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/http2.ts", + "additions": 0, + "deletions": 668, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/https.ts", + "additions": 0, + "deletions": 607, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/inspector.ts", + "additions": 0, + "deletions": 38, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/module.ts", + "additions": 0, + "deletions": 141, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/net.ts", + "additions": 0, + "deletions": 407, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/os.ts", + "additions": 0, + "deletions": 252, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/path.ts", + "additions": 0, + "deletions": 176, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/perf_hooks.ts", + "additions": 0, + "deletions": 127, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/process.ts", + "additions": 0, + "deletions": 179, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/querystring.ts", + "additions": 0, + "deletions": 69, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/readline.ts", + "additions": 0, + "deletions": 355, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/repl.ts", + "additions": 0, + "deletions": 77, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/stream.ts", + "additions": 0, + "deletions": 689, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/string_decoder.ts", + "additions": 0, + "deletions": 35, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/test.ts", + "additions": 0, + "deletions": 624, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/timers.ts", + "additions": 0, + "deletions": 108, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/timers_promises.ts", + "additions": 0, + "deletions": 27, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/tls.ts", + "additions": 0, + "deletions": 329, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/trace_events.ts", + "additions": 0, + "deletions": 8, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/tty.ts", + "additions": 0, + "deletions": 33, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/url.ts", + "additions": 0, + "deletions": 208, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/util.ts", + "additions": 0, + "deletions": 352, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/util_types.ts", + "additions": 0, + "deletions": 178, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/v8.ts", + "additions": 0, + "deletions": 74, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/vm.ts", + "additions": 0, + "deletions": 154, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/wasi.ts", + "additions": 0, + "deletions": 23, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/worker_threads.ts", + "additions": 0, + "deletions": 149, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/test/zlib.ts", + "additions": 0, + "deletions": 191, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/timers.d.ts", + "additions": 0, + "deletions": 126, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/timers/promises.d.ts", + "additions": 0, + "deletions": 93, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/tls.d.ts", + "additions": 0, + "deletions": 1203, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/trace_events.d.ts", + "additions": 0, + "deletions": 171, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/tty.d.ts", + "additions": 0, + "deletions": 206, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/url.d.ts", + "additions": 0, + "deletions": 954, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/util.d.ts", + "additions": 0, + "deletions": 2075, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/v8.d.ts", + "additions": 0, + "deletions": 753, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/vm.d.ts", + "additions": 0, + "deletions": 667, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/wasi.d.ts", + "additions": 0, + "deletions": 158, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/worker_threads.d.ts", + "additions": 0, + "deletions": 692, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/ts4.8/zlib.d.ts", + "additions": 0, + "deletions": 517, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/tsconfig.dom.json", + "additions": 22, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/tsconfig.json", + "additions": 3, + "deletions": 1, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/node/v18/tsconfig.non-dom.json", + "additions": 21, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": true, + "endCursor": "MTAw", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgV7t64", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTMw", + "name": "Waiting for Code Reviews", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/68908/derived.json b/packages/mergebot/src/_tests/fixtures/68908/derived.json new file mode 100644 index 0000000000..b949dc4c62 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68908/derived.json @@ -0,0 +1,1480 @@ +{ + "type": "info", + "now": "2024-03-08T18:36:31.064Z", + "pr_number": 68908, + "author": "jakebailey", + "headCommitOid": "b3eeaef096e86260fb5300d4e289257112644f86", + "mergeBaseOid": "aae31da572363bed190729b826be689a2423aac5", + "lastPushDate": "2024-03-05T23:23:43.000Z", + "lastActivityDate": "2024-03-08T18:34:50.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": true, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "node", + "kind": "edit", + "files": [ + { + "path": "types/node/node-tests-dom.ts", + "kind": "test" + }, + { + "path": "types/node/node-tests-non-dom.ts", + "kind": "test" + }, + { + "path": "types/node/node-tests.ts", + "kind": "test" + }, + { + "path": "types/node/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/test/events-dom.ts", + "kind": "test" + }, + { + "path": "types/node/test/events-non-dom.ts", + "kind": "test" + }, + { + "path": "types/node/test/globals-dom.ts", + "kind": "test" + }, + { + "path": "types/node/test/globals-non-dom.ts", + "kind": "test" + }, + { + "path": "types/node/test/globals.ts", + "kind": "test" + }, + { + "path": "types/node/test/perf_hooks-dom.ts", + "kind": "test" + }, + { + "path": "types/node/test/perf_hooks-non-dom.ts", + "kind": "test" + }, + { + "path": "types/node/test/perf_hooks.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/assert.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/assert/strict.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/async_hooks.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/buffer.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/child_process.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/cluster.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/console.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/constants.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/crypto.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/dgram.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/diagnostics_channel.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/dns.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/dns/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/dom-events.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/domain.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/events.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/fs.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/fs/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/globals.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/globals.global.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/http.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/http2.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/https.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/index.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/inspector.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/module.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/net.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/node-tests.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/os.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/path.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/perf_hooks.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/process.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/punycode.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/querystring.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/readline.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/readline/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/repl.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/.gitignore", + "kind": "package-meta", + "suspect": "edited" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/README.md", + "kind": "markdown" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/ast-processing.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/ast-utils.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/docs.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/html-doc-processing.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/node-doc-processing.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/ts4.8/scripts/generate-docs/utils.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/README.md", + "kind": "markdown" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/devtools-protocol-schema.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/event-emitter.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/generate-substitute-args.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/index.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/inspector.d.ts.template", + "kind": "package-meta", + "suspect": "edited" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/ts4.8/scripts/generate-inspector/utils.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/scripts/html-doc-processing.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/scripts/new-version/new-version.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/scripts/new-version/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/ts4.8/scripts/new-version/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/ts4.8/stream.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/stream/consumers.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/stream/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/stream/web.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/string_decoder.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/test.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/test/assert.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/async_hooks.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/buffer.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/child_process.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/cluster.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/console.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/constants.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/crypto.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/dgram.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/diagnostics_channel.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/dns.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/events.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/events_generic.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/fs.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/http.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/http2.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/https.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/inspector.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/module.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/net.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/os.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/path.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/perf_hooks.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/process.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/querystring.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/readline.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/repl.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/stream.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/string_decoder.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/test.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/timers.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/timers_promises.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/tls.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/trace_events.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/tty.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/url.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/util.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/util_types.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/v8.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/vm.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/wasi.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/worker_threads.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/test/zlib.ts", + "kind": "test" + }, + { + "path": "types/node/ts4.8/timers.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/timers/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/tls.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/trace_events.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/tty.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/url.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/util.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/v8.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/vm.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/wasi.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/worker_threads.d.ts", + "kind": "definition" + }, + { + "path": "types/node/ts4.8/zlib.d.ts", + "kind": "definition" + }, + { + "path": "types/node/tsconfig.dom.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/tsconfig.non-dom.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/v16/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/v16/test/wasi.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/assert.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/assert/strict.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/async_hooks.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/buffer.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/child_process.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/cluster.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/console.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/constants.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/crypto.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/dgram.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/diagnostics_channel.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/dns.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/dns/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/dom-events.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/domain.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/events.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/fs.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/fs/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/globals.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/globals.global.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/http.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/http2.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/https.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/index.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/inspector.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/module.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/net.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/node-tests.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/os.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/path.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/perf_hooks.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/process.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/punycode.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/querystring.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/readline.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/repl.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/stream.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/stream/consumers.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/stream/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/stream/web.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/string_decoder.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/test.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/test/assert.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/async_hooks.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/buffer.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/child_process.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/cluster.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/console.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/constants.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/crypto.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/dgram.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/diagnostics_channel.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/dns.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/events.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/events_generic.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/fs.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/globals.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/http.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/http2.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/https.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/inspector.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/module.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/net.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/os.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/path.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/perf_hooks.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/process.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/querystring.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/readline.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/repl.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/stream.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/string_decoder.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/test.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/timers.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/timers_promises.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/tls.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/trace_events.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/tty.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/url.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/util.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/util_types.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/v8.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/vm.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/wasi.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/worker_threads.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/test/zlib.ts", + "kind": "test" + }, + { + "path": "types/node/v16/ts4.8/timers.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/timers/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/tls.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/trace_events.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/tty.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/url.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/util.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/v8.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/vm.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/wasi.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/worker_threads.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/ts4.8/zlib.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v16/tsconfig.dom.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/v16/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/v16/tsconfig.non-dom.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/v18/node-tests-dom.ts", + "kind": "test" + }, + { + "path": "types/node/v18/node-tests-non-dom.ts", + "kind": "test" + }, + { + "path": "types/node/v18/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/v18/test/events-dom.ts", + "kind": "test" + }, + { + "path": "types/node/v18/test/events-non-dom.ts", + "kind": "test" + }, + { + "path": "types/node/v18/test/globals-dom.ts", + "kind": "test" + }, + { + "path": "types/node/v18/test/globals-non-dom.ts", + "kind": "test" + }, + { + "path": "types/node/v18/test/globals.ts", + "kind": "test" + }, + { + "path": "types/node/v18/test/perf_hooks-dom.ts", + "kind": "test" + }, + { + "path": "types/node/v18/test/perf_hooks-non-dom.ts", + "kind": "test" + }, + { + "path": "types/node/v18/test/perf_hooks.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/assert.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/assert/strict.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/async_hooks.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/buffer.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/child_process.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/cluster.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/console.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/constants.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/crypto.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/dgram.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/diagnostics_channel.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/dns.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/dns/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/dom-events.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/domain.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/events.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/fs.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/fs/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/globals.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/globals.global.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/http.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/http2.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/https.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/index.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/inspector.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/module.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/net.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/node-tests.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/os.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/path.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/perf_hooks.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/process.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/punycode.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/querystring.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/readline.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/readline/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/repl.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/stream.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/stream/consumers.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/stream/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/stream/web.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/string_decoder.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/test.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/test/assert.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/async_hooks.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/buffer.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/child_process.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/cluster.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/console.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/constants.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/crypto.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/dgram.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/diagnostics_channel.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/dns.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/events.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/events_generic.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/fs.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/globals.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/http.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/http2.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/https.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/inspector.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/module.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/net.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/os.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/path.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/perf_hooks.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/process.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/querystring.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/readline.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/repl.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/stream.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/string_decoder.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/test.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/timers.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/timers_promises.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/tls.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/trace_events.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/tty.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/url.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/util.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/util_types.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/v8.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/vm.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/wasi.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/worker_threads.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/test/zlib.ts", + "kind": "test" + }, + { + "path": "types/node/v18/ts4.8/timers.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/timers/promises.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/tls.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/trace_events.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/tty.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/url.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/util.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/v8.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/vm.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/wasi.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/worker_threads.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/ts4.8/zlib.d.ts", + "kind": "definition" + }, + { + "path": "types/node/v18/tsconfig.dom.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/v18/tsconfig.json", + "kind": "package-meta-ok" + }, + { + "path": "types/node/v18/tsconfig.non-dom.json", + "kind": "package-meta-ok" + } + ], + "owners": [ + "Microsoft", + "jkomyno", + "alvis", + "r3nya", + "btoueg", + "smac89", + "touffy", + "DeividasBakanas", + "eyqs", + "Hannes-Magnusson-CK", + "hoo29", + "kjin", + "ajafff", + "islishude", + "mwiktorczyk", + "mohsen1", + "galkin", + "parambirs", + "eps1lon", + "ThomasdenH", + "WilcoBakker", + "wwwy3y3", + "samuela", + "kuehlein", + "bhongy", + "chyzwar", + "trivikr", + "yoursunny", + "qwelias", + "ExE-Boss", + "peterblazejewicz", + "addaleax", + "victorperin", + "ZYSzys", + "NodeJS", + "LinusU", + "wafuwafu13", + "mcollina", + "Semigradsky" + ], + "addedOwners": [], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [], + "mainBotCommentID": 1986210796, + "ciResult": "unknown" +} diff --git a/packages/mergebot/src/_tests/fixtures/68908/mutations.json b/packages/mergebot/src/_tests/fixtures/68908/mutations.json new file mode 100644 index 0000000000..82cfbf054f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68908/mutations.json @@ -0,0 +1,11 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM52Yyvs", + "body": "@jakebailey Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `node` — [on npm](https://www.npmjs.com/package/node), [on unpkg](https://unpkg.com/browse/node@latest/)\n - Config files to check:\n - [`node/ts4.8/scripts/generate-docs/.gitignore`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/files/b3eeaef096e86260fb5300d4e289257112644f86#diff-91526815b4e9495a4a3c4fc39e0d0ec54cfde836d5fba3a1ed2357f249d7cba7): edited\n - [`node/ts4.8/scripts/generate-inspector/inspector.d.ts.template`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/files/b3eeaef096e86260fb5300d4e289257112644f86#diff-451f80f4367421783eca707351dd71c71207e031bc5dff3a4d0b95058e84c7f7): edited\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68908&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 A DT maintainer needs to approve changes that affect module config files\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/68908/result.json b/packages/mergebot/src/_tests/fixtures/68908/result.json new file mode 100644 index 0000000000..1f5960de6e --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/68908/result.json @@ -0,0 +1,21 @@ +{ + "projectColumn": "Waiting for Code Reviews", + "labels": [ + "Critical package", + "Check Config", + "Huge Change" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@jakebailey Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `node` — [on npm](https://www.npmjs.com/package/node), [on unpkg](https://unpkg.com/browse/node@latest/)\n - Config files to check:\n - [`node/ts4.8/scripts/generate-docs/.gitignore`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/files/b3eeaef096e86260fb5300d4e289257112644f86#diff-91526815b4e9495a4a3c4fc39e0d0ec54cfde836d5fba3a1ed2357f249d7cba7): edited\n - [`node/ts4.8/scripts/generate-inspector/inspector.d.ts.template`](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/files/b3eeaef096e86260fb5300d4e289257112644f86#diff-451f80f4367421783eca707351dd71c71207e031bc5dff3a4d0b95058e84c7f7): edited\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=68908&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * 🕐 Continuous integration tests are still running\n * 🕐 A DT maintainer needs to approve changes that affect module config files\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", + "status": "🔔 @Microsoft @jkomyno @alvis @r3nya @btoueg @smac89 @touffy @DeividasBakanas @eyqs @Hannes-Magnusson-CK @hoo29 @kjin @ajafff @islishude @mwiktorczyk @mohsen1 @galkin @parambirs @eps1lon @ThomasdenH @WilcoBakker @wwwy3y3 @samuela @kuehlein @bhongy @chyzwar @trivikr @yoursunny @qwelias @ExE-Boss @peterblazejewicz @addaleax @victorperin @ZYSzys @NodeJS @LinusU @wafuwafu13 @mcollina @Semigradsky — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/68908/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." + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/69589/_downloads.json b/packages/mergebot/src/_tests/fixtures/69589/_downloads.json new file mode 100644 index 0000000000..d7168286cc --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/69589/_downloads.json @@ -0,0 +1,3 @@ +{ + "readable-stream": 5070527 +} diff --git a/packages/mergebot/src/_tests/fixtures/69589/_files.json b/packages/mergebot/src/_tests/fixtures/69589/_files.json new file mode 100644 index 0000000000..a748ea7f88 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/69589/_files.json @@ -0,0 +1,4 @@ +{ + "73af686fc614750422389559ef5a752e6eae69a5:types/readable-stream/package.json": "{\n \"private\": true,\n \"name\": \"@types/readable-stream\",\n \"version\": \"4.0.9999\",\n \"projects\": [\n \"https://github.com/nodejs/readable-stream\"\n ],\n \"dependencies\": {\n \"@types/node\": \"*\",\n \"safe-buffer\": \"~5.1.1\"\n },\n \"devDependencies\": {\n \"@types/readable-stream\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"TeamworkGuy2\",\n \"githubUsername\": \"TeamworkGuy2\"\n },\n {\n \"name\": \"markdreyer\",\n \"githubUsername\": \"markdreyer\"\n },\n {\n \"name\": \"Matteo Collina\",\n \"githubUsername\": \"mcollina\"\n }\n ]\n}\n", + "35ea3e696d3fb324ce0c779d20c2ab83f36d9181:types/readable-stream/package.json": "{\n \"private\": true,\n \"name\": \"@types/readable-stream\",\n \"version\": \"4.0.9999\",\n \"projects\": [\n \"https://github.com/nodejs/readable-stream\"\n ],\n \"dependencies\": {\n \"@types/node\": \"*\",\n \"safe-buffer\": \"~5.1.1\"\n },\n \"devDependencies\": {\n \"@types/readable-stream\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"TeamworkGuy2\",\n \"githubUsername\": \"TeamworkGuy2\"\n },\n {\n \"name\": \"markdreyer\",\n \"githubUsername\": \"markdreyer\"\n }\n ]\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/69589/_response.json b/packages/mergebot/src/_tests/fixtures/69589/_response.json new file mode 100644 index 0000000000..d2a19de393 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/69589/_response.json @@ -0,0 +1,351 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM5vQtx6", + "title": "Add mcollina to readable-stream", + "createdAt": "2024-05-13T13:38:31Z", + "author": { + "login": "mcollina", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Critical package", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 69589, + "state": "OPEN", + "headRefOid": "73af686fc614750422389559ef5a752e6eae69a5", + "changedFiles": 1, + "additions": 4, + "deletions": 0, + "commitIds": { + "nodes": [ + { + "commit": { + "oid": "5fa92916327ed4db01384402d1c5da8e02af2aef", + "parents": { + "nodes": [ + { + "oid": "35ea3e696d3fb324ce0c779d20c2ab83f36d9181", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "d00098faad24ab882a4de2719c43c1e10a6a7266", + "parents": { + "nodes": [ + { + "oid": "5fa92916327ed4db01384402d1c5da8e02af2aef", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "73af686fc614750422389559ef5a752e6eae69a5", + "parents": { + "nodes": [ + { + "oid": "d00098faad24ab882a4de2719c43c1e10a6a7266", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [ + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2024-05-13T14:01:52Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2024-05-13T14:06:54Z", + "projectColumnName": "Needs Maintainer Review", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2024-05-13T16:11:58Z", + "projectColumnName": "Waiting for Code Reviews", + "__typename": "MovedColumnsInProjectEvent" + }, + { + "actor": { + "login": "typescript-bot", + "__typename": "User" + }, + "createdAt": "2024-05-13T16:16:32Z", + "projectColumnName": "Needs Maintainer Review", + "__typename": "MovedColumnsInProjectEvent" + } + ], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "nodes": [ + { + "author": { + "login": "jakebailey", + "__typename": "User" + }, + "commit": { + "oid": "5fa92916327ed4db01384402d1c5da8e02af2aef", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jakebailey", + "__typename": "User" + }, + "createdAt": "2024-05-13T14:55:10Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2024-05-13T14:55:11Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/69589#pullrequestreview-2052953609", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "jakebailey", + "__typename": "User" + }, + "commit": { + "oid": "5fa92916327ed4db01384402d1c5da8e02af2aef", + "__typename": "Commit" + }, + "comments": { + "nodes": [ + { + "author": { + "login": "jakebailey", + "__typename": "User" + }, + "createdAt": "2024-05-13T14:56:16Z", + "__typename": "PullRequestReviewComment" + } + ], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "COMMENTED", + "submittedAt": "2024-05-13T14:56:16Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/69589#pullrequestreview-2052956341", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 23729846998, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/73af686fc614750422389559ef5a752e6eae69a5/checks?check_suite_id=23729846998", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/73af686fc614750422389559ef5a752e6eae69a5/checks?check_suite_id=23729846998", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2024-05-13T16:11:36Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2024-05-13T16:11:31Z", + "committedDate": "2024-05-13T16:11:31Z", + "pushedDate": null, + "oid": "73af686fc614750422389559ef5a752e6eae69a5", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 4, + "nodes": [ + { + "id": "IC_kwDOAFz6BM59n4sP", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 2107607823, + "body": "@mcollina Thank you for submitting this PR!\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n* `readable-stream` — [on npm](https://www.npmjs.com/package/readable-stream), [on unpkg](https://unpkg.com/browse/readable-stream@latest/)\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=69589&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 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", + "createdAt": "2024-05-13T13:39:10Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM59n4vJ", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 2107608009, + "body": "🔔 @TeamworkGuy2 @markdreyer — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/69589/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-05-13T13:39:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM59n4vf", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 2107608031, + "body": "@mcollina Unfortunately, this pull request currently has a merge conflict 😥. Please update your PR branch to be up-to-date with respect to master. Have a nice day!\n", + "createdAt": "2024-05-13T13:39:14Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM59p4Dd", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "databaseId": 2108129501, + "body": "@jakebailey Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2024-05-13T16:16:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 1, + "nodes": [ + { + "path": "types/readable-stream/package.json", + "additions": 4, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectCards": { + "nodes": [ + { + "id": "PRC_lALOAFz6BM4AORWwzgWEIiE", + "project": { + "id": "MDc6UHJvamVjdDM3NDExMDQ=", + "number": 5, + "name": "New Pull Request Status Board", + "__typename": "Project" + }, + "column": { + "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTIy", + "name": "Needs Maintainer Review", + "__typename": "ProjectColumn" + }, + "__typename": "ProjectCard" + } + ], + "__typename": "ProjectCardConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + }, + "loading": false, + "networkStatus": 7 +} diff --git a/packages/mergebot/src/_tests/fixtures/69589/derived.json b/packages/mergebot/src/_tests/fixtures/69589/derived.json new file mode 100644 index 0000000000..d929e2f2e9 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/69589/derived.json @@ -0,0 +1,46 @@ +{ + "type": "info", + "now": "2024-05-13T16:27:07.093Z", + "pr_number": 69589, + "author": "mcollina", + "headCommitOid": "73af686fc614750422389559ef5a752e6eae69a5", + "mergeBaseOid": "35ea3e696d3fb324ce0c779d20c2ab83f36d9181", + "lastPushDate": "2024-05-13T13:38:31.000Z", + "lastActivityDate": "2024-05-13T14:56:16.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "popularityLevel": "Critical", + "pkgInfo": [ + { + "name": "readable-stream", + "kind": "edit", + "files": [ + { + "path": "types/readable-stream/package.json", + "kind": "package-meta-ok" + } + ], + "owners": [ + "TeamworkGuy2", + "markdreyer" + ], + "addedOwners": [ + "mcollina" + ], + "deletedOwners": [], + "popularityLevel": "Critical" + } + ], + "reviews": [ + { + "type": "stale", + "reviewer": "jakebailey", + "date": "2024-05-13T14:56:16.000Z", + "abbrOid": "5fa9291" + } + ], + "mainBotCommentID": 2107607823, + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/69589/mutations.json b/packages/mergebot/src/_tests/fixtures/69589/mutations.json new file mode 100644 index 0000000000..3b3ceb8471 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/69589/mutations.json @@ -0,0 +1,22 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM59n4sP", + "body": "@mcollina Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `readable-stream` — [on npm](https://www.npmjs.com/package/readable-stream), [on unpkg](https://unpkg.com/browse/readable-stream@latest/)\n - 1 added owner: ✎@mcollina\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=69589&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 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" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}\n", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwyNDk1OTc2ODI5" + ], + "labelableId": "PR_kwDOAFz6BM5vQtx6" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/69589/result.json b/packages/mergebot/src/_tests/fixtures/69589/result.json new file mode 100644 index 0000000000..162b4fae80 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/69589/result.json @@ -0,0 +1,24 @@ +{ + "projectColumn": "Needs Maintainer Review", + "labels": [ + "Critical package", + "Edits Owners" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@mcollina Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `readable-stream` — [on npm](https://www.npmjs.com/package/readable-stream), [on unpkg](https://unpkg.com/browse/readable-stream@latest/)\n - 1 added owner: ✎@mcollina\n\n## Code Reviews\n\nBecause this is a widely-used package, a DT maintainer will need to review it before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=69589&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 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", + "status": "🔔 @TeamworkGuy2 @markdreyer — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/69589/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." + }, + { + "tag": "stale-ping-b1d93c-5fa9291", + "status": "@jakebailey Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/testEnvironment.js b/packages/mergebot/src/_tests/testEnvironment.js new file mode 100644 index 0000000000..4493c3bfe6 --- /dev/null +++ b/packages/mergebot/src/_tests/testEnvironment.js @@ -0,0 +1,10 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const jestEnvNode = require("jest-environment-node"); +module.exports = class extends jestEnvNode.TestEnvironment { + constructor(config) { + super(config); + this.global.AbortSignal = {}; + this.global.Event = {}; + this.global.EventTarget = {}; + } +}; diff --git a/packages/mergebot/src/basic.ts b/packages/mergebot/src/basic.ts new file mode 100644 index 0000000000..8680c2a768 --- /dev/null +++ b/packages/mergebot/src/basic.ts @@ -0,0 +1,53 @@ +export type ColumnName = + | "Needs Maintainer Action" + | "Needs Maintainer Review" + | "Other" + | "Waiting for Author to Merge" + | "Needs Author Action" + | "Recently Merged" + | "Waiting for Code Reviews" + | "*REMOVE*"; // special value: indicates closing the PR + +export type PopularityLevel = "Well-liked by everyone" | "Popular" | "Critical"; + +export type StalenessKind = (typeof stalenessKinds)[number]; +const stalenessKinds = [ + // all are also label names + "Unmerged", + "Abandoned", + "Unreviewed", +] as const; + +export type LabelName = (typeof labelNames)[number]; +export const labelNames = [ + "Mergebot Error", + "Has Merge Conflict", + "The CI failed", + "The CI is blocked", + "Revision needed", + "New Definition", + "Edits Owners", + "Where is GH Actions?", + "Owner Approved", + "Other Approved", + "Maintainer Approved", + "Self Merge", + "Popular package", + "Critical package", + "Edits Infrastructure", + "Possibly Edits Infrastructure", + "Edits multiple packages", + "Author is Owner", + "No Other Owners", + "Too Many Owners", + "Untested Change", + "Check Config", + "Too Many Files", + "Huge Change", + "Needs Actions Permission", + ...stalenessKinds, +] as const; + +export type ApproverKind = "maintainer" | "owner" | "other"; + +export type BlessingKind = "merge" | "review" | undefined; diff --git a/packages/mergebot/src/commands/create-fixture.ts b/packages/mergebot/src/commands/create-fixture.ts new file mode 100644 index 0000000000..af33ee0f9e --- /dev/null +++ b/packages/mergebot/src/commands/create-fixture.ts @@ -0,0 +1,104 @@ +import * as computeActions from "../compute-pr-actions"; +import { getPRInfo } from "../queries/pr-query"; +import { deriveStateForPR } from "../pr-info"; +import { ApolloQueryResult } from "@apollo/client/core"; +import { writeFileSync, mkdirSync, existsSync } from "fs"; +import { join } from "path"; +import { PR } from "../queries/schema/PR"; +import { fetchFile } from "../util/fetchFile"; +import { getMonthlyDownloadCount } from "../util/npm"; +import { readJsonSync, scrubDiagnosticDetails } from "../util/util"; +import { executePrActions } from "../execute-pr-actions"; + +export default async function main(directory: string, overwriteInfo: boolean) { + const writeJsonSync = (file: string, json: unknown) => + writeFileSync(file, scrubDiagnosticDetails(JSON.stringify(json, undefined, 2) + "\n")); + + const fixturePath = join("src", "_tests", "fixtures", directory); + const prNumber = parseInt(directory, 10); + if (isNaN(prNumber)) throw new Error(`Expected ${directory} to be parseable as a PR number`); + + if (!existsSync(fixturePath)) mkdirSync(fixturePath); + + const jsonFixturePath = join(fixturePath, "_response.json"); + if (overwriteInfo || !existsSync(jsonFixturePath)) { + writeJsonSync(jsonFixturePath, await getPRInfo(prNumber)); + } + const response: ApolloQueryResult = readJsonSync(jsonFixturePath); + + const filesJSONPath = join(fixturePath, "_files.json"); + const filesFetched: { [expr: string]: string | undefined } = {}; + const downloadsJSONPath = join(fixturePath, "_downloads.json"); + const downloadsFetched: { [packageName: string]: number } = {}; + const derivedFixturePath = join(fixturePath, "derived.json"); + + const shouldOverwrite = (file: string) => overwriteInfo || !existsSync(file); + + const prInfo = response.data.repository?.pullRequest; + if (!prInfo) { + console.error(`Could not get PR info for ${directory}, is the number correct?`); + return; + } + + const derivedInfo = await deriveStateForPR( + prInfo, + shouldOverwrite(filesJSONPath) ? initFetchFilesAndWriteToFile() : getFilesFromFile, + shouldOverwrite(downloadsJSONPath) ? initGetDownloadsAndWriteToFile() : getDownloadsFromFile, + shouldOverwrite(derivedFixturePath) ? undefined : getTimeFromFile(), + ); + + writeJsonSync(derivedFixturePath, derivedInfo); + + const resultFixturePath = join(fixturePath, "result.json"); + const actions = computeActions.process(derivedInfo); + writeJsonSync(resultFixturePath, actions); + + const mutationsFixturePath = join(fixturePath, "mutations.json"); + const mutations = await executePrActions(actions, prInfo, /*dry*/ true); + writeJsonSync(mutationsFixturePath, mutations); + + console.log("Recorded"); + + function initFetchFilesAndWriteToFile() { + writeJsonSync(filesJSONPath, {}); // one-time initialization of an empty storage + return fetchFilesAndWriteToFile; + } + async function fetchFilesAndWriteToFile(expr: string, limit?: number) { + filesFetched[expr] = await fetchFile(expr, limit); + writeJsonSync(filesJSONPath, filesFetched); + return filesFetched[expr]; + } + function getFilesFromFile(expr: string) { + return readJsonSync(filesJSONPath)[expr]; + } + + function initGetDownloadsAndWriteToFile() { + writeJsonSync(downloadsJSONPath, {}); // one-time initialization of an empty storage + return getDownloadsAndWriteToFile; + } + async function getDownloadsAndWriteToFile(packageName: string, until?: Date) { + const downloads = await getMonthlyDownloadCount(packageName, until); + downloadsFetched[packageName] = downloads; + writeJsonSync(downloadsJSONPath, downloadsFetched); + return downloads; + } + function getDownloadsFromFile(packageName: string) { + return readJsonSync(downloadsJSONPath)[packageName]; + } + + function getTimeFromFile() { + return new Date(readJsonSync(derivedFixturePath).now); + } +} + +if (!module.parent) { + const num = process.argv[2]; + if (!num) { + console.error("expecting a PR number"); + process.exit(1); + } + const overwriteInfo = process.argv.slice(2).includes("--overwrite-info"); + main(num, overwriteInfo).then(() => { + process.exit(0); + }); +} diff --git a/packages/mergebot/src/commands/update-all-fixtures.ts b/packages/mergebot/src/commands/update-all-fixtures.ts new file mode 100644 index 0000000000..7fb08fee69 --- /dev/null +++ b/packages/mergebot/src/commands/update-all-fixtures.ts @@ -0,0 +1,29 @@ +import createFixture from "./create-fixture"; +import * as path from "path"; +import * as fs from "fs"; + +async function main() { + const overwriteInfo = process.argv.slice(2).includes("--overwrite-info"); + const fixturesDir = path.join(__dirname, "../../src/_tests/fixtures"); + const fixtures = await fs.promises.readdir(fixturesDir, { withFileTypes: true }); + for (const dir of fixtures) { + if (!dir.isDirectory()) continue; + console.log(`Updating ${dir.name}, ${overwriteInfo ? "overwriting" : "preserving"} the existing PR info...`); + await createFixture(dir.name, overwriteInfo); + } +} + +main().then( + () => { + console.log("Done!"); + process.exit(0); + }, + (err) => { + if (err?.stack) { + console.error(err.stack); + } else { + console.error(err); + } + process.exit(1); + }, +); diff --git a/packages/mergebot/src/commands/update-test-data.ts b/packages/mergebot/src/commands/update-test-data.ts new file mode 100644 index 0000000000..ad6ab37683 --- /dev/null +++ b/packages/mergebot/src/commands/update-test-data.ts @@ -0,0 +1,40 @@ +import * as fs from "fs"; +import * as path from "path"; +import * as cachedQueries from "../util/cachedQueries"; + +async function main() { + let base = __dirname, + dataPath = ""; + while (!fs.existsSync((dataPath = path.join(base, "src", "_tests", "cachedQueries.json")))) { + const up = path.dirname(base); + if (up === base) throw new Error("Couldn't find cachedQueries.json"); + base = up; + } + + const data: any = {}; + + for (const query in cachedQueries) { + data[query] = await cachedQueries[query as keyof typeof cachedQueries](); + } + + await fs.promises.writeFile( + dataPath, + JSON.stringify({ comment: "Generate & update with `pnpm run update-test-data`", ...data }, undefined, 2) + "\n", + "utf8", + ); +} + +main().then( + () => { + console.log("Done!"); + process.exit(0); + }, + (err) => { + if (err?.stack) { + console.error(err.stack); + } else { + console.error(err); + } + process.exit(1); + }, +); diff --git a/packages/mergebot/src/comments.ts b/packages/mergebot/src/comments.ts new file mode 100644 index 0000000000..8e8d19af71 --- /dev/null +++ b/packages/mergebot/src/comments.ts @@ -0,0 +1,209 @@ +import { sha256, txt } from "./util/util"; +import * as urls from "./urls"; + +// use `deletedWhenNotPresent` for comments that should be removed if not in the actions +export const tagsToDeleteIfNotPosted: string[] = []; +const deletedWhenNotPresent = (tag: string, f: (tag: string) => T) => { + tagsToDeleteIfNotPosted.push(tag); + return f(tag); +}; + +export interface Comment { + tag: string; + status: string; +} + +export const hadError = (user: string | undefined, error: string) => ({ + tag: "had-error", + status: txt` + |${user ? `@${user} — ` : ""}There was an error that prevented me from properly processing + this PR: + | + | ${error}`, +}); + +export const ciFailed = (abbrOid: string, user: string, ciUrl: string) => ({ + tag: `gh-actions-complaint-${abbrOid}`, + status: txt` + |@${user} The CI build failed! Please [review the logs for more information](${ciUrl}). + | + |Once you've pushed the fixes, the build will automatically re-run. Thanks! + | + |**Note: builds that are failing do not end up on the list of PRs for the DT + maintainers to review.**`, +}); + +export const mergeConflicted = (abbrOid: string, user: string) => ({ + tag: `merge-complaint-${abbrOid}`, + status: txt` + |@${user} Unfortunately, this pull request currently has a merge conflict 😥. + Please update your PR branch to be up-to-date with respect to master. Have a nice day!`, +}); + +export const changesRequest = (abbrOid: string, user: string) => ({ + tag: `reviewer-complaint-${abbrOid}`, + status: txt` + |@${user} One or more reviewers has requested changes. Please address their comments. + I'll be back once they sign off or you've pushed new commits. Thank you!`, +}); + +export const suggestTesting = deletedWhenNotPresent("suggest-testing", (tag) => (user: string, testsLink: string) => ({ + tag, + status: txt` + |Hey @${user}, + | + |: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](${testsLink}) + to cover the change you're making. Including tests allows this PR to be merged by + yourself and the owners of this module. + | + |***This can potentially save days of time for you!***`, +})); + +export const pingReviewers = (names: readonly string[], reviewLink: string) => ({ + tag: "pinging-reviewers", + status: txt` + |🔔 ${names.map((n) => `@${n}`).join(" ")} — please [review this PR](${reviewLink}) 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.`, +}); + +export const pingReviewersOther = (user: string, authorIsOwner: boolean, reviewLink: string) => ({ + tag: "pinging-reviewers-others", + status: txt` + |🔔 @${user} — ${authorIsOwner ? "you're the only owner" : "there are no owners"}, + but it would still be good if you find someone to + [review this PR](${reviewLink}) in the next few days, otherwise a maintainer will look at it. + (And if you do find someone, maybe even recruit them to be a second owner to make future + changes easier...)`, +}); + +export const pingReviewersTooMany = (names: readonly string[]) => ({ + tag: "pinging-reviewers-too-many", + status: txt` + |⚠️ There are too many reviewers for this PR change (${names.length}). + Merging can only be handled by a DT maintainer. + | + |

+ |People who would have been pinged + |${names.map((n) => `${n}`).join(" ")} + |
`, +}); + +export const pingStaleReviewer = (reviewedAbbrOid: string, reviewers: string[]) => ({ + tag: `stale-ping-${sha256(reviewers.join("-")).substr(0, 6)}-${reviewedAbbrOid}`, + status: txt` + |@${reviewers.join(", @")} Thank you for reviewing this PR! The author has pushed new + commits since your last review. Could you take another look and submit a fresh review?`, +}); + +export const offerSelfMerge = deletedWhenNotPresent( + "merge-offer", + (tag) => (user: string, otherOwners: string[], abbrOid: string) => ({ + // Note: pr-info.ts searches for the `(at ${abbrOid})` + tag, + status: txt` + |@${user}: Everything looks good here. I am ready to merge this PR + (at ${abbrOid}) on your behalf whenever you think it's ready. + | + |If you'd like that to happen, please post a comment saying: + | + |> Ready to merge + | + |and I'll merge this PR almost instantly. Thanks for helping out! :heart: + |${ + otherOwners.length === 0 + ? "" + : ` + |(${otherOwners.map((o) => "@" + o).join(", ")}: you can do this too.)` + }`, + }), +); + +export const waitUntilMergeIsOK = (user: string, abbrOid: string, uri: string, mainCommentID: number | undefined) => ({ + // at most one reminder per update + tag: `wait-for-merge-offer-${abbrOid}`, + status: txt` + |:passport_control: Hi @${user}, + | + |I can't [accept a pull request](${uri}) until all of the checks in the "Status" section of + [this comment](#issuecomment-${mainCommentID || "???"}) are green. + I will let you know once that happens. + | + |Thanks, and happy typing!`, +}); + +export const remindPeopleTheyCanUnblockPR = ( + user: string, + approvalUsers: string[], + ciPassing: boolean, + abbrOid: string, +) => ({ + // at most one reminder per update + tag: `wait-for-merge-offer-${abbrOid}`, + status: txt` + |:hourglass_flowing_sand: Hi @${user}, + | + |It's been a few days since this PR was approved by ${approvalUsers.join(", ")} and we're waiting for + ${ + ciPassing + ? `a DT maintainer to give a review` + : `you to fix the test failures and then for a maintainer approval` + }. + | + |If you would like to short-circuit + ${ciPassing ? `this wait` : `another wait for a maintainer`}, + you can edit some of the [test files](${urls.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.`, +}); + +// Explanation for the stalness count in the welcome message +export const stalenessExplanations: { [k: string]: string } = { + "Unmerged:nearly": "please merge or say something if there's a problem, otherwise it will be closed!", + "Unmerged:done": "closed because it wasn't merged for a long time!", + "Abandoned:nearly": "it is considered nearly abandoned!", + "Abandoned:done": "it is considered abandoned, and therefore closed!", + "Unreviewed:nearly": "please try to get reviewers!", + "Unreviewed:done": "it is *still* unreviewed!", +}; + +// Comments to post for the staleness timeline (the tag is computed in `makeStaleness`) +export const stalenessComment = (author: string, ownersToPing: string[], expires: string) => { + const ownerPing = ownersToPing.map((o) => "@" + o).join(", "); + return { + // --Unmerged-- + "Unmerged:nearly": txt` + |Re-ping @${author} / ${ownerPing}: + | + |This PR has been ready to merge for over a week, and I haven't seen any requests to + merge it. I will close it on ${expires} (in three weeks) if this doesn't happen. + | + |(If there's no reason to avoid merging it, please do so. Otherwise, if it shouldn't + be merged or if it needs more time, please close it or turn it into a draft.)`, + "Unmerged:done": txt` + |After a month, no one has requested merging the PR 😞. I'm going to assume that the + change is not wanted after all, and will therefore close it.`, + // --Abandoned-- + "Abandoned:nearly": txt` + |@${author} I haven't seen any activity on this PR in more than three weeks, and it + still has problems that prevent it from being merged. The PR will be closed on + ${expires} (in a week) if the issues aren't addressed.`, + "Abandoned:done": txt` + |@${author} To keep things tidy, we have to close PRs that aren't mergeable and don't + have activity in the last month. No worries, though — please open a new PR if you'd + like to continue with this change. Thank you!`, + // --Unreviewed-- + "Unreviewed:nearly": txt` + |Re-ping ${ownerPing}: + | + |This PR has been out for over a week, yet I haven't seen any reviews. + | + |Could someone please give it some attention? Thanks!`, + "Unreviewed:done": txt` + |It has been more than two weeks and this PR still has no reviews. + | + |I'll bump it to the DT maintainer queue. Thank you for your patience, @${author}. + | + |(Ping ${ownerPing}.)`, + } as { [k: string]: string }; +}; diff --git a/packages/mergebot/src/compute-pr-actions.ts b/packages/mergebot/src/compute-pr-actions.ts new file mode 100644 index 0000000000..622be97f04 --- /dev/null +++ b/packages/mergebot/src/compute-pr-actions.ts @@ -0,0 +1,672 @@ +import { ColumnName, LabelName, StalenessKind, ApproverKind, BlessingKind } 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 { noNullish, flatten, unique, sameUser, min, sha256, abbrOid, txt } from "./util/util"; +import dayjs from "dayjs"; +import advancedFormat from "dayjs/plugin/advancedFormat"; +dayjs.extend(advancedFormat); + +export interface Actions { + projectColumn?: ColumnName; + labels: LabelName[]; + responseComments: Comments.Comment[]; + shouldClose: boolean; + shouldMerge: boolean; + shouldUpdateLabels: boolean; + reRunActionsCheckSuiteIDs?: number[]; +} + +function createDefaultActions(): Actions { + return { + projectColumn: "Other", + labels: [], + responseComments: [], + shouldClose: false, + shouldMerge: false, + shouldUpdateLabels: true, + }; +} + +function createEmptyActions(): Actions { + return { + labels: [], + responseComments: [], + shouldClose: false, + shouldMerge: false, + shouldUpdateLabels: false, + }; +} + +interface Staleness { + readonly kind: StalenessKind; + readonly days: number; + readonly state: "fresh" | "attention" | "nearly" | "done"; + readonly explanation?: string; + readonly doTimelineActions: (actions: Actions) => void; +} + +// used to pass around pr info with additional values +interface ExtendedPrInfo extends PrInfo { + readonly orig: PrInfo; + readonly editsInfra: boolean; + readonly possiblyEditsInfra: boolean; // if we can't be sure since there's too many files + readonly checkConfig: boolean; + readonly authorIsOwner: boolean; + readonly allOwners: string[]; + readonly otherOwners: string[]; + readonly noOtherOwners: boolean; + readonly tooManyOwners: boolean; + readonly editsOwners: boolean; + readonly canBeSelfMerged: boolean; + readonly hasValidMergeRequest: boolean; // has request following an offer + readonly pendingCriticalPackages: readonly string[]; // critical packages that need owner approval + readonly approved: boolean; + readonly approverKind: ApproverKind; + readonly requireMaintainer: boolean; + readonly blessable: boolean; + readonly blessingKind: BlessingKind; + readonly approvedReviews: (ReviewInfo & { type: "approved" })[]; + readonly changereqReviews: (ReviewInfo & { type: "changereq" })[]; + readonly staleReviews: (ReviewInfo & { type: "stale" })[]; + readonly approvedBy: ApproverKind[]; + readonly hasChangereqs: boolean; + readonly failedCI: boolean; + readonly blockedCI: boolean; + readonly staleness?: Staleness; + readonly packages: readonly string[]; + readonly hasMultiplePackages: boolean; // not counting infra files + readonly hasDefinitions: boolean; + readonly hasTests: boolean; + readonly isUntested: boolean; + readonly newPackages: readonly string[]; + readonly hasNewPackages: boolean; + readonly hasEditedPackages: boolean; + readonly needsAuthorAction: boolean; + readonly reviewColumn: ColumnName; + readonly isAuthor: (user: string) => boolean; // specialized version of sameUser +} +function extendPrInfo(info: PrInfo): ExtendedPrInfo { + const isAuthor = (user: string) => sameUser(user, info.author); + const authorIsOwner = info.pkgInfo.every((p) => p.owners.some(isAuthor)); + const editsInfra = info.pkgInfo.some((p) => p.name === null && !p.isSafeInfrastructureEdit); + const possiblyEditsInfra = editsInfra || info.tooManyFiles; + const checkConfig = info.pkgInfo.some((p) => p.files.some((f) => f.kind === "package-meta")); + const allOwners = unique(flatten(info.pkgInfo.map((p) => p.owners))); + const otherOwners = allOwners.filter((o) => !isAuthor(o)); + const noOtherOwners = otherOwners.length === 0; + const tooManyOwners = allOwners.length > 50; + const editsOwners = info.pkgInfo.some((p) => p.kind === "edit" && p.addedOwners.length + p.deletedOwners.length > 0); + const packages = noNullish(info.pkgInfo.map((p) => p.name)); + const hasMultiplePackages = packages.length > 1; + const hasDefinitions = info.pkgInfo.some((p) => p.files.some((f) => f.kind === "definition")); + const hasTests = info.pkgInfo.some((p) => p.files.some((f) => f.kind === "test")); + const isUntested = hasDefinitions && !hasTests; + const newPackages = noNullish(info.pkgInfo.map((p) => (p.kind === "add" ? p.name : null))); + const hasNewPackages = newPackages.length > 0; + const hasEditedPackages = packages.length > newPackages.length; + const requireMaintainer = + possiblyEditsInfra || checkConfig || hasMultiplePackages || isUntested || hasNewPackages || tooManyOwners; + const blessable = !(hasNewPackages || possiblyEditsInfra || noOtherOwners); + const blessingKind = getBlessingKind(); + const approvedReviews = info.reviews.filter((r) => r.type === "approved") as ExtendedPrInfo["approvedReviews"]; + 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 approved = getApproved(); + const failedCI = info.ciResult === "fail"; + const blockedCI = info.ciResult === "action_required"; + const ciResult = blockedCI && !possiblyEditsInfra ? "unknown" : info.ciResult; // override ciResult: treated as in-progress if it's approved (blockedCI distinguishes it from real unknown) + const canBeSelfMerged = info.ciResult === "pass" && !info.hasMergeConflict && (approved || blessingKind === "merge"); + const hasValidMergeRequest = !!( + info.mergeOfferDate && + info.mergeRequestDate && + info.mergeRequestDate > info.mergeOfferDate + ); + const needsAuthorAction = failedCI || info.hasMergeConflict || hasChangereqs; + // => could be dropped from the extended info and replaced with: info.staleness?.kind === "Abandoned" + const staleness = getStaleness(); + const reviewColumn = getReviewColumn(); + return { + ...info, + orig: info, + authorIsOwner, + editsInfra, + possiblyEditsInfra, + checkConfig, + allOwners, + otherOwners, + noOtherOwners, + tooManyOwners, + editsOwners, + canBeSelfMerged, + hasValidMergeRequest, + pendingCriticalPackages, + approved, + approverKind, + requireMaintainer, + blessable, + blessingKind, + failedCI, + blockedCI, + ciResult, + staleness, + packages, + hasMultiplePackages, + hasDefinitions, + hasTests, + isUntested, + newPackages, + hasNewPackages, + hasEditedPackages, + approvedReviews, + changereqReviews, + staleReviews, + approvedBy, + hasChangereqs, + needsAuthorAction, + reviewColumn, + isAuthor, + }; + + // Staleness timeline configurations (except for texts that are all in `comments.ts`) + function getStaleness() { + const ownersToPing = + otherOwners.length === 0 + ? ["«anyone?»"] + : otherOwners.filter((o) => !approvedReviews.some((r) => o === r.reviewer)); + const mkStaleness = makeStaleness(info.now, info.author, ownersToPing); + if (canBeSelfMerged) + return ( + info.mergeOfferDate && + mkStaleness( + // no merge offer yet: avoid the unreviewed timeline + "Unmerged", + info.mergeOfferDate, + 4, + 9, + 30, + "*REMOVE*", + ) + ); + if (needsAuthorAction) return mkStaleness("Abandoned", info.lastActivityDate, 6, 22, 30, "*REMOVE*"); + if (!approved) return mkStaleness("Unreviewed", info.lastPushDate, 6, 10, 17, "Needs Maintainer Action"); + return undefined; + } + + function getBlessingKind() { + return info.maintainerBlessed === "Waiting for Author to Merge" + ? "merge" + : info.maintainerBlessed === "Waiting for Code Reviews" + ? "review" + : undefined; + } + + function getApprovedBy() { + return hasChangereqs + ? [] + : approvedReviews.map((r) => + r.isMaintainer ? "maintainer" : allOwners.some((o) => sameUser(o, r.reviewer)) ? "owner" : "other", + ); + } + + function getPendingCriticalPackages() { + return noNullish( + info.pkgInfo.map((p) => + p.popularityLevel === "Critical" && !p.owners.some((o) => approvedReviews.some((r) => sameUser(o, r.reviewer))) + ? p.name + : null, + ), + ); + } + + function getApproverKind() { + const blessed = blessable && blessingKind === "review"; + const who: ApproverKind = requireMaintainer + ? "maintainer" + : ( + { + "Well-liked by everyone": "other", + Popular: "owner", + Critical: "maintainer", + } as const + )[info.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)) + ); + } + + function getReviewColumn(): ColumnName { + // Get the project column for review with least access + // E.g. let people review, but fall back to the DT maintainers based on the access rights above + return approverKind !== "maintainer" + ? "Waiting for Code Reviews" + : blessable + ? "Needs Maintainer Review" + : "Needs Maintainer Action"; + } +} + +export function process(prInfo: BotResult, extendedCallback: (info: ExtendedPrInfo) => void = (_i) => {}): Actions { + if (prInfo.type === "remove") { + return { + ...createEmptyActions(), + projectColumn: prInfo.isDraft ? "Needs Author Action" : "*REMOVE*", + }; + } + + const actions = createDefaultActions(); + const post = (c: Comments.Comment) => actions.responseComments.push(c); + + if (prInfo.type === "error") { + actions.projectColumn = "Other"; + actions.labels.push("Mergebot Error"); + post(Comments.hadError(prInfo.author, prInfo.message)); + return actions; + } + + // Collect some additional info + const info = extendPrInfo(prInfo); + extendedCallback(info); + + // General labelling and housekeeping + const label = (label: LabelName, cond: unknown = true) => { + const i = actions.labels.indexOf(label); + if (cond && i < 0) actions.labels.push(label); + else if (!cond && i >= 0) actions.labels.splice(i, 1); + }; + label("Has Merge Conflict", info.hasMergeConflict); + label("The CI failed", info.failedCI); + label("The CI is blocked", info.ciResult === "action_required"); + label("Revision needed", info.hasChangereqs); + label("Critical package", info.popularityLevel === "Critical"); + label("Popular package", info.popularityLevel === "Popular"); + label("Other Approved", info.approvedBy.includes("other")); + label("Owner Approved", info.approvedBy.includes("owner") && info.pendingCriticalPackages.length === 0); // and *all* owners of critical packages + label("Maintainer Approved", info.approvedBy.includes("maintainer")); + label("New Definition", info.hasNewPackages); + label("Edits Owners", info.editsOwners); + label("Edits Infrastructure", info.editsInfra); + label("Possibly Edits Infrastructure", info.possiblyEditsInfra && !info.editsInfra); + label("Edits multiple packages", info.hasMultiplePackages); + label("Author is Owner", info.authorIsOwner); + label("No Other Owners", info.hasEditedPackages && info.noOtherOwners); + label("Too Many Owners", info.tooManyOwners); + label("Check Config", info.checkConfig); + label("Untested Change", info.isUntested); + label("Too Many Files", info.tooManyFiles); + label("Huge Change", info.hugeChange); + if (info.staleness?.state === "nearly" || info.staleness?.state === "done") label(info.staleness.kind); + + // Update intro comment + post({ tag: "welcome", status: createWelcomeComment(info, post) }); + + // Ping reviewers when needed + const headCommitAbbrOid = abbrOid(info.headCommitOid); + if (!(info.hasChangereqs || info.approvedBy.includes("owner") || info.approvedBy.includes("maintainer"))) { + if (info.noOtherOwners) { + if (info.popularityLevel !== "Critical") { + const authorIsNewOwner = flatten(info.pkgInfo.map((p) => p.addedOwners)).includes(info.author); + post( + Comments.pingReviewersOther(info.author, info.authorIsOwner || authorIsNewOwner, urls.review(info.pr_number)), + ); + } + } else if (info.tooManyOwners) { + post(Comments.pingReviewersTooMany(info.otherOwners)); + } else { + post(Comments.pingReviewers(info.otherOwners, urls.review(info.pr_number))); + } + } + + // Some step should override actions.projectColumn, the default "Other" indicates a problem + if (info.author === "github-actions") { + actions.projectColumn = "Needs Maintainer Action"; + return actions; + } + + // First-timers are blocked from CI runs until approved, this case is for infra edits (require a maintainer) + if (info.ciResult === "action_required") { + actions.projectColumn = "Needs Maintainer Action"; + } + // Needs author attention (bad CI, merge conflicts) + else if (info.needsAuthorAction) { + actions.projectColumn = "Needs Author Action"; + if (info.hasMergeConflict) post(Comments.mergeConflicted(headCommitAbbrOid, info.author)); + if (info.failedCI) post(Comments.ciFailed(headCommitAbbrOid, info.author, info.ciUrl!)); + if (info.hasChangereqs) post(Comments.changesRequest(headCommitAbbrOid, info.author)); + } + // CI is running; default column is Waiting for Reviewers + else if (info.ciResult === "unknown") { + actions.projectColumn = "Waiting for Code Reviews"; + if (info.blockedCI) + // => we should approve the tests (by rerunning) + actions.reRunActionsCheckSuiteIDs = info.reRunCheckSuiteIDs || undefined; + } + // CI is missing + else if (info.ciResult === "missing") { + // This bot is faster than CI in coming back to give a response, and so the bot starts flipping between + // a 'where is CI'-ish state and a 'got CI deets' state. To work around this, we wait a + // minute since the last timeline push action before label/project states can be updated + if (dayjs(info.now).diff(info.lastPushDate, "minutes") >= 1) { + label("Where is GH Actions?"); + } else { + delete actions.projectColumn; + } + } + // CI is green + else if (info.ciResult === "pass") { + if (!info.canBeSelfMerged) { + actions.projectColumn = info.reviewColumn; + } else { + label("Self Merge"); + // post even when merging, so it won't get deleted + post( + Comments.offerSelfMerge( + info.author, + info.tooManyOwners || info.hasMultiplePackages ? [] : info.otherOwners, + headCommitAbbrOid, + ), + ); + if (info.hasValidMergeRequest) { + actions.shouldMerge = true; + actions.projectColumn = "Recently Merged"; + } else { + actions.projectColumn = "Waiting for Author to Merge"; + } + } + // Ping stale reviewers if any + if (info.staleReviews.length > 0) { + const { abbrOid } = min(info.staleReviews, (l, r) => +l.date - +r.date)!; + const reviewers = info.staleReviews.map((r) => r.reviewer); + post(Comments.pingStaleReviewer(abbrOid, reviewers)); + } + } + + if (!actions.shouldMerge && info.mergeRequestUser) { + post(Comments.waitUntilMergeIsOK(info.mergeRequestUser, headCommitAbbrOid, urls.workflow, info.mainBotCommentID)); + } + + // Has it: got no DT tests but is approved by DT modules and basically blocked by the DT maintainers - and it has been over 3 days? + // Send a message reminding them that they can un-block themselves by adding tests. + if ( + !info.hasTests && + !info.hasMultiplePackages && + info.approvedBy.includes("owner") && + !info.editsInfra && + info.approverKind === "maintainer" && + (info.staleness?.days ?? 0) > 3 + ) { + post( + Comments.remindPeopleTheyCanUnblockPR( + info.author, + info.approvedReviews.map((r) => r.reviewer), + info.ciResult === "pass", + headCommitAbbrOid, + ), + ); + } + + // Timeline-related actions + info.staleness?.doTimelineActions(actions); + + return actions; +} + +function makeStaleness(now: Date, author: string, ownersToPing: string[]) { + // curried for convenience + return ( + kind: StalenessKind, + since: Date, + freshDays: number, + attnDays: number, + nearDays: number, + doneColumn: ColumnName, + ) => { + const days = dayjs(now).diff(since, "days"); + const state = days <= freshDays ? "fresh" : days <= attnDays ? "attention" : days <= nearDays ? "nearly" : "done"; + const kindAndState = `${kind}:${state}`; + const explanation = Comments.stalenessExplanations[kindAndState]; + const expires = dayjs(since).add(nearDays, "days").format("MMM Do"); + const comment = Comments.stalenessComment(author, ownersToPing, expires)[kindAndState]; + const doTimelineActions = (actions: Actions) => { + if (comment !== undefined) { + const tag = state === "done" ? kindAndState : `${kindAndState}:${since.toISOString().replace(/T.*$/, "")}`; + actions.responseComments.push({ tag, status: comment }); + } + if (state === "done") { + if (doneColumn === "*REMOVE*") actions.shouldClose = true; // close when reming + actions.projectColumn = doneColumn; + } + }; + return { kind, days, state, explanation, doTimelineActions } as const; + }; +} + +function createWelcomeComment(info: ExtendedPrInfo, post: (c: Comments.Comment) => void) { + let content = ""; + function display(...lines: string[]) { + lines.forEach((line) => (content += line + "\n")); + } + + const testsLink = info.hasNewPackages ? urls.testingNewPackages : urls.testingEditedPackages; + + const specialWelcome = info.isFirstContribution + ? txt`| 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.` + : info.author === "github-actions" + ? "From one bot to another, beep bloop boople bloop." + : ""; + display( + `@${info.author} Thank you for submitting this PR!${specialWelcome}`, + ``, + `***This is a live comment that I will keep updated.***`, + ); + + const criticalNum = info.pkgInfo.reduce((num, pkg) => (pkg.popularityLevel === "Critical" ? num + 1 : num), 0); + if (criticalNum === 0 && info.popularityLevel === "Critical") + throw new Error("Internal Error: unexpected criticalNum === 0"); + const requiredApproverLower = + info.approverKind === "other" + ? "type definition owners, DT maintainers or others" + : info.approverKind === "maintainer" + ? "a DT maintainer" + : criticalNum <= 1 + ? "type definition owners or DT maintainers" + : "all owners or a DT maintainer"; + const requiredApproverUpper = requiredApproverLower[0]!.toUpperCase() + requiredApproverLower.substring(1); + + if (info.isUntested) { + post(Comments.suggestTesting(info.author, testsLink)); + } else if (info.possiblyEditsInfra) { + display( + ``, + `This PR ${info.editsInfra ? "touches" : "might touch"} some part of DefinitelyTyped infrastructure, so ${requiredApproverLower} will need to review it. This is rare — did you mean to do this?`, + ); + } + + const announceList = (what: string, xs: readonly string[]) => `${xs.length} ${what}${xs.length !== 1 ? "s" : ""}`; + const usersToString = (users: string[]) => users.map((u) => (info.isAuthor(u) ? "✎" : "") + "@" + u).join(", "); + const reviewLink = (f: FileInfo) => + `[\`${f.path.replace(/^types\/(.*\/)/, "$1")}\`](${urls.review( + info.pr_number, + )}/${info.headCommitOid}#diff-${sha256(f.path)})`; + + display( + ``, + `## ${announceList("package", info.packages)} in this PR${ + info.editsInfra ? " (and infra files)" : info.tooManyFiles ? " (and possibly others)" : "" + }`, + ``, + ); + if (info.tooManyFiles) { + display(``, `***Note: this PR touches too many files, check it!***`); + } + let addedSelfToManyOwners = 0; + if (info.pkgInfo.length === 0) { + display(`This PR is editing only infrastructure files!`); + } + for (const p of info.pkgInfo) { + if (p.name === null) continue; + const kind = p.kind === "add" ? " (*new!*)" : p.kind === "delete" ? " (*probably deleted!*)" : ""; + const urlPart = p.name.replace(/^(.*?)__(.)/, "@$1/$2"); + const authorIsOwner = !p.owners.some(info.isAuthor) ? [] : [`(author is owner)`]; + display( + [ + `* \`${p.name}\`${kind} —`, + `[on npm](https://www.npmjs.com/package/${urlPart}),`, + `[on unpkg](https://unpkg.com/browse/${urlPart}@latest/)`, + ...authorIsOwner, + ].join(" "), + ); + const approvers = info.approvedReviews + .filter((r) => p.owners.some((o) => sameUser(o, r.reviewer))) + .map((r) => r.reviewer); + if (approvers.length) { + display(` - owner-approval: ${usersToString(approvers)}`); + } + const displayOwners = (what: string, owners: string[]) => { + if (owners.length === 0) return; + display(` - ${announceList(`${what} owner`, owners)}: ${usersToString(owners)}`); + }; + displayOwners("added", p.addedOwners); + displayOwners("removed", p.deletedOwners); + if (!info.authorIsOwner && p.owners.length >= 4 && p.addedOwners.some(info.isAuthor)) addedSelfToManyOwners++; + let showSuspects = false; + for (const file of p.files) { + if (!file.suspect) continue; + if (!showSuspects) display(` - Config files to check:`); + display(` - ${reviewLink(file)}: ${file.suspect}`); + showSuspects = true; + } + } + if (info.editsInfra) { + display(`* Infra files`); + for (const file of info.pkgInfo.find((p) => p.name === null)!.files) display(` - ${reviewLink(file)}`); + } + if (addedSelfToManyOwners > 0) { + display( + ``, + txt`@${info.author}: I see that you have added yourself as an + owner${addedSelfToManyOwners > 1 ? " to several packages" : ""}, + are you sure you want to [become an owner](${urls.definitionOwners})?`, + ); + } + + // Lets the author know who needs to review this + display(``, `## Code Reviews`, ``); + if (info.blessingKind === "merge") { + display("This PR can be merged."); + } else if (info.hasNewPackages) { + display(txt`This PR adds a new definition, so it needs to be reviewed by + ${requiredApproverLower} before it can be merged.`); + } else if (info.popularityLevel === "Critical" && info.blessingKind !== "review") { + display(txt`Because this is a widely-used package, ${requiredApproverLower} + will need to review it before it can be merged.`); + } else if (!info.requireMaintainer) { + const and = + info.hasDefinitions && info.hasTests ? "and updated the tests (👏)" : "and there were no type definition changes"; + display(txt`Because you edited one package ${and}, I can help you merge this PR + once someone else signs off on it.`); + } else if (info.blessingKind === "review") { + display("This PR can be merged once it's reviewed."); + } else { + if (info.noOtherOwners) { + display(txt`There aren't any other owners of this package, + so ${requiredApproverLower} will review it.`); + } else if (info.hasMultiplePackages) { + display(txt`Because this PR edits multiple packages, it can be merged + once it's reviewed by ${requiredApproverLower}.`); + } else if (info.checkConfig) { + display(txt`Because this PR edits the configuration file, it can be merged + once it's reviewed by ${requiredApproverLower}.`); + } else if (info.hugeChange) { + display(txt`Because this is a huge PR, it can be merged + once it's reviewed by ${requiredApproverLower}.`); + } else { + display(`This PR can be merged once it's reviewed by ${requiredApproverLower}.`); + } + } + + if (!info.tooManyFiles) { + display(``, `You can test the changes of this PR [in the Playground](${urls.playground(info.pr_number)}).`); + } + + display(``, `## Status`, ``, ` * ${emoji.failed(info.hasMergeConflict)} No merge conflicts`); + { + const result = emoji.result(info.ciResult); + display(` * ${result.emoji} Continuous integration tests ${result.text}`); + } + + const approved = emoji.pending(!(info.approved || info.blessingKind === "merge")); + + if (info.hasNewPackages) { + display(` * ${approved} Only ${requiredApproverLower} can approve changes when there are new packages added`); + } else if (info.editsInfra) { + const infraFiles = info.pkgInfo.find((p) => p.name === null)!.files; + const links = infraFiles.map(reviewLink); + display( + ` * ${approved} ${requiredApproverUpper} needs to approve changes that affect DT infrastructure (${links.join(", ")})`, + ); + } else if (criticalNum > 1 && info.blessingKind === "review") { + display(` * ${approved} ${requiredApproverUpper} needs to approve changes that affect more than one package`); + for (const p of info.pkgInfo) { + if (!(p.name && p.popularityLevel === "Critical")) continue; + display(` - ${emoji.pending(info.pendingCriticalPackages.includes(p.name))} ${p.name}`); + } + } else if (info.hasMultiplePackages) { + display(` * ${approved} ${requiredApproverUpper} needs to approve changes that affect more than one package`); + } else if (!info.requireMaintainer || info.blessingKind === "review") { + display(` * ${approved} Most recent commit is approved by ${requiredApproverLower}`); + } else if (info.noOtherOwners) { + display(` * ${approved} ${requiredApproverUpper} can merge changes when there are no other reviewers`); + } else if (info.checkConfig) { + display(` * ${approved} ${requiredApproverUpper} needs to approve changes that affect module config files`); + } else { + display(` * ${approved} Only ${requiredApproverLower} can approve changes [without tests](${testsLink})`); + } + + display(``); + if (!info.canBeSelfMerged) { + display(txt`Once every item on this list is checked, + I'll ask you for permission to merge and publish the changes.`); + } else { + display(txt`All 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.`); + } + + if (info.staleness && info.staleness.state !== "fresh") { + const expl = info.staleness.explanation; + display( + ``, + `## Inactive`, + ``, + `This PR has been inactive for ${info.staleness.days} days${!expl ? "." : " — " + expl}`, + ); + } + + // Remove the 'now' attribute because otherwise the comment would need editing every time + // and that's spammy. + const shallowPresentationInfoCopy = { ...info.orig, now: "-" }; + + display( + ``, + `----------------------`, + `
Diagnostic Information: What the bot saw about this PR\n\n${ + "```json\n" + JSON.stringify(shallowPresentationInfoCopy, undefined, 2) + "\n```" + }\n\n
`, + ); + + return content.trimEnd(); +} diff --git a/packages/mergebot/src/discussions.ts b/packages/mergebot/src/discussions.ts new file mode 100644 index 0000000000..c4d4454f2b --- /dev/null +++ b/packages/mergebot/src/discussions.ts @@ -0,0 +1,11 @@ +export const canHandleRequest = (event: string, action: string) => + event === "discussion" && (action === "created" || action === "edited"); + +export function extractNPMReference(discussion: { title: string }) { + const title = discussion.title; + if (title.includes("[") && title.includes("]")) { + const full = title.split("[")[1]!.split("]")[0]; + return full!.replace("@types/", ""); + } + return undefined; +} diff --git a/packages/mergebot/src/emoji.ts b/packages/mergebot/src/emoji.ts new file mode 100644 index 0000000000..f334008336 --- /dev/null +++ b/packages/mergebot/src/emoji.ts @@ -0,0 +1,20 @@ +import { CIResult } from "./pr-info"; + +export const failed = (isFailed: boolean) => (isFailed ? "❌" : "✅"); + +export const pending = (isPending: boolean) => (isPending ? "🕐" : "✅"); + +export const result = (result: CIResult) => { + switch (result) { + case "fail": + return { emoji: "❌", text: "have failed" }; + case "pass": + return { emoji: "✅", text: "have passed" }; + case "action_required": + return { emoji: "🔐", text: "waiting for a maintainer to authorize a run" }; + case "unknown": + return { emoji: "🕐", text: "are still running" }; + case "missing": + return { emoji: "❓", text: "have gone missing" }; + } +}; diff --git a/packages/mergebot/src/execute-pr-actions.ts b/packages/mergebot/src/execute-pr-actions.ts new file mode 100644 index 0000000000..ece581b6f5 --- /dev/null +++ b/packages/mergebot/src/execute-pr-actions.ts @@ -0,0 +1,202 @@ +import { LabelName, labelNames } from "./basic"; +import { MutationOptions } from "@apollo/client/core"; +import * as schema from "@octokit/graphql-schema/schema"; +import { PR_repository_pullRequest } from "./queries/schema/PR"; +import { Actions } from "./compute-pr-actions"; +import { createMutation, client } from "./graphql-client"; +import { getProjectBoardColumns, getLabels } from "./util/cachedQueries"; +import { noNullish, flatten } from "./util/util"; +import { tagsToDeleteIfNotPosted } from "./comments"; +import * as comment from "./util/comment"; +import { request } from "https"; + +// https://github.com/DefinitelyTyped/DefinitelyTyped/projects/5 +const projectBoardNumber = 5; + +export async function executePrActions(actions: Actions, pr: PR_repository_pullRequest, dry?: boolean) { + const botComments: ParsedComment[] = getBotComments(pr); + const mutations = noNullish([ + // the mutations are ordered for presentation in the timeline: + // * welcome comment is always first + // * then labels, as a short "here's what I noticed" + // * column changes after that (follow the labels since this is the consequence) + // * state changes next, similar to column changes + // * finally, any other comments (better to see label changes and then a comment that explains what happens now) + ...getMutationsForComments(actions, pr.id, botComments, true), + ...(await getMutationsForLabels(actions, pr)), + ...(await getMutationsForProjectChanges(actions, pr)), + ...getMutationsForCommentRemovals(actions, botComments), + ...getMutationsForChangingPRState(actions, pr), + ...getMutationsForComments(actions, pr.id, botComments, false), + ]); + const restCalls = getMutationsForReRunningCI(actions); + if (!dry) { + // Perform mutations one at a time + for (const mutation of mutations) + await client.mutate(mutation as MutationOptions); + for (const restCall of restCalls) await doRestCall(restCall); + } + return [...mutations, ...restCalls]; +} + +async function getMutationsForLabels(actions: Actions, pr: PR_repository_pullRequest) { + if (!actions.shouldUpdateLabels) return []; + const labels = noNullish(pr.labels?.nodes).map((l) => l.name); + const makeMutations = async (pred: (l: LabelName) => boolean, query: keyof schema.Mutation) => { + const labels = labelNames.filter(pred); + return labels.length === 0 + ? null + : createMutation(query, { + labelIds: await Promise.all(labels.map((label) => getLabelIdByName(label))), + labelableId: pr.id, + }); + }; + return Promise.all([ + makeMutations((label) => !labels.includes(label) && actions.labels.includes(label), "addLabelsToLabelable"), + makeMutations((label) => labels.includes(label) && !actions.labels.includes(label), "removeLabelsFromLabelable"), + ]); +} + +async function getMutationsForProjectChanges(actions: Actions, pr: PR_repository_pullRequest) { + if (!actions.projectColumn) return []; + const card = pr.projectCards.nodes?.find((card) => card?.project.number === projectBoardNumber); + if (actions.projectColumn === "*REMOVE*") { + if (!card || card.column?.name === "Recently Merged") return []; + return [createMutation("deleteProjectCard", { cardId: card.id })]; + } + // Existing card is ok => do nothing + if (card?.column?.name === actions.projectColumn) return []; + const columnId = await getProjectBoardColumnIdByName(actions.projectColumn); + return [ + card + ? // Move existing card + createMutation("moveProjectCard", { cardId: card.id, columnId }) + : // No existing card => create a new one + createMutation("addProjectCard", { contentId: pr.id, projectColumnId: columnId }), + ]; +} + +interface ParsedComment { + id: string; + body: string; + tag: string; + status: string; +} + +function getBotComments(pr: PR_repository_pullRequest): ParsedComment[] { + return noNullish( + (pr.comments.nodes ?? []) + .filter((comment) => comment?.author?.login === "typescript-bot") + .map((c) => { + const { id, body } = c!, + parsed = comment.parse(body); + return parsed && { id, body, ...parsed }; + }), + ); +} + +function getMutationsForComments(actions: Actions, prId: string, botComments: ParsedComment[], onlyWelcome: boolean) { + return flatten( + actions.responseComments.map((wantedComment) => { + if ((wantedComment.tag === "welcome") !== onlyWelcome) return []; + const sameTagComments = botComments.filter((comment) => comment.tag === wantedComment.tag); + return sameTagComments.length === 0 + ? [ + createMutation("addComment", { + subjectId: prId, + body: comment.make(wantedComment), + }), + ] + : sameTagComments.map((actualComment) => + actualComment.status === wantedComment.status + ? null // Comment is up-to-date; skip + : createMutation("updateIssueComment", { + id: actualComment.id, + body: comment.make(wantedComment), + }), + ); + }), + ); +} + +function getMutationsForCommentRemovals(actions: Actions, botComments: ParsedComment[]) { + const ciTagToKeep = actions.responseComments.find((c) => c.tag.startsWith("ci-complaint"))?.tag; + const postedTags = actions.responseComments.map((c) => c.tag); + return botComments.map((comment) => { + const { tag, id } = comment; + const del = () => createMutation("deleteIssueComment", { id }); + // Remove stale CI 'your build is green' notifications + if (tag.includes("ci-") && tag !== ciTagToKeep) return del(); + // tags for comments that should be removed when not included in the actions + if (tagsToDeleteIfNotPosted.includes(tag) && !postedTags.includes(tag)) return del(); + return null; + }); +} + +function getMutationsForChangingPRState(actions: Actions, pr: PR_repository_pullRequest) { + return [ + actions.shouldMerge + ? createMutation("mergePullRequest", { + commitHeadline: `🤖 Merge PR #${pr.number} ${pr.title} by @${pr.author?.login ?? "(ghost)"}`, + expectedHeadOid: pr.headRefOid, + mergeMethod: "SQUASH", + pullRequestId: pr.id, + }) + : null, + actions.shouldClose + ? createMutation("closePullRequest", { pullRequestId: pr.id }) + : null, + ]; +} + +async function getProjectBoardColumnIdByName(name: string): Promise { + const columns = await getProjectBoardColumns(); + const res = columns.find((e) => e.name === name)?.id; + if (!res) throw new Error(`No project board column named "${name}" exists`); + return res; +} + +async function getLabelIdByName(name: string): Promise { + const labels = await getLabels(); + const res = labels.find((l) => l.name === name)?.id; + if (!res) throw new Error(`No label named "${name}" exists`); + return res; +} + +// *** HACK *** +// A GQL mutation of `rerequestCheckSuite` throws an error that it's only +// allowed from a GH app, but a `rerequest` rest call works fine. So do a rest +// call for now, and hopefully GH will have a better way of handling these +// first-time contributors. This whole mess should then turn to a GQL mutation, +// or better, be removed if there's some repo settings to allow test builds +// based on paths or something similar. + +interface RestMutation { + method: string; + op: string; +} + +function doRestCall(call: RestMutation): Promise { + const url = `https://api.github.com/repos/DefinitelyTyped/DefinitelyTyped/${call.op}`; + const headers = { + accept: "application/vnd.github.v3+json", + authorization: `token ${process.env.BOT_AUTH_TOKEN}`, + "user-agent": "mergebot", + }; + return new Promise((resolve, reject) => { + const req = request(url, { method: call.method, headers }, (reply) => { + const bad = !reply.statusCode || reply.statusCode < 200 || reply.statusCode >= 300; + if (bad) return reject(`doRestCall failed with a status of ${reply.statusCode}`); + return resolve(); + }); + req.on("error", reject); + req.end(); + }); +} + +function getMutationsForReRunningCI(actions: Actions) { + return (actions.reRunActionsCheckSuiteIDs || []).map((id) => ({ + method: "POST", + op: `check-suites/${id}/rerequest`, + })); +} diff --git a/packages/mergebot/src/functions/api.ts b/packages/mergebot/src/functions/api.ts new file mode 100644 index 0000000000..85bceba457 --- /dev/null +++ b/packages/mergebot/src/functions/api.ts @@ -0,0 +1,42 @@ +import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions"; +import { getPRInfo } from "../queries/pr-query"; +const headers = { + "Content-Type": "text/json", + "Access-Control-Allow-Methods": "GET", + "Access-Control-Allow-Origin": "https://www.typescriptlang.org", + Vary: "Origin", +}; +const notFound = (reason: string) => ({ + headers, + status: 404, + body: reason, +}); +export async function httpTrigger(request: HttpRequest, context: InvocationContext): Promise { + context.log(`This time it was "${request.url}"`); + + const prNumber = Number(request.query.get("number")); + if (!prNumber || isNaN(prNumber)) return notFound("No PR number"); + + const info = await getPRInfo(prNumber); + const prInfo = info.data.repository?.pullRequest; + + if (!prInfo) return notFound("No PR metadata"); + + const welcomeComment = prInfo.comments.nodes!.find( + (c) => c && c.author?.login === "typescript-bot" && c.body.endsWith(""), + ); + if (!welcomeComment || !welcomeComment.body || !welcomeComment.body.includes("```json")) + return notFound("PR comment with JSON not found"); + + // Extract the JSON from the comment + const jsonText = welcomeComment.body.replace(/^[^]*```json\n([^]*)\n```[^]*$/, "$1"); + const response = { title: prInfo.title, ...JSON.parse(jsonText) }; + return { headers, status: 200, body: JSON.stringify(response) }; +} +// Allow all others to access this, we can +// tighten this down to the TS URLs if the route is abused +app.http("Playground-Info", { + methods: ["GET", "POST"], + authLevel: "anonymous", + handler: httpTrigger, +}); diff --git a/packages/mergebot/src/functions/discussions-trigger.ts b/packages/mergebot/src/functions/discussions-trigger.ts new file mode 100644 index 0000000000..6680af623d --- /dev/null +++ b/packages/mergebot/src/functions/discussions-trigger.ts @@ -0,0 +1,195 @@ +import { app, InvocationContext } from "@azure/functions"; +import { gql, MutationOptions } from "@apollo/client/core"; +import type { Discussion, DiscussionWebhook } from "../types/discussions"; +import { canHandleRequest, extractNPMReference } from "../discussions"; +import { createMutation, client } from "../graphql-client"; +import { reply } from "../util/reply"; +import { httpLog, shouldRunRequest } from "../util/verify"; +import { txt } from "../util/util"; +import { getOwnersOfPackage } from "../pr-info"; +import { fetchFile } from "../util/fetchFile"; + +app.http("Discussions-Trigger", { + methods: ["GET", "POST"], + handler: async (req, context) => { + const body = (await req.json()) as DiscussionWebhook; + httpLog(context, req.headers, body); + + if (!(await shouldRunRequest(context, req.headers, body, canHandleRequest))) { + return reply(context, 200, "Can't handle this request"); + } + + return handleTrigger({ event: req.headers.get("x-github-event")!, action: body.action, body }, context); + }, +}); + +const handleTrigger = ( + info: { event: string; action: string; body: DiscussionWebhook }, + context: InvocationContext, +) => { + const categoryID = info.body.discussion.category.slug; + if (categoryID === "issues-with-a-types-package") { + return pingAuthorsAndSetUpDiscussion(info.body.discussion); + } else if (categoryID === "request-a-new-types-package" && info.action === "created") { + return updateDiscordWithRequest(info.body.discussion); + } + return reply(context, 200, "Can't handle this specific request"); +}; + +const couldNotFindMessage = txt` + |Hi, we could not find a reference to the types you are talking about in this discussion. + |Please edit the title to include the name on npm inside square brackets. + | + |E.g. + |- \`"[@typescript/vfs] Does not x, y"\` + |- \`"Missing x inside [node]"\` + |- \`"[express] Broken support for template types"\` + | + |By doing this, I can ping the folks who maintain the types you are referring to. +`; + +const errorsGettingOwners = (str: string) => txt` + |Hi, we could not find [${str}] in DefinitelyTyped, is there possibly a typo? +`; + +const couldNotFindOwners = (str: string) => txt` + |Hi, we had an issue getting the owners for [${str}] - first check if you have a typeo, otherwise please raise an issue on + |microsoft/DefinitelyTyped-tools if the module exists on DT but this bot could not find information for it. +`; + +const gotAReferenceMessage = (module: string, owners: string[]) => txt` + |Thanks for the discussion about "${module}", some useful links for everyone: + | + | - [npm](https://www.npmjs.com/package/${module}) + | - [DT](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/${module}) + | - [Related discussions](https://github.com/DefinitelyTyped/DefinitelyTyped/discussions?discussions_q=label%3A%22Pkg%3A+${module}%22) + | + |Pinging the DT module owners: ${owners.map((o) => "@" + o).join(", ")}. +`; + +async function pingAuthorsAndSetUpDiscussion(discussion: Discussion) { + const aboutNPMRef = extractNPMReference(discussion); + if (!aboutNPMRef) { + // Could not find a types reference + await updateOrCreateMainComment(discussion, couldNotFindMessage); + } else { + const owners = await getOwnersOfPackage(aboutNPMRef, "master", fetchFile); + if (owners instanceof Error) { + await updateOrCreateMainComment(discussion, errorsGettingOwners(aboutNPMRef)); + } else if (!owners) { + await updateOrCreateMainComment(discussion, couldNotFindOwners(aboutNPMRef)); + } else { + const message = gotAReferenceMessage(aboutNPMRef, owners); + await updateOrCreateMainComment(discussion, message); + } + await addLabel(discussion, "Pkg: " + aboutNPMRef, `Discussions related to ${aboutNPMRef}`); + } + return { status: 200, body: "OK" }; +} + +async function updateDiscordWithRequest(discussion: Discussion) { + const discordWebhookAddress = process.env.DT_MODULE_REQ_DISCORD_WEBHOOK; + if (!discordWebhookAddress) throw new Error("DT_MODULE_REQ_DISCORD_WEBHOOK not set in ENV"); + + // https://birdie0.github.io/discord-webhooks-guide/discord_webhook.html + const webhook = { + content: `New DT Module requested:`, + embeds: [{ title: discussion.title, url: discussion.html_url }], + }; + await fetch(discordWebhookAddress, { + method: "POST", + body: JSON.stringify(webhook), + headers: { "content-type": "application/json" }, + }); + return { status: 200, body: "OK" }; +} + +async function updateOrCreateMainComment(discussion: Discussion, message: string) { + const discussionComments = await getCommentsForDiscussionNumber(discussion.number); + const previousComment = discussionComments.find((c) => c.author.login === "typescript-bot"); + if (previousComment) { + await client.mutate( + createMutation("updateDiscussionComment" as any, { body: message, commentId: previousComment.id }), + ); + } else { + await client.mutate( + createMutation("addDiscussionComment" as any, { body: message, discussionId: discussion.node_id }), + ); + } +} + +async function addLabel(discussion: Discussion, labelName: string, description?: string) { + const existingLabel = await getLabelByName(labelName); + let labelID = null; + if (existingLabel.label && existingLabel.label.name === labelName) { + labelID = existingLabel.label.id; + } else { + const color = "eeeeee"; + const responseSubquery = "label { id }"; + const newLabel = await client.mutate( + createMutation( + "createLabel" as any, + { name: labelName, repositoryId: existingLabel.repoID, color, description }, + responseSubquery, + ) as unknown as MutationOptions< + { createLabel: { label: { id: string } } }, + { input: { name: string; repositoryId: any; color: string; description: string | undefined } } + >, + ); + labelID = newLabel.data!.createLabel.label.id; + } + await client.mutate( + createMutation("addLabelsToLabelable" as any, { labelableId: discussion.node_id, labelIds: [labelID] }), + ); +} + +async function getLabelByName(name: string) { + const info = await client.query({ + query: gql` + query GetLabel($name: String!) { + repository(name: "DefinitelyTyped", owner: "DefinitelyTyped") { + id + name + labels(query: $name, first: 1) { + nodes { + id + name + } + } + } + } + `, + variables: { name }, + fetchPolicy: "no-cache", + }); + + const label: { id: string; name: string } | undefined = info.data.repository.labels.nodes[0]; + return { repoID: info.data.repository.id, label }; +} + +async function getCommentsForDiscussionNumber(number: number) { + const info = await client.query({ + query: gql` + query GetDiscussionComments($discussionNumber: Int!) { + repository(name: "DefinitelyTyped", owner: "DefinitelyTyped") { + name + discussion(number: $discussionNumber) { + comments(first: 100) { + nodes { + author { + login + } + id + body + } + } + } + } + } + `, + variables: { discussionNumber: number }, + fetchPolicy: "no-cache", + }); + + return info.data.repository.discussion.comments.nodes as { author: { login: string }; body: string; id: string }[]; +} diff --git a/packages/mergebot/src/functions/httpTrigger.ts b/packages/mergebot/src/functions/httpTrigger.ts new file mode 100644 index 0000000000..fb4a0734c6 --- /dev/null +++ b/packages/mergebot/src/functions/httpTrigger.ts @@ -0,0 +1,15 @@ +import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions"; + +export async function httpTrigger(request: HttpRequest, context: InvocationContext): Promise { + context.log(`Http function processed request for url "${request.url}"`); + + const name = request.query.get("name") || (await request.text()) || "world"; + + return { body: `Hello, ${name}!` }; +} + +app.http("httpTrigger", { + methods: ["GET", "POST"], + authLevel: "anonymous", + handler: httpTrigger, +}); diff --git a/packages/mergebot/src/functions/index.ts b/packages/mergebot/src/functions/index.ts new file mode 100644 index 0000000000..39a94309b0 --- /dev/null +++ b/packages/mergebot/src/functions/index.ts @@ -0,0 +1,4 @@ +import "./api"; +import "./discussions-trigger"; +import "./httpTrigger"; +import "./pr-trigger"; diff --git a/packages/mergebot/src/functions/pr-trigger.ts b/packages/mergebot/src/functions/pr-trigger.ts new file mode 100644 index 0000000000..a5dae1372f --- /dev/null +++ b/packages/mergebot/src/functions/pr-trigger.ts @@ -0,0 +1,172 @@ +// GH webhook entry point + +import { getPRInfo } from "../queries/pr-query"; +import { deriveStateForPR } from "../pr-info"; +import { process as computeActions } from "../compute-pr-actions"; +import { executePrActions } from "../execute-pr-actions"; +import { mergeCodeOwnersOnGreen } from "../side-effects/merge-codeowner-prs"; +import { runQueryToGetPRMetadataForSHA1 } from "../queries/SHA1-to-PR-query"; +import { app, HttpRequest, InvocationContext } from "@azure/functions"; +import { reply } from "../util/reply"; +import { httpLog, shouldRunRequest } from "../util/verify"; +import type { + CheckSuiteEvent, + IssueCommentEvent, + ProjectCardEvent, + PullRequestEvent, + PullRequestReviewEvent, +} from "@octokit/webhooks-types"; + +app.http("PR-Trigger", { methods: ["GET", "POST"], authLevel: "anonymous", handler: httpTrigger }); +const eventNames = [ + "check_suite.completed", + "issue_comment.created", + "issue_comment.deleted", + "issue_comment.edited", + "project_card.moved", + "pull_request.closed", + "pull_request.edited", + "pull_request.opened", + "pull_request.ready_for_review", + "pull_request.reopened", + "pull_request.synchronize", + "pull_request_review.dismissed", + "pull_request_review.submitted", +] as const; +type PrEvent = + | { name: "check_suite"; payload: CheckSuiteEvent } + | { name: "issue_comment"; payload: IssueCommentEvent } + | { name: "project_card"; payload: ProjectCardEvent } + | { name: "pull_request"; payload: PullRequestEvent } + | { name: "pull_request_review"; payload: PullRequestReviewEvent }; + +class IgnoredBecause { + constructor(public reason: string) {} +} + +async function httpTrigger(req: HttpRequest, context: InvocationContext) { + const body = (await req.json()) as any; + httpLog(context, req.headers, body); + const evName = req.headers.get("x-github-event"), + evAction = body.action; + + if (!(await shouldRunRequest(context, req.headers, body))) { + return reply(context, 200, "Can't handle this request"); + } + + if (evName === "check_run" && evAction === "completed") { + context.log(`>>>>>> name: ${body?.check_run?.name}, sha: ${body?.check_run?.head_sha}`); + if (body?.check_run?.head_sha && body?.repository?.full_name === "DefinitelyTyped/DefinitelyTyped") { + const pr = await runQueryToGetPRMetadataForSHA1("DefinitelyTyped", "DefinitelyTyped", body?.check_run?.head_sha); + if (pr) { + context.log(`>>>>>>>>> pr => num: ${pr.number}, title: "${pr.title}" closed: ${pr.closed}`); + } else { + context.log(`>>>>>>>>> pr => not found`); + } + } + } + if (eventNames.includes(`${evName}.${evAction}` as any)) { + return handleTrigger(context, { name: evName as PrEvent["name"], payload: body }); + } else { + return reply(context, 200, "Can't handle this request"); + } +} + +const handleTrigger = async (context: InvocationContext, event: PrEvent) => { + const fullName = event.name + "." + event.payload.action; + context.log(`Handling event: ${fullName}`); + if (event.payload.sender.login === "typescript-bot" && fullName !== "check_suite.completed") + return reply(context, 200, "Skipped webhook because it was triggered by typescript-bot"); + + // Allow the bot to run side-effects that are not the 'core' function + // of the review cycle, but are related to keeping DT running smoothly + if (event.name === "check_suite") await mergeCodeOwnersOnGreen(event.payload); + + const pr: { number: number; title?: string } | IgnoredBecause = await prFromEvent(event); + if (pr instanceof IgnoredBecause) return reply(context, 200, `Ignored: ${pr.reason}`); + + // wait 30s to process a trigger; if a new trigger comes in for the same PR, it supersedes the old one + if (await debounce(30000, pr.number)) + return reply(context, 200, `Skipped webhook, superseded by a newer one for ${pr.number}`); + + context.log(`Getting info for PR ${pr.number} - ${pr.title || "(title not fetched)"}`); + const info = await getPRInfo(pr.number); + const prInfo = info.data.repository?.pullRequest; + + // If it didn't work, bail early + if (!prInfo) { + if (event.name === "issue_comment") return reply(context, 200, `NOOPing due to ${pr.number} not being a PR`); + else return reply(context, 422, `No PR with this number exists, (${JSON.stringify(info)})`); + } + + // Convert the info to a set of actions for the bot + const state = await deriveStateForPR(prInfo); + const actions = computeActions(state); + + // Act on the actions + await executePrActions(actions, prInfo); + + // We are responding real late in the process, so it might show + // as a timeout in GH a few times (e.g. after GH/DT/NPM lookups) + return { + status: 200, + body: JSON.stringify(actions), + }; +}; + +const prFromEvent = async (event: PrEvent) => { + switch (event.name) { + case "check_suite": + return prFromCheckSuiteEvent(event.payload); + case "issue_comment": + return event.payload.issue; + // "Parse" project_card.content_url according to repository.pulls_url + case "project_card": { + const url = event.payload.project_card.content_url; + return url + ? { number: +url.replace(/^.*\//, "") } + : new IgnoredBecause( + `Couldn't find PR number since content_url is missing: ${JSON.stringify(event.payload.project_card)}`, + ); + } + case "pull_request": + return event.payload.pull_request; + case "pull_request_review": + return event.payload.pull_request; + } +}; + +const prFromCheckSuiteEvent = async (payload: CheckSuiteEvent) => { + // There is an `payload.check_suite.pull_requests` but it looks like + // it's only populated for PRs in the other direction: going from DT to + // forks (mostly by a pull bot). See also `IgnoredBecause` below. + // + // So find it with a gql query instead: + // TLDR: it's not in the API, so do a search (used on Peril for >3 years) + // (there is an `associatedPullRequests` on a commit object, but that + // doesn't work for commits on forks) + const owner = payload.repository.owner.login; + const repo = payload.repository.name; + const sha = payload.check_suite.head_sha; + const pr = await runQueryToGetPRMetadataForSHA1(owner, repo, sha); + if (pr && !pr.closed) return pr; + // no such PR, and we got related reverse PRs => just ignore it + if (payload.check_suite.pull_requests.length > 0) + return new IgnoredBecause(`No PRs for sha and ${payload.check_suite.pull_requests.length} reverse PRs (${sha})`); + throw new Error(`PR Number not found: no ${!pr ? "PR" : "open PR"} for sha in status (${sha})`); +}; + +const waiters: Map void> = new Map(); +function debounce(delay: number, group: unknown) { + waiters.get(group)?.(); // cancel older handler for the same pr, if one exists + return new Promise((resolve) => { + const timeout = setTimeout(() => { + waiters.delete(group); + resolve(false); + }, delay); + waiters.set(group, () => { + clearTimeout(timeout); + resolve(true); + }); + }); +} diff --git a/packages/mergebot/src/graphql-client.ts b/packages/mergebot/src/graphql-client.ts new file mode 100644 index 0000000000..d365d25539 --- /dev/null +++ b/packages/mergebot/src/graphql-client.ts @@ -0,0 +1,44 @@ +import { ApolloClient, gql, HttpLink, InMemoryCache, MutationOptions, TypedDocumentNode } from "@apollo/client/core"; +import { print } from "graphql"; +import * as schema from "@octokit/graphql-schema/schema"; + +// get the values directly from the apollo config +const apolloCfg = require("../apollo.config.js").client.service; + +const uri = apolloCfg.url; +const headers = { + ...apolloCfg.headers, + authorization: `Bearer ${getAuthToken()}`, +}; + +const cache = new InMemoryCache(); +const link = new HttpLink({ uri, headers, fetch }); + +export const client = new ApolloClient({ cache, link }); + +export function createMutation( + name: keyof schema.Mutation, + input: T, + subquery?: string, +): MutationOptions { + const mutation = { + toJSON: () => print(mutation), + ...(gql`mutation($input: ${name[0]!.toUpperCase() + name.slice(1)}Input!) { + ${name}(input: $input) { + __typename + ${subquery || ""} + } + }` as TypedDocumentNode), + }; + return { mutation, variables: { input } }; +} + +function getAuthToken() { + if (process.env.JEST_WORKER_ID) return "FAKE_TOKEN"; + + const result = process.env.BOT_AUTH_TOKEN || process.env.AUTH_TOKEN || process.env.DT_BOT_AUTH_TOKEN; + if (typeof result !== "string") { + throw new Error("Set BOT_AUTH_TOKEN or AUTH_TOKEN to a valid auth token"); + } + return result.trim(); +} diff --git a/packages/mergebot/src/pr-info.ts b/packages/mergebot/src/pr-info.ts new file mode 100644 index 0000000000..f3c3219eab --- /dev/null +++ b/packages/mergebot/src/pr-info.ts @@ -0,0 +1,647 @@ +import { ColumnName, PopularityLevel } from "./basic"; +import { + PR_repository_pullRequest, + PR_repository_pullRequest_commits_nodes_commit_checkSuites, + PR_repository_pullRequest_timelineItems, + PR_repository_pullRequest_comments_nodes, + PR_repository_pullRequest_commits_nodes_commit_checkSuites_nodes, +} from "./queries/schema/PR"; +import { getMonthlyDownloadCount } from "./util/npm"; +import { fetchFile as defaultFetchFile } from "./util/fetchFile"; +import { noNullish, someLast, sameUser, authorNotBot, max, abbrOid } from "./util/util"; +import { fileLimit } from "./queries/pr-query"; +import * as comment from "./util/comment"; +import * as urls from "./urls"; +import * as OldHeaderParser from "@definitelytyped/old-header-parser"; +import * as jsonDiff from "fast-json-patch"; +import { isDeepStrictEqual } from "util"; +import { isDeclarationPath } from "@definitelytyped/utils"; + +const criticalPopularityThreshold = 5_000_000; +const normalPopularityThreshold = 200_000; + +// Some error found, will be passed to `process` to report in a comment +interface BotError { + readonly type: "error"; + readonly now: Date; + readonly message: string; + readonly author: string | undefined; +} + +interface BotEnsureRemovedFromProject { + readonly type: "remove"; + readonly now: Date; + readonly message: string; + readonly isDraft: boolean; +} + +export interface PackageInfo { + name: string | null; // null => not in a package (= infra files) + kind: "edit" | "add" | "delete"; + files: FileInfo[]; + owners: string[]; // existing owners on master + addedOwners: string[]; + deletedOwners: string[]; + popularityLevel: PopularityLevel; + isSafeInfrastructureEdit?: boolean; +} + +type FileKind = "test" | "definition" | "markdown" | "package-meta" | "package-meta-ok" | "infrastructure"; + +export interface FileInfo { + path: string; + kind: FileKind; + suspect?: string; // reason for a file being "package-meta" rather than "package-meta-ok" +} + +export type ReviewInfo = { + type: string; + reviewer: string; + date: Date; +} & ({ type: "approved"; isMaintainer: boolean } | { type: "changereq" } | { type: "stale"; abbrOid: string }); + +export type CIResult = "unknown" | "pass" | "fail" | "missing" | "action_required"; + +export interface PrInfo { + readonly type: "info"; + + /** ISO8601 date string for the time the PR info was created at */ + readonly now: Date; + + readonly pr_number: number; + + /** + * The head commit of this PR (full format) + */ + readonly headCommitOid: string; + + /** + * merge-base-like commit for config comparisons (see getBaseId() below) + */ + readonly mergeBaseOid: string; + + /** + * The GitHub login of the PR author + */ + readonly author: string; + + /** + * The CI status of the head commit + */ + readonly ciResult: CIResult; + + /** + * A link to the log for the failing CI if it exists + */ + readonly ciUrl?: string; + + /** + * An ID for a check suite that could need re-running + */ + readonly reRunCheckSuiteIDs?: number[]; + + /** + * True if the PR has a merge conflict + */ + readonly hasMergeConflict: boolean; + + /** + * The date the latest commit was pushed to GitHub + */ + readonly lastPushDate: Date; + + /** + * The date of the last activity, including non-bot comments + */ + readonly lastActivityDate: Date; + + /** + * Name of column used if a maintainer blessed this PR + */ + readonly maintainerBlessed?: ColumnName; + + /** + * The time we posted a merge offer, if any (required for merge request in addition to passing CI and a review) + */ + readonly mergeOfferDate?: Date; + + /* + * Time of a "ready to merge" request and the requestor + */ + readonly mergeRequestDate?: Date; + readonly mergeRequestUser?: string; + + readonly isFirstContribution: boolean; + + /* + * True if there are more files than we can fetch from the initial query (or no files) + */ + readonly tooManyFiles: boolean; + /* + * True for PRs with over 5k line changes (top ~3%) + */ + readonly hugeChange: boolean; + + readonly popularityLevel: PopularityLevel; + + readonly pkgInfo: readonly PackageInfo[]; + + readonly reviews: readonly ReviewInfo[]; + + // The ID of the main comment so that it can be linked to by other comments + readonly mainBotCommentID?: number; +} + +export type BotResult = PrInfo | BotError | BotEnsureRemovedFromProject; + +function getHeadCommit(pr: PR_repository_pullRequest) { + return pr.commits.nodes?.find((c) => c?.commit.oid === pr.headRefOid)?.commit; +} +function getBaseId(pr: PR_repository_pullRequest): string | undefined { + // Finds a revision to compare config files against (similar to git merge-base, but simple (linear + // history on master, assume sane merges at most): finds the most recent sha1 that is not part of + // the PR -- not too reliable, but better than always using "master"). + const nodes = pr.commitIds.nodes; + if (!nodes) return; + const prCommits = noNullish(nodes.map((node) => node?.commit.oid)); + if (!prCommits.length) return; + for (const node of nodes.slice(0).reverse()) { + const parents = node?.commit.parents.nodes; + if (!parents) continue; + for (const parent of parents) { + if (parent?.oid && !prCommits.includes(parent.oid)) return parent.oid; + } + } + return; +} + +// The GQL response => Useful data for us +export async function deriveStateForPR( + prInfo: PR_repository_pullRequest, + fetchFile = defaultFetchFile, + getDownloads = getMonthlyDownloadCount, + now = new Date(), +): Promise { + // eslint-disable-next-line eqeqeq + if (prInfo.author == null) return botError("PR author does not exist"); + + if (prInfo.isDraft) return botEnsureRemovedFromProject("PR is a draft"); + if (prInfo.state !== "OPEN") return botEnsureRemovedFromProject("PR is not active"); + + const headCommit = getHeadCommit(prInfo); + // eslint-disable-next-line eqeqeq + if (headCommit == null) return botError("No head commit found"); + const baseId = getBaseId(prInfo) || "master"; + + const author = prInfo.author.login; + const isFirstContribution = prInfo.authorAssociation === "FIRST_TIME_CONTRIBUTOR"; + + const createdDate = new Date(prInfo.createdAt); + // apparently `headCommit.pushedDate` can be null in some cases (see #48708), use the PR creation time for that + // (it would be bad to use `committedDate`/`authoredDate`, since these can be set to arbitrary values) + const lastPushDate = new Date(headCommit.pushedDate || prInfo.createdAt); + const lastCommentDate = getLastCommentishActivityDate(prInfo); + const blessing = getLastMaintainerBlessing(lastPushDate, prInfo.timelineItems); + const reopenedDate = getReopenedDate(prInfo.timelineItems); + // we should generally have all files (except for draft PRs) + const fileCount = prInfo.changedFiles; + // we fetch all files so this shouldn't happen, but GH has a limit of 3k files even with + // pagination (docs.github.com/en/rest/reference/pulls#list-pull-requests-files) and in + // that case `files.totalCount` would be 3k so it'd fit the count but `changedFiles` would + // be correct; so to be safe: check it, and warn if there are many files (or zero) + const tooManyFiles = + !fileCount || // should never happen, make it look fishy if it does + fileCount > fileLimit || // suspiciously many files + fileCount !== prInfo.files?.nodes?.length; // didn't get all files (probably too many) + const hugeChange = prInfo.additions + prInfo.deletions > 5000; + + const paths = noNullish(prInfo.files?.nodes) + .map((f) => f.path) + .sort(); + if (paths.length > fileLimit) paths.length = fileLimit; // redundant, but just in case + const pkgInfoEtc = await getPackageInfosEtc(paths, prInfo.headRefOid, baseId, fetchFile, async (name) => + getDownloads(name, lastPushDate), + ); + if (pkgInfoEtc instanceof Error) return botError(pkgInfoEtc.message); + const { pkgInfo, popularityLevel } = pkgInfoEtc; + + const reviews = getReviews(prInfo); + const latestReview = max(reviews.map((r) => r.date)); + const comments = noNullish(prInfo.comments.nodes); + const mergeOfferDate = getMergeOfferDate(comments, prInfo.headRefOid); + const mergeRequest = getMergeRequest( + comments, + pkgInfo.filter((p) => p.name).length === 1 ? [author, ...pkgInfo.find((p) => p.name)!.owners] : [author], + max([createdDate, reopenedDate, lastPushDate]), + ); + const lastActivityDate = max([ + createdDate, + lastPushDate, + lastCommentDate, + blessing?.date, + reopenedDate, + latestReview, + ]); + const mainBotCommentID = getMainCommentID(comments); + return { + type: "info", + now, + pr_number: prInfo.number, + author, + headCommitOid: prInfo.headRefOid, + mergeBaseOid: baseId, // not needed, kept for debugging + lastPushDate, + lastActivityDate, + maintainerBlessed: blessing?.column, + mergeOfferDate, + mergeRequestDate: mergeRequest?.date, + mergeRequestUser: mergeRequest?.user, + hasMergeConflict: prInfo.mergeable === "CONFLICTING", + isFirstContribution, + tooManyFiles, + hugeChange, + popularityLevel, + pkgInfo, + reviews, + mainBotCommentID, + ...getCIResult(headCommit.checkSuites), + }; + + function botError(message: string): BotError { + return { type: "error", now, message, author: prInfo.author?.login }; + } + + function botEnsureRemovedFromProject(message: string): BotEnsureRemovedFromProject { + return { type: "remove", now, message, isDraft: prInfo.isDraft }; + } +} + +/** Either: when the PR was last opened, or switched to ready from draft */ +function getReopenedDate(timelineItems: PR_repository_pullRequest_timelineItems) { + return ( + someLast( + timelineItems.nodes, + (item) => + (item.__typename === "ReopenedEvent" || item.__typename === "ReadyForReviewEvent") && new Date(item.createdAt), + ) || undefined + ); +} + +function getMainCommentID(comments: PR_repository_pullRequest_comments_nodes[]) { + const comment = comments.find((c) => !authorNotBot(c) && c.body.includes("")); + if (!comment) return undefined; + return comment.databaseId!; +} + +function getLastCommentishActivityDate(prInfo: PR_repository_pullRequest) { + const getCommentDate = (comment: { createdAt: string }) => new Date(comment.createdAt); + const latestIssueCommentDate = noNullish(prInfo.comments.nodes).filter(authorNotBot).map(getCommentDate); + const latestReviewCommentDate = noNullish(prInfo.reviews?.nodes).map((review) => + max(noNullish(review.comments.nodes).map(getCommentDate)), + ); + return max([...latestIssueCommentDate, ...latestReviewCommentDate]); +} + +function getLastMaintainerBlessing(after: Date, timelineItems: PR_repository_pullRequest_timelineItems) { + return ( + someLast(timelineItems.nodes, (item) => { + if (!(item.__typename === "MovedColumnsInProjectEvent" && authorNotBot(item))) return undefined; + const d = new Date(item.createdAt); + if (d <= after) return undefined; + return { date: d, column: item.projectColumnName as ColumnName }; + }) || undefined + ); +} + +async function getPackageInfosEtc( + paths: string[], + headId: string, + baseId: string, + fetchFile: typeof defaultFetchFile, + getDownloads: typeof getMonthlyDownloadCount, +): Promise<{ pkgInfo: PackageInfo[]; popularityLevel: PopularityLevel } | Error> { + const infos = new Map(); + for (const path of paths) { + const [pkg, fileInfo] = await categorizeFile(path, headId, baseId, fetchFile); + if (!infos.has(pkg)) infos.set(pkg, []); + infos.get(pkg)!.push(fileInfo); + } + const result: PackageInfo[] = []; + let maxDownloads = 0; + for (const [name, files] of infos) { + const oldOwners = !name ? null : await getOwnersOfPackage(name, baseId, fetchFile); + if (oldOwners instanceof Error) return oldOwners; + const newOwners0 = !name ? null : await getOwnersOfPackage(name, headId, fetchFile); + // A header error is still an add/edit whereas a missing file is + // delete, hence newOwners0 here + const kind = !name ? "edit" : !oldOwners ? "add" : !newOwners0 ? "delete" : "edit"; + // treats a header error as a missing file, the CI will fail anyway + // (maybe add a way to pass the error in the info so people don't need to read the CI?) + const newOwners = newOwners0 instanceof Error ? null : newOwners0; + const owners = oldOwners || []; + const addedOwners = + newOwners === null ? [] : oldOwners === null ? newOwners : newOwners.filter((o) => !oldOwners.includes(o)); + const deletedOwners = + oldOwners === null ? [] : newOwners === null ? [] : oldOwners.filter((o) => !newOwners.includes(o)); + // null name => infra => ensure critical (even though it's unused atm) + const downloads = name ? await getDownloads(name) : Infinity; + if (name && downloads > maxDownloads) maxDownloads = downloads; + // keep the popularity level and not the downloads since that can change often + const popularityLevel = downloadsToPopularityLevel(downloads); + const isSafeInfrastructureEdit = + name === null + ? kind === "edit" && + files.length === 1 && + files[0]?.path === "attw.json" && + (await isAllowedAttwEdit(headId, baseId, fetchFile)) + : undefined; + result.push({ name, kind, files, owners, addedOwners, deletedOwners, popularityLevel, isSafeInfrastructureEdit }); + } + return { pkgInfo: result, popularityLevel: downloadsToPopularityLevel(maxDownloads) }; +} + +async function categorizeFile( + path: string, + newId: string, + oldId: string, + fetchFile: typeof defaultFetchFile, +): Promise<[string | null, FileInfo]> { + const pkg = /^types\/(.*?)\/.*$/.exec(path)?.[1]; + if (!pkg) return [null, { path, kind: "infrastructure" }]; + + if (isDeclarationPath(path)) return [pkg, { path, kind: "definition" }]; + if (/\.(?:[cm]?ts|tsx)$/.test(path)) return [pkg, { path, kind: "test" }]; + if (path.endsWith(".md")) return [pkg, { path, kind: "markdown" }]; + + const contentGetter = (oid: string) => async () => fetchFile(`${oid}:${path}`); + const suspect = await configSuspicious(path, contentGetter(newId), contentGetter(oldId)); + return [pkg, { path, kind: suspect ? "package-meta" : "package-meta-ok", suspect }]; +} + +async function isAllowedAttwEdit(headId: string, baseId: string, fetchFile: typeof defaultFetchFile): Promise { + try { + const newAttwJson = JSON.parse((await fetchFile(`${headId}:attw.json`))!); + const oldAttwJson = JSON.parse((await fetchFile(`${baseId}:attw.json`))!); + const { failingPackages: newFailing, ...newAttw } = newAttwJson; + const { failingPackages: oldFailing, ...oldAttw } = oldAttwJson; + if (!isDeepStrictEqual(newAttw, oldAttw)) return false; + return newFailing.length < oldFailing.length && newFailing.every((p: string) => oldFailing.includes(p)); + } catch { + return false; + } +} + +interface ConfigSuspicious { + ( + path: string, + getNew: () => Promise, + getOld: () => Promise, + ): Promise; + [basename: string]: (text: string, oldText?: string) => string | undefined; +} +const configSuspicious = (async (path, newContents, oldContents) => { + let basename = path.replace(/.*\//, ""); + if (basename.startsWith("tsconfig.") && basename.endsWith(".json")) { + basename = "tsconfig.json"; + } + const checker = configSuspicious[basename]; + if (!checker) return `edited`; + const text = await newContents(); + // Removing tslint.json, tsconfig.json, package.json and + // OTHER_FILES.txt is checked by the CI. Specifics are in my commit + // message. + if (text === undefined) return undefined; + const oldText = await oldContents(); + return checker(text, oldText); +}); +configSuspicious["package.json"] = () => undefined; +configSuspicious[".npmignore"] = () => undefined; +configSuspicious["tsconfig.json"] = makeChecker( + { + compilerOptions: { + lib: ["es6"], + noImplicitAny: true, + noImplicitThis: true, + strictFunctionTypes: true, + strictNullChecks: true, + types: [], + noEmit: true, + forceConsistentCasingInFileNames: true, + }, + }, + urls.tsconfigJson, + { + ignore: (data) => { + if (Array.isArray(data.compilerOptions?.lib)) { + data.compilerOptions.lib = data.compilerOptions.lib.filter( + (value: unknown) => !(typeof value === "string" && value.toLowerCase() === "dom"), + ); + } + ["baseUrl", "typeRoots", "paths", "jsx", "module"].forEach((k) => delete data.compilerOptions[k]); + if (typeof data.compilerOptions?.target === "string" && data.compilerOptions.target.toLowerCase() === "es6") { + delete data.compilerOptions.target; + } + delete data.files; + }, + }, +); + +// helper for file checkers: allow either a given "expectedForm", or any edits that get closer +// to it, ignoring some keys. The ignored properties are in most cases checked +// elsewhere (dtslint), and in some cases they are irrelevant. +function makeChecker( + expectedForm: any, + expectedFormUrl: string, + options?: { parse: (text: string) => unknown } | { ignore: (data: any) => void }, +) { + const diffFromExpected = (text: string) => { + let data: any; + if (options && "parse" in options) { + data = options.parse(text); + } else { + try { + data = JSON.parse(text); + } catch (e) { + return "couldn't parse json"; + } + } + if (options && "ignore" in options) options.ignore(data); + try { + return jsonDiff.compare(expectedForm, data); + } catch (e) { + return "couldn't diff json"; + } + }; + return (contents: string, oldText?: string) => { + const theExpectedForm = `[the expected form](${expectedFormUrl})`; + const newDiff = diffFromExpected(contents); + if (typeof newDiff === "string") return newDiff; + if (newDiff.length === 0) return undefined; + const diffDescription = newDiff.every((d) => /^\/[0-9]+($|\/)/.test(d.path)) + ? "" + : ` (check: ${newDiff.map((d) => `\`${d.path.slice(1).replace(/\//g, ".")}\``).join(", ")})`; + if (!oldText) return `not ${theExpectedForm}${diffDescription}`; + const oldDiff = diffFromExpected(oldText); + if (typeof oldDiff === "string") return oldDiff; + if (jsonDiff.compare(oldDiff, newDiff).every(({ op }) => op === "remove")) return undefined; + return `not ${theExpectedForm} and not moving towards it${diffDescription}`; + }; +} + +function latestComment(comments: PR_repository_pullRequest_comments_nodes[]) { + return max(comments, (r, c) => Date.parse(r.createdAt) - Date.parse(c.createdAt)); +} + +function getMergeOfferDate(comments: PR_repository_pullRequest_comments_nodes[], headOid: string) { + const offer = latestComment( + comments.filter( + (c) => + sameUser("typescript-bot", c.author?.login || "-") && + comment.parse(c.body)?.tag === "merge-offer" && + c.body.includes(`(at ${abbrOid(headOid)})`), + ), + ); + return offer && new Date(offer.createdAt); +} + +function getMergeRequest(comments: PR_repository_pullRequest_comments_nodes[], users: string[], sinceDate: Date) { + const request = latestComment( + comments.filter( + (comment) => + users.some((u) => comment.author && sameUser(u, comment.author.login)) && + comment.body.split("\n").some((line) => line.trim().toLowerCase().startsWith("ready to merge")), + ), + ); + if (!request) return request; + const date = new Date(request.createdAt); + return date > sinceDate ? { date, user: request.author!.login } : undefined; +} + +function getReviews(prInfo: PR_repository_pullRequest) { + if (!prInfo.reviews?.nodes) return []; + const headCommitOid: string = prInfo.headRefOid; + const reviews: ReviewInfo[] = []; + // Do this in reverse order so we can detect up-to-date-reviews correctly + for (const r of noNullish(prInfo.reviews.nodes).reverse()) { + const [reviewer, date] = [r.author?.login, new Date(r.submittedAt)]; + // Skip nulls + if (!(r.commit && reviewer)) continue; + // Skip self-reviews + if (reviewer === prInfo.author!.login) continue; + // Only look at the most recent review per person (ignoring pending/commented) + if (reviews.some((r) => sameUser(r.reviewer, reviewer))) continue; + // collect reviews by type + if (r.commit.oid !== headCommitOid) { + reviews.push({ type: "stale", reviewer, date, abbrOid: abbrOid(r.commit.oid) }); + continue; + } + if (r.state === "CHANGES_REQUESTED") { + reviews.push({ type: "changereq", reviewer, date }); + continue; + } + if (r.state !== "APPROVED") continue; + const isMaintainer = r.authorAssociation === "MEMBER" || r.authorAssociation === "OWNER"; + reviews.push({ type: "approved", reviewer, date, isMaintainer }); + } + return reviews; +} + +function getCIResult(checkSuites: PR_repository_pullRequest_commits_nodes_commit_checkSuites | null): { + ciResult: CIResult; + ciUrl?: string; + reRunCheckSuiteIDs?: number[]; +} { + const ghActionsChecks = checkSuites?.nodes?.filter((check) => check?.app?.name.includes("GitHub Actions")); + + // Freakin' crypto miners ruined GitHub Actions, and now we need to manually confirm new folks can run CI + const actionRequiredIDs = noNullish( + ghActionsChecks?.map((check) => (check?.conclusion === "ACTION_REQUIRED" ? check.databaseId : null)), + ); + if (actionRequiredIDs.length > 0) return { ciResult: "action_required", reRunCheckSuiteIDs: actionRequiredIDs }; + + const latestChecks = []; + const checksByWorkflowPath = new Map(); + + // Attempt to use only the latest run for a given workflow on a given commit. + // This may still be wrong if we _remove_ a workflow, but it's better than always + // taking the first one. + for (const check of ghActionsChecks || []) { + if (!check) { + continue; + } + + const workflowPath = check.workflowRun?.file?.path; + if (!workflowPath) { + latestChecks.push(check); + continue; + } + + const existingCheck = checksByWorkflowPath.get(workflowPath); + // createdAt is an ISO8601 string, so we can safely just compare. + if (!existingCheck || existingCheck.createdAt < check.createdAt) { + checksByWorkflowPath.set(workflowPath, check); + } + } + + latestChecks.push(...checksByWorkflowPath.values()); + + if (latestChecks.length === 0) { + return { ciResult: "missing", ciUrl: undefined }; + } + + for (const check of latestChecks) { + switch (check.conclusion) { + case "SUCCESS": + continue; + case "FAILURE": + case "SKIPPED": + case "TIMED_OUT": + return { ciResult: "fail", ciUrl: check.url }; + default: + return { ciResult: "unknown" }; + } + } + + return { ciResult: "pass" }; +} + +function downloadsToPopularityLevel(monthlyDownloads: number): PopularityLevel { + return monthlyDownloads > criticalPopularityThreshold + ? "Critical" + : monthlyDownloads > normalPopularityThreshold + ? "Popular" + : "Well-liked by everyone"; +} + +export async function getOwnersOfPackage( + packageName: string, + oid: string, + fetchFile: typeof defaultFetchFile, +): Promise { + const packageJson = `${oid}:types/${packageName}/package.json`; + const packageJsonContent = await fetchFile(packageJson, 10240); // grab at most 10k + let packageJsonObj; + if (packageJsonContent !== undefined) { + try { + packageJsonObj = JSON.parse(packageJsonContent); + } catch (e) { + if (e instanceof Error) return new Error(`error parsing owners from package.json: ${e.message}`); + } + } + + if (!packageJsonObj || !(packageJsonObj.name && packageJsonObj.version && packageJsonObj.owners)) { + // If we see that we're not in a post-pnpm world, try to get the owners from the index.d.ts. + const indexDts = `${oid}:types/${packageName}/index.d.ts`; + const indexDtsContent = await fetchFile(indexDts, 10240); // grab at most 10k + if (indexDtsContent === undefined) return null; + let parsed: OldHeaderParser.Header; + try { + parsed = OldHeaderParser.parseHeaderOrFail(indexDts, indexDtsContent); + } catch (e) { + if (e instanceof Error) return new Error(`error parsing owners: ${e.message}`); + } + return noNullish(parsed!.contributors.map((c) => c.githubUsername)); + } + + return noNullish(packageJsonObj.owners?.map((c: any) => c?.githubUsername)); +} diff --git a/packages/mergebot/src/queries/SHA1-to-PR-query.ts b/packages/mergebot/src/queries/SHA1-to-PR-query.ts new file mode 100644 index 0000000000..adcbfc2545 --- /dev/null +++ b/packages/mergebot/src/queries/SHA1-to-PR-query.ts @@ -0,0 +1,50 @@ +import { gql, TypedDocumentNode } from "@apollo/client/core"; +import { client } from "../graphql-client"; +import { GetPRForSHA1, GetPRForSHA1Variables, GetPRForSHA1_search_nodes_PullRequest } from "./schema/GetPRForSHA1"; + +export const runQueryToGetPRMetadataForSHA1 = async ( + owner: string, + repo: string, + sha1: string, +): Promise => { + const info = await client.query({ + query: getPRForSHA1Query, + variables: { query: `${sha1} type:pr repo:${owner}/${repo}` }, + fetchPolicy: "no-cache", + }); + const pr = info.data.search.nodes?.[0]; + return pr?.__typename === "PullRequest" ? pr : undefined; +}; + +export const getPRForSHA1Query: TypedDocumentNode = gql` + query GetPRForSHA1($query: String!) { + search(query: $query, first: 1, type: ISSUE) { + nodes { + ... on PullRequest { + title + number + closed + } + } + } + } +`; + +/* This is better since it doesn't do a generic search, but for some reason it will sometime fail to get a PR +query GetPRForSHA1($owner: String!, $repo: String!, $sha1: String!) { + repository(owner: $owner, name: $repo) { + id + object(expression: $sha1) { + ... on Commit { + associatedPullRequests(first: 1) { + nodes { + title + number + closed + } + } + } + } + } +} +*/ diff --git a/packages/mergebot/src/queries/all-open-prs-query.ts b/packages/mergebot/src/queries/all-open-prs-query.ts new file mode 100644 index 0000000000..142fd32823 --- /dev/null +++ b/packages/mergebot/src/queries/all-open-prs-query.ts @@ -0,0 +1,47 @@ +import { gql, TypedDocumentNode } from "@apollo/client/core"; +import { client } from "../graphql-client"; +import { GetAllOpenPRsAndCardIDs, GetAllOpenPRsAndCardIDsVariables } from "./schema/GetAllOpenPRsAndCardIDs"; +import { noNullish } from "../util/util"; + +const getAllOpenPRsAndCardIDsQuery: TypedDocumentNode = gql` + query GetAllOpenPRsAndCardIDs($endCursor: String) { + repository(owner: "DefinitelyTyped", name: "DefinitelyTyped") { + id + pullRequests(states: OPEN, orderBy: { field: UPDATED_AT, direction: DESC }, first: 100, after: $endCursor) { + nodes { + number + projectCards(first: 100) { + nodes { + id + } + } + } + pageInfo { + hasNextPage + endCursor + } + } + } + } +`; + +export async function getAllOpenPRsAndCardIDs() { + const prs: number[] = []; + const cardIDs: string[] = []; + let endCursor: string | undefined | null; + while (true) { + const result = await client.query({ + query: getAllOpenPRsAndCardIDsQuery, + fetchPolicy: "no-cache", + variables: { endCursor }, + }); + const pullRequests = result.data.repository?.pullRequests; + const nodes = noNullish(pullRequests?.nodes); + prs.push(...nodes.map((pr) => pr.number)); + for (const pr of nodes) { + cardIDs.push(...noNullish(pr.projectCards.nodes).map((card) => card.id)); + } + if (!pullRequests?.pageInfo.hasNextPage) return { prs, cardIDs }; + endCursor = pullRequests.pageInfo.endCursor; + } +} diff --git a/packages/mergebot/src/queries/card-id-to-pr-query.ts b/packages/mergebot/src/queries/card-id-to-pr-query.ts new file mode 100644 index 0000000000..4a90c078b7 --- /dev/null +++ b/packages/mergebot/src/queries/card-id-to-pr-query.ts @@ -0,0 +1,34 @@ +import { gql, TypedDocumentNode } from "@apollo/client/core"; +import { client } from "../graphql-client"; +import { PullRequestState } from "./schema/graphql-global-types"; +import { CardIdToPr, CardIdToPrVariables } from "./schema/CardIdToPr"; + +interface CardPRInfo { + number: number; + state: PullRequestState; +} + +export const runQueryToGetPRForCardId = async (id: string): Promise => { + const info = await client.query({ + query: gql` + query CardIdToPr($id: ID!) { + node(id: $id) { + ... on ProjectCard { + content { + ... on PullRequest { + state + number + } + } + } + } + } + ` as TypedDocumentNode, + variables: { id }, + fetchPolicy: "no-cache", + }); + const node = info.data.node; + return node?.__typename === "ProjectCard" && node.content?.__typename === "PullRequest" + ? { number: node.content.number, state: node.content.state } + : undefined; +}; diff --git a/packages/mergebot/src/queries/file-query.ts b/packages/mergebot/src/queries/file-query.ts new file mode 100644 index 0000000000..cfaad40c1c --- /dev/null +++ b/packages/mergebot/src/queries/file-query.ts @@ -0,0 +1,18 @@ +import { gql, TypedDocumentNode } from "@apollo/client/core"; +import { GetFileContent, GetFileContentVariables } from "./schema/GetFileContent"; + +export { getFileContent as GetFileContent }; + +const getFileContent: TypedDocumentNode = gql` + query GetFileContent($owner: String!, $name: String!, $expr: String!) { + repository(owner: $owner, name: $name) { + id + object(expression: $expr) { + ... on Blob { + text + byteSize + } + } + } + } +`; diff --git a/packages/mergebot/src/queries/label-columns-queries.ts b/packages/mergebot/src/queries/label-columns-queries.ts new file mode 100644 index 0000000000..d46d708bd4 --- /dev/null +++ b/packages/mergebot/src/queries/label-columns-queries.ts @@ -0,0 +1,59 @@ +import { gql, TypedDocumentNode } from "@apollo/client/core"; +import { GetLabels, GetLabelsVariables, GetLabels_repository_labels_nodes } from "./schema/GetLabels"; +import { GetProjectColumns as getProjectColumns } from "./schema/GetProjectColumns"; +import { client } from "../graphql-client"; +import { noNullish } from "../util/util"; + +export { getLabels, getProjectColumns as GetProjectColumns }; + +const getLabelsQuery: TypedDocumentNode = gql` + query GetLabels($endCursor: String) { + repository(name: "DefinitelyTyped", owner: "DefinitelyTyped") { + id + labels(first: 100, after: $endCursor) { + nodes { + id + name + } + pageInfo { + hasNextPage + endCursor + } + } + } + } +`; + +async function getLabels() { + const labels: GetLabels_repository_labels_nodes[] = []; + let endCursor: string | undefined | null; + while (true) { + const result = await client.query({ + query: getLabelsQuery, + fetchPolicy: "no-cache", + variables: { endCursor }, + }); + const someLabels = result.data.repository?.labels; + labels.push(...noNullish(someLabels?.nodes)); + if (!someLabels?.pageInfo.hasNextPage) return labels; + endCursor = someLabels.pageInfo.endCursor; + } +} +// TODO: projects don't have columns anymore; they have states -- and I'm not sure they're enumerable +// might need to iterate thru cards and check the state of them +const getProjectColumns: TypedDocumentNode = gql` + query GetProjectColumns { + repository(name: "DefinitelyTyped", owner: "DefinitelyTyped") { + id + project(number: 5) { + id + columns(first: 30) { + nodes { + id + name + } + } + } + } + } +`; diff --git a/packages/mergebot/src/queries/pr-query.ts b/packages/mergebot/src/queries/pr-query.ts new file mode 100644 index 0000000000..685f9ac087 --- /dev/null +++ b/packages/mergebot/src/queries/pr-query.ts @@ -0,0 +1,279 @@ +import { gql, TypedDocumentNode } from "@apollo/client/core"; +import { client } from "../graphql-client"; +import { PR, PRVariables, PR_repository_pullRequest_files_nodes } from "./schema/PR"; +import { PRFiles, PRFilesVariables } from "./schema/PRFiles"; +import { noNullish } from "../util/util"; + +export const fileLimit = 500; + +// Note: If you want to work on this in local a copy of GraphiQL: +// - Download the electron app: https://github.com/skevy/graphiql-app/releases +// - Then set the headers: +// authorization: Bearer [token] +// accept: application/vnd.github.starfox-preview+json (if needed) +// - Finally set the endpoint: https://api.github.com/graphql +// - Now you're good to C&P the query below + +/** This is a GraphQL AST tree */ +const getPRInfoQueryFirst: TypedDocumentNode = gql` + query PR($prNumber: Int!) { + repository(owner: "DefinitelyTyped", name: "DefinitelyTyped") { + id + pullRequest(number: $prNumber) { + id + title + createdAt + author { + login + } + authorAssociation + baseRef { + name + } + labels(first: 100) { + nodes { + name + } + } + isDraft + mergeable + number + state + headRefOid + changedFiles + additions + deletions + + commitIds: commits(last: 100) { + nodes { + commit { + oid + parents(first: 3) { + nodes { + oid + } + } + } + } + } + + timelineItems(last: 200, itemTypes: [REOPENED_EVENT, READY_FOR_REVIEW_EVENT, MOVED_COLUMNS_IN_PROJECT_EVENT]) { + nodes { + ... on ReopenedEvent { + createdAt + } + ... on ReadyForReviewEvent { + createdAt + } + ... on MovedColumnsInProjectEvent { + actor { + login + } + createdAt + projectColumnName + } + } + } + + reviews(last: 100) { + nodes { + author { + login + } + commit { + oid + } + comments(last: 10) { + nodes { + author { + login + } + createdAt + } + } + authorAssociation + state + submittedAt + url + } + } + + commits(last: 1) { + totalCount + nodes { + commit { + checkSuites(first: 100) { + nodes { + databaseId + app { + name + } + conclusion + resourcePath + status + url + checkRuns(last: 1) { + nodes { + title + } + } + createdAt + workflowRun { + file { + path + } + } + } + } + status { + state + contexts { + state + description + creator { + login + } + targetUrl + } + } + authoredDate + committedDate + pushedDate + oid + } + } + } + + comments(last: 100) { + totalCount + nodes { + id + author { + login + } + databaseId + body + createdAt + reactions(first: 100, content: THUMBS_UP) { + nodes { + user { + login + } + } + } + } + } + + files(first: 100) { + totalCount + nodes { + path + additions + deletions + } + pageInfo { + hasNextPage + endCursor + } + } + + projectCards(first: 10) { + nodes { + id + project { + id + number + name + } + column { + id + name + } + } + } + } + } + } +`; +// TODO: Need to double-check how addition to a new project board is prepresented +export async function getPRInfo(prNumber: number) { + const info = await getPRInfoFirst(prNumber); + const prInfo = info.data.repository?.pullRequest; + // reasons to not bother with getting all files: + if (!prInfo) return info; // ... bad results (see below) + if (prInfo.isDraft) return info; // ... draft PRs + if (!prInfo.files) throw new Error("internal error while fetching PR info"); + const { hasNextPage, endCursor } = prInfo.files.pageInfo; + if (!(hasNextPage && endCursor)) return info; // ... got all + // otherwise get the rest + prInfo.files.nodes = noNullish(prInfo.files.nodes); + await getPRInfoRest(prNumber, endCursor, prInfo.files.nodes); + return info; +} + +async function getPRInfoFirst(prNumber: number) { + // The query can return a mergeable value of `UNKNOWN`, and then it takes a + // while to get the actual value while GH refreshes the state (verified + // with GH that this is expected). So implement a simple retry thing to + // get a proper value, or return a useless one if giving up. + let retries = 0; + while (true) { + const info = await client.query({ + query: getPRInfoQueryFirst, + variables: { prNumber }, + fetchPolicy: "no-cache", + }); + const prInfo = info.data.repository?.pullRequest; + if (!prInfo) return info; // let `deriveStateForPR` handle the missing result + if (!(prInfo.state === "OPEN" && prInfo.mergeable === "UNKNOWN")) return info; + if (++retries > 5) { + // we already did 5 tries, so give up and... + info.data.repository = null; + return info; // ...return a bad result to avoid using the bogus information + } + // wait 3N..3N+1 seconds (based on trial runs: it usually works after one wait) + const wait = 1000 * (Math.random() + 3 * retries); + await new Promise((resolve) => setTimeout(resolve, wait)); + } +} + +// Repeat just the file part, since that's all we need here +const getPRInfoQueryRest: TypedDocumentNode = gql` + query PRFiles($prNumber: Int!, $endCursor: String) { + repository(owner: "DefinitelyTyped", name: "DefinitelyTyped") { + pullRequest(number: $prNumber) { + files(first: 100, after: $endCursor) { + totalCount + nodes { + path + additions + deletions + } + pageInfo { + hasNextPage + endCursor + } + } + } + } + } +`; + +async function getPRInfoRest( + prNumber: number, + endCursor: string | null, + files: (PR_repository_pullRequest_files_nodes | null)[], +) { + while (true) { + const result = await client.query({ + query: getPRInfoQueryRest, + variables: { prNumber, endCursor }, + fetchPolicy: "no-cache", + }); + const newFiles = result.data.repository?.pullRequest?.files; + if (!newFiles) return; + files.push(...noNullish(newFiles.nodes)); + if (files.length >= fileLimit || !newFiles.pageInfo.hasNextPage) return; + endCursor = newFiles.pageInfo.endCursor; + } +} diff --git a/packages/mergebot/src/queries/projectboard-cards.ts b/packages/mergebot/src/queries/projectboard-cards.ts new file mode 100644 index 0000000000..3d080607df --- /dev/null +++ b/packages/mergebot/src/queries/projectboard-cards.ts @@ -0,0 +1,69 @@ +import { gql, TypedDocumentNode } from "@apollo/client/core"; +import { client } from "../graphql-client"; +import { GetProjectBoardCards } from "./schema/GetProjectBoardCards"; + +// 1. bold to assume that no column has >100 cards (I've done this) +// 2. need to unnest card expr +// 3. need to paginate card exprs +// 4. need to gather back into columns by hand probably +// (and maybe assert that the card is only in one column) +const getProjectBoardCardsQuery: TypedDocumentNode = gql` + query GetProjectBoardCards { + repository(owner: "DefinitelyTyped", name: "DefinitelyTyped") { + id + project(number: 5) { + id + columns(first: 100) { + nodes { + id + name + cards(last: 100) { + totalCount + nodes { + id + updatedAt + } + } + } + } + } + } + } +`; + +interface CardInfo { + id: string; + updatedAt: string; +} +interface ColumnInfo { + name: string; + totalCount: number; + cards: CardInfo[]; +} + +export async function getProjectBoardCards() { + const results = await client.query({ + query: getProjectBoardCardsQuery, + fetchPolicy: "no-cache", + }); + + const project = results.data.repository?.project; + + if (!project) { + throw new Error("No project found"); + } + + const columns: ColumnInfo[] = []; + project.columns.nodes?.forEach((col) => { + if (!col) return; + const cards: CardInfo[] = []; + col.cards.nodes?.forEach((card) => card && cards.push({ id: card.id, updatedAt: card.updatedAt })); + columns.push({ + name: col.name, + totalCount: col.cards.totalCount, + cards, + }); + }); + + return columns; +} diff --git a/packages/mergebot/src/queries/schema/CardIdToPr.ts b/packages/mergebot/src/queries/schema/CardIdToPr.ts new file mode 100644 index 0000000000..45b9d6ff69 --- /dev/null +++ b/packages/mergebot/src/queries/schema/CardIdToPr.ts @@ -0,0 +1,295 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +import { PullRequestState } from "./graphql-global-types"; + +// ==================================================== +// GraphQL query operation: CardIdToPr +// ==================================================== + +export interface CardIdToPr_node_AddedToMergeQueueEvent { + __typename: + | "AddedToMergeQueueEvent" + | "AddedToProjectEvent" + | "App" + | "AssignedEvent" + | "AutoMergeDisabledEvent" + | "AutoMergeEnabledEvent" + | "AutoRebaseEnabledEvent" + | "AutoSquashEnabledEvent" + | "AutomaticBaseChangeFailedEvent" + | "AutomaticBaseChangeSucceededEvent" + | "BaseRefChangedEvent" + | "BaseRefDeletedEvent" + | "BaseRefForcePushedEvent" + | "Blob" + | "Bot" + | "BranchProtectionRule" + | "BypassForcePushAllowance" + | "BypassPullRequestAllowance" + | "CWE" + | "CheckRun" + | "CheckSuite" + | "ClosedEvent" + | "CodeOfConduct" + | "CommentDeletedEvent" + | "Commit" + | "CommitComment" + | "CommitCommentThread" + | "Comparison" + | "ConnectedEvent" + | "ConvertToDraftEvent" + | "ConvertedNoteToIssueEvent" + | "ConvertedToDiscussionEvent" + | "CrossReferencedEvent" + | "DemilestonedEvent" + | "DeployKey" + | "DeployedEvent" + | "Deployment" + | "DeploymentEnvironmentChangedEvent" + | "DeploymentReview" + | "DeploymentStatus" + | "DisconnectedEvent" + | "Discussion" + | "DiscussionCategory" + | "DiscussionComment" + | "DiscussionPoll" + | "DiscussionPollOption" + | "DraftIssue" + | "Enterprise" + | "EnterpriseAdministratorInvitation" + | "EnterpriseIdentityProvider" + | "EnterpriseRepositoryInfo" + | "EnterpriseServerInstallation" + | "EnterpriseServerUserAccount" + | "EnterpriseServerUserAccountEmail" + | "EnterpriseServerUserAccountsUpload" + | "EnterpriseUserAccount" + | "Environment" + | "ExternalIdentity" + | "Gist" + | "GistComment" + | "HeadRefDeletedEvent" + | "HeadRefForcePushedEvent" + | "HeadRefRestoredEvent" + | "IpAllowListEntry" + | "Issue" + | "IssueComment" + | "Label" + | "LabeledEvent" + | "Language" + | "License" + | "LinkedBranch" + | "LockedEvent" + | "Mannequin" + | "MarkedAsDuplicateEvent" + | "MarketplaceCategory" + | "MarketplaceListing" + | "MemberFeatureRequestNotification" + | "MembersCanDeleteReposClearAuditEntry" + | "MembersCanDeleteReposDisableAuditEntry" + | "MembersCanDeleteReposEnableAuditEntry" + | "MentionedEvent" + | "MergeQueue" + | "MergeQueueEntry" + | "MergedEvent" + | "MigrationSource" + | "Milestone" + | "MilestonedEvent" + | "MovedColumnsInProjectEvent" + | "NotificationThread" + | "OIDCProvider" + | "OauthApplicationCreateAuditEntry" + | "OrgAddBillingManagerAuditEntry" + | "OrgAddMemberAuditEntry" + | "OrgBlockUserAuditEntry" + | "OrgConfigDisableCollaboratorsOnlyAuditEntry" + | "OrgConfigEnableCollaboratorsOnlyAuditEntry" + | "OrgCreateAuditEntry" + | "OrgDisableOauthAppRestrictionsAuditEntry" + | "OrgDisableSamlAuditEntry" + | "OrgDisableTwoFactorRequirementAuditEntry" + | "OrgEnableOauthAppRestrictionsAuditEntry" + | "OrgEnableSamlAuditEntry" + | "OrgEnableTwoFactorRequirementAuditEntry" + | "OrgInviteMemberAuditEntry" + | "OrgInviteToBusinessAuditEntry" + | "OrgOauthAppAccessApprovedAuditEntry" + | "OrgOauthAppAccessBlockedAuditEntry" + | "OrgOauthAppAccessDeniedAuditEntry" + | "OrgOauthAppAccessRequestedAuditEntry" + | "OrgOauthAppAccessUnblockedAuditEntry" + | "OrgRemoveBillingManagerAuditEntry" + | "OrgRemoveMemberAuditEntry" + | "OrgRemoveOutsideCollaboratorAuditEntry" + | "OrgRestoreMemberAuditEntry" + | "OrgUnblockUserAuditEntry" + | "OrgUpdateDefaultRepositoryPermissionAuditEntry" + | "OrgUpdateMemberAuditEntry" + | "OrgUpdateMemberRepositoryCreationPermissionAuditEntry" + | "OrgUpdateMemberRepositoryInvitationPermissionAuditEntry" + | "Organization" + | "OrganizationIdentityProvider" + | "OrganizationInvitation" + | "OrganizationMigration" + | "Package" + | "PackageFile" + | "PackageTag" + | "PackageVersion" + | "PinnedDiscussion" + | "PinnedEvent" + | "PinnedIssue" + | "PrivateRepositoryForkingDisableAuditEntry" + | "PrivateRepositoryForkingEnableAuditEntry" + | "Project" + | "ProjectColumn" + | "ProjectV2" + | "ProjectV2Field" + | "ProjectV2Item" + | "ProjectV2ItemFieldDateValue" + | "ProjectV2ItemFieldIterationValue" + | "ProjectV2ItemFieldNumberValue" + | "ProjectV2ItemFieldSingleSelectValue" + | "ProjectV2ItemFieldTextValue" + | "ProjectV2IterationField" + | "ProjectV2SingleSelectField" + | "ProjectV2View" + | "ProjectV2Workflow" + | "PublicKey" + | "PullRequest" + | "PullRequestCommit" + | "PullRequestCommitCommentThread" + | "PullRequestReview" + | "PullRequestReviewComment" + | "PullRequestReviewThread" + | "PullRequestThread" + | "Push" + | "PushAllowance" + | "Reaction" + | "ReadyForReviewEvent" + | "Ref" + | "ReferencedEvent" + | "Release" + | "ReleaseAsset" + | "RemovedFromMergeQueueEvent" + | "RemovedFromProjectEvent" + | "RenamedTitleEvent" + | "ReopenedEvent" + | "RepoAccessAuditEntry" + | "RepoAddMemberAuditEntry" + | "RepoAddTopicAuditEntry" + | "RepoArchivedAuditEntry" + | "RepoChangeMergeSettingAuditEntry" + | "RepoConfigDisableAnonymousGitAccessAuditEntry" + | "RepoConfigDisableCollaboratorsOnlyAuditEntry" + | "RepoConfigDisableContributorsOnlyAuditEntry" + | "RepoConfigDisableSockpuppetDisallowedAuditEntry" + | "RepoConfigEnableAnonymousGitAccessAuditEntry" + | "RepoConfigEnableCollaboratorsOnlyAuditEntry" + | "RepoConfigEnableContributorsOnlyAuditEntry" + | "RepoConfigEnableSockpuppetDisallowedAuditEntry" + | "RepoConfigLockAnonymousGitAccessAuditEntry" + | "RepoConfigUnlockAnonymousGitAccessAuditEntry" + | "RepoCreateAuditEntry" + | "RepoDestroyAuditEntry" + | "RepoRemoveMemberAuditEntry" + | "RepoRemoveTopicAuditEntry" + | "Repository" + | "RepositoryDependabotAlertsThread" + | "RepositoryInvitation" + | "RepositoryMigration" + | "RepositoryRule" + | "RepositoryRuleset" + | "RepositoryRulesetBypassActor" + | "RepositoryTopic" + | "RepositoryVisibilityChangeDisableAuditEntry" + | "RepositoryVisibilityChangeEnableAuditEntry" + | "RepositoryVulnerabilityAlert" + | "ReviewDismissalAllowance" + | "ReviewDismissedEvent" + | "ReviewRequest" + | "ReviewRequestRemovedEvent" + | "ReviewRequestedEvent" + | "SavedReply" + | "SecurityAdvisory" + | "SponsorsActivity" + | "SponsorsListing" + | "SponsorsListingFeaturedItem" + | "SponsorsTier" + | "Sponsorship" + | "SponsorshipNewsletter" + | "Status" + | "StatusCheckRollup" + | "StatusContext" + | "SubscribedEvent" + | "Tag" + | "Team" + | "TeamAddMemberAuditEntry" + | "TeamAddRepositoryAuditEntry" + | "TeamChangeParentTeamAuditEntry" + | "TeamDiscussion" + | "TeamDiscussionComment" + | "TeamRemoveMemberAuditEntry" + | "TeamRemoveRepositoryAuditEntry" + | "Topic" + | "TransferredEvent" + | "Tree" + | "UnassignedEvent" + | "UnlabeledEvent" + | "UnlockedEvent" + | "UnmarkedAsDuplicateEvent" + | "UnpinnedEvent" + | "UnsubscribedEvent" + | "User" + | "UserBlockedEvent" + | "UserContentEdit" + | "UserList" + | "UserStatus" + | "VerifiableDomain" + | "Workflow" + | "WorkflowRun" + | "WorkflowRunFile"; +} + +export interface CardIdToPr_node_ProjectCard_content_Issue { + __typename: "Issue"; +} + +export interface CardIdToPr_node_ProjectCard_content_PullRequest { + __typename: "PullRequest"; + /** + * Identifies the state of the pull request. + */ + state: PullRequestState; + /** + * Identifies the pull request number. + */ + number: number; +} + +export type CardIdToPr_node_ProjectCard_content = + | CardIdToPr_node_ProjectCard_content_Issue + | CardIdToPr_node_ProjectCard_content_PullRequest; + +export interface CardIdToPr_node_ProjectCard { + __typename: "ProjectCard"; + /** + * The card content item + */ + content: CardIdToPr_node_ProjectCard_content | null; +} + +export type CardIdToPr_node = CardIdToPr_node_AddedToMergeQueueEvent | CardIdToPr_node_ProjectCard; + +export interface CardIdToPr { + /** + * Fetches an object given its ID. + */ + node: CardIdToPr_node | null; +} + +export interface CardIdToPrVariables { + id: string; +} diff --git a/packages/mergebot/src/queries/schema/GetAllOpenPRsAndCardIDs.ts b/packages/mergebot/src/queries/schema/GetAllOpenPRsAndCardIDs.ts new file mode 100644 index 0000000000..b7fd1e3592 --- /dev/null +++ b/packages/mergebot/src/queries/schema/GetAllOpenPRsAndCardIDs.ts @@ -0,0 +1,83 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +// ==================================================== +// GraphQL query operation: GetAllOpenPRsAndCardIDs +// ==================================================== + +export interface GetAllOpenPRsAndCardIDs_repository_pullRequests_nodes_projectCards_nodes { + __typename: "ProjectCard"; + /** + * The Node ID of the ProjectCard object + */ + id: string; +} + +export interface GetAllOpenPRsAndCardIDs_repository_pullRequests_nodes_projectCards { + __typename: "ProjectCardConnection"; + /** + * A list of nodes. + */ + nodes: (GetAllOpenPRsAndCardIDs_repository_pullRequests_nodes_projectCards_nodes | null)[] | null; +} + +export interface GetAllOpenPRsAndCardIDs_repository_pullRequests_nodes { + __typename: "PullRequest"; + /** + * Identifies the pull request number. + */ + number: number; + /** + * List of project cards associated with this pull request. + */ + projectCards: GetAllOpenPRsAndCardIDs_repository_pullRequests_nodes_projectCards; +} + +export interface GetAllOpenPRsAndCardIDs_repository_pullRequests_pageInfo { + __typename: "PageInfo"; + /** + * When paginating forwards, are there more items? + */ + hasNextPage: boolean; + /** + * When paginating forwards, the cursor to continue. + */ + endCursor: string | null; +} + +export interface GetAllOpenPRsAndCardIDs_repository_pullRequests { + __typename: "PullRequestConnection"; + /** + * A list of nodes. + */ + nodes: (GetAllOpenPRsAndCardIDs_repository_pullRequests_nodes | null)[] | null; + /** + * Information to aid in pagination. + */ + pageInfo: GetAllOpenPRsAndCardIDs_repository_pullRequests_pageInfo; +} + +export interface GetAllOpenPRsAndCardIDs_repository { + __typename: "Repository"; + /** + * The Node ID of the Repository object + */ + id: string; + /** + * A list of pull requests that have been opened in the repository. + */ + pullRequests: GetAllOpenPRsAndCardIDs_repository_pullRequests; +} + +export interface GetAllOpenPRsAndCardIDs { + /** + * Lookup a given repository by the owner and repository name. + */ + repository: GetAllOpenPRsAndCardIDs_repository | null; +} + +export interface GetAllOpenPRsAndCardIDsVariables { + endCursor?: string | null; +} diff --git a/packages/mergebot/src/queries/schema/GetFileContent.ts b/packages/mergebot/src/queries/schema/GetFileContent.ts new file mode 100644 index 0000000000..ab24fa38b2 --- /dev/null +++ b/packages/mergebot/src/queries/schema/GetFileContent.ts @@ -0,0 +1,53 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +// ==================================================== +// GraphQL query operation: GetFileContent +// ==================================================== + +export interface GetFileContent_repository_object_Commit { + __typename: "Commit" | "Tag" | "Tree"; +} + +export interface GetFileContent_repository_object_Blob { + __typename: "Blob"; + /** + * UTF8 text data or null if the Blob is binary + */ + text: string | null; + /** + * Byte size of Blob object + */ + byteSize: number; +} + +export type GetFileContent_repository_object = + | GetFileContent_repository_object_Commit + | GetFileContent_repository_object_Blob; + +export interface GetFileContent_repository { + __typename: "Repository"; + /** + * The Node ID of the Repository object + */ + id: string; + /** + * A Git object in the repository + */ + object: GetFileContent_repository_object | null; +} + +export interface GetFileContent { + /** + * Lookup a given repository by the owner and repository name. + */ + repository: GetFileContent_repository | null; +} + +export interface GetFileContentVariables { + owner: string; + name: string; + expr: string; +} diff --git a/packages/mergebot/src/queries/schema/GetLabels.ts b/packages/mergebot/src/queries/schema/GetLabels.ts new file mode 100644 index 0000000000..bfe27da929 --- /dev/null +++ b/packages/mergebot/src/queries/schema/GetLabels.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +// ==================================================== +// GraphQL query operation: GetLabels +// ==================================================== + +export interface GetLabels_repository_labels_nodes { + __typename: "Label"; + /** + * The Node ID of the Label object + */ + id: string; + /** + * Identifies the label name. + */ + name: string; +} + +export interface GetLabels_repository_labels_pageInfo { + __typename: "PageInfo"; + /** + * When paginating forwards, are there more items? + */ + hasNextPage: boolean; + /** + * When paginating forwards, the cursor to continue. + */ + endCursor: string | null; +} + +export interface GetLabels_repository_labels { + __typename: "LabelConnection"; + /** + * A list of nodes. + */ + nodes: (GetLabels_repository_labels_nodes | null)[] | null; + /** + * Information to aid in pagination. + */ + pageInfo: GetLabels_repository_labels_pageInfo; +} + +export interface GetLabels_repository { + __typename: "Repository"; + /** + * The Node ID of the Repository object + */ + id: string; + /** + * A list of labels associated with the repository. + */ + labels: GetLabels_repository_labels | null; +} + +export interface GetLabels { + /** + * Lookup a given repository by the owner and repository name. + */ + repository: GetLabels_repository | null; +} + +export interface GetLabelsVariables { + endCursor?: string | null; +} diff --git a/packages/mergebot/src/queries/schema/GetPRForSHA1.ts b/packages/mergebot/src/queries/schema/GetPRForSHA1.ts new file mode 100644 index 0000000000..64cb509ea8 --- /dev/null +++ b/packages/mergebot/src/queries/schema/GetPRForSHA1.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +// ==================================================== +// GraphQL query operation: GetPRForSHA1 +// ==================================================== + +export interface GetPRForSHA1_search_nodes_App { + __typename: "App" | "Discussion" | "Issue" | "MarketplaceListing" | "Organization" | "Repository" | "User"; +} + +export interface GetPRForSHA1_search_nodes_PullRequest { + __typename: "PullRequest"; + /** + * Identifies the pull request title. + */ + title: string; + /** + * Identifies the pull request number. + */ + number: number; + /** + * `true` if the pull request is closed + */ + closed: boolean; +} + +export type GetPRForSHA1_search_nodes = GetPRForSHA1_search_nodes_App | GetPRForSHA1_search_nodes_PullRequest; + +export interface GetPRForSHA1_search { + __typename: "SearchResultItemConnection"; + /** + * A list of nodes. + */ + nodes: (GetPRForSHA1_search_nodes | null)[] | null; +} + +export interface GetPRForSHA1 { + /** + * Perform a search across resources, returning a maximum of 1,000 results. + */ + search: GetPRForSHA1_search; +} + +export interface GetPRForSHA1Variables { + query: string; +} diff --git a/packages/mergebot/src/queries/schema/GetProjectBoardCards.ts b/packages/mergebot/src/queries/schema/GetProjectBoardCards.ts new file mode 100644 index 0000000000..bb4242a16c --- /dev/null +++ b/packages/mergebot/src/queries/schema/GetProjectBoardCards.ts @@ -0,0 +1,87 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +// ==================================================== +// GraphQL query operation: GetProjectBoardCards +// ==================================================== + +export interface GetProjectBoardCards_repository_project_columns_nodes_cards_nodes { + __typename: "ProjectCard"; + /** + * The Node ID of the ProjectCard object + */ + id: string; + /** + * Identifies the date and time when the object was last updated. + */ + updatedAt: any; +} + +export interface GetProjectBoardCards_repository_project_columns_nodes_cards { + __typename: "ProjectCardConnection"; + /** + * Identifies the total count of items in the connection. + */ + totalCount: number; + /** + * A list of nodes. + */ + nodes: (GetProjectBoardCards_repository_project_columns_nodes_cards_nodes | null)[] | null; +} + +export interface GetProjectBoardCards_repository_project_columns_nodes { + __typename: "ProjectColumn"; + /** + * The Node ID of the ProjectColumn object + */ + id: string; + /** + * The project column's name. + */ + name: string; + /** + * List of cards in the column + */ + cards: GetProjectBoardCards_repository_project_columns_nodes_cards; +} + +export interface GetProjectBoardCards_repository_project_columns { + __typename: "ProjectColumnConnection"; + /** + * A list of nodes. + */ + nodes: (GetProjectBoardCards_repository_project_columns_nodes | null)[] | null; +} + +export interface GetProjectBoardCards_repository_project { + __typename: "Project"; + /** + * The Node ID of the Project object + */ + id: string; + /** + * List of columns in the project + */ + columns: GetProjectBoardCards_repository_project_columns; +} + +export interface GetProjectBoardCards_repository { + __typename: "Repository"; + /** + * The Node ID of the Repository object + */ + id: string; + /** + * Find project by number. + */ + project: GetProjectBoardCards_repository_project | null; +} + +export interface GetProjectBoardCards { + /** + * Lookup a given repository by the owner and repository name. + */ + repository: GetProjectBoardCards_repository | null; +} diff --git a/packages/mergebot/src/queries/schema/GetProjectColumns.ts b/packages/mergebot/src/queries/schema/GetProjectColumns.ts new file mode 100644 index 0000000000..900af261e1 --- /dev/null +++ b/packages/mergebot/src/queries/schema/GetProjectColumns.ts @@ -0,0 +1,59 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +// ==================================================== +// GraphQL query operation: GetProjectColumns +// ==================================================== + +export interface GetProjectColumns_repository_project_columns_nodes { + __typename: "ProjectColumn"; + /** + * The Node ID of the ProjectColumn object + */ + id: string; + /** + * The project column's name. + */ + name: string; +} + +export interface GetProjectColumns_repository_project_columns { + __typename: "ProjectColumnConnection"; + /** + * A list of nodes. + */ + nodes: (GetProjectColumns_repository_project_columns_nodes | null)[] | null; +} + +export interface GetProjectColumns_repository_project { + __typename: "Project"; + /** + * The Node ID of the Project object + */ + id: string; + /** + * List of columns in the project + */ + columns: GetProjectColumns_repository_project_columns; +} + +export interface GetProjectColumns_repository { + __typename: "Repository"; + /** + * The Node ID of the Repository object + */ + id: string; + /** + * Find project by number. + */ + project: GetProjectColumns_repository_project | null; +} + +export interface GetProjectColumns { + /** + * Lookup a given repository by the owner and repository name. + */ + repository: GetProjectColumns_repository | null; +} diff --git a/packages/mergebot/src/queries/schema/PR.ts b/packages/mergebot/src/queries/schema/PR.ts new file mode 100644 index 0000000000..39889d7030 --- /dev/null +++ b/packages/mergebot/src/queries/schema/PR.ts @@ -0,0 +1,753 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +import { + CommentAuthorAssociation, + MergeableState, + PullRequestState, + PullRequestReviewState, + CheckConclusionState, + CheckStatusState, + StatusState, +} from "./graphql-global-types"; + +// ==================================================== +// GraphQL query operation: PR +// ==================================================== + +export interface PR_repository_pullRequest_author { + __typename: "Bot" | "EnterpriseUserAccount" | "Mannequin" | "Organization" | "User"; + /** + * The username of the actor. + */ + login: string; +} + +export interface PR_repository_pullRequest_baseRef { + __typename: "Ref"; + /** + * The ref name. + */ + name: string; +} + +export interface PR_repository_pullRequest_labels_nodes { + __typename: "Label"; + /** + * Identifies the label name. + */ + name: string; +} + +export interface PR_repository_pullRequest_labels { + __typename: "LabelConnection"; + /** + * A list of nodes. + */ + nodes: (PR_repository_pullRequest_labels_nodes | null)[] | null; +} + +export interface PR_repository_pullRequest_commitIds_nodes_commit_parents_nodes { + __typename: "Commit"; + /** + * The Git object ID + */ + oid: any; +} + +export interface PR_repository_pullRequest_commitIds_nodes_commit_parents { + __typename: "CommitConnection"; + /** + * A list of nodes. + */ + nodes: (PR_repository_pullRequest_commitIds_nodes_commit_parents_nodes | null)[] | null; +} + +export interface PR_repository_pullRequest_commitIds_nodes_commit { + __typename: "Commit"; + /** + * The Git object ID + */ + oid: any; + /** + * The parents of a commit. + */ + parents: PR_repository_pullRequest_commitIds_nodes_commit_parents; +} + +export interface PR_repository_pullRequest_commitIds_nodes { + __typename: "PullRequestCommit"; + /** + * The Git commit object + */ + commit: PR_repository_pullRequest_commitIds_nodes_commit; +} + +export interface PR_repository_pullRequest_commitIds { + __typename: "PullRequestCommitConnection"; + /** + * A list of nodes. + */ + nodes: (PR_repository_pullRequest_commitIds_nodes | null)[] | null; +} + +export interface PR_repository_pullRequest_timelineItems_nodes_AddedToMergeQueueEvent { + __typename: + | "AddedToMergeQueueEvent" + | "AddedToProjectEvent" + | "AssignedEvent" + | "AutoMergeDisabledEvent" + | "AutoMergeEnabledEvent" + | "AutoRebaseEnabledEvent" + | "AutoSquashEnabledEvent" + | "AutomaticBaseChangeFailedEvent" + | "AutomaticBaseChangeSucceededEvent" + | "BaseRefChangedEvent" + | "BaseRefDeletedEvent" + | "BaseRefForcePushedEvent" + | "ClosedEvent" + | "CommentDeletedEvent" + | "ConnectedEvent" + | "ConvertToDraftEvent" + | "ConvertedNoteToIssueEvent" + | "ConvertedToDiscussionEvent" + | "CrossReferencedEvent" + | "DemilestonedEvent" + | "DeployedEvent" + | "DeploymentEnvironmentChangedEvent" + | "DisconnectedEvent" + | "HeadRefDeletedEvent" + | "HeadRefForcePushedEvent" + | "HeadRefRestoredEvent" + | "IssueComment" + | "LabeledEvent" + | "LockedEvent" + | "MarkedAsDuplicateEvent" + | "MentionedEvent" + | "MergedEvent" + | "MilestonedEvent" + | "PinnedEvent" + | "PullRequestCommit" + | "PullRequestCommitCommentThread" + | "PullRequestReview" + | "PullRequestReviewThread" + | "PullRequestRevisionMarker" + | "ReferencedEvent" + | "RemovedFromMergeQueueEvent" + | "RemovedFromProjectEvent" + | "RenamedTitleEvent" + | "ReviewDismissedEvent" + | "ReviewRequestRemovedEvent" + | "ReviewRequestedEvent" + | "SubscribedEvent" + | "TransferredEvent" + | "UnassignedEvent" + | "UnlabeledEvent" + | "UnlockedEvent" + | "UnmarkedAsDuplicateEvent" + | "UnpinnedEvent" + | "UnsubscribedEvent" + | "UserBlockedEvent"; +} + +export interface PR_repository_pullRequest_timelineItems_nodes_ReopenedEvent { + __typename: "ReopenedEvent"; + /** + * Identifies the date and time when the object was created. + */ + createdAt: any; +} + +export interface PR_repository_pullRequest_timelineItems_nodes_ReadyForReviewEvent { + __typename: "ReadyForReviewEvent"; + /** + * Identifies the date and time when the object was created. + */ + createdAt: any; +} + +export interface PR_repository_pullRequest_timelineItems_nodes_MovedColumnsInProjectEvent_actor { + __typename: "Bot" | "EnterpriseUserAccount" | "Mannequin" | "Organization" | "User"; + /** + * The username of the actor. + */ + login: string; +} + +export interface PR_repository_pullRequest_timelineItems_nodes_MovedColumnsInProjectEvent { + __typename: "MovedColumnsInProjectEvent"; + /** + * Identifies the actor who performed the event. + */ + actor: PR_repository_pullRequest_timelineItems_nodes_MovedColumnsInProjectEvent_actor | null; + /** + * Identifies the date and time when the object was created. + */ + createdAt: any; + /** + * Column name the issue or pull request was moved to. + */ + projectColumnName: string; +} + +export type PR_repository_pullRequest_timelineItems_nodes = + | PR_repository_pullRequest_timelineItems_nodes_AddedToMergeQueueEvent + | PR_repository_pullRequest_timelineItems_nodes_ReopenedEvent + | PR_repository_pullRequest_timelineItems_nodes_ReadyForReviewEvent + | PR_repository_pullRequest_timelineItems_nodes_MovedColumnsInProjectEvent; + +export interface PR_repository_pullRequest_timelineItems { + __typename: "PullRequestTimelineItemsConnection"; + /** + * A list of nodes. + */ + nodes: (PR_repository_pullRequest_timelineItems_nodes | null)[] | null; +} + +export interface PR_repository_pullRequest_reviews_nodes_author { + __typename: "Bot" | "EnterpriseUserAccount" | "Mannequin" | "Organization" | "User"; + /** + * The username of the actor. + */ + login: string; +} + +export interface PR_repository_pullRequest_reviews_nodes_commit { + __typename: "Commit"; + /** + * The Git object ID + */ + oid: any; +} + +export interface PR_repository_pullRequest_reviews_nodes_comments_nodes_author { + __typename: "Bot" | "EnterpriseUserAccount" | "Mannequin" | "Organization" | "User"; + /** + * The username of the actor. + */ + login: string; +} + +export interface PR_repository_pullRequest_reviews_nodes_comments_nodes { + __typename: "PullRequestReviewComment"; + /** + * The actor who authored the comment. + */ + author: PR_repository_pullRequest_reviews_nodes_comments_nodes_author | null; + /** + * Identifies when the comment was created. + */ + createdAt: any; +} + +export interface PR_repository_pullRequest_reviews_nodes_comments { + __typename: "PullRequestReviewCommentConnection"; + /** + * A list of nodes. + */ + nodes: (PR_repository_pullRequest_reviews_nodes_comments_nodes | null)[] | null; +} + +export interface PR_repository_pullRequest_reviews_nodes { + __typename: "PullRequestReview"; + /** + * The actor who authored the comment. + */ + author: PR_repository_pullRequest_reviews_nodes_author | null; + /** + * Identifies the commit associated with this pull request review. + */ + commit: PR_repository_pullRequest_reviews_nodes_commit | null; + /** + * A list of review comments for the current pull request review. + */ + comments: PR_repository_pullRequest_reviews_nodes_comments; + /** + * Author's association with the subject of the comment. + */ + authorAssociation: CommentAuthorAssociation; + /** + * Identifies the current state of the pull request review. + */ + state: PullRequestReviewState; + /** + * Identifies when the Pull Request Review was submitted + */ + submittedAt: any | null; + /** + * The HTTP URL permalink for this PullRequestReview. + */ + url: any; +} + +export interface PR_repository_pullRequest_reviews { + __typename: "PullRequestReviewConnection"; + /** + * A list of nodes. + */ + nodes: (PR_repository_pullRequest_reviews_nodes | null)[] | null; +} + +export interface PR_repository_pullRequest_commits_nodes_commit_checkSuites_nodes_app { + __typename: "App"; + /** + * The name of the app. + */ + name: string; +} + +export interface PR_repository_pullRequest_commits_nodes_commit_checkSuites_nodes_checkRuns_nodes { + __typename: "CheckRun"; + /** + * A string representing the check run + */ + title: string | null; +} + +export interface PR_repository_pullRequest_commits_nodes_commit_checkSuites_nodes_checkRuns { + __typename: "CheckRunConnection"; + /** + * A list of nodes. + */ + nodes: (PR_repository_pullRequest_commits_nodes_commit_checkSuites_nodes_checkRuns_nodes | null)[] | null; +} + +export interface PR_repository_pullRequest_commits_nodes_commit_checkSuites_nodes_workflowRun_file { + __typename: "WorkflowRunFile"; + /** + * The path of the workflow file relative to its repository. + */ + path: string; +} + +export interface PR_repository_pullRequest_commits_nodes_commit_checkSuites_nodes_workflowRun { + __typename: "WorkflowRun"; + /** + * The workflow file + */ + file: PR_repository_pullRequest_commits_nodes_commit_checkSuites_nodes_workflowRun_file | null; +} + +export interface PR_repository_pullRequest_commits_nodes_commit_checkSuites_nodes { + __typename: "CheckSuite"; + /** + * Identifies the primary key from the database. + */ + databaseId: number | null; + /** + * The GitHub App that created this check suite. + */ + app: PR_repository_pullRequest_commits_nodes_commit_checkSuites_nodes_app | null; + /** + * The conclusion of this check suite. + */ + conclusion: CheckConclusionState | null; + /** + * The HTTP path for this check suite + */ + resourcePath: any; + /** + * The status of this check suite. + */ + status: CheckStatusState; + /** + * The HTTP URL for this check suite + */ + url: any; + /** + * The check runs associated with a check suite. + */ + checkRuns: PR_repository_pullRequest_commits_nodes_commit_checkSuites_nodes_checkRuns | null; + /** + * Identifies the date and time when the object was created. + */ + createdAt: any; + /** + * The workflow run associated with this check suite. + */ + workflowRun: PR_repository_pullRequest_commits_nodes_commit_checkSuites_nodes_workflowRun | null; +} + +export interface PR_repository_pullRequest_commits_nodes_commit_checkSuites { + __typename: "CheckSuiteConnection"; + /** + * A list of nodes. + */ + nodes: (PR_repository_pullRequest_commits_nodes_commit_checkSuites_nodes | null)[] | null; +} + +export interface PR_repository_pullRequest_commits_nodes_commit_status_contexts_creator { + __typename: "Bot" | "EnterpriseUserAccount" | "Mannequin" | "Organization" | "User"; + /** + * The username of the actor. + */ + login: string; +} + +export interface PR_repository_pullRequest_commits_nodes_commit_status_contexts { + __typename: "StatusContext"; + /** + * The state of this status context. + */ + state: StatusState; + /** + * The description for this status context. + */ + description: string | null; + /** + * The actor who created this status context. + */ + creator: PR_repository_pullRequest_commits_nodes_commit_status_contexts_creator | null; + /** + * The URL for this status context. + */ + targetUrl: any | null; +} + +export interface PR_repository_pullRequest_commits_nodes_commit_status { + __typename: "Status"; + /** + * The combined commit status. + */ + state: StatusState; + /** + * The individual status contexts for this commit. + */ + contexts: PR_repository_pullRequest_commits_nodes_commit_status_contexts[]; +} + +export interface PR_repository_pullRequest_commits_nodes_commit { + __typename: "Commit"; + /** + * The check suites associated with a commit. + */ + checkSuites: PR_repository_pullRequest_commits_nodes_commit_checkSuites | null; + /** + * Status information for this commit + */ + status: PR_repository_pullRequest_commits_nodes_commit_status | null; + /** + * The datetime when this commit was authored. + */ + authoredDate: any; + /** + * The datetime when this commit was committed. + */ + committedDate: any; + /** + * The datetime when this commit was pushed. + */ + pushedDate: any | null; + /** + * The Git object ID + */ + oid: any; +} + +export interface PR_repository_pullRequest_commits_nodes { + __typename: "PullRequestCommit"; + /** + * The Git commit object + */ + commit: PR_repository_pullRequest_commits_nodes_commit; +} + +export interface PR_repository_pullRequest_commits { + __typename: "PullRequestCommitConnection"; + /** + * Identifies the total count of items in the connection. + */ + totalCount: number; + /** + * A list of nodes. + */ + nodes: (PR_repository_pullRequest_commits_nodes | null)[] | null; +} + +export interface PR_repository_pullRequest_comments_nodes_author { + __typename: "Bot" | "EnterpriseUserAccount" | "Mannequin" | "Organization" | "User"; + /** + * The username of the actor. + */ + login: string; +} + +export interface PR_repository_pullRequest_comments_nodes_reactions_nodes_user { + __typename: "User"; + /** + * The username used to login. + */ + login: string; +} + +export interface PR_repository_pullRequest_comments_nodes_reactions_nodes { + __typename: "Reaction"; + /** + * Identifies the user who created this reaction. + */ + user: PR_repository_pullRequest_comments_nodes_reactions_nodes_user | null; +} + +export interface PR_repository_pullRequest_comments_nodes_reactions { + __typename: "ReactionConnection"; + /** + * A list of nodes. + */ + nodes: (PR_repository_pullRequest_comments_nodes_reactions_nodes | null)[] | null; +} + +export interface PR_repository_pullRequest_comments_nodes { + __typename: "IssueComment"; + /** + * The Node ID of the IssueComment object + */ + id: string; + /** + * The actor who authored the comment. + */ + author: PR_repository_pullRequest_comments_nodes_author | null; + /** + * Identifies the primary key from the database. + */ + databaseId: number | null; + /** + * The body as Markdown. + */ + body: string; + /** + * Identifies the date and time when the object was created. + */ + createdAt: any; + /** + * A list of Reactions left on the Issue. + */ + reactions: PR_repository_pullRequest_comments_nodes_reactions; +} + +export interface PR_repository_pullRequest_comments { + __typename: "IssueCommentConnection"; + /** + * Identifies the total count of items in the connection. + */ + totalCount: number; + /** + * A list of nodes. + */ + nodes: (PR_repository_pullRequest_comments_nodes | null)[] | null; +} + +export interface PR_repository_pullRequest_files_nodes { + __typename: "PullRequestChangedFile"; + /** + * The path of the file. + */ + path: string; + /** + * The number of additions to the file. + */ + additions: number; + /** + * The number of deletions to the file. + */ + deletions: number; +} + +export interface PR_repository_pullRequest_files_pageInfo { + __typename: "PageInfo"; + /** + * When paginating forwards, are there more items? + */ + hasNextPage: boolean; + /** + * When paginating forwards, the cursor to continue. + */ + endCursor: string | null; +} + +export interface PR_repository_pullRequest_files { + __typename: "PullRequestChangedFileConnection"; + /** + * Identifies the total count of items in the connection. + */ + totalCount: number; + /** + * A list of nodes. + */ + nodes: (PR_repository_pullRequest_files_nodes | null)[] | null; + /** + * Information to aid in pagination. + */ + pageInfo: PR_repository_pullRequest_files_pageInfo; +} + +export interface PR_repository_pullRequest_projectCards_nodes_project { + __typename: "Project"; + /** + * The Node ID of the Project object + */ + id: string; + /** + * The project's number. + */ + number: number; + /** + * The project's name. + */ + name: string; +} + +export interface PR_repository_pullRequest_projectCards_nodes_column { + __typename: "ProjectColumn"; + /** + * The Node ID of the ProjectColumn object + */ + id: string; + /** + * The project column's name. + */ + name: string; +} + +export interface PR_repository_pullRequest_projectCards_nodes { + __typename: "ProjectCard"; + /** + * The Node ID of the ProjectCard object + */ + id: string; + /** + * The project that contains this card. + */ + project: PR_repository_pullRequest_projectCards_nodes_project; + /** + * The project column this card is associated under. A card may only belong to one + * project column at a time. The column field will be null if the card is created + * in a pending state and has yet to be associated with a column. Once cards are + * associated with a column, they will not become pending in the future. + */ + column: PR_repository_pullRequest_projectCards_nodes_column | null; +} + +export interface PR_repository_pullRequest_projectCards { + __typename: "ProjectCardConnection"; + /** + * A list of nodes. + */ + nodes: (PR_repository_pullRequest_projectCards_nodes | null)[] | null; +} + +export interface PR_repository_pullRequest { + __typename: "PullRequest"; + /** + * The Node ID of the PullRequest object + */ + id: string; + /** + * Identifies the pull request title. + */ + title: string; + /** + * Identifies the date and time when the object was created. + */ + createdAt: any; + /** + * The actor who authored the comment. + */ + author: PR_repository_pullRequest_author | null; + /** + * Author's association with the subject of the comment. + */ + authorAssociation: CommentAuthorAssociation; + /** + * Identifies the base Ref associated with the pull request. + */ + baseRef: PR_repository_pullRequest_baseRef | null; + /** + * A list of labels associated with the object. + */ + labels: PR_repository_pullRequest_labels | null; + /** + * Identifies if the pull request is a draft. + */ + isDraft: boolean; + /** + * Whether or not the pull request can be merged based on the existence of merge conflicts. + */ + mergeable: MergeableState; + /** + * Identifies the pull request number. + */ + number: number; + /** + * Identifies the state of the pull request. + */ + state: PullRequestState; + /** + * Identifies the oid of the head ref associated with the pull request, even if the ref has been deleted. + */ + headRefOid: any; + /** + * The number of changed files in this pull request. + */ + changedFiles: number; + /** + * The number of additions in this pull request. + */ + additions: number; + /** + * The number of deletions in this pull request. + */ + deletions: number; + /** + * A list of commits present in this pull request's head branch not present in the base branch. + */ + commitIds: PR_repository_pullRequest_commitIds; + /** + * A list of events, comments, commits, etc. associated with the pull request. + */ + timelineItems: PR_repository_pullRequest_timelineItems; + /** + * A list of reviews associated with the pull request. + */ + reviews: PR_repository_pullRequest_reviews | null; + /** + * A list of commits present in this pull request's head branch not present in the base branch. + */ + commits: PR_repository_pullRequest_commits; + /** + * A list of comments associated with the pull request. + */ + comments: PR_repository_pullRequest_comments; + /** + * Lists the files changed within this pull request. + */ + files: PR_repository_pullRequest_files | null; + /** + * List of project cards associated with this pull request. + */ + projectCards: PR_repository_pullRequest_projectCards; +} + +export interface PR_repository { + __typename: "Repository"; + /** + * The Node ID of the Repository object + */ + id: string; + /** + * Returns a single pull request from the current repository by number. + */ + pullRequest: PR_repository_pullRequest | null; +} + +export interface PR { + /** + * Lookup a given repository by the owner and repository name. + */ + repository: PR_repository | null; +} + +export interface PRVariables { + prNumber: number; +} diff --git a/packages/mergebot/src/queries/schema/PRFiles.ts b/packages/mergebot/src/queries/schema/PRFiles.ts new file mode 100644 index 0000000000..9b96da1038 --- /dev/null +++ b/packages/mergebot/src/queries/schema/PRFiles.ts @@ -0,0 +1,80 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +// ==================================================== +// GraphQL query operation: PRFiles +// ==================================================== + +export interface PRFiles_repository_pullRequest_files_nodes { + __typename: "PullRequestChangedFile"; + /** + * The path of the file. + */ + path: string; + /** + * The number of additions to the file. + */ + additions: number; + /** + * The number of deletions to the file. + */ + deletions: number; +} + +export interface PRFiles_repository_pullRequest_files_pageInfo { + __typename: "PageInfo"; + /** + * When paginating forwards, are there more items? + */ + hasNextPage: boolean; + /** + * When paginating forwards, the cursor to continue. + */ + endCursor: string | null; +} + +export interface PRFiles_repository_pullRequest_files { + __typename: "PullRequestChangedFileConnection"; + /** + * Identifies the total count of items in the connection. + */ + totalCount: number; + /** + * A list of nodes. + */ + nodes: (PRFiles_repository_pullRequest_files_nodes | null)[] | null; + /** + * Information to aid in pagination. + */ + pageInfo: PRFiles_repository_pullRequest_files_pageInfo; +} + +export interface PRFiles_repository_pullRequest { + __typename: "PullRequest"; + /** + * Lists the files changed within this pull request. + */ + files: PRFiles_repository_pullRequest_files | null; +} + +export interface PRFiles_repository { + __typename: "Repository"; + /** + * Returns a single pull request from the current repository by number. + */ + pullRequest: PRFiles_repository_pullRequest | null; +} + +export interface PRFiles { + /** + * Lookup a given repository by the owner and repository name. + */ + repository: PRFiles_repository | null; +} + +export interface PRFilesVariables { + prNumber: number; + endCursor?: string | null; +} diff --git a/packages/mergebot/src/queries/schema/graphql-global-types.ts b/packages/mergebot/src/queries/schema/graphql-global-types.ts new file mode 100644 index 0000000000..bf82d20f90 --- /dev/null +++ b/packages/mergebot/src/queries/schema/graphql-global-types.ts @@ -0,0 +1,93 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +//============================================================== +// START Enums and Input Objects +//============================================================== + +/** + * The possible states for a check suite or run conclusion. + */ +export enum CheckConclusionState { + ACTION_REQUIRED = "ACTION_REQUIRED", + CANCELLED = "CANCELLED", + FAILURE = "FAILURE", + NEUTRAL = "NEUTRAL", + SKIPPED = "SKIPPED", + STALE = "STALE", + STARTUP_FAILURE = "STARTUP_FAILURE", + SUCCESS = "SUCCESS", + TIMED_OUT = "TIMED_OUT", +} + +/** + * The possible states for a check suite or run status. + */ +export enum CheckStatusState { + COMPLETED = "COMPLETED", + IN_PROGRESS = "IN_PROGRESS", + PENDING = "PENDING", + QUEUED = "QUEUED", + REQUESTED = "REQUESTED", + WAITING = "WAITING", +} + +/** + * A comment author association with repository. + */ +export enum CommentAuthorAssociation { + COLLABORATOR = "COLLABORATOR", + CONTRIBUTOR = "CONTRIBUTOR", + FIRST_TIMER = "FIRST_TIMER", + FIRST_TIME_CONTRIBUTOR = "FIRST_TIME_CONTRIBUTOR", + MANNEQUIN = "MANNEQUIN", + MEMBER = "MEMBER", + NONE = "NONE", + OWNER = "OWNER", +} + +/** + * Whether or not a PullRequest can be merged. + */ +export enum MergeableState { + CONFLICTING = "CONFLICTING", + MERGEABLE = "MERGEABLE", + UNKNOWN = "UNKNOWN", +} + +/** + * The possible states of a pull request review. + */ +export enum PullRequestReviewState { + APPROVED = "APPROVED", + CHANGES_REQUESTED = "CHANGES_REQUESTED", + COMMENTED = "COMMENTED", + DISMISSED = "DISMISSED", + PENDING = "PENDING", +} + +/** + * The possible states of a pull request. + */ +export enum PullRequestState { + CLOSED = "CLOSED", + MERGED = "MERGED", + OPEN = "OPEN", +} + +/** + * The possible commit status states. + */ +export enum StatusState { + ERROR = "ERROR", + EXPECTED = "EXPECTED", + FAILURE = "FAILURE", + PENDING = "PENDING", + SUCCESS = "SUCCESS", +} + +//============================================================== +// END Enums and Input Objects +//============================================================== diff --git a/packages/mergebot/src/run.ts b/packages/mergebot/src/run.ts new file mode 100755 index 0000000000..6e76af50bc --- /dev/null +++ b/packages/mergebot/src/run.ts @@ -0,0 +1,178 @@ +#!/usr/bin/env node + +import * as schema from "@octokit/graphql-schema/schema"; +import yargs from "yargs"; +import { process as computeActions } from "./compute-pr-actions"; +import { getAllOpenPRsAndCardIDs } from "./queries/all-open-prs-query"; +import { getPRInfo } from "./queries/pr-query"; +import { deriveStateForPR, BotResult } from "./pr-info"; +import { executePrActions } from "./execute-pr-actions"; +import { getProjectBoardCards } from "./queries/projectboard-cards"; +import { runQueryToGetPRForCardId } from "./queries/card-id-to-pr-query"; +import { createMutation, client } from "./graphql-client"; +import { render } from "prettyjson"; +import { inspect } from "util"; + +const args = yargs(process.argv.slice(2)) + .usage("Usage: $0 [options] pr...") + .usage(" Run over specified PRs, or all if no PRs specified") + .usage(" Each pr is either a number or a N-M number range") + .options({ + dry: { alias: ["d"], type: "boolean", default: false, desc: "don't execute actions" }, + cleanup: { alias: ["c"], type: "boolean", default: true, desc: "cleanup columns when done" }, + format: { alias: ["f"], choices: ["json", "yaml", "node"], desc: "format for information display" }, + "show-raw": { alias: ["s1"], type: "boolean", desc: "display raw query result" }, + "show-basic": { alias: ["s2"], type: "boolean", desc: "display basic pr info" }, + "show-extended": { alias: ["s3"], type: "boolean", desc: "display extended info" }, + "show-actions": { alias: ["s4"], type: "boolean", desc: "display actions" }, + "show-mutations": { alias: ["s5"], type: "boolean", desc: "display mutations" }, + }) + .coerce("_", (prs: (number | string)[]) => + prs.map((pr) => { + if (typeof pr === "number") return (n: number) => n === pr; + if (pr.match(/^\d+$/)) return (n: number) => n === +pr; + const m = pr.match(/^(\d+)-(\d+)$/); + if (!m) throw new Error(`bad PR or PR range argument: "${pr}"`); + const lo = +m[1]!, + hi = +m[2]!; + return (n: number) => lo <= n && n <= hi; + }), + ) + .help("h") + .alias("h", "help") + .strict().argv as { + // Ignore the possibility that argv could be a promise + [x: string]: unknown; + dry: boolean; + cleanup: boolean; + format: string | undefined; + "show-raw": boolean | undefined; + showRaw: boolean | undefined; + "show-basic": boolean | undefined; + showBasic: boolean | undefined; + "show-extended": boolean | undefined; + showExtended: boolean | undefined; + "show-actions": boolean | undefined; + showActions: boolean | undefined; + "show-mutations": boolean | undefined; + showMutations: boolean | undefined; + _: ((n: number) => boolean)[] & (string | number)[]; +}; +const shouldRunOn: (n: number) => boolean = args._.length === 0 ? (_n) => true : (n) => args._.some((p) => p(n)); + +const xform = (x: unknown, xlate: (s: string) => string): unknown => { + if (typeof x === "string") return xlate(x); + if (typeof x !== "object" || x === null) return x; + if (Array.isArray(x)) return x.map((e) => xform(e, xlate)); + const o = x as { [k: string]: unknown }; + return Object.fromEntries(Object.keys(o).map((k) => [k, xform(o[k], xlate)])); +}; + +const show = (name: string, value: unknown) => { + console.log(` === ${name} ===`); + value = xform(value, (s: string) => + s.replace(/\n---+\s*
(Diagnostic Information)[^]*?<\/details>/g, "...$1..."), + ); + let str = + args.format === "json" + ? JSON.stringify(value, undefined, 2) + : args.format === "yaml" + ? render(value) + : inspect(value, { depth: null, colors: true }); + str = str.replace(/^/gm, " "); + console.log(str); +}; + +const start = async function () { + console.log(`Getting open PRs.`); + const { prs, cardIDs } = await getAllOpenPRsAndCardIDs(); + // + const failures = []; + for (const pr of prs) { + if (!shouldRunOn(pr)) continue; + console.log(`Processing #${pr} (${prs.indexOf(pr) + 1} of ${prs.length})...`); + // Generate the info for the PR from scratch + const info = await getPRInfo(pr); + if (args["show-raw"]) show("Raw Query Result", info); + const prInfo = info.data.repository?.pullRequest; + // If it didn't work, bail early + if (!prInfo) { + console.error(` No PR with this number exists, (${JSON.stringify(info)})`); + continue; + } + let state: BotResult | undefined; + try { + state = await deriveStateForPR(prInfo); + } catch (e) { + console.error(` Error: ${e}`); + failures.push([e, pr]); + continue; + } + if (args["show-basic"]) show("Basic PR Info", state); + // Show errors in log but keep processing to show in a comment too + if (state.type === "error") console.error(` Error: ${state.message}`); + // Show other messages too + if ("message" in state) console.log(` ... ${state.message}`); + // Convert the info to a set of actions for the bot + const actions = computeActions(state, args["show-extended"] ? (i) => show("Extended Info", i) : undefined); + if (args["show-actions"]) show("Actions", actions); + // Act on the actions + const mutations = await executePrActions(actions, prInfo, args.dry); + if (args["show-mutations"] ?? args.dry) show("Mutations", mutations); + } + if (args.dry || !args.cleanup) return; + // + console.log("Cleaning up cards"); + const columns = await getProjectBoardCards(); + const deleteObject = async (id: string, shoulda?: string) => { + if (shoulda) { + // don't automatically delete these, eg, PRs that were created + // during the scan would end up here. + return console.log(` Should delete "${id}" (${shoulda})`); + } + const mutation = createMutation("deleteProjectCard", { cardId: id }); + await client.mutate(mutation); + }; + // Reduce "Recently Merged" + { + const recentlyMerged = columns.find((c) => c.name === "Recently Merged"); + if (!recentlyMerged) { + throw new Error(`Could not find the 'Recently Merged' column in ${columns.map((n) => n.name)}`); + } + const { cards, totalCount } = recentlyMerged; + const afterFirst50 = cards.sort((l, r) => l.updatedAt.localeCompare(r.updatedAt)).slice(50); + if (afterFirst50.length > 0) { + console.log(`Cutting "Recently Merged" projects to the last 50`); + if (cards.length < totalCount) { + console.warn(` *** Note: ${totalCount - cards.length} cards were not seen by this query!`); + } + for (const card of afterFirst50) await deleteObject(card.id); + } + } + // Handle other columns + for (const column of columns) { + if (column.name === "Recently Merged") continue; + const ids = column.cards.map((c) => c.id).filter((c) => !cardIDs.includes(c)); + if (ids.length === 0) continue; + console.log(`Cleaning up closed PRs in "${column.name}"`); + // don't actually do the deletions, until I follow this and make sure that it's working fine + for (const id of ids) { + const info = await runQueryToGetPRForCardId(id); + await deleteObject(id, info === undefined ? "???" : info.state === "CLOSED" ? undefined : "#" + info.number); + } + } + if (failures.length) { + console.error(`\n\nThe following PRs failed:`); + for (const [e, pr] of failures) { + console.error(` #${pr}: ${e}`); + } + throw failures[0]![0]; + } else { + console.log("Done"); + } +}; + +start().catch(function (error) { + process.exitCode = 1; + console.error(error); +}); diff --git a/packages/mergebot/src/scripts/updateJSONFixtures.ts b/packages/mergebot/src/scripts/updateJSONFixtures.ts new file mode 100644 index 0000000000..2897302d52 --- /dev/null +++ b/packages/mergebot/src/scripts/updateJSONFixtures.ts @@ -0,0 +1,39 @@ +import { readdirSync, readFileSync, writeFileSync } from "fs"; +import { join } from "path"; + +// Converts Travis response to GH Actions response, left +// around so that someone whio needs to edit fixtures can start from +// an existing framework + +// yarn ts-node src/scripts/updateJSONFixtures.ts + +const fixtureRoot = join(__dirname, "..", "_tests", "fixtures"); +const fixtureNames = readdirSync(fixtureRoot); + +fixtureNames.forEach((fixture) => { + const responsePath = join(fixtureRoot, fixture, "_response.json"); + const response = JSON.parse(readFileSync(responsePath, "utf8")); + const pr = response.data.repository.pullRequest; + const headSha = pr.headRefOid; + + if (!pr.commits) return; + + const headCommit = pr.commits.nodes.find((c: any) => c.commit.oid === headSha).commit; + const status = (headCommit.status && headCommit.status.state) || "MISSING"; + + if (!headCommit.checkSuites) headCommit.checkSuites = { nodes: [] }; + headCommit.checkSuites.nodes.push({ + app: { + name: "GitHub Actions", + __typename: "App", + }, + conclusion: status, + resourcePath: + "/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + status, + url: "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/22c73c88cc9c09efd4c2998ec360607dd4c36c2e/checks?check_suite_id=731664306", + __typename: "CheckSuite", + }); + + writeFileSync(responsePath, JSON.stringify(response, null, " ") + "\n", "utf8"); +}); diff --git a/packages/mergebot/src/side-effects/merge-codeowner-prs.ts b/packages/mergebot/src/side-effects/merge-codeowner-prs.ts new file mode 100644 index 0000000000..fe951dbc1f --- /dev/null +++ b/packages/mergebot/src/side-effects/merge-codeowner-prs.ts @@ -0,0 +1,26 @@ +import * as schema from "@octokit/graphql-schema/schema"; +import { CheckSuiteEvent } from "@octokit/webhooks-types"; +import { createMutation, client } from "../graphql-client"; + +export const mergeCodeOwnersOnGreen = async (payload: CheckSuiteEvent) => { + // Because we only care about GH actions, we can use the check suite API which means we get both the + // commit and the PR, making it much less effort than other merge-on-greens + // https://github.com/microsoft/TypeScript-repos-automation/blob/40ae8b3db63fd0150938e82e47dcb63ce65f7a2d/src/checks/mergeOnGreen.ts#L1 + + if ( + payload.action === "completed" && + payload.check_suite.conclusion === "success" && + payload.check_suite.head_commit.author.name === "TS Bot" && + payload.check_suite.head_commit.message === "Update CODEOWNERS" && + payload.check_suite.pull_requests[0]!.base.repo.id === payload.check_suite.pull_requests[0]!.head.repo.id + ) { + await client.mutate( + createMutation("mergePullRequest", { + commitHeadline: `🤖 Auto Merge`, + expectedHeadOid: payload.check_suite.head_commit.id, + mergeMethod: "SQUASH", + pullRequestId: payload.check_suite.pull_requests[0]!.id.toFixed(), + }), + ); + } +}; diff --git a/packages/mergebot/src/types/discussions.d.ts b/packages/mergebot/src/types/discussions.d.ts new file mode 100644 index 0000000000..2385c99eb4 --- /dev/null +++ b/packages/mergebot/src/types/discussions.d.ts @@ -0,0 +1,42 @@ +// Generated from the JSON response because it's not in the upstream tooling + +export interface DiscussionWebhook { + action: string; + discussion: Discussion; + repository: any; + sender: any; +} + +export interface Discussion { + repository_url: string; + category: Category; + answer_html_url: null; + answer_chosen_at: null; + answer_chosen_by: null; + html_url: string; + id: number; + node_id: string; + number: number; + title: string; + user: Sender; + state: string; + locked: boolean; + comments: number; + created_at: Date; + updated_at: Date; + author_association: string; + active_lock_reason: null; + body: string; +} + +export interface Category { + id: number; + repository_id: number; + emoji: string; + name: string; + description: string; + created_at: Date; + updated_at: Date; + slug: string; + is_answerable: boolean; +} diff --git a/packages/mergebot/src/urls.ts b/packages/mergebot/src/urls.ts new file mode 100644 index 0000000000..4dded99986 --- /dev/null +++ b/packages/mergebot/src/urls.ts @@ -0,0 +1,17 @@ +const baseURL = "https://github.com/DefinitelyTyped/DefinitelyTyped"; +const readmeLink = (header: string) => + `${baseURL}#user-content-${header + .replace(/[^\w -]/g, "") + .replace(/ /g, "-") + .toLowerCase()}`; + +export const review = (n: number) => `${baseURL}/pull/${n}/files`; +export const testingEditedPackages = readmeLink("Test editing an existing package"); +export const testingNewPackages = readmeLink("Adding tests to a new package"); +export const definitionOwners = readmeLink("Definition Owners"); +export const workflow = readmeLink("Make a pull request"); +export const tsconfigJson = readmeLink("`tsconfig.json`"); +export const testsTs = readmeLink("`-tests.ts`"); + +export const playground = (prNum: number) => + `https://www.typescriptlang.org/play/?dtPR=${prNum}&install-plugin=playground-dt-review`; diff --git a/packages/mergebot/src/util/cachedQueries.ts b/packages/mergebot/src/util/cachedQueries.ts new file mode 100644 index 0000000000..04e8c475fd --- /dev/null +++ b/packages/mergebot/src/util/cachedQueries.ts @@ -0,0 +1,19 @@ +import { TypedDocumentNode } from "@apollo/client/core"; +import { getLabels as getLabelsRaw, GetProjectColumns } from "../queries/label-columns-queries"; +import { client } from "../graphql-client"; +import { noNullish } from "./util"; + +export async function getProjectBoardColumns() { + const res = noNullish((await query(GetProjectColumns)).repository?.project?.columns.nodes); + return res.sort((a, b) => a.name.localeCompare(b.name)); +} + +export async function getLabels() { + const res = await getLabelsRaw(); + return res.filter((l) => !l.name.startsWith("Pkg:")).sort((a, b) => a.name.localeCompare(b.name)); +} + +async function query(gql: TypedDocumentNode): Promise { + const res = await client.query({ query: gql }); + return res.data; +} diff --git a/packages/mergebot/src/util/comment.ts b/packages/mergebot/src/util/comment.ts new file mode 100644 index 0000000000..5abc672eda --- /dev/null +++ b/packages/mergebot/src/util/comment.ts @@ -0,0 +1,16 @@ +import { Comment } from "../comments"; + +const prefix = "\n"; + +export function parse(body: string): Comment | undefined { + const start = body.lastIndexOf(prefix); + const end = body.lastIndexOf(suffix); + return start < 0 || end < 0 || end + suffix.length !== body.length + ? undefined + : { status: body.substr(0, start), tag: body.substr(start + prefix.length, end - start - prefix.length) }; +} + +export function make({ status, tag }: Comment) { + return `${status}${prefix}${tag}${suffix}`; +} diff --git a/packages/mergebot/src/util/fetchFile.ts b/packages/mergebot/src/util/fetchFile.ts new file mode 100644 index 0000000000..81eb5106d6 --- /dev/null +++ b/packages/mergebot/src/util/fetchFile.ts @@ -0,0 +1,22 @@ +import { client } from "../graphql-client"; +import { GetFileContent } from "../queries/file-query"; + +export async function fetchFile(expr: string, limit?: number): Promise { + const info = await client.query({ + query: GetFileContent, + variables: { + name: "DefinitelyTyped", + owner: "DefinitelyTyped", + expr: `${expr}`, + }, + }); + const obj = info.data.repository?.object; + if (!obj || obj.__typename !== "Blob") return undefined; + if (obj.text && limit && obj.text.length > limit) { + return obj.text.substring(0, limit); + } else if (obj.byteSize > 3_000_000 && !obj.text) { + throw new Error(`Blob too big to fetch: ${expr}`); + } else { + return obj.text ?? undefined; + } +} diff --git a/packages/mergebot/src/util/io.ts b/packages/mergebot/src/util/io.ts new file mode 100644 index 0000000000..6fbb7f4d26 --- /dev/null +++ b/packages/mergebot/src/util/io.ts @@ -0,0 +1,4 @@ +export async function fetchText(url: string): Promise { + const response = await fetch(url); + return response.text(); +} diff --git a/packages/mergebot/src/util/npm.ts b/packages/mergebot/src/util/npm.ts new file mode 100644 index 0000000000..b749dc1643 --- /dev/null +++ b/packages/mergebot/src/util/npm.ts @@ -0,0 +1,13 @@ +import { fetchText } from "./io"; + +const day = 1000 * 60 * 60 * 24; +const toDateStr = (d: Date, days: number) => new Date(d.getTime() - days * day).toISOString().replace(/T.*$/, ""); + +export async function getMonthlyDownloadCount(packageName: string, until?: Date): Promise { + // use the month up to a week before the given date, in case it takes npm some time to update the numbers + const range = !until ? "last-month" : `${toDateStr(until, 37)}:${toDateStr(until, 7)}`; + const url = `https://api.npmjs.org/downloads/point/${range}/@types/${packageName}`; + const result = JSON.parse(await fetchText(url)) as { downloads?: number }; + // For a package not on NPM, just return 0. + return result.downloads === undefined ? 0 : result.downloads; +} diff --git a/packages/mergebot/src/util/reply.ts b/packages/mergebot/src/util/reply.ts new file mode 100644 index 0000000000..f9b8d89ed5 --- /dev/null +++ b/packages/mergebot/src/util/reply.ts @@ -0,0 +1,6 @@ +import { InvocationContext } from "@azure/functions"; + +export const reply = (context: InvocationContext, status: number, body: string) => { + context.info(`${body} [${status}]`); + return { status, body }; +}; diff --git a/packages/mergebot/src/util/util.ts b/packages/mergebot/src/util/util.ts new file mode 100644 index 0000000000..f6b306e3ac --- /dev/null +++ b/packages/mergebot/src/util/util.ts @@ -0,0 +1,88 @@ +import * as crypto from "crypto"; +import { readFileSync } from "fs"; + +export function noNullish(arr: readonly (T | null | undefined)[] | null | undefined): T[] { + // eslint-disable-next-line eqeqeq + if (arr == null) return []; + // eslint-disable-next-line eqeqeq + return arr.filter((arr) => arr != null) as T[]; +} + +export function flatten(xs: T[]) { + return ([] as unknown as T).concat(...xs) as T; +} + +export function unique(xs: T[]) { + return [...new Set(xs)]; +} + +export function someLast(arr: readonly (T | null | undefined)[] | null | undefined, f: (item: T) => U) { + if (!arr) return undefined; + for (let i = arr.length - 1; i >= 0; i--) { + const x = arr[i], + r = x && f(x); + if (r) return r; + } + return undefined; +} + +export function min(arr: readonly [T, ...(T | undefined)[]]): T; +export function min(arr: readonly T[], compare?: (a: T, b: T) => number): T | undefined; +export function min(arr: readonly T[], compare?: (a: T, b: T) => number) { + return arr.length === 0 ? undefined : arr.reduce((res, x) => ((compare ? compare(x, res) < 0 : x < res) ? x : res)); +} + +export function max(arr: readonly [T, ...(T | undefined)[]]): T; +export function max(arr: readonly T[], compare?: (a: T, b: T) => number): T | undefined; +export function max(arr: readonly T[], compare?: (a: T, b: T) => number) { + return arr.length === 0 ? undefined : arr.reduce((res, x) => ((compare ? compare(x, res) > 0 : x > res) ? x : res)); +} + +export function sameUser(u1: string, u2: string) { + return u1.toLowerCase() === u2.toLowerCase(); +} + +export function authorNotBot( + node: { login: string } | { author?: { login: string } | null } | { actor?: { login: string } | null }, +): boolean { + return ( + ("author" in node && node.author!.login !== "typescript-bot") || + ("actor" in node && node.actor!.login !== "typescript-bot") || + ("login" in node && node.login !== "typescript-bot") + ); +} + +export function scrubDiagnosticDetails(s: string) { + return s.replace( + /
Diagnostic Information.*?<\/summary>(?:\\n)+```json\\n{.*?\\n}\\n```(?:\\n)+<\/details>/gs, + "... diagnostics scrubbed ...", + ); +} + +export function sha256(s: string) { + return crypto.createHash("sha256").update(s).digest("hex"); +} + +export function abbrOid(s: string) { + return s.slice(0, 7); +} + +// Remove when the fix propagates to a published version +interface HACK { + raw(template: { raw: readonly string[] | ArrayLike }, ...substitutions: any[]): string; +} + +// Convenient utility for long texts: trimmed, then remove all spaces up to a +// "|" on each line, and lines that have no "|" at the beginning are joined with +// the previous line (with a single space). (Should really be mapped only on `strs` +// only, otherwise there're compositionality problems (one place in comments.ts).) +export function txt(strs: TemplateStringsArray, ...xs: any) { + return (String as HACK) + .raw({ raw: strs }, ...xs) + .trim() + .replace(/(^|\n) *([^\s])/g, (_m, pfx, sfx) => (sfx === "|" ? pfx : pfx ? " " + sfx : sfx)); +} + +export function readJsonSync(file: string) { + return JSON.parse(readFileSync(file, "utf8")); +} diff --git a/packages/mergebot/src/util/verify.ts b/packages/mergebot/src/util/verify.ts new file mode 100644 index 0000000000..9c70aa95a2 --- /dev/null +++ b/packages/mergebot/src/util/verify.ts @@ -0,0 +1,42 @@ +import { verify } from "@octokit/webhooks-methods"; +import type { InvocationContext } from "@azure/functions"; + +export async function httpLog(context: InvocationContext, headers: Headers, body: any) { + const githubId = headers.get("x-github-delivery"); + const event = headers.get("x-github-event")!; + context.log( + `>>> HTTP Trigger ${context.functionName} [${event}.${body.action}; gh: ${githubId}; az: ${context.invocationId}; node: ${process.version}]`, + ); +} + +export async function shouldRunRequest( + context: InvocationContext, + headers: Headers, + body: any, + canHandleRequest?: (event: string, action: string) => boolean, +) { + const isDev = process.env.AZURE_FUNCTIONS_ENVIRONMENT === "Development"; + // For process.env.GITHUB_WEBHOOK_SECRET see + // https://ms.portal.azure.com/#blade/WebsitesExtension/FunctionsIFrameBlade/id/%2Fsubscriptions%2F57bfeeed-c34a-4ffd-a06b-ccff27ac91b8%2FresourceGroups%2Fdtmergebot%2Fproviders%2FMicrosoft.Web%2Fsites%2FDTMergeBot + const fromGitHub = await verifyIsFromGitHub(headers, body); + if (!isDev && !fromGitHub) { + context.log("Request did not come from GitHub"); + return false; + } + + // Optional function for early bailing if it returns false + if (canHandleRequest && !canHandleRequest(headers.get("x-github-event")!, body.action)) { + context.log("canHandleRequest returned false"); + return false; + } + + return true; +} + +export async function verifyIsFromGitHub(headers: Headers, body: any) { + const secret = process.env.GITHUB_WEBHOOK_SECRET; + + // For process.env.GITHUB_WEBHOOK_SECRET see + // https://ms.portal.azure.com/#blade/WebsitesExtension/FunctionsIFrameBlade/id/%2Fsubscriptions%2F57bfeeed-c34a-4ffd-a06b-ccff27ac91b8%2FresourceGroups%2Fdtmergebot%2Fproviders%2FMicrosoft.Web%2Fsites%2FDTMergeBot + return verify(secret!, JSON.stringify(body), headers.get("x-hub-signature-256")!); +} diff --git a/packages/mergebot/tsconfig.json b/packages/mergebot/tsconfig.json new file mode 100644 index 0000000000..ecc89caac0 --- /dev/null +++ b/packages/mergebot/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "outDir": "dist", + "strict": true, + "module": "commonjs", + "target": "es2022", + "lib": ["es2022"], + "esModuleInterop": true, + "types": ["node"], + "sourceMap": true, + "resolveJsonModule": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noUncheckedIndexedAccess": true, + "skipLibCheck": true + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7199b5f4e..624e622b59 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -292,6 +292,85 @@ importers: specifier: ^7.5.6 version: 7.5.6 + packages/mergebot: + dependencies: + '@apollo/client': + specifier: ^3.10.3 + version: 3.10.8(graphql@15.8.0) + '@azure/functions': + specifier: ^4.4.0 + version: 4.5.0 + '@definitelytyped/old-header-parser': + specifier: npm:@definitelytyped/header-parser@0.0.178 + version: /@definitelytyped/header-parser@0.0.178 + '@definitelytyped/utils': + specifier: workspace:* + version: link:../utils + '@octokit/webhooks-methods': + specifier: ^4.1.0 + version: 4.1.0 + dayjs: + specifier: ^1.11.11 + version: 1.11.11 + fast-json-patch: + specifier: ^3.1.1 + version: 3.1.1 + graphql: + specifier: 15.8.0 + version: 15.8.0 + prettyjson: + specifier: ^1.2.5 + version: 1.2.5 + yargs: + specifier: ^17.7.2 + version: 17.7.2 + devDependencies: + '@octokit/graphql-schema': + specifier: ^14.58.0 + version: 14.58.0 + '@octokit/webhooks-types': + specifier: ^7.5.1 + version: 7.5.1 + '@types/node': + specifier: ^18.19.33 + version: 18.19.39 + '@types/prettyjson': + specifier: ^0.0.33 + version: 0.0.33 + '@types/yargs': + specifier: ^17.0.32 + version: 17.0.32 + apollo: + specifier: ^2.34.0 + version: 2.34.0(typescript@5.5.2) + azure-functions-core-tools: + specifier: ^4.0.5700 + version: 4.0.5907 + esbuild: + specifier: ^0.21.5 + version: 0.21.5 + eslint: + specifier: ^8.57.0 + version: 8.57.0 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.19.39) + jest-file-snapshot: + specifier: ^0.5.0 + version: 0.5.0(patch_hash=onu36a7gyyhv46dluxj27tjeqe) + knip: + specifier: ^5.15.1 + version: 5.23.3(@types/node@18.19.39)(typescript@5.5.2) + rimraf: + specifier: ^5.0.7 + version: 5.0.7 + ts-jest: + specifier: ^29.1.2 + version: 29.1.5(@babel/core@7.23.3)(esbuild@0.21.5)(jest@29.7.0)(typescript@5.5.2) + typescript: + specifier: ^5.4.5 + version: 5.5.2 + packages/publisher: dependencies: '@definitelytyped/definitions-parser': @@ -462,6 +541,112 @@ packages: resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} dev: false + /@apollo/client@3.10.8(graphql@15.8.0): + resolution: {integrity: sha512-UaaFEitRrPRWV836wY2L7bd3HRCfbMie1jlYMcmazFAK23MVhz/Uq7VG1nwbotPb5xzFsw5RF4Wnp2G3dWPM3g==} + peerDependencies: + graphql: ^15.0.0 || ^16.0.0 + graphql-ws: ^5.5.5 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + subscriptions-transport-ws: ^0.9.0 || ^0.11.0 + peerDependenciesMeta: + graphql-ws: + optional: true + react: + optional: true + react-dom: + optional: true + subscriptions-transport-ws: + optional: true + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@15.8.0) + '@wry/caches': 1.0.1 + '@wry/equality': 0.5.7 + '@wry/trie': 0.5.0 + graphql: 15.8.0 + graphql-tag: 2.12.6(graphql@15.8.0) + hoist-non-react-statics: 3.3.2 + optimism: 0.18.0 + prop-types: 15.8.1 + rehackt: 0.1.0 + response-iterator: 0.2.6 + symbol-observable: 4.0.0 + ts-invariant: 0.10.3 + tslib: 2.6.3 + zen-observable-ts: 1.2.5 + transitivePeerDependencies: + - '@types/react' + dev: false + + /@apollo/federation@0.27.0(graphql@15.8.0): + resolution: {integrity: sha512-hMeRN9IPsIn+5J5SmWof0ODbvRjRj8mBNqbsm9Zjkqjbw6RTlcx90taMk7cYhcd/E+uTyLQt5cOSRVBx53cxbQ==} + engines: {node: '>=12.13.0 <17.0'} + deprecated: The @apollo/federation package is deprecated and will reach end-of-life September 22, 2023. It contains outdated utilities for both running subgraphs and composing supergraph schemas. Please migrate to the appropriate package for your use case (@apollo/subgraph or @apollo/composition). For more details, see our announcement blog post (https://www.apollographql.com/blog/announcement/backend/announcing-the-end-of-life-schedule-for-apollo-gateway-v0-x/) and documentation (https://www.apollographql.com/docs/federation/federation-2/backward-compatibility/#is-official-support-ending-for-apollogateway-v0x). + peerDependencies: + graphql: ^14.5.0 || ^15.0.0 + dependencies: + apollo-graphql: 0.9.7(graphql@15.8.0) + graphql: 15.8.0 + lodash.xorby: 4.7.0 + dev: true + + /@apollo/utils.keyvaluecache@1.0.2: + resolution: {integrity: sha512-p7PVdLPMnPzmXSQVEsy27cYEjVON+SH/Wb7COyW3rQN8+wJgT1nv9jZouYtztWW8ZgTkii5T6tC9qfoDREd4mg==} + dependencies: + '@apollo/utils.logger': 1.0.1 + lru-cache: 7.13.1 + dev: true + + /@apollo/utils.logger@1.0.1: + resolution: {integrity: sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA==} + dev: true + + /@apollographql/apollo-tools@0.5.4(graphql@15.8.0): + resolution: {integrity: sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==} + engines: {node: '>=8', npm: '>=6'} + peerDependencies: + graphql: ^14.2.1 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 15.8.0 + dev: true + + /@apollographql/graphql-language-service-interface@2.0.2(graphql@15.8.0): + resolution: {integrity: sha512-28wePK0hlIVjgmvMXMAUq8qRSjz9O+6lqFp4PzOTHtfJfSsjVe9EfjF98zTpHsTgT3HcOxmbqDZZy8jlXtOqEA==} + peerDependencies: + graphql: ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 + dependencies: + '@apollographql/graphql-language-service-parser': 2.0.2(graphql@15.8.0) + '@apollographql/graphql-language-service-types': 2.0.2(graphql@15.8.0) + '@apollographql/graphql-language-service-utils': 2.0.2(graphql@15.8.0) + graphql: 15.8.0 + dev: true + + /@apollographql/graphql-language-service-parser@2.0.2(graphql@15.8.0): + resolution: {integrity: sha512-rpTPrEJu1PMaRQxz5P8BZWsixNNhYloS0H0dwTxNBuE3qctbARvR7o8UCKLsmKgTbo+cz3T3a6IAsWlkHgMWGg==} + peerDependencies: + graphql: ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 + dependencies: + '@apollographql/graphql-language-service-types': 2.0.2(graphql@15.8.0) + graphql: 15.8.0 + dev: true + + /@apollographql/graphql-language-service-types@2.0.2(graphql@15.8.0): + resolution: {integrity: sha512-vE+Dz8pG+Xa1Z2nMl82LoO66lQ6JqBUjaXqLDvS3eMjvA3N4hf+YUDOWfPdNZ0zjhHhHXzUIIZCkax6bXfFbzQ==} + peerDependencies: + graphql: ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 + dependencies: + graphql: 15.8.0 + dev: true + + /@apollographql/graphql-language-service-utils@2.0.2(graphql@15.8.0): + resolution: {integrity: sha512-fDj5rWlTi/czvUS5t7V7I45Ai6bOO3Z7JARYj21Y2xxfbRGtJi6h8FvLX0N/EbzQgo/fiZc/HAhtfwn+OCjD7A==} + peerDependencies: + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 + dependencies: + '@apollographql/graphql-language-service-types': 2.0.2(graphql@15.8.0) + graphql: 15.8.0 + dev: true + /@arethetypeswrong/cli@0.15.1: resolution: {integrity: sha512-c4+MVbhktzLDnUFpvWvVkGRAb7zwd9b9ZW4eG62PkBsRRsTM6TKUNR23mLhz6tyYTalyqe8E6v09q4k0KuN3eQ==} engines: {node: '>=18'} @@ -488,6 +673,15 @@ packages: validate-npm-package-name: 5.0.0 dev: false + /@azure/functions@4.5.0: + resolution: {integrity: sha512-WNCiOHMQEZpezxgThD3o2McKEjUEljtQBvdw4X4oE5714eTw76h33kIj0660ZJGEnxYSx4dx18oAbg5kLMs9iQ==} + engines: {node: '>=18.0'} + dependencies: + cookie: 0.6.0 + long: 4.0.0 + undici: 5.28.4 + dev: false + /@babel/code-frame@7.22.13: resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} engines: {node: '>=6.9.0'} @@ -516,7 +710,7 @@ packages: '@babel/traverse': 7.23.3 '@babel/types': 7.23.3 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -524,6 +718,15 @@ packages: - supports-color dev: true + /@babel/generator@7.17.10: + resolution: {integrity: sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.3 + '@jridgewell/gen-mapping': 0.1.1 + jsesc: 2.5.2 + dev: true + /@babel/generator@7.23.3: resolution: {integrity: sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==} engines: {node: '>=6.9.0'} @@ -805,12 +1008,20 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.3 '@babel/types': 7.23.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true + /@babel/types@7.17.10: + resolution: {integrity: sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + /@babel/types@7.23.3: resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} engines: {node: '>=6.9.0'} @@ -1025,6 +1236,33 @@ packages: dev: false optional: true + /@definitelytyped/header-parser@0.0.178: + resolution: {integrity: sha512-16FFuaWW2Hq+a0Abyt+9gvPAT0w/ezy4eph3RbtLSqxH3T/UHDla1jgnp1DMvfNeBWaIqHxcr+Vrr7BPquw7mw==} + dependencies: + '@definitelytyped/typescript-versions': 0.0.178 + '@types/parsimmon': 1.10.9 + parsimmon: 1.18.1 + dev: false + + /@definitelytyped/typescript-versions@0.0.178: + resolution: {integrity: sha512-pPXy3z5gE4xnVgqIRApFcQ6M6kqtRK1gnqyGx/I0Yo1CH8RAsRvumCDB/KiZmQDpCHiy//E9dOIUFdquvC5t7g==} + dev: false + + /@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2(cosmiconfig@7.1.0)(typescript@5.5.2): + resolution: {integrity: sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==} + engines: {node: '>=10.0.0'} + peerDependencies: + cosmiconfig: '>=6' + dependencies: + cosmiconfig: 7.1.0 + lodash.get: 4.4.2 + make-error: 1.3.6 + ts-node: 9.1.1(typescript@5.5.2) + tslib: 2.6.3 + transitivePeerDependencies: + - typescript + dev: true + /@ericcornelissen/bash-parser@0.5.2: resolution: {integrity: sha512-4pIMTa1nEFfMXitv7oaNEWOdM+zpOZavesa5GaiWTgda6Zk32CFGxjUp/iIaN0PwgUW1yTq/fztSjbpE8SLGZQ==} engines: {node: '>=4'} @@ -1050,6 +1288,29 @@ packages: unescape-js: 1.1.4 dev: true + /@ericcornelissen/bash-parser@0.5.3: + resolution: {integrity: sha512-9Z0sGuXqf6En19qmwB0Syi1Mc8TYl756dNuuaYal9mrypKa0Jq/IX6aJfh6Rk2S3z66KBisWTqloDo7weYj4zg==} + engines: {node: '>=4'} + dependencies: + array-last: 1.3.0 + babylon: 6.18.0 + compose-function: 3.0.3 + filter-obj: 1.1.0 + has-own-property: 0.1.0 + identity-function: 1.0.0 + is-iterable: 1.1.1 + iterable-lookahead: 1.0.0 + lodash.curry: 4.1.1 + magic-string: 0.16.0 + map-obj: 2.0.0 + object-pairs: 0.1.0 + object-values: 1.0.0 + reverse-arguments: 1.0.0 + shell-quote-word: 1.0.1 + to-pascal-case: 1.0.0 + unescape-js: 1.1.4 + dev: true + /@es-joy/jsdoccomment@0.39.4: resolution: {integrity: sha512-Jvw915fjqQct445+yron7Dufix9A+m9j1fCJYlCo1FWlRvTxa3pjJelxdSTdaLWcTwRU6vbL+NYjO4YuNIS5Qg==} engines: {node: '>=16'} @@ -1068,6 +1329,213 @@ packages: jsdoc-type-pratt-parser: 4.0.0 dev: true + /@esbuild/aix-ppc64@0.21.5: + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.21.5: + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.21.5: + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.21.5: + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.21.5: + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.21.5: + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.21.5: + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.21.5: + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.21.5: + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.21.5: + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.21.5: + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.21.5: + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.21.5: + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.21.5: + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.21.5: + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.21.5: + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.21.5: + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.21.5: + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.21.5: + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.21.5: + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.21.5: + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.21.5: + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.21.5: + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1086,7 +1554,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 globals: 13.23.0 ignore: 5.2.4 @@ -1101,13 +1569,26 @@ packages: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@fastify/busboy@2.1.1: + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + dev: false + + /@graphql-typed-document-node/core@3.2.0(graphql@15.8.0): + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 15.8.0 + dev: false + /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -1152,7 +1633,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.39 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1173,14 +1654,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.39 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.19.8) + jest-config: 29.7.0(@types/node@18.19.39) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1208,7 +1689,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.39 jest-mock: 29.7.0 dev: true @@ -1235,7 +1716,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 18.19.8 + '@types/node': 18.19.39 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1268,7 +1749,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.20 - '@types/node': 18.19.8 + '@types/node': 18.19.39 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -1355,7 +1836,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 18.19.8 + '@types/node': 18.19.39 '@types/yargs': 15.0.18 chalk: 4.1.2 dev: true @@ -1367,11 +1848,19 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 18.19.8 + '@types/node': 18.19.39 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true + /@jridgewell/gen-mapping@0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} @@ -1559,10 +2048,234 @@ packages: - supports-color dev: false - /@octokit/auth-token@4.0.0: - resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} - engines: {node: '>= 18'} - dev: false + /@oclif/color@1.0.13: + resolution: {integrity: sha512-/2WZxKCNjeHlQogCs1VBtJWlPXjwWke/9gMrwsVsrUt00g2V6LUBvwgwrxhrXepjOmq4IZ5QeNbpDMEOUlx/JA==} + engines: {node: '>=12.0.0'} + dependencies: + ansi-styles: 4.3.0 + chalk: 4.1.2 + strip-ansi: 6.0.1 + supports-color: 8.1.1 + tslib: 2.6.3 + dev: true + + /@oclif/command@1.8.16(@oclif/config@1.18.3): + resolution: {integrity: sha512-rmVKYEsKzurfRU0xJz+iHelbi1LGlihIWZ7Qvmb/CBz1EkhL7nOkW4SVXmG2dA5Ce0si2gr88i6q4eBOMRNJ1w==} + engines: {node: '>=12.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + peerDependencies: + '@oclif/config': ^1 + dependencies: + '@oclif/config': 1.18.3 + '@oclif/errors': 1.3.5 + '@oclif/help': 1.0.15 + '@oclif/parser': 3.8.17 + debug: 4.3.4(supports-color@8.1.1) + semver: 7.6.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@oclif/config@1.18.16: + resolution: {integrity: sha512-VskIxVcN22qJzxRUq+raalq6Q3HUde7sokB7/xk5TqRZGEKRVbFeqdQBxDWwQeudiJEgcNiMvIFbMQ43dY37FA==} + engines: {node: '>=8.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dependencies: + '@oclif/errors': 1.3.6 + '@oclif/parser': 3.8.17 + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-wsl: 2.2.0 + tslib: 2.6.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@oclif/config@1.18.3: + resolution: {integrity: sha512-sBpko86IrTscc39EvHUhL+c++81BVTsIZ3ETu/vG+cCdi0N6vb2DoahR67A9FI2CGnxRRHjnTfa3m6LulwNATA==} + engines: {node: '>=8.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dependencies: + '@oclif/errors': 1.3.5 + '@oclif/parser': 3.8.17 + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-wsl: 2.2.0 + tslib: 2.6.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@oclif/core@1.26.2: + resolution: {integrity: sha512-6jYuZgXvHfOIc9GIaS4T3CIKGTjPmfAxuMcbCbMRKJJl4aq/4xeRlEz0E8/hz8HxvxZBGvN2GwAUHlrGWQVrVw==} + engines: {node: '>=14.0.0'} + dependencies: + '@oclif/linewrap': 1.0.0 + '@oclif/screen': 3.0.8 + ansi-escapes: 4.3.2 + ansi-styles: 4.3.0 + cardinal: 2.1.1 + chalk: 4.1.2 + clean-stack: 3.0.1 + cli-progress: 3.12.0 + debug: 4.3.4(supports-color@8.1.1) + ejs: 3.1.10 + fs-extra: 9.1.0 + get-package-type: 0.1.0 + globby: 11.1.0 + hyperlinker: 1.0.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + js-yaml: 3.14.1 + natural-orderby: 2.0.3 + object-treeify: 1.1.33 + password-prompt: 1.1.3 + semver: 7.6.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + supports-color: 8.1.1 + supports-hyperlinks: 2.3.0 + tslib: 2.6.3 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + dev: true + + /@oclif/errors@1.3.5: + resolution: {integrity: sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==} + engines: {node: '>=8.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dependencies: + clean-stack: 3.0.1 + fs-extra: 8.1.0 + indent-string: 4.0.0 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /@oclif/errors@1.3.6: + resolution: {integrity: sha512-fYaU4aDceETd89KXP+3cLyg9EHZsLD3RxF2IU9yxahhBpspWjkWi3Dy3bTgcwZ3V47BgxQaGapzJWDM33XIVDQ==} + engines: {node: '>=8.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dependencies: + clean-stack: 3.0.1 + fs-extra: 8.1.0 + indent-string: 4.0.0 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /@oclif/help@1.0.15: + resolution: {integrity: sha512-Yt8UHoetk/XqohYX76DfdrUYLsPKMc5pgkzsZVHDyBSkLiGRzujVaGZdjr32ckVZU9q3a47IjhWxhip7Dz5W/g==} + engines: {node: '>=8.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dependencies: + '@oclif/config': 1.18.16 + '@oclif/errors': 1.3.6 + chalk: 4.1.2 + indent-string: 4.0.0 + lodash: 4.17.21 + string-width: 4.2.3 + strip-ansi: 6.0.1 + widest-line: 3.1.0 + wrap-ansi: 6.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@oclif/linewrap@1.0.0: + resolution: {integrity: sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==} + dev: true + + /@oclif/parser@3.8.17: + resolution: {integrity: sha512-l04iSd0xoh/16TGVpXb81Gg3z7tlQGrEup16BrVLsZBK6SEYpYHRJZnM32BwZrHI97ZSFfuSwVlzoo6HdsaK8A==} + engines: {node: '>=8.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dependencies: + '@oclif/errors': 1.3.6 + '@oclif/linewrap': 1.0.0 + chalk: 4.1.2 + tslib: 2.6.3 + dev: true + + /@oclif/plugin-autocomplete@1.3.0: + resolution: {integrity: sha512-N2DRWKvuSXTGuaYf4buRbRfh5yNybb1cjQmPl9viY0BIqTwZgtQdzSD6ZSOkwda51RbGcQomYcc/h8T+ZFAkMQ==} + engines: {node: '>=12.0.0'} + dependencies: + '@oclif/core': 1.26.2 + chalk: 4.1.2 + debug: 4.3.4(supports-color@8.1.1) + fs-extra: 9.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@oclif/plugin-help@5.1.12: + resolution: {integrity: sha512-HvH/RubJxqCinP0vUWQLTOboT+SfjfL8h40s+PymkWaldIcXlpoRaJX50vz+SjZIs7uewZwEk8fzLqpF/BWXlg==} + engines: {node: '>=12.0.0'} + dependencies: + '@oclif/core': 1.26.2 + dev: true + + /@oclif/plugin-not-found@2.3.1: + resolution: {integrity: sha512-AeNBw+zSkRpePmpXO8xlL072VF2/R2yK3qsVs/JF26Yw1w77TWuRTdFR+hFotJtFCJ4QYqhNtKSjdryCO9AXsA==} + engines: {node: '>=12.0.0'} + dependencies: + '@oclif/color': 1.0.13 + '@oclif/core': 1.26.2 + fast-levenshtein: 3.0.0 + lodash: 4.17.21 + dev: true + + /@oclif/plugin-plugins@2.1.0: + resolution: {integrity: sha512-Bgt+QpTlX7+Q0HkVgtbUGYQlo/hyzNBAaXH5l16ou9Ji5wfi5T+niV5AzQ14R7JF8ZDOTbUOU/NRBJ2bzLCaZQ==} + engines: {node: '>=12.0.0'} + dependencies: + '@oclif/color': 1.0.13 + '@oclif/core': 1.26.2 + chalk: 4.1.2 + debug: 4.3.4(supports-color@8.1.1) + fs-extra: 9.1.0 + http-call: 5.3.0 + load-json-file: 5.3.0 + npm-run-path: 4.0.1 + semver: 7.6.2 + tslib: 2.6.3 + yarn: 1.22.22 + transitivePeerDependencies: + - supports-color + dev: true + + /@oclif/plugin-warn-if-update-available@2.0.4: + resolution: {integrity: sha512-9dprC1CWPjesg0Vf/rDSQH2tzJXhP1ow84cb2My1kj6e6ESulPKpctiCFSZ1WaCQFfq+crKhzlNoP/vRaXNUAg==} + engines: {node: '>=12.0.0'} + dependencies: + '@oclif/core': 1.26.2 + chalk: 4.1.2 + debug: 4.3.4(supports-color@8.1.1) + fs-extra: 9.1.0 + http-call: 5.3.0 + lodash: 4.17.21 + semver: 7.6.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@oclif/screen@1.0.4: + resolution: {integrity: sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==} + engines: {node: '>=8.0.0'} + deprecated: Deprecated in favor of @oclif/core + dev: true + + /@oclif/screen@3.0.8: + resolution: {integrity: sha512-yx6KAqlt3TAHBduS2fMQtJDL2ufIHnDRArrJEOoTTuizxqmjLT+psGYOHpmMl3gvQpFJ11Hs76guUUktzAF9Bg==} + engines: {node: '>=12.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dev: true + + /@octokit/auth-token@4.0.0: + resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} + engines: {node: '>= 18'} + dev: false /@octokit/core@5.0.2: resolution: {integrity: sha512-cZUy1gUvd4vttMic7C0lwPed8IYXWYp8kHIMatyhY8t8n3Cpw2ILczkV5pGMPqef7v0bLo0pOHrEHarsau2Ydg==} @@ -1585,6 +2298,13 @@ packages: universal-user-agent: 6.0.1 dev: false + /@octokit/graphql-schema@14.58.0: + resolution: {integrity: sha512-89QSUV1Dgxzq90wqkv0Nmw7jHfFCAQ4K/fjp5ezvDEHqFFzMCn25TBQlm38WB8ams+hGxInRDbITCP0n7GTGlg==} + dependencies: + graphql: 16.9.0 + graphql-tag: 2.12.6(graphql@16.9.0) + dev: true + /@octokit/graphql@7.0.2: resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==} engines: {node: '>= 18'} @@ -1662,6 +2382,15 @@ packages: '@octokit/openapi-types': 19.1.0 dev: false + /@octokit/webhooks-methods@4.1.0: + resolution: {integrity: sha512-zoQyKw8h9STNPqtm28UGOYFE7O6D4Il8VJwhAtMHFt2C4L0VQT1qGKLeefUOqHNs1mNRYSadVv7x0z8U2yyeWQ==} + engines: {node: '>= 18'} + dev: false + + /@octokit/webhooks-types@7.5.1: + resolution: {integrity: sha512-1dozxWEP8lKGbtEu7HkRbK1F/nIPuJXNfT0gd96y6d3LcHZTtRtlf8xz3nicSJfesADxJyDh+mWBOsdLkqgzYw==} + dev: true + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1812,6 +2541,24 @@ packages: resolution: {integrity: sha512-fHUud+Fo8JiGOPMmnVaOYd/crEnBM+qB8qXrSRz1AkYZAj8BtudFYcsiFweL6DcYXguq7+iXKdzx42dGCEPHiQ==} dev: true + /@samverschueren/stream-to-observable@0.3.1(rxjs@6.6.7): + resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zen-observable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zen-observable: + optional: true + dependencies: + any-observable: 0.3.0(rxjs@6.6.7) + rxjs: 6.6.7 + transitivePeerDependencies: + - zenObservable + dev: true + /@sigstore/bundle@2.1.1: resolution: {integrity: sha512-v3/iS+1nufZdKQ5iAlQKcCsoh0jffQyABvYIxKsZQFWc4ubuGjwZklFHpDgV6O6T7vvV78SW5NHI91HFKEcxKg==} engines: {node: ^16.14.0 || >=18.0.0} @@ -1887,7 +2634,7 @@ packages: hasBin: true dependencies: commander: 4.1.1 - ignore: 5.2.4 + ignore: 5.3.1 p-map: 4.0.0 dev: true @@ -1901,7 +2648,7 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} dependencies: '@tufjs/canonical-json': 2.0.0 - minimatch: 9.0.3 + minimatch: 9.0.4 dev: false /@types/babel__core@7.20.4: @@ -1936,7 +2683,7 @@ packages: /@types/charm@1.0.6: resolution: {integrity: sha512-zImdWnElQme4wOsRE+WzwpDBaKcLZVkHiVAEiOJ2gtP7cQ45uzsM3nZMgfBgwZmp+Tu0ajinDqrlLe3Xsy7w1w==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.39 dev: true /@types/eslint@8.56.2: @@ -1953,7 +2700,7 @@ packages: /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.39 dev: true /@types/istanbul-lib-coverage@2.0.6: @@ -1993,7 +2740,7 @@ packages: /@types/node-fetch@2.6.9: resolution: {integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.39 form-data: 4.0.0 dev: true @@ -2001,6 +2748,12 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true + /@types/node@18.19.39: + resolution: {integrity: sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==} + dependencies: + undici-types: 5.26.5 + dev: true + /@types/node@18.19.8: resolution: {integrity: sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg==} dependencies: @@ -2017,7 +2770,7 @@ packages: /@types/npm-registry-fetch@8.0.7: resolution: {integrity: sha512-db9iBh7kDDg4lRT4k4XZ6IiecTEgFCID4qk+VDVPbtzU855q3KZLCn08ATr4H27ntRJVhulQ7GWjl24H42x96w==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.39 '@types/node-fetch': 2.6.9 '@types/npm-package-arg': 6.1.4 '@types/npmlog': 4.1.6 @@ -2027,7 +2780,7 @@ packages: /@types/npmlog@4.1.6: resolution: {integrity: sha512-0l3z16vnlJGl2Mi/rgJFrdwfLZ4jfNYgE6ZShEpjqhHuGTqdEzNles03NpYHwUMVYZa+Tj46UxKIEpE78lQ3DQ==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.39 dev: true /@types/pacote@11.1.8: @@ -2043,10 +2796,22 @@ packages: resolution: {integrity: sha512-jz5eGdk9lBgAd4rMbXTP7MRG7AsGQ8DrXsRumDcXDLClHcpKluislylPVMP/qp90J/LlIrrPZRZIQUflHfrDnQ==} dev: true + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: true + + /@types/parsimmon@1.10.9: + resolution: {integrity: sha512-O2M2x1w+m7gWLen8i5DOy6tWRnbRcsW6Pke3j3HAsJUrPb4g0MgjksIUm2aqUtCYxy7Qjr3CzjjwQBzhiGn46A==} + dev: false + /@types/picomatch@2.3.3: resolution: {integrity: sha512-Yll76ZHikRFCyz/pffKGjrCwe/le2CDwOP5F210KQo27kpRE46U2rDnzikNlVn6/ezH3Mhn46bJMTfeVTtcYMg==} dev: true + /@types/prettyjson@0.0.33: + resolution: {integrity: sha512-hHZMkavT9OXFq8p6pTCiaREtPxMRfy9NMp+Qa4PWH0RINQjyh0crOhoqUFA/cvIZncpjBpdvxkoe7nmVbyBJXw==} + dev: true + /@types/semver@7.5.5: resolution: {integrity: sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==} dev: true @@ -2057,7 +2822,7 @@ packages: /@types/ssri@7.1.4: resolution: {integrity: sha512-K2Ys8+BVrgGFY0cVwf55rIS4fa2ZN+4Y/w2h4BnYIf8kvUdmdKT6l6VUpC3uL9HKG8I8EkD5CXIgRUXHOLHcLw==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.39 dev: true /@types/stack-utils@2.0.3: @@ -2074,13 +2839,13 @@ packages: /@types/tar-stream@3.1.3: resolution: {integrity: sha512-Zbnx4wpkWBMBSu5CytMbrT5ZpMiF55qgM+EpHzR4yIDu7mv52cej8hTkOc6K+LzpkOAbxwn/m7j3iO+/l42YkQ==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.39 dev: true /@types/tar@6.1.10: resolution: {integrity: sha512-60ZO+W0tRKJ3ggdzJKp75xKVlNogKYMqGvr2bMH/+k3T0BagfYTnbmVDFMJB1BFttz6yRgP5MDGP27eh7brrqw==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.39 minipass: 4.2.8 dev: true @@ -2104,6 +2869,14 @@ packages: '@types/yargs-parser': 21.0.3 dev: true + /@types/yauzl@2.10.3: + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + requiresBuild: true + dependencies: + '@types/node': 18.19.39 + dev: true + optional: true + /@typescript-eslint/eslint-plugin@7.14.1(@typescript-eslint/parser@7.14.1)(eslint@8.57.0)(typescript@5.5.2): resolution: {integrity: sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -2144,7 +2917,7 @@ packages: '@typescript-eslint/types': 7.14.1 '@typescript-eslint/typescript-estree': 7.14.1(typescript@5.5.2) '@typescript-eslint/visitor-keys': 7.14.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 typescript: 5.5.2 transitivePeerDependencies: @@ -2169,7 +2942,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 7.14.1(typescript@5.5.2) '@typescript-eslint/utils': 7.14.1(eslint@8.57.0)(typescript@5.5.2) - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.5.2) typescript: 5.5.2 @@ -2191,7 +2964,7 @@ packages: dependencies: '@typescript-eslint/types': 7.14.1 '@typescript-eslint/visitor-keys': 7.14.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.4 @@ -2226,6 +2999,47 @@ packages: /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + /@wry/caches@1.0.1: + resolution: {integrity: sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.3 + dev: false + + /@wry/context@0.7.4: + resolution: {integrity: sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.3 + dev: false + + /@wry/equality@0.1.11: + resolution: {integrity: sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==} + dependencies: + tslib: 1.14.1 + dev: true + + /@wry/equality@0.5.7: + resolution: {integrity: sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.3 + dev: false + + /@wry/trie@0.4.3: + resolution: {integrity: sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.3 + dev: false + + /@wry/trie@0.5.0: + resolution: {integrity: sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.3 + dev: false + /@zkochan/retry@0.2.0: resolution: {integrity: sha512-WhB+2B/ZPlW2Xy/kMJBrMbqecWXcbDDgn0K0wKBAgO2OlBTz1iLJrRWduo+DGGn0Akvz1Lu4Xvls7dJojximWw==} engines: {node: '>=10'} @@ -2255,11 +3069,20 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: false @@ -2279,11 +3102,25 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + /ajv@8.16.0: + resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} dev: true + /ansi-escapes@3.2.0: + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} + engines: {node: '>=4'} + dev: true + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -2302,8 +3139,11 @@ packages: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} requiresBuild: true - dev: false - optional: true + + /ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + dev: true /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -2313,6 +3153,11 @@ packages: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} + /ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + dev: true + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -2337,7 +3182,21 @@ packages: /ansicolors@0.3.2: resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} - dev: false + + /any-observable@0.3.0(rxjs@6.6.7): + resolution: {integrity: sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zenObservable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zenObservable: + optional: true + dependencies: + rxjs: 6.6.7 + dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -2347,6 +3206,283 @@ packages: picomatch: 2.3.1 dev: true + /apollo-codegen-core@0.40.9(typescript@5.5.2): + resolution: {integrity: sha512-AiynL9PWGZ9zXq9gbJENGixrbmJTORjg8T15gXlPbFcXJzVlQ8+gGuBcHMjBBFBtqb1ZhXN2IZ6udzrRHCB+ag==} + engines: {node: '>=8', npm: '>=6'} + dependencies: + '@babel/generator': 7.17.10 + '@babel/parser': 7.23.3 + '@babel/types': 7.17.10 + apollo-env: 0.10.2 + apollo-language-server: 1.26.9(typescript@5.5.2) + ast-types: 0.14.2 + common-tags: 1.8.2 + recast: 0.21.5 + transitivePeerDependencies: + - encoding + - typescript + dev: true + + /apollo-codegen-flow@0.38.9(typescript@5.5.2): + resolution: {integrity: sha512-w02FRiDCfFH7FxRqKZlnmH6q4URT3hlrGvizaRKirEyFQWH7OSEE4osYhSCU+dcRru+NuWtPVrMh3LTB7NinSQ==} + engines: {node: '>=8', npm: '>=6'} + dependencies: + '@babel/generator': 7.17.10 + '@babel/types': 7.17.10 + apollo-codegen-core: 0.40.9(typescript@5.5.2) + change-case: 4.1.2 + common-tags: 1.8.2 + inflected: 2.1.0 + transitivePeerDependencies: + - encoding + - typescript + dev: true + + /apollo-codegen-scala@0.39.9(typescript@5.5.2): + resolution: {integrity: sha512-Dtpg8m3MgJ5RIlkPfGDOclsZro1scR32AQY517uA3QdUHa/R+XxU9CQ2bnPnI7BtzuUsrTiJnBXQSulfxrdDOQ==} + engines: {node: '>=8', npm: '>=6'} + dependencies: + apollo-codegen-core: 0.40.9(typescript@5.5.2) + change-case: 4.1.2 + common-tags: 1.8.2 + inflected: 2.1.0 + transitivePeerDependencies: + - encoding + - typescript + dev: true + + /apollo-codegen-swift@0.40.9(typescript@5.5.2): + resolution: {integrity: sha512-Ghk0ef4//QOUdJ80kheD7Q20o9UDrXQVWXz8lWUM88w1cba5LBLXz+CeeQ+VyUHrnFO9XqkimqyPZSDpDmHUSA==} + engines: {node: '>=8', npm: '>=6'} + dependencies: + apollo-codegen-core: 0.40.9(typescript@5.5.2) + change-case: 4.1.2 + common-tags: 1.8.2 + inflected: 2.1.0 + transitivePeerDependencies: + - encoding + - typescript + dev: true + + /apollo-codegen-typescript@0.40.9(typescript@5.5.2): + resolution: {integrity: sha512-koOS3ZbU8UNoZwl87WBxpo+3t0e/iIIkbgYg9zOVKnHCYHi2/CbSE7rq3uAM99QmvcE62wrIoFjpBQADJq78Dw==} + engines: {node: '>=8', npm: '>=6'} + dependencies: + '@babel/generator': 7.17.10 + '@babel/types': 7.17.10 + apollo-codegen-core: 0.40.9(typescript@5.5.2) + change-case: 4.1.2 + common-tags: 1.8.2 + inflected: 2.1.0 + transitivePeerDependencies: + - encoding + - typescript + dev: true + + /apollo-datasource@3.3.2: + resolution: {integrity: sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg==} + engines: {node: '>=12.0'} + deprecated: The `apollo-datasource` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + dependencies: + '@apollo/utils.keyvaluecache': 1.0.2 + apollo-server-env: 4.2.1 + transitivePeerDependencies: + - encoding + dev: true + + /apollo-env@0.10.2: + resolution: {integrity: sha512-DlB3ZE0j4eFWAVi14pONNPR6h54FlJwerQeuYAxXm0kPA4sGaScsGDRLsIVMP81JxjjDDmWukw5jp9H+zy39hA==} + engines: {node: '>=8'} + dependencies: + '@types/node-fetch': 2.6.9 + core-js: 3.37.1 + node-fetch: 2.7.0 + sha.js: 2.4.11 + transitivePeerDependencies: + - encoding + dev: true + + /apollo-graphql@0.9.7(graphql@15.8.0): + resolution: {integrity: sha512-bezL9ItUWUGHTm1bI/XzIgiiZbhXpsC7uxk4UxFPmcVJwJsDc3ayZ99oXxAaK+3Rbg/IoqrHckA6CwmkCsbaSA==} + engines: {node: '>=6'} + peerDependencies: + graphql: ^14.2.1 || ^15.0.0 + dependencies: + core-js-pure: 3.37.1 + graphql: 15.8.0 + lodash.sortby: 4.7.0 + sha.js: 2.4.11 + dev: true + + /apollo-language-server@1.26.9(typescript@5.5.2): + resolution: {integrity: sha512-+moe6KfDPPHUaC5Te4x9O5OqBPTZmkNRfjM4kb3XRb3ve8tUeKdye5lIANU+XCv7aZ6G68PHozrO5/Tj1X8Qcw==} + engines: {node: '>=8', npm: '>=6'} + dependencies: + '@apollo/federation': 0.27.0(graphql@15.8.0) + '@apollographql/apollo-tools': 0.5.4(graphql@15.8.0) + '@apollographql/graphql-language-service-interface': 2.0.2(graphql@15.8.0) + '@endemolshinegroup/cosmiconfig-typescript-loader': 3.0.2(cosmiconfig@7.1.0)(typescript@5.5.2) + apollo-datasource: 3.3.2 + apollo-env: 0.10.2 + apollo-graphql: 0.9.7(graphql@15.8.0) + apollo-link: 1.2.14(graphql@15.8.0) + apollo-link-context: 1.0.20(graphql@15.8.0) + apollo-link-error: 1.1.13(graphql@15.8.0) + apollo-link-http: 1.5.17(graphql@15.8.0) + apollo-server-errors: 2.5.0(graphql@15.8.0) + await-to-js: 3.0.0 + core-js: 3.37.1 + cosmiconfig: 7.1.0 + dotenv: 16.4.5 + glob: 8.0.1 + graphql: 15.8.0 + graphql-tag: 2.12.6(graphql@15.8.0) + lodash.debounce: 4.0.8 + lodash.merge: 4.6.2 + minimatch: 5.1.6 + vscode-languageserver: 7.0.0 + vscode-languageserver-textdocument: 1.0.11 + vscode-uri: 1.0.6 + transitivePeerDependencies: + - encoding + - typescript + dev: true + + /apollo-link-context@1.0.20(graphql@15.8.0): + resolution: {integrity: sha512-MLLPYvhzNb8AglNsk2NcL9AvhO/Vc9hn2ZZuegbhRHGet3oGr0YH9s30NS9+ieoM0sGT11p7oZ6oAILM/kiRBA==} + dependencies: + apollo-link: 1.2.14(graphql@15.8.0) + tslib: 1.14.1 + transitivePeerDependencies: + - graphql + dev: true + + /apollo-link-error@1.1.13(graphql@15.8.0): + resolution: {integrity: sha512-jAZOOahJU6bwSqb2ZyskEK1XdgUY9nkmeclCrW7Gddh1uasHVqmoYc4CKdb0/H0Y1J9lvaXKle2Wsw/Zx1AyUg==} + dependencies: + apollo-link: 1.2.14(graphql@15.8.0) + apollo-link-http-common: 0.2.16(graphql@15.8.0) + tslib: 1.14.1 + transitivePeerDependencies: + - graphql + dev: true + + /apollo-link-http-common@0.2.16(graphql@15.8.0): + resolution: {integrity: sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg==} + peerDependencies: + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + dependencies: + apollo-link: 1.2.14(graphql@15.8.0) + graphql: 15.8.0 + ts-invariant: 0.4.4 + tslib: 1.14.1 + dev: true + + /apollo-link-http@1.5.17(graphql@15.8.0): + resolution: {integrity: sha512-uWcqAotbwDEU/9+Dm9e1/clO7hTB2kQ/94JYcGouBVLjoKmTeJTUPQKcJGpPwUjZcSqgYicbFqQSoJIW0yrFvg==} + peerDependencies: + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + dependencies: + apollo-link: 1.2.14(graphql@15.8.0) + apollo-link-http-common: 0.2.16(graphql@15.8.0) + graphql: 15.8.0 + tslib: 1.14.1 + dev: true + + /apollo-link@1.2.14(graphql@15.8.0): + resolution: {integrity: sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==} + peerDependencies: + graphql: ^0.11.3 || ^0.12.3 || ^0.13.0 || ^14.0.0 || ^15.0.0 + dependencies: + apollo-utilities: 1.3.4(graphql@15.8.0) + graphql: 15.8.0 + ts-invariant: 0.4.4 + tslib: 1.14.1 + zen-observable-ts: 0.8.21 + dev: true + + /apollo-server-env@4.2.1: + resolution: {integrity: sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g==} + engines: {node: '>=12.0'} + deprecated: The `apollo-server-env` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/utils.fetcher` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true + + /apollo-server-errors@2.5.0(graphql@15.8.0): + resolution: {integrity: sha512-lO5oTjgiC3vlVg2RKr3RiXIIQ5pGXBFxYGGUkKDhTud3jMIhs+gel8L8zsEjKaKxkjHhCQAA/bcEfYiKkGQIvA==} + engines: {node: '>=6'} + deprecated: The `apollo-server-errors` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + peerDependencies: + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + dependencies: + graphql: 15.8.0 + dev: true + + /apollo-utilities@1.3.4(graphql@15.8.0): + resolution: {integrity: sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==} + peerDependencies: + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + dependencies: + '@wry/equality': 0.1.11 + fast-json-stable-stringify: 2.1.0 + graphql: 15.8.0 + ts-invariant: 0.4.4 + tslib: 1.14.1 + dev: true + + /apollo@2.34.0(typescript@5.5.2): + resolution: {integrity: sha512-gDH+WBN+b6TA/tIrIuAyO6Df4tsHwAA/t3NZqUitOM0gKo/nXNOUZzskAFTjErL6fgp5+kYIP3rZ+bIleqXAKg==} + engines: {node: '>=8', npm: '>=6'} + hasBin: true + dependencies: + '@apollographql/apollo-tools': 0.5.4(graphql@15.8.0) + '@oclif/command': 1.8.16(@oclif/config@1.18.3) + '@oclif/config': 1.18.3 + '@oclif/errors': 1.3.5 + '@oclif/plugin-autocomplete': 1.3.0 + '@oclif/plugin-help': 5.1.12 + '@oclif/plugin-not-found': 2.3.1 + '@oclif/plugin-plugins': 2.1.0 + '@oclif/plugin-warn-if-update-available': 2.0.4 + apollo-codegen-core: 0.40.9(typescript@5.5.2) + apollo-codegen-flow: 0.38.9(typescript@5.5.2) + apollo-codegen-scala: 0.39.9(typescript@5.5.2) + apollo-codegen-swift: 0.40.9(typescript@5.5.2) + apollo-codegen-typescript: 0.40.9(typescript@5.5.2) + apollo-env: 0.10.2 + apollo-graphql: 0.9.7(graphql@15.8.0) + apollo-language-server: 1.26.9(typescript@5.5.2) + chalk: 4.1.2 + cli-ux: 6.0.9 + env-ci: 7.1.0 + gaze: 1.1.3 + git-parse: 2.1.1 + git-rev-sync: 3.0.2 + git-url-parse: 11.6.0 + glob: 8.0.1 + global-agent: 3.0.0 + graphql: 15.8.0 + graphql-tag: 2.12.6(graphql@15.8.0) + listr: 0.14.3 + lodash.identity: 3.0.0 + lodash.pickby: 4.6.0 + mkdirp: 1.0.4 + moment: 2.29.3 + strip-ansi: 6.0.1 + table: 6.8.0 + tty: 1.0.1 + vscode-uri: 1.0.6 + transitivePeerDependencies: + - encoding + - supports-color + - typescript + - zen-observable + - zenObservable + dev: true + /aproba@1.2.0: resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} requiresBuild: true @@ -2366,6 +3502,10 @@ packages: dev: false optional: true + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -2385,6 +3525,14 @@ packages: call-bind: 1.0.5 is-array-buffer: 3.0.2 + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: true + /array-includes@3.1.7: resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} @@ -2434,6 +3582,19 @@ packages: es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 + /array.prototype.reduce@1.0.7: + resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-array-method-boxes-properly: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + is-string: 1.0.7 + dev: true + /arraybuffer.prototype.slice@1.0.2: resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} engines: {node: '>= 0.4'} @@ -2446,6 +3607,20 @@ packages: is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true + /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} @@ -2462,13 +3637,53 @@ packages: engines: {node: '>=0.8'} dev: false + /ast-types@0.14.2: + resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} + engines: {node: '>=4'} + dependencies: + tslib: 2.6.3 + dev: true + + /ast-types@0.15.2: + resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} + engines: {node: '>=4'} + dependencies: + tslib: 2.6.3 + dev: true + + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + dev: true + /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + /at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: true + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: true + + /await-to-js@3.0.0: + resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==} + engines: {node: '>=6.0.0'} + dev: true + /aws-sign2@0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} dev: false @@ -2477,6 +3692,22 @@ packages: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} dev: false + /azure-functions-core-tools@4.0.5907: + resolution: {integrity: sha512-QeyBf/9Z3sziPXIU7fGcLgCFhXLo+uO3ILLvbb0Zse46VC5SWWfscbAb023xoUXhWXlf7KXjWwvKgyJpAeG20A==} + engines: {node: '>=6.9.1'} + os: [win32, darwin, linux] + hasBin: true + requiresBuild: true + dependencies: + chalk: 3.0.0 + extract-zip: 2.0.1 + https-proxy-agent: 5.0.0 + progress: 2.0.3 + rimraf: 4.4.1 + transitivePeerDependencies: + - supports-color + dev: true + /b4a@1.6.4: resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} dev: false @@ -2589,6 +3820,10 @@ packages: individual: 3.0.0 dev: true + /boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + dev: true + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -2636,6 +3871,10 @@ packages: node-int64: 0.4.0 dev: true + /buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: true + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -2653,6 +3892,11 @@ packages: dependencies: semver: 7.6.2 + /byline@5.0.0: + resolution: {integrity: sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==} + engines: {node: '>=0.10.0'} + dev: true + /cacache@18.0.0: resolution: {integrity: sha512-I7mVOPl3PUCeRub1U8YoGz2Lqv9WOBpobZ8RyWFXmReuILz+3OAyTa5oH3QPdtKZD7N0Yk00aLfzn0qvp8dZ1w==} engines: {node: ^16.14.0 || >=18.0.0} @@ -2683,10 +3927,28 @@ packages: get-intrinsic: 1.2.2 set-function-length: 1.1.1 + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + dev: true + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.3 + dev: true + /camelcase-keys@6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} @@ -2710,18 +3972,36 @@ packages: resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==} dev: true + /capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + upper-case-first: 2.0.2 + dev: true + /cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} hasBin: true dependencies: ansicolors: 0.3.2 redeyed: 2.1.1 - dev: false /caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: false + /chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + dev: true + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -2731,6 +4011,14 @@ packages: supports-color: 5.5.0 dev: true + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -2743,6 +4031,23 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: false + /change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + dependencies: + camel-case: 4.1.2 + capital-case: 1.0.4 + constant-case: 3.0.4 + dot-case: 3.0.4 + header-case: 2.0.4 + no-case: 3.0.4 + param-case: 3.0.4 + pascal-case: 3.1.2 + path-case: 3.0.4 + sentence-case: 3.0.4 + snake-case: 3.0.4 + tslib: 2.6.3 + dev: true + /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -2775,6 +4080,27 @@ packages: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} + /clean-stack@3.0.1: + resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 4.0.0 + dev: true + + /cli-cursor@2.1.0: + resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} + engines: {node: '>=4'} + dependencies: + restore-cursor: 2.0.0 + dev: true + + /cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + dependencies: + string-width: 4.2.3 + dev: true + /cli-table3@0.6.3: resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} engines: {node: 10.* || >= 12.*} @@ -2784,6 +4110,46 @@ packages: '@colors/colors': 1.5.0 dev: false + /cli-truncate@0.2.1: + resolution: {integrity: sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==} + engines: {node: '>=0.10.0'} + dependencies: + slice-ansi: 0.0.4 + string-width: 1.0.2 + dev: true + + /cli-ux@6.0.9: + resolution: {integrity: sha512-0Ku29QLf+P6SeBNWM7zyoJ49eKKOjxZBZ4OH2aFeRtC0sNXU3ftdJxQPKJ1SJ+axX34I1NsfTFahpXdnxklZgA==} + engines: {node: '>=12.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dependencies: + '@oclif/core': 1.26.2 + '@oclif/linewrap': 1.0.0 + '@oclif/screen': 1.0.4 + ansi-escapes: 4.3.2 + ansi-styles: 4.3.0 + cardinal: 2.1.1 + chalk: 4.1.2 + clean-stack: 3.0.1 + cli-progress: 3.12.0 + extract-stack: 2.0.0 + fs-extra: 8.1.0 + hyperlinker: 1.0.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + js-yaml: 3.14.1 + lodash: 4.17.21 + natural-orderby: 2.0.3 + object-treeify: 1.1.33 + password-prompt: 1.1.3 + semver: 7.6.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + supports-color: 8.1.1 + supports-hyperlinks: 2.3.0 + tslib: 2.6.3 + dev: true + /cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: @@ -2815,8 +4181,6 @@ packages: resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} engines: {node: '>=0.10.0'} requiresBuild: true - dev: false - optional: true /collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} @@ -2841,6 +4205,11 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + dev: false + /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -2867,6 +4236,11 @@ packages: engines: {node: '>= 12.0.0'} dev: true + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: true + /compose-function@3.0.3: resolution: {integrity: sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==} dependencies: @@ -2886,14 +4260,42 @@ packages: typedarray: 0.0.6 dev: false - /console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + /console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + requiresBuild: true + dev: false + optional: true + + /constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + upper-case: 2.0.2 + dev: true + + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: true + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + + /cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + dev: false + + /core-js-pure@3.37.1: + resolution: {integrity: sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==} requiresBuild: true - dev: false - optional: true + dev: true - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + /core-js@3.37.1: + resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==} + requiresBuild: true dev: true /core-util-is@1.0.2: @@ -2906,6 +4308,36 @@ packages: dev: false optional: true + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /create-jest@29.7.0(@types/node@18.19.39): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@18.19.39) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /create-jest@29.7.0(@types/node@18.19.8): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2925,6 +4357,10 @@ packages: - ts-node dev: true + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + /cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: @@ -2980,6 +4416,41 @@ packages: engines: {node: '>= 6'} dev: true + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /date-fns@1.30.1: + resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==} + dev: true + + /dayjs@1.11.11: + resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} + dev: false + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -2990,7 +4461,7 @@ packages: dependencies: ms: 2.1.3 - /debug@4.3.4: + /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -3000,6 +4471,7 @@ packages: optional: true dependencies: ms: 2.1.2 + supports-color: 8.1.1 /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -3014,6 +4486,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: true + /dedent@1.5.1: resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} peerDependencies: @@ -3050,6 +4527,15 @@ packages: gopd: 1.0.1 has-property-descriptors: 1.0.1 + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: true + /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -3082,6 +4568,10 @@ packages: engines: {node: '>=8'} dev: true + /detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: true + /diff-sequences@26.6.2: resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==} engines: {node: '>= 10.14.2'} @@ -3092,6 +4582,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -3110,6 +4605,18 @@ packages: dependencies: esutils: 2.0.3 + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + dev: true + + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + dev: true + /dts-dom@3.7.0: resolution: {integrity: sha512-WnmiiHfhtcYS+DyGd2Rq3J6QA3ATVBdKtlrhutc/VzQVFoBgNDm+gnYc5gZizsXAI0xQ2frZntT5IJFeB2qQIg==} dev: false @@ -3139,10 +4646,23 @@ packages: safe-buffer: 5.2.1 dev: true + /ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.9.1 + dev: true + /electron-to-chromium@1.4.581: resolution: {integrity: sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw==} dev: true + /elegant-spinner@1.0.1: + resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==} + engines: {node: '>=0.10.0'} + dev: true + /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} @@ -3173,6 +4693,12 @@ packages: dev: false optional: true + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -3181,6 +4707,15 @@ packages: strip-ansi: 6.0.1 dev: true + /env-ci@7.1.0: + resolution: {integrity: sha512-zyRGZQkjp5lgYYRUJS7hbEAhEtfslzwN5ScSnLXhaF2OEtiVC8LW+5mbaIqlFpIE95iFhukrKaLm0Rdt/w2lNg==} + engines: {node: '>=12.20'} + dependencies: + execa: 5.1.1 + fromentries: 1.3.2 + java-properties: 1.0.2 + dev: true + /env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -3239,6 +4774,81 @@ packages: unbox-primitive: 1.0.2 which-typed-array: 1.1.13 + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + dev: true + + /es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true + /es-set-tostringtag@2.0.2: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} @@ -3247,6 +4857,15 @@ packages: has-tostringtag: 1.0.0 hasown: 2.0.0 + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true + /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: @@ -3260,6 +4879,41 @@ packages: is-date-object: 1.0.5 is-symbol: 1.0.4 + /es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + dev: true + + /esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -3358,7 +5012,7 @@ packages: '@es-joy/jsdoccomment': 0.39.4 are-docs-informative: 0.0.2 comment-parser: 1.3.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint: 8.57.0 esquery: 1.5.0 @@ -3377,7 +5031,7 @@ packages: '@es-joy/jsdoccomment': 0.41.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint: 8.57.0 esquery: 1.5.0 @@ -3415,7 +5069,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -3530,6 +5184,25 @@ packages: tmp: 0.0.33 dev: true + /extract-stack@2.0.0: + resolution: {integrity: sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==} + engines: {node: '>=8'} + dev: true + + /extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + dependencies: + debug: 4.3.4(supports-color@8.1.1) + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + dev: true + /extsprintf@1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} @@ -3552,16 +5225,31 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 + /fast-json-patch@3.1.1: + resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} + dev: false + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + /fast-levenshtein@3.0.0: + resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} + dependencies: + fastest-levenshtein: 1.0.16 + dev: true + /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true + /fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + dev: true + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -3573,6 +5261,12 @@ packages: bser: 2.1.1 dev: true + /fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + dependencies: + pend: 1.2.0 + dev: true + /fetch-blob@2.1.2: resolution: {integrity: sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==} engines: {node: ^10.17.0 || >=12.3.0} @@ -3587,12 +5281,33 @@ packages: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} dev: false + /figures@1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 + dev: true + + /figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.2.0 + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + /filename-reserved-regex@2.0.0: resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} engines: {node: '>=4'} @@ -3689,6 +5404,10 @@ packages: mime-types: 2.1.35 dev: true + /fromentries@1.3.2: + resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + dev: true + /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -3716,6 +5435,16 @@ packages: universalify: 0.1.2 dev: true + /fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + /fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -3771,6 +5500,13 @@ packages: dev: false optional: true + /gaze@1.1.3: + resolution: {integrity: sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==} + engines: {node: '>= 4.0.0'} + dependencies: + globule: 1.3.4 + dev: true + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -3788,11 +5524,29 @@ packages: has-symbols: 1.0.3 hasown: 2.0.0 + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: true + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} dev: true + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: true + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -3805,6 +5559,15 @@ packages: call-bind: 1.0.5 get-intrinsic: 1.2.2 + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true + /getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} dependencies: @@ -3816,6 +5579,35 @@ packages: engines: {node: '>=4'} dev: false + /git-parse@2.1.1: + resolution: {integrity: sha512-jt4pYVdXFFjZMsFohMBYhPsW4j/XBDas7VctxBbRvKCyvQj5pk/+fe2/9Y1hykLSk3lHeVZyScDaW5cZBXDTyw==} + engines: {node: '>=12'} + dependencies: + byline: 5.0.0 + util.promisify: 1.1.1 + dev: true + + /git-rev-sync@3.0.2: + resolution: {integrity: sha512-Nd5RiYpyncjLv0j6IONy0lGzAqdRXUaBctuGBbrEA2m6Bn4iDrN/9MeQTXuiquw8AEKL9D2BW0nw5m/lQvxqnQ==} + dependencies: + escape-string-regexp: 1.0.5 + graceful-fs: 4.1.15 + shelljs: 0.8.5 + dev: true + + /git-up@4.0.5: + resolution: {integrity: sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA==} + dependencies: + is-ssh: 1.4.0 + parse-url: 6.0.5 + dev: true + + /git-url-parse@11.6.0: + resolution: {integrity: sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g==} + dependencies: + git-up: 4.0.5 + dev: true + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3839,8 +5631,21 @@ packages: minipass: 7.0.4 path-scurry: 1.10.1 + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -3849,6 +5654,41 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 + /glob@8.0.1: + resolution: {integrity: sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.10.1 + dev: true + + /global-agent@3.0.0: + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} + engines: {node: '>=10.0'} + dependencies: + boolean: 3.2.0 + es6-error: 4.1.1 + matcher: 3.0.0 + roarr: 2.15.4 + semver: 7.6.2 + serialize-error: 7.0.1 + dev: true + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -3877,11 +5717,24 @@ packages: merge2: 1.4.1 slash: 3.0.0 + /globule@1.3.4: + resolution: {integrity: sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==} + engines: {node: '>= 0.10'} + dependencies: + glob: 7.1.7 + lodash: 4.17.21 + minimatch: 3.0.8 + dev: true + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.2 + /graceful-fs@4.1.15: + resolution: {integrity: sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==} + dev: true + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -3889,8 +5742,36 @@ packages: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + /graphql-tag@2.12.6(graphql@15.8.0): + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 15.8.0 + tslib: 2.6.3 + + /graphql-tag@2.12.6(graphql@16.9.0): + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 16.9.0 + tslib: 2.6.3 + dev: true + + /graphql@15.8.0: + resolution: {integrity: sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==} + engines: {node: '>= 10.x'} + + /graphql@16.9.0: + resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + dev: true /har-schema@2.0.0: resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} @@ -3911,6 +5792,13 @@ packages: engines: {node: '>=6'} dev: true + /has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -3932,10 +5820,21 @@ packages: dependencies: get-intrinsic: 1.2.2 + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + dev: true + /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} @@ -3946,6 +5845,13 @@ packages: dependencies: has-symbols: 1.0.3 + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + /has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} requiresBuild: true @@ -3958,6 +5864,26 @@ packages: dependencies: function-bind: 1.1.2 + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + dependencies: + capital-case: 1.0.4 + tslib: 2.6.3 + dev: true + + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -3982,12 +5908,26 @@ packages: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: false + /http-call@5.3.0: + resolution: {integrity: sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==} + engines: {node: '>=8.0.0'} + dependencies: + content-type: 1.0.5 + debug: 4.3.4(supports-color@8.1.1) + is-retry-allowed: 1.2.0 + is-stream: 2.0.1 + parse-json: 4.0.0 + tunnel-agent: 0.6.0 + transitivePeerDependencies: + - supports-color + dev: true + /http-proxy-agent@7.0.0: resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: false @@ -4001,12 +5941,22 @@ packages: sshpk: 1.18.0 dev: false + /https-proxy-agent@5.0.0: + resolution: {integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + /https-proxy-agent@7.0.2: resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: false @@ -4020,6 +5970,11 @@ packages: engines: {node: '>=10.17.0'} dev: true + /hyperlinker@1.0.0: + resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} + engines: {node: '>=4'} + dev: true + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -4075,6 +6030,11 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + /indent-string@3.2.0: + resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==} + engines: {node: '>=4'} + dev: true + /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -4083,8 +6043,13 @@ packages: resolution: {integrity: sha512-rUY5vtT748NMRbEMrTNiFfy29BgGZwGXUi2NFUVMWQrogSLzlJvQV9eeMWi+g1aVaQ53tpyLAQtd5x/JH0Nh1g==} dev: true + /inflected@2.1.0: + resolution: {integrity: sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w==} + dev: true + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -4104,6 +6069,20 @@ packages: hasown: 2.0.0 side-channel: 1.0.4 + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.4 + dev: true + + /interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: true + /ip@2.0.0: resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} dev: false @@ -4115,6 +6094,14 @@ packages: get-intrinsic: 1.2.2 is-typed-array: 1.1.12 + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true @@ -4147,12 +6134,25 @@ packages: dependencies: hasown: 2.0.0 + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + dev: true + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -4163,8 +6163,11 @@ packages: requiresBuild: true dependencies: number-is-nan: 1.0.1 - dev: false - optional: true + + /is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + dev: true /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -4194,6 +6197,11 @@ packages: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: true + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} @@ -4209,6 +6217,13 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + /is-observable@1.1.0: + resolution: {integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==} + engines: {node: '>=4'} + dependencies: + symbol-observable: 1.2.0 + dev: true + /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -4218,6 +6233,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + dev: true + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -4225,11 +6244,34 @@ packages: call-bind: 1.0.5 has-tostringtag: 1.0.0 + /is-retry-allowed@1.2.0: + resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} + engines: {node: '>=0.10.0'} + dev: true + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.5 + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-ssh@1.4.0: + resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} + dependencies: + protocols: 2.0.1 + dev: true + + /is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + dev: true + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -4260,6 +6302,13 @@ packages: dependencies: which-typed-array: 1.1.13 + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.15 + dev: true + /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: false @@ -4274,6 +6323,13 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} requiresBuild: true @@ -4338,7 +6394,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -4366,6 +6422,22 @@ packages: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + /jake@10.9.1: + resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + + /java-properties@1.0.2: + resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} + engines: {node: '>= 0.6.0'} + dev: true + /jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4383,7 +6455,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.39 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -4404,6 +6476,34 @@ packages: - supports-color dev: true + /jest-cli@29.7.0(@types/node@18.19.39): + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@18.19.39) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@18.19.39) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /jest-cli@29.7.0(@types/node@18.19.8): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4432,6 +6532,46 @@ packages: - ts-node dev: true + /jest-config@29.7.0(@types/node@18.19.39): + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.23.3 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + babel-jest: 29.7.0(@babel/core@7.23.3) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + /jest-config@29.7.0(@types/node@18.19.8): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4517,7 +6657,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.39 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -4548,7 +6688,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 18.19.8 + '@types/node': 18.19.39 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -4599,7 +6739,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.39 jest-util: 29.7.0 dev: true @@ -4654,7 +6794,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.39 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -4685,7 +6825,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.39 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -4737,7 +6877,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.39 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -4762,7 +6902,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.39 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -4774,12 +6914,33 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.39 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true + /jest@29.7.0(@types/node@18.19.39): + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@18.19.39) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /jest@29.7.0(@types/node@18.19.8): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4806,13 +6967,17 @@ packages: hasBin: true dev: true + /jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + dev: true + /jquery@3.7.1: resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} dev: true /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} @@ -4845,6 +7010,10 @@ packages: /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + /json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: true + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true @@ -4856,6 +7025,10 @@ packages: /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + /json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} dev: false @@ -4964,6 +7137,36 @@ packages: - domexception dev: true + /knip@5.23.3(@types/node@18.19.39)(typescript@5.5.2): + resolution: {integrity: sha512-i0vFlpe3D9AZmp3Hlq3ZncjJQB2x21LeVrIV+9rnBavaKpTLhV/sLmE4iqTjEWedLtpfJsax68S68aqZzcXpsQ==} + engines: {node: '>=18.6.0'} + hasBin: true + peerDependencies: + '@types/node': '>=18' + typescript: '>=5.0.4' + dependencies: + '@ericcornelissen/bash-parser': 0.5.3 + '@nodelib/fs.walk': 2.0.0 + '@snyk/github-codeowners': 1.1.0 + '@types/node': 18.19.39 + easy-table: 1.2.0 + fast-glob: 3.3.2 + jiti: 1.21.6 + js-yaml: 4.1.0 + minimist: 1.2.8 + picocolors: 1.0.0 + picomatch: 4.0.2 + pretty-ms: 9.0.0 + resolve: 1.22.8 + smol-toml: 1.2.2 + strip-json-comments: 5.0.1 + summary: 2.1.0 + tsconfig-paths: 4.2.0 + typescript: 5.5.2 + zod: 3.22.4 + zod-validation-error: 3.3.0(zod@3.22.4) + dev: true + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -4976,8 +7179,69 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /listr-silent-renderer@1.1.1: + resolution: {integrity: sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==} + engines: {node: '>=4'} + dev: true + + /listr-update-renderer@0.5.0(listr@0.14.3): + resolution: {integrity: sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==} + engines: {node: '>=6'} + peerDependencies: + listr: ^0.14.2 + dependencies: + chalk: 1.1.3 + cli-truncate: 0.2.1 + elegant-spinner: 1.0.1 + figures: 1.7.0 + indent-string: 3.2.0 + listr: 0.14.3 + log-symbols: 1.0.2 + log-update: 2.3.0 + strip-ansi: 3.0.1 + dev: true + + /listr-verbose-renderer@0.5.0: + resolution: {integrity: sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==} + engines: {node: '>=4'} + dependencies: + chalk: 2.4.2 + cli-cursor: 2.1.0 + date-fns: 1.30.1 + figures: 2.0.0 + dev: true + + /listr@0.14.3: + resolution: {integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==} + engines: {node: '>=6'} + dependencies: + '@samverschueren/stream-to-observable': 0.3.1(rxjs@6.6.7) + is-observable: 1.1.0 + is-promise: 2.2.2 + is-stream: 1.1.0 + listr-silent-renderer: 1.1.1 + listr-update-renderer: 0.5.0(listr@0.14.3) + listr-verbose-renderer: 0.5.0 + p-map: 2.1.0 + rxjs: 6.6.7 + transitivePeerDependencies: + - zen-observable + - zenObservable + dev: true + + /load-json-file@5.3.0: + resolution: {integrity: sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 4.0.1 + strip-bom: 3.0.0 + type-fest: 0.3.1 dev: true /load-json-file@6.2.0: @@ -5017,6 +7281,18 @@ packages: resolution: {integrity: sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==} dev: true + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: true + + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: true + + /lodash.identity@3.0.0: + resolution: {integrity: sha512-AupTIzdLQxJS5wIYUQlgGyk2XRTfGXA+MCghDHqZk0pzUNYvd3EESS6dkChNauNYVIutcb0dfHw1ri9Q1yPV8Q==} + dev: true + /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true @@ -5024,14 +7300,50 @@ packages: /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + /lodash.pickby@4.6.0: + resolution: {integrity: sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==} + dev: true + + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true + /lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true + /lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + dev: true + + /lodash.xorby@4.7.0: + resolution: {integrity: sha512-gYiD6nvuQy0AEkMoUju+t4f4Rn18fjsLB/7x7YZFqtFT9kmegRLrj/uGEQVyVDy7otTmSrIMXNOk2wwuLcfHCQ==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true + /log-symbols@1.0.2: + resolution: {integrity: sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==} + engines: {node: '>=0.10.0'} + dependencies: + chalk: 1.1.3 + dev: true + + /log-update@2.3.0: + resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==} + engines: {node: '>=4'} + dependencies: + ansi-escapes: 3.2.0 + cli-cursor: 2.1.0 + wrap-ansi: 3.0.1 + dev: true + + /long@4.0.0: + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + dev: false + /longjohn@0.2.12: resolution: {integrity: sha512-36GDBamIwXTdCikEO29GWsE3GjtNGBGKNqSwWbwXczVC3KHNA1OzzIBKc9uocjQVYAPVGf/TWn9b0aPnraPjiQ==} engines: {node: '>= 0.9.3'} @@ -5039,6 +7351,19 @@ packages: source-map-support: 0.5.21 dev: false + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.6.3 + dev: true + /lru-cache@10.0.2: resolution: {integrity: sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==} engines: {node: 14 || >=16.14} @@ -5064,6 +7389,11 @@ packages: dependencies: yallist: 4.0.0 + /lru-cache@7.13.1: + resolution: {integrity: sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==} + engines: {node: '>=12'} + dev: true + /magic-string@0.16.0: resolution: {integrity: sha512-c4BEos3y6G2qO0B9X7K0FVLOPT9uGrjYwYRLFmDqyl5YMboUviyecnXWp94fJTSMwPw2/sf+CEYt5AGpmklkkQ==} dependencies: @@ -5149,6 +7479,13 @@ packages: hasBin: true dev: false + /matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 4.0.0 + dev: true + /mem@6.1.1: resolution: {integrity: sha512-Ci6bIfq/UgcxPTYa8dQQ5FY3BzKkT894bwXWXxC/zqs0XgMO2cT20CGkOqda7gZNkmK5VP4x89IGZ6K7hfbn3Q==} engines: {node: '>=8'} @@ -5207,6 +7544,11 @@ packages: dependencies: mime-db: 1.52.0 + /mimic-fn@1.2.0: + resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} + engines: {node: '>=4'} + dev: true + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -5222,11 +7564,31 @@ packages: engines: {node: '>=4'} dev: true + /minimatch@3.0.8: + resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + dependencies: + brace-expansion: 1.1.11 + dev: true + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -5336,6 +7698,10 @@ packages: engines: {node: '>=10'} hasBin: true + /moment@2.29.3: + resolution: {integrity: sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==} + dev: true + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -5345,6 +7711,10 @@ packages: /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + /natural-orderby@2.0.3: + resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} + dev: true + /ndjson@2.0.0: resolution: {integrity: sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==} engines: {node: '>=10'} @@ -5362,6 +7732,13 @@ packages: engines: {node: '>= 0.6'} dev: false + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.6.3 + dev: true + /node-emoji@2.1.3: resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==} engines: {node: '>=18'} @@ -5372,6 +7749,18 @@ packages: skin-tone: 2.0.0 dev: false + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + /node-fetch@3.0.0-beta.9: resolution: {integrity: sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==} engines: {node: ^10.17 || >=12.3} @@ -5450,6 +7839,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: true + /npm-bundled@3.0.0: resolution: {integrity: sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5539,8 +7933,6 @@ packages: resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} engines: {node: '>=0.10.0'} requiresBuild: true - dev: false - optional: true /oauth-sign@0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} @@ -5550,8 +7942,6 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} requiresBuild: true - dev: false - optional: true /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} @@ -5564,6 +7954,11 @@ packages: resolution: {integrity: sha512-3ECr6K831I4xX/Mduxr9UC+HPOz/d6WKKYj9p4cmC8Lg8p7g8gitzsxNX5IWlSIgFWN/a4JgrJaoAMKn20oKwA==} dev: true + /object-treeify@1.1.33: + resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} + engines: {node: '>= 10'} + dev: true + /object-values@1.0.0: resolution: {integrity: sha512-+8hwcz/JnQ9EpLIXzN0Rs7DLsBpJNT/xYehtB/jU93tHYr5BFEO8E+JGQNOSqE7opVzz5cGksKFHt7uUJVLSjQ==} engines: {node: '>=0.10.0'} @@ -5578,6 +7973,16 @@ packages: has-symbols: 1.0.3 object-keys: 1.1.1 + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + /object.fromentries@2.0.7: resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} @@ -5586,6 +7991,19 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 + /object.getownpropertydescriptors@2.1.8: + resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} + engines: {node: '>= 0.8'} + dependencies: + array.prototype.reduce: 1.0.7 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + gopd: 1.0.1 + safe-array-concat: 1.1.2 + dev: true + /object.groupby@1.0.1: resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: @@ -5607,6 +8025,13 @@ packages: dependencies: wrappy: 1.0.2 + /onetime@2.0.1: + resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} + engines: {node: '>=4'} + dependencies: + mimic-fn: 1.2.0 + dev: true + /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -5614,6 +8039,15 @@ packages: mimic-fn: 2.1.0 dev: true + /optimism@0.18.0: + resolution: {integrity: sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ==} + dependencies: + '@wry/caches': 1.0.1 + '@wry/context': 0.7.4 + '@wry/trie': 0.4.3 + tslib: 2.6.3 + dev: false + /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -5724,6 +8158,13 @@ packages: - supports-color dev: false + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.3 + dev: true + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -5738,6 +8179,14 @@ packages: ini: 1.3.8 dev: false + /parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: true + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -5753,6 +8202,11 @@ packages: engines: {node: '>=12'} dev: true + /parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + dev: true + /parse-npm-tarball-url@3.0.0: resolution: {integrity: sha512-InpdgIdNe5xWMEUcrVQUniQKwnggBtJ7+SCwh7zQAZwbbIYZV9XdgJyhtmDSSvykFyQXoe4BINnzKTfCwWLs5g==} engines: {node: '>=8.15'} @@ -5760,6 +8214,49 @@ packages: semver: 7.6.2 dev: true + /parse-path@4.0.4: + resolution: {integrity: sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw==} + dependencies: + is-ssh: 1.4.0 + protocols: 1.4.8 + qs: 6.12.1 + query-string: 6.14.1 + dev: true + + /parse-url@6.0.5: + resolution: {integrity: sha512-e35AeLTSIlkw/5GFq70IN7po8fmDUjpDPY1rIK+VubRfsUvBonjQ+PBZG+vWMACnQSmNlvl524IucoDmcioMxA==} + dependencies: + is-ssh: 1.4.0 + normalize-url: 6.1.0 + parse-path: 4.0.4 + protocols: 1.4.8 + dev: true + + /parsimmon@1.18.1: + resolution: {integrity: sha512-u7p959wLfGAhJpSDJVYXoyMCXWYwHia78HhRBWqk7AIbxdmlrfdp5wX0l3xv/iTSH5HvhN9K7o26hwwpgS5Nmw==} + dev: false + + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + dev: true + + /password-prompt@1.1.3: + resolution: {integrity: sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==} + dependencies: + ansi-escapes: 4.3.2 + cross-spawn: 7.0.3 + dev: true + + /path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.3 + dev: true + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -5793,6 +8290,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + /pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: true + /performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} dev: false @@ -5810,6 +8311,11 @@ packages: engines: {node: '>=10'} dev: true + /picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + dev: true + /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -5827,6 +8333,11 @@ packages: find-up: 4.1.0 dev: true + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + /preferred-pm@3.1.2: resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} engines: {node: '>=10'} @@ -5879,6 +8390,21 @@ packages: parse-ms: 3.0.0 dev: true + /pretty-ms@9.0.0: + resolution: {integrity: sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==} + engines: {node: '>=18'} + dependencies: + parse-ms: 4.0.0 + dev: true + + /prettyjson@1.2.5: + resolution: {integrity: sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==} + hasBin: true + dependencies: + colors: 1.4.0 + minimist: 1.2.8 + dev: false + /proc-log@3.0.0: resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5889,6 +8415,11 @@ packages: dev: false optional: true + /progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true + /promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: @@ -5912,6 +8443,22 @@ packages: sisteransi: 1.0.5 dev: true + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: false + + /protocols@1.4.8: + resolution: {integrity: sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==} + dev: true + + /protocols@2.0.1: + resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} + dev: true + /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true @@ -5920,6 +8467,13 @@ packages: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: false + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -5928,11 +8482,28 @@ packages: resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} dev: true + /qs@6.12.1: + resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.6 + dev: true + /qs@6.5.3: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} dev: false + /query-string@6.14.1: + resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==} + engines: {node: '>=6'} + dependencies: + decode-uri-component: 0.2.2 + filter-obj: 1.1.0 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 + dev: true + /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: false @@ -5949,6 +8520,10 @@ packages: engines: {node: '>=8'} dev: true + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: false + /react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true @@ -6025,6 +8600,23 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 + /recast@0.21.5: + resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} + engines: {node: '>= 4'} + dependencies: + ast-types: 0.15.2 + esprima: 4.0.1 + source-map: 0.6.1 + tslib: 2.6.3 + dev: true + + /rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.8 + dev: true + /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -6037,7 +8629,6 @@ packages: resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} dependencies: esprima: 4.0.1 - dev: false /regenerator-runtime@0.14.0: resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} @@ -6051,6 +8642,28 @@ packages: define-properties: 1.2.1 set-function-name: 2.0.1 + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.1 + dev: true + + /rehackt@0.1.0: + resolution: {integrity: sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==} + peerDependencies: + '@types/react': '*' + react: '*' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + dev: false + /rename-overwrite@5.0.0: resolution: {integrity: sha512-vSxE5Ww7Jnyotvaxi3Dj0vOMoojH8KMkBfs9xYeW/qNfJiLTcC1fmwTjrbGUq3mQSOCxkG0DbdcvwTUrpvBN4w==} engines: {node: '>=12.10'} @@ -6090,6 +8703,11 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true @@ -6127,6 +8745,19 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + /response-iterator@0.2.6: + resolution: {integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==} + engines: {node: '>=0.8'} + dev: false + + /restore-cursor@2.0.0: + resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} + engines: {node: '>=4'} + dependencies: + onetime: 2.0.1 + signal-exit: 3.0.7 + dev: true + /retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -6141,15 +8772,51 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 + /rimraf@4.4.1: + resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} + engines: {node: '>=14'} + hasBin: true + dependencies: + glob: 9.3.5 + dev: true + + /rimraf@5.0.7: + resolution: {integrity: sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==} + engines: {node: '>=14.18'} + hasBin: true + dependencies: + glob: 10.3.10 + dev: true + + /roarr@2.15.4: + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} + engines: {node: '>=8.0'} + dependencies: + boolean: 3.2.0 + detect-node: 2.1.0 + globalthis: 1.0.3 + json-stringify-safe: 5.0.1 + semver-compare: 1.0.0 + sprintf-js: 1.1.3 + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 + /rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + dev: true + /safe-array-concat@1.0.1: resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} @@ -6159,6 +8826,16 @@ packages: has-symbols: 1.0.3 isarray: 2.0.5 + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} requiresBuild: true @@ -6175,9 +8852,22 @@ packages: get-intrinsic: 1.2.2 is-regex: 1.1.4 + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + dev: true + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + /semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + dev: true + /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -6195,6 +8885,21 @@ packages: engines: {node: '>=10'} hasBin: true + /sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + upper-case-first: 2.0.2 + dev: true + + /serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} + dependencies: + type-fest: 0.13.1 + dev: true + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -6207,6 +8912,18 @@ packages: gopd: 1.0.1 has-property-descriptors: 1.0.1 + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true + /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} @@ -6215,6 +8932,14 @@ packages: functions-have-names: 1.2.3 has-property-descriptors: 1.0.1 + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -6241,6 +8966,16 @@ packages: resolution: {integrity: sha512-lT297f1WLAdq0A4O+AknIFRP6kkiI3s8C913eJ0XqBxJbZPGWUNkRQk2u8zk4bEAjUJ5i+fSLwB6z1HzeT+DEg==} dev: true + /shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + dev: true + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -6248,6 +8983,16 @@ packages: get-intrinsic: 1.2.2 object-inspect: 1.13.1 + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -6284,6 +9029,20 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + /slice-ansi@0.0.4: + resolution: {integrity: sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==} + engines: {node: '>=0.10.0'} + dev: true + + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + /slide@1.1.6: resolution: {integrity: sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==} dev: false @@ -6306,12 +9065,24 @@ packages: yargs: 15.4.1 dev: true + /smol-toml@1.2.2: + resolution: {integrity: sha512-fVEjX2ybKdJKzFL46VshQbj9PuA4IUKivalgp48/3zwS9vXzyykzQ6AX92UxHSvWJagziMRLeHMgEzoGO7A8hQ==} + engines: {node: '>= 18'} + dev: true + + /snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.3 + dev: true + /socks-proxy-agent@8.0.2: resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) socks: 2.7.1 transitivePeerDependencies: - supports-color @@ -6337,7 +9108,6 @@ packages: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: false /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} @@ -6375,6 +9145,11 @@ packages: /spdx-license-ids@3.0.16: resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + /split-on-first@1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} + dev: true + /split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: @@ -6385,6 +9160,10 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: true + /sshpk@1.18.0: resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} engines: {node: '>=0.10.0'} @@ -6434,6 +9213,11 @@ packages: queue-tick: 1.0.1 dev: false + /strict-uri-encode@2.0.0: + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} + dev: true + /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -6450,8 +9234,14 @@ packages: code-point-at: 1.1.0 is-fullwidth-code-point: 1.0.0 strip-ansi: 3.0.1 - dev: false - optional: true + + /string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + dev: true /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -6481,6 +9271,16 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true + /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: @@ -6488,6 +9288,14 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: @@ -6495,6 +9303,15 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} requiresBuild: true @@ -6514,8 +9331,13 @@ packages: requiresBuild: true dependencies: ansi-regex: 2.1.1 - dev: false - optional: true + + /strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + dependencies: + ansi-regex: 3.0.1 + dev: true /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -6570,6 +9392,11 @@ packages: resolution: {integrity: sha512-nMIjMrd5Z2nuB2RZCKJfFMjgS3fygbeyGk9PxPPaJR1RIcyN9yn4A63Isovzm3ZtQuEkLBVgMdPup8UeLH7aQw==} dev: true + /supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -6588,6 +9415,13 @@ packages: engines: {node: '>=10'} dependencies: has-flag: 4.0.0 + + /supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 dev: true /supports-hyperlinks@3.0.0: @@ -6602,6 +9436,27 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + /symbol-observable@1.2.0: + resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} + engines: {node: '>=0.10.0'} + dev: true + + /symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + dev: false + + /table@6.8.0: + resolution: {integrity: sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==} + engines: {node: '>=10.0.0'} + dependencies: + ajv: 8.16.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /tar-stream@3.1.6: resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==} dependencies: @@ -6693,6 +9548,10 @@ packages: url-parse: 1.5.10 dev: false + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + /trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} @@ -6717,6 +9576,19 @@ packages: resolution: {integrity: sha512-F8m9NOF6ZhdOClDVdlM8gj3fDCav4ZIFSs/EI3ksQbAAXVSCN/Jh5OCJDDZWBuBy9psFc6jULGDlPwjMYMhJDw==} dev: false + /ts-invariant@0.10.3: + resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.3 + dev: false + + /ts-invariant@0.4.4: + resolution: {integrity: sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==} + dependencies: + tslib: 1.14.1 + dev: true + /ts-jest@29.1.1(@babel/core@7.23.3)(jest@29.7.0)(typescript@5.5.2): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -6751,6 +9623,60 @@ packages: yargs-parser: 21.1.1 dev: true + /ts-jest@29.1.5(@babel/core@7.23.3)(esbuild@0.21.5)(jest@29.7.0)(typescript@5.5.2): + resolution: {integrity: sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.23.3 + bs-logger: 0.2.6 + esbuild: 0.21.5 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@18.19.39) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.2 + typescript: 5.5.2 + yargs-parser: 21.1.1 + dev: true + + /ts-node@9.1.1(typescript@5.5.2): + resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} + engines: {node: '>=10.0.0'} + hasBin: true + peerDependencies: + typescript: '>=2.7' + dependencies: + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + source-map-support: 0.5.21 + typescript: 5.5.2 + yn: 3.1.1 + dev: true + /tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: @@ -6759,6 +9685,22 @@ packages: minimist: 1.2.8 strip-bom: 3.0.0 + /tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + /tty-table@4.2.3: resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==} engines: {node: '>=8.0.0'} @@ -6773,12 +9715,16 @@ packages: yargs: 17.7.2 dev: true + /tty@1.0.1: + resolution: {integrity: sha512-yCPqGIuidycVkRigBDshlGDLKu9+p4JKtBQijtYcI7ZnWwak56vwT7y7dGGTcxG+ecjxgWQOPWuvlePmxC5S2w==} + dev: true + /tuf-js@2.2.0: resolution: {integrity: sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==} engines: {node: ^16.14.0 || >=18.0.0} dependencies: '@tufjs/models': 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) make-fetch-happen: 13.0.0 transitivePeerDependencies: - supports-color @@ -6788,7 +9734,6 @@ packages: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} dependencies: safe-buffer: 5.2.1 - dev: false /tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} @@ -6819,6 +9764,11 @@ packages: engines: {node: '>=10'} dev: true + /type-fest@0.3.1: + resolution: {integrity: sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==} + engines: {node: '>=6'} + dev: true + /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} @@ -6842,6 +9792,15 @@ packages: get-intrinsic: 1.2.2 is-typed-array: 1.1.12 + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true + /typed-array-byte-length@1.0.0: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} @@ -6851,6 +9810,17 @@ packages: has-proto: 1.0.1 is-typed-array: 1.1.12 + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + /typed-array-byte-offset@1.0.0: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} engines: {node: '>= 0.4'} @@ -6861,6 +9831,18 @@ packages: has-proto: 1.0.1 is-typed-array: 1.1.12 + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: @@ -6868,6 +9850,18 @@ packages: for-each: 0.3.3 is-typed-array: 1.1.12 + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + dev: true + /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: false @@ -6935,6 +9929,13 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + dependencies: + '@fastify/busboy': 2.1.1 + dev: false + /unescape-js@1.1.4: resolution: {integrity: sha512-42SD8NOQEhdYntEiUQdYq/1V/YHwr1HLwlHuTJB5InVVdOSbgI6xu8jK5q65yIzuFCfczzyDF/7hbGzVbyCw0g==} dependencies: @@ -6997,6 +9998,18 @@ packages: picocolors: 1.0.0 dev: true + /upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + dependencies: + tslib: 2.6.3 + dev: true + + /upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + dependencies: + tslib: 2.6.3 + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -7012,6 +10025,16 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + /util.promisify@1.1.1: + resolution: {integrity: sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + for-each: 0.3.3 + has-symbols: 1.0.3 + object.getownpropertydescriptors: 2.1.8 + dev: true + /uuid@3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. @@ -7072,6 +10095,37 @@ packages: resolution: {integrity: sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==} dev: true + /vscode-jsonrpc@6.0.0: + resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==} + engines: {node: '>=8.0.0 || >=10.0.0'} + dev: true + + /vscode-languageserver-protocol@3.16.0: + resolution: {integrity: sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==} + dependencies: + vscode-jsonrpc: 6.0.0 + vscode-languageserver-types: 3.16.0 + dev: true + + /vscode-languageserver-textdocument@1.0.11: + resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==} + dev: true + + /vscode-languageserver-types@3.16.0: + resolution: {integrity: sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==} + dev: true + + /vscode-languageserver@7.0.0: + resolution: {integrity: sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==} + hasBin: true + dependencies: + vscode-languageserver-protocol: 3.16.0 + dev: true + + /vscode-uri@1.0.6: + resolution: {integrity: sha512-sLI2L0uGov3wKVb9EB+vIQBl9tVP90nqRvxSoJ35vI3NjxE8jfsE5DSOhWgSunHSZmKS4OCi2jrtfxK7uyp2ww==} + dev: true + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -7084,6 +10138,17 @@ packages: defaults: 1.0.4 dev: true + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -7115,6 +10180,17 @@ packages: gopd: 1.0.1 has-tostringtag: 1.0.0 + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: true + /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -7144,6 +10220,21 @@ packages: dev: false optional: true + /widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + dependencies: + string-width: 4.2.3 + dev: true + + /wrap-ansi@3.0.1: + resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==} + engines: {node: '>=4'} + dependencies: + string-width: 2.1.1 + strip-ansi: 4.0.0 + dev: true + /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -7199,6 +10290,11 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true + /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -7240,10 +10336,45 @@ packages: y18n: 5.0.8 yargs-parser: 21.1.1 + /yarn@1.22.22: + resolution: {integrity: sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==} + engines: {node: '>=4.0.0'} + hasBin: true + requiresBuild: true + dev: true + + /yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: true + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + /zen-observable-ts@0.8.21: + resolution: {integrity: sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==} + dependencies: + tslib: 1.14.1 + zen-observable: 0.8.15 + dev: true + + /zen-observable-ts@1.2.5: + resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} + dependencies: + zen-observable: 0.8.15 + dev: false + + /zen-observable@0.8.15: + resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} + /zod-validation-error@3.0.0(zod@3.22.4): resolution: {integrity: sha512-x+agsJJG9rvC7axF0xqTEdZhJkLHyIZkdOAWDJSmwGPzxNHMHwtU6w2yDOAAP6yuSfTAUhAMJRBfhVGY64ySEQ==} engines: {node: '>=18.0.0'} @@ -7253,6 +10384,15 @@ packages: zod: 3.22.4 dev: true + /zod-validation-error@3.3.0(zod@3.22.4): + resolution: {integrity: sha512-Syib9oumw1NTqEv4LT0e6U83Td9aVRk9iTXPUQr1otyV1PuXQKOvOwhMNqZIq5hluzHP2pMgnOmHEo7kPdI2mw==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.18.0 + dependencies: + zod: 3.22.4 + dev: true + /zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} dev: true diff --git a/tsconfig.json b/tsconfig.json index d2c6e737eb..1fd3d7b232 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,6 +14,7 @@ { "path": "packages/typescript-packages" }, { "path": "packages/utils" }, { "path": "packages/retag" }, + { "path": "packages/mergebot" }, { "path": "packages/definitions-parser/test" }, { "path": "packages/dts-gen/test" }, diff --git a/tsconfig.test.json b/tsconfig.test.json index 7d094e189b..12af0f88c1 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -19,5 +19,6 @@ { "path": "packages/typescript-packages/test" }, { "path": "packages/typescript-versions/test" }, { "path": "packages/utils/test" }, + { "path": "packages/mergebot/test" } ] }