shyft
Version:
Model driven GraphQL API framework
103 lines (102 loc) • 5.03 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.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;