Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/railt/laravel-provider

📦 The Laravel Framework Service Provider for Railt.
https://github.com/railt/laravel-provider

laravel package service-provider

Last synced: about 1 month ago
JSON representation

📦 The Laravel Framework Service Provider for Railt.

Awesome Lists containing this project

README

        


Railt



PHP 8.1+
railt.org
Discord
Latest Stable Version
Total Downloads
License MIT



Testing

This Laravel Provider provides integration of [GraphQL](https://facebook.github.io/graphql/)
using [Railt GraphQL](https://github.com/railt/railt).

## Requirements

- php: `^8.1`
- laravel: `^9.0|^10.0`
- railt/railt: `^2.0`

## Installation

Library is available as composer repository and can be installed using the
following command in a root of your project.

```shell
$ composer require railt/laravel-provider
```

Then add provider into the `config/app.php` file [to the `providers` list](https://laravel.com/docs/10.x/providers#registering-providers):

```php
'providers' => [
// ...
/*
* Package Service Providers...
*/
Railt\LaravelProvider\RailtServiceProvider::class,

/*
* Application Service Providers...
*/
// ...
],
```

To publish an assets (config file, example files, etc), use the command:

```shell
$ php artisan vendor:publish --tag=railt
```

## Configuration

All application configs are located in the `config/railt.php` file.

Default routes of the main application:
- `/graphql` - For the GraphQL requests.
- `/graphiql` - For the GraphQL playground (GraphQL Web IDE).

### All Configuration Options

Below is an example of a provider configuration with all possible options.

```php
[
| => [
| 'option' => 'value-1',
| ],
| => [
| 'option' => 'value-2',
| ],
| ],
| ```
*/
'compilers' => [
'default' => [
/*
| Reference to the cache store.
|
| See "cache.stores" in /config/cache.php.
|
| default: null
*/
'cache' => null,

/*
| Compiler's specification version.
|
| Should be one of:
| - "railt" - Modern extended version of specification.
| - "draft" - See https://spec.graphql.org/draft/
| - "october-2021" - See https://spec.graphql.org/October2021/
| - "june-2018" - See https://spec.graphql.org/June2018/
| - "october-2016" - See https://spec.graphql.org/October2016/
| - "april-2016" - See https://spec.graphql.org/April2016/
| - "october-2015" - See https://spec.graphql.org/October2015/
| - "july-2015" - See https://spec.graphql.org/July2015/
|
| default: "railt"
*/
'spec' => 'railt',

/*
| Reference to predefined types service.
|
| Should be instance of `Railt\TypeSystem\DictionaryInterface`.
|
| default: null
*/
'types' => null,

/*
| Autogenerated root types stubs.
*/
'generate' => [
/*
| Generated root object type name for queries.
|
| default: "Query"
*/
'query' => 'Query',

/*
| Generated root object type name for mutations.
|
| default: null
*/
'mutation' => null,

/*
| Generated root object type name for subscriptions.
|
| default: null
*/
'subscription' => null,
],

/*
| Auto casting types compiler's options.
*/
'cast' => [
/*
| Allow to cast integer values as floats.
|
| ```
| input Example {
|
| "Allow Int(1) as default of Float"
| inCaseOfEnabled(arg: Float = 1): Any
|
| "Allow only Float(1.0) as default of Float"
| inCaseOfDisabled(arg: Float = 1.0): Any
|
| }
| ```
|
| default: true
*/
'int_to_float' => true,

/*
| Allow to cast scalar values as strings.
|
| ```
| input Example {
|
| "Allow Float(1.0) as default of String"
| inCaseOfEnabled(arg: String = 1.0): Any
|
| "Allow only String("1.0") as default of String"
| inCaseOfDisabled(arg: String = "1.0"): Any
|
| }
| ```
|
| default: true
*/
'scalar_to_string' => true,
],

/*
| Default values extraction logic.
*/
'extract' => [
/*
| Allow to extract nullable types as default values.
|
| ```
| input Example {
|
| "Allow nullables as default values"
| inCaseOfEnabled(arg: String): Any
|
| "In case of disabled the default value must be defined explicitly"
| inCaseOfDisabled(arg: String = null): Any
|
| }
| ```
|
| default: true
*/
'nullable' => true,

/*
| Allow to extract list types as default values.
|
| ```
| input Example {
|
| "Allow lists as default values"
| inCaseOfEnabled(arg: [String]!): Any
|
| "In case of disabled the default value must be defined explicitly"
| inCaseOfDisabled(arg: [String]! = []): Any
|
| }
| ```
|
| default: true
*/
'list' => true,
],

/*
| List of directories from which GraphQL files should be loaded.
|
| In the case that a "resource_path('graphql')" directory is
| specified, then in case when assembling the schema, type "Example" is
| required (for example: `field(arg: Example): String`) then
| "/resources/graphql/Example.graphqls" or
| "/resources/graphql/Example.graphql" will be loaded (if exists).
|
| default: []
*/
'autoload' => [
\resource_path('graphql'),
],
],
],

/*
|---------------------------------------------------------------------------
| List of public GraphQL endpoints.
|---------------------------------------------------------------------------
|
| ```
| 'endpoints' => [
| => [
| 'option' => 'value-1',
| ],
| => [
| 'option' => 'value-2',
| ],
| ],
| ```
*/
'endpoints' => [
'default' => [
/*
| URI pathname to the GraphQL endpoint.
|
| required
*/
'route' => '/graphql',

/*
| List or available route methods.
|
| default: ['post']
*/
'methods' => ['get', 'post', 'put', 'patch'],

/*
| Pathname to the GraphQL schema file.
|
| required
*/
'schema' => \resource_path('graphql/schema.graphqls'),

/*
| List of variables passed to the schema file.
|
| You can use these values inside the schema file:
|
| ```
| variables:
| exampleController: "Path\To\ExampleController"
| ```
|
| ```
| type UserList {
| get(count: Int! = 100): [User!]
| @route(action: $exampleController)
| }
| ```
|
| default: []
*/
'variables' => [
'isDebug' => env('APP_DEBUG'),
],

/*
| Reference to defined compiler (from "compilers" section) name or
| reference to Symfony's DI service.
|
| default: null
*/
'compiler' => 'default',

/*
| List of Laravel middleware.
|
| default: []
*/
'middleware' => [],

/*
| List of Railt GraphQL extensions (plugins).
|
| Should be instance of `Railt\Foundation\Extension\ExtensionInterface`.
|
| default: []
*/
'extensions' => [
Railt\Extension\Router\RouterExtension::class,
Railt\Extension\DefaultValue\DefaultValueExtension::class,
],
],
],

/*
|---------------------------------------------------------------------------
| GraphQL Playground
|---------------------------------------------------------------------------

|
| List of GraphQL playground (GraphiQL) endpoints.
| See: https://github.com/graphql/graphiql
|
| ```
| 'playground' => [
| => [
| 'option' => 'value-1',
| ],
| => [
| 'option' => 'value-2',
| ],
| ],
| ```
*/
'playground' => [
'default' => [
/*
| Reference to "endpoints" section for which this
| playground will be used.
|
| required
*/
'endpoint' => 'default',

/*
| URI pathname of playground.
|
| required
*/
'route' => '/graphiql',

/*
| List or available route methods.
|
| default: ['get']
*/
'methods' => ['get', 'head', 'options'],

/*
| List of route Laravel middleware.
|
| default: []
*/
'middleware' => [],

/*
| List of additional optional headers that be used for each request.
|
| default: []
*/
'headers' => [
'X-Api-Playground' => 'GraphiQL',
],
],
],
];
```