From 2323461c287f2a24a7aa9f7901d374b86952bf01 Mon Sep 17 00:00:00 2001 From: Ankeet Maini Date: Tue, 13 Oct 2020 23:44:15 +0530 Subject: [PATCH] feat: export `WebhooksEvents` from @octokit/webhooks.js (#321) * fix: typscript import Events from @octokit/webhooks.js * Install npm dependencies, just in case * Rename this to WebhooksEvents as in future we will have Events which have all Github events * Fix lint * Rename to WebhooksEvents --- scripts/generate-types.js | 2 +- src/event-handler/on.ts | 4 ++-- src/event-handler/receive.ts | 4 ++-- src/generated/get-webhook-payload-type-from-event.ts | 2 +- src/index.ts | 7 ++++--- src/middleware/middleware.ts | 4 ++-- src/types.ts | 6 +++--- test/typescript-validate.ts | 4 ++-- 8 files changed, 17 insertions(+), 16 deletions(-) diff --git a/scripts/generate-types.js b/scripts/generate-types.js index 938e13ce..d855dea9 100644 --- a/scripts/generate-types.js +++ b/scripts/generate-types.js @@ -59,7 +59,7 @@ export interface EventTypesPayload { ${eventPayloadMapping.map(([name, type]) => `"${name}": ${type}`).join(`,\n`)} } -export type All = keyof EventTypesPayload +export type WebhookEvents = keyof EventTypesPayload `; generateFile( diff --git a/src/event-handler/on.ts b/src/event-handler/on.ts index 9a14d354..bd3d0d98 100644 --- a/src/event-handler/on.ts +++ b/src/event-handler/on.ts @@ -1,10 +1,10 @@ -import { All } from "../generated/get-webhook-payload-type-from-event"; +import { WebhookEvents } from "../generated/get-webhook-payload-type-from-event"; import { webhookNames } from "../generated/webhook-names"; import { State } from "../types"; export function receiverOn( state: State, - webhookNameOrNames: All | All[], + webhookNameOrNames: WebhookEvents | WebhookEvents[], handler: Function ) { if (Array.isArray(webhookNameOrNames)) { diff --git a/src/event-handler/receive.ts b/src/event-handler/receive.ts index d8c75d8d..90051c3d 100644 --- a/src/event-handler/receive.ts +++ b/src/event-handler/receive.ts @@ -8,12 +8,12 @@ import { WebhookError, WebhookEventHandlerError, } from "../types"; -import { All } from "../generated/get-webhook-payload-type-from-event"; +import { WebhookEvents } from "../generated/get-webhook-payload-type-from-event"; function getHooks( state: State, eventPayloadAction: string, - eventName: All + eventName: WebhookEvents ): Function[] { const hooks = [state.hooks[`${eventName}.${eventPayloadAction}`]]; diff --git a/src/generated/get-webhook-payload-type-from-event.ts b/src/generated/get-webhook-payload-type-from-event.ts index 4a7f4501..e1b55264 100644 --- a/src/generated/get-webhook-payload-type-from-event.ts +++ b/src/generated/get-webhook-payload-type-from-event.ts @@ -358,4 +358,4 @@ export interface EventTypesPayload { >; } -export type All = keyof EventTypesPayload; +export type WebhookEvents = keyof EventTypesPayload; diff --git a/src/index.ts b/src/index.ts index 1833bce3..44fb6d6e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,17 +12,17 @@ import { HandlerFunction, } from "./types"; import { IncomingMessage, ServerResponse } from "http"; -import { All } from "./generated/get-webhook-payload-type-from-event"; +import { WebhookEvents } from "./generated/get-webhook-payload-type-from-event"; // U holds the return value of `transform` function in Options class Webhooks { public sign: (payload: string | object) => string; public verify: (eventPayload?: object, signature?: string) => boolean; - public on: ( + public on: ( event: E | E[], callback: HandlerFunction ) => void; - public removeListener: ( + public removeListener: ( event: E | E[], callback: HandlerFunction ) => void; @@ -65,6 +65,7 @@ class Webhooks { const createWebhooksApi = Webhooks.prototype.constructor; export { EventPayloads } from "./generated/event-payloads"; +export { WebhookEvents } from "./generated/get-webhook-payload-type-from-event"; export { createEventHandler, diff --git a/src/middleware/middleware.ts b/src/middleware/middleware.ts index fe6c15fa..d9985ec3 100644 --- a/src/middleware/middleware.ts +++ b/src/middleware/middleware.ts @@ -5,7 +5,7 @@ import { verifyAndReceive } from "./verify-and-receive"; import { debug } from "debug"; import { IncomingMessage, ServerResponse } from "http"; import { State, WebhookEventHandlerError } from "../types"; -import { All } from "../generated/get-webhook-payload-type-from-event"; +import { WebhookEvents } from "../generated/get-webhook-payload-type-from-event"; const debugWebhooks = debug("webhooks:receiver"); @@ -41,7 +41,7 @@ export function middleware( }); } - const eventName = request.headers["x-github-event"] as All; + const eventName = request.headers["x-github-event"] as WebhookEvents; const signature = request.headers["x-hub-signature"] as string; const id = request.headers["x-github-delivery"] as string; diff --git a/src/types.ts b/src/types.ts index b0bade55..4e0266f7 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,12 +1,12 @@ import type { RequestError } from "@octokit/request-error"; import { - All, + WebhookEvents, EventTypesPayload, } from "./generated/get-webhook-payload-type-from-event"; export interface WebhookEvent { id: string; - name: All; + name: WebhookEvents; payload: T; } @@ -20,7 +20,7 @@ type TransformMethod = ( event: WebhookEvent ) => V | PromiseLike; -export type HandlerFunction = ( +export type HandlerFunction = ( event: EventTypesPayload[E] & U ) => any; diff --git a/test/typescript-validate.ts b/test/typescript-validate.ts index 77546ca0..f3a90891 100644 --- a/test/typescript-validate.ts +++ b/test/typescript-validate.ts @@ -8,9 +8,9 @@ import { EventPayloads, WebhookEvent, WebhookError, + WebhookEvents, } from "../src/index"; import { createServer } from "http"; -import { All } from "../src/generated/get-webhook-payload-type-from-event"; // ************************************************************ // THIS CODE IS NOT EXECUTED. IT IS FOR TYPECHECKING ONLY @@ -24,7 +24,7 @@ const myWebhook: WebhookEvent<{ foo: string }> = { }, }; -const myEventName: All = "check_run.completed"; +const myEventName: WebhookEvents = "check_run.completed"; const myEvenTPayload: EventPayloads.WebhookPayloadCheckRunCheckRunOutput = { annotations_count: 0,