-
Notifications
You must be signed in to change notification settings - Fork 82
/
Copy pathtypes.ts
78 lines (66 loc) · 2.21 KB
/
types.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import { RequestError } from "@octokit/request-error";
import type {
WebhookEventMap,
WebhookEventName,
} from "@octokit/webhooks-definitions/schema";
import type { emitterEventNames } from "./generated/webhook-names";
export type EmitterWebhookEventName = typeof emitterEventNames[number];
export type EmitterWebhookEvent<
TEmitterEvent extends EmitterWebhookEventName = EmitterWebhookEventName
> = TEmitterEvent extends `${infer TWebhookEvent}.${infer TAction}`
? BaseWebhookEvent<Extract<TWebhookEvent, WebhookEventName>> & {
payload: { action: TAction };
}
: BaseWebhookEvent<Extract<TEmitterEvent, WebhookEventName>>;
interface BaseWebhookEvent<TName extends WebhookEventName> {
id: string;
name: TName;
payload: WebhookEventMap[TName];
}
export interface Options<
T extends EmitterWebhookEvent,
TTransformed = unknown
> {
path?: string;
secret?: string;
transform?: TransformMethod<T, TTransformed>;
}
type TransformMethod<T extends EmitterWebhookEvent, V = T> = (
event: EmitterWebhookEvent
) => V | PromiseLike<V>;
type EnsureArray<T> = T extends any[] ? T : [T];
export type HandlerFunction<
TName extends EmitterWebhookEventName | EmitterWebhookEventName[],
TTransformed
> = (
event: EmitterWebhookEvent<EnsureArray<TName>[number]> & TTransformed
) => any;
type Hooks = {
[key: string]: Function[];
};
export interface State extends Options<any> {
eventHandler?: any;
hooks: Hooks;
}
/**
* Error object with optional properties coming from `octokit.request` errors
*/
export type WebhookError = Error & Partial<RequestError>;
// todo: rename to "EmitterErrorEvent"
export interface WebhookEventHandlerError extends AggregateError<WebhookError> {
event: EmitterWebhookEvent;
}
/**
* Workaround for TypeScript incompatibility with types exported by aggregate-error.
* Credit: https://git.io/JUEEr
* @copyright Sindre Sorhus
* @license MIT (https://git.io/JUEEK)
* @see https://github.com/octokit/webhooks.js/pull/270/files
*/
declare class AggregateError<T extends Error = Error>
extends Error
implements Iterable<T> {
readonly name: "AggregateError";
constructor(errors: ReadonlyArray<T | { [key: string]: any } | string>);
[Symbol.iterator](): IterableIterator<T>;
}