Unlock new graphql-php superpowers with Jetpack scalar and directive support
- Improve your GraphQL schema validation with custom scalars
- Post-process resolved field values with directives
$ composer require compwright/graphql-php-jetpack
Install Jetpack schema support at schema build time:
use Compwright\GraphqlPhpJetpack\JetpackDecorator;
use GraphQL\Utils\BuildSchema;
$schemaTypeDecorator = new JetpackDecorator();
$schema = BuildSchema::build($ast, $schemaTypeDecorator);
Install Jetpack directive support at server config build time:
use Compwright\GraphqlPhpJetpack\DirectiveResolver;
use GraphQL\Server\ServerConfig;
use GraphQL\Type\Definition\ResolveInfo;
$resolver = function ($root, array $args, $context, ResolveInfo $info) {
// resolve field value
return $root;
};
$serverConfig = ServerConfig::create()
->setFieldResolver(new DirectiveResolver($resolver));
Declare the directives and scalars you wish to use in your schema, and call them where desired:
directive @uppercase on FIELD_DEFINITION
scalar Email
type User {
email: Email! @uppercase
}
type Query {
user: User!
}
You can use the provided Scalars just like any other type in your schema definition.
An arbitrarily long sequence of digits that represents a big integer.
A date string with format Y-m-d
, e.g. 2011-05-23
.
The following conversion applies to all date scalars:
- Outgoing values can either be valid date strings or
\DateTimeInterface
instances. - Incoming values must always be valid date strings and will be converted to
\DateTimeImmutable
instances.
A datetime string with format Y-m-d H:i:s
, e.g. 2018-05-23 13:43:32
.
A datetime string with format Y-m-d\TH:i:s.uP
, e.g. 2020-04-20T16:20:04+04:00
, 2020-04-20T16:20:04Z
.
A RFC 5321 compliant email.
Arbitrary data encoded in JavaScript Object Notation. See https://www.json.org.
This expects a string in JSON format, not a GraphQL literal.
type Query {
foo(bar: JSON!): JSON!
}
# Wrong, the given value is a GraphQL literal object
{
foo(bar: { baz: 2 })
}
# Correct, the given value is a JSON string representing an object
{
foo(bar: "{ \"bar\": 2 }")
}
JSON responses will contain nested JSON strings.
{
"data": {
"foo": "{ \"bar\": 2 }"
}
}
Any number between -90 and 90 degrees.
Any number between -180 and 180 degrees.
Loose type that allows any value. Be careful when passing in large Int
or Float
literals,
as they may not be parsed correctly on the server side. Use String
literals if you are
dealing with really large numbers to be on the safe side.
Always null
. Strictly validates value is non-null, no coercion.
Any valid two-character US State abbreviation.
Five digits, optionally followed by a dash and four additional digits.
Execute a function on the resolved value
Transform resolved text lowercase
Transform resolved text uppercase
MIT License