diff --git a/scripts/update-endpoints/templates/endpoints.ts.template b/scripts/update-endpoints/templates/endpoints.ts.template index 02679a1f2..3fa7bb06e 100644 --- a/scripts/update-endpoints/templates/endpoints.ts.template +++ b/scripts/update-endpoints/templates/endpoints.ts.template @@ -4,6 +4,12 @@ import type { OctokitResponse } from "../OctokitResponse"; import type { RequestHeaders } from "../RequestHeaders"; import type { RequestRequestOptions } from "../RequestRequestOptions"; +/** + * @license (MIT OR CC0-1.0) + * @source https://github.com/sindresorhus/type-fest/blob/570e27f8fdaee37ef5d5e0fbf241e0212ff8fc1a/source/simplify.d.ts + */ +export type Simplify = {[KeyType in keyof T]: T[KeyType]} & {}; + // https://stackoverflow.com/a/50375286/206879 type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ( k: infer I @@ -40,30 +46,34 @@ type ExtractRequestBody = "requestBody" extends keyof T type ToOctokitParameters = ExtractParameters & ExtractRequestBody>; type Operation = { - parameters: ToOctokitParameters; - request: { - method: Method extends keyof MethodsMap ? MethodsMap[Method] : never; - url: Url; - headers: RequestHeaders; - request: RequestRequestOptions; - }; + parameters: Simplify>; + request: Method extends ReadOnlyMethods + ? { + method: Method extends string ? Uppercase : never; + url: Url; + headers: RequestHeaders; + request: RequestRequestOptions; + } + : { + method: Method extends string ? Uppercase : never; + url: Url; + headers: RequestHeaders; + request: RequestRequestOptions; + data: ExtractRequestBody; + }; response: ExtractOctokitResponse; }; -type MethodsMap = { - delete: "DELETE"; - get: "GET"; - patch: "PATCH"; - post: "POST"; - put: "PUT"; -}; -type SuccessStatuses = 200 | 201 | 202 | 204; +type ReadOnlyMethods = "get" | "head"; +type SuccessStatuses = 200 | 201 | 202 | 204 | 205; type RedirectStatuses = 301 | 302; -type EmptyResponseStatuses = 201 | 204; +type EmptyResponseStatuses = 201 | 204 | 205; type KnownJsonResponseTypes = | "application/json" + | "application/octocat-stream" // GET /octocat | "application/scim+json" - | "text/html"; + | "text/html" + | "text/plain"; // GET /zen type SuccessResponseDataType = { [K in SuccessStatuses & keyof Responses]: GetContentKeyIfPresent< diff --git a/src/generated/Endpoints.ts b/src/generated/Endpoints.ts index 3ebe565b4..b32eaf5e8 100644 --- a/src/generated/Endpoints.ts +++ b/src/generated/Endpoints.ts @@ -4,6 +4,12 @@ import type { OctokitResponse } from "../OctokitResponse"; import type { RequestHeaders } from "../RequestHeaders"; import type { RequestRequestOptions } from "../RequestRequestOptions"; +/** + * @license (MIT OR CC0-1.0) + * @source https://github.com/sindresorhus/type-fest/blob/570e27f8fdaee37ef5d5e0fbf241e0212ff8fc1a/source/simplify.d.ts + */ +export type Simplify = { [KeyType in keyof T]: T[KeyType] } & {}; + // https://stackoverflow.com/a/50375286/206879 type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ( k: infer I, @@ -41,30 +47,34 @@ type ToOctokitParameters = ExtractParameters & ExtractRequestBody>; type Operation = { - parameters: ToOctokitParameters; - request: { - method: Method extends keyof MethodsMap ? MethodsMap[Method] : never; - url: Url; - headers: RequestHeaders; - request: RequestRequestOptions; - }; + parameters: Simplify>; + request: Method extends ReadOnlyMethods + ? { + method: Method extends string ? Uppercase : never; + url: Url; + headers: RequestHeaders; + request: RequestRequestOptions; + } + : { + method: Method extends string ? Uppercase : never; + url: Url; + headers: RequestHeaders; + request: RequestRequestOptions; + data: ExtractRequestBody; + }; response: ExtractOctokitResponse; }; -type MethodsMap = { - delete: "DELETE"; - get: "GET"; - patch: "PATCH"; - post: "POST"; - put: "PUT"; -}; -type SuccessStatuses = 200 | 201 | 202 | 204; +type ReadOnlyMethods = "get" | "head"; +type SuccessStatuses = 200 | 201 | 202 | 204 | 205; type RedirectStatuses = 301 | 302; -type EmptyResponseStatuses = 201 | 204; +type EmptyResponseStatuses = 201 | 204 | 205; type KnownJsonResponseTypes = | "application/json" + | "application/octocat-stream" // GET /octocat | "application/scim+json" - | "text/html"; + | "text/html" + | "text/plain"; // GET /zen type SuccessResponseDataType = { [K in SuccessStatuses & keyof Responses]: GetContentKeyIfPresent<