UNPKG

silvie

Version:

Typescript Back-end Framework

87 lines (86 loc) 5.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _apolloServerExpress = require("apollo-server-express"); var _lodash = require("lodash"); var _schema = require("@graphql-tools/schema"); var _graphqlUpload = require("graphql-upload"); var _middleware = require("../../http/middleware"); var _upload = _interopRequireDefault(require("../base/resolvers/upload")); var _json = _interopRequireDefault(require("../base/resolvers/json")); var _flatten = _interopRequireDefault(require("../../utils/import/flatten")); var _map = _interopRequireDefault(require("../../utils/import/map")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } const BaseQuery = {"kind":"Document","definitions":[{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"Query"},"interfaces":[],"directives":[],"fields":[]}],"loc":{"start":0,"end":34}}; const BaseMutation = {"kind":"Document","definitions":[{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"Mutation"},"interfaces":[],"directives":[],"fields":[]}],"loc":{"start":0,"end":37}}; const UploadSchema = {"kind":"Document","definitions":[{"kind":"ScalarTypeDefinition","name":{"kind":"Name","value":"Upload"},"directives":[]},{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"File"},"interfaces":[],"directives":[],"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"filename"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"mimetype"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"encoding"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]}]}],"loc":{"start":0,"end":110}}; const JSONSchema = {"kind":"Document","definitions":[{"kind":"ScalarTypeDefinition","name":{"kind":"Name","value":"JSON"},"directives":[]},{"kind":"ScalarTypeDefinition","name":{"kind":"Name","value":"JSONObject"},"directives":[]}],"loc":{"start":0,"end":53}}; const config = process.configs.graphql; function makeSchema(schemas, resolvers) { const typeDefsCollection = [BaseQuery, BaseMutation]; const resolversCollection = []; if (config.allowUpload) { typeDefsCollection.push(UploadSchema); resolversCollection.push(_upload.default); } if (config.allowJSON) { typeDefsCollection.push(JSONSchema); resolversCollection.push(_json.default); } typeDefsCollection.push(...schemas); resolversCollection.push(...resolvers); return (0, _schema.makeExecutableSchema)({ typeDefs: typeDefsCollection, resolvers: (0, _lodash.merge)(...resolversCollection) }); } class GraphQLServer { constructor() { _defineProperty(this, "srv", void 0); } async init(httpServer, schemas, resolvers = {}, dataLoaders = {}, plugins = {}, instanceCallback) { var _config$path; const executableSchema = makeSchema((0, _flatten.default)(schemas), (0, _flatten.default)(resolvers)); let graphqlServer = new _apolloServerExpress.ApolloServer({ schema: executableSchema, introspection: config.introspection, nodeEnv: config.nodeEnv, plugins: (0, _flatten.default)(plugins), context: async context => { const contextLoaders = (0, _map.default)(dataLoaders, dataLoader => dataLoader(context)); return { res: context.res, req: context.req, loaders: contextLoaders, timestamp: Date.now() }; } }); if (instanceCallback instanceof Function) { graphqlServer = instanceCallback(graphqlServer); } this.srv = graphqlServer; const path = (_config$path = config.path) !== null && _config$path !== void 0 ? _config$path : '/graphql'; if (config.middleware && _middleware.middlewares[config.middleware]) httpServer.expressServer.use(path, _middleware.middlewares[config.middleware]); if (config.allowUpload) { httpServer.expressServer.use((0, _graphqlUpload.graphqlUploadExpress)({ maxFiles: config.maxFiles, maxFileSize: config.maxFileSize })); } await graphqlServer.start(); graphqlServer.applyMiddleware({ app: httpServer.expressServer, path, bodyParserConfig: false, cors: false }); } } const server = new GraphQLServer(); var _default = exports.default = server;