@@ -4,6 +4,12 @@ import type { OctokitResponse } from "../OctokitResponse";
44import type { RequestHeaders } from "../RequestHeaders";
55import type { RequestRequestOptions } from "../RequestRequestOptions";
66
7+ /**
8+ * @license (MIT OR CC0-1.0)
9+ * @source https://github.com/sindresorhus/type-fest/blob/570e27f8fdaee37ef5d5e0fbf241e0212ff8fc1a/source/simplify.d.ts
10+ */
11+ export type Simplify<T> = {[KeyType in keyof T]: T[KeyType]} & {};
12+
713// https://stackoverflow.com/a/50375286/206879
814type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (
915 k: infer I
@@ -40,30 +46,34 @@ type ExtractRequestBody<T> = "requestBody" extends keyof T
4046type ToOctokitParameters<T> = ExtractParameters<T> & ExtractRequestBody<Required<T>>;
4147
4248type Operation<Url extends keyof paths, Method extends keyof paths[Url]> = {
43- parameters: ToOctokitParameters<paths[Url][Method]>;
44- request: {
45- method: Method extends keyof MethodsMap ? MethodsMap[Method] : never;
46- url: Url;
47- headers: RequestHeaders;
48- request: RequestRequestOptions;
49- };
49+ parameters: Simplify<ToOctokitParameters<paths[Url][Method]>>;
50+ request: Method extends ReadOnlyMethods
51+ ? {
52+ method: Method extends string ? Uppercase<Method> : never;
53+ url: Url;
54+ headers: RequestHeaders;
55+ request: RequestRequestOptions;
56+ }
57+ : {
58+ method: Method extends string ? Uppercase<Method> : never;
59+ url: Url;
60+ headers: RequestHeaders;
61+ request: RequestRequestOptions;
62+ data: ExtractRequestBody<paths[Url][Method]>;
63+ };
5064 response: ExtractOctokitResponse<paths[Url][Method]>;
5165};
5266
53- type MethodsMap = {
54- delete: "DELETE";
55- get: "GET";
56- patch: "PATCH";
57- post: "POST";
58- put: "PUT";
59- };
60- type SuccessStatuses = 200 | 201 | 202 | 204;
67+ type ReadOnlyMethods = "get" | "head";
68+ type SuccessStatuses = 200 | 201 | 202 | 204 | 205;
6169type RedirectStatuses = 301 | 302;
62- type EmptyResponseStatuses = 201 | 204;
70+ type EmptyResponseStatuses = 201 | 204 | 205 ;
6371type KnownJsonResponseTypes =
6472 | "application/json"
73+ | "application/octocat-stream" // GET /octocat
6574 | "application/scim+json"
66- | "text/html";
75+ | "text/html"
76+ | "text/plain"; // GET /zen
6777
6878type SuccessResponseDataType<Responses> = {
6979 [K in SuccessStatuses & keyof Responses]: GetContentKeyIfPresent<
0 commit comments