From 7c64a4504b258a3472cd6c565cea06f9e45f2e8d Mon Sep 17 00:00:00 2001 From: getlarge Date: Tue, 12 May 2020 10:51:22 +0200 Subject: [PATCH] add pubsub from graphql-subscriptions ; whitelist entity.susbcriptions prop --- package.json | 1 + src/engine/constants.ts | 2 +- src/engine/subscription/Subscription.ts | 16 ++++++++++------ src/graphqlProtocol/subscription.ts | 1 - src/index.ts | 2 ++ yarn.lock | 12 ++++++++++++ 6 files changed, 26 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 9bd557c5..d20b6818 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "date-fns": "^2.1.0", "graphql": "^14.5.8", "graphql-relay": "^0.6.0", + "graphql-subscriptions": "^1.1.0", "graphql-type-json": "^0.3.0", "json-shaper": "^1.2.0", "lodash": "^4.17.10", diff --git a/src/engine/constants.ts b/src/engine/constants.ts index 9af3b582..48c43b19 100644 --- a/src/engine/constants.ts +++ b/src/engine/constants.ts @@ -47,6 +47,7 @@ export const entityPropertiesWhitelist: Array = [ 'includeUserTracking', 'indexes', 'mutations', + 'subscriptions', 'permissions', 'states', 'preProcessor', @@ -118,4 +119,3 @@ export const shadowEntityAttributePropertiesWhitelist: Array = [ 'primary', 'meta', ]; - diff --git a/src/engine/subscription/Subscription.ts b/src/engine/subscription/Subscription.ts index 1f234b71..99c22a8f 100644 --- a/src/engine/subscription/Subscription.ts +++ b/src/engine/subscription/Subscription.ts @@ -1,8 +1,11 @@ import { uniq } from 'lodash'; +import { PubSub } from 'graphql-subscriptions'; import { passOrThrow, isArray, isFunction, mapOverProperties } from '../util'; import { Entity } from '../entity/Entity'; +export const pubsub = new PubSub(); + export const SUBSCRIPTION_TYPE_CREATE = 'onCreate'; export const SUBSCRIPTION_TYPE_UPDATE = 'onUpdate'; export const SUBSCRIPTION_TYPE_DELETE = 'onDelete'; @@ -53,7 +56,7 @@ export type SubscriptionSetup = { entitySubscription?: Subscription, context?: object, info?: any, - ) => Promise; + ) => Promise | object | null; postProcessor?: ( entity?: Entity, // id, @@ -63,7 +66,7 @@ export type SubscriptionSetup = { entitySubscription?: Subscription, context?: object, info?: any, - ) => Promise; + ) => Promise | object | null; }; export class Subscription { @@ -296,11 +299,12 @@ export const processEntitySubscriptions = ( () => `Subscription '${entity.name}.${subscription.name}' pattern should be a string`, ); - } else { - subscription.pattern = Object.keys(entityAttributes).join( - subscription.delimiter, - ); } + // else { + // subscription.pattern = Object.keys(entityAttributes).join( + // subscription.delimiter, + // ); + // } }); return subscriptions; diff --git a/src/graphqlProtocol/subscription.ts b/src/graphqlProtocol/subscription.ts index 932bebd5..70a070a7 100644 --- a/src/graphqlProtocol/subscription.ts +++ b/src/graphqlProtocol/subscription.ts @@ -8,7 +8,6 @@ import { GraphQLInputFieldConfigMap, GraphQLFieldConfigMap, } from 'graphql'; - import { fromGlobalId } from 'graphql-relay'; import * as _ from 'lodash'; diff --git a/src/index.ts b/src/index.ts index c73fa608..e0a6b1c3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -50,6 +50,7 @@ import { SUBSCRIPTION_TYPE_CREATE, SUBSCRIPTION_TYPE_UPDATE, SUBSCRIPTION_TYPE_DELETE, + pubsub, } from './engine/subscription/Subscription'; import { Permission, @@ -227,6 +228,7 @@ export { SUBSCRIPTION_TYPE_CREATE, SUBSCRIPTION_TYPE_UPDATE, SUBSCRIPTION_TYPE_DELETE, + pubsub, Permission, checkPermissionSimple, buildPermissionFilter, diff --git a/yarn.lock b/yarn.lock index 7a2e693a..0d8ed580 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2861,6 +2861,13 @@ graphql-relay@^0.6.0: dependencies: prettier "^1.16.0" +graphql-subscriptions@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz#5f2fa4233eda44cf7570526adfcf3c16937aef11" + integrity sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA== + dependencies: + iterall "^1.2.1" + graphql-type-json@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.3.0.tgz#bb32e1b74bf52ebc690f9df12b4067bc061f818a" @@ -3404,6 +3411,11 @@ istanbul-reports@^3.0.0: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +iterall@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" + integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== + iterall@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7"