UNPKG

shyft

Version:

Model driven GraphQL API framework

103 lines (102 loc) 5.03 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.generateInstanceQueries = exports.generateListQueries = void 0; var graphql_1 = require("graphql"); var _ = __importStar(require("lodash")); var ProtocolGraphQL_1 = require("./ProtocolGraphQL"); var resolver_1 = require("./resolver"); var Entity_1 = require("../engine/entity/Entity"); var ViewEntity_1 = require("../engine/entity/ViewEntity"); var registry_1 = require("./registry"); var generateListQueries = function (graphRegistry) { var protocolConfiguration = ProtocolGraphQL_1.ProtocolGraphQL.getProtocolConfiguration(); var listQueries = {}; _.forEach(graphRegistry.types, function (_a, typeName) { var entity = _a.entity; if (!Entity_1.isEntity(entity) && !ViewEntity_1.isViewEntity(entity)) { return; } var typeNamePluralListName = registry_1.getRegisteredEntity(entity.name).typeNamePluralPascalCase; var queryName = protocolConfiguration.generateListQueryTypeName(entity); listQueries[queryName] = { type: graphRegistry.types[typeName].connection, description: "Fetch a list of **`" + typeNamePluralListName + "`**\n" + (entity.descriptionPermissionsFind || ''), args: graphRegistry.types[typeName].connectionArgs, resolve: resolver_1.resolveByFind(entity), }; }); return listQueries; }; exports.generateListQueries = generateListQueries; var generateInstanceQueries = function (graphRegistry, idFetcher) { var protocolConfiguration = ProtocolGraphQL_1.ProtocolGraphQL.getProtocolConfiguration(); var instanceQueries = {}; _.forEach(graphRegistry.types, function (_a) { var _b; var type = _a.type, entity = _a.entity; if (!Entity_1.isEntity(entity) && !ViewEntity_1.isViewEntity(entity)) { return; } var typeNamePascalCase = registry_1.getRegisteredEntity(entity.name).typeNamePascalCase; var queryName = protocolConfiguration.generateInstanceQueryTypeName(entity); instanceQueries[queryName] = { type: type, description: "Fetch a single **`" + typeNamePascalCase + "`** using its node ID\n" + (entity.descriptionPermissionsRead || ''), args: { nodeId: { type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLID), }, }, resolve: function (_source, _a, context, info) { var nodeId = _a.nodeId; return idFetcher(nodeId, context, info); }, }; // find the primary attribute and add a query for it var attributes = entity.getAttributes(); var primaryAttributeName = _.findKey(attributes, { primary: true }); if (primaryAttributeName) { var primaryAttribute = attributes[primaryAttributeName]; var fieldName_1 = registry_1.getRegisteredEntityAttribute(entity.name, // TODO: name does not exist on AttributeBase // eslint-disable-next-line dot-notation primaryAttribute['name']).fieldName; var graphqlDataType = ProtocolGraphQL_1.ProtocolGraphQL.convertToProtocolDataType(primaryAttribute.type, entity.name, false); var queryNamePrimaryAttribute = protocolConfiguration.generateInstanceByUniqueQueryTypeName(entity, primaryAttribute); instanceQueries[queryNamePrimaryAttribute] = { type: type, description: "Fetch a single **`" + typeNamePascalCase + "`** using its **`" + fieldName_1 + "`**\n" + (entity.descriptionPermissionsRead || ''), args: (_b = {}, _b[fieldName_1] = { type: new graphql_1.GraphQLNonNull(graphqlDataType), }, _b), resolve: resolver_1.resolveByFindOne(entity, function (_a) { var args = _a.args; return args[fieldName_1]; }), }; } }); return instanceQueries; }; exports.generateInstanceQueries = generateInstanceQueries;