index.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const _ = require('lodash')
  2. const fs = require('fs')
  3. const path = require('path')
  4. const autoload = require('auto-load')
  5. const { makeExecutableSchema } = require('@graphql-tools/schema')
  6. const { rateLimitDirective } = require('graphql-rate-limit-directive')
  7. const { GraphQLUpload } = require('graphql-upload')
  8. const { rateLimitDirectiveTypeDefs, rateLimitDirectiveTransformer } = rateLimitDirective()
  9. /* global WIKI */
  10. WIKI.logger.info(`Loading GraphQL Schema...`)
  11. // Schemas
  12. const typeDefs = [
  13. rateLimitDirectiveTypeDefs
  14. ]
  15. const schemas = fs.readdirSync(path.join(WIKI.SERVERPATH, 'graph/schemas'))
  16. schemas.forEach(schema => {
  17. typeDefs.push(fs.readFileSync(path.join(WIKI.SERVERPATH, `graph/schemas/${schema}`), 'utf8'))
  18. })
  19. // Resolvers
  20. let resolvers = {
  21. Upload: GraphQLUpload
  22. }
  23. const resolversObj = _.values(autoload(path.join(WIKI.SERVERPATH, 'graph/resolvers')))
  24. resolversObj.forEach(resolver => {
  25. _.merge(resolvers, resolver)
  26. })
  27. // Make executable schema
  28. let schema = makeExecutableSchema({
  29. typeDefs,
  30. resolvers
  31. })
  32. schema = rateLimitDirectiveTransformer(schema)
  33. WIKI.logger.info(`GraphQL Schema: [ OK ]`)
  34. module.exports = schema