diff --git a/src/index.ts b/src/index.ts index f766f39..8249199 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,18 +5,34 @@ import { print } from "graphql/language/printer"; export const capitalize = (value: string) => value.charAt(0).toUpperCase() + value.slice(1); export const dropFileExtension = (filename: string) => path.parse(filename).name; -export const inferWebhooks = async (baseURL: string, generatedGraphQL: object) => { - const entries = await fg(['*.ts'], { cwd: 'pages/api/webhooks' }); +export const inferWebhooks = async (baseURL: string, generatedGraphQL: any) => { + const entries = await fg(["*.ts"], { cwd: "pages/api/webhooks" }); return entries.map(dropFileExtension).map((name: string) => { - const camelcaseName = name.split('-').map(capitalize).join(''); + const camelcaseName = name.split("-").map(capitalize).join(""); + + const eventName = name.toUpperCase().replace(new RegExp("-", "g"), "_"); + let eventType: string; + if (Object.values(generatedGraphQL.WebhookEventTypeAsyncEnum).includes(eventName)) { + eventType = "asyncEvents"; + } else if (Object.values(generatedGraphQL.WebhookEventTypeSyncEnum).includes(eventName)) { + eventType = "syncEvents"; + } else { + throw Error("Event type not found."); + } + const statement = `${camelcaseName}SubscriptionDocument`; - const query = statement in generatedGraphQL ? print((generatedGraphQL as any)[statement]) : null; + let query: string; + if (statement in generatedGraphQL) { + query = print((generatedGraphQL as any)[statement]); + } else { + throw Error("Subscription not found."); + } return { name, - asyncEvents: [name.toUpperCase().replace("-", "_")], - query, + [eventType]: [eventName], + query, targetUrl: `${baseURL}/api/webhooks/${name}`, }; });