@terabits/grapi
Version:
Grapi Schema Generator For GraphQL Server
77 lines (76 loc) • 3.29 kB
JavaScript
;
exports.__esModule = true;
exports.SdlParser = exports.parseDefinitionNodeToSdl = void 0;
var graphql_1 = require("graphql");
var lodash_1 = require("../lodash");
var namedType_1 = require("./namedType");
var utils_1 = require("./utils");
var parseNodeToSdlObjectType = function (documentNode, node, getSdlNamedType) {
var fields = (0, lodash_1.reduce)(node.fields, function (result, fieldNode) {
result[fieldNode.name.value] = (0, utils_1.createSdlField)(documentNode, fieldNode, getSdlNamedType);
return result;
}, {});
var directives = (0, lodash_1.reduce)(node.directives, function (result, directiveNode) {
result[directiveNode.name.value] = (0, utils_1.parseDirectiveNode)(directiveNode);
return result;
}, {});
var interfaces = node.interfaces.map(function (namedTypeNode) { return namedTypeNode.name.value; });
return new namedType_1.SdlObjectType({
typeDef: node,
name: node.name.value,
description: (0, lodash_1.get)(node, 'description.value'),
directives: directives,
interfaces: interfaces,
fields: fields
});
};
var parseNodeToSdlEnumType = function (node) {
return new namedType_1.SdlEnumType({
typeDef: node,
name: node.name.value,
description: (0, lodash_1.get)(node, 'description.value'),
values: node.values.map(function (valueDefNode) { return valueDefNode.name.value; })
});
};
var parseDefinitionNodeToSdl = function (node) {
return (0, graphql_1.print)(node);
};
exports.parseDefinitionNodeToSdl = parseDefinitionNodeToSdl;
var SdlParser = (function () {
function SdlParser() {
var _this = this;
this.namedTypeMap = {};
this.getSdlNamedType = function (name) {
return _this.namedTypeMap[name];
};
}
SdlParser.prototype.parse = function (sdl) {
var _this = this;
var documentAST = (0, graphql_1.parse)(sdl);
(0, graphql_1.visit)(documentAST, {
enter: function (node, key, parent, path) {
if (node.kind === graphql_1.Kind.DIRECTIVE_DEFINITION) {
var 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) {
var 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);
};
return SdlParser;
}());
exports.SdlParser = SdlParser;