UNPKG

@corejam/base

Version:

A scaffolding for building progressive GraphQL powered jamstack applications

138 lines 5.75 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CorejamServer = exports.getServerContext = exports.getServerModels = exports.eventEmitter = void 0; const apollo_server_micro_1 = require("apollo-server-micro"); const events_1 = require("events"); const fs = __importStar(require("fs")); const Bootstrap_1 = require("./Bootstrap"); const nativeRequire_1 = __importDefault(require("./nativeRequire")); const resolvers_1 = require("./resolvers"); const faker_1 = require("./resolvers/db/faker"); const fauna_1 = require("./resolvers/db/fauna"); exports.eventEmitter = new events_1.EventEmitter(); const eventFiles = []; const registerdPluginEvents = []; process.on("unhandledRejection", (error, p) => { console.log("Unhandled Rejection at: Promise", p, "error:", error); console.log(error); }); /** * Return the appropriate resolvers based on environment setup. */ const getServerModels = () => { let models; if (process.env.DB_DRIVER === "DB_FAUNA") { models = fauna_1.models; } else { models = faker_1.models; } return models; }; exports.getServerModels = getServerModels; /** * We only have this extracted to allow us to bootstrap * the context within our integration tests. */ function getServerContext({ req, res }) { let context = { req, res, models: exports.getServerModels(), eventEmitter: exports.eventEmitter }; if (fs.existsSync(process.cwd() + "/resolvers.js")) { const pluginsFile = require(process.cwd() + "/resolvers.js"); const serverKeys = Object.keys(pluginsFile.server); for (const p of serverKeys) { const res = pluginsFile.server[p].getPluginContext({ req, models: context.models, eventEmitter: exports.eventEmitter }); context = Object.assign(Object.assign({}, context), res); } return context; } else { //We need to merge all plugin context for any additional context items they add //TODO needs to get generated from cli for all the requires on plugins for (const plugin of Bootstrap_1.loadManifest().plugins) { const currentPlugin = Bootstrap_1.importPlugin(plugin); const res = currentPlugin.getPluginContext({ req, models: context.models, eventEmitter: exports.eventEmitter }); context = Object.assign(Object.assign({}, context), res); if (currentPlugin.default.listens) { //Trigger listeners currentPlugin.default.listens.forEach((event) => { if (!registerdPluginEvents.includes(event.event)) { registerdPluginEvents.push(event.event); exports.eventEmitter.on(event.event, event.callback); } }); } } return context; } } exports.getServerContext = getServerContext; /** * Bootstrap the ApolloServer with our relevant schemas / context & models. * Merge all the plugins. * * @param context */ function CorejamServer(context = ({ req, res }) => getServerContext({ req, res })) { let resolvers = Object.values(resolvers_1.Resolvers); if (fs.existsSync(process.cwd() + "/resolvers.js")) { const pluginsFile = require(process.cwd() + "/resolvers.js"); Object.keys(pluginsFile.server).map((p) => { if (pluginsFile.server[p].default.resolvers) { resolvers = Object.values(Object.assign(Object.assign({}, resolvers), pluginsFile.server[p].default.resolvers)); } }); } else { //We need to merge all plugin resolvers into our core for (const plugin of Bootstrap_1.loadManifest().plugins) { const currentPlugin = Bootstrap_1.importPlugin(plugin); if (currentPlugin.default.resolvers) { resolvers = Object.values(Object.assign(Object.assign({}, resolvers), currentPlugin.default.resolvers)); } } } //Do we have any events inside the /events dir? if (fs.existsSync(process.cwd() + "/events")) { try { fs.readdirSync(process.cwd() + "/events").forEach((file) => { if (!eventFiles.includes(file)) { eventFiles.push(file); const s = nativeRequire_1.default(process.cwd() + "/events/" + file); exports.eventEmitter.on(file.replace(".js", ""), s); } }); } catch (e) { console.log(e); } } return { typeDefs: apollo_server_micro_1.gql(Bootstrap_1.bootstrapSchema()), resolvers, context, }; } exports.CorejamServer = CorejamServer; //# sourceMappingURL=Server.js.map