lastdragon-ru/lara-asp-graphql-printer 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

lastdragon-ru/lara-asp-graphql-printer

最新稳定版本:9.3.1

Composer 安装命令:

composer require lastdragon-ru/lara-asp-graphql-printer

包简介

The Awesome Set of Packages for Laravel - The GraphQL Printer.

README 文档

README

Warning

Package is abandoned, please use lastdragon-ru/graphql-printer instead.

Independent (from Laravel and Lighthouse) package that allow you to print GraphQL Schema and Queries in highly customized way eg you can choose indent size, print only used/wanted/all types, print only one type, print used/wanted/all directives (it is not possible with standard printer) and even check which types/directives are used in the Schema/Query.

Requirements

Requirement Constraint Supported by
PHP ^8.4 HEAD ⋯ 8.0.0
^8.3 HEAD ⋯ 5.0.0
^8.2 7.2.0 ⋯ 3.0.0
^8.1 6.4.2 ⋯ 3.0.0
^8.0 4.6.0 ⋯ 3.0.0
webonyx/graphql-php ^15.4.0 HEAD ⋯ 4.2.1
^15.2.4 4.2.0 ⋯ 4.0.0
^14.11.9 3.0.0

Installation

composer require lastdragon-ru/graphql-printer

Usage

There are two primary methods: Printer::print() and Printer::export(). The print() will print the current type only, meanwhile export() will print the current type and all used types/directives:

<?php declare(strict_types = 1);

use GraphQL\Utils\BuildSchema;
use LastDragon_ru\GraphQLPrinter\Printer;
use LastDragon_ru\GraphQLPrinter\Settings\DefaultSettings;
use LastDragon_ru\LaraASP\Dev\App\Example;

$schema   = BuildSchema::build(
    <<<'GRAPHQL'
    type Query {
        a: A
    }

    type A @a {
        id: ID!
        b: [B!]
    }

    type B @b {
        id: ID!
    }

    directive @a on OBJECT
    directive @b on OBJECT
    GRAPHQL,
);
$type     = $schema->getType('A');
$settings = new DefaultSettings();
$printer  = new Printer($settings, null, $schema);

assert($type !== null);

Example::raw($printer->print($type), 'graphql');
Example::raw($printer->export($type), 'graphql');

The $printer->print($type) is:

type A
@a
{
    b: [B!]
    id: ID!
}

The $printer->export($type) is:

type A
@a
{
    b: [B!]
    id: ID!
}

directive @a
on
    | OBJECT

directive @b
on
    | OBJECT

type B
@b
{
    id: ID!
}

Customization

Please see:

  • Settings directory to see built-in settings;
  • Settings interface to see all supported settings;
  • DirectiveResolver interface to define your own way to find all available directives and their definitions;

Filtering

Note

By default, built-in/internal type/directives are not printed, if you want/need them, you should allow them by type/directive definitions filters.

The Printer allows filter out types and directives. This may be useful to exclude them from the schema completely. Filtering also works for queries. Please note that types filtering will work only if the schema is known (the schema is required to determine the type of argument nodes). For some AST node types, their type may also be required.

<?php declare(strict_types = 1);

use GraphQL\Language\Parser;
use GraphQL\Utils\BuildSchema;
use LastDragon_ru\GraphQLPrinter\Contracts\DirectiveFilter;
use LastDragon_ru\GraphQLPrinter\Contracts\TypeFilter;
use LastDragon_ru\GraphQLPrinter\Printer;
use LastDragon_ru\GraphQLPrinter\Settings\DefaultSettings;
use LastDragon_ru\LaraASP\Dev\App\Example;

$typeFilter      = new class() implements TypeFilter {
    #[Override]
    public function isAllowedType(string $type, bool $isStandard): bool {
        return $type !== 'Forbidden';
    }
};
$directiveFilter = new class() implements DirectiveFilter {
    #[Override]
    public function isAllowedDirective(string $directive, bool $isStandard): bool {
        return $directive !== 'forbidden';
    }
};

$schema = BuildSchema::build(
    <<<'GRAPHQL'
    type Query {
        allowed: Boolean @forbidden @allowed
        forbidden: Forbidden
    }

    type Forbidden {
        id: ID!
    }

    directive @allowed on FIELD_DEFINITION
    directive @forbidden on FIELD_DEFINITION
    GRAPHQL,
);
$query  = Parser::parse(
    <<<'GRAPHQL'
    query {
        allowed
        forbidden {
            id
        }
    }
    GRAPHQL,
);

$settings = (new DefaultSettings())
    ->setDirectiveFilter($directiveFilter)
    ->setTypeFilter($typeFilter);
$printer  = new Printer($settings, null, $schema);

Example::raw($printer->print($schema), 'graphql');
Example::raw($printer->print($query), 'graphql');

The $printer->print($schema) is:

directive @allowed
on
    | FIELD_DEFINITION

type Query {
    allowed: Boolean
    @allowed
}

The $printer->print($query) is:

query {
    allowed
}

Laravel/Lighthouse

It is highly recommended to use lastdragon-ru/lara-asp-graphql package to use the Printer within the Laravel/Lighthouse application.

Testing Assertions

There are also a few useful assertions for PHPUnit to check printed/exported type/queries, please see the lastdragon-ru/graphql-printer-testing package.

Upgrading

Please follow Upgrade Guide.

Migration from lastdragon-ru/lara-asp-graphql-printer

  • Use lastdragon-ru/graphql-printer instead of lastdragon-ru/lara-asp-graphql-printer in composer.json
  • Use lastdragon-ru/graphql-printer-testing package if you use PHPUnit assertions.
  • Use LastDragon_ru\GraphQLPrinter\* instead of LastDragon_ru\LaraASP\GraphQLPrinter\* in code.

Contributing

This package is the part of Awesome Set of Packages for Laravel. Please use the main repository to report issues, send pull requests, or ask questions.

统计信息

  • 总下载量: 66.12k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2023-04-02