silvie
Version:
Typescript Back-end Framework
87 lines (86 loc) • 5.2 kB
JavaScript
;
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;