From 358af1ce10e5c712686d53f206f32a0150e9aff4 Mon Sep 17 00:00:00 2001 From: Nato Boram Date: Fri, 27 Sep 2024 14:17:40 -0400 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20Add=20type=20guards=20for=20eve?= =?UTF-8?q?nts=20(#6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/webhooks/events/pr/event.test.ts | 15 ++++++++++++++- src/server/webhooks/events/pr/event.ts | 5 +++++ .../webhooks/events/project/event.test.ts | 17 ++++++++++++++++- src/server/webhooks/events/project/event.ts | 5 +++++ src/server/webhooks/events/repo/event.test.ts | 16 +++++++++++++++- src/server/webhooks/events/repo/event.ts | 5 +++++ 6 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/server/webhooks/events/pr/event.test.ts b/src/server/webhooks/events/pr/event.test.ts index e29aea0..856736b 100644 --- a/src/server/webhooks/events/pr/event.test.ts +++ b/src/server/webhooks/events/pr/event.test.ts @@ -1,5 +1,6 @@ import { describe, test } from "vitest" -import { isPrEventKey } from "./event.js" +import type { Event } from "../event.js" +import { isPrEvent, isPrEventKey } from "./event.js" describe("isPrEventKey", () => { test("pr:comment:added", ({ expect }) => { @@ -12,3 +13,15 @@ describe("isPrEventKey", () => { expect(result).toBe(false) }) }) + +describe("isPrEvent", () => { + test("pr:comment:added", ({ expect }) => { + const result = isPrEvent({ eventKey: "pr:comment:added" } as Event) + expect(result).toBe(true) + }) + + test("project:modified", ({ expect }) => { + const result = isPrEvent({ eventKey: "project:modified" } as Event) + expect(result).toBe(false) + }) +}) diff --git a/src/server/webhooks/events/pr/event.ts b/src/server/webhooks/events/pr/event.ts index f5fbe51..85fd09a 100644 --- a/src/server/webhooks/events/pr/event.ts +++ b/src/server/webhooks/events/pr/event.ts @@ -1,3 +1,4 @@ +import type { Event } from "../event.js" import type { PRCommentAdded } from "./comment_added.js" import type { PRCommentDeleted } from "./comment_deleted.js" import type { PRCommentEdited } from "./comment_edited.js" @@ -29,6 +30,10 @@ export type PrEvent = | PRReviewerUpdated export type PrEventKey = PrEvent["eventKey"] +export function isPrEvent(event: Event): event is PrEvent { + return isPrEventKey(event.eventKey) +} + export function isPrEventKey(key: unknown): key is PrEventKey { return Object.values(prEventKeys).includes(key) } diff --git a/src/server/webhooks/events/project/event.test.ts b/src/server/webhooks/events/project/event.test.ts index 5ba097f..d6e6434 100644 --- a/src/server/webhooks/events/project/event.test.ts +++ b/src/server/webhooks/events/project/event.test.ts @@ -1,5 +1,6 @@ import { describe, test } from "vitest" -import { isProjectEventKey } from "./event.js" +import type { Event } from "../event.js" +import { isProjectEvent, isProjectEventKey } from "./event.js" describe("isProjectEventKey", () => { test("project:modified", ({ expect }) => { @@ -12,3 +13,17 @@ describe("isProjectEventKey", () => { expect(result).toBe(false) }) }) + +describe("isProjectEvent", () => { + test("project:modified", ({ expect }) => { + const result = isProjectEvent({ eventKey: "project:modified" } as Event) + expect(result).toBe(true) + }) + + test("mirror:repo_synchronized", ({ expect }) => { + const result = isProjectEvent({ + eventKey: "mirror:repo_synchronized", + } as Event) + expect(result).toBe(false) + }) +}) diff --git a/src/server/webhooks/events/project/event.ts b/src/server/webhooks/events/project/event.ts index 3c1ab9f..c872d9b 100644 --- a/src/server/webhooks/events/project/event.ts +++ b/src/server/webhooks/events/project/event.ts @@ -1,9 +1,14 @@ +import type { Event } from "../event.js" import type { ProjectModified } from "./modified.js" /** You can create webhooks for events that occur in a project. */ export type ProjectEvent = ProjectModified export type ProjectEventKey = ProjectEvent["eventKey"] +export function isProjectEvent(event: Event): event is ProjectEvent { + return isProjectEventKey(event.eventKey) +} + export function isProjectEventKey(key: unknown): key is ProjectEventKey { return Object.values(projectEventKeys).includes(key) } diff --git a/src/server/webhooks/events/repo/event.test.ts b/src/server/webhooks/events/repo/event.test.ts index ce74106..1e410c3 100644 --- a/src/server/webhooks/events/repo/event.test.ts +++ b/src/server/webhooks/events/repo/event.test.ts @@ -1,5 +1,6 @@ import { describe, test } from "vitest" -import { isRepoEventKey } from "./event.js" +import type { Event } from "../event.js" +import { isRepoEvent, isRepoEventKey } from "./event.js" describe("isRepoEventKey", () => { test("mirror:repo_synchronized", ({ expect }) => { @@ -12,3 +13,16 @@ describe("isRepoEventKey", () => { expect(result).toBe(false) }) }) +describe("isRepoEvent", () => { + test("mirror:repo_synchronized", ({ expect }) => { + const result = isRepoEvent({ + eventKey: "mirror:repo_synchronized", + } as Event) + expect(result).toBe(true) + }) + + test("project:modified", ({ expect }) => { + const result = isRepoEvent({ eventKey: "project:modified" } as Event) + expect(result).toBe(false) + }) +}) diff --git a/src/server/webhooks/events/repo/event.ts b/src/server/webhooks/events/repo/event.ts index a102c8a..6960607 100644 --- a/src/server/webhooks/events/repo/event.ts +++ b/src/server/webhooks/events/repo/event.ts @@ -1,3 +1,4 @@ +import type { Event } from "../event.js" import type { RepoCommentAdded } from "./comment_added.js" import type { RepoCommentDeleted } from "./comment_deleted.js" import type { RepoCommentEdited } from "./comment_edited.js" @@ -19,6 +20,10 @@ export type RepoEvent = | RepoSecretDetected export type RepoEventKey = RepoEvent["eventKey"] +export function isRepoEvent(event: Event): event is RepoEvent { + return isRepoEventKey(event.eventKey) +} + export function isRepoEventKey(key: unknown): key is RepoEventKey { return Object.values(repoEventKeys).includes(key) } From 6464e69225947c48fd94e71c684094aa86ca12d0 Mon Sep 17 00:00:00 2001 From: Nathan Gendron Date: Fri, 27 Sep 2024 14:18:47 -0400 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=94=96=20v1.0.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e738297..f93e16c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@coderabbitai/bitbucket", - "version": "1.0.3", + "version": "1.0.4", "description": "CodeRabbit's TypeScript API client for connecting to Bitbucket Cloud and Bitbucket Data Center", "keywords": [ "bitbucket-api-v1",