GraphQL LogoGraphQL

graphql/language

graphql/languageモジュールは、GraphQL言語の解析と操作を担当します。graphql/languageモジュールまたはルートのgraphqlモジュールからインポートできます。例えば:

import { Source } from "graphql" // ES6
var { Source } = require("graphql") // CommonJS

概要#

ソース

字句解析器

パーサー

ビジター

プリンター

ソース#

ソース#

export class Source {
constructor(body: string, name?: string)
}

GraphQLへのソース入力を表現します。名前はオプションですが、GraphQLドキュメントをソースファイルに保存するクライアントにとって非常に便利です。例えば、GraphQL入力がファイルFoo.graphqlにある場合、名前が"Foo.graphql"であると便利な場合があります。

getLocation#

function getLocation(source: Source, position: number): SourceLocation
type SourceLocation = {
line: number;
column: number;
}

ソースとUTF-8文字オフセットを受け取り、対応する行と列をSourceLocationとして返します。

字句解析器#

lex#

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トークンを繰り返し返します。

字句解析器関数への引数はオプションであり、字句解析器をソース内の新しい位置に巻き戻したり早送りしたりするために使用できます。

パーサー#

parse#

export function parse(
source: Source | string,
options?: ParseOptions
): Document

GraphQLソースが与えられると、それをDocumentに解析します。

構文エラーが発生するとGraphQLErrorをスローします。

parseValue#

export function parseValue(
source: Source | string,
options?: ParseOptions
): Value

GraphQL値を含む文字列が与えられると、その値のASTを解析します。

構文エラーが発生するとGraphQLErrorをスローします。

これは、完全なGraphQLドキュメントから独立して、GraphQL値を直接操作するツール内で役立ちます。

種類#

ASTノードのさまざまな種類を記述する列挙型。

ビジター#

visit#

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つの順列につながります

  1. 特定の種類のノードに入るときにトリガーされる名前付きビジター。
visit(ast, {
Kind(node) {
// enter the "Kind" node
},
})
  1. 特定の種類のノードに入る際と離れる際にトリガーされる名前付きビジター。
visit(ast, {
Kind: {
enter(node) {
// enter the "Kind" node
}
leave(node) {
// leave the "Kind" node
}
}
})
  1. 任意のノードに入る際と離れる際にトリガーされる汎用ビジター。
visit(ast, {
enter(node) {
// enter any node
},
leave(node) {
// leave any node
},
})
  1. 特定の種類のノードに入る際と離れる際の並列ビジター。
visit(ast, {
enter: {
Kind(node) {
// enter the "Kind" node
},
},
leave: {
Kind(node) {
// leave the "Kind" node
},
},
})

BREAK#

visitorのドキュメントで説明されている番兵BREAK値。

プリンター#

print#

function print(ast): string

ASTを、妥当な書式設定規則のセットを使用して文字列に変換します。

続きを読む →graphql/type