public function build(string $schema): DocumentAST
    {
        $document = DocumentAST::fromSource($schema);

        // Node manipulators may be defined on type extensions
        $document = $this->applyNodeManipulators($document);
        // After they have been applied, we can safely merge them
        $document = $this->mergeTypeExtensions($document);

        $document = $this->applyFieldManipulators($document);
        $document = $this->applyArgManipulators($document);

        $document = $this->addPaginationInfoTypes($document);

        $document = $this->addOrderByTypes($document);

        return $this->addNodeSupport($document);
    }