Skip to content

Commit a75f952

Browse files
authored
fix: implement some performance improvements (#667)
* Pre-compute the keys of the `Endpoint` type in order to not have to compute them multiple times * Use interface extends instead of intersections See https://github.com/microsoft/TypeScript/wiki/Performance Part of #666
1 parent 03a6ce6 commit a75f952

File tree

6 files changed

+20
-16
lines changed

6 files changed

+20
-16
lines changed

scripts/update-endpoints/templates/endpoints.ts.template

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,6 @@ export interface Endpoints {
116116
"{{method}}"
117117
>,
118118
{{/each}}
119-
}
119+
}
120+
121+
export type EndpointKeys = keyof Endpoints;

src/EndpointDefaults.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type { Url } from "./Url.js";
77
* The `.endpoint()` method is guaranteed to set all keys defined by RequestParameters
88
* as well as the method property.
99
*/
10-
export type EndpointDefaults = RequestParameters & {
10+
export interface EndpointDefaults extends RequestParameters {
1111
baseUrl: Url;
1212
method: RequestMethod;
1313
url?: Url;
@@ -19,4 +19,4 @@ export type EndpointDefaults = RequestParameters & {
1919
format: string;
2020
previews?: string[];
2121
};
22-
};
22+
}

src/EndpointInterface.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { RequestOptions } from "./RequestOptions.js";
33
import type { RequestParameters } from "./RequestParameters.js";
44
import type { Route } from "./Route.js";
55

6-
import type { Endpoints } from "./generated/Endpoints.js";
6+
import type { EndpointKeys, Endpoints } from "./generated/Endpoints.js";
77

88
export interface EndpointInterface<D extends object = object> {
99
/**
@@ -25,13 +25,13 @@ export interface EndpointInterface<D extends object = object> {
2525
*/
2626
<
2727
R extends Route,
28-
P extends RequestParameters = R extends keyof Endpoints
28+
P extends RequestParameters = R extends EndpointKeys
2929
? Endpoints[R]["parameters"] & RequestParameters
3030
: RequestParameters,
3131
>(
32-
route: keyof Endpoints | R,
32+
route: EndpointKeys | R,
3333
parameters?: P,
34-
): (R extends keyof Endpoints ? Endpoints[R]["request"] : RequestOptions) &
34+
): (R extends EndpointKeys ? Endpoints[R]["request"] : RequestOptions) &
3535
Pick<P, keyof RequestOptions>;
3636

3737
/**
@@ -57,14 +57,14 @@ export interface EndpointInterface<D extends object = object> {
5757
*/
5858
<
5959
R extends Route,
60-
P extends RequestParameters = R extends keyof Endpoints
60+
P extends RequestParameters = R extends EndpointKeys
6161
? Endpoints[R]["parameters"] & RequestParameters
6262
: RequestParameters,
6363
>(
64-
route: keyof Endpoints | R,
64+
route: EndpointKeys | R,
6565
parameters?: P,
6666
): D &
67-
(R extends keyof Endpoints
67+
(R extends EndpointKeys
6868
? Endpoints[R]["request"] & Endpoints[R]["parameters"]
6969
: EndpointDefaults) &
7070
P;

src/EndpointOptions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { RequestMethod } from "./RequestMethod.js";
22
import type { Url } from "./Url.js";
33
import type { RequestParameters } from "./RequestParameters.js";
44

5-
export type EndpointOptions = RequestParameters & {
5+
export interface EndpointOptions extends RequestParameters {
66
method: RequestMethod;
77
url: Url;
8-
};
8+
}

src/RequestInterface.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { OctokitResponse } from "./OctokitResponse.js";
33
import type { RequestParameters } from "./RequestParameters.js";
44
import type { Route } from "./Route.js";
55

6-
import type { Endpoints } from "./generated/Endpoints.js";
6+
import type { EndpointKeys, Endpoints } from "./generated/Endpoints.js";
77

88
export interface RequestInterface<D extends object = object> {
99
/**
@@ -24,11 +24,11 @@ export interface RequestInterface<D extends object = object> {
2424
* @param {object} [parameters] URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
2525
*/
2626
<R extends Route>(
27-
route: keyof Endpoints | R,
28-
options?: R extends keyof Endpoints
27+
route: EndpointKeys | R,
28+
options?: R extends EndpointKeys
2929
? Endpoints[R]["parameters"] & RequestParameters
3030
: RequestParameters,
31-
): R extends keyof Endpoints
31+
): R extends EndpointKeys
3232
? Promise<Endpoints[R]["response"]>
3333
: Promise<OctokitResponse<any>>;
3434

src/generated/Endpoints.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6903,3 +6903,5 @@ export interface Endpoints {
69036903
"put"
69046904
>;
69056905
}
6906+
6907+
export type EndpointKeys = keyof Endpoints;

0 commit comments

Comments
 (0)