diff --git a/packages/openapi-typescript/examples/README.md b/packages/openapi-typescript/examples/README.md index e7dc11307..c2fc14f93 100644 --- a/packages/openapi-typescript/examples/README.md +++ b/packages/openapi-typescript/examples/README.md @@ -2,10 +2,11 @@ These examples show the generation from an OpenAPI schema to its associated types. None of the example schemas here are associated with this project, and all code are © their respective owners. -| Generated Types | Source | License | -| :-------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | -| `digital-ocean-api.ts` | [GitHub](https://github.com/digitalocean/openapi) | [Apache 2.0](https://github.com/digitalocean/openapi/blob/main/LICENSE) | -| `github-api.ts` | [GitHub](https://github.com/github/rest-api-description/tree/main/descriptions/api.github.com) | [MIT](https://github.com/github/rest-api-description/blob/main/LICENSE.md) | -| `github-api-next.ts` | [GitHub](https://github.com/github/rest-api-description/tree/main/descriptions-next/api.github.com) | [MIT](https://github.com/github/rest-api-description/blob/main/LICENSE.md) | -| `octokit-ghes-3.6-diff-to-api.ts` | [GitHub](https://github.com/octokit/octokit-next.js/tree/main/packages/types-openapi-ghes-3.6-diff-to-api.github.com) | [MIT](https://github.com/octokit/octokit-next.js/blob/main/LICENSE) | -| `stripe-api.ts` | [GitHub](https://github.com/stripe/openapi) | [MIT](https://github.com/stripe/openapi/blob/master/LICENSE) | +| Generated Types | Source | License | Notes | +| :-------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :--------------------------------------------------- | +| `digital-ocean-api.ts` | [GitHub](https://github.com/digitalocean/openapi) | [Apache 2.0](https://github.com/digitalocean/openapi/blob/main/LICENSE) | | +| `github-api.ts` | [GitHub](https://github.com/github/rest-api-description/tree/main/descriptions/api.github.com) | [MIT](https://github.com/github/rest-api-description/blob/main/LICENSE.md) | | +| `github-api-next.ts` | [GitHub](https://github.com/github/rest-api-description/tree/main/descriptions-next/api.github.com) | [MIT](https://github.com/github/rest-api-description/blob/main/LICENSE.md) | | +| `github-api-pulls-only.ts` | [GitHub](https://github.com/github/rest-api-description/tree/main/descriptions/api.github.com) | [MIT](https://github.com/github/rest-api-description/blob/main/LICENSE.md) | `pathsFilter` — only `/repos/{owner}/{repo}/pulls*` | +| `octokit-ghes-3.6-diff-to-api.ts` | [GitHub](https://github.com/octokit/octokit-next.js/tree/main/packages/types-openapi-ghes-3.6-diff-to-api.github.com) | [MIT](https://github.com/octokit/octokit-next.js/blob/main/LICENSE) | | +| `stripe-api.ts` | [GitHub](https://github.com/stripe/openapi) | [MIT](https://github.com/stripe/openapi/blob/master/LICENSE) | | diff --git a/packages/openapi-typescript/examples/github-api-pulls-only.ts b/packages/openapi-typescript/examples/github-api-pulls-only.ts new file mode 100644 index 000000000..dbbe090ed --- /dev/null +++ b/packages/openapi-typescript/examples/github-api-pulls-only.ts @@ -0,0 +1,4163 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/repos/{owner}/{repo}/pulls": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List pull requests + * @description Lists pull requests in a specified repository. + * + * Draft pull requests are available in public repositories with GitHub + * Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing + * plans, and in public and private repositories with GitHub Team and GitHub Enterprise + * Cloud. For more information, see [GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products) + * in the GitHub Help documentation. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + get: operations["pulls/list"]; + put?: never; + /** + * Create a pull request + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * To open or update a pull request in a public repository, you must have write access to the head or the source branch. For organization-owned repositories, you must be a member of the organization that owns the repository to open or update a pull request. + * + * This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in secondary rate limiting. For more information, see "[Rate limits for the API](https://docs.github.com/rest/using-the-rest-api/rate-limits-for-the-rest-api#about-secondary-rate-limits)" and "[Best practices for using the REST API](https://docs.github.com/rest/guides/best-practices-for-using-the-rest-api)." + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + post: operations["pulls/create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/comments": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List review comments in a repository + * @description Lists review comments for all pull requests in a repository. By default, + * review comments are in ascending order by ID. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + get: operations["pulls/list-review-comments-for-repo"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/comments/{comment_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get a review comment for a pull request + * @description Provides details for a specified review comment. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + get: operations["pulls/get-review-comment"]; + put?: never; + post?: never; + /** + * Delete a review comment for a pull request + * @description Deletes a review comment. + */ + delete: operations["pulls/delete-review-comment"]; + options?: never; + head?: never; + /** + * Update a review comment for a pull request + * @description Edits the content of a specified review comment. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + patch: operations["pulls/update-review-comment"]; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List reactions for a pull request review comment + * @description List the reactions to a [pull request review comment](https://docs.github.com/rest/pulls/comments#get-a-review-comment-for-a-pull-request). + */ + get: operations["reactions/list-for-pull-request-review-comment"]; + put?: never; + /** + * Create reaction for a pull request review comment + * @description Create a reaction to a [pull request review comment](https://docs.github.com/rest/pulls/comments#get-a-review-comment-for-a-pull-request). A response with an HTTP `200` status means that you already added the reaction type to this pull request review comment. + */ + post: operations["reactions/create-for-pull-request-review-comment"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete a pull request comment reaction + * @description > [!NOTE] + * > You can also specify a repository by `repository_id` using the route `DELETE /repositories/:repository_id/pulls/comments/:comment_id/reactions/:reaction_id.` + * + * Delete a reaction to a [pull request review comment](https://docs.github.com/rest/pulls/comments#get-a-review-comment-for-a-pull-request). + */ + delete: operations["reactions/delete-for-pull-request-comment"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get a pull request + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * Lists details of a pull request by providing its number. + * + * When you get, [create](https://docs.github.com/rest/pulls/pulls/#create-a-pull-request), or [edit](https://docs.github.com/rest/pulls/pulls#update-a-pull-request) a pull request, GitHub creates a merge commit to test whether the pull request can be automatically merged into the base branch. This test commit is not added to the base branch or the head branch. You can review the status of the test commit using the `mergeable` key. For more information, see "[Checking mergeability of pull requests](https://docs.github.com/rest/guides/getting-started-with-the-git-database-api#checking-mergeability-of-pull-requests)". + * + * The value of the `mergeable` attribute can be `true`, `false`, or `null`. If the value is `null`, then GitHub has started a background job to compute the mergeability. After giving the job time to complete, resubmit the request. When the job finishes, you will see a non-`null` value for the `mergeable` attribute in the response. If `mergeable` is `true`, then `merge_commit_sha` will be the SHA of the _test_ merge commit. + * + * The value of the `merge_commit_sha` attribute changes depending on the state of the pull request. Before merging a pull request, the `merge_commit_sha` attribute holds the SHA of the _test_ merge commit. After merging a pull request, the `merge_commit_sha` attribute changes depending on how you merged the pull request: + * + * * If merged as a [merge commit](https://docs.github.com/articles/about-merge-methods-on-github/), `merge_commit_sha` represents the SHA of the merge commit. + * * If merged via a [squash](https://docs.github.com/articles/about-merge-methods-on-github/#squashing-your-merge-commits), `merge_commit_sha` represents the SHA of the squashed commit on the base branch. + * * If [rebased](https://docs.github.com/articles/about-merge-methods-on-github/#rebasing-and-merging-your-commits), `merge_commit_sha` represents the commit that the base branch was updated to. + * + * Pass the appropriate [media type](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types) to fetch diff and patch formats. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + * - **`application/vnd.github.diff`**: For more information, see "[git-diff](https://git-scm.com/docs/git-diff)" in the Git documentation. If a diff is corrupt, contact us through the [GitHub Support portal](https://support.github.com/). Include the repository name and pull request ID in your message. + */ + get: operations["pulls/get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Update a pull request + * @description Draft pull requests are available in public repositories with GitHub Free and GitHub Free for organizations, GitHub Pro, and legacy per-repository billing plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. For more information, see [GitHub's products](https://docs.github.com/github/getting-started-with-github/githubs-products) in the GitHub Help documentation. + * + * To open or update a pull request in a public repository, you must have write access to the head or the source branch. For organization-owned repositories, you must be a member of the organization that owns the repository to open or update a pull request. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + patch: operations["pulls/update"]; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}/codespaces": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create a codespace from a pull request + * @description Creates a codespace owned by the authenticated user for the specified pull request. + * + * OAuth app tokens and personal access tokens (classic) need the `codespace` scope to use this endpoint. + */ + post: operations["codespaces/create-with-pr-for-authenticated-user"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}/comments": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List review comments on a pull request + * @description Lists all review comments for a specified pull request. By default, review comments + * are in ascending order by ID. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + get: operations["pulls/list-review-comments"]; + put?: never; + /** + * Create a review comment for a pull request + * @description Creates a review comment on the diff of a specified pull request. To add a regular comment to a pull request timeline, see "[Create an issue comment](https://docs.github.com/rest/issues/comments#create-an-issue-comment)." + * + * If your comment applies to more than one line in the pull request diff, you should use the parameters `line`, `side`, and optionally `start_line` and `start_side` in your request. + * + * The `position` parameter is closing down. If you use `position`, the `line`, `side`, `start_line`, and `start_side` parameters are not required. + * + * This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in secondary rate limiting. For more information, see "[Rate limits for the API](https://docs.github.com/rest/using-the-rest-api/rate-limits-for-the-rest-api#about-secondary-rate-limits)" + * and "[Best practices for using the REST API](https://docs.github.com/rest/guides/best-practices-for-using-the-rest-api)." + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + post: operations["pulls/create-review-comment"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create a reply for a review comment + * @description Creates a reply to a review comment for a pull request. For the `comment_id`, provide the ID of the review comment you are replying to. This must be the ID of a _top-level review comment_, not a reply to that comment. Replies to replies are not supported. + * + * This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in secondary rate limiting. For more information, see "[Rate limits for the API](https://docs.github.com/rest/using-the-rest-api/rate-limits-for-the-rest-api#about-secondary-rate-limits)" + * and "[Best practices for using the REST API](https://docs.github.com/rest/guides/best-practices-for-using-the-rest-api)." + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + post: operations["pulls/create-reply-for-review-comment"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}/commits": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List commits on a pull request + * @description Lists a maximum of 250 commits for a pull request. To receive a complete + * commit list for pull requests with more than 250 commits, use the [List commits](https://docs.github.com/rest/commits/commits#list-commits) + * endpoint. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + get: operations["pulls/list-commits"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}/files": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List pull requests files + * @description Lists the files in a specified pull request. + * + * > [!NOTE] + * > Responses include a maximum of 3000 files. The paginated response returns 30 files per page by default. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + get: operations["pulls/list-files"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}/merge": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Check if a pull request has been merged + * @description Checks if a pull request has been merged into the base branch. The HTTP status of the response indicates whether or not the pull request has been merged; the response body is empty. + */ + get: operations["pulls/check-if-merged"]; + /** + * Merge a pull request + * @description Merges a pull request into the base branch. + * This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in secondary rate limiting. For more information, see "[Rate limits for the API](https://docs.github.com/rest/using-the-rest-api/rate-limits-for-the-rest-api#about-secondary-rate-limits)" and "[Best practices for using the REST API](https://docs.github.com/rest/guides/best-practices-for-using-the-rest-api)." + */ + put: operations["pulls/merge"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get all requested reviewers for a pull request + * @description Gets the users or teams whose review is requested for a pull request. Once a requested reviewer submits a review, they are no longer considered a requested reviewer. Their review will instead be returned by the [List reviews for a pull request](https://docs.github.com/rest/pulls/reviews#list-reviews-for-a-pull-request) operation. + */ + get: operations["pulls/list-requested-reviewers"]; + put?: never; + /** + * Request reviewers for a pull request + * @description Requests reviews for a pull request from a given set of users and/or teams. + * This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in secondary rate limiting. For more information, see "[Rate limits for the API](https://docs.github.com/rest/using-the-rest-api/rate-limits-for-the-rest-api#about-secondary-rate-limits)" and "[Best practices for using the REST API](https://docs.github.com/rest/guides/best-practices-for-using-the-rest-api)." + */ + post: operations["pulls/request-reviewers"]; + /** + * Remove requested reviewers from a pull request + * @description Removes review requests from a pull request for a given set of users and/or teams. + */ + delete: operations["pulls/remove-requested-reviewers"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}/reviews": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List reviews for a pull request + * @description Lists all reviews for a specified pull request. The list of reviews returns in chronological order. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + get: operations["pulls/list-reviews"]; + put?: never; + /** + * Create a review for a pull request + * @description Creates a review on a specified pull request. + * + * This endpoint triggers [notifications](https://docs.github.com/github/managing-subscriptions-and-notifications-on-github/about-notifications). Creating content too quickly using this endpoint may result in secondary rate limiting. For more information, see "[Rate limits for the API](https://docs.github.com/rest/using-the-rest-api/rate-limits-for-the-rest-api#about-secondary-rate-limits)" and "[Best practices for using the REST API](https://docs.github.com/rest/guides/best-practices-for-using-the-rest-api)." + * + * Pull request reviews created in the `PENDING` state are not submitted and therefore do not include the `submitted_at` property in the response. To create a pending review for a pull request, leave the `event` parameter blank. For more information about submitting a `PENDING` review, see "[Submit a review for a pull request](https://docs.github.com/rest/pulls/reviews#submit-a-review-for-a-pull-request)." + * + * > [!NOTE] + * > To comment on a specific line in a file, you need to first determine the position of that line in the diff. To see a pull request diff, add the `application/vnd.github.v3.diff` media type to the `Accept` header of a call to the [Get a pull request](https://docs.github.com/rest/pulls/pulls#get-a-pull-request) endpoint. + * + * The `position` value equals the number of lines down from the first "@@" hunk header in the file you want to add a comment. The line just below the "@@" line is position 1, the next line is position 2, and so on. The position in the diff continues to increase through lines of whitespace and additional hunks until the beginning of a new file. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + post: operations["pulls/create-review"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get a review for a pull request + * @description Retrieves a pull request review by its ID. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + get: operations["pulls/get-review"]; + /** + * Update a review for a pull request + * @description Updates the contents of a specified review summary comment. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + put: operations["pulls/update-review"]; + post?: never; + /** + * Delete a pending review for a pull request + * @description Deletes a pull request review that has not been submitted. Submitted reviews cannot be deleted. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + delete: operations["pulls/delete-pending-review"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List comments for a pull request review + * @description Lists comments for a specific pull request review. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + get: operations["pulls/list-comments-for-review"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Dismiss a review for a pull request + * @description Dismisses a specified review on a pull request. + * + * > [!NOTE] + * > To dismiss a pull request review on a [protected branch](https://docs.github.com/rest/branches/branch-protection), you must be a repository administrator or be included in the list of people or teams who can dismiss pull request reviews. + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + put: operations["pulls/dismiss-review"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Submit a review for a pull request + * @description Submits a pending review for a pull request. For more information about creating a pending review for a pull request, see "[Create a review for a pull request](https://docs.github.com/rest/pulls/reviews#create-a-review-for-a-pull-request)." + * + * This endpoint supports the following custom media types. For more information, see "[Media types](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types)." + * + * - **`application/vnd.github-commitcomment.raw+json`**: Returns the raw markdown body. Response will include `body`. This is the default if you do not pass any specific media type. + * - **`application/vnd.github-commitcomment.text+json`**: Returns a text only representation of the markdown body. Response will include `body_text`. + * - **`application/vnd.github-commitcomment.html+json`**: Returns HTML rendered from the body's markdown. Response will include `body_html`. + * - **`application/vnd.github-commitcomment.full+json`**: Returns raw, text, and HTML representations. Response will include `body`, `body_text`, and `body_html`. + */ + post: operations["pulls/submit-review"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/repos/{owner}/{repo}/pulls/{pull_number}/update-branch": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update a pull request branch + * @description Updates the pull request branch with the latest upstream changes by merging HEAD from the base branch into the pull request branch. + * Note: If making a request on behalf of a GitHub App you must also have permissions to write the contents of the head repository. + */ + put: operations["pulls/update-branch"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + /** + * Simple User + * @description A GitHub user. + */ + "simple-user": { + name?: string | null; + email?: string | null; + /** @example octocat */ + login: string; + /** + * Format: int64 + * @example 1 + */ + id: number; + /** @example MDQ6VXNlcjE= */ + node_id: string; + /** + * Format: uri + * @example https://github.com/images/error/octocat_happy.gif + */ + avatar_url: string; + /** @example 41d064eb2195891e12d0413f63227ea7 */ + gravatar_id: string | null; + /** + * Format: uri + * @example https://api.github.com/users/octocat + */ + url: string; + /** + * Format: uri + * @example https://github.com/octocat + */ + html_url: string; + /** + * Format: uri + * @example https://api.github.com/users/octocat/followers + */ + followers_url: string; + /** @example https://api.github.com/users/octocat/following{/other_user} */ + following_url: string; + /** @example https://api.github.com/users/octocat/gists{/gist_id} */ + gists_url: string; + /** @example https://api.github.com/users/octocat/starred{/owner}{/repo} */ + starred_url: string; + /** + * Format: uri + * @example https://api.github.com/users/octocat/subscriptions + */ + subscriptions_url: string; + /** + * Format: uri + * @example https://api.github.com/users/octocat/orgs + */ + organizations_url: string; + /** + * Format: uri + * @example https://api.github.com/users/octocat/repos + */ + repos_url: string; + /** @example https://api.github.com/users/octocat/events{/privacy} */ + events_url: string; + /** + * Format: uri + * @example https://api.github.com/users/octocat/received_events + */ + received_events_url: string; + /** @example User */ + type: string; + site_admin: boolean; + /** @example "2020-07-09T00:17:55Z" */ + starred_at?: string; + /** @example public */ + user_view_type?: string; + }; + /** + * Basic Error + * @description Basic Error + */ + "basic-error": { + message?: string; + documentation_url?: string; + url?: string; + status?: string; + }; + /** + * Validation Error Simple + * @description Validation Error Simple + */ + "validation-error-simple": { + message: string; + documentation_url: string; + errors?: string[]; + }; + /** + * Validation Error + * @description Validation Error + */ + "validation-error": { + message: string; + documentation_url: string; + errors?: { + resource?: string; + field?: string; + message?: string; + code: string; + index?: number; + value?: (string | null) | (number | null) | (string[] | null); + }[]; + }; + /** + * Simple User + * @description A GitHub user. + */ + "nullable-simple-user": { + name?: string | null; + email?: string | null; + /** @example octocat */ + login: string; + /** + * Format: int64 + * @example 1 + */ + id: number; + /** @example MDQ6VXNlcjE= */ + node_id: string; + /** + * Format: uri + * @example https://github.com/images/error/octocat_happy.gif + */ + avatar_url: string; + /** @example 41d064eb2195891e12d0413f63227ea7 */ + gravatar_id: string | null; + /** + * Format: uri + * @example https://api.github.com/users/octocat + */ + url: string; + /** + * Format: uri + * @example https://github.com/octocat + */ + html_url: string; + /** + * Format: uri + * @example https://api.github.com/users/octocat/followers + */ + followers_url: string; + /** @example https://api.github.com/users/octocat/following{/other_user} */ + following_url: string; + /** @example https://api.github.com/users/octocat/gists{/gist_id} */ + gists_url: string; + /** @example https://api.github.com/users/octocat/starred{/owner}{/repo} */ + starred_url: string; + /** + * Format: uri + * @example https://api.github.com/users/octocat/subscriptions + */ + subscriptions_url: string; + /** + * Format: uri + * @example https://api.github.com/users/octocat/orgs + */ + organizations_url: string; + /** + * Format: uri + * @example https://api.github.com/users/octocat/repos + */ + repos_url: string; + /** @example https://api.github.com/users/octocat/events{/privacy} */ + events_url: string; + /** + * Format: uri + * @example https://api.github.com/users/octocat/received_events + */ + received_events_url: string; + /** @example User */ + type: string; + site_admin: boolean; + /** @example "2020-07-09T00:17:55Z" */ + starred_at?: string; + /** @example public */ + user_view_type?: string; + } | null; + /** + * License Simple + * @description License Simple + */ + "nullable-license-simple": { + /** @example mit */ + key: string; + /** @example MIT License */ + name: string; + /** + * Format: uri + * @example https://api.github.com/licenses/mit + */ + url: string | null; + /** @example MIT */ + spdx_id: string | null; + /** @example MDc6TGljZW5zZW1pdA== */ + node_id: string; + /** Format: uri */ + html_url?: string; + } | null; + /** + * Repository + * @description A repository on GitHub. + */ + repository: { + /** + * Format: int64 + * @description Unique identifier of the repository + * @example 42 + */ + id: number; + /** @example MDEwOlJlcG9zaXRvcnkxMjk2MjY5 */ + node_id: string; + /** + * @description The name of the repository. + * @example Team Environment + */ + name: string; + /** @example octocat/Hello-World */ + full_name: string; + license: components["schemas"]["nullable-license-simple"]; + forks: number; + permissions?: { + admin: boolean; + pull: boolean; + triage?: boolean; + push: boolean; + maintain?: boolean; + }; + owner: components["schemas"]["simple-user"]; + /** + * @description Whether the repository is private or public. + * @default false + */ + private: boolean; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World + */ + html_url: string; + /** @example This your first repo! */ + description: string | null; + fork: boolean; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World + */ + url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref} */ + archive_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/assignees{/user} */ + assignees_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha} */ + blobs_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/branches{/branch} */ + branches_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator} */ + collaborators_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/comments{/number} */ + comments_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/commits{/sha} */ + commits_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head} */ + compare_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/contents/{+path} */ + contents_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/contributors + */ + contributors_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/deployments + */ + deployments_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/downloads + */ + downloads_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/events + */ + events_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/forks + */ + forks_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/git/commits{/sha} */ + git_commits_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/git/refs{/sha} */ + git_refs_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/git/tags{/sha} */ + git_tags_url: string; + /** @example git:github.com/octocat/Hello-World.git */ + git_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/issues/comments{/number} */ + issue_comment_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/issues/events{/number} */ + issue_events_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/issues{/number} */ + issues_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/keys{/key_id} */ + keys_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/labels{/name} */ + labels_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/languages + */ + languages_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/merges + */ + merges_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/milestones{/number} */ + milestones_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating} */ + notifications_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/pulls{/number} */ + pulls_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/releases{/id} */ + releases_url: string; + /** @example git@github.com:octocat/Hello-World.git */ + ssh_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/stargazers + */ + stargazers_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/statuses/{sha} */ + statuses_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/subscribers + */ + subscribers_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/subscription + */ + subscription_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/tags + */ + tags_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/teams + */ + teams_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/git/trees{/sha} */ + trees_url: string; + /** @example https://github.com/octocat/Hello-World.git */ + clone_url: string; + /** + * Format: uri + * @example git:git.example.com/octocat/Hello-World + */ + mirror_url: string | null; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/hooks + */ + hooks_url: string; + /** + * Format: uri + * @example https://svn.github.com/octocat/Hello-World + */ + svn_url: string; + /** + * Format: uri + * @example https://github.com + */ + homepage: string | null; + language: string | null; + /** @example 9 */ + forks_count: number; + /** @example 80 */ + stargazers_count: number; + /** @example 80 */ + watchers_count: number; + /** + * @description The size of the repository, in kilobytes. Size is calculated hourly. When a repository is initially created, the size is 0. + * @example 108 + */ + size: number; + /** + * @description The default branch of the repository. + * @example master + */ + default_branch: string; + /** @example 0 */ + open_issues_count: number; + /** + * @description Whether this repository acts as a template that can be used to generate new repositories. + * @default false + * @example true + */ + is_template: boolean; + topics?: string[]; + /** + * @description Whether issues are enabled. + * @default true + * @example true + */ + has_issues: boolean; + /** + * @description Whether projects are enabled. + * @default true + * @example true + */ + has_projects: boolean; + /** + * @description Whether the wiki is enabled. + * @default true + * @example true + */ + has_wiki: boolean; + has_pages: boolean; + /** + * @deprecated + * @description Whether downloads are enabled. + * @default true + * @example true + */ + has_downloads: boolean; + /** + * @description Whether discussions are enabled. + * @default false + * @example true + */ + has_discussions: boolean; + /** + * @description Whether the repository is archived. + * @default false + */ + archived: boolean; + /** @description Returns whether or not this repository disabled. */ + disabled: boolean; + /** + * @description The repository visibility: public, private, or internal. + * @default public + */ + visibility: string; + /** + * Format: date-time + * @example 2011-01-26T19:06:43Z + */ + pushed_at: string | null; + /** + * Format: date-time + * @example 2011-01-26T19:01:12Z + */ + created_at: string | null; + /** + * Format: date-time + * @example 2011-01-26T19:14:43Z + */ + updated_at: string | null; + /** + * @description Whether to allow rebase merges for pull requests. + * @default true + * @example true + */ + allow_rebase_merge: boolean; + temp_clone_token?: string; + /** + * @description Whether to allow squash merges for pull requests. + * @default true + * @example true + */ + allow_squash_merge: boolean; + /** + * @description Whether to allow Auto-merge to be used on pull requests. + * @default false + * @example false + */ + allow_auto_merge: boolean; + /** + * @description Whether to delete head branches when pull requests are merged + * @default false + * @example false + */ + delete_branch_on_merge: boolean; + /** + * @description Whether or not a pull request head branch that is behind its base branch can always be updated even if it is not required to be up to date before merging. + * @default false + * @example false + */ + allow_update_branch: boolean; + /** + * @deprecated + * @description Whether a squash merge commit can use the pull request title as default. **This property is closing down. Please use `squash_merge_commit_title` instead. + * @default false + */ + use_squash_pr_title_as_default: boolean; + /** + * @description The default value for a squash merge commit title: + * + * - `PR_TITLE` - default to the pull request's title. + * - `COMMIT_OR_PR_TITLE` - default to the commit's title (if only one commit) or the pull request's title (when more than one commit). + * @enum {string} + */ + squash_merge_commit_title?: "PR_TITLE" | "COMMIT_OR_PR_TITLE"; + /** + * @description The default value for a squash merge commit message: + * + * - `PR_BODY` - default to the pull request's body. + * - `COMMIT_MESSAGES` - default to the branch's commit messages. + * - `BLANK` - default to a blank commit message. + * @enum {string} + */ + squash_merge_commit_message?: "PR_BODY" | "COMMIT_MESSAGES" | "BLANK"; + /** + * @description The default value for a merge commit title. + * + * - `PR_TITLE` - default to the pull request's title. + * - `MERGE_MESSAGE` - default to the classic title for a merge message (e.g., Merge pull request #123 from branch-name). + * @enum {string} + */ + merge_commit_title?: "PR_TITLE" | "MERGE_MESSAGE"; + /** + * @description The default value for a merge commit message. + * + * - `PR_TITLE` - default to the pull request's title. + * - `PR_BODY` - default to the pull request's body. + * - `BLANK` - default to a blank commit message. + * @enum {string} + */ + merge_commit_message?: "PR_BODY" | "PR_TITLE" | "BLANK"; + /** + * @description Whether to allow merge commits for pull requests. + * @default true + * @example true + */ + allow_merge_commit: boolean; + /** @description Whether to allow forking this repo */ + allow_forking?: boolean; + /** + * @description Whether to require contributors to sign off on web-based commits + * @default false + */ + web_commit_signoff_required: boolean; + open_issues: number; + watchers: number; + master_branch?: string; + /** @example "2020-07-09T00:17:42Z" */ + starred_at?: string; + /** @description Whether anonymous git access is enabled for this repository */ + anonymous_access_enabled?: boolean; + }; + /** + * Code Of Conduct + * @description Code Of Conduct + */ + "code-of-conduct": { + /** @example contributor_covenant */ + key: string; + /** @example Contributor Covenant */ + name: string; + /** + * Format: uri + * @example https://api.github.com/codes_of_conduct/contributor_covenant + */ + url: string; + /** + * @example # Contributor Covenant Code of Conduct + * + * ## Our Pledge + * + * In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + * + * ## Our Standards + * + * Examples of behavior that contributes to creating a positive environment include: + * + * * Using welcoming and inclusive language + * * Being respectful of differing viewpoints and experiences + * * Gracefully accepting constructive criticism + * * Focusing on what is best for the community + * * Showing empathy towards other community members + * + * Examples of unacceptable behavior by participants include: + * + * * The use of sexualized language or imagery and unwelcome sexual attention or advances + * * Trolling, insulting/derogatory comments, and personal or political attacks + * * Public or private harassment + * * Publishing others' private information, such as a physical or electronic address, without explicit permission + * * Other conduct which could reasonably be considered inappropriate in a professional setting + * + * ## Our Responsibilities + * + * Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response + * to any instances of unacceptable behavior. + * + * Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + * + * ## Scope + * + * This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, + * posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + * + * ## Enforcement + * + * Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + * + * Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + * + * ## Attribution + * + * This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.4, available at [http://contributor-covenant.org/version/1/4](http://contributor-covenant.org/version/1/4/). + */ + body?: string; + /** Format: uri */ + html_url: string | null; + }; + /** + * Milestone + * @description A collection of related issues and pull requests. + */ + "nullable-milestone": { + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/milestones/1 + */ + url: string; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/milestones/v1.0 + */ + html_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/milestones/1/labels + */ + labels_url: string; + /** @example 1002604 */ + id: number; + /** @example MDk6TWlsZXN0b25lMTAwMjYwNA== */ + node_id: string; + /** + * @description The number of the milestone. + * @example 42 + */ + number: number; + /** + * @description The state of the milestone. + * @default open + * @example open + * @enum {string} + */ + state: "open" | "closed"; + /** + * @description The title of the milestone. + * @example v1.0 + */ + title: string; + /** @example Tracking milestone for version 1.0 */ + description: string | null; + creator: components["schemas"]["nullable-simple-user"]; + /** @example 4 */ + open_issues: number; + /** @example 8 */ + closed_issues: number; + /** + * Format: date-time + * @example 2011-04-10T20:09:31Z + */ + created_at: string; + /** + * Format: date-time + * @example 2014-03-03T18:58:10Z + */ + updated_at: string; + /** + * Format: date-time + * @example 2013-02-12T13:22:01Z + */ + closed_at: string | null; + /** + * Format: date-time + * @example 2012-10-09T23:39:01Z + */ + due_on: string | null; + } | null; + /** + * author_association + * @description How the author is associated with the repository. + * @example OWNER + * @enum {string} + */ + "author-association": "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIMER" | "FIRST_TIME_CONTRIBUTOR" | "MANNEQUIN" | "MEMBER" | "NONE" | "OWNER"; + /** Reaction Rollup */ + "reaction-rollup": { + /** Format: uri */ + url: string; + total_count: number; + "+1": number; + "-1": number; + laugh: number; + confused: number; + heart: number; + hooray: number; + eyes: number; + rocket: number; + }; + "security-and-analysis": { + advanced_security?: { + /** @enum {string} */ + status?: "enabled" | "disabled"; + }; + /** @description Enable or disable Dependabot security updates for the repository. */ + dependabot_security_updates?: { + /** + * @description The enablement status of Dependabot security updates for the repository. + * @enum {string} + */ + status?: "enabled" | "disabled"; + }; + secret_scanning?: { + /** @enum {string} */ + status?: "enabled" | "disabled"; + }; + secret_scanning_push_protection?: { + /** @enum {string} */ + status?: "enabled" | "disabled"; + }; + secret_scanning_non_provider_patterns?: { + /** @enum {string} */ + status?: "enabled" | "disabled"; + }; + secret_scanning_ai_detection?: { + /** @enum {string} */ + status?: "enabled" | "disabled"; + }; + } | null; + /** + * Minimal Repository + * @description Minimal Repository + */ + "minimal-repository": { + /** + * Format: int64 + * @example 1296269 + */ + id: number; + /** @example MDEwOlJlcG9zaXRvcnkxMjk2MjY5 */ + node_id: string; + /** @example Hello-World */ + name: string; + /** @example octocat/Hello-World */ + full_name: string; + owner: components["schemas"]["simple-user"]; + private: boolean; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World + */ + html_url: string; + /** @example This your first repo! */ + description: string | null; + fork: boolean; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World + */ + url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref} */ + archive_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/assignees{/user} */ + assignees_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha} */ + blobs_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/branches{/branch} */ + branches_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator} */ + collaborators_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/comments{/number} */ + comments_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/commits{/sha} */ + commits_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head} */ + compare_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/contents/{+path} */ + contents_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/contributors + */ + contributors_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/deployments + */ + deployments_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/downloads + */ + downloads_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/events + */ + events_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/forks + */ + forks_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/git/commits{/sha} */ + git_commits_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/git/refs{/sha} */ + git_refs_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/git/tags{/sha} */ + git_tags_url: string; + git_url?: string; + /** @example http://api.github.com/repos/octocat/Hello-World/issues/comments{/number} */ + issue_comment_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/issues/events{/number} */ + issue_events_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/issues{/number} */ + issues_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/keys{/key_id} */ + keys_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/labels{/name} */ + labels_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/languages + */ + languages_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/merges + */ + merges_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/milestones{/number} */ + milestones_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating} */ + notifications_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/pulls{/number} */ + pulls_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/releases{/id} */ + releases_url: string; + ssh_url?: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/stargazers + */ + stargazers_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/statuses/{sha} */ + statuses_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/subscribers + */ + subscribers_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/subscription + */ + subscription_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/tags + */ + tags_url: string; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/teams + */ + teams_url: string; + /** @example http://api.github.com/repos/octocat/Hello-World/git/trees{/sha} */ + trees_url: string; + clone_url?: string; + mirror_url?: string | null; + /** + * Format: uri + * @example http://api.github.com/repos/octocat/Hello-World/hooks + */ + hooks_url: string; + svn_url?: string; + homepage?: string | null; + language?: string | null; + forks_count?: number; + stargazers_count?: number; + watchers_count?: number; + /** @description The size of the repository, in kilobytes. Size is calculated hourly. When a repository is initially created, the size is 0. */ + size?: number; + default_branch?: string; + open_issues_count?: number; + is_template?: boolean; + topics?: string[]; + has_issues?: boolean; + has_projects?: boolean; + has_wiki?: boolean; + has_pages?: boolean; + has_downloads?: boolean; + has_discussions?: boolean; + archived?: boolean; + disabled?: boolean; + visibility?: string; + /** + * Format: date-time + * @example 2011-01-26T19:06:43Z + */ + pushed_at?: string | null; + /** + * Format: date-time + * @example 2011-01-26T19:01:12Z + */ + created_at?: string | null; + /** + * Format: date-time + * @example 2011-01-26T19:14:43Z + */ + updated_at?: string | null; + permissions?: { + admin?: boolean; + maintain?: boolean; + push?: boolean; + triage?: boolean; + pull?: boolean; + }; + /** @example admin */ + role_name?: string; + temp_clone_token?: string; + delete_branch_on_merge?: boolean; + subscribers_count?: number; + network_count?: number; + code_of_conduct?: components["schemas"]["code-of-conduct"]; + license?: { + key?: string; + name?: string; + spdx_id?: string; + url?: string; + node_id?: string; + } | null; + /** @example 0 */ + forks?: number; + /** @example 0 */ + open_issues?: number; + /** @example 0 */ + watchers?: number; + allow_forking?: boolean; + /** @example false */ + web_commit_signoff_required?: boolean; + security_and_analysis?: components["schemas"]["security-and-analysis"]; + }; + /** + * Empty Object + * @description An object without any properties. + */ + "empty-object": Record; + /** + * Codespace machine + * @description A description of the machine powering a codespace. + */ + "nullable-codespace-machine": { + /** + * @description The name of the machine. + * @example standardLinux + */ + name: string; + /** + * @description The display name of the machine includes cores, memory, and storage. + * @example 4 cores, 16 GB RAM, 64 GB storage + */ + display_name: string; + /** + * @description The operating system of the machine. + * @example linux + */ + operating_system: string; + /** + * @description How much storage is available to the codespace. + * @example 68719476736 + */ + storage_in_bytes: number; + /** + * @description How much memory is available to the codespace. + * @example 17179869184 + */ + memory_in_bytes: number; + /** + * @description How many cores are available to the codespace. + * @example 4 + */ + cpus: number; + /** + * @description Whether a prebuild is currently available when creating a codespace for this machine and repository. If a branch was not specified as a ref, the default branch will be assumed. Value will be "null" if prebuilds are not supported or prebuild availability could not be determined. Value will be "none" if no prebuild is available. Latest values "ready" and "in_progress" indicate the prebuild availability status. + * @example ready + * @enum {string|null} + */ + prebuild_availability: "none" | "ready" | "in_progress" | null; + } | null; + /** + * Codespace + * @description A codespace. + */ + codespace: { + /** + * Format: int64 + * @example 1 + */ + id: number; + /** + * @description Automatically generated name of this codespace. + * @example monalisa-octocat-hello-world-g4wpq6h95q + */ + name: string; + /** + * @description Display name for this codespace. + * @example bookish space pancake + */ + display_name?: string | null; + /** + * @description UUID identifying this codespace's environment. + * @example 26a7c758-7299-4a73-b978-5a92a7ae98a0 + */ + environment_id: string | null; + owner: components["schemas"]["simple-user"]; + billable_owner: components["schemas"]["simple-user"]; + repository: components["schemas"]["minimal-repository"]; + machine: components["schemas"]["nullable-codespace-machine"]; + /** + * @description Path to devcontainer.json from repo root used to create Codespace. + * @example .devcontainer/example/devcontainer.json + */ + devcontainer_path?: string | null; + /** + * @description Whether the codespace was created from a prebuild. + * @example false + */ + prebuild: boolean | null; + /** + * Format: date-time + * @example 2011-01-26T19:01:12Z + */ + created_at: string; + /** + * Format: date-time + * @example 2011-01-26T19:01:12Z + */ + updated_at: string; + /** + * Format: date-time + * @description Last known time this codespace was started. + * @example 2011-01-26T19:01:12Z + */ + last_used_at: string; + /** + * @description State of this codespace. + * @example Available + * @enum {string} + */ + state: "Unknown" | "Created" | "Queued" | "Provisioning" | "Available" | "Awaiting" | "Unavailable" | "Deleted" | "Moved" | "Shutdown" | "Archived" | "Starting" | "ShuttingDown" | "Failed" | "Exporting" | "Updating" | "Rebuilding"; + /** + * Format: uri + * @description API URL for this codespace. + */ + url: string; + /** @description Details about the codespace's git repository. */ + git_status: { + /** + * @description The number of commits the local repository is ahead of the remote. + * @example 0 + */ + ahead?: number; + /** + * @description The number of commits the local repository is behind the remote. + * @example 0 + */ + behind?: number; + /** @description Whether the local repository has unpushed changes. */ + has_unpushed_changes?: boolean; + /** @description Whether the local repository has uncommitted changes. */ + has_uncommitted_changes?: boolean; + /** + * @description The current branch (or SHA if in detached HEAD state) of the local repository. + * @example main + */ + ref?: string; + }; + /** + * @description The initally assigned location of a new codespace. + * @example WestUs2 + * @enum {string} + */ + location: "EastUs" | "SouthEastAsia" | "WestEurope" | "WestUs2"; + /** + * @description The number of minutes of inactivity after which this codespace will be automatically stopped. + * @example 60 + */ + idle_timeout_minutes: number | null; + /** + * Format: uri + * @description URL to access this codespace on the web. + */ + web_url: string; + /** + * Format: uri + * @description API URL to access available alternate machine types for this codespace. + */ + machines_url: string; + /** + * Format: uri + * @description API URL to start this codespace. + */ + start_url: string; + /** + * Format: uri + * @description API URL to stop this codespace. + */ + stop_url: string; + /** + * Format: uri + * @description API URL to publish this codespace to a new repository. + */ + publish_url?: string | null; + /** + * Format: uri + * @description API URL for the Pull Request associated with this codespace, if any. + */ + pulls_url: string | null; + recent_folders: string[]; + runtime_constraints?: { + /** @description The privacy settings a user can select from when forwarding a port. */ + allowed_port_privacy_settings?: string[] | null; + }; + /** @description Whether or not a codespace has a pending async operation. This would mean that the codespace is temporarily unavailable. The only thing that you can do with a codespace in this state is delete it. */ + pending_operation?: boolean | null; + /** @description Text to show user when codespace is disabled by a pending operation */ + pending_operation_disabled_reason?: string | null; + /** @description Text to show user when codespace idle timeout minutes has been overriden by an organization policy */ + idle_timeout_notice?: string | null; + /** + * @description Duration in minutes after codespace has gone idle in which it will be deleted. Must be integer minutes between 0 and 43200 (30 days). + * @example 60 + */ + retention_period_minutes?: number | null; + /** + * Format: date-time + * @description When a codespace will be auto-deleted based on the "retention_period_minutes" and "last_used_at" + * @example 2011-01-26T20:01:12Z + */ + retention_expires_at?: string | null; + /** + * @description The text to display to a user when a codespace has been stopped for a potentially actionable reason. + * @example you've used 100% of your spending limit for Codespaces + */ + last_known_stop_notice?: string | null; + }; + /** + * Team Simple + * @description Groups of organization members that gives permissions on specified repositories. + */ + "nullable-team-simple": { + /** + * @description Unique identifier of the team + * @example 1 + */ + id: number; + /** @example MDQ6VGVhbTE= */ + node_id: string; + /** + * Format: uri + * @description URL for the team + * @example https://api.github.com/organizations/1/team/1 + */ + url: string; + /** @example https://api.github.com/organizations/1/team/1/members{/member} */ + members_url: string; + /** + * @description Name of the team + * @example Justice League + */ + name: string; + /** + * @description Description of the team + * @example A great team. + */ + description: string | null; + /** + * @description Permission that the team will have for its repositories + * @example admin + */ + permission: string; + /** + * @description The level of privacy this team should have + * @example closed + */ + privacy?: string; + /** + * @description The notification setting the team has set + * @example notifications_enabled + */ + notification_setting?: string; + /** + * Format: uri + * @example https://github.com/orgs/rails/teams/core + */ + html_url: string; + /** + * Format: uri + * @example https://api.github.com/organizations/1/team/1/repos + */ + repositories_url: string; + /** @example justice-league */ + slug: string; + /** + * @description Distinguished Name (DN) that team maps to within LDAP environment + * @example uid=example,ou=users,dc=github,dc=com + */ + ldap_dn?: string; + } | null; + /** + * Team + * @description Groups of organization members that gives permissions on specified repositories. + */ + team: { + id: number; + node_id: string; + name: string; + slug: string; + description: string | null; + privacy?: string; + notification_setting?: string; + permission: string; + permissions?: { + pull: boolean; + triage: boolean; + push: boolean; + maintain: boolean; + admin: boolean; + }; + /** Format: uri */ + url: string; + /** + * Format: uri + * @example https://github.com/orgs/rails/teams/core + */ + html_url: string; + members_url: string; + /** Format: uri */ + repositories_url: string; + parent: components["schemas"]["nullable-team-simple"]; + }; + /** + * Team Simple + * @description Groups of organization members that gives permissions on specified repositories. + */ + "team-simple": { + /** + * @description Unique identifier of the team + * @example 1 + */ + id: number; + /** @example MDQ6VGVhbTE= */ + node_id: string; + /** + * Format: uri + * @description URL for the team + * @example https://api.github.com/organizations/1/team/1 + */ + url: string; + /** @example https://api.github.com/organizations/1/team/1/members{/member} */ + members_url: string; + /** + * @description Name of the team + * @example Justice League + */ + name: string; + /** + * @description Description of the team + * @example A great team. + */ + description: string | null; + /** + * @description Permission that the team will have for its repositories + * @example admin + */ + permission: string; + /** + * @description The level of privacy this team should have + * @example closed + */ + privacy?: string; + /** + * @description The notification setting the team has set + * @example notifications_enabled + */ + notification_setting?: string; + /** + * Format: uri + * @example https://github.com/orgs/rails/teams/core + */ + html_url: string; + /** + * Format: uri + * @example https://api.github.com/organizations/1/team/1/repos + */ + repositories_url: string; + /** @example justice-league */ + slug: string; + /** + * @description Distinguished Name (DN) that team maps to within LDAP environment + * @example uid=example,ou=users,dc=github,dc=com + */ + ldap_dn?: string; + }; + /** + * Reaction + * @description Reactions to conversations provide a way to help people express their feelings more simply and effectively. + */ + reaction: { + /** @example 1 */ + id: number; + /** @example MDg6UmVhY3Rpb24x */ + node_id: string; + user: components["schemas"]["nullable-simple-user"]; + /** + * @description The reaction to use + * @example heart + * @enum {string} + */ + content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + /** + * Format: date-time + * @example 2016-05-20T20:09:31Z + */ + created_at: string; + }; + /** + * Git User + * @description Metaproperties for Git author/committer information. + */ + "nullable-git-user": { + /** @example "Chris Wanstrath" */ + name?: string; + /** @example "chris@ozmm.org" */ + email?: string; + /** @example "2007-10-29T02:42:39.000-07:00" */ + date?: string; + } | null; + /** Verification */ + verification: { + verified: boolean; + reason: string; + payload: string | null; + signature: string | null; + verified_at?: string | null; + }; + /** + * Diff Entry + * @description Diff Entry + */ + "diff-entry": { + /** @example bbcd538c8e72b8c175046e27cc8f907076331401 */ + sha: string; + /** @example file1.txt */ + filename: string; + /** + * @example added + * @enum {string} + */ + status: "added" | "removed" | "modified" | "renamed" | "copied" | "changed" | "unchanged"; + /** @example 103 */ + additions: number; + /** @example 21 */ + deletions: number; + /** @example 124 */ + changes: number; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/blob/6dcb09b5b57875f334f61aebed695e2e4193db5e/file1.txt + */ + blob_url: string; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/raw/6dcb09b5b57875f334f61aebed695e2e4193db5e/file1.txt + */ + raw_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/contents/file1.txt?ref=6dcb09b5b57875f334f61aebed695e2e4193db5e + */ + contents_url: string; + /** @example @@ -132,7 +132,7 @@ module Test @@ -1000,7 +1000,7 @@ module Test */ + patch?: string; + /** @example file.txt */ + previous_filename?: string; + }; + /** + * Commit + * @description Commit + */ + commit: { + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e + */ + url: string; + /** @example 6dcb09b5b57875f334f61aebed695e2e4193db5e */ + sha: string; + /** @example MDY6Q29tbWl0NmRjYjA5YjViNTc4NzVmMzM0ZjYxYWViZWQ2OTVlMmU0MTkzZGI1ZQ== */ + node_id: string; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/commit/6dcb09b5b57875f334f61aebed695e2e4193db5e + */ + html_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e/comments + */ + comments_url: string; + commit: { + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e + */ + url: string; + author: components["schemas"]["nullable-git-user"]; + committer: components["schemas"]["nullable-git-user"]; + /** @example Fix all the bugs */ + message: string; + /** @example 0 */ + comment_count: number; + tree: { + /** @example 827efc6d56897b048c772eb4087f854f46256132 */ + sha: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/tree/827efc6d56897b048c772eb4087f854f46256132 + */ + url: string; + }; + verification?: components["schemas"]["verification"]; + }; + author: (components["schemas"]["simple-user"] | components["schemas"]["empty-object"]) | null; + committer: (components["schemas"]["simple-user"] | components["schemas"]["empty-object"]) | null; + parents: { + /** @example 7638417db6d59f3c431d3e1f261cc637155684cd */ + sha: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/commits/7638417db6d59f3c431d3e1f261cc637155684cd + */ + url: string; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/commit/7638417db6d59f3c431d3e1f261cc637155684cd + */ + html_url?: string; + }[]; + stats?: { + additions?: number; + deletions?: number; + total?: number; + }; + files?: components["schemas"]["diff-entry"][]; + }; + /** + * Link + * @description Hypermedia Link + */ + link: { + href: string; + }; + /** + * Auto merge + * @description The status of auto merging a pull request. + */ + "auto-merge": { + enabled_by: components["schemas"]["simple-user"]; + /** + * @description The merge method to use. + * @enum {string} + */ + merge_method: "merge" | "squash" | "rebase"; + /** @description Title for the merge commit message. */ + commit_title: string; + /** @description Commit message for the merge commit. */ + commit_message: string; + } | null; + /** + * Pull Request Simple + * @description Pull Request Simple + */ + "pull-request-simple": { + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/pulls/1347 + */ + url: string; + /** + * Format: int64 + * @example 1 + */ + id: number; + /** @example MDExOlB1bGxSZXF1ZXN0MQ== */ + node_id: string; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/pull/1347 + */ + html_url: string; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/pull/1347.diff + */ + diff_url: string; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/pull/1347.patch + */ + patch_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/issues/1347 + */ + issue_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/pulls/1347/commits + */ + commits_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/pulls/1347/comments + */ + review_comments_url: string; + /** @example https://api.github.com/repos/octocat/Hello-World/pulls/comments{/number} */ + review_comment_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/issues/1347/comments + */ + comments_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/statuses/6dcb09b5b57875f334f61aebed695e2e4193db5e + */ + statuses_url: string; + /** @example 1347 */ + number: number; + /** @example open */ + state: string; + /** @example true */ + locked: boolean; + /** @example new-feature */ + title: string; + user: components["schemas"]["nullable-simple-user"]; + /** @example Please pull these awesome changes */ + body: string | null; + labels: { + /** Format: int64 */ + id: number; + node_id: string; + url: string; + name: string; + description: string; + color: string; + default: boolean; + }[]; + milestone: components["schemas"]["nullable-milestone"]; + /** @example too heated */ + active_lock_reason?: string | null; + /** + * Format: date-time + * @example 2011-01-26T19:01:12Z + */ + created_at: string; + /** + * Format: date-time + * @example 2011-01-26T19:01:12Z + */ + updated_at: string; + /** + * Format: date-time + * @example 2011-01-26T19:01:12Z + */ + closed_at: string | null; + /** + * Format: date-time + * @example 2011-01-26T19:01:12Z + */ + merged_at: string | null; + /** @example e5bd3914e2e596debea16f433f57875b5b90bcd6 */ + merge_commit_sha: string | null; + assignee: components["schemas"]["nullable-simple-user"]; + assignees?: components["schemas"]["simple-user"][] | null; + requested_reviewers?: components["schemas"]["simple-user"][] | null; + requested_teams?: components["schemas"]["team"][] | null; + head: { + label: string; + ref: string; + repo: components["schemas"]["repository"]; + sha: string; + user: components["schemas"]["nullable-simple-user"]; + }; + base: { + label: string; + ref: string; + repo: components["schemas"]["repository"]; + sha: string; + user: components["schemas"]["nullable-simple-user"]; + }; + _links: { + comments: components["schemas"]["link"]; + commits: components["schemas"]["link"]; + statuses: components["schemas"]["link"]; + html: components["schemas"]["link"]; + issue: components["schemas"]["link"]; + review_comments: components["schemas"]["link"]; + review_comment: components["schemas"]["link"]; + self: components["schemas"]["link"]; + }; + author_association: components["schemas"]["author-association"]; + auto_merge: components["schemas"]["auto-merge"]; + /** + * @description Indicates whether or not the pull request is a draft. + * @example false + */ + draft?: boolean; + }; + /** + * Pull Request Review Comment + * @description Pull Request Review Comments are comments on a portion of the Pull Request's diff. + */ + "pull-request-review-comment": { + /** + * @description URL for the pull request review comment + * @example https://api.github.com/repos/octocat/Hello-World/pulls/comments/1 + */ + url: string; + /** + * Format: int64 + * @description The ID of the pull request review to which the comment belongs. + * @example 42 + */ + pull_request_review_id: number | null; + /** + * Format: int64 + * @description The ID of the pull request review comment. + * @example 1 + */ + id: number; + /** + * @description The node ID of the pull request review comment. + * @example MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDEw + */ + node_id: string; + /** + * @description The diff of the line that the comment refers to. + * @example @@ -16,33 +16,40 @@ public class Connection : IConnection... + */ + diff_hunk: string; + /** + * @description The relative path of the file to which the comment applies. + * @example config/database.yaml + */ + path: string; + /** + * @description The line index in the diff to which the comment applies. This field is closing down; use `line` instead. + * @example 1 + */ + position?: number; + /** + * @description The index of the original line in the diff to which the comment applies. This field is closing down; use `original_line` instead. + * @example 4 + */ + original_position?: number; + /** + * @description The SHA of the commit to which the comment applies. + * @example 6dcb09b5b57875f334f61aebed695e2e4193db5e + */ + commit_id: string; + /** + * @description The SHA of the original commit to which the comment applies. + * @example 9c48853fa3dc5c1c3d6f1f1cd1f2743e72652840 + */ + original_commit_id: string; + /** + * @description The comment ID to reply to. + * @example 8 + */ + in_reply_to_id?: number; + user: components["schemas"]["simple-user"]; + /** + * @description The text of the comment. + * @example We should probably include a check for null values here. + */ + body: string; + /** + * Format: date-time + * @example 2011-04-14T16:00:49Z + */ + created_at: string; + /** + * Format: date-time + * @example 2011-04-14T16:00:49Z + */ + updated_at: string; + /** + * Format: uri + * @description HTML URL for the pull request review comment. + * @example https://github.com/octocat/Hello-World/pull/1#discussion-diff-1 + */ + html_url: string; + /** + * Format: uri + * @description URL for the pull request that the review comment belongs to. + * @example https://api.github.com/repos/octocat/Hello-World/pulls/1 + */ + pull_request_url: string; + author_association: components["schemas"]["author-association"]; + _links: { + self: { + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/pulls/comments/1 + */ + href: string; + }; + html: { + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/pull/1#discussion-diff-1 + */ + href: string; + }; + pull_request: { + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/pulls/1 + */ + href: string; + }; + }; + /** + * @description The first line of the range for a multi-line comment. + * @example 2 + */ + start_line?: number | null; + /** + * @description The first line of the range for a multi-line comment. + * @example 2 + */ + original_start_line?: number | null; + /** + * @description The side of the first line of the range for a multi-line comment. + * @default RIGHT + * @enum {string|null} + */ + start_side: "LEFT" | "RIGHT" | null; + /** + * @description The line of the blob to which the comment applies. The last line of the range for a multi-line comment + * @example 2 + */ + line?: number; + /** + * @description The line of the blob to which the comment applies. The last line of the range for a multi-line comment + * @example 2 + */ + original_line?: number; + /** + * @description The side of the diff to which the comment applies. The side of the last line of the range for a multi-line comment + * @default RIGHT + * @enum {string} + */ + side: "LEFT" | "RIGHT"; + /** + * @description The level at which the comment is targeted, can be a diff line or a file. + * @enum {string} + */ + subject_type?: "line" | "file"; + reactions?: components["schemas"]["reaction-rollup"]; + /** @example "

comment body

" */ + body_html?: string; + /** @example "comment body" */ + body_text?: string; + }; + /** + * Pull Request + * @description Pull requests let you tell others about changes you've pushed to a repository on GitHub. Once a pull request is sent, interested parties can review the set of changes, discuss potential modifications, and even push follow-up commits if necessary. + */ + "pull-request": { + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/pulls/1347 + */ + url: string; + /** + * Format: int64 + * @example 1 + */ + id: number; + /** @example MDExOlB1bGxSZXF1ZXN0MQ== */ + node_id: string; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/pull/1347 + */ + html_url: string; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/pull/1347.diff + */ + diff_url: string; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/pull/1347.patch + */ + patch_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/issues/1347 + */ + issue_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/pulls/1347/commits + */ + commits_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/pulls/1347/comments + */ + review_comments_url: string; + /** @example https://api.github.com/repos/octocat/Hello-World/pulls/comments{/number} */ + review_comment_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/issues/1347/comments + */ + comments_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/statuses/6dcb09b5b57875f334f61aebed695e2e4193db5e + */ + statuses_url: string; + /** + * @description Number uniquely identifying the pull request within its repository. + * @example 42 + */ + number: number; + /** + * @description State of this Pull Request. Either `open` or `closed`. + * @example open + * @enum {string} + */ + state: "open" | "closed"; + /** @example true */ + locked: boolean; + /** + * @description The title of the pull request. + * @example Amazing new feature + */ + title: string; + user: components["schemas"]["simple-user"]; + /** @example Please pull these awesome changes */ + body: string | null; + labels: { + /** Format: int64 */ + id: number; + node_id: string; + url: string; + name: string; + description: string | null; + color: string; + default: boolean; + }[]; + milestone: components["schemas"]["nullable-milestone"]; + /** @example too heated */ + active_lock_reason?: string | null; + /** + * Format: date-time + * @example 2011-01-26T19:01:12Z + */ + created_at: string; + /** + * Format: date-time + * @example 2011-01-26T19:01:12Z + */ + updated_at: string; + /** + * Format: date-time + * @example 2011-01-26T19:01:12Z + */ + closed_at: string | null; + /** + * Format: date-time + * @example 2011-01-26T19:01:12Z + */ + merged_at: string | null; + /** @example e5bd3914e2e596debea16f433f57875b5b90bcd6 */ + merge_commit_sha: string | null; + assignee: components["schemas"]["nullable-simple-user"]; + assignees?: components["schemas"]["simple-user"][] | null; + requested_reviewers?: components["schemas"]["simple-user"][] | null; + requested_teams?: components["schemas"]["team-simple"][] | null; + head: { + label: string; + ref: string; + repo: components["schemas"]["repository"]; + sha: string; + user: components["schemas"]["simple-user"]; + }; + base: { + label: string; + ref: string; + repo: components["schemas"]["repository"]; + sha: string; + user: components["schemas"]["simple-user"]; + }; + _links: { + comments: components["schemas"]["link"]; + commits: components["schemas"]["link"]; + statuses: components["schemas"]["link"]; + html: components["schemas"]["link"]; + issue: components["schemas"]["link"]; + review_comments: components["schemas"]["link"]; + review_comment: components["schemas"]["link"]; + self: components["schemas"]["link"]; + }; + author_association: components["schemas"]["author-association"]; + auto_merge: components["schemas"]["auto-merge"]; + /** + * @description Indicates whether or not the pull request is a draft. + * @example false + */ + draft?: boolean; + merged: boolean; + /** @example true */ + mergeable: boolean | null; + /** @example true */ + rebaseable?: boolean | null; + /** @example clean */ + mergeable_state: string; + merged_by: components["schemas"]["nullable-simple-user"]; + /** @example 10 */ + comments: number; + /** @example 0 */ + review_comments: number; + /** + * @description Indicates whether maintainers can modify the pull request. + * @example true + */ + maintainer_can_modify: boolean; + /** @example 3 */ + commits: number; + /** @example 100 */ + additions: number; + /** @example 3 */ + deletions: number; + /** @example 5 */ + changed_files: number; + }; + /** + * Pull Request Merge Result + * @description Pull Request Merge Result + */ + "pull-request-merge-result": { + sha: string; + merged: boolean; + message: string; + }; + /** + * Pull Request Review Request + * @description Pull Request Review Request + */ + "pull-request-review-request": { + users: components["schemas"]["simple-user"][]; + teams: components["schemas"]["team"][]; + }; + /** + * Pull Request Review + * @description Pull Request Reviews are reviews on pull requests. + */ + "pull-request-review": { + /** + * Format: int64 + * @description Unique identifier of the review + * @example 42 + */ + id: number; + /** @example MDE3OlB1bGxSZXF1ZXN0UmV2aWV3ODA= */ + node_id: string; + user: components["schemas"]["nullable-simple-user"]; + /** + * @description The text of the review. + * @example This looks great. + */ + body: string; + /** @example CHANGES_REQUESTED */ + state: string; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/pull/12#pullrequestreview-80 + */ + html_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/pulls/12 + */ + pull_request_url: string; + _links: { + html: { + href: string; + }; + pull_request: { + href: string; + }; + }; + /** Format: date-time */ + submitted_at?: string; + /** + * @description A commit SHA for the review. If the commit object was garbage collected or forcibly deleted, then it no longer exists in Git and this value will be `null`. + * @example 54bb654c9e6025347f57900a4a5c2313a96b8035 + */ + commit_id: string | null; + body_html?: string; + body_text?: string; + author_association: components["schemas"]["author-association"]; + }; + /** + * Legacy Review Comment + * @description Legacy Review Comment + */ + "review-comment": { + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/pulls/comments/1 + */ + url: string; + /** + * Format: int64 + * @example 42 + */ + pull_request_review_id: number | null; + /** + * Format: int64 + * @example 10 + */ + id: number; + /** @example MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDEw */ + node_id: string; + /** @example @@ -16,33 +16,40 @@ public class Connection : IConnection... */ + diff_hunk: string; + /** @example file1.txt */ + path: string; + /** @example 1 */ + position: number | null; + /** @example 4 */ + original_position: number; + /** @example 6dcb09b5b57875f334f61aebed695e2e4193db5e */ + commit_id: string; + /** @example 9c48853fa3dc5c1c3d6f1f1cd1f2743e72652840 */ + original_commit_id: string; + /** @example 8 */ + in_reply_to_id?: number; + user: components["schemas"]["nullable-simple-user"]; + /** @example Great stuff */ + body: string; + /** + * Format: date-time + * @example 2011-04-14T16:00:49Z + */ + created_at: string; + /** + * Format: date-time + * @example 2011-04-14T16:00:49Z + */ + updated_at: string; + /** + * Format: uri + * @example https://github.com/octocat/Hello-World/pull/1#discussion-diff-1 + */ + html_url: string; + /** + * Format: uri + * @example https://api.github.com/repos/octocat/Hello-World/pulls/1 + */ + pull_request_url: string; + author_association: components["schemas"]["author-association"]; + _links: { + self: components["schemas"]["link"]; + html: components["schemas"]["link"]; + pull_request: components["schemas"]["link"]; + }; + body_text?: string; + body_html?: string; + reactions?: components["schemas"]["reaction-rollup"]; + /** + * @description The side of the first line of the range for a multi-line comment. + * @default RIGHT + * @enum {string} + */ + side: "LEFT" | "RIGHT"; + /** + * @description The side of the first line of the range for a multi-line comment. + * @default RIGHT + * @enum {string|null} + */ + start_side: "LEFT" | "RIGHT" | null; + /** + * @description The line of the blob to which the comment applies. The last line of the range for a multi-line comment + * @example 2 + */ + line?: number; + /** + * @description The original line of the blob to which the comment applies. The last line of the range for a multi-line comment + * @example 2 + */ + original_line?: number; + /** + * @description The first line of the range for a multi-line comment. + * @example 2 + */ + start_line?: number | null; + /** + * @description The original first line of the range for a multi-line comment. + * @example 2 + */ + original_start_line?: number | null; + }; + }; + responses: { + /** @description Validation failed, or the endpoint has been spammed. */ + validation_failed_simple: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["validation-error-simple"]; + }; + }; + /** @description Resource not found */ + not_found: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["basic-error"]; + }; + }; + /** @description Validation failed, or the endpoint has been spammed. */ + validation_failed: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["validation-error"]; + }; + }; + /** @description Not modified */ + not_modified: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Requires authentication */ + requires_authentication: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["basic-error"]; + }; + }; + /** @description Forbidden */ + forbidden: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["basic-error"]; + }; + }; + /** @description Service unavailable */ + service_unavailable: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + code?: string; + message?: string; + documentation_url?: string; + }; + }; + }; + /** @description Internal Error */ + internal_error: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["basic-error"]; + }; + }; + /** @description Unacceptable */ + unacceptable: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["basic-error"]; + }; + }; + }; + parameters: { + /** @description The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + "per-page": number; + /** @description The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + page: number; + /** @description Only show results that were last updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ + since: string; + /** @description The unique identifier of the comment. */ + "comment-id": number; + /** @description The property to sort the results by. */ + sort: "created" | "updated"; + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: string; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: string; + /** @description The unique identifier of the reaction. */ + "reaction-id": number; + /** @description The number that identifies the pull request. */ + "pull-number": number; + /** @description The unique identifier of the review. */ + "review-id": number; + }; + requestBodies: never; + headers: { + /** @example ; rel="next", ; rel="last" */ + link: string; + }; + pathItems: never; +} +export type $defs = Record; +export interface operations { + "pulls/list": { + parameters: { + query?: { + /** @description Either `open`, `closed`, or `all` to filter by state. */ + state?: "open" | "closed" | "all"; + /** @description Filter pulls by head user or head organization and branch name in the format of `user:ref-name` or `organization:ref-name`. For example: `github:new-script-format` or `octocat:test-branch`. */ + head?: string; + /** @description Filter pulls by base branch name. Example: `gh-pages`. */ + base?: string; + /** @description What to sort results by. `popularity` will sort by the number of comments. `long-running` will sort by date created and will limit the results to pull requests that have been open for more than a month and have had activity within the past month. */ + sort?: "created" | "updated" | "popularity" | "long-running"; + /** @description The direction of the sort. Default: `desc` when sort is `created` or sort is not specified, otherwise `asc`. */ + direction?: "asc" | "desc"; + /** @description The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + per_page?: components["parameters"]["per-page"]; + /** @description The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + page?: components["parameters"]["page"]; + }; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response */ + 200: { + headers: { + Link: components["headers"]["link"]; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-simple"][]; + }; + }; + 304: components["responses"]["not_modified"]; + 422: components["responses"]["validation_failed"]; + }; + }; + "pulls/create": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": { + /** @description The title of the new pull request. Required unless `issue` is specified. */ + title?: string; + /** @description The name of the branch where your changes are implemented. For cross-repository pull requests in the same network, namespace `head` with a user like this: `username:branch`. */ + head: string; + /** + * Format: repo.nwo + * @description The name of the repository where the changes in the pull request were made. This field is required for cross-repository pull requests if both repositories are owned by the same organization. + * @example octo-org/octo-repo + */ + head_repo?: string; + /** @description The name of the branch you want the changes pulled into. This should be an existing branch on the current repository. You cannot submit a pull request to one repository that requests a merge to a base of another repository. */ + base: string; + /** @description The contents of the pull request. */ + body?: string; + /** @description Indicates whether [maintainers can modify](https://docs.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request. */ + maintainer_can_modify?: boolean; + /** @description Indicates whether the pull request is a draft. See "[Draft Pull Requests](https://docs.github.com/articles/about-pull-requests#draft-pull-requests)" in the GitHub Help documentation to learn more. */ + draft?: boolean; + /** + * Format: int64 + * @description An issue in the repository to convert to a pull request. The issue title, body, and comments will become the title, body, and comments on the new pull request. Required unless `title` is specified. + * @example 1 + */ + issue?: number; + }; + }; + }; + responses: { + /** @description Response */ + 201: { + headers: { + /** @example https://api.github.com/repos/octocat/Hello-World/pulls/1347 */ + Location?: string; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request"]; + }; + }; + 403: components["responses"]["forbidden"]; + 422: components["responses"]["validation_failed"]; + }; + }; + "pulls/list-review-comments-for-repo": { + parameters: { + query?: { + sort?: "created" | "updated" | "created_at"; + /** @description The direction to sort results. Ignored without `sort` parameter. */ + direction?: "asc" | "desc"; + /** @description Only show results that were last updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ + since?: components["parameters"]["since"]; + /** @description The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + per_page?: components["parameters"]["per-page"]; + /** @description The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + page?: components["parameters"]["page"]; + }; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response */ + 200: { + headers: { + Link: components["headers"]["link"]; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review-comment"][]; + }; + }; + }; + }; + "pulls/get-review-comment": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The unique identifier of the comment. */ + comment_id: components["parameters"]["comment-id"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review-comment"]; + }; + }; + 404: components["responses"]["not_found"]; + }; + }; + "pulls/delete-review-comment": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The unique identifier of the comment. */ + comment_id: components["parameters"]["comment-id"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + 404: components["responses"]["not_found"]; + }; + }; + "pulls/update-review-comment": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The unique identifier of the comment. */ + comment_id: components["parameters"]["comment-id"]; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": { + /** @description The text of the reply to the review comment. */ + body: string; + }; + }; + }; + responses: { + /** @description Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review-comment"]; + }; + }; + }; + }; + "reactions/list-for-pull-request-review-comment": { + parameters: { + query?: { + /** @description Returns a single [reaction type](https://docs.github.com/rest/reactions/reactions#about-reactions). Omit this parameter to list all reactions to a pull request review comment. */ + content?: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + /** @description The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + per_page?: components["parameters"]["per-page"]; + /** @description The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + page?: components["parameters"]["page"]; + }; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The unique identifier of the comment. */ + comment_id: components["parameters"]["comment-id"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response */ + 200: { + headers: { + Link: components["headers"]["link"]; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["reaction"][]; + }; + }; + 404: components["responses"]["not_found"]; + }; + }; + "reactions/create-for-pull-request-review-comment": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The unique identifier of the comment. */ + comment_id: components["parameters"]["comment-id"]; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": { + /** + * @description The [reaction type](https://docs.github.com/rest/reactions/reactions#about-reactions) to add to the pull request review comment. + * @enum {string} + */ + content: "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes"; + }; + }; + }; + responses: { + /** @description Reaction exists */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["reaction"]; + }; + }; + /** @description Reaction created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["reaction"]; + }; + }; + 422: components["responses"]["validation_failed"]; + }; + }; + "reactions/delete-for-pull-request-comment": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The unique identifier of the comment. */ + comment_id: components["parameters"]["comment-id"]; + /** @description The unique identifier of the reaction. */ + reaction_id: components["parameters"]["reaction-id"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "pulls/get": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Pass the appropriate [media type](https://docs.github.com/rest/using-the-rest-api/getting-started-with-the-rest-api#media-types) to fetch diff and patch formats. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request"]; + }; + }; + 304: components["responses"]["not_modified"]; + 404: components["responses"]["not_found"]; + 406: components["responses"]["unacceptable"]; + 500: components["responses"]["internal_error"]; + 503: components["responses"]["service_unavailable"]; + }; + }; + "pulls/update": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @description The title of the pull request. */ + title?: string; + /** @description The contents of the pull request. */ + body?: string; + /** + * @description State of this Pull Request. Either `open` or `closed`. + * @enum {string} + */ + state?: "open" | "closed"; + /** @description The name of the branch you want your changes pulled into. This should be an existing branch on the current repository. You cannot update the base branch on a pull request to point to another repository. */ + base?: string; + /** @description Indicates whether [maintainers can modify](https://docs.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) the pull request. */ + maintainer_can_modify?: boolean; + }; + }; + }; + responses: { + /** @description Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request"]; + }; + }; + 403: components["responses"]["forbidden"]; + 422: components["responses"]["validation_failed"]; + }; + }; + "codespaces/create-with-pr-for-authenticated-user": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": { + /** @description The requested location for a new codespace. Best efforts are made to respect this upon creation. Assigned by IP if not provided. */ + location?: string; + /** + * @description The geographic area for this codespace. If not specified, the value is assigned by IP. This property replaces `location`, which is closing down. + * @enum {string} + */ + geo?: "EuropeWest" | "SoutheastAsia" | "UsEast" | "UsWest"; + /** @description IP for location auto-detection when proxying a request */ + client_ip?: string; + /** @description Machine type to use for this codespace */ + machine?: string; + /** @description Path to devcontainer.json config to use for this codespace */ + devcontainer_path?: string; + /** @description Whether to authorize requested permissions from devcontainer.json */ + multi_repo_permissions_opt_out?: boolean; + /** @description Working directory for this codespace */ + working_directory?: string; + /** @description Time in minutes before codespace stops from inactivity */ + idle_timeout_minutes?: number; + /** @description Display name for this codespace */ + display_name?: string; + /** @description Duration in minutes after codespace has gone idle in which it will be deleted. Must be integer minutes between 0 and 43200 (30 days). */ + retention_period_minutes?: number; + } | null; + }; + }; + responses: { + /** @description Response when the codespace was successfully created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["codespace"]; + }; + }; + /** @description Response when the codespace creation partially failed but is being retried in the background */ + 202: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["codespace"]; + }; + }; + 401: components["responses"]["requires_authentication"]; + 403: components["responses"]["forbidden"]; + 404: components["responses"]["not_found"]; + 503: components["responses"]["service_unavailable"]; + }; + }; + "pulls/list-review-comments": { + parameters: { + query?: { + /** @description The property to sort the results by. */ + sort?: components["parameters"]["sort"]; + /** @description The direction to sort results. Ignored without `sort` parameter. */ + direction?: "asc" | "desc"; + /** @description Only show results that were last updated after the given time. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. */ + since?: components["parameters"]["since"]; + /** @description The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + per_page?: components["parameters"]["per-page"]; + /** @description The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + page?: components["parameters"]["page"]; + }; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response */ + 200: { + headers: { + Link: components["headers"]["link"]; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review-comment"][]; + }; + }; + }; + }; + "pulls/create-review-comment": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": { + /** @description The text of the review comment. */ + body: string; + /** @description The SHA of the commit needing a comment. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the `position`. */ + commit_id: string; + /** @description The relative path to the file that necessitates a comment. */ + path: string; + /** + * @deprecated + * @description **This parameter is closing down. Use `line` instead**. The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. The position value equals the number of lines down from the first "@@" hunk header in the file you want to add a comment. The line just below the "@@" line is position 1, the next line is position 2, and so on. The position in the diff continues to increase through lines of whitespace and additional hunks until the beginning of a new file. + */ + position?: number; + /** + * @description In a split diff view, the side of the diff that the pull request's changes appear on. Can be `LEFT` or `RIGHT`. Use `LEFT` for deletions that appear in red. Use `RIGHT` for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. For more information, see "[Diff view options](https://docs.github.com/articles/about-comparing-branches-in-pull-requests#diff-view-options)" in the GitHub Help documentation. + * @enum {string} + */ + side?: "LEFT" | "RIGHT"; + /** @description **Required unless using `subject_type:file`**. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to. */ + line?: number; + /** @description **Required when using multi-line comments unless using `in_reply_to`**. The `start_line` is the first line in the pull request diff that your multi-line comment applies to. To learn more about multi-line comments, see "[Commenting on a pull request](https://docs.github.com/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. */ + start_line?: number; + /** + * @description **Required when using multi-line comments unless using `in_reply_to`**. The `start_side` is the starting side of the diff that the comment applies to. Can be `LEFT` or `RIGHT`. To learn more about multi-line comments, see "[Commenting on a pull request](https://docs.github.com/articles/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request)" in the GitHub Help documentation. See `side` in this table for additional context. + * @enum {string} + */ + start_side?: "LEFT" | "RIGHT" | "side"; + /** + * @description The ID of the review comment to reply to. To find the ID of a review comment with ["List review comments on a pull request"](#list-review-comments-on-a-pull-request). When specified, all parameters other than `body` in the request body are ignored. + * @example 2 + */ + in_reply_to?: number; + /** + * @description The level at which the comment is targeted. + * @enum {string} + */ + subject_type?: "line" | "file"; + }; + }; + }; + responses: { + /** @description Response */ + 201: { + headers: { + /** @example https://api.github.com/repos/octocat/Hello-World/pulls/comments/1 */ + Location?: string; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review-comment"]; + }; + }; + 403: components["responses"]["forbidden"]; + 422: components["responses"]["validation_failed"]; + }; + }; + "pulls/create-reply-for-review-comment": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + /** @description The unique identifier of the comment. */ + comment_id: components["parameters"]["comment-id"]; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": { + /** @description The text of the review comment. */ + body: string; + }; + }; + }; + responses: { + /** @description Response */ + 201: { + headers: { + /** @example https://api.github.com/repos/octocat/Hello-World/pulls/comments/1 */ + Location?: string; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review-comment"]; + }; + }; + 404: components["responses"]["not_found"]; + }; + }; + "pulls/list-commits": { + parameters: { + query?: { + /** @description The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + per_page?: components["parameters"]["per-page"]; + /** @description The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + page?: components["parameters"]["page"]; + }; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response */ + 200: { + headers: { + Link: components["headers"]["link"]; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["commit"][]; + }; + }; + }; + }; + "pulls/list-files": { + parameters: { + query?: { + /** @description The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + per_page?: components["parameters"]["per-page"]; + /** @description The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + page?: components["parameters"]["page"]; + }; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response */ + 200: { + headers: { + Link: components["headers"]["link"]; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["diff-entry"][]; + }; + }; + 422: components["responses"]["validation_failed"]; + 500: components["responses"]["internal_error"]; + 503: components["responses"]["service_unavailable"]; + }; + }; + "pulls/check-if-merged": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response if pull request has been merged */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found if pull request has not been merged */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "pulls/merge": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @description Title for the automatic commit message. */ + commit_title?: string; + /** @description Extra detail to append to automatic commit message. */ + commit_message?: string; + /** @description SHA that pull request head must match to allow merge. */ + sha?: string; + /** + * @description The merge method to use. + * @enum {string} + */ + merge_method?: "merge" | "squash" | "rebase"; + } | null; + }; + }; + responses: { + /** @description if merge was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-merge-result"]; + }; + }; + 403: components["responses"]["forbidden"]; + 404: components["responses"]["not_found"]; + /** @description Method Not Allowed if merge cannot be performed */ + 405: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + message?: string; + documentation_url?: string; + }; + }; + }; + /** @description Conflict if sha was provided and pull request head did not match */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + message?: string; + documentation_url?: string; + }; + }; + }; + 422: components["responses"]["validation_failed"]; + }; + }; + "pulls/list-requested-reviewers": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response */ + 200: { + headers: { + Link: components["headers"]["link"]; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review-request"]; + }; + }; + }; + }; + "pulls/request-reviewers": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @description An array of user `login`s that will be requested. */ + reviewers?: string[]; + /** @description An array of team `slug`s that will be requested. */ + team_reviewers?: string[]; + } | unknown | unknown; + }; + }; + responses: { + /** @description Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-simple"]; + }; + }; + 403: components["responses"]["forbidden"]; + /** @description Unprocessable Entity if user is not a collaborator */ + 422: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "pulls/remove-requested-reviewers": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": { + /** @description An array of user `login`s that will be removed. */ + reviewers: string[]; + /** @description An array of team `slug`s that will be removed. */ + team_reviewers?: string[]; + }; + }; + }; + responses: { + /** @description Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-simple"]; + }; + }; + 422: components["responses"]["validation_failed"]; + }; + }; + "pulls/list-reviews": { + parameters: { + query?: { + /** @description The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + per_page?: components["parameters"]["per-page"]; + /** @description The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + page?: components["parameters"]["page"]; + }; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The list of reviews returns in chronological order. */ + 200: { + headers: { + Link: components["headers"]["link"]; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review"][]; + }; + }; + }; + }; + "pulls/create-review": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @description The SHA of the commit that needs a review. Not using the latest commit SHA may render your review comment outdated if a subsequent commit modifies the line you specify as the `position`. Defaults to the most recent commit in the pull request when you do not specify a value. */ + commit_id?: string; + /** @description **Required** when using `REQUEST_CHANGES` or `COMMENT` for the `event` parameter. The body text of the pull request review. */ + body?: string; + /** + * @description The review action you want to perform. The review actions include: `APPROVE`, `REQUEST_CHANGES`, or `COMMENT`. By leaving this blank, you set the review action state to `PENDING`, which means you will need to [submit the pull request review](https://docs.github.com/rest/pulls/reviews#submit-a-review-for-a-pull-request) when you are ready. + * @enum {string} + */ + event?: "APPROVE" | "REQUEST_CHANGES" | "COMMENT"; + /** @description Use the following table to specify the location, destination, and contents of the draft review comment. */ + comments?: { + /** @description The relative path to the file that necessitates a review comment. */ + path: string; + /** @description The position in the diff where you want to add a review comment. Note this value is not the same as the line number in the file. The `position` value equals the number of lines down from the first "@@" hunk header in the file you want to add a comment. The line just below the "@@" line is position 1, the next line is position 2, and so on. The position in the diff continues to increase through lines of whitespace and additional hunks until the beginning of a new file. */ + position?: number; + /** @description Text of the review comment. */ + body: string; + /** @example 28 */ + line?: number; + /** @example RIGHT */ + side?: string; + /** @example 26 */ + start_line?: number; + /** @example LEFT */ + start_side?: string; + }[]; + }; + }; + }; + responses: { + /** @description Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review"]; + }; + }; + 403: components["responses"]["forbidden"]; + 422: components["responses"]["validation_failed_simple"]; + }; + }; + "pulls/get-review": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + /** @description The unique identifier of the review. */ + review_id: components["parameters"]["review-id"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review"]; + }; + }; + 404: components["responses"]["not_found"]; + }; + }; + "pulls/update-review": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + /** @description The unique identifier of the review. */ + review_id: components["parameters"]["review-id"]; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": { + /** @description The body text of the pull request review. */ + body: string; + }; + }; + }; + responses: { + /** @description Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review"]; + }; + }; + 422: components["responses"]["validation_failed_simple"]; + }; + }; + "pulls/delete-pending-review": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + /** @description The unique identifier of the review. */ + review_id: components["parameters"]["review-id"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review"]; + }; + }; + 404: components["responses"]["not_found"]; + 422: components["responses"]["validation_failed_simple"]; + }; + }; + "pulls/list-comments-for-review": { + parameters: { + query?: { + /** @description The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + per_page?: components["parameters"]["per-page"]; + /** @description The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)." */ + page?: components["parameters"]["page"]; + }; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + /** @description The unique identifier of the review. */ + review_id: components["parameters"]["review-id"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Response */ + 200: { + headers: { + Link: components["headers"]["link"]; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["review-comment"][]; + }; + }; + 404: components["responses"]["not_found"]; + }; + }; + "pulls/dismiss-review": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + /** @description The unique identifier of the review. */ + review_id: components["parameters"]["review-id"]; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": { + /** @description The message for the pull request review dismissal */ + message: string; + /** + * @example "DISMISS" + * @enum {string} + */ + event?: "DISMISS"; + }; + }; + }; + responses: { + /** @description Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review"]; + }; + }; + 404: components["responses"]["not_found"]; + 422: components["responses"]["validation_failed_simple"]; + }; + }; + "pulls/submit-review": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + /** @description The unique identifier of the review. */ + review_id: components["parameters"]["review-id"]; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": { + /** @description The body text of the pull request review */ + body?: string; + /** + * @description The review action you want to perform. The review actions include: `APPROVE`, `REQUEST_CHANGES`, or `COMMENT`. When you leave this blank, the API returns _HTTP 422 (Unrecognizable entity)_ and sets the review action state to `PENDING`, which means you will need to re-submit the pull request review using a review action. + * @enum {string} + */ + event: "APPROVE" | "REQUEST_CHANGES" | "COMMENT"; + }; + }; + }; + responses: { + /** @description Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["pull-request-review"]; + }; + }; + 403: components["responses"]["forbidden"]; + 404: components["responses"]["not_found"]; + 422: components["responses"]["validation_failed_simple"]; + }; + }; + "pulls/update-branch": { + parameters: { + query?: never; + header?: never; + path: { + /** @description The account owner of the repository. The name is not case sensitive. */ + owner: components["parameters"]["owner"]; + /** @description The name of the repository without the `.git` extension. The name is not case sensitive. */ + repo: components["parameters"]["repo"]; + /** @description The number that identifies the pull request. */ + pull_number: components["parameters"]["pull-number"]; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @description The expected SHA of the pull request's HEAD ref. This is the most recent commit on the pull request's branch. If the expected SHA does not match the pull request's HEAD, you will receive a `422 Unprocessable Entity` status. You can use the "[List commits](https://docs.github.com/rest/commits/commits#list-commits)" endpoint to find the most recent commit SHA. Default: SHA of the pull request's current HEAD ref. */ + expected_head_sha?: string; + } | null; + }; + }; + responses: { + /** @description Response */ + 202: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + message?: string; + url?: string; + }; + }; + }; + 403: components["responses"]["forbidden"]; + 422: components["responses"]["validation_failed"]; + }; + }; +} diff --git a/packages/openapi-typescript/scripts/generate-github-pulls-only.ts b/packages/openapi-typescript/scripts/generate-github-pulls-only.ts new file mode 100644 index 000000000..c4919074f --- /dev/null +++ b/packages/openapi-typescript/scripts/generate-github-pulls-only.ts @@ -0,0 +1,32 @@ +/** + * Example: generate types for only the GitHub Pulls API routes. + * + * This demonstrates the `pathsFilter` option, which accepts a function + * `(pathname, method) => boolean` and removes all non-matching paths and + * their associated (now-unreferenced) component schemas from the output. + * + * Run with: + * vite-node ./scripts/generate-github-pulls-only.ts + */ + +import fs from "node:fs"; +import { performance } from "node:perf_hooks"; +import openapiTS, { astToString, COMMENT_HEADER } from "../src/index.js"; + +const GITHUB_API_YAML = new URL("../examples/github-api.yaml", import.meta.url); +const OUTPUT = new URL("../examples/github-api-pulls-only.ts", import.meta.url); +const PULLS_PATH_PREFIX = "/repos/{owner}/{repo}/pulls"; + +const start = performance.now(); + +// biome-ignore lint/suspicious/noConsole: this is a script +console.log("Generating github-api-pulls-only.ts …"); + +const ast = await openapiTS(GITHUB_API_YAML, { + pathsFilter: (pathname) => pathname === PULLS_PATH_PREFIX || pathname.startsWith(`${PULLS_PATH_PREFIX}/`), +}); + +fs.writeFileSync(OUTPUT, COMMENT_HEADER + astToString(ast)); + +// biome-ignore lint/suspicious/noConsole: this is a script +console.log(`✔︎ Written to examples/github-api-pulls-only.ts (${Math.round(performance.now() - start)}ms)`); diff --git a/packages/openapi-typescript/scripts/update-examples.ts b/packages/openapi-typescript/scripts/update-examples.ts index e0ead7201..523a8f756 100644 --- a/packages/openapi-typescript/scripts/update-examples.ts +++ b/packages/openapi-typescript/scripts/update-examples.ts @@ -1,6 +1,8 @@ +import fs from "node:fs"; import path from "node:path"; import { performance } from "node:perf_hooks"; import { execa } from "execa"; +import openapiTS, { astToString, COMMENT_HEADER } from "../src/index.js"; import { multiFile, singleFile } from "./schemas.js"; async function generateSchemas() { @@ -16,7 +18,9 @@ async function generateSchemas() { const cwd = process.platform === "win32" ? // execa/cross-spawn can not handle URL objects on Windows, so convert it to string and cut away the protocol - rootCWD.toString().slice("file:///".length) + rootCWD + .toString() + .slice("file:///".length) : rootCWD; try { @@ -70,9 +74,33 @@ async function generateSchemas() { }), ]); + // programmatic examples (use JS API features not available via CLI, e.g. pathsFilter) + await generateGithubPullsOnly(); + // biome-ignore lint/suspicious/noConsole: this is a script console.log("Updating examples done."); process.exit(0); // helps process close in npm script } +async function generateGithubPullsOnly() { + const start = performance.now(); + const PULLS_PATH_PREFIX = "/repos/{owner}/{repo}/pulls"; + const schemaUrl = new URL("../examples/github-api.yaml", import.meta.url); + const output = new URL("../examples/github-api-pulls-only.ts", import.meta.url); + + try { + const ast = await openapiTS(schemaUrl, { + pathsFilter: (pathname) => pathname === PULLS_PATH_PREFIX || pathname.startsWith(`${PULLS_PATH_PREFIX}/`), + }); + fs.writeFileSync(output, COMMENT_HEADER + astToString(ast)); + // biome-ignore lint/suspicious/noConsole: this is a script + console.log(`✔︎ Updated github-api-pulls-only (${Math.round(performance.now() - start)}ms)`); + } catch (err) { + // biome-ignore lint/suspicious/noConsole: this is a script + console.error("✘ Failed to update github-api-pulls-only", { + error: err instanceof Error ? err.message : err, + }); + } +} + generateSchemas(); diff --git a/packages/openapi-typescript/src/index.ts b/packages/openapi-typescript/src/index.ts index d042b81e4..63d306690 100644 --- a/packages/openapi-typescript/src/index.ts +++ b/packages/openapi-typescript/src/index.ts @@ -2,6 +2,8 @@ import { performance } from "node:perf_hooks"; import type { Readable } from "node:stream"; import { createConfig } from "@redocly/openapi-core"; import type ts from "typescript"; +import { applyPathsFilter } from "./lib/filter.js"; +export type { PathsFilterFn } from "./lib/filter.js"; import { validateAndBundle } from "./lib/redoc.js"; import { debug, resolveRef, scanDiscriminators } from "./lib/utils.js"; import transformSchema from "./transform/index.js"; @@ -66,12 +68,14 @@ export default async function openapiTS( silent: options.silent ?? false, }); + const filteredSchema = options.pathsFilter ? applyPathsFilter(schema, options.pathsFilter) : schema; + const ctx: GlobalContext = { additionalProperties: options.additionalProperties ?? false, alphabetize: options.alphabetize ?? false, arrayLength: options.arrayLength ?? false, defaultNonNullable: options.defaultNonNullable ?? true, - discriminators: scanDiscriminators(schema, options), + discriminators: scanDiscriminators(filteredSchema, options), emptyObjectsUnknown: options.emptyObjectsUnknown ?? false, enum: options.enum ?? false, enumValues: options.enumValues ?? false, @@ -96,12 +100,12 @@ export default async function openapiTS( generatePathParams: options.generatePathParams ?? false, readWriteMarkers: options.readWriteMarkers ?? false, resolve($ref) { - return resolveRef(schema, $ref, { silent: options.silent ?? false }); + return resolveRef(filteredSchema, $ref, { silent: options.silent ?? false }); }, }; const transformT = performance.now(); - const result = transformSchema(schema, ctx); + const result = transformSchema(filteredSchema, ctx); debug("Completed AST transformation for entire document", "ts", performance.now() - transformT); return result; diff --git a/packages/openapi-typescript/src/lib/filter.ts b/packages/openapi-typescript/src/lib/filter.ts new file mode 100644 index 000000000..a870ce8c8 --- /dev/null +++ b/packages/openapi-typescript/src/lib/filter.ts @@ -0,0 +1,140 @@ +import type { ComponentsObject, OpenAPI3, PathsObject } from "../types.js"; + +export type PathsFilterFn = (pathname: string, method: string) => boolean; + +const HTTP_METHODS = ["get", "put", "post", "delete", "options", "head", "patch", "trace"] as const; + +/** + * Pre-process an OpenAPI schema by filtering paths/methods and removing unreferenced components. + * Performs transitive $ref analysis so only components reachable from included paths are kept. + */ +export function applyPathsFilter(schema: OpenAPI3, pathsFilter: PathsFilterFn): OpenAPI3 { + // Step 1: filter paths and their HTTP methods + const filteredPaths: PathsObject = {}; + + for (const [pathname, pathItem] of Object.entries(schema.paths ?? {})) { + if (!pathItem || typeof pathItem !== "object") { + continue; + } + + if ("$ref" in pathItem) { + // $ref path items are always included — individual methods can't be inspected + // without resolving the reference. See OpenAPITSOptions.pathsFilter docs. + filteredPaths[pathname] = pathItem; + continue; + } + + const filteredItem = { ...pathItem }; + let hasMethod = false; + + for (const method of HTTP_METHODS) { + if (method in filteredItem) { + if (pathsFilter(pathname, method)) { + hasMethod = true; + } else { + delete (filteredItem as Record)[method]; + } + } + } + + if (hasMethod) { + filteredPaths[pathname] = filteredItem; + } + } + + const schemaWithFilteredPaths: OpenAPI3 = { ...schema, paths: filteredPaths }; + + if (!schema.components) { + return schemaWithFilteredPaths; + } + + // Step 2: collect all $refs reachable from the filtered paths (transitively) + const usedRefs = new Set(); + collectRefs(filteredPaths, usedRefs); + + const processed = new Set(); + const queue = [...usedRefs]; + + while (queue.length > 0) { + // biome-ignore lint/style/noNonNullAssertion: condition checked above + const ref = queue.pop()!; + if (processed.has(ref)) { + continue; + } + processed.add(ref); + + if (!ref.startsWith("#/")) { + continue; + } + + // Walk the original schema to resolve the ref + const parts = ref.slice(2).split("/"); + let node: unknown = schema; + for (const part of parts) { + if (!node || typeof node !== "object") { + node = undefined; + break; + } + node = (node as Record)[part]; + } + + if (node) { + const nested = new Set(); + collectRefs(node, nested); + for (const nestedRef of nested) { + if (!processed.has(nestedRef)) { + usedRefs.add(nestedRef); + queue.push(nestedRef); + } + } + } + } + + // Step 3: keep only components that are referenced + const usedComponentPaths = new Set( + [...usedRefs].filter((ref) => ref.startsWith("#/")).map((ref) => ref.slice(2)), // e.g. "components/schemas/User" + ); + + const filteredComponents: Partial = {}; + + for (const [componentType, componentItems] of Object.entries(schema.components)) { + if (!componentItems || typeof componentItems !== "object") { + continue; + } + + const kept: Record = {}; + for (const [name, item] of Object.entries(componentItems as Record)) { + if (usedComponentPaths.has(`components/${componentType}/${name}`)) { + kept[name] = item; + } + } + + if (Object.keys(kept).length > 0) { + (filteredComponents as Record)[componentType] = kept; + } + } + + return { + ...schemaWithFilteredPaths, + components: Object.keys(filteredComponents).length > 0 ? (filteredComponents as ComponentsObject) : undefined, + }; +} + +function collectRefs(obj: unknown, refs: Set): void { + if (!obj || typeof obj !== "object") { + return; + } + if (Array.isArray(obj)) { + for (const item of obj) { + collectRefs(item, refs); + } + return; + } + for (const [key, value] of Object.entries(obj as Record)) { + if (key === "$ref" && typeof value === "string") { + refs.add(value); + } else { + collectRefs(value, refs); + } + } +} diff --git a/packages/openapi-typescript/src/types.ts b/packages/openapi-typescript/src/types.ts index d19185cc6..a870a5eab 100644 --- a/packages/openapi-typescript/src/types.ts +++ b/packages/openapi-typescript/src/types.ts @@ -684,8 +684,29 @@ export interface OpenAPITSOptions { makePathsEnum?: boolean; /** Generate path params based on path even if they are not defined in the open api schema */ generatePathParams?: boolean; + /** Generate $Read/$Write markers for readOnly/writeOnly properties (default: false) */ readWriteMarkers?: boolean; + + /** + * Filter which paths and HTTP methods are included in the generated types. + * Return `true` to include a path+method combination, `false` to exclude it. + * Unreferenced components are automatically removed when this option is set. + * `method` is always lowercase (e.g. `"get"`, `"post"`). `pathname` is passed as-is + * from the schema — OpenAPI paths are case-sensitive and are not normalized. + * + * **Note:** Path items defined as a `$ref` (e.g. `"/users": { $ref: "..." }`) are + * always included regardless of the filter, because individual methods cannot be + * inspected without resolving the reference. Filter by pathname in a post-processing + * step if you need to exclude these paths. + * @example + * // Only include GET operations + * pathsFilter: (pathname, method) => method === "get" + * @example + * // Only include specific paths + * pathsFilter: (pathname) => pathname.startsWith("/users") + */ + pathsFilter?: (pathname: string, method: string) => boolean; } /** Context passed to all submodules */ diff --git a/packages/openapi-typescript/test/lib/filter.test.ts b/packages/openapi-typescript/test/lib/filter.test.ts new file mode 100644 index 000000000..cf0ee2492 --- /dev/null +++ b/packages/openapi-typescript/test/lib/filter.test.ts @@ -0,0 +1,303 @@ +import { applyPathsFilter } from "../../src/lib/filter.js"; +import type { OpenAPI3 } from "../../src/types.js"; + +const BASE: OpenAPI3 = { + openapi: "3.1.0", + info: { title: "Test", version: "1" }, +}; + +// ─── helpers ──────────────────────────────────────────────────────────────── + +function makeSchema(overrides: Partial = {}): OpenAPI3 { + return { ...BASE, ...overrides }; +} + +function pathNames(schema: OpenAPI3): string[] { + return Object.keys(schema.paths ?? {}); +} + +function methodsAt(schema: OpenAPI3, pathname: string): string[] { + const item = schema.paths?.[pathname]; + if (!item || "$ref" in item) { + return []; + } + const HTTP = ["get", "put", "post", "delete", "options", "head", "patch", "trace"]; + return HTTP.filter((m) => m in item); +} + +// ─── path-level filtering ──────────────────────────────────────────────────── + +describe("applyPathsFilter – path filtering", () => { + const schema = makeSchema({ + paths: { + "/users": { get: { responses: {} }, post: { responses: {} } }, + "/orders": { get: { responses: {} } }, + }, + }); + + test("includes all paths when filter always returns true", () => { + const result = applyPathsFilter(schema, () => true); + expect(pathNames(result)).toEqual(["/users", "/orders"]); + }); + + test("excludes paths where all methods are filtered out", () => { + const result = applyPathsFilter(schema, (pathname) => pathname === "/users"); + expect(pathNames(result)).toEqual(["/users"]); + expect(pathNames(result)).not.toContain("/orders"); + }); + + test("returns empty paths when filter always returns false", () => { + const result = applyPathsFilter(schema, () => false); + expect(pathNames(result)).toHaveLength(0); + }); + + test("preserves non-method properties (e.g. parameters) on filtered path items", () => { + const s = makeSchema({ + paths: { + "/users": { + parameters: [{ name: "X-Header", in: "header" }], + get: { responses: {} }, + post: { responses: {} }, + }, + }, + }); + const result = applyPathsFilter(s, (_, method) => method === "get"); + const item = result.paths?.["/users"] as Record; + expect(item.parameters).toBeDefined(); + expect(item.get).toBeDefined(); + expect(item.post).toBeUndefined(); + }); +}); + +// ─── method-level filtering ────────────────────────────────────────────────── + +describe("applyPathsFilter – method filtering", () => { + const schema = makeSchema({ + paths: { + "/users": { + get: { responses: {} }, + post: { responses: {} }, + put: { responses: {} }, + }, + }, + }); + + test("keeps only GET when filter passes only 'get'", () => { + const result = applyPathsFilter(schema, (_, method) => method === "get"); + expect(methodsAt(result, "/users")).toEqual(["get"]); + }); + + test("keeps GET and POST when filter passes those two", () => { + const result = applyPathsFilter(schema, (_, method) => method === "get" || method === "post"); + expect(methodsAt(result, "/users")).toEqual(["get", "post"]); + }); + + test("receives both pathname and method in the callback", () => { + const calls: [string, string][] = []; + applyPathsFilter(schema, (pathname, method) => { + calls.push([pathname, method]); + return true; + }); + expect(calls.some(([p, m]) => p === "/users" && m === "get")).toBe(true); + expect(calls.some(([p, m]) => p === "/users" && m === "post")).toBe(true); + }); +}); + +// ─── $ref path items ───────────────────────────────────────────────────────── + +describe("applyPathsFilter – $ref path items", () => { + test("passes through $ref path items unchanged", () => { + const schema = makeSchema({ + paths: { + "/users": { $ref: "#/components/pathItems/Users" }, + "/orders": { get: { responses: {} } }, + }, + components: { + pathItems: { Users: { get: { responses: {} } } } as any, + }, + }); + // filter that would normally exclude /orders + const result = applyPathsFilter(schema, (pathname) => pathname === "/users"); + expect(result.paths?.["/users"]).toEqual({ $ref: "#/components/pathItems/Users" }); + }); +}); + +// ─── component tree-shaking ─────────────────────────────────────────────────── + +describe("applyPathsFilter – component tree-shaking", () => { + const schema = makeSchema({ + paths: { + "/users": { + get: { + responses: { + 200: { content: { "application/json": { schema: { $ref: "#/components/schemas/User" } } } }, + }, + }, + post: { + responses: { + 201: { content: { "application/json": { schema: { $ref: "#/components/schemas/NewUser" } } } }, + }, + }, + }, + }, + components: { + schemas: { + User: { type: "object", properties: { id: { type: "string" } } }, + NewUser: { type: "object", properties: { name: { type: "string" } } }, + Order: { type: "object", properties: { total: { type: "number" } } }, + }, + }, + }); + + test("removes components not referenced by any included path", () => { + // include only GET — only User is referenced + const result = applyPathsFilter(schema, (_, method) => method === "get"); + expect(result.components?.schemas).toHaveProperty("User"); + expect(result.components?.schemas).not.toHaveProperty("NewUser"); + expect(result.components?.schemas).not.toHaveProperty("Order"); + }); + + test("keeps all referenced components when all paths are included", () => { + const result = applyPathsFilter(schema, () => true); + expect(result.components?.schemas).toHaveProperty("User"); + expect(result.components?.schemas).toHaveProperty("NewUser"); + expect(result.components?.schemas).not.toHaveProperty("Order"); // never referenced + }); + + test("sets components to undefined when nothing is referenced", () => { + const result = applyPathsFilter(schema, () => false); + expect(result.components).toBeUndefined(); + }); + + test("returns schema unchanged when there are no components", () => { + const s = makeSchema({ + paths: { "/users": { get: { responses: {} } } }, + }); + const result = applyPathsFilter(s, () => true); + expect(result.components).toBeUndefined(); + }); +}); + +// ─── transitive $ref resolution ─────────────────────────────────────────────── + +describe("applyPathsFilter – transitive component references", () => { + test("keeps components referenced only by other components", () => { + // User -> Address (transitive) + const schema = makeSchema({ + paths: { + "/users": { + get: { + responses: { + 200: { content: { "application/json": { schema: { $ref: "#/components/schemas/User" } } } }, + }, + }, + }, + }, + components: { + schemas: { + User: { + type: "object", + properties: { + id: { type: "string" }, + address: { $ref: "#/components/schemas/Address" }, + }, + }, + Address: { type: "object", properties: { street: { type: "string" } } }, + Unrelated: { type: "object" }, + }, + }, + }); + + const result = applyPathsFilter(schema, () => true); + expect(result.components?.schemas).toHaveProperty("User"); + expect(result.components?.schemas).toHaveProperty("Address"); + expect(result.components?.schemas).not.toHaveProperty("Unrelated"); + }); + + test("handles circular $refs without infinite loops", () => { + const schema = makeSchema({ + paths: { + "/nodes": { + get: { + responses: { + 200: { content: { "application/json": { schema: { $ref: "#/components/schemas/Node" } } } }, + }, + }, + }, + }, + components: { + schemas: { + Node: { + type: "object", + properties: { + child: { $ref: "#/components/schemas/Node" }, // self-referential + }, + }, + }, + }, + }); + + expect(() => applyPathsFilter(schema, () => true)).not.toThrow(); + const result = applyPathsFilter(schema, () => true); + expect(result.components?.schemas).toHaveProperty("Node"); + }); + + test("keeps components across multiple component types", () => { + const schema = makeSchema({ + paths: { + "/users": { + get: { + parameters: [{ $ref: "#/components/parameters/PageParam" }], + responses: { + 200: { $ref: "#/components/responses/UserList" }, + }, + }, + }, + }, + components: { + parameters: { + PageParam: { name: "page", in: "query", schema: { type: "integer" } }, + UnusedParam: { name: "unused", in: "query" }, + }, + responses: { + UserList: { description: "A list of users" }, + UnusedResponse: { description: "unused" }, + }, + }, + }); + + const result = applyPathsFilter(schema, () => true); + expect(result.components?.parameters).toHaveProperty("PageParam"); + expect(result.components?.parameters).not.toHaveProperty("UnusedParam"); + expect(result.components?.responses).toHaveProperty("UserList"); + expect(result.components?.responses).not.toHaveProperty("UnusedResponse"); + }); +}); + +// ─── schema integrity ───────────────────────────────────────────────────────── + +describe("applyPathsFilter – schema integrity", () => { + test("preserves top-level schema fields (info, servers, etc.)", () => { + const schema: OpenAPI3 = { + openapi: "3.1.0", + info: { title: "My API", version: "2.0" }, + servers: [{ url: "https://api.example.com", description: "", variables: {} }], + paths: { "/ping": { get: { responses: {} } } }, + }; + const result = applyPathsFilter(schema, () => true); + expect(result.openapi).toBe("3.1.0"); + expect(result.info).toEqual(schema.info); + expect(result.servers).toEqual(schema.servers); + }); + + test("does not mutate the original schema", () => { + const schema = makeSchema({ + paths: { + "/users": { get: { responses: {} }, post: { responses: {} } }, + }, + }); + const originalPaths = { ...schema.paths }; + applyPathsFilter(schema, (_, method) => method === "get"); + expect(schema.paths).toEqual(originalPaths); + }); +});