graphql/language
モジュールは、GraphQL言語の解析と操作を担当します。graphql/language
モジュールまたはルートのgraphql
モジュールからインポートできます。例えば:
import { Source } from "graphql" // ES6var { Source } = require("graphql") // CommonJS
ソース
字句解析器
パーサー
ビジター
プリンター
export class Source { constructor(body: string, name?: string)}
GraphQLへのソース入力を表現します。名前はオプションですが、GraphQLドキュメントをソースファイルに保存するクライアントにとって非常に便利です。例えば、GraphQL入力がファイルFoo.graphqlにある場合、名前が"Foo.graphql"であると便利な場合があります。
function getLocation(source: Source, position: number): SourceLocation
type SourceLocation = { line: number; column: number;}
ソースとUTF-8文字オフセットを受け取り、対応する行と列をSourceLocationとして返します。
function lex(source: Source): Lexer;
type Lexer = (resetPosition?: number) => Token;
export type Token = { kind: number; start: number; end: number; value: ?string;};
Sourceオブジェクトが与えられると、そのソースのLexerを返します。Lexerは、呼び出されるたびにソース内の次のトークンを返すという点で、ジェネレーターのように機能する関数です。ソースが字句解析されると仮定すると、字句解析器によって最後に発行されるトークンはEOFという種類になり、その後、字句解析器は呼び出されるたびにEOFトークンを繰り返し返します。
字句解析器関数への引数はオプションであり、字句解析器をソース内の新しい位置に巻き戻したり早送りしたりするために使用できます。
export function parse( source: Source | string, options?: ParseOptions): Document
GraphQLソースが与えられると、それをDocumentに解析します。
構文エラーが発生するとGraphQLErrorをスローします。
export function parseValue( source: Source | string, options?: ParseOptions): Value
GraphQL値を含む文字列が与えられると、その値のASTを解析します。
構文エラーが発生するとGraphQLErrorをスローします。
これは、完全なGraphQLドキュメントから独立して、GraphQL値を直接操作するツール内で役立ちます。
ASTノードのさまざまな種類を記述する列挙型。
function visit(root, visitor, keyMap)
visit()は、深さ優先探索を使用してASTを走査し、走査内の各ノードでビジターのenter関数を呼び出し、そのノードとすべての子ノードを訪問した後でleave関数を呼び出します。
enter関数とleave関数から異なる値を返すことで、ASTのサブツリーをスキップする(falseを返す)、値を返すまたは削除するためにnullを返すことによってASTを編集する、またはBREAKを返すことによって全体の走査を停止するなど、ビジターの動作を変更できます。
visit()を使用してASTを編集する場合、元のASTは変更されず、変更が適用された新しいバージョンのASTがvisit関数から返されます。
var editedAST = visit(ast, { enter(node, key, parent, path, ancestors) { // @return // undefined: no action // false: skip visiting this node // visitor.BREAK: stop visiting altogether // null: delete this node // any value: replace this node with the returned value }, leave(node, key, parent, path, ancestors) { // @return // undefined: no action // false: no action // visitor.BREAK: stop visiting altogether // null: delete this node // any value: replace this node with the returned value },})
enter()およびleave()関数を提供する代わりに、ビジターは代わりにASTノードの種類と同じ名前の関数、または名前付きキーのenter/leaveビジターを提供することもでき、これにより、ビジターAPIの4つの順列につながります
visit(ast, { Kind(node) { // enter the "Kind" node },})
visit(ast, { Kind: { enter(node) { // enter the "Kind" node } leave(node) { // leave the "Kind" node } }})
visit(ast, { enter(node) { // enter any node }, leave(node) { // leave any node },})
visit(ast, { enter: { Kind(node) { // enter the "Kind" node }, }, leave: { Kind(node) { // leave the "Kind" node }, },})
visitor
のドキュメントで説明されている番兵BREAK
値。
function print(ast): string
ASTを、妥当な書式設定規則のセットを使用して文字列に変換します。