@rvoh/psychic-spec-helpers 0.7.3 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import { IdType } from '@rvoh/dream';
2
2
  import { Response } from 'supertest';
3
- import { ExtractOpenapiParams, First, GetResolvedOpenapiUrl, RoutesWithHttpMethod } from './helpers/openapiTypeHelpers.js';
3
+ import { ExtractOpenapiParams, RequestBody, RequestQueryParameters, ResponseBody, ResponseCodeForUri, RoutesWithHttpMethod } from './helpers/openapiTypeHelpers.js';
4
4
  import { OpenapiSpecSession } from './OpenapiSpecSession.js';
5
5
  import { SpecRequestOpts, SpecRequestOptsAll } from './SpecRequest.js';
6
6
  import { HttpMethod } from './supersession.js';
@@ -8,7 +8,7 @@ export declare class OpenapiSpecRequest<OpenapiPaths = undefined> {
8
8
  private PsychicServer;
9
9
  private server;
10
10
  init(PsychicServer: any): Promise<void>;
11
- get<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'get' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends keyof ResponseMap & number, HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths], ResponseMap extends HttpMethodMap['get' & keyof HttpMethodMap]['responses' & keyof HttpMethodMap['get' & keyof HttpMethodMap]], ParametersMap extends HttpMethodMap['get' & keyof HttpMethodMap]['parameters' & keyof HttpMethodMap['get' & keyof HttpMethodMap]], QueryMap extends ParametersMap['query' & keyof ParametersMap], Params extends string[] & ExtractOpenapiParams<Uri>, Content extends ResponseMap extends undefined ? undefined : ResponseCode extends undefined ? undefined : ResponseCode extends number ? ResponseMap[ResponseCode & keyof ResponseMap]['content' & keyof ResponseMap[ResponseCode & keyof ResponseMap]] : undefined, JsonContent extends Content extends undefined ? undefined : Content['application/json' & keyof Content]>(
11
+ get<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'get' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'get'>, Params extends string[] & ExtractOpenapiParams<Uri>, Query extends OpenapiSpecRequestOptsGet<RequestQueryParameters<OpenapiPaths, 'get', Uri>>, JsonContent extends ResponseBody<OpenapiPaths, 'get', Uri, ResponseCode>>(
12
12
  /**
13
13
  * The uri on your background you are trying to hit.
14
14
  * This should be a path, like '/users'.
@@ -58,10 +58,10 @@ export declare class OpenapiSpecRequest<OpenapiPaths = undefined> {
58
58
  * @param opts.headers - headers you would like to send with your request.
59
59
  * (Optional)
60
60
  */
61
- opts?: Params['length'] extends 0 ? OpenapiSpecRequestOptsGet<QueryMap> : OpenapiSpecRequestOptsGet<QueryMap> & {
61
+ opts?: Params['length'] extends 0 ? Query : Query & {
62
62
  [K in Params[number]]: string | IdType;
63
63
  }): Promise<OpenapiSpecResponse<JsonContent>>;
64
- post<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'post' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends keyof ResponseMap & number, HttpMethodMap extends OpenapiPaths[ResolvedUri & keyof OpenapiPaths], ResolvedUri extends First<GetResolvedOpenapiUrl<OpenapiPaths, Uri> & keyof OpenapiPaths>, Params extends string[] & ExtractOpenapiParams<Uri>, ResponseMap extends HttpMethodMap['post' & keyof HttpMethodMap]['responses' & keyof HttpMethodMap['post' & keyof HttpMethodMap]], Content extends ResponseMap extends undefined ? undefined : ResponseCode extends undefined ? undefined : ResponseCode extends number ? ResponseMap[ResponseCode & keyof ResponseMap]['content' & keyof ResponseMap[ResponseCode & keyof ResponseMap]] : undefined, JsonContent extends Content extends undefined ? undefined : Content['application/json' & keyof Content], RequestBodyMap extends HttpMethodMap['post' & keyof HttpMethodMap]['requestBody' & keyof HttpMethodMap['post' & keyof HttpMethodMap]], RequestBodyContent extends RequestBodyMap extends undefined ? undefined : RequestBodyMap['content' & keyof RequestBodyMap], RequestBodyJsonContent extends RequestBodyContent extends undefined ? undefined : RequestBodyContent['application/json' & keyof RequestBodyContent]>(
64
+ post<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'post' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'post'>, Params extends string[] & ExtractOpenapiParams<Uri>, RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'post', Uri>, JsonContent extends ResponseBody<OpenapiPaths, 'post', Uri, ResponseCode>>(
65
65
  /**
66
66
  * The uri on your background you are trying to hit.
67
67
  * This should be a path, like '/users'.
@@ -117,7 +117,7 @@ export declare class OpenapiSpecRequest<OpenapiPaths = undefined> {
117
117
  opts?: Params['length'] extends 0 ? OpenapiSpecRequestOptsPost<RequestBodyJsonContent> : OpenapiSpecRequestOptsPost<RequestBodyJsonContent> & {
118
118
  [K in Params[number]]: string;
119
119
  }): Promise<OpenapiSpecResponse<JsonContent>>;
120
- put<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'put' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends keyof ResponseMap & number, HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths], Params extends string[] & ExtractOpenapiParams<Uri>, ResponseMap extends HttpMethodMap['put' & keyof HttpMethodMap]['responses' & keyof HttpMethodMap['put' & keyof HttpMethodMap]], Content extends ResponseMap extends undefined ? undefined : ResponseCode extends undefined ? undefined : ResponseCode extends number ? ResponseMap[ResponseCode & keyof ResponseMap]['content' & keyof ResponseMap[ResponseCode & keyof ResponseMap]] : undefined, JsonContent extends Content extends undefined ? undefined : Content['application/json' & keyof Content], RequestBodyMap extends HttpMethodMap['put' & keyof HttpMethodMap]['requestBody' & keyof HttpMethodMap['put' & keyof HttpMethodMap]], RequestBodyContent extends RequestBodyMap extends undefined ? undefined : RequestBodyMap['content' & keyof RequestBodyMap], RequestBodyJsonContent extends RequestBodyContent extends undefined ? undefined : RequestBodyContent['application/json' & keyof RequestBodyContent]>(
120
+ put<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'put' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'put'>, Params extends string[] & ExtractOpenapiParams<Uri>, JsonContent extends ResponseBody<OpenapiPaths, 'put', Uri, ResponseCode>, RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'put', Uri>>(
121
121
  /**
122
122
  * The uri on your background you are trying to hit.
123
123
  * This should be a path, like '/users'.
@@ -174,7 +174,7 @@ export declare class OpenapiSpecRequest<OpenapiPaths = undefined> {
174
174
  opts?: Params['length'] extends 0 ? OpenapiSpecRequestOptsPost<RequestBodyJsonContent> : OpenapiSpecRequestOptsPost<RequestBodyJsonContent> & {
175
175
  [K in Params[number]]: string | IdType;
176
176
  }): Promise<OpenapiSpecResponse<JsonContent>>;
177
- patch<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'patch' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends keyof ResponseMap & number, HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths], Params extends string[] & ExtractOpenapiParams<Uri>, ResponseMap extends HttpMethodMap['patch' & keyof HttpMethodMap]['responses' & keyof HttpMethodMap['patch' & keyof HttpMethodMap]], Content extends ResponseMap extends undefined ? undefined : ResponseCode extends undefined ? undefined : ResponseCode extends number ? ResponseMap[ResponseCode & keyof ResponseMap]['content' & keyof ResponseMap[ResponseCode & keyof ResponseMap]] : undefined, JsonContent extends Content extends undefined ? undefined : Content['application/json' & keyof Content], RequestBodyMap extends HttpMethodMap['patch' & keyof HttpMethodMap]['requestBody' & keyof HttpMethodMap['patch' & keyof HttpMethodMap]], RequestBodyContent extends RequestBodyMap extends undefined ? undefined : RequestBodyMap['content' & keyof RequestBodyMap], RequestBodyJsonContent extends RequestBodyContent extends undefined ? undefined : RequestBodyContent['application/json' & keyof RequestBodyContent]>(
177
+ patch<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'patch' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'patch'>, Params extends string[] & ExtractOpenapiParams<Uri>, JsonContent extends ResponseBody<OpenapiPaths, 'patch', Uri, ResponseCode>, RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'patch', Uri>>(
178
178
  /**
179
179
  * The uri on your background you are trying to hit.
180
180
  * This should be a path, like '/posts'.
@@ -230,7 +230,7 @@ export declare class OpenapiSpecRequest<OpenapiPaths = undefined> {
230
230
  opts?: Params['length'] extends 0 ? OpenapiSpecRequestOptsPost<RequestBodyJsonContent> : OpenapiSpecRequestOptsPost<RequestBodyJsonContent> & {
231
231
  [K in Params[number]]: string | IdType;
232
232
  }): Promise<OpenapiSpecResponse<JsonContent>>;
233
- delete<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'delete' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends keyof ResponseMap & number, HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths], Params extends string[] & ExtractOpenapiParams<Uri>, ResponseMap extends HttpMethodMap['delete' & keyof HttpMethodMap]['responses' & keyof HttpMethodMap['delete' & keyof HttpMethodMap]], Content extends ResponseMap extends undefined ? undefined : ResponseCode extends undefined ? undefined : ResponseCode extends number ? ResponseMap[ResponseCode & keyof ResponseMap]['content' & keyof ResponseMap[ResponseCode & keyof ResponseMap]] : undefined, JsonContent extends Content extends undefined ? undefined : Content['application/json' & keyof Content], RequestBodyMap extends HttpMethodMap['delete' & keyof HttpMethodMap]['requestBody' & keyof HttpMethodMap['delete' & keyof HttpMethodMap]], RequestBodyContent extends RequestBodyMap extends undefined ? undefined : RequestBodyMap['content' & keyof RequestBodyMap], RequestBodyJsonContent extends RequestBodyContent extends undefined ? undefined : RequestBodyContent['application/json' & keyof RequestBodyContent]>(
233
+ delete<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'delete' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'delete'>, Params extends string[] & ExtractOpenapiParams<Uri>, JsonContent extends ResponseBody<OpenapiPaths, 'delete', Uri, ResponseCode>, RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'delete', Uri>>(
234
234
  /**
235
235
  * The uri on your background you are trying to hit.
236
236
  * This should be a path, like '/users'.
@@ -286,7 +286,7 @@ export declare class OpenapiSpecRequest<OpenapiPaths = undefined> {
286
286
  opts?: Params['length'] extends 0 ? OpenapiSpecRequestOptsPost<RequestBodyJsonContent> : OpenapiSpecRequestOptsPost<RequestBodyJsonContent> & {
287
287
  [K in Params[number]]: string | IdType;
288
288
  }): Promise<OpenapiSpecResponse<JsonContent>>;
289
- session<const ProvidedHttpMethod extends HttpMethod, const Uri extends RoutesWithHttpMethod<OpenapiPaths, ProvidedHttpMethod & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends keyof ResponseMap & number, HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths], Params extends string[] & ExtractOpenapiParams<Uri>, ResponseMap extends HttpMethodMap[ProvidedHttpMethod & keyof HttpMethodMap]['responses' & keyof HttpMethodMap[ProvidedHttpMethod & keyof HttpMethodMap]], ParametersMap extends HttpMethodMap[ProvidedHttpMethod & keyof HttpMethodMap]['parameters' & keyof HttpMethodMap[ProvidedHttpMethod & keyof HttpMethodMap]], QueryMap extends ParametersMap['query' & keyof ParametersMap], RequestBodyMap extends HttpMethodMap[ProvidedHttpMethod & keyof HttpMethodMap]['requestBody' & keyof HttpMethodMap[ProvidedHttpMethod & keyof HttpMethodMap]], RequestBodyContent extends RequestBodyMap extends undefined ? undefined : RequestBodyMap['content' & keyof RequestBodyMap], RequestBodyJsonContent extends RequestBodyContent extends undefined ? undefined : RequestBodyContent['application/json' & keyof RequestBodyContent]>(httpMethod: ProvidedHttpMethod,
289
+ session<const ProvidedHttpMethod extends HttpMethod, const Uri extends RoutesWithHttpMethod<OpenapiPaths, ProvidedHttpMethod & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, ProvidedHttpMethod>, Params extends string[] & ExtractOpenapiParams<Uri>, JsonContent extends RequestBody<OpenapiPaths, ProvidedHttpMethod, Uri>, Query extends OpenapiSpecRequestOptsGet<RequestQueryParameters<OpenapiPaths, 'get', Uri>>>(httpMethod: ProvidedHttpMethod,
290
290
  /**
291
291
  * The uri on your background you are trying to hit.
292
292
  * This should be a path, like '/users'.
@@ -350,7 +350,7 @@ export declare class OpenapiSpecRequest<OpenapiPaths = undefined> {
350
350
  * @param opts.headers - headers you would like to send with your request.
351
351
  * (Optional)
352
352
  */
353
- opts?: (ProvidedHttpMethod extends 'get' ? OpenapiSpecRequestOptsGet<QueryMap> : OpenapiSpecRequestOptsPost<RequestBodyJsonContent>) & {
353
+ opts?: (ProvidedHttpMethod extends 'get' ? OpenapiSpecRequestOptsGet<Query> : OpenapiSpecRequestOptsPost<JsonContent>) & {
354
354
  [K in Params[number]]: string | IdType;
355
355
  }): Promise<OpenapiSpecSession<OpenapiPaths>>;
356
356
  private makeRequest;
@@ -1,11 +1,11 @@
1
1
  import { IdType } from '@rvoh/dream';
2
- import { ExcludeNever, ExtractOpenapiParams, First, GetResolvedOpenapiUrl, RoutesWithHttpMethod } from './helpers/openapiTypeHelpers.js';
2
+ import { ExtractOpenapiParams, RequestBody, RequestQueryParameters, ResponseBody, ResponseCodeForUri, RoutesWithHttpMethod } from './helpers/openapiTypeHelpers.js';
3
3
  import { OpenapiSpecRequestOptsGet, OpenapiSpecRequestOptsPost, OpenapiSpecResponse } from './OpenapiSpecRequest.js';
4
4
  import supersession from './supersession.js';
5
5
  export declare class OpenapiSpecSession<OpenapiPaths> {
6
6
  private _session;
7
7
  constructor(_session: ReturnType<typeof supersession>);
8
- get<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'get' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends keyof ResponseMap & number, HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths], ResponseMap extends HttpMethodMap['get' & keyof HttpMethodMap]['responses' & keyof HttpMethodMap['get' & keyof HttpMethodMap]], ParametersMap extends HttpMethodMap['get' & keyof HttpMethodMap]['parameters' & keyof HttpMethodMap['get' & keyof HttpMethodMap]], QueryMap extends ParametersMap['query' & keyof ParametersMap], Params extends string[] & ExtractOpenapiParams<Uri>, Content extends ResponseMap extends undefined ? undefined : ResponseCode extends undefined ? undefined : ResponseCode extends number ? ResponseMap[ResponseCode & keyof ResponseMap]['content' & keyof ResponseMap[ResponseCode & keyof ResponseMap]] : undefined, JsonContent extends Content extends undefined ? undefined : Content['application/json' & keyof Content]>(
8
+ get<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'get' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'get'>, Params extends string[] & ExtractOpenapiParams<Uri>, Query extends OpenapiSpecRequestOptsGet<RequestQueryParameters<OpenapiPaths, 'get', Uri>>, JsonContent extends ResponseBody<OpenapiPaths, 'get', Uri, ResponseCode>>(
9
9
  /**
10
10
  * The uri on your background you are trying to hit.
11
11
  * This should be a path, like '/users'.
@@ -58,10 +58,10 @@ export declare class OpenapiSpecSession<OpenapiPaths> {
58
58
  * @param opts.headers - headers you would like to send with your request.
59
59
  * (Optional)
60
60
  */
61
- opts?: Params['length'] extends 0 ? OpenapiSpecRequestOptsGet<QueryMap> : OpenapiSpecRequestOptsGet<QueryMap> & {
61
+ opts?: Params['length'] extends 0 ? Query : Query & {
62
62
  [K in Params[number]]: string | IdType;
63
63
  }): Promise<OpenapiSpecResponse<JsonContent>>;
64
- post<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'post' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends keyof ResponseMap & number, HttpMethodMap extends OpenapiPaths[ResolvedUri & keyof OpenapiPaths], ResolvedUri extends First<GetResolvedOpenapiUrl<OpenapiPaths, Uri> & keyof OpenapiPaths>, Params extends string[] & ExtractOpenapiParams<Uri>, ResponseMap extends HttpMethodMap['post' & keyof HttpMethodMap]['responses' & keyof HttpMethodMap['post' & keyof HttpMethodMap]], Content extends ResponseMap extends undefined ? undefined : ResponseCode extends undefined ? undefined : ResponseCode extends number ? ResponseMap[ResponseCode & keyof ResponseMap]['content' & keyof ResponseMap[ResponseCode & keyof ResponseMap]] : undefined, JsonContent extends Content extends undefined ? undefined : Content['application/json' & keyof Content], RequestBodyMap extends HttpMethodMap['post' & keyof HttpMethodMap]['requestBody' & keyof HttpMethodMap['post' & keyof HttpMethodMap]], RequestBodyContent extends RequestBodyMap extends undefined ? undefined : RequestBodyMap['content' & keyof RequestBodyMap], RequestBodyJsonContent extends RequestBodyContent extends undefined ? undefined : RequestBodyContent['application/json' & keyof RequestBodyContent]>(
64
+ post<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'post' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'post'>, Params extends string[] & ExtractOpenapiParams<Uri>, RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'post', Uri>, JsonContent extends ResponseBody<OpenapiPaths, 'post', Uri, ResponseCode>>(
65
65
  /**
66
66
  * The uri on your background you are trying to hit.
67
67
  * This should be a path, like '/users'.
@@ -120,7 +120,7 @@ export declare class OpenapiSpecSession<OpenapiPaths> {
120
120
  opts?: Params['length'] extends 0 ? OpenapiSpecRequestOptsPost<RequestBodyJsonContent> : OpenapiSpecRequestOptsPost<RequestBodyJsonContent> & {
121
121
  [K in Params[number]]: string;
122
122
  }): Promise<OpenapiSpecResponse<JsonContent>>;
123
- put<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'put' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends keyof ResponseMap & number, HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths], Params extends string[] & ExtractOpenapiParams<Uri>, ResponseMap extends HttpMethodMap['put' & keyof HttpMethodMap]['responses' & keyof HttpMethodMap['put' & keyof HttpMethodMap]], Content extends ResponseMap extends undefined ? undefined : ResponseCode extends undefined ? undefined : ResponseCode extends number ? ResponseMap[ResponseCode & keyof ResponseMap]['content' & keyof ResponseMap[ResponseCode & keyof ResponseMap]] : undefined, JsonContent extends Content extends undefined ? undefined : Content['application/json' & keyof Content], RequestBodyMap extends HttpMethodMap['put' & keyof HttpMethodMap]['requestBody' & keyof HttpMethodMap['put' & keyof HttpMethodMap]], RequestBodyContent extends RequestBodyMap extends undefined ? undefined : RequestBodyMap['content' & keyof RequestBodyMap], RequestBodyJsonContent extends RequestBodyContent extends undefined ? undefined : RequestBodyContent['application/json' & keyof RequestBodyContent]>(
123
+ put<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'put' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'put'>, Params extends string[] & ExtractOpenapiParams<Uri>, JsonContent extends ResponseBody<OpenapiPaths, 'put', Uri, ResponseCode>, RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'put', Uri>>(
124
124
  /**
125
125
  * The uri on your background you are trying to hit.
126
126
  * This should be a path, like '/users'.
@@ -180,7 +180,7 @@ export declare class OpenapiSpecSession<OpenapiPaths> {
180
180
  opts?: Params['length'] extends 0 ? OpenapiSpecRequestOptsPost<RequestBodyJsonContent> : OpenapiSpecRequestOptsPost<RequestBodyJsonContent> & {
181
181
  [K in Params[number]]: string | IdType;
182
182
  }): Promise<OpenapiSpecResponse<JsonContent>>;
183
- patch<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'patch' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends keyof ResponseMap & number, HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths], Params extends string[] & ExtractOpenapiParams<Uri>, ResponseMap extends HttpMethodMap['patch' & keyof HttpMethodMap]['responses' & keyof HttpMethodMap['patch' & keyof HttpMethodMap]], Content extends ResponseMap extends undefined ? undefined : ResponseCode extends undefined ? undefined : ResponseCode extends number ? ResponseMap[ResponseCode & keyof ResponseMap]['content' & keyof ResponseMap[ResponseCode & keyof ResponseMap]] : undefined, JsonContent extends Content extends undefined ? undefined : Content['application/json' & keyof Content], RequestBodyMap extends HttpMethodMap['patch' & keyof HttpMethodMap]['requestBody' & keyof HttpMethodMap['patch' & keyof HttpMethodMap]], RequestBodyContent extends RequestBodyMap extends undefined ? undefined : RequestBodyMap['content' & keyof RequestBodyMap], RequestBodyJsonContent extends RequestBodyContent extends undefined ? undefined : RequestBodyContent['application/json' & keyof RequestBodyContent]>(
183
+ patch<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'patch' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'patch'>, Params extends string[] & ExtractOpenapiParams<Uri>, JsonContent extends ResponseBody<OpenapiPaths, 'patch', Uri, ResponseCode>, RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'patch', Uri>>(
184
184
  /**
185
185
  * The uri on your background you are trying to hit.
186
186
  * This should be a path, like '/posts'.
@@ -239,7 +239,7 @@ export declare class OpenapiSpecSession<OpenapiPaths> {
239
239
  opts?: Params['length'] extends 0 ? OpenapiSpecRequestOptsPost<RequestBodyJsonContent> : OpenapiSpecRequestOptsPost<RequestBodyJsonContent> & {
240
240
  [K in Params[number]]: string | IdType;
241
241
  }): Promise<OpenapiSpecResponse<JsonContent>>;
242
- delete<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'delete' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends Params['length'] extends 0 ? never : keyof ExcludeNever<ResponseMap> & number, HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths], Params extends string[] & ExtractOpenapiParams<Uri>, ResponseMap extends HttpMethodMap['delete' & keyof HttpMethodMap]['responses' & keyof HttpMethodMap['delete' & keyof HttpMethodMap]], Content extends ResponseMap extends undefined ? undefined : ResponseCode extends undefined ? undefined : ResponseCode extends number ? ResponseMap[ResponseCode & keyof ResponseMap]['content' & keyof ResponseMap[ResponseCode & keyof ResponseMap]] : undefined, JsonContent extends Content extends undefined ? undefined : Content['application/json' & keyof Content], RequestBodyMap extends HttpMethodMap['delete' & keyof HttpMethodMap]['requestBody' & keyof HttpMethodMap['delete' & keyof HttpMethodMap]], RequestBodyContent extends RequestBodyMap extends undefined ? undefined : RequestBodyMap['content' & keyof RequestBodyMap], RequestBodyJsonContent extends RequestBodyContent extends undefined ? undefined : RequestBodyContent['application/json' & keyof RequestBodyContent]>(
242
+ delete<const Uri extends RoutesWithHttpMethod<OpenapiPaths, 'delete' & keyof OpenapiPaths[keyof OpenapiPaths]> & string, const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'delete'>, Params extends string[] & ExtractOpenapiParams<Uri>, JsonContent extends ResponseBody<OpenapiPaths, 'delete', Uri, ResponseCode>, RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'delete', Uri>>(
243
243
  /**
244
244
  * The uri on your background you are trying to hit.
245
245
  * This should be a path, like '/users'.
@@ -25,5 +25,9 @@ type FilterOutNever<T> = {
25
25
  export type RoutesWithHttpMethod<T, HttpMethod extends keyof T[keyof T], R = {
26
26
  [K in keyof FilterOutNever<T>]: T[K][HttpMethod & keyof T[K]] extends object ? K : never;
27
27
  }> = R[keyof R];
28
+ export type RequestQueryParameters<OpenapiPaths, HttpMethod, Uri, HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths] = OpenapiPaths[Uri & keyof OpenapiPaths], ParametersMap extends HttpMethodMap[HttpMethod & keyof HttpMethodMap]['parameters' & keyof HttpMethodMap[HttpMethod & keyof HttpMethodMap]] = HttpMethodMap[HttpMethod & keyof HttpMethodMap]['parameters' & keyof HttpMethodMap[HttpMethod & keyof HttpMethodMap]], QueryMap extends ParametersMap['query' & keyof ParametersMap] = ParametersMap['query' & keyof ParametersMap]> = QueryMap;
29
+ export type ResponseBody<OpenapiPaths, HttpMethod, Uri, ResponseCode, HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths] = OpenapiPaths[Uri & keyof OpenapiPaths], ResponseMap extends HttpMethodMap[HttpMethod & keyof HttpMethodMap]['responses' & keyof HttpMethodMap[HttpMethod & keyof HttpMethodMap]] = HttpMethodMap[HttpMethod & keyof HttpMethodMap]['responses' & keyof HttpMethodMap[HttpMethod & keyof HttpMethodMap]], Content extends ResponseMap extends undefined ? undefined : ResponseCode extends undefined ? undefined : ResponseCode extends number ? ResponseMap[ResponseCode & keyof ResponseMap]['content' & keyof ResponseMap[ResponseCode & keyof ResponseMap]] : undefined = ResponseMap extends undefined ? undefined : ResponseCode extends undefined ? undefined : ResponseCode extends number ? ResponseMap[ResponseCode & keyof ResponseMap]['content' & keyof ResponseMap[ResponseCode & keyof ResponseMap]] : undefined, JsonContent extends Content extends undefined ? undefined : Content['application/json' & keyof Content] = Content extends undefined ? undefined : Content['application/json' & keyof Content]> = JsonContent;
30
+ export type RequestBody<OpenapiPaths, HttpMethod, Uri, HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths] = OpenapiPaths[Uri & keyof OpenapiPaths], UriPayload extends HttpMethodMap[HttpMethod & keyof HttpMethodMap] = HttpMethodMap[HttpMethod & keyof HttpMethodMap], RequestBodyMap extends UriPayload['requestBody' & keyof UriPayload] extends never ? undefined : UriPayload['requestBody' & keyof UriPayload] = UriPayload['requestBody' & keyof UriPayload] extends never ? undefined : UriPayload['requestBody' & keyof UriPayload], RequestBodyContent extends RequestBodyMap extends undefined ? undefined : RequestBodyMap['content' & keyof RequestBodyMap] = RequestBodyMap extends undefined ? undefined : RequestBodyMap['content' & keyof RequestBodyMap], RequestBodyJsonContent extends RequestBodyContent extends undefined ? undefined : RequestBodyContent['application/json' & keyof RequestBodyContent] = RequestBodyContent extends undefined ? undefined : RequestBodyContent['application/json' & keyof RequestBodyContent]> = RequestBodyJsonContent;
31
+ export type ResponseCodeForUri<OpenapiPaths, Uri, HttpMethod, HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths] = OpenapiPaths[Uri & keyof OpenapiPaths], ResponseMap extends HttpMethodMap[HttpMethod & keyof HttpMethodMap]['responses' & keyof HttpMethodMap[HttpMethod & keyof HttpMethodMap]] = HttpMethodMap[HttpMethod & keyof HttpMethodMap]['responses' & keyof HttpMethodMap[HttpMethod & keyof HttpMethodMap]]> = keyof ResponseMap & number;
28
32
  type RequestURISegment = string extends `${string}/${string}` ? never : string;
29
33
  export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@rvoh/psychic-spec-helpers",
4
- "version": "0.7.3",
4
+ "version": "0.7.4",
5
5
  "description": "psychic framework spec helpers",
6
6
  "author": "RVO Health",
7
7
  "repository": {
@@ -4,8 +4,10 @@ import { createPsychicServer } from '../index.js'
4
4
  import fillOpenapiParams from './helpers/fillOpenapiParams.js'
5
5
  import {
6
6
  ExtractOpenapiParams,
7
- First,
8
- GetResolvedOpenapiUrl,
7
+ RequestBody,
8
+ RequestQueryParameters,
9
+ ResponseBody,
10
+ ResponseCodeForUri,
9
11
  RoutesWithHttpMethod,
10
12
  } from './helpers/openapiTypeHelpers.js'
11
13
  import { OpenapiSpecSession } from './OpenapiSpecSession.js'
@@ -31,25 +33,10 @@ export class OpenapiSpecRequest<OpenapiPaths = undefined> {
31
33
  'get' & keyof OpenapiPaths[keyof OpenapiPaths]
32
34
  > &
33
35
  string,
34
- const ResponseCode extends keyof ResponseMap & number,
35
- HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths],
36
- ResponseMap extends HttpMethodMap['get' & keyof HttpMethodMap]['responses' &
37
- keyof HttpMethodMap['get' & keyof HttpMethodMap]],
38
- ParametersMap extends HttpMethodMap['get' & keyof HttpMethodMap]['parameters' &
39
- keyof HttpMethodMap['get' & keyof HttpMethodMap]],
40
- QueryMap extends ParametersMap['query' & keyof ParametersMap],
36
+ const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'get'>,
41
37
  Params extends string[] & ExtractOpenapiParams<Uri>,
42
- Content extends ResponseMap extends undefined
43
- ? undefined
44
- : ResponseCode extends undefined
45
- ? undefined
46
- : ResponseCode extends number
47
- ? ResponseMap[ResponseCode & keyof ResponseMap]['content' &
48
- keyof ResponseMap[ResponseCode & keyof ResponseMap]]
49
- : undefined,
50
- JsonContent extends Content extends undefined
51
- ? undefined
52
- : Content['application/json' & keyof Content],
38
+ Query extends OpenapiSpecRequestOptsGet<RequestQueryParameters<OpenapiPaths, 'get', Uri>>,
39
+ JsonContent extends ResponseBody<OpenapiPaths, 'get', Uri, ResponseCode>,
53
40
  >(
54
41
  /**
55
42
  * The uri on your background you are trying to hit.
@@ -102,9 +89,7 @@ export class OpenapiSpecRequest<OpenapiPaths = undefined> {
102
89
  * @param opts.headers - headers you would like to send with your request.
103
90
  * (Optional)
104
91
  */
105
- opts?: Params['length'] extends 0
106
- ? OpenapiSpecRequestOptsGet<QueryMap>
107
- : OpenapiSpecRequestOptsGet<QueryMap> & { [K in Params[number]]: string | IdType }
92
+ opts?: Params['length'] extends 0 ? Query : Query & { [K in Params[number]]: string | IdType }
108
93
  ): Promise<OpenapiSpecResponse<JsonContent>> {
109
94
  return (await this.makeRequest(
110
95
  'get',
@@ -120,31 +105,10 @@ export class OpenapiSpecRequest<OpenapiPaths = undefined> {
120
105
  'post' & keyof OpenapiPaths[keyof OpenapiPaths]
121
106
  > &
122
107
  string,
123
- const ResponseCode extends keyof ResponseMap & number,
124
- HttpMethodMap extends OpenapiPaths[ResolvedUri & keyof OpenapiPaths],
125
- ResolvedUri extends First<GetResolvedOpenapiUrl<OpenapiPaths, Uri> & keyof OpenapiPaths>,
108
+ const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'post'>,
126
109
  Params extends string[] & ExtractOpenapiParams<Uri>,
127
- ResponseMap extends HttpMethodMap['post' & keyof HttpMethodMap]['responses' &
128
- keyof HttpMethodMap['post' & keyof HttpMethodMap]],
129
- Content extends ResponseMap extends undefined
130
- ? undefined
131
- : ResponseCode extends undefined
132
- ? undefined
133
- : ResponseCode extends number
134
- ? ResponseMap[ResponseCode & keyof ResponseMap]['content' &
135
- keyof ResponseMap[ResponseCode & keyof ResponseMap]]
136
- : undefined,
137
- JsonContent extends Content extends undefined
138
- ? undefined
139
- : Content['application/json' & keyof Content],
140
- RequestBodyMap extends HttpMethodMap['post' & keyof HttpMethodMap]['requestBody' &
141
- keyof HttpMethodMap['post' & keyof HttpMethodMap]],
142
- RequestBodyContent extends RequestBodyMap extends undefined
143
- ? undefined
144
- : RequestBodyMap['content' & keyof RequestBodyMap],
145
- RequestBodyJsonContent extends RequestBodyContent extends undefined
146
- ? undefined
147
- : RequestBodyContent['application/json' & keyof RequestBodyContent],
110
+ RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'post', Uri>,
111
+ JsonContent extends ResponseBody<OpenapiPaths, 'post', Uri, ResponseCode>,
148
112
  >(
149
113
  /**
150
114
  * The uri on your background you are trying to hit.
@@ -213,30 +177,10 @@ export class OpenapiSpecRequest<OpenapiPaths = undefined> {
213
177
  'put' & keyof OpenapiPaths[keyof OpenapiPaths]
214
178
  > &
215
179
  string,
216
- const ResponseCode extends keyof ResponseMap & number,
217
- HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths],
180
+ const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'put'>,
218
181
  Params extends string[] & ExtractOpenapiParams<Uri>,
219
- ResponseMap extends HttpMethodMap['put' & keyof HttpMethodMap]['responses' &
220
- keyof HttpMethodMap['put' & keyof HttpMethodMap]],
221
- Content extends ResponseMap extends undefined
222
- ? undefined
223
- : ResponseCode extends undefined
224
- ? undefined
225
- : ResponseCode extends number
226
- ? ResponseMap[ResponseCode & keyof ResponseMap]['content' &
227
- keyof ResponseMap[ResponseCode & keyof ResponseMap]]
228
- : undefined,
229
- JsonContent extends Content extends undefined
230
- ? undefined
231
- : Content['application/json' & keyof Content],
232
- RequestBodyMap extends HttpMethodMap['put' & keyof HttpMethodMap]['requestBody' &
233
- keyof HttpMethodMap['put' & keyof HttpMethodMap]],
234
- RequestBodyContent extends RequestBodyMap extends undefined
235
- ? undefined
236
- : RequestBodyMap['content' & keyof RequestBodyMap],
237
- RequestBodyJsonContent extends RequestBodyContent extends undefined
238
- ? undefined
239
- : RequestBodyContent['application/json' & keyof RequestBodyContent],
182
+ JsonContent extends ResponseBody<OpenapiPaths, 'put', Uri, ResponseCode>,
183
+ RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'put', Uri>,
240
184
  >(
241
185
  /**
242
186
  * The uri on your background you are trying to hit.
@@ -313,30 +257,10 @@ export class OpenapiSpecRequest<OpenapiPaths = undefined> {
313
257
  'patch' & keyof OpenapiPaths[keyof OpenapiPaths]
314
258
  > &
315
259
  string,
316
- const ResponseCode extends keyof ResponseMap & number,
317
- HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths],
260
+ const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'patch'>,
318
261
  Params extends string[] & ExtractOpenapiParams<Uri>,
319
- ResponseMap extends HttpMethodMap['patch' & keyof HttpMethodMap]['responses' &
320
- keyof HttpMethodMap['patch' & keyof HttpMethodMap]],
321
- Content extends ResponseMap extends undefined
322
- ? undefined
323
- : ResponseCode extends undefined
324
- ? undefined
325
- : ResponseCode extends number
326
- ? ResponseMap[ResponseCode & keyof ResponseMap]['content' &
327
- keyof ResponseMap[ResponseCode & keyof ResponseMap]]
328
- : undefined,
329
- JsonContent extends Content extends undefined
330
- ? undefined
331
- : Content['application/json' & keyof Content],
332
- RequestBodyMap extends HttpMethodMap['patch' & keyof HttpMethodMap]['requestBody' &
333
- keyof HttpMethodMap['patch' & keyof HttpMethodMap]],
334
- RequestBodyContent extends RequestBodyMap extends undefined
335
- ? undefined
336
- : RequestBodyMap['content' & keyof RequestBodyMap],
337
- RequestBodyJsonContent extends RequestBodyContent extends undefined
338
- ? undefined
339
- : RequestBodyContent['application/json' & keyof RequestBodyContent],
262
+ JsonContent extends ResponseBody<OpenapiPaths, 'patch', Uri, ResponseCode>,
263
+ RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'patch', Uri>,
340
264
  >(
341
265
  /**
342
266
  * The uri on your background you are trying to hit.
@@ -412,30 +336,10 @@ export class OpenapiSpecRequest<OpenapiPaths = undefined> {
412
336
  'delete' & keyof OpenapiPaths[keyof OpenapiPaths]
413
337
  > &
414
338
  string,
415
- const ResponseCode extends keyof ResponseMap & number,
416
- HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths],
339
+ const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'delete'>,
417
340
  Params extends string[] & ExtractOpenapiParams<Uri>,
418
- ResponseMap extends HttpMethodMap['delete' & keyof HttpMethodMap]['responses' &
419
- keyof HttpMethodMap['delete' & keyof HttpMethodMap]],
420
- Content extends ResponseMap extends undefined
421
- ? undefined
422
- : ResponseCode extends undefined
423
- ? undefined
424
- : ResponseCode extends number
425
- ? ResponseMap[ResponseCode & keyof ResponseMap]['content' &
426
- keyof ResponseMap[ResponseCode & keyof ResponseMap]]
427
- : undefined,
428
- JsonContent extends Content extends undefined
429
- ? undefined
430
- : Content['application/json' & keyof Content],
431
- RequestBodyMap extends HttpMethodMap['delete' & keyof HttpMethodMap]['requestBody' &
432
- keyof HttpMethodMap['delete' & keyof HttpMethodMap]],
433
- RequestBodyContent extends RequestBodyMap extends undefined
434
- ? undefined
435
- : RequestBodyMap['content' & keyof RequestBodyMap],
436
- RequestBodyJsonContent extends RequestBodyContent extends undefined
437
- ? undefined
438
- : RequestBodyContent['application/json' & keyof RequestBodyContent],
341
+ JsonContent extends ResponseBody<OpenapiPaths, 'delete', Uri, ResponseCode>,
342
+ RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'delete', Uri>,
439
343
  >(
440
344
  /**
441
345
  * The uri on your background you are trying to hit.
@@ -512,22 +416,10 @@ export class OpenapiSpecRequest<OpenapiPaths = undefined> {
512
416
  ProvidedHttpMethod & keyof OpenapiPaths[keyof OpenapiPaths]
513
417
  > &
514
418
  string,
515
- const ResponseCode extends keyof ResponseMap & number,
516
- HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths],
419
+ const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, ProvidedHttpMethod>,
517
420
  Params extends string[] & ExtractOpenapiParams<Uri>,
518
- ResponseMap extends HttpMethodMap[ProvidedHttpMethod & keyof HttpMethodMap]['responses' &
519
- keyof HttpMethodMap[ProvidedHttpMethod & keyof HttpMethodMap]],
520
- ParametersMap extends HttpMethodMap[ProvidedHttpMethod & keyof HttpMethodMap]['parameters' &
521
- keyof HttpMethodMap[ProvidedHttpMethod & keyof HttpMethodMap]],
522
- QueryMap extends ParametersMap['query' & keyof ParametersMap],
523
- RequestBodyMap extends HttpMethodMap[ProvidedHttpMethod & keyof HttpMethodMap]['requestBody' &
524
- keyof HttpMethodMap[ProvidedHttpMethod & keyof HttpMethodMap]],
525
- RequestBodyContent extends RequestBodyMap extends undefined
526
- ? undefined
527
- : RequestBodyMap['content' & keyof RequestBodyMap],
528
- RequestBodyJsonContent extends RequestBodyContent extends undefined
529
- ? undefined
530
- : RequestBodyContent['application/json' & keyof RequestBodyContent],
421
+ JsonContent extends RequestBody<OpenapiPaths, ProvidedHttpMethod, Uri>,
422
+ Query extends OpenapiSpecRequestOptsGet<RequestQueryParameters<OpenapiPaths, 'get', Uri>>,
531
423
  >(
532
424
  httpMethod: ProvidedHttpMethod,
533
425
  /**
@@ -596,8 +488,8 @@ export class OpenapiSpecRequest<OpenapiPaths = undefined> {
596
488
  * (Optional)
597
489
  */
598
490
  opts?: (ProvidedHttpMethod extends 'get'
599
- ? OpenapiSpecRequestOptsGet<QueryMap>
600
- : OpenapiSpecRequestOptsPost<RequestBodyJsonContent>) & {
491
+ ? OpenapiSpecRequestOptsGet<Query>
492
+ : OpenapiSpecRequestOptsPost<JsonContent>) & {
601
493
  [K in Params[number]]: string | IdType
602
494
  }
603
495
  ): Promise<OpenapiSpecSession<OpenapiPaths>> {
@@ -1,10 +1,11 @@
1
1
  import { IdType } from '@rvoh/dream'
2
2
  import fillOpenapiParams from './helpers/fillOpenapiParams.js'
3
3
  import {
4
- ExcludeNever,
5
4
  ExtractOpenapiParams,
6
- First,
7
- GetResolvedOpenapiUrl,
5
+ RequestBody,
6
+ RequestQueryParameters,
7
+ ResponseBody,
8
+ ResponseCodeForUri,
8
9
  RoutesWithHttpMethod,
9
10
  } from './helpers/openapiTypeHelpers.js'
10
11
  import {
@@ -26,25 +27,10 @@ export class OpenapiSpecSession<OpenapiPaths> {
26
27
  'get' & keyof OpenapiPaths[keyof OpenapiPaths]
27
28
  > &
28
29
  string,
29
- const ResponseCode extends keyof ResponseMap & number,
30
- HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths],
31
- ResponseMap extends HttpMethodMap['get' & keyof HttpMethodMap]['responses' &
32
- keyof HttpMethodMap['get' & keyof HttpMethodMap]],
33
- ParametersMap extends HttpMethodMap['get' & keyof HttpMethodMap]['parameters' &
34
- keyof HttpMethodMap['get' & keyof HttpMethodMap]],
35
- QueryMap extends ParametersMap['query' & keyof ParametersMap],
30
+ const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'get'>,
36
31
  Params extends string[] & ExtractOpenapiParams<Uri>,
37
- Content extends ResponseMap extends undefined
38
- ? undefined
39
- : ResponseCode extends undefined
40
- ? undefined
41
- : ResponseCode extends number
42
- ? ResponseMap[ResponseCode & keyof ResponseMap]['content' &
43
- keyof ResponseMap[ResponseCode & keyof ResponseMap]]
44
- : undefined,
45
- JsonContent extends Content extends undefined
46
- ? undefined
47
- : Content['application/json' & keyof Content],
32
+ Query extends OpenapiSpecRequestOptsGet<RequestQueryParameters<OpenapiPaths, 'get', Uri>>,
33
+ JsonContent extends ResponseBody<OpenapiPaths, 'get', Uri, ResponseCode>,
48
34
  >(
49
35
  /**
50
36
  * The uri on your background you are trying to hit.
@@ -100,9 +86,7 @@ export class OpenapiSpecSession<OpenapiPaths> {
100
86
  * @param opts.headers - headers you would like to send with your request.
101
87
  * (Optional)
102
88
  */
103
- opts?: Params['length'] extends 0
104
- ? OpenapiSpecRequestOptsGet<QueryMap>
105
- : OpenapiSpecRequestOptsGet<QueryMap> & { [K in Params[number]]: string | IdType }
89
+ opts?: Params['length'] extends 0 ? Query : Query & { [K in Params[number]]: string | IdType }
106
90
  ): Promise<OpenapiSpecResponse<JsonContent>> {
107
91
  return (await this.makeRequest(
108
92
  'get',
@@ -123,31 +107,10 @@ export class OpenapiSpecSession<OpenapiPaths> {
123
107
  'post' & keyof OpenapiPaths[keyof OpenapiPaths]
124
108
  > &
125
109
  string,
126
- const ResponseCode extends keyof ResponseMap & number,
127
- HttpMethodMap extends OpenapiPaths[ResolvedUri & keyof OpenapiPaths],
128
- ResolvedUri extends First<GetResolvedOpenapiUrl<OpenapiPaths, Uri> & keyof OpenapiPaths>,
110
+ const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'post'>,
129
111
  Params extends string[] & ExtractOpenapiParams<Uri>,
130
- ResponseMap extends HttpMethodMap['post' & keyof HttpMethodMap]['responses' &
131
- keyof HttpMethodMap['post' & keyof HttpMethodMap]],
132
- Content extends ResponseMap extends undefined
133
- ? undefined
134
- : ResponseCode extends undefined
135
- ? undefined
136
- : ResponseCode extends number
137
- ? ResponseMap[ResponseCode & keyof ResponseMap]['content' &
138
- keyof ResponseMap[ResponseCode & keyof ResponseMap]]
139
- : undefined,
140
- JsonContent extends Content extends undefined
141
- ? undefined
142
- : Content['application/json' & keyof Content],
143
- RequestBodyMap extends HttpMethodMap['post' & keyof HttpMethodMap]['requestBody' &
144
- keyof HttpMethodMap['post' & keyof HttpMethodMap]],
145
- RequestBodyContent extends RequestBodyMap extends undefined
146
- ? undefined
147
- : RequestBodyMap['content' & keyof RequestBodyMap],
148
- RequestBodyJsonContent extends RequestBodyContent extends undefined
149
- ? undefined
150
- : RequestBodyContent['application/json' & keyof RequestBodyContent],
112
+ RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'post', Uri>,
113
+ JsonContent extends ResponseBody<OpenapiPaths, 'post', Uri, ResponseCode>,
151
114
  >(
152
115
  /**
153
116
  * The uri on your background you are trying to hit.
@@ -219,30 +182,10 @@ export class OpenapiSpecSession<OpenapiPaths> {
219
182
  'put' & keyof OpenapiPaths[keyof OpenapiPaths]
220
183
  > &
221
184
  string,
222
- const ResponseCode extends keyof ResponseMap & number,
223
- HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths],
185
+ const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'put'>,
224
186
  Params extends string[] & ExtractOpenapiParams<Uri>,
225
- ResponseMap extends HttpMethodMap['put' & keyof HttpMethodMap]['responses' &
226
- keyof HttpMethodMap['put' & keyof HttpMethodMap]],
227
- Content extends ResponseMap extends undefined
228
- ? undefined
229
- : ResponseCode extends undefined
230
- ? undefined
231
- : ResponseCode extends number
232
- ? ResponseMap[ResponseCode & keyof ResponseMap]['content' &
233
- keyof ResponseMap[ResponseCode & keyof ResponseMap]]
234
- : undefined,
235
- JsonContent extends Content extends undefined
236
- ? undefined
237
- : Content['application/json' & keyof Content],
238
- RequestBodyMap extends HttpMethodMap['put' & keyof HttpMethodMap]['requestBody' &
239
- keyof HttpMethodMap['put' & keyof HttpMethodMap]],
240
- RequestBodyContent extends RequestBodyMap extends undefined
241
- ? undefined
242
- : RequestBodyMap['content' & keyof RequestBodyMap],
243
- RequestBodyJsonContent extends RequestBodyContent extends undefined
244
- ? undefined
245
- : RequestBodyContent['application/json' & keyof RequestBodyContent],
187
+ JsonContent extends ResponseBody<OpenapiPaths, 'put', Uri, ResponseCode>,
188
+ RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'put', Uri>,
246
189
  >(
247
190
  /**
248
191
  * The uri on your background you are trying to hit.
@@ -322,30 +265,10 @@ export class OpenapiSpecSession<OpenapiPaths> {
322
265
  'patch' & keyof OpenapiPaths[keyof OpenapiPaths]
323
266
  > &
324
267
  string,
325
- const ResponseCode extends keyof ResponseMap & number,
326
- HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths],
268
+ const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'patch'>,
327
269
  Params extends string[] & ExtractOpenapiParams<Uri>,
328
- ResponseMap extends HttpMethodMap['patch' & keyof HttpMethodMap]['responses' &
329
- keyof HttpMethodMap['patch' & keyof HttpMethodMap]],
330
- Content extends ResponseMap extends undefined
331
- ? undefined
332
- : ResponseCode extends undefined
333
- ? undefined
334
- : ResponseCode extends number
335
- ? ResponseMap[ResponseCode & keyof ResponseMap]['content' &
336
- keyof ResponseMap[ResponseCode & keyof ResponseMap]]
337
- : undefined,
338
- JsonContent extends Content extends undefined
339
- ? undefined
340
- : Content['application/json' & keyof Content],
341
- RequestBodyMap extends HttpMethodMap['patch' & keyof HttpMethodMap]['requestBody' &
342
- keyof HttpMethodMap['patch' & keyof HttpMethodMap]],
343
- RequestBodyContent extends RequestBodyMap extends undefined
344
- ? undefined
345
- : RequestBodyMap['content' & keyof RequestBodyMap],
346
- RequestBodyJsonContent extends RequestBodyContent extends undefined
347
- ? undefined
348
- : RequestBodyContent['application/json' & keyof RequestBodyContent],
270
+ JsonContent extends ResponseBody<OpenapiPaths, 'patch', Uri, ResponseCode>,
271
+ RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'patch', Uri>,
349
272
  >(
350
273
  /**
351
274
  * The uri on your background you are trying to hit.
@@ -424,32 +347,10 @@ export class OpenapiSpecSession<OpenapiPaths> {
424
347
  'delete' & keyof OpenapiPaths[keyof OpenapiPaths]
425
348
  > &
426
349
  string,
427
- const ResponseCode extends Params['length'] extends 0
428
- ? never
429
- : keyof ExcludeNever<ResponseMap> & number,
430
- HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths],
350
+ const ResponseCode extends ResponseCodeForUri<OpenapiPaths, Uri, 'delete'>,
431
351
  Params extends string[] & ExtractOpenapiParams<Uri>,
432
- ResponseMap extends HttpMethodMap['delete' & keyof HttpMethodMap]['responses' &
433
- keyof HttpMethodMap['delete' & keyof HttpMethodMap]],
434
- Content extends ResponseMap extends undefined
435
- ? undefined
436
- : ResponseCode extends undefined
437
- ? undefined
438
- : ResponseCode extends number
439
- ? ResponseMap[ResponseCode & keyof ResponseMap]['content' &
440
- keyof ResponseMap[ResponseCode & keyof ResponseMap]]
441
- : undefined,
442
- JsonContent extends Content extends undefined
443
- ? undefined
444
- : Content['application/json' & keyof Content],
445
- RequestBodyMap extends HttpMethodMap['delete' & keyof HttpMethodMap]['requestBody' &
446
- keyof HttpMethodMap['delete' & keyof HttpMethodMap]],
447
- RequestBodyContent extends RequestBodyMap extends undefined
448
- ? undefined
449
- : RequestBodyMap['content' & keyof RequestBodyMap],
450
- RequestBodyJsonContent extends RequestBodyContent extends undefined
451
- ? undefined
452
- : RequestBodyContent['application/json' & keyof RequestBodyContent],
352
+ JsonContent extends ResponseBody<OpenapiPaths, 'delete', Uri, ResponseCode>,
353
+ RequestBodyJsonContent extends RequestBody<OpenapiPaths, 'delete', Uri>,
453
354
  >(
454
355
  /**
455
356
  * The uri on your background you are trying to hit.
@@ -76,4 +76,88 @@ export type RoutesWithHttpMethod<
76
76
  },
77
77
  > = R[keyof R]
78
78
 
79
+ export type RequestQueryParameters<
80
+ OpenapiPaths,
81
+ HttpMethod,
82
+ Uri,
83
+ // ResponseCode,
84
+ HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths] = OpenapiPaths[Uri &
85
+ keyof OpenapiPaths],
86
+ ParametersMap extends HttpMethodMap[HttpMethod & keyof HttpMethodMap]['parameters' &
87
+ keyof HttpMethodMap[HttpMethod & keyof HttpMethodMap]] = HttpMethodMap[HttpMethod &
88
+ keyof HttpMethodMap]['parameters' & keyof HttpMethodMap[HttpMethod & keyof HttpMethodMap]],
89
+ QueryMap extends ParametersMap['query' & keyof ParametersMap] = ParametersMap['query' &
90
+ keyof ParametersMap],
91
+ > = QueryMap
92
+
93
+ export type ResponseBody<
94
+ OpenapiPaths,
95
+ HttpMethod,
96
+ Uri,
97
+ ResponseCode,
98
+ HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths] = OpenapiPaths[Uri &
99
+ keyof OpenapiPaths],
100
+ ResponseMap extends HttpMethodMap[HttpMethod & keyof HttpMethodMap]['responses' &
101
+ keyof HttpMethodMap[HttpMethod & keyof HttpMethodMap]] = HttpMethodMap[HttpMethod &
102
+ keyof HttpMethodMap]['responses' & keyof HttpMethodMap[HttpMethod & keyof HttpMethodMap]],
103
+ Content extends ResponseMap extends undefined
104
+ ? undefined
105
+ : ResponseCode extends undefined
106
+ ? undefined
107
+ : ResponseCode extends number
108
+ ? ResponseMap[ResponseCode & keyof ResponseMap]['content' &
109
+ keyof ResponseMap[ResponseCode & keyof ResponseMap]]
110
+ : undefined = ResponseMap extends undefined
111
+ ? undefined
112
+ : ResponseCode extends undefined
113
+ ? undefined
114
+ : ResponseCode extends number
115
+ ? ResponseMap[ResponseCode & keyof ResponseMap]['content' &
116
+ keyof ResponseMap[ResponseCode & keyof ResponseMap]]
117
+ : undefined,
118
+ JsonContent extends Content extends undefined
119
+ ? undefined
120
+ : Content['application/json' & keyof Content] = Content extends undefined
121
+ ? undefined
122
+ : Content['application/json' & keyof Content],
123
+ > = JsonContent
124
+
125
+ export type RequestBody<
126
+ OpenapiPaths,
127
+ HttpMethod,
128
+ Uri,
129
+ HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths] = OpenapiPaths[Uri &
130
+ keyof OpenapiPaths],
131
+ UriPayload extends HttpMethodMap[HttpMethod & keyof HttpMethodMap] = HttpMethodMap[HttpMethod &
132
+ keyof HttpMethodMap],
133
+ RequestBodyMap extends UriPayload['requestBody' & keyof UriPayload] extends never
134
+ ? undefined
135
+ : UriPayload['requestBody' & keyof UriPayload] = UriPayload['requestBody' &
136
+ keyof UriPayload] extends never
137
+ ? undefined
138
+ : UriPayload['requestBody' & keyof UriPayload],
139
+ RequestBodyContent extends RequestBodyMap extends undefined
140
+ ? undefined
141
+ : RequestBodyMap['content' & keyof RequestBodyMap] = RequestBodyMap extends undefined
142
+ ? undefined
143
+ : RequestBodyMap['content' & keyof RequestBodyMap],
144
+ RequestBodyJsonContent extends RequestBodyContent extends undefined
145
+ ? undefined
146
+ : RequestBodyContent['application/json' &
147
+ keyof RequestBodyContent] = RequestBodyContent extends undefined
148
+ ? undefined
149
+ : RequestBodyContent['application/json' & keyof RequestBodyContent],
150
+ > = RequestBodyJsonContent
151
+
152
+ export type ResponseCodeForUri<
153
+ OpenapiPaths,
154
+ Uri,
155
+ HttpMethod,
156
+ HttpMethodMap extends OpenapiPaths[Uri & keyof OpenapiPaths] = OpenapiPaths[Uri &
157
+ keyof OpenapiPaths],
158
+ ResponseMap extends HttpMethodMap[HttpMethod & keyof HttpMethodMap]['responses' &
159
+ keyof HttpMethodMap[HttpMethod & keyof HttpMethodMap]] = HttpMethodMap[HttpMethod &
160
+ keyof HttpMethodMap]['responses' & keyof HttpMethodMap[HttpMethod & keyof HttpMethodMap]],
161
+ > = keyof ResponseMap & number
162
+
79
163
  type RequestURISegment = string extends `${string}/${string}` ? never : string