UNPKG

@grapi/server

Version:

Grapi Schema Generator For GraphQL Server

72 lines (71 loc) 3.05 kB
"use strict"; 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;