UNPKG

@vtex/api

Version:
34 lines (33 loc) 1.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeSchema = void 0; const fs_extra_1 = require("fs-extra"); const graphql_tools_1 = require("graphql-tools"); const ramda_1 = require("ramda"); const schemaDirectives_1 = require("./schemaDirectives"); const typeDefs_1 = require("./typeDefs"); const mergeTypeDefs = (appTypeDefs, schemaMetaData) => [appTypeDefs, (0, typeDefs_1.nativeTypeDefs)(schemaMetaData), schemaDirectives_1.nativeSchemaDirectivesTypeDefs].join('\n\n'); const hasScalar = (typeDefs) => (scalar) => new RegExp(`scalar(\\s)+${scalar}(\\s\\n)+`).test(typeDefs); const extractSchemaMetaData = (typeDefs) => { const scalars = (0, ramda_1.keys)(typeDefs_1.nativeResolvers); const scalarsPresentInSchema = (0, ramda_1.map)(hasScalar(typeDefs), scalars); return (0, ramda_1.zipObj)(scalars, scalarsPresentInSchema); }; const makeSchema = (options) => { const { resolvers: appResolvers, schema: appSchema, schemaDirectives: appDirectives } = options; const appTypeDefs = appSchema || (0, fs_extra_1.readFileSync)('./service/schema.graphql', 'utf8'); const schemaMetaData = extractSchemaMetaData(appTypeDefs); const executableSchema = (0, graphql_tools_1.makeExecutableSchema)({ resolvers: { ...appResolvers, ...typeDefs_1.nativeResolvers, }, schemaDirectives: { ...appDirectives, ...schemaDirectives_1.nativeSchemaDirectives, }, typeDefs: mergeTypeDefs(appTypeDefs, schemaMetaData), }); return { schema: executableSchema, hasProvider: appSchema ? true : false }; }; exports.makeSchema = makeSchema;