Commit Graph

60 Commits

Author SHA1 Message Date
e716bc57e7 Wrap executed result in "data" object 2017-02-10 17:10:09 -03:00
4ab4660d36 Initial implementation of AST.Full -> AST.Core
This focused mainly on fragments.
2017-02-10 15:00:22 -03:00
8b09c8aa76 Make operation name optional 2017-02-03 12:57:21 -03:00
693b7d18dc Introduce Tranform module
In the Transform module the Full AST will converted to Core AST.

This commit also includes a partial implementation of Fragment replacement.
2017-02-02 12:44:03 -03:00
f35e1f949a Define Schema using Core AST
Also, temporarily remove error reporting to simplify execution. This should be
restored once the new execution model is nailed.
2017-01-30 15:20:17 -03:00
5390c4ca1e Split AST in 2
One AST is meant to be a target parser and tries to adhere as much as possible
to the spec. The other is a simplified version of that AST meant for execution.

Also newtypes have been replaced by type synonyms and NonEmpty lists are being
used where it makes sense.
2017-01-28 14:15:14 -03:00
3e991adf4e Add Graphql Core AST 2017-01-26 12:52:07 -03:00
10fdf05aa7 Remove Type Definition support 2017-01-26 11:56:22 -03:00
933cfd2852 Tokenize number parser
The essential change hidden behind the code golfing is using the `tok`
combinator. This was making fail the Kitchen Sink test.
2016-12-18 12:19:59 -03:00
87c92e9d6e Parse number as scientific and interpret meaning separately.
The current parser will fail parsing floats because it parses an int,
and then stumbles on the dot.

To fix I interpret the value with the scientific library which already
is a dependency through attoparsec, so we're not introducing any extra
downloads or compiling.

I think this is still subtly wrong because "10.0" will be parsed as
ValueInt, but because input argument ints are allowed to be coerced
into doubles (according to the spec) this is probably acceptable.
2016-12-09 00:03:20 +00:00
61f0a06096 Drop support for GHC-7.8.4 2016-11-27 12:56:44 -03:00
77853b17ae Merge branch 'all-improvements'
This adds general API documentation, a tutorial and error handling.
2016-03-15 14:02:34 +01:00
61d6af7778 Added documentation of functions and modules and included tutorial.lhs. 2016-03-14 01:42:55 +01:00
d195389102 Added exception handling with Alternative constraint according to spec. 2016-03-14 01:01:24 +01:00
d8a731fe30 Remove StringValue type 2016-02-22 13:59:38 +01:00
770df82718 Simplify Schema definition API
Now there is one `Resolver` type and the `Output` and `Scalar` types
have been removed. This should be closer to the final Schema definition
API.
2016-02-19 19:21:32 +01:00
8ee50727bd Overhaul Schema DSL
Aside of making the definition of Schemas easier, it takes care of
issues like nested aliases which previously wasn't possible. The naming
of the DSL functions is still provisional.
2016-02-18 13:49:02 +01:00
a6b2fd297b Garden 2016-02-17 13:20:56 +01:00
7131d1c142 Initial support for aliases in execute 2016-02-17 13:20:56 +01:00
98d2d41cda Initial support for variable substitution
The correspondent end-to-end test has been ported. The variable
definition still needs to be checked.
2016-02-15 14:43:52 +01:00
a088c81944 Handle Field arguments in Schema definition
The `Schema` has been overhauled to make `Output` monomorphic.
Traversing the `GraphQL` document is handled implicitly while defining
the `Schema`.

