From b197408bc80efdf5ab8c8dffbdab0d70e2c8f191 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Fri, 24 Jan 2020 17:59:35 +0100 Subject: [PATCH] feat(subscriptions): @pgSubscription now supports filter (#596) --- .../src/PgSubscriptionResolverPlugin.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/pg-pubsub/src/PgSubscriptionResolverPlugin.ts b/packages/pg-pubsub/src/PgSubscriptionResolverPlugin.ts index 378a74d93..699d65b59 100644 --- a/packages/pg-pubsub/src/PgSubscriptionResolverPlugin.ts +++ b/packages/pg-pubsub/src/PgSubscriptionResolverPlugin.ts @@ -1,6 +1,6 @@ import debugFactory from "debug"; import { Plugin } from "graphile-build"; -import { PubSub } from "graphql-subscriptions"; +import { PubSub, withFilter } from "graphql-subscriptions"; const debug = debugFactory("pg-pubsub"); @@ -38,13 +38,14 @@ const PgSubscriptionResolverPlugin: Plugin = function(builder, { pubsub }) { const { topic: topicGen, unsubscribeTopic: unsubscribeTopicGen, + filter, } = pgSubscription; if (!topicGen) { return field; } return extend(field, { subscribe: async ( - _parent: any, + parent: any, args: any, resolveContext: any, resolveInfo: any @@ -94,6 +95,19 @@ const PgSubscriptionResolverPlugin: Plugin = function(builder, { pubsub }) { }); } + if (filter) { + if (typeof filter !== "function") { + throw new Error( + "filter provided to pgSubscription must be a function" + ); + } + return withFilter(() => asyncIterator, filter)( + parent, + args, + resolveContext, + resolveInfo + ); + } return asyncIterator; }, ...(field.resolve