UNPKG

graphql-yoga

Version:
76 lines (75 loc) 2.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.graphqlYoga = exports.YogaExtensions = void 0; const tslib_1 = require("tslib"); const yargs_1 = tslib_1.__importDefault(require("yargs")); const helpers_1 = require("yargs/helpers"); const graphql_config_1 = require("graphql-config"); const code_file_loader_1 = require("@graphql-tools/code-file-loader"); const graphql_yoga_1 = require("graphql-yoga"); const http_1 = require("http"); const mock_1 = require("@graphql-tools/mock"); const terminateEvents = ['SIGINT', 'SIGTERM']; function registerTerminateHandler(callback) { for (const eventName of terminateEvents) { process.on(eventName, () => callback(eventName)); } } const YogaExtensions = (api) => { const codeFileLoader = new code_file_loader_1.CodeFileLoader({ noPluck: true, }); api.loaders.schema.register(codeFileLoader); api.loaders.documents.register(codeFileLoader); return { name: 'Yoga', }; }; exports.YogaExtensions = YogaExtensions; function graphqlYoga() { return (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv)).command('$0', 'Serves GraphQL over HTTP using your GraphQL Config', (builder) => { builder.option('project', { type: 'string', description: 'Project name', }); builder.option('mock', { type: 'boolean', description: 'Mock the given schema', }); }, async ({ project = 'default', mock }) => { console.info(`Loading GraphQL Config from ${process.cwd()}`); const config = await (0, graphql_config_1.loadConfig)({ extensions: [exports.YogaExtensions], throwOnMissing: false, throwOnEmpty: false, }); console.log(`Loading project: ${project}`); const projectConfig = config?.getProject(project); console.log(`Loading GraphQL Schema of ${project}`); let schema = await projectConfig?.getSchema(); if (!schema) { console.warn(`Could not find schema for project ${project} fallback to default schema`); } if (mock) { if (!schema) { console.warn('No schema found for mocking. Skipping mocking.'); } else { console.log(`Adding mocks to the schema`); schema = (0, mock_1.addMocksToSchema)({ schema }); } } console.log(`Building GraphQL Server`); const yoga = (0, graphql_yoga_1.createYoga)({ schema, }); const server = (0, http_1.createServer)(yoga); console.log(`Starting GraphQL Server`); server.listen(4000); registerTerminateHandler(() => { server.close(); }); }).argv; } exports.graphqlYoga = graphqlYoga; tslib_1.__exportStar(require("graphql-yoga"), exports);