The 4th end-to-end test from `graphql-js` has been ported.
2016-02-12 12:51:18 +01:00
df8e43c9aa Handle Output enumerations in Schema definition
The third end-to-end test from graphql-js was implemented.
2016-02-09 13:31:28 +01:00
1561e62489 Extend execute for deeper queries
The second graphql-js end-to-end test was ported and passed
successfully.
2016-02-08 17:30:18 +01:00
c81ddb0335 Introduce graphql function
This simplifies Attoparsec parsing when executing a GraphQL
query.
2016-02-05 12:32:35 +01:00
eca3c2d8d4 Generalize Maybe type constructor to any Monad
This allows schema definitions with side-effects for any type with a
Monadic/Alternative implementation like IO for example.
2016-01-30 12:29:49 +01:00
a832991ac0 Remove unnecessary import 2016-01-27 18:52:20 +01:00
b72cfc097a Fix for GHC-7.8.4 2016-01-26 13:57:58 +01:00
78e0d871d5 Garden 2016-01-26 13:38:02 +01:00
bb685c9afa Rough implementation of execute
The first end-to-end test taken from `graphql-js` passes but this still
needs to be extended to support more general cases.

- `Data.GraphQL.Schema` has been heavily modified to support the
  execution model. More drastic changes are expected in this module.
- When defining a `Schema` ordinary functions taking fields as input are
  being used instead of maps. This makes the implementation of `execute`
  easier, and, arguably, makes `Schema` definitions more *Haskellish*.
- Drop explicit `unordered-containers` dependency. `Aeson.Value`s and
  field functions should be good enough for now.
2016-01-26 12:43:18 +01:00
4e5dc3433a Implement first StarWars end-to-end test
`execute` still needs to be implemented.
2015-10-19 12:19:39 +02:00
3f30a44d1d Test fixtures for Schema toplevel
This includes simplications to the Schema data types.
2015-10-17 17:49:56 +02:00
8e3bae4b5c Initial stub for a GraphQL and execute 2015-10-17 13:23:49 +02:00
85941139c1 Adds IsString instance to Variable for easier REPL playing 2015-09-25 19:12:22 -04:00
af42e5577c Rename Data.GraphQL.Printer -> Data.GraphQL.Encoder 2015-09-22 14:23:18 +02:00
a4db99ea5d Fixes for ghc-7.8 2015-09-22 14:02:49 +02:00
06b3302862 Add kitchen sink parse/encode unit test
This also includes the fixes to make it work. Golden tests have been
removed.
2015-09-22 14:02:49 +02:00
4508364266 Fix alias colon order 2015-09-22 11:16:36 +02:00
99b4d86702 Polish printer code
- Add printing combinators to make code more readable.
- Optimize printing for encoding. Pretty printing will be in a different
  module.
2015-09-22 11:13:09 +02:00
da97387042 Parser fixes:
- Braces instead of parens for `inputValueDefinitions`.
- Rename `bool` -> `booleanValue`.
- Some code rearrangements.
2015-09-22 10:39:14 +02:00
e74ee640a8 Initial implementation of GraphQL pretty printer
This just typechecks. It needs to be cleaned and tested. Tests have been
deactivated.
2015-09-21 18:26:22 +02:00
3d97b3e2ff Introduce Node data type to simplify OperationDefinition
Thanks to @swolchok for the suggestion.
2015-09-21 10:05:09 +02:00
88ca3d1866 Add errors for all parser Alternatives 2015-09-21 09:28:51 +02:00
899fa1b531 Handle escaped quotes for GraphQL String Values
This also includes a new type for Value String.

The tests fail now, although it parses successfully. I'll use a pretty
printer in next commit so that it's easier to spot the differences.
Onces this is working I'll add the rest of the escaped characters.
2015-09-18 18:11:11 +02:00
cb9977141d Golf 2015-09-18 16:29:40 +02:00
4f4e31805a Parse secure names 2015-09-18 15:43:22 +02:00
d88acf3d0e Refine numeric types 2015-09-18 15:02:51 +02:00
c9c1137ceb Garden 2015-09-18 14:55:59 +02:00
f88948e801 Support ghc-7.8 2015-09-16 10:36:59 +02:00
b4b8388392 Enable warnings and take care of extra imports 2015-09-14 15:48:47 +02:00
ec018db73a Handle comments in whitespace 2015-09-14 15:43:09 +02:00