github.com/jfrog/frogbot@v1.1.1-0.20231221090046-821a26f50338/action/node_modules/@octokit/plugin-paginate-rest/dist-node/index.js (about) 1 'use strict'; 2 3 Object.defineProperty(exports, '__esModule', { value: true }); 4 5 const VERSION = "2.17.0"; 6 7 function ownKeys(object, enumerableOnly) { 8 var keys = Object.keys(object); 9 10 if (Object.getOwnPropertySymbols) { 11 var symbols = Object.getOwnPropertySymbols(object); 12 13 if (enumerableOnly) { 14 symbols = symbols.filter(function (sym) { 15 return Object.getOwnPropertyDescriptor(object, sym).enumerable; 16 }); 17 } 18 19 keys.push.apply(keys, symbols); 20 } 21 22 return keys; 23 } 24 25 function _objectSpread2(target) { 26 for (var i = 1; i < arguments.length; i++) { 27 var source = arguments[i] != null ? arguments[i] : {}; 28 29 if (i % 2) { 30 ownKeys(Object(source), true).forEach(function (key) { 31 _defineProperty(target, key, source[key]); 32 }); 33 } else if (Object.getOwnPropertyDescriptors) { 34 Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); 35 } else { 36 ownKeys(Object(source)).forEach(function (key) { 37 Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); 38 }); 39 } 40 } 41 42 return target; 43 } 44 45 function _defineProperty(obj, key, value) { 46 if (key in obj) { 47 Object.defineProperty(obj, key, { 48 value: value, 49 enumerable: true, 50 configurable: true, 51 writable: true 52 }); 53 } else { 54 obj[key] = value; 55 } 56 57 return obj; 58 } 59 60 /** 61 * Some “list” response that can be paginated have a different response structure 62 * 63 * They have a `total_count` key in the response (search also has `incomplete_results`, 64 * /installation/repositories also has `repository_selection`), as well as a key with 65 * the list of the items which name varies from endpoint to endpoint. 66 * 67 * Octokit normalizes these responses so that paginated results are always returned following 68 * the same structure. One challenge is that if the list response has only one page, no Link 69 * header is provided, so this header alone is not sufficient to check wether a response is 70 * paginated or not. 71 * 72 * We check if a "total_count" key is present in the response data, but also make sure that 73 * a "url" property is not, as the "Get the combined status for a specific ref" endpoint would 74 * otherwise match: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref 75 */ 76 function normalizePaginatedListResponse(response) { 77 // endpoints can respond with 204 if repository is empty 78 if (!response.data) { 79 return _objectSpread2(_objectSpread2({}, response), {}, { 80 data: [] 81 }); 82 } 83 84 const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data); 85 if (!responseNeedsNormalization) return response; // keep the additional properties intact as there is currently no other way 86 // to retrieve the same information. 87 88 const incompleteResults = response.data.incomplete_results; 89 const repositorySelection = response.data.repository_selection; 90 const totalCount = response.data.total_count; 91 delete response.data.incomplete_results; 92 delete response.data.repository_selection; 93 delete response.data.total_count; 94 const namespaceKey = Object.keys(response.data)[0]; 95 const data = response.data[namespaceKey]; 96 response.data = data; 97 98 if (typeof incompleteResults !== "undefined") { 99 response.data.incomplete_results = incompleteResults; 100 } 101 102 if (typeof repositorySelection !== "undefined") { 103 response.data.repository_selection = repositorySelection; 104 } 105 106 response.data.total_count = totalCount; 107 return response; 108 } 109 110 function iterator(octokit, route, parameters) { 111 const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters); 112 const requestMethod = typeof route === "function" ? route : octokit.request; 113 const method = options.method; 114 const headers = options.headers; 115 let url = options.url; 116 return { 117 [Symbol.asyncIterator]: () => ({ 118 async next() { 119 if (!url) return { 120 done: true 121 }; 122 123 try { 124 const response = await requestMethod({ 125 method, 126 url, 127 headers 128 }); 129 const normalizedResponse = normalizePaginatedListResponse(response); // `response.headers.link` format: 130 // '<https://api.github.com/users/aseemk/followers?page=2>; rel="next", <https://api.github.com/users/aseemk/followers?page=2>; rel="last"' 131 // sets `url` to undefined if "next" URL is not present or `link` header is not set 132 133 url = ((normalizedResponse.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1]; 134 return { 135 value: normalizedResponse 136 }; 137 } catch (error) { 138 if (error.status !== 409) throw error; 139 url = ""; 140 return { 141 value: { 142 status: 200, 143 headers: {}, 144 data: [] 145 } 146 }; 147 } 148 } 149 150 }) 151 }; 152 } 153 154 function paginate(octokit, route, parameters, mapFn) { 155 if (typeof parameters === "function") { 156 mapFn = parameters; 157 parameters = undefined; 158 } 159 160 return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn); 161 } 162 163 function gather(octokit, results, iterator, mapFn) { 164 return iterator.next().then(result => { 165 if (result.done) { 166 return results; 167 } 168 169 let earlyExit = false; 170 171 function done() { 172 earlyExit = true; 173 } 174 175 results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data); 176 177 if (earlyExit) { 178 return results; 179 } 180 181 return gather(octokit, results, iterator, mapFn); 182 }); 183 } 184 185 const composePaginateRest = Object.assign(paginate, { 186 iterator 187 }); 188 189 const paginatingEndpoints = ["GET /app/hook/deliveries", "GET /app/installations", "GET /applications/grants", "GET /authorizations", "GET /enterprises/{enterprise}/actions/permissions/organizations", "GET /enterprises/{enterprise}/actions/runner-groups", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners", "GET /enterprises/{enterprise}/actions/runners", "GET /enterprises/{enterprise}/actions/runners/downloads", "GET /events", "GET /gists", "GET /gists/public", "GET /gists/starred", "GET /gists/{gist_id}/comments", "GET /gists/{gist_id}/commits", "GET /gists/{gist_id}/forks", "GET /installation/repositories", "GET /issues", "GET /marketplace_listing/plans", "GET /marketplace_listing/plans/{plan_id}/accounts", "GET /marketplace_listing/stubbed/plans", "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts", "GET /networks/{owner}/{repo}/events", "GET /notifications", "GET /organizations", "GET /orgs/{org}/actions/permissions/repositories", "GET /orgs/{org}/actions/runner-groups", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners", "GET /orgs/{org}/actions/runners", "GET /orgs/{org}/actions/runners/downloads", "GET /orgs/{org}/actions/secrets", "GET /orgs/{org}/actions/secrets/{secret_name}/repositories", "GET /orgs/{org}/blocks", "GET /orgs/{org}/credential-authorizations", "GET /orgs/{org}/events", "GET /orgs/{org}/failed_invitations", "GET /orgs/{org}/hooks", "GET /orgs/{org}/hooks/{hook_id}/deliveries", "GET /orgs/{org}/installations", "GET /orgs/{org}/invitations", "GET /orgs/{org}/invitations/{invitation_id}/teams", "GET /orgs/{org}/issues", "GET /orgs/{org}/members", "GET /orgs/{org}/migrations", "GET /orgs/{org}/migrations/{migration_id}/repositories", "GET /orgs/{org}/outside_collaborators", "GET /orgs/{org}/packages", "GET /orgs/{org}/projects", "GET /orgs/{org}/public_members", "GET /orgs/{org}/repos", "GET /orgs/{org}/secret-scanning/alerts", "GET /orgs/{org}/team-sync/groups", "GET /orgs/{org}/teams", "GET /orgs/{org}/teams/{team_slug}/discussions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/invitations", "GET /orgs/{org}/teams/{team_slug}/members", "GET /orgs/{org}/teams/{team_slug}/projects", "GET /orgs/{org}/teams/{team_slug}/repos", "GET /orgs/{org}/teams/{team_slug}/team-sync/group-mappings", "GET /orgs/{org}/teams/{team_slug}/teams", "GET /projects/columns/{column_id}/cards", "GET /projects/{project_id}/collaborators", "GET /projects/{project_id}/columns", "GET /repos/{owner}/{repo}/actions/artifacts", "GET /repos/{owner}/{repo}/actions/runners", "GET /repos/{owner}/{repo}/actions/runners/downloads", "GET /repos/{owner}/{repo}/actions/runs", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs", "GET /repos/{owner}/{repo}/actions/secrets", "GET /repos/{owner}/{repo}/actions/workflows", "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs", "GET /repos/{owner}/{repo}/assignees", "GET /repos/{owner}/{repo}/autolinks", "GET /repos/{owner}/{repo}/branches", "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations", "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs", "GET /repos/{owner}/{repo}/code-scanning/alerts", "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", "GET /repos/{owner}/{repo}/code-scanning/analyses", "GET /repos/{owner}/{repo}/collaborators", "GET /repos/{owner}/{repo}/comments", "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/commits", "GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head", "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments", "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls", "GET /repos/{owner}/{repo}/commits/{ref}/check-runs", "GET /repos/{owner}/{repo}/commits/{ref}/check-suites", "GET /repos/{owner}/{repo}/commits/{ref}/statuses", "GET /repos/{owner}/{repo}/contributors", "GET /repos/{owner}/{repo}/deployments", "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses", "GET /repos/{owner}/{repo}/events", "GET /repos/{owner}/{repo}/forks", "GET /repos/{owner}/{repo}/git/matching-refs/{ref}", "GET /repos/{owner}/{repo}/hooks", "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries", "GET /repos/{owner}/{repo}/invitations", "GET /repos/{owner}/{repo}/issues", "GET /repos/{owner}/{repo}/issues/comments", "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/issues/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/comments", "GET /repos/{owner}/{repo}/issues/{issue_number}/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/labels", "GET /repos/{owner}/{repo}/issues/{issue_number}/reactions", "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline", "GET /repos/{owner}/{repo}/keys", "GET /repos/{owner}/{repo}/labels", "GET /repos/{owner}/{repo}/milestones", "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels", "GET /repos/{owner}/{repo}/notifications", "GET /repos/{owner}/{repo}/pages/builds", "GET /repos/{owner}/{repo}/projects", "GET /repos/{owner}/{repo}/pulls", "GET /repos/{owner}/{repo}/pulls/comments", "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments", "GET /repos/{owner}/{repo}/pulls/{pull_number}/commits", "GET /repos/{owner}/{repo}/pulls/{pull_number}/files", "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments", "GET /repos/{owner}/{repo}/releases", "GET /repos/{owner}/{repo}/releases/{release_id}/assets", "GET /repos/{owner}/{repo}/secret-scanning/alerts", "GET /repos/{owner}/{repo}/stargazers", "GET /repos/{owner}/{repo}/subscribers", "GET /repos/{owner}/{repo}/tags", "GET /repos/{owner}/{repo}/teams", "GET /repositories", "GET /repositories/{repository_id}/environments/{environment_name}/secrets", "GET /scim/v2/enterprises/{enterprise}/Groups", "GET /scim/v2/enterprises/{enterprise}/Users", "GET /scim/v2/organizations/{org}/Users", "GET /search/code", "GET /search/commits", "GET /search/issues", "GET /search/labels", "GET /search/repositories", "GET /search/topics", "GET /search/users", "GET /teams/{team_id}/discussions", "GET /teams/{team_id}/discussions/{discussion_number}/comments", "GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /teams/{team_id}/discussions/{discussion_number}/reactions", "GET /teams/{team_id}/invitations", "GET /teams/{team_id}/members", "GET /teams/{team_id}/projects", "GET /teams/{team_id}/repos", "GET /teams/{team_id}/team-sync/group-mappings", "GET /teams/{team_id}/teams", "GET /user/blocks", "GET /user/emails", "GET /user/followers", "GET /user/following", "GET /user/gpg_keys", "GET /user/installations", "GET /user/installations/{installation_id}/repositories", "GET /user/issues", "GET /user/keys", "GET /user/marketplace_purchases", "GET /user/marketplace_purchases/stubbed", "GET /user/memberships/orgs", "GET /user/migrations", "GET /user/migrations/{migration_id}/repositories", "GET /user/orgs", "GET /user/packages", "GET /user/public_emails", "GET /user/repos", "GET /user/repository_invitations", "GET /user/starred", "GET /user/subscriptions", "GET /user/teams", "GET /users", "GET /users/{username}/events", "GET /users/{username}/events/orgs/{org}", "GET /users/{username}/events/public", "GET /users/{username}/followers", "GET /users/{username}/following", "GET /users/{username}/gists", "GET /users/{username}/gpg_keys", "GET /users/{username}/keys", "GET /users/{username}/orgs", "GET /users/{username}/packages", "GET /users/{username}/projects", "GET /users/{username}/received_events", "GET /users/{username}/received_events/public", "GET /users/{username}/repos", "GET /users/{username}/starred", "GET /users/{username}/subscriptions"]; 190 191 function isPaginatingEndpoint(arg) { 192 if (typeof arg === "string") { 193 return paginatingEndpoints.includes(arg); 194 } else { 195 return false; 196 } 197 } 198 199 /** 200 * @param octokit Octokit instance 201 * @param options Options passed to Octokit constructor 202 */ 203 204 function paginateRest(octokit) { 205 return { 206 paginate: Object.assign(paginate.bind(null, octokit), { 207 iterator: iterator.bind(null, octokit) 208 }) 209 }; 210 } 211 paginateRest.VERSION = VERSION; 212 213 exports.composePaginateRest = composePaginateRest; 214 exports.isPaginatingEndpoint = isPaginatingEndpoint; 215 exports.paginateRest = paginateRest; 216 exports.paginatingEndpoints = paginatingEndpoints; 217 //# sourceMappingURL=index.js.map