@grapi/server
Version:
Grapi Schema Generator For GraphQL Server
72 lines (71 loc) • 3.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SdlParser = exports.parseDefinitionNodeToSdl = void 0;
const graphql_1 = require("graphql");
const lodash_1 = require("../lodash");
const namedType_1 = require("./namedType");
const utils_1 = require("./utils");
const parseNodeToSdlObjectType = (documentNode, node, getSdlNamedType) => {
const fields = (0, lodash_1.reduce)(node.fields, (result, fieldNode) => {
result[fieldNode.name.value] = (0, utils_1.createSdlField)(documentNode, fieldNode, getSdlNamedType);
return result;
}, {});
const directives = (0, lodash_1.reduce)(node.directives, (result, directiveNode) => {
result[directiveNode.name.value] = (0, utils_1.parseDirectiveNode)(directiveNode);
return result;
}, {});
const interfaces = node.interfaces.map(namedTypeNode => namedTypeNode.name.value);
return new namedType_1.SdlObjectType({
typeDef: node,
name: node.name.value,
description: (0, lodash_1.get)(node, 'description.value'),
directives,
interfaces,
fields,
});
};
const parseNodeToSdlEnumType = (node) => {
return new namedType_1.SdlEnumType({
typeDef: node,
name: node.name.value,
description: (0, lodash_1.get)(node, 'description.value'),
values: node.values.map(valueDefNode => valueDefNode.name.value),
});
};
const parseDefinitionNodeToSdl = (node) => {
return (0, graphql_1.print)(node);
};
exports.parseDefinitionNodeToSdl = parseDefinitionNodeToSdl;
class SdlParser {
namedTypeMap = {};
parse(sdl) {
const documentAST = (0, graphql_1.parse)(sdl);
(0, graphql_1.visit)(documentAST, {
enter: (node, key, parent, path) => {
if (node.kind === graphql_1.Kind.DIRECTIVE_DEFINITION) {
const scalarName = node.name.value;
this.namedTypeMap[scalarName] = new namedType_1.SdlDirectiveType({ typeDef: node, name: scalarName });
return false;
}
if (node.kind === graphql_1.Kind.SCALAR_TYPE_DEFINITION) {
const scalarName = node.name.value;
this.namedTypeMap[scalarName] = new namedType_1.SdlScalarType({ typeDef: node, name: scalarName });
return false;
}
if (node.kind === graphql_1.Kind.OBJECT_TYPE_DEFINITION) {
this.namedTypeMap[node.name.value] = parseNodeToSdlObjectType(documentAST, node, this.getSdlNamedType);
return false;
}
if (node.kind === graphql_1.Kind.ENUM_TYPE_DEFINITION) {
this.namedTypeMap[node.name.value] = parseNodeToSdlEnumType(node);
return false;
}
},
});
return (0, lodash_1.values)(this.namedTypeMap);
}
getSdlNamedType = (name) => {
return this.namedTypeMap[name];
};
}
exports.SdlParser = SdlParser;