github.com/jfrog/frogbot@v1.1.1-0.20231221090046-821a26f50338/action/node_modules/@octokit/plugin-paginate-rest/dist-src/normalize-paginated-list-response.js (about)

     1  /**
     2   * Some “list” response that can be paginated have a different response structure
     3   *
     4   * They have a `total_count` key in the response (search also has `incomplete_results`,
     5   * /installation/repositories also has `repository_selection`), as well as a key with
     6   * the list of the items which name varies from endpoint to endpoint.
     7   *
     8   * Octokit normalizes these responses so that paginated results are always returned following
     9   * the same structure. One challenge is that if the list response has only one page, no Link
    10   * header is provided, so this header alone is not sufficient to check wether a response is
    11   * paginated or not.
    12   *
    13   * We check if a "total_count" key is present in the response data, but also make sure that
    14   * a "url" property is not, as the "Get the combined status for a specific ref" endpoint would
    15   * otherwise match: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref
    16   */
    17  export function normalizePaginatedListResponse(response) {
    18      // endpoints can respond with 204 if repository is empty
    19      if (!response.data) {
    20          return {
    21              ...response,
    22              data: [],
    23          };
    24      }
    25      const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data);
    26      if (!responseNeedsNormalization)
    27          return response;
    28      // keep the additional properties intact as there is currently no other way
    29      // to retrieve the same information.
    30      const incompleteResults = response.data.incomplete_results;
    31      const repositorySelection = response.data.repository_selection;
    32      const totalCount = response.data.total_count;
    33      delete response.data.incomplete_results;
    34      delete response.data.repository_selection;
    35      delete response.data.total_count;
    36      const namespaceKey = Object.keys(response.data)[0];
    37      const data = response.data[namespaceKey];
    38      response.data = data;
    39      if (typeof incompleteResults !== "undefined") {
    40          response.data.incomplete_results = incompleteResults;
    41      }
    42      if (typeof repositorySelection !== "undefined") {
    43          response.data.repository_selection = repositorySelection;
    44      }
    45      response.data.total_count = totalCount;
    46      return response;
    47  }