UNPKG

39.1 kBHTMLView Raw
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="utf-8">
5 <meta name="viewport" content="width=device-width,initial-scale=1">
6 <title>GQLExpressMiddleware.js - Documentation</title>
7
8 <script src="scripts/prettify/prettify.js"></script>
9 <script src="scripts/prettify/lang-css.js"></script>
10 <!--[if lt IE 9]>
11 <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
12 <![endif]-->
13 <link type="text/css" rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
14 <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
15 <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
16</head>
17<body>
18
19<input type="checkbox" id="nav-trigger" class="nav-trigger" />
20<label for="nav-trigger" class="navicon-button x">
21 <div class="navicon"></div>
22</label>
23
24<label for="nav-trigger" class="overlay"></label>
25
26<nav>
27 <li class="nav-link nav-home-link"><a href="index.html">Home</a></li><li class="nav-heading">Classes</li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="AwaitingPromiseError.html">AwaitingPromiseError</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="AwaitingPromiseError.html#%25E2%258C%25BE%25E2%25A0%2580asyncFn">⌾⠀asyncFn</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="AwaitingPromiseError.html#%25E2%258C%25BE%25E2%25A0%2580setPromise">⌾⠀setPromise</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="AwaitingPromiseError_exports.AwaitingPromiseError.html">AwaitingPromiseError</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="AwaitingPromiseError_exports.AwaitingPromiseError.html#setPromise">setPromise</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Deferred_exports.Deferred.html">Deferred</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="DirectTypeAdd.html">DirectTypeAdd</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="FunctionExecutionError_FunctionExecutionError.html">FunctionExecutionError</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="GQLBase.html">GQLBase</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#.apiDocs">apiDocs</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#.%25E2%258C%25BE%25E2%25A0%2580getMergedRoot">⌾⠀getMergedRoot</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#.%25E2%258C%25BE%25E2%25A0%2580getProp">⌾⠀getProp</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#.%25E2%258C%25BE%25E2%25A0%2580getResolver">⌾⠀getResolver</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#.%25E2%258C%25BE%25E2%25A0%2580IDLFilePath">⌾⠀IDLFilePath</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#.%25E2%258C%25BE%25E2%25A0%2580MUTATORS">⌾⠀MUTATORS</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#.%25E2%258C%25BE%25E2%25A0%2580RESOLVERS">⌾⠀RESOLVERS</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#.%25E2%258C%25BE%25E2%25A0%2580setupModel">⌾⠀setupModel</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#.%25E2%25AC%2587%25EF%25B8%258E%25E2%25A0%2580handler">⬇︎⠀handler</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#.%25E2%25AC%2587%25EF%25B8%258E%25E2%25A0%2580SCHEMA">⬇︎⠀SCHEMA</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#%25E2%258C%25BE%25E2%25A0%2580applyAutoProps">⌾⠀applyAutoProps</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#%25E2%258C%25BE%25E2%25A0%2580callProp">⌾⠀callProp</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#%25E2%258C%25BE%25E2%25A0%2580extendModel">⌾⠀extendModel</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#%25E2%258C%25BE%25E2%25A0%2580getModel">⌾⠀getModel</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#%25E2%258C%25BE%25E2%25A0%2580getProp">⌾⠀getProp</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#%25E2%258C%25BE%25E2%25A0%2580getResolver">⌾⠀getResolver</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#%25E2%258C%25BE%25E2%25A0%2580setModel">⌾⠀setModel</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#%25E2%25AC%2586%25EF%25B8%258E%25E2%25A0%2580requestData">⬆︎⠀requestData</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#%25E2%25AC%2587%25EF%25B8%258E%25E2%25A0%2580requestData">⬇︎⠀requestData</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#~deleteProperty">deleteProperty</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBase.html#~set">set</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="GQLBase.%25E2%258E%2586%25E2%25A0%2580constructor.html">⎆⠀constructor</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="GQLEnum.html">GQLEnum</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLEnum.html#..get">.get</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLEnum.html#..set">.set</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLEnum.html#.valueFor">valueFor</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLEnum.html#.%25E2%25AC%2587%25EF%25B8%258E%25E2%25A0%2580enums">⬇︎⠀enums</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLEnum.html#.%25E2%25AC%2587%25EF%25B8%258E%25E2%25A0%2580name">⬇︎⠀name</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLEnum.html#.%25E2%25AC%2587%25EF%25B8%258E%25E2%25A0%2580value">⬇︎⠀value</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLEnum.html#.%25E2%25AC%2587%25EF%25B8%258E%25E2%25A0%2580values">⬇︎⠀values</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLEnum.html#GenerateEnumsProxyHandler">GenerateEnumsProxyHandler</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="GQLExpressMiddleware.html">GQLExpressMiddleware</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLExpressMiddleware.html#.clearCache">clearCache</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLExpressMiddleware.html#.%25E2%258C%25BE%25E2%25A0%2580generateSchemaSDL">⌾⠀generateSchemaSDL</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLExpressMiddleware.html#astMiddleware">astMiddleware</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLExpressMiddleware.html#schemaMiddleware">schemaMiddleware</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLExpressMiddleware.html#%25E2%258C%25BE%25E2%25A0%2580customMiddleware">⌾⠀customMiddleware</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLExpressMiddleware.html#%25E2%25AC%2587%25EF%25B8%258E%25E2%25A0%2580middleware">⬇︎⠀middleware</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLExpressMiddleware.html#%25E2%25AC%2587%25EF%25B8%258E%25E2%25A0%2580middlewareWithoutGraphiQL">⬇︎⠀middlewareWithoutGraphiQL</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLExpressMiddleware.html#%25E2%25AC%2587%25EF%25B8%258E%25E2%25A0%2580schema">⬇︎⠀schema</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="GQLExpressMiddleware.%25E2%258E%2586%25E2%25A0%2580constructor.html">⎆⠀constructor</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="GQLInterface.html">GQLInterface</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLInterface.html#.%25E2%258C%25BE%25E2%25A0%2580resolveType">⌾⠀resolveType</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="GQLScalar.html">GQLScalar</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLScalar.html#.parseLiteral">parseLiteral</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLScalar.html#.parseValue">parseValue</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLScalar.html#.serialize">serialize</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="IDLFileHandler.html">IDLFileHandler</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="IDLFileHandler.html#%25E2%258C%25BE%25E2%25A0%2580getFile">⌾⠀getFile</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="IDLFileHandler.html#%25E2%258C%25BE%25E2%25A0%2580getSchema">⌾⠀getSchema</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="IDLFileHandler.html#%25E2%258C%25BE%25E2%25A0%2580getSyntaxTree">⌾⠀getSyntaxTree</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="IDLFileHandler.%25E2%258E%2586%25E2%25A0%2580constructor.html">⎆⠀constructor</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="ModuleParser.html">ModuleParser</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="ModuleParser.html#.%25E2%258C%25BE%25E2%25A0%2580arrayToPattern">⌾⠀arrayToPattern</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="ModuleParser.html#.%25E2%258C%25BE%25E2%25A0%2580checkForPackageExtensions">⌾⠀checkForPackageExtensions</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="ModuleParser.html#%25E2%258C%25BE%25E2%25A0%2580findGQLBaseClasses">⌾⠀findGQLBaseClasses</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="ModuleParser.html#%25E2%258C%25BE%25E2%25A0%2580importClass">⌾⠀importClass</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="ModuleParser.html#%25E2%258C%25BE%25E2%25A0%2580parse">⌾⠀parse</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="ModuleParser.html#%25E2%258C%25BE%25E2%25A0%2580parseSync">⌾⠀parseSync</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="ModuleParser.html#~%25E2%258C%25BE%25E2%25A0%2580walk">⌾⠀walk</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="ModuleParser.html#~%25E2%258C%25BE%25E2%25A0%2580walkSync">⌾⠀walkSync</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="ModuleParser.html#~%25E2%258E%2586%25E2%25A0%2580constructor">⎆⠀constructor</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="ModuleParser.exports.ModuleParser.html">exports.ModuleParser</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="SchemaUtils.html">SchemaUtils</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SchemaUtils.html#.%25E2%258C%25BE%25E2%25A0%2580createMergedRoot">⌾⠀createMergedRoot</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SchemaUtils.html#.%25E2%258C%25BE%25E2%25A0%2580injectComments">⌾⠀injectComments</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SchemaUtils.html#.%25E2%258C%25BE%25E2%25A0%2580injectEnums">⌾⠀injectEnums</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SchemaUtils.html#.%25E2%258C%25BE%25E2%25A0%2580injectInterfaceResolvers">⌾⠀injectInterfaceResolvers</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SchemaUtils.html#.%25E2%258C%25BE%25E2%25A0%2580injectScalars">⌾⠀injectScalars</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="SyntaxTree.html">SyntaxTree</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#.%25E2%258C%25BE%25E2%25A0%2580EmptyDocument">⌾⠀EmptyDocument</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#.%25E2%258C%25BE%25E2%25A0%2580EmptyMutation">⌾⠀EmptyMutation</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#.%25E2%258C%25BE%25E2%25A0%2580EmptyQuery">⌾⠀EmptyQuery</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#.%25E2%258C%25BE%25E2%25A0%2580findDefinition">⌾⠀findDefinition</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#.%25E2%258C%25BE%25E2%25A0%2580findField">⌾⠀findField</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#.%25E2%258C%25BE%25E2%25A0%2580findInASTArrayByNameValue">⌾⠀findInASTArrayByNameValue</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#.%25E2%258C%25BE%25E2%25A0%2580from">⌾⠀from</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#.%25E2%258C%25BE%25E2%25A0%2580fromAST">⌾⠀fromAST</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#.%25E2%258C%25BE%25E2%25A0%2580fromSchema">⌾⠀fromSchema</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#.%25E2%258E%2586%25E2%25A0%2580constructor">⎆⠀constructor</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#%25E2%258C%25BE%25E2%25A0%2580appendDefinitions">⌾⠀appendDefinitions</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#%25E2%258C%25BE%25E2%25A0%2580consumeDefinition">⌾⠀consumeDefinition</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#%25E2%258C%25BE%25E2%25A0%2580find">⌾⠀find</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#%25E2%258C%25BE%25E2%25A0%2580findEnumDefinition">⌾⠀findEnumDefinition</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#%25E2%258C%25BE%25E2%25A0%2580setAST">⌾⠀setAST</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#%25E2%258C%25BE%25E2%25A0%2580toString">⌾⠀toString</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#%25E2%258C%25BE%25E2%25A0%2580updateAST">⌾⠀updateAST</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#%25E2%25AC%2586%25EF%25B8%258E%25E2%25A0%2580ast">⬆︎⠀ast</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="SyntaxTree.html#%25E2%25AC%2587%25EF%25B8%258E%25E2%25A0%2580ast">⬇︎⠀ast</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="utils.Deferred.html">Deferred</a></span></li><li class="nav-heading">Namespaces</li><li class="nav-heading"><span class="nav-item-type type-namespace">N</span><span class="nav-item-name"><a href="decorators.html">decorators</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="decorators.html#.%25E2%258C%25BE%25E2%25A0%2580extractBits">⌾⠀extractBits</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="decorators.html#..%25F0%259F%258F%25B7%25E2%25A0%2580AdjacentSchema">.🏷⠀AdjacentSchema</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="decorators.html#..%25F0%259F%258F%25B7%25E2%25A0%2580FileSchema">.🏷⠀FileSchema</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="decorators.html#..%25F0%259F%258F%25B7%25E2%25A0%2580Getters">.🏷⠀Getters</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="decorators.html#..%25F0%259F%258F%25B7%25E2%25A0%2580Properties">.🏷⠀Properties</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="decorators.html#..%25F0%259F%258F%25B7%25E2%25A0%2580Schema">.🏷⠀Schema</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="decorators.html#..%25F0%259F%258F%25B7%25E2%25A0%2580Setters">.🏷⠀Setters</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="decorators.html#~decorate">decorate</a></span></li><li class="nav-heading"><span class="nav-item-type type-namespace">N</span><span class="nav-item-name"><a href="GQLBaseEnv.html">GQLBaseEnv</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="GQLBaseEnv.html#~notDefined">notDefined</a></span></li><li class="nav-heading"><a href="global.html">Globals</a></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#applyTags">applyTags</a></span></li><li class="nav-item"><span class="nav-item-type type-member">M</span><span class="nav-item-name"><a href="global.html#AsyncFunctionExecutionError">AsyncFunctionExecutionError</a></span></li><li class="nav-item"><span class="nav-item-type type-member">M</span><span class="nav-item-name"><a href="global.html#CHECK_API_DOCS">CHECK_API_DOCS</a></span></li><li class="nav-item"><span class="nav-item-type type-member">M</span><span class="nav-item-name"><a href="global.html#CHECK_RESOLVERS">CHECK_RESOLVERS</a></span></li><li class="nav-item"><span class="nav-item-type type-member">M</span><span class="nav-item-name"><a href="global.html#CHECK_SCHEMA">CHECK_SCHEMA</a></span></li><li class="nav-item"><span class="nav-item-type type-member">M</span><span class="nav-item-name"><a href="global.html#CHECKLIST">CHECKLIST</a></span></li><li class="nav-item"><span class="nav-item-type type-member">M</span><span class="nav-item-name"><a href="global.html#FunctionExecutionError">FunctionExecutionError</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getChecklist">getChecklist</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#hasChecklist">hasChecklist</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#newChecklist">newChecklist</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#setChecklist">setChecklist</a></span></li><li class="nav-item"><span class="nav-item-type type-member">M</span><span class="nav-item-name"><a href="global.html#types">types</a></span></li>
28</nav>
29
30<div id="main">
31
32 <h1 class="page-title">GQLExpressMiddleware.js</h1>
33
34
35
36
37
38
39
40 <section>
41 <article>
42 <pre class="prettyprint source linenums"><code>// @flow
43// @module GQLExpressMiddleware
44
45import { SyntaxTree } from './SyntaxTree'
46import { GQLBase } from './GQLBase'
47import { GQLInterface } from './GQLInterface'
48import { GQLScalar } from './GQLScalar'
49import { typeOf } from 'ne-types'
50import { SchemaUtils } from './SchemaUtils'
51import _, { merge } from 'lodash'
52import { makeExecutableSchema } from 'graphql-tools'
53
54import {
55 parse,
56 print,
57 buildSchema,
58 GraphQLSchema,
59 GraphQLInterfaceType,
60 GraphQLEnumType,
61 GraphQLScalarType
62} from 'graphql'
63
64import bodyParser from 'body-parser'
65import graphqlHTTP from 'express-graphql'
66import EventEmitter from 'events'
67import path from 'path'
68
69/**
70 * A handler that exposes an express middleware function that mounts a
71 * GraphQL I/O endpoint. Typical usage follows:
72 *
73 * ```js
74 * const app = express();
75 * app.use(/.../, new GQLExpressMiddleware([...classes]).middleware);
76 * ```
77 *
78 * @class GQLExpressMiddleware
79 */
80export class GQLExpressMiddleware extends EventEmitter
81{
82 handlers: Array&lt;GQLBase>;
83
84 schema: string;
85
86 cache: Map&lt;any, any> = new Map()
87
88 /**
89 * For now, takes an Array of classes extending from GQLBase. These are
90 * parsed and a combined schema of all their individual schemas is generated
91 * via the use of ASTs. This is passed off to express-graphql.
92 *
93 * @memberof GQLExpressMiddleware
94 * @method ⎆⠀constructor
95 * @constructor
96 *
97 * @param {Array&lt;GQLBase>} handlers an array of GQLBase extended classes
98 */
99 constructor(handlers: Array&lt;GQLBase>) {
100 super()
101
102 this.handlers = handlers
103
104 // Generate and cache the schema SDL/IDL string and ast obj (GraphQLSchema)
105 this.ast
106 }
107
108 /**
109 * The Schema String and Schema AST/GraphQLSchema JavaScript objects are
110 * cached after being processed once. If there is a runtime need to rebuild
111 * these objects, calling `clearCache()` will allow their next usage to
112 * rebuild them dynamically.
113 *
114 * @method clearCache
115 * @memberof GQLExpressMiddleware
116 *
117 * @return {GQLExpressMiddleware} returns this so that it can be inlined; ala
118 * `gqlExpressMiddleware.clearCache().ast`, for example
119 */
120 clearCache(): GQLExpressMiddleware {
121 this.cache.clear()
122 return this
123 }
124
125 /**
126 * The schema property returns the textual Schema as it is generated based
127 * on the various Lattice types, interfaces and enums defined in your
128 * project. The ast property returns the JavaScript AST represenatation of
129 * that schema with all injected modificiations detailed in your classes.
130 */
131 get ast(): GraphQLSchema {
132 let cached: ?GraphQLSchema = this.cache.get('ast')
133
134 if (cached) {
135 return cached
136 }
137
138 let ast: GraphQLSchema = buildSchema(this.schema)
139
140 SchemaUtils.injectAll(ast, this.handlers);
141
142 this.cache.set('ast', ast)
143
144 return ast;
145 }
146
147 /**
148 * Generates the textual schema based on the registered `GQLBase` handlers
149 * this instance represents.
150 *
151 * @method GQLExpressMiddleware#⬇︎⠀schema
152 * @since 2.7.0
153 *
154 * @return {string} a generated schema string based on the handlers that
155 * are registered with this `GQLExpressMiddleware` instance.
156 */
157 get schema(): string {
158 let cached = this.cache.get('schema')
159 let schema
160
161 if (cached) return cached
162
163 schema = SchemaUtils.generateSchemaSDL(this.handlers);
164 this.cache.set('schema', schema)
165
166 return schema
167 }
168
169 async rootValue(
170 requestData: Object,
171 separateByType: boolean = false
172 ): Object {
173 let root = await SchemaUtils.createMergedRoot(
174 this.handlers, requestData, separateByType
175 )
176
177 return root;
178 }
179
180 /**
181 * Using the express-graphql module, it returns an Express 4.x middleware
182 * function.
183 *
184 * @instance
185 * @memberof GQLExpressMiddleware
186 * @method ⬇︎⠀middleware
187 *
188 * @return {Function} a function that expects request, response and next
189 * parameters as all Express middleware functions.
190 */
191 get middleware(): Function {
192 return this.customMiddleware();
193 }
194
195 /**
196 * Using the express-graphql module, it returns an Express 4.x middleware
197 * function. This version however, has graphiql disabled. Otherwise it is
198 * identical to the `middleware` property
199 *
200 * @instance
201 * @memberof GQLExpressMiddleware
202 * @method ⬇︎⠀middlewareWithoutGraphiQL
203 *
204 * @return {Function} a function that expects request, response and next
205 * parameters as all Express middleware functions.
206 */
207 get middlewareWithoutGraphiQL(): Function {
208 return this.customMiddleware({graphiql: false});
209 }
210
211 /**
212 * In order to ensure that Lattice functions receive the request data,
213 * it is important to use the options function feature of both
214 * `express-graphql` and `apollo-server-express`. This function will create
215 * an options function that reflects that schema and Lattice types defined
216 * in your project.
217 *
218 * Should you need to tailor the response before it is sent out, you may
219 * supply a function as a second parameter that takes two parameters and
220 * returns an options object. The patchFn callback signature looks like this
221 *
222 * ```patchFn(options, {req, res, next|gql})```
223 *
224 * When using the reference implementation, additional graphql request info
225 * can be obtained in lieu of the `next()` function so typically found in
226 * Express middleware. Apollo Server simply provides the next function in
227 * this location.
228 *
229 * @param {Object} options any options, to either engine, that make the most
230 * sense
231 * @param {Function} patchFn see above
232 */
233 generateOptions(
234 options: Object = { graphiql: true },
235 patchFn: ?Function = null
236 ): Function {
237 const optsFn = async (req: mixed, res: mixed, gql: mixed) => {
238 let schema = this.ast;
239 let opts = {
240 schema,
241 rootValue: await this.rootValue({req, res, gql}),
242 formatError: error => ({
243 message: error.message,
244 locations: error.locations,
245 stack: error.stack,
246 path: error.path
247 })
248 }
249
250 merge(opts, options);
251 if (patchFn &amp;&amp; typeof patchFn === 'function') {
252 merge(
253 opts,
254 (patchFn.bind(this)(opts, {req, res, gql})) || opts
255 );
256 }
257
258 return opts;
259 }
260
261 return optsFn
262 }
263
264 /**
265 * In order to ensure that Lattice functions receive the request data,
266 * it is important to use the options function feature of both
267 * `express-graphql` and `apollo-server-express`. This function will create
268 * an options function that reflects that schema and Lattice types defined
269 * in your project.
270 *
271 * Should you need to tailor the response before it is sent out, you may
272 * supply a function as a second parameter that takes two parameters and
273 * returns an options object. The patchFn callback signature looks like this
274 *
275 * ```patchFn(options, {req, res, next|gql})```
276 *
277 * When using the reference implementation, additional graphql request info
278 * can be obtained in lieu of the `next()` function so typically found in
279 * Express middleware. Apollo Server simply provides the next function in
280 * this location.
281 *
282 * @param {Object} options any options, to either engine, that make the most
283 * sense
284 * @param {Function} patchFn see above
285 */
286 generateApolloOptions(
287 options: Object = {
288 formatError: error => ({
289 message: error.message,
290 locations: error.locations,
291 stack: error.stack,
292 path: error.path
293 }),
294 debug: true
295 },
296 patchFn: ?Function = null
297 ): Function {
298 const optsFn = async (req: mixed, res: mixed) => {
299 let opts = {
300 schema: this.ast,
301 resolvers: await this.rootValue({req, res}, true)
302 }
303
304 opts.schema = makeExecutableSchema({
305 typeDefs: [this.schema],
306 resolvers: opts.resolvers
307 })
308
309 SchemaUtils.injectAll(opts.schema, this.handlers);
310
311 merge(opts, options);
312 if (patchFn &amp;&amp; typeof patchFn === 'function') {
313 merge(
314 opts,
315 (patchFn.bind(this)(opts, {req, res})) || opts
316 );
317 }
318
319 return opts;
320 }
321
322 return optsFn
323 }
324
325 apolloMiddleware(
326 apolloFn: Function,
327 apolloOpts: Object = {},
328 patchFn: ?Function = null
329 ): Array&lt;Function> {
330 let opts = this.generateApolloOptions(apolloOpts, patchFn)
331
332 return [
333 bodyParser.json(),
334 bodyParser.text({ type: 'application/graphql' }),
335 (req, res, next) => {
336 if (req.is('application/graphql')) {
337 req.body = { query: req.body };
338 }
339 next();
340 },
341 apolloFn(opts)
342 ]
343 }
344
345 /**
346 * If your needs require you to specify different values to `graphqlHTTP`,
347 * part of the `express-graphql` package, you can use the `customMiddleware`
348 * function to do so.
349 *
350 * The first parameter is an object that should contain valid `graphqlHTTP`
351 * options. See https://github.com/graphql/express-graphql#options for more
352 * details. Validation is NOT performed.
353 *
354 * The second parameter is a function that will be called after any options
355 * have been applied from the first parameter and the rest of the middleware
356 * has been performed. This, if not modified, will be the final options
357 * passed into `graphqlHTTP`. In your callback, it is expected that the
358 * supplied object is to be modified and THEN RETURNED. Whatever is returned
359 * will be used or passed on. If nothing is returned, the options supplied
360 * to the function will be used instead.
361 *
362 * @method ⌾⠀customMiddleware
363 * @memberof GQLExpressMiddleware
364 * @instance
365 *
366 * @param {Object} [graphqlHttpOptions={graphiql: true}] standard set of
367 * `express-graphql` options. See above.
368 * @param {Function} patchFn see above
369
370 * @return {Function} a middleware function compatible with Express
371 */
372 customMiddleware(
373 graphqlHttpOptions: Object = {graphiql: true},
374 patchFn?: Function
375 ): Function {
376 const optsFn = this.generateOptions(graphqlHttpOptions, patchFn)
377 return graphqlHTTP(optsFn)
378 }
379
380 /**
381 * An optional express middleware function that can be mounted to return
382 * a copy of the generated schema string being used by GQLExpressMiddleware.
383 *
384 * @memberof GQLExpressMiddleware
385 * @method schemaMiddleware
386 * @instance
387 *
388 * @type {Function}
389 */
390 get schemaMiddleware(): Function {
391 return (req: Object, res: Object, next: ?Function) => {
392 res.status(200).send(this.schema);
393 }
394 }
395
396 /**
397 * An optional express middleware function that can be mounted to return
398 * the JSON AST representation of the schema string being used by
399 * GQLExpressMiddleware.
400 *
401 * @memberof GQLExpressMiddleware
402 * @method astMiddleware
403 * @instance
404 *
405 * @type {Function}
406 */
407 get astMiddleware(): Function {
408 return (req: Object, res: Object, next: ?Function) => {
409 res.status(200).send('Temporarily disabled in this version')
410
411 // let cachedOutput = this.cache.get('astMiddlewareOutput')
412 // if (cachedOutput) {
413 // res
414 // .status(302)
415 // .set('Content-Type', 'application/json')
416 // .send(cachedOutput)
417 // }
418 // else {
419 // this.rootValue({req, res, next}, true)
420 // .then(resolvers => {
421 // let schema: GraphQLSchema = buildSchema(this.schema)
422
423 // SchemaUtils.injectInterfaceResolvers(schema, this.handlers);
424 // SchemaUtils.injectEnums(schema, this.handlers);
425 // SchemaUtils.injectScalars(schema, this.handlers);
426 // SchemaUtils.injectComments(schema, this.handlers);
427
428 // function killToJSON(obj: any, path = 'obj.') {
429 // for (let key in obj) {
430 // try {
431 // if (key == 'prev' || key == 'next' || key == 'ofType') continue;
432
433 // if (key == 'toJSON') {
434 // let success = delete obj.toJSON
435 // //console.log(`Killing ${path}toJSON...${success ? 'success' : 'failure'}`)
436 // continue
437 // }
438
439 // if (key == 'inspect') {
440 // let success = delete obj.inspect
441 // //console.log(`Killing ${path}inspect...${success ? 'success' : 'failure'}`)
442 // continue
443 // }
444
445 // if (key == 'toString') {
446 // obj.toString = Object.prototype.toString
447 // //console.log(`Replacing ${path}toString with default`)
448 // continue
449 // }
450
451 // if (typeof obj[key] == 'function') {
452 // obj[key] = `[Function ${obj[key].name}]`
453 // continue
454 // }
455
456 // if (typeof obj[key] == 'object') {
457 // obj[key] = killToJSON(obj[key], `${path}${key}.`)
458 // continue
459 // }
460 // }
461 // catch (error) {
462 // continue
463 // }
464 // }
465
466 // return obj
467 // }
468
469 // // $FlowFixMe
470 // schema = killToJSON(schema)
471
472 // // Still do not know why/how they are preventing JSONifying the
473 // // _typeMap keys. So aggravting
474 // for (let typeKey of Object.keys(schema._typeMap)) {
475 // let object = {}
476
477 // // $FlowFixMe
478 // for (let valKey of Object.keys(schema._typeMap[typeKey])) {
479 // // $FlowFixMe
480 // object[valKey] = schema._typeMap[typeKey][valKey]
481 // }
482
483 // // $FlowFixMe
484 // schema._typeMap[typeKey] = object
485 // }
486
487 // let output = JSON.stringify(schema)
488 // this.cache.delete('ast')
489 // this.cache.set('astMiddlewareOutput', output)
490
491 // res
492 // .status(200)
493 // .set('Content-Type', 'application/json')
494 // .send(output)
495 // })
496 // .catch(error => {
497 // console.error(error)
498
499 // res
500 // .status(500)
501 // .json(error)
502 // })
503 // }
504 }
505 }
506}
507
508export default GQLExpressMiddleware;
509</code></pre>
510 </article>
511 </section>
512
513
514
515
516</div>
517
518<br class="clear">
519
520<footer>
521 Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Fri Jun 08 2018 19:28:39 GMT-0700 (PDT) using the Minami theme.
522</footer>
523
524<script>prettyPrint();</script>
525<script src="scripts/linenumber.js"></script>
526</body>
527</html>