UNPKG

graphql-yoga

Version:

<div align="center"><img src="./website/public/cover.png" width="720" /></div>

62 lines (61 loc) 2.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useSchema = void 0; const graphql_1 = require("graphql"); const useSchema = (schemaDef) => { if (schemaDef == null) { return {}; } if ((0, graphql_1.isSchema)(schemaDef)) { return { onPluginInit({ setSchema }) { setSchema(schemaDef); }, }; } if ('then' in schemaDef) { let schema; return { onRequestParse() { return { async onRequestParseDone() { if (!schema) { schema = await schemaDef; } }, }; }, onEnveloped({ setSchema }) { if (!schema) { throw new Error(`You provide a promise of a schema but it hasn't been resolved yet. Make sure you use this plugin with GraphQL Yoga.`); } setSchema(schema); }, }; } const schemaByRequest = new WeakMap(); return { onRequestParse({ request, serverContext }) { return { async onRequestParseDone() { const schema = await schemaDef({ ...serverContext, request, }); schemaByRequest.set(request, schema); }, }; }, onEnveloped({ setSchema, context }) { if (context?.request == null) { throw new Error('Request object is not available in the context. Make sure you use this plugin with GraphQL Yoga.'); } const schema = schemaByRequest.get(context.request); if (schema == null) { throw new Error(`No schema found for this request. Make sure you use this plugin with GraphQL Yoga.`); } setSchema(schema); }, }; }; exports.useSchema = useSchema;