shyft
Version:
Model driven GraphQL API framework
119 lines (118 loc) • 6.82 kB
JavaScript
;
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;