import fs from 'fs' import { gql } from 'graphql-tag'; import { join } from 'path'; import { readdirSync, readFileSync } from 'fs'; import { buildSubgraphSchema } from "@apollo/federation"; let typeDefs = ''; const getTypesOfGraphql = (dirname: string, gqlFiles: string[]) => { gqlFiles.forEach((file: string) => { const path = dirname + "//" + file; if (fs.statSync(path).isFile()) { typeDefs += readFileSync(path, { encoding: 'utf8', }); } else { const getFileOfFolder = readdirSync(join(dirname, `${file}`)) const searchFolder = getFileOfFolder.map((item) => file + '/' + item) getTypesOfGraphql(dirname, searchFolder) } }) } export const schema = async (dirname: string) => { const typeDef = join(dirname + '/graphql', './typedefs') getTypesOfGraphql(typeDef, readdirSync(typeDef)) const { default: resolvers } = await require(join(dirname + '/graphql', './resolvers')) return buildSubgraphSchema({ typeDefs: gql(typeDefs), resolvers }); }