UNPKG

shyft

Version:

Model driven GraphQL API framework

119 lines (118 loc) 6.82 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateSubscriptions = void 0; var graphql_1 = require("graphql"); var _ = __importStar(require("lodash")); var ProtocolGraphQL_1 = require("./ProtocolGraphQL"); var resolver_1 = require("./resolver"); var operation_1 = require("./operation"); var registry_1 = require("./registry"); var generateSubscriptions = function (graphRegistry) { var protocolConfiguration = ProtocolGraphQL_1.ProtocolGraphQL.getProtocolConfiguration(); var subscriptions = {}; // generateInstanceUniquenessInputs(graphRegistry); _.forEach(graphRegistry.types, function (_a, typeName) { var type = _a.type, entity = _a.entity; if (!entity.getSubscriptions) { return; } // console.log('generateSubscriptions', { type, typeName }); var entitySubscriptions = entity.getSubscriptions(); if (!entitySubscriptions || entitySubscriptions.length < 1) { return; } entitySubscriptions.map(function (entitySubscription) { var subscriptionName = protocolConfiguration.generateOperationTypeName(entity, entitySubscription); var entitySubscriptionInstanceInputType; if (entitySubscription.attributes && entitySubscription.attributes.length) { entitySubscriptionInstanceInputType = operation_1.generateOperationInstanceInput(entity, entitySubscription); } var subscriptionInputType = operation_1.generateOperationInput(entity, typeName, entitySubscription, entitySubscriptionInstanceInputType); var subscriptionOutputType = operation_1.generateOperationOutput(entity, typeName, type, entitySubscription); subscriptions[subscriptionName] = { type: subscriptionOutputType, description: entitySubscription.description, args: { input: { description: 'Input argument for this subscription', type: new graphql_1.GraphQLNonNull(subscriptionInputType), }, }, subscribe: resolver_1.getSubscriptionResolver(entity, entitySubscription, typeName, false, function (_a) { var args = _a.args; return operation_1.extractIdFromNodeId(graphRegistry, entity.name, args.input.nodeId); }), resolve: resolver_1.getSubscriptionPayloadResolver(entity, entitySubscription, typeName), }; if (entitySubscription.isTypeCreate || entitySubscription.isTypeUpdate) { var subscriptionNestedName = protocolConfiguration.generateOperationNestedTypeName(entity, entitySubscription); var entitySubscriptionInstanceNestedInputType = void 0; if (entitySubscription.attributes && entitySubscription.attributes.length) { entitySubscriptionInstanceNestedInputType = operation_1.generateOperationInstanceNestedInput(entity, entitySubscription, graphRegistry); } var subscriptionInputNestedType = operation_1.generateOperationNestedInput(entity, typeName, entitySubscription, entitySubscriptionInstanceNestedInputType); subscriptions[subscriptionNestedName] = { type: subscriptionOutputType, description: entitySubscription.description, args: { input: { description: 'Input argument for this subscription', type: new graphql_1.GraphQLNonNull(subscriptionInputNestedType), }, }, subscribe: resolver_1.getSubscriptionResolver(entity, entitySubscription, typeName, true, function (_a) { var args = _a.args; return operation_1.extractIdFromNodeId(graphRegistry, entity.name, args.input.nodeId); }), resolve: resolver_1.getSubscriptionPayloadResolver(entity, entitySubscription, typeName), }; } if (entitySubscription.needsInstance) { var primaryAttribute = entity.getPrimaryAttribute(); if (primaryAttribute) { var fieldName_1 = registry_1.getRegisteredEntityAttribute(entity.name, primaryAttribute.name).fieldName; var subscriptionByPrimaryAttributeInputType = operation_1.generateOperationByPrimaryAttributeInput(entity, typeName, entitySubscription, entitySubscriptionInstanceInputType, primaryAttribute); var subscriptionByPrimaryAttributeName = protocolConfiguration.generateOperationByPrimaryAttributeTypeName(entity, entitySubscription, primaryAttribute); subscriptions[subscriptionByPrimaryAttributeName] = { type: subscriptionOutputType, description: entitySubscription.description, args: { input: { description: 'Input argument for this subscription', type: new graphql_1.GraphQLNonNull(subscriptionByPrimaryAttributeInputType), }, }, subscribe: resolver_1.getSubscriptionResolver(entity, entitySubscription, typeName, false, function (_a) { var args = _a.args; return args.input[fieldName_1]; }), resolve: resolver_1.getSubscriptionPayloadResolver(entity, entitySubscription, typeName), }; } } }); }); return subscriptions; }; exports.generateSubscriptions = generateSubscriptions;