Skip to content

Commit

Permalink
DOCS: Docs for various new graphql features
Browse files Browse the repository at this point in the history
  • Loading branch information
Aaron Carlino committed Dec 23, 2021
1 parent e1b33e6 commit 6df1bb4
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@ Keep in mind that many of your changes will be in YAML, which also requires a fl
If you do not provide a `schema` parameter, the task will build all schemas.
[/info]

#### Controlling verbosity

You can set the verbosity of the output by using `verbosity=<value>`.
Available values are the constants found in `SilverStripe\GraphQL\Schema\Logger`, e.g. `INFO`, `DEBUG`, `WARNING`.
By default, the verbosity is set to `INFO`.


### Building on dev/build

By default, all schemas will be built as a side-effect of `dev/build`. To disable this, change
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,25 @@ Given the brevity of these type names, it's not inconceivable that you could run
collisions, particularly if you use feature-based namespacing. Fortunately, there are
hooks you have available to help influence the typename.

#### Explicit type mapping

You can explicitly provide type name for a given class using the `typeMapping` setting in your schema config.

**app/_graphql/config.yml**
```yaml
typeMapping:
MyProject\MyApp\Page: SpecialPage
```

It may be necessary to use `typeMapping` in projects that have a lot of similar class names in different namespaces, which will cause a collision
when the type name is derived from the class name. The most case for this
is the `Page` class, which is both at the root namespace and often in your
app namespace, e.g. `MyApp\Models\Page`.





#### The type formatter

The `type_formatter` is a callable that can be set on the `DataObjectModel` config. It takes
Expand Down
22 changes: 22 additions & 0 deletions docs/en/02_Developer_Guides/19_GraphQL/07_tips_and_tricks.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,28 @@ Docs for the current stable version (3.x) can be found
[here](https://github.com/silverstripe/silverstripe-graphql/tree/3)
[/alert]


## Debugging the generated code

By default, the generated PHP code is put into obfuscated classnames and filenames to prevent poisoning the search
tools within IDEs. Without this, you can search for something like "Page" in your IDE and get both a generated GraphQL type (probably not what you want) and a DataObject (more likely what you want) in the results and have no easy way of differentiating between the two.

When debugging, however, it's much easier if these classnames are human-readable. To turn on debug mode, add `DEBUG_SCHEMA=1` to your environment file and the classnames and filenames in the generated code directory will match their type names.

[warning]
Take care not to use `DEBUG_SCHEMA=1` as an inline environment variable to your build command, e.g. `DEBUG_SCHEMA=1 vendor/bin/sake dev/graphql/build` because any activity that happens at run time, e.g. querying the schema will fail, since the environment variable is no longer set.
[/warning]

In live mode, full obfuscation kicks in and the filenames become unreadable. You can only determine the type they map
to by looking at the generated classes and finding the `// @type:<typename>` inline comment, e.g. `// @type:Page`.

This obfuscation is handled by the `NameObfuscator` interface. See the `config.yml` file in the GraphQL module for
the various implementations, which include:

* `NaiveNameObfuscator`: Filename/Classname === Type name
* `HybridNameObfuscator`: Filename/Classname is a mix of the typename and a hash (default).
* `HashNameObfuscator`: Filename/Classname is a md5 hash of the type name (non-dev only).

## Getting the type name for a model class

Often times, you'll need to know the name of the type given a class name. There's a bit of context to this.
Expand Down

0 comments on commit 6df1bb4

Please sign in to comment.