graphql-codegen-core
Version:
GraphQL types and code generator based on schema
86 lines • 4.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_1 = require("graphql");
var object_map_to_array_1 = require("../utils/object-map-to-array");
var transform_object_1 = require("./transform-object");
var transform_enum_1 = require("./transform-enum");
var transform_union_1 = require("./transform-union");
var transform_interface_1 = require("./transform-interface");
var transform_scalar_1 = require("./transform-scalar");
var debugging_1 = require("../debugging");
var transform_directives_1 = require("./transform-directives");
var graphql_toolkit_1 = require("graphql-toolkit");
var GRAPHQL_PRIMITIVES = ['String', 'Int', 'Boolean', 'ID', 'Float'];
var clearTypes = function (typesMap) {
return Object.keys(typesMap)
.filter(function (key) { return !GRAPHQL_PRIMITIVES.includes(key) && !key.startsWith('__'); })
.reduce(function (obj, key) {
obj[key] = typesMap[key];
return obj;
}, {});
};
function schemaToTemplateContext(schema) {
debugging_1.debugLog('[schemaToTemplateContext] started...');
var directives = graphql_toolkit_1.getDirectives(schema, schema);
var result = {
types: [],
inputTypes: [],
enums: [],
unions: [],
scalars: [],
interfaces: [],
definedDirectives: [],
// Indicators
hasTypes: false,
hasInputTypes: false,
hasEnums: false,
hasUnions: false,
hasScalars: false,
hasInterfaces: false,
hasDefinedDirectives: false,
rawSchema: schema,
directives: directives,
usesDirectives: Object.keys(directives).length > 0
};
var rawTypesMap = schema.getTypeMap();
var typesMap = clearTypes(rawTypesMap);
var typesArray = object_map_to_array_1.objectMapToArray(typesMap);
debugging_1.debugLog("[schemaToTemplateContext] Got total of " + typesArray.length + " types in the GraphQL schema");
typesArray.map(function (graphQlType) {
var actualTypeDef = graphQlType.value;
if (actualTypeDef instanceof graphql_1.GraphQLObjectType) {
result.types.push(transform_object_1.transformGraphQLObject(schema, actualTypeDef));
}
else if (actualTypeDef instanceof graphql_1.GraphQLInputObjectType) {
result.inputTypes.push(transform_object_1.transformGraphQLObject(schema, actualTypeDef));
}
else if (actualTypeDef instanceof graphql_1.GraphQLEnumType) {
result.enums.push(transform_enum_1.transformGraphQLEnum(schema, actualTypeDef));
}
else if (actualTypeDef instanceof graphql_1.GraphQLUnionType) {
result.unions.push(transform_union_1.transformUnion(schema, actualTypeDef));
}
else if (actualTypeDef instanceof graphql_1.GraphQLInterfaceType) {
result.interfaces.push(transform_interface_1.transformInterface(schema, actualTypeDef));
}
else if (actualTypeDef instanceof graphql_1.GraphQLScalarType) {
result.scalars.push(transform_scalar_1.transformScalar(schema, actualTypeDef));
}
else {
throw new Error("Unexpected GraphQL type definition: " + graphQlType.key + " (As string: " + String(actualTypeDef) + ")." +
"Please check that you are importing only one instance of the 'graphql' package.");
}
});
result.definedDirectives = transform_directives_1.transformDirectives(schema, schema.getDirectives() || []);
result.hasTypes = result.types.length > 0;
result.hasInputTypes = result.inputTypes.length > 0;
result.hasEnums = result.enums.length > 0;
result.hasUnions = result.unions.length > 0;
result.hasScalars = result.scalars.length > 0;
result.hasInterfaces = result.interfaces.length > 0;
result.hasDefinedDirectives = result.definedDirectives.length > 0;
debugging_1.debugLog("[schemaToTemplateContext] done, results is: ", result);
return result;
}
exports.schemaToTemplateContext = schemaToTemplateContext;
//# sourceMappingURL=schema-to-template-context.js.map