/** @category AST Utilities */
import type { DefinitionNode, DocumentNode } from '../language/ast';
import { Kind } from '../language/kinds';
/**
* Provided a collection of ASTs, presumably each from different files,
* concatenate the ASTs together into batched AST, useful for validating many
* GraphQL source files which together represent one conceptual application.
* @param documents - Document ASTs to concatenate.
* @returns A document AST containing all definitions from the provided documents.
* @example
* ```ts
* import { parse } from 'graphql/language';
* import { concatAST } from 'graphql/utilities';
*
* const document = concatAST([parse('type Query { a: String }'), parse('type User { id: ID }')]);
*
* document.definitions.length; // => 2
* ```
*/
export function concatAST(
documents: ReadonlyArray<DocumentNode>,
): DocumentNode {
const definitions: Array<DefinitionNode> = [];
for (const doc of documents) {
definitions.push(...doc.definitions);
}
return { kind: Kind.DOCUMENT, definitions };
}