diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..eb0c697 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,29 @@ +name: CI + +on: push + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: purescript-contrib/setup-purescript@main + + - name: Cache PureScript dependencies + uses: actions/cache@v2 + # This cache uses the .dhall files to know when it should reinstall + # and rebuild packages. It caches both the installed packages from + # the `.spago` directory and compilation artifacts from the `output` + # directory. When restored the compiler will rebuild any files that + # have changed. If you do not want to cache compiled output, remove + # the `output` path. + with: + key: ${{ runner.os }}-spago-${{ hashFiles('**/*.dhall') }} + path: | + .spago + output + + - run: spago build + + - run: spago test --no-install \ No newline at end of file diff --git a/packages.dhall b/packages.dhall index aa2cde6..e3df66b 100644 --- a/packages.dhall +++ b/packages.dhall @@ -117,7 +117,8 @@ let additions = ------------------------------- -} let upstream = - https://github.com/purescript/package-sets/releases/download/psc-0.14.0-20210409/packages.dhall sha256:e81c2f2ce790c0e0d79869d22f7a37d16caeb5bd81cfda71d46c58f6199fd33f + https://github.com/purescript/package-sets/releases/download/psc-0.15.4-20220816/packages.dhall + sha256:8b4467b4b5041914f9b765779c8936d6d4c230b1f60eb64f6269c71812fd7e98 let overrides = {=} diff --git a/spago.dhall b/spago.dhall index fe5fbf6..6fe6819 100644 --- a/spago.dhall +++ b/spago.dhall @@ -6,7 +6,34 @@ You can edit this file as you like. , repository = "https://github.com/meeshkan/purescript-graphql-parser" , license = "Apache-2.0" , dependencies = - [ "console", "effect", "numbers", "parsing", "psci-support" ] + [ "aff" + , "arrays" + , "console" + , "control" + , "effect" + , "either" + , "enums" + , "exceptions" + , "foldable-traversable" + , "integers" + , "lists" + , "maybe" + , "newtype" + , "node-buffer" + , "node-fs" + , "numbers" + , "ordered-collections" + , "parsing" + , "prelude" + , "profunctor" + , "profunctor-lenses" + , "psci-support" + , "spec" + , "spec-discovery" + , "strings" + , "transformers" + , "tuples" + ] , packages = ./packages.dhall -, sources = [ "src/**/*.purs" ] +, sources = [ "src/**/*.purs", "test/**/*.purs" ] } diff --git a/src/Data/GraphQL/AST.purs b/src/Data/GraphQL/AST.purs index 8d6e4dc..a394f61 100644 --- a/src/Data/GraphQL/AST.purs +++ b/src/Data/GraphQL/AST.purs @@ -1,5 +1,6 @@ module Data.GraphQL.AST where +import Prim hiding (Type) import Prelude import Data.Generic.Rep (class Generic) import Data.Show.Generic (genericShow) diff --git a/src/Data/GraphQL/Parser.purs b/src/Data/GraphQL/Parser.purs index 30837f3..e265013 100644 --- a/src/Data/GraphQL/Parser.purs +++ b/src/Data/GraphQL/Parser.purs @@ -16,29 +16,28 @@ import Data.Number as DN import Data.String.CodePoints as CP import Data.String.CodeUnits (fromCharArray) import Data.Traversable (sequence) -import Text.Parsing.Parser (Parser, ParserT, fail) -import Text.Parsing.Parser.Combinators (between, lookAhead, option, optional, sepBy1, try, ()) -import Text.Parsing.Parser.String (class StringLike, anyChar, char, noneOf, oneOf, string) +import Parsing (Parser, ParserT, fail) +import Parsing.Combinators (between, lookAhead, option, optional, sepBy1, try, ()) +import Parsing.String (anyChar, char, string) +import Parsing.String.Basic (noneOf, oneOf) ------- -- util ------- -c2str ∷ ∀ s. Char → Parser s String +c2str ∷ Char → Parser String String c2str = pure <<< fromCharArray <<< singleton -ca2str ∷ ∀ s. Array Char → Parser s String +ca2str ∷ Array Char → Parser String String ca2str = pure <<< fromCharArray -toCA ∷ ∀ s. Char → Parser s (Array Char) +toCA ∷ Char → Parser String (Array Char) toCA = pure <<< singleton -- | Parse phrases delimited and optionally terminated by a separator. --- | Copy of `purescript-parsing` implementation v5.1.0 sepEndBy_ :: forall m s a sep. Monad m => ParserT s m a -> ParserT s m sep -> ParserT s m (List a) sepEndBy_ p sep = sepEndBy1_ p sep <|> pure Nil -- | Parse phrases delimited and optionally terminated by a separator, requiring at least one match. --- | Copy of `purescript-parsing` implementation v5.1.0 sepEndBy1_ :: forall m s a sep. Monad m => ParserT s m a -> ParserT s m sep -> ParserT s m (List a) sepEndBy1_ p sep = do a <- p @@ -65,31 +64,31 @@ nonZeroDigits = [ '1', '2', '3', '4', '5', '6', '7', '8', '9' ] -- ignore -------------- -- also needs unicode bom for ignore, this will fail on unicode... -whitespace ∷ ∀ s. StringLike s ⇒ Parser s Unit +whitespace ∷ Parser String Unit whitespace = void $ oneOf [ ' ', '\t' ] -comment ∷ ∀ s. StringLike s ⇒ Parser s Unit +comment ∷ Parser String Unit comment = void $ char '#' *> many (noneOf [ '\n' ]) -comma ∷ ∀ s. StringLike s ⇒ Parser s Unit +comma ∷ Parser String Unit comma = void $ char ',' -lineTerminator ∷ ∀ s. StringLike s ⇒ Parser s Unit +lineTerminator ∷ Parser String Unit lineTerminator = void $ char '\n' -ignorable ∷ ∀ s. StringLike s ⇒ Parser s Unit +ignorable ∷ Parser String Unit ignorable = lineTerminator <|> comma <|> comment <|> whitespace -ignoreMe ∷ ∀ s. StringLike s ⇒ Parser s Unit +ignoreMe ∷ Parser String Unit ignoreMe = void $ many ignorable -ignoreMe' ∷ ∀ s. StringLike s ⇒ Parser s Unit +ignoreMe' ∷ Parser String Unit ignoreMe' = void $ some ignorable -------------- -- primitives -------------- -name ∷ ∀ s. StringLike s ⇒ Parser s String +name ∷ Parser String String name = fromCharArray <$> ( (<>) @@ -97,16 +96,16 @@ name = <*> (many (oneOf $ upper <> lower <> digits <> [ '_' ])) ) -description ∷ ∀ s. StringLike s ⇒ Parser s String +description ∷ Parser String String description = stringValue >>= (\(AST.StringValue s) → pure s) -negativeSign ∷ ∀ s. StringLike s ⇒ Parser s String +negativeSign ∷ Parser String String negativeSign = char '-' >>= c2str -ip0 ∷ ∀ s. StringLike s ⇒ Parser s String +ip0 ∷ Parser String String ip0 = (<>) <$> (option "" negativeSign) <*> (char '0' >>= c2str) -ipOther ∷ ∀ s. StringLike s ⇒ Parser s String +ipOther ∷ Parser String String ipOther = fold <$> sequence @@ -115,25 +114,25 @@ ipOther = , many (oneOf digits) >>= ca2str ] -integerPart ∷ ∀ s. StringLike s ⇒ Parser s String +integerPart ∷ Parser String String integerPart = (try ip0) <|> ipOther -intValue ∷ ∀ s. StringLike s ⇒ Parser s AST.IntValue +intValue ∷ Parser String AST.IntValue intValue = integerPart >>= maybe (fail "String not an int") (pure <<< AST.IntValue) <<< DI.fromString -fractionalPart ∷ ∀ s. StringLike s ⇒ Parser s String +fractionalPart ∷ Parser String String fractionalPart = (<>) <$> (char '.' >>= c2str) <*> (many (oneOf digits) >>= ca2str) -floatValueFrac ∷ ∀ s. StringLike s ⇒ Parser s String +floatValueFrac ∷ Parser String String floatValueFrac = (<>) <$> integerPart <*> fractionalPart -exponentPart ∷ ∀ s. StringLike s ⇒ Parser s String +exponentPart ∷ Parser String String exponentPart = fold <$> sequence @@ -142,30 +141,30 @@ exponentPart = , some (oneOf digits) >>= ca2str ] -floatValueExp ∷ ∀ s. StringLike s ⇒ Parser s String +floatValueExp ∷ Parser String String floatValueExp = (<>) <$> integerPart <*> exponentPart -floatValueFracExp ∷ ∀ s. StringLike s ⇒ Parser s String +floatValueFracExp ∷ Parser String String floatValueFracExp = fold <$> sequence [ integerPart, fractionalPart, exponentPart ] -floatValue ∷ ∀ s. StringLike s ⇒ Parser s AST.FloatValue +floatValue ∷ Parser String AST.FloatValue floatValue = (try floatValueFracExp <|> try floatValueExp <|> floatValueFrac) >>= maybe (fail "String not a float") (pure <<< AST.FloatValue) <<< DN.fromString -singleQuote ∷ ∀ s. StringLike s ⇒ Parser s String +singleQuote ∷ Parser String String singleQuote = char '"' >>= c2str -tripleQuote ∷ ∀ s. StringLike s ⇒ Parser s String +tripleQuote ∷ Parser String String tripleQuote = sequence [ char '"', char '"', char '"' ] >>= ca2str -uni ∷ ∀ s. StringLike s ⇒ Parser s Char +uni ∷ Parser String Char uni = oneOf (digits <> [ 'A', 'B', 'C', 'D', 'E', 'F' ] <> [ 'a', 'b', 'c', 'd', 'e', 'f' ]) -simpleUnescapedString ∷ ∀ s. StringLike s ⇒ Parser s String +simpleUnescapedString ∷ Parser String String simpleUnescapedString = noneOf [ '\\', '"', '\n' ] >>= c2str -simpleUnicodeString ∷ ∀ s. StringLike s ⇒ Parser s String +simpleUnicodeString ∷ Parser String String simpleUnicodeString = (sequence [ char '\\' *> char 'u' *> uni, uni, uni, uni ]) >>= ca2str >>= ( maybe @@ -178,7 +177,7 @@ simpleUnicodeString = <<< DI.fromStringAs DI.hexadecimal ) -simpleEscapedString ∷ ∀ s. StringLike s ⇒ Parser s String +simpleEscapedString ∷ Parser String String simpleEscapedString = char '\\' *> oneOf [ '"', '\\', '/', 'b', 'f', 'n', 'r', 't' ] >>= ( \x → case x of @@ -194,67 +193,67 @@ simpleEscapedString = ) >>= c2str -simpleStringSingleton ∷ ∀ s. StringLike s ⇒ Parser s String +simpleStringSingleton ∷ Parser String String simpleStringSingleton = (try simpleUnescapedString) <|> (try simpleUnicodeString) <|> simpleEscapedString -simpleStringValue ∷ ∀ s. StringLike s ⇒ Parser s String +simpleStringValue ∷ Parser String String simpleStringValue = between singleQuote singleQuote ( fold <$> (many simpleStringSingleton) ) -notTripleQuote ∷ ∀ s. StringLike s ⇒ Parser s String +notTripleQuote ∷ Parser String String notTripleQuote = (lookAhead (sequence [ anyChar, anyChar, anyChar ])) >>= (\s → if (s == [ '"', '"', '"' ]) then (fail "this is a triple quote") else anyChar >>= c2str) -blockStringValue ∷ ∀ s. StringLike s ⇒ Parser s String +blockStringValue ∷ Parser String String blockStringValue = between tripleQuote tripleQuote (fold <$> many notTripleQuote) -stringValue ∷ ∀ s. StringLike s ⇒ Parser s AST.StringValue +stringValue ∷ Parser String AST.StringValue stringValue = AST.StringValue <$> ((try blockStringValue) <|> simpleStringValue) -variable ∷ ∀ s. StringLike s ⇒ Parser s AST.Variable +variable ∷ Parser String AST.Variable variable = AST.Variable <$> (char '$' *> name) -booleanValue ∷ ∀ s. StringLike s ⇒ Parser s AST.BooleanValue +booleanValue ∷ Parser String AST.BooleanValue booleanValue = AST.BooleanValue <$> ((string "true" *> pure true) <|> (string "false" *> pure false)) -nullValue ∷ ∀ s. StringLike s ⇒ Parser s AST.NullValue +nullValue ∷ Parser String AST.NullValue nullValue = string "null" *> (pure AST.NullValue) -enumValue ∷ ∀ s. StringLike s ⇒ Parser s AST.EnumValue +enumValue ∷ Parser String AST.EnumValue enumValue = AST.EnumValue <$> (name >>= \x → if (x == "null" || x == "true" || x == "false") then fail "Name cannot be null, false or true" else pure x) -listValue ∷ ∀ s. StringLike s ⇒ Parser s (AST.Value) → Parser s (AST.ListValue) +listValue ∷ Parser String (AST.Value) → Parser String (AST.ListValue) listValue = (<$>) AST.ListValue <<< listish "[" "]" -argument ∷ ∀ s. StringLike s ⇒ Parser s (AST.Value) → Parser s (AST.Argument) +argument ∷ Parser String (AST.Value) → Parser String (AST.Argument) argument vc = map AST.Argument $ { name: _, value: _ } <$> name <*> (ignoreMe *> char ':' *> ignoreMe *> vc) -_listish ∷ ∀ s p. StringLike s ⇒ Parser s p → Parser s (L.List p) +_listish ∷ ∀ p. Parser String p → Parser String (L.List p) _listish p = sepEndBy_ p ignoreMe -_listish1 ∷ ∀ s p. StringLike s ⇒ Parser s p → Parser s (L.List p) +_listish1 ∷ ∀ p. Parser String p → Parser String (L.List p) _listish1 p = L.fromFoldable <$> sepEndBy1_ p ignoreMe -listish ∷ ∀ s p. StringLike s ⇒ String → String → Parser s p → Parser s (L.List p) +listish ∷ ∀ p. String → String → Parser String p → Parser String (L.List p) listish o c p = string o *> ignoreMe *> _listish p <* string c -objectValue ∷ ∀ s. StringLike s ⇒ Parser s (AST.Value) → Parser s (AST.ObjectValue) +objectValue ∷ Parser String (AST.Value) → Parser String (AST.ObjectValue) objectValue = (<$>) AST.ObjectValue <<< listish "{" "}" <<< argument -arguments ∷ ∀ s. StringLike s ⇒ Parser s (AST.Arguments) +arguments ∷ Parser String (AST.Arguments) arguments = AST.Arguments <$> listish "(" ")" (argument value) -value ∷ ∀ s. StringLike s ⇒ Parser s (AST.Value) +value ∷ Parser String (AST.Value) value = fix \p → (try (AST.Value_Variable <$> variable)) @@ -269,20 +268,20 @@ value = "value" --- util -ooo ∷ ∀ s a. StringLike s ⇒ Parser s a → Parser s (Maybe a) +ooo ∷ ∀ a. Parser String a → Parser String (Maybe a) ooo p = option Nothing (try p >>= pure <<< Just) -optDesc ∷ ∀ s. StringLike s ⇒ Parser s (Maybe String) +optDesc ∷ Parser String (Maybe String) optDesc = ooo description -optDir ∷ ∀ s. StringLike s ⇒ Parser s (Maybe AST.Directives) +optDir ∷ Parser String (Maybe AST.Directives) optDir = ooo directives -optDv ∷ ∀ s. StringLike s ⇒ Parser s (Maybe AST.DefaultValue) +optDv ∷ Parser String (Maybe AST.DefaultValue) optDv = ooo defaultValue --- spec -typeSystemDirectiveLocation ∷ ∀ s. StringLike s ⇒ Parser s AST.TypeSystemDirectiveLocation +typeSystemDirectiveLocation ∷ Parser String AST.TypeSystemDirectiveLocation typeSystemDirectiveLocation = (try (string "SCHEMA") *> pure AST.SCHEMA) <|> (try (string "SCALAR") *> pure AST.SCALAR) @@ -297,7 +296,7 @@ typeSystemDirectiveLocation = <|> (string "INPUT_FIELD_DEFINITION" *> pure AST.INPUT_FIELD_DEFINITION) "typeSystemDirectiveLocation" -executableDirectiveLocation ∷ ∀ s. StringLike s ⇒ Parser s AST.ExecutableDirectiveLocation +executableDirectiveLocation ∷ Parser String AST.ExecutableDirectiveLocation executableDirectiveLocation = (try (string "QUERY") *> pure AST.QUERY) <|> (try (string "MUTATION") *> pure AST.MUTATION) @@ -308,13 +307,13 @@ executableDirectiveLocation = <|> (string "INLINE_FRAGMENT" *> pure AST.INLINE_FRAGMENT) "executableDirectiveLocation" -directiveLocation ∷ ∀ s. StringLike s ⇒ Parser s AST.DirectiveLocation +directiveLocation ∷ Parser String AST.DirectiveLocation directiveLocation = (try (AST.DirectiveLocation_TypeSystemDirectiveLocation <$> typeSystemDirectiveLocation)) <|> (AST.DirectiveLocation_ExecutableDirectiveLocation <$> executableDirectiveLocation) "directiveLocation" -directiveLocations ∷ ∀ s. StringLike s ⇒ Parser s AST.DirectiveLocations +directiveLocations ∷ Parser String AST.DirectiveLocations directiveLocations = AST.DirectiveLocations <<< L.fromFoldable <$> ( ignoreMe @@ -322,28 +321,28 @@ directiveLocations = *> sepBy1 (ignoreMe *> directiveLocation <* ignoreMe) (char '|') ) -directive ∷ ∀ s. StringLike s ⇒ Parser s AST.Directive +directive ∷ Parser String AST.Directive directive = map AST.Directive $ { name: _, arguments: _ } <$> (char '@' *> name) <*> (ignoreMe *> ooo arguments) -directives ∷ ∀ s. StringLike s ⇒ Parser s AST.Directives +directives ∷ Parser String AST.Directives directives = AST.Directives <$> _listish1 directive -namedType ∷ ∀ s. StringLike s ⇒ Parser s AST.NamedType +namedType ∷ Parser String AST.NamedType namedType = AST.NamedType <$> name -listType ∷ ∀ s. StringLike s ⇒ Parser s AST.Type → Parser s AST.ListType +listType ∷ Parser String AST.Type → Parser String AST.ListType listType t = AST.ListType <$> (string "[" *> ignoreMe *> t <* ignoreMe <* string "]") -nonNullType ∷ ∀ s. StringLike s ⇒ Parser s AST.Type → Parser s AST.NonNullType +nonNullType ∷ Parser String AST.Type → Parser String AST.NonNullType nonNullType v = (try (AST.NonNullType_NamedType <$> (namedType <* char '!'))) <|> (AST.NonNullType_ListType <$> (listType v <* char '!')) "nonNullType" -_type ∷ ∀ s. StringLike s ⇒ Parser s AST.Type +_type ∷ Parser String AST.Type _type = fix \p → (try (AST.Type_NonNullType <$> nonNullType p)) @@ -351,55 +350,55 @@ _type = <|> (AST.Type_ListType <$> listType p) "type" -defaultValue ∷ ∀ s. StringLike s ⇒ Parser s AST.DefaultValue +defaultValue ∷ Parser String AST.DefaultValue defaultValue = char '=' *> ignoreMe *> (AST.DefaultValue <$> value) -variableDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.VariableDefinition +variableDefinition ∷ Parser String AST.VariableDefinition variableDefinition = map AST.VariableDefinition $ { variable: _, type: _, defaultValue: _ } <$> variable <*> (ignoreMe *> char ':' *> ignoreMe *> _type) <*> (ignoreMe *> optDv) -variableDefinitions ∷ ∀ s. StringLike s ⇒ Parser s AST.VariableDefinitions +variableDefinitions ∷ Parser String AST.VariableDefinitions variableDefinitions = AST.VariableDefinitions <$> listish "(" ")" variableDefinition -fragmentName ∷ ∀ s. StringLike s ⇒ Parser s String +fragmentName ∷ Parser String String fragmentName = name >>= \x → if x == "on" then fail "Fragment name cannot be 'on'" else pure x -typeCondition ∷ ∀ s. StringLike s ⇒ Parser s AST.TypeCondition +typeCondition ∷ Parser String AST.TypeCondition typeCondition = AST.TypeCondition <$> (string "on" *> ignoreMe *> namedType) -fragmentSpread ∷ ∀ s. StringLike s ⇒ Parser s AST.FragmentSpread +fragmentSpread ∷ Parser String AST.FragmentSpread fragmentSpread = map AST.FragmentSpread $ { fragmentName: _, directives: _ } <$> (string "..." *> ignoreMe *> fragmentName) <*> (ignoreMe *> optDir) -ignorableExtension ∷ ∀ s. StringLike s ⇒ String → Parser s Unit +ignorableExtension ∷ String → Parser String Unit ignorableExtension s = string "extend" *> ignoreMe *> string s *> pure unit -unionMemberTypes ∷ ∀ s. StringLike s ⇒ Parser s AST.UnionMemberTypes +unionMemberTypes ∷ Parser String AST.UnionMemberTypes unionMemberTypes = AST.UnionMemberTypes <<< L.fromFoldable <$> sepBy1 (ignoreMe *> namedType <* ignoreMe) (char '|') -unionTypeExtensionWithDirectives ∷ ∀ s. StringLike s ⇒ Parser s AST.UnionTypeExtension +unionTypeExtensionWithDirectives ∷ Parser String AST.UnionTypeExtension unionTypeExtensionWithDirectives = map AST.UnionTypeExtension_With_Directives $ { name: _, directives: _ } <$> name <*> (ignoreMe *> directives) -unionTypeExtensionWithUnionMemberTypes ∷ ∀ s. StringLike s ⇒ Parser s AST.UnionTypeExtension +unionTypeExtensionWithUnionMemberTypes ∷ Parser String AST.UnionTypeExtension unionTypeExtensionWithUnionMemberTypes = map AST.UnionTypeExtension_With_UnionMemberTypes $ { name: _, directives: _, unionMemberTypes: _ } <$> name <*> (ignoreMe *> optDir) <*> (ignoreMe *> char '=' *> ignoreMe *> unionMemberTypes) -unionTypeExtension ∷ ∀ s. StringLike s ⇒ Parser s AST.UnionTypeExtension +unionTypeExtension ∷ Parser String AST.UnionTypeExtension unionTypeExtension = ignorableExtension "union" *> ignoreMe @@ -408,7 +407,7 @@ unionTypeExtension = "unionTypeExtension" ) -unionTypeDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.UnionTypeDefinition +unionTypeDefinition ∷ Parser String AST.UnionTypeDefinition unionTypeDefinition = map AST.UnionTypeDefinition $ { description: _, name: _, directives: _, unionMemberTypes: _ } <$> optDesc @@ -416,30 +415,30 @@ unionTypeDefinition = <*> (ignoreMe *> optDir) <*> (ignoreMe *> char '=' *> ignoreMe *> ooo unionMemberTypes) -enumValueDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.EnumValueDefinition +enumValueDefinition ∷ Parser String AST.EnumValueDefinition enumValueDefinition = map AST.EnumValueDefinition $ { description: _, enumValue: _, directives: _ } <$> optDesc <*> (ignoreMe *> enumValue) <*> (ignoreMe *> optDir) -enumValuesDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.EnumValuesDefinition +enumValuesDefinition ∷ Parser String AST.EnumValuesDefinition enumValuesDefinition = AST.EnumValuesDefinition <$> listish "{" "}" enumValueDefinition -enumTypeExtensionWithDirectives ∷ ∀ s. StringLike s ⇒ Parser s AST.EnumTypeExtension +enumTypeExtensionWithDirectives ∷ Parser String AST.EnumTypeExtension enumTypeExtensionWithDirectives = map AST.EnumTypeExtension_With_Directives $ { name: _, directives: _ } <$> name <*> (ignoreMe *> directives) -enumTypeExtensionWithEnumValuesDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.EnumTypeExtension +enumTypeExtensionWithEnumValuesDefinition ∷ Parser String AST.EnumTypeExtension enumTypeExtensionWithEnumValuesDefinition = map AST.EnumTypeExtension_With_EnumValuesDefinition $ { name: _, directives: _, enumValuesDefinition: _ } <$> name <*> (ignoreMe *> optDir) <*> (ignoreMe *> enumValuesDefinition) -enumTypeExtension ∷ ∀ s. StringLike s ⇒ Parser s AST.EnumTypeExtension +enumTypeExtension ∷ Parser String AST.EnumTypeExtension enumTypeExtension = ignorableExtension "enum" *> ignoreMe @@ -448,7 +447,7 @@ enumTypeExtension = "enumTypeExtension" ) -enumTypeDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.EnumTypeDefinition +enumTypeDefinition ∷ Parser String AST.EnumTypeDefinition enumTypeDefinition = map AST.EnumTypeDefinition $ { description: _, name: _, directives: _, enumValuesDefinition: _ } <$> optDesc @@ -456,7 +455,7 @@ enumTypeDefinition = <*> (ignoreMe *> optDir) <*> (ignoreMe *> ooo enumValuesDefinition) -inputValueDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.InputValueDefinition +inputValueDefinition ∷ Parser String AST.InputValueDefinition inputValueDefinition = map AST.InputValueDefinition $ { description: _, name: _, type: _, defaultValue: _, directives: _ } <$> optDesc @@ -465,29 +464,29 @@ inputValueDefinition = <*> (ignoreMe *> optDv) <*> (ignoreMe *> optDir) -argumentsDefinition ∷ ∀ s. StringLike s ⇒ Parser s (AST.ArgumentsDefinition) +argumentsDefinition ∷ Parser String (AST.ArgumentsDefinition) argumentsDefinition = AST.ArgumentsDefinition <$> listish "(" ")" inputValueDefinition -operationType ∷ ∀ s. StringLike s ⇒ Parser s (AST.OperationType) +operationType ∷ Parser String (AST.OperationType) operationType = (try $ string "query" *> pure AST.Query) <|> (try $ string "mutation" *> pure AST.Mutation) <|> (string "subscription" *> pure AST.Subscription) "operation type" -operationTypeDefinition ∷ ∀ s. StringLike s ⇒ Parser s (AST.OperationTypeDefinition) +operationTypeDefinition ∷ Parser String (AST.OperationTypeDefinition) operationTypeDefinition = map AST.OperationTypeDefinition $ { operationType: _, namedType: _ } <$> operationType <*> (ignoreMe *> char ':' *> ignoreMe *> namedType) -scalarTypeExtension ∷ ∀ s. StringLike s ⇒ Parser s (AST.ScalarTypeExtension) +scalarTypeExtension ∷ Parser String (AST.ScalarTypeExtension) scalarTypeExtension = map AST.ScalarTypeExtension $ { name: _, directives: _ } <$> (ignorableExtension "scalar" *> ignoreMe *> name) <*> (ignoreMe *> directives) -implementsInterfaces ∷ ∀ s. StringLike s ⇒ Parser s (AST.ImplementsInterfaces) +implementsInterfaces ∷ Parser String (AST.ImplementsInterfaces) implementsInterfaces = string "implements" *> ignoreMe @@ -495,14 +494,14 @@ implementsInterfaces = *> ignoreMe *> (AST.ImplementsInterfaces <<< L.fromFoldable <$> sepBy1 (ignoreMe *> namedType <* ignoreMe) (char '&')) -scalarTypeDefinition ∷ ∀ s. StringLike s ⇒ Parser s (AST.ScalarTypeDefinition) +scalarTypeDefinition ∷ Parser String (AST.ScalarTypeDefinition) scalarTypeDefinition = map AST.ScalarTypeDefinition $ { description: _, name: _, directives: _ } <$> optDesc <*> (ignoreMe *> string "scalar" *> ignoreMe *> name) <*> (ignoreMe *> optDir) -fieldDefinition ∷ ∀ s. StringLike s ⇒ Parser s (AST.FieldDefinition) +fieldDefinition ∷ Parser String (AST.FieldDefinition) fieldDefinition = map AST.FieldDefinition $ { description: _, name: _, argumentsDefinition: _, type: _, directives: _ } <$> optDesc @@ -511,10 +510,10 @@ fieldDefinition = <*> (ignoreMe *> char ':' *> ignoreMe *> _type) <*> (ignoreMe *> optDir) -fieldsDefinition ∷ ∀ s. StringLike s ⇒ Parser s (AST.FieldsDefinition) +fieldsDefinition ∷ Parser String (AST.FieldsDefinition) fieldsDefinition = AST.FieldsDefinition <$> listish "{" "}" fieldDefinition -objectTypeDefinition ∷ ∀ s. StringLike s ⇒ Parser s (AST.ObjectTypeDefinition) +objectTypeDefinition ∷ Parser String (AST.ObjectTypeDefinition) objectTypeDefinition = map AST.ObjectTypeDefinition $ { description: _, name: _, implementsInterfaces: _, directives: _, fieldsDefinition: _ } <$> optDesc @@ -523,19 +522,19 @@ objectTypeDefinition = <*> (ignoreMe *> optDir) <*> (ignoreMe *> ooo fieldsDefinition) -schemaExtensionWithDirectives ∷ ∀ s. StringLike s ⇒ Parser s AST.SchemaExtension +schemaExtensionWithDirectives ∷ Parser String AST.SchemaExtension schemaExtensionWithDirectives = map AST.SchemaExtension_With_Directives $ { directives: _ } <$> directives -operationTypesDefinition ∷ ∀ s. StringLike s ⇒ Parser s (L.List AST.OperationTypeDefinition) +operationTypesDefinition ∷ Parser String (L.List AST.OperationTypeDefinition) operationTypesDefinition = listish "{" "}" operationTypeDefinition -schemaExtensionWithOperationTypeDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.SchemaExtension +schemaExtensionWithOperationTypeDefinition ∷ Parser String AST.SchemaExtension schemaExtensionWithOperationTypeDefinition = map AST.SchemaExtension_With_OperationTypeDefinition $ { directives: _, operationTypesDefinition: _ } <$> optDir <*> (ignoreMe *> operationTypesDefinition) -schemaExtension ∷ ∀ s. StringLike s ⇒ Parser s AST.SchemaExtension +schemaExtension ∷ Parser String AST.SchemaExtension schemaExtension = ignorableExtension "schema" *> ignoreMe @@ -545,20 +544,20 @@ schemaExtension = ) -------- -objectTypeExtensionWithImplementsInterfaces ∷ ∀ s. StringLike s ⇒ Parser s AST.ObjectTypeExtension +objectTypeExtensionWithImplementsInterfaces ∷ Parser String AST.ObjectTypeExtension objectTypeExtensionWithImplementsInterfaces = map AST.ObjectTypeExtension_With_ImplementsInterfaces $ { name: _, implementsInterfaces: _ } <$> name <*> (ignoreMe *> implementsInterfaces) -objectTypeExtensionWithDirectives ∷ ∀ s. StringLike s ⇒ Parser s AST.ObjectTypeExtension +objectTypeExtensionWithDirectives ∷ Parser String AST.ObjectTypeExtension objectTypeExtensionWithDirectives = map AST.ObjectTypeExtension_With_Directives $ { name: _, implementsInterfaces: _, directives: _ } <$> name <*> (ignoreMe *> ooo implementsInterfaces) <*> (ignoreMe *> directives) -objectTypeExtensionWithFieldsDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.ObjectTypeExtension +objectTypeExtensionWithFieldsDefinition ∷ Parser String AST.ObjectTypeExtension objectTypeExtensionWithFieldsDefinition = map AST.ObjectTypeExtension_With_FieldsDefinition $ { name: _, implementsInterfaces: _, directives: _, fieldsDefinition: _ } <$> name @@ -566,7 +565,7 @@ objectTypeExtensionWithFieldsDefinition = <*> (ignoreMe *> optDir) <*> (ignoreMe *> fieldsDefinition) -objectTypeExtension ∷ ∀ s. StringLike s ⇒ Parser s AST.ObjectTypeExtension +objectTypeExtension ∷ Parser String AST.ObjectTypeExtension objectTypeExtension = ignorableExtension "type" *> ignoreMe @@ -577,23 +576,23 @@ objectTypeExtension = ) ----- -inputObjectTypeExtensionWithDirectives ∷ ∀ s. StringLike s ⇒ Parser s AST.InputObjectTypeExtension +inputObjectTypeExtensionWithDirectives ∷ Parser String AST.InputObjectTypeExtension inputObjectTypeExtensionWithDirectives = map AST.InputObjectTypeExtension_With_Directives $ { name: _, directives: _ } <$> name <*> (ignoreMe *> directives) -inputFieldsDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.InputFieldsDefinition +inputFieldsDefinition ∷ Parser String AST.InputFieldsDefinition inputFieldsDefinition = AST.InputFieldsDefinition <$> listish "{" "}" inputValueDefinition -inputObjectTypeExtensionWithInputFieldsDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.InputObjectTypeExtension +inputObjectTypeExtensionWithInputFieldsDefinition ∷ Parser String AST.InputObjectTypeExtension inputObjectTypeExtensionWithInputFieldsDefinition = map AST.InputObjectTypeExtension_With_InputFieldsDefinition $ { name: _, directives: _, inputFieldsDefinition: _ } <$> name <*> (ignoreMe *> optDir) <*> (ignoreMe *> inputFieldsDefinition) -inputObjectTypeExtension ∷ ∀ s. StringLike s ⇒ Parser s AST.InputObjectTypeExtension +inputObjectTypeExtension ∷ Parser String AST.InputObjectTypeExtension inputObjectTypeExtension = ignorableExtension "input" *> ignoreMe @@ -602,7 +601,7 @@ inputObjectTypeExtension = "inputObjectTypeExtension" ) -inputObjectTypeDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.InputObjectTypeDefinition +inputObjectTypeDefinition ∷ Parser String AST.InputObjectTypeDefinition inputObjectTypeDefinition = map AST.InputObjectTypeDefinition $ { description: _, name: _, directives: _, inputFieldsDefinition: _ } <$> optDesc @@ -611,20 +610,20 @@ inputObjectTypeDefinition = <*> (ignoreMe *> ooo inputFieldsDefinition) ----- -interfaceTypeExtensionWithDirectives ∷ ∀ s. StringLike s ⇒ Parser s AST.InterfaceTypeExtension +interfaceTypeExtensionWithDirectives ∷ Parser String AST.InterfaceTypeExtension interfaceTypeExtensionWithDirectives = map AST.InterfaceTypeExtension_With_Directives $ { name: _, directives: _ } <$> name <*> (ignoreMe *> directives) -interfaceTypeExtensionWithFieldsDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.InterfaceTypeExtension +interfaceTypeExtensionWithFieldsDefinition ∷ Parser String AST.InterfaceTypeExtension interfaceTypeExtensionWithFieldsDefinition = map AST.InterfaceTypeExtension_With_FieldsDefinition $ { name: _, directives: _, fieldsDefinition: _ } <$> name <*> (ignoreMe *> optDir) <*> (ignoreMe *> fieldsDefinition) -interfaceTypeExtension ∷ ∀ s. StringLike s ⇒ Parser s AST.InterfaceTypeExtension +interfaceTypeExtension ∷ Parser String AST.InterfaceTypeExtension interfaceTypeExtension = ignorableExtension "input" *> ignoreMe @@ -633,7 +632,7 @@ interfaceTypeExtension = "interfaceTypeExtension" ) -interfaceTypeDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.InterfaceTypeDefinition +interfaceTypeDefinition ∷ Parser String AST.InterfaceTypeDefinition interfaceTypeDefinition = map AST.InterfaceTypeDefinition $ { description: _, name: _, directives: _, fieldsDefinition: _ } <$> optDesc @@ -641,7 +640,7 @@ interfaceTypeDefinition = <*> (ignoreMe *> optDir) <*> (ignoreMe *> ooo fieldsDefinition) -typeDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.TypeDefinition +typeDefinition ∷ Parser String AST.TypeDefinition typeDefinition = (try (AST.TypeDefinition_ScalarTypeDefinition <$> scalarTypeDefinition)) <|> (try (AST.TypeDefinition_ObjectTypeDefinition <$> objectTypeDefinition)) @@ -651,7 +650,7 @@ typeDefinition = <|> (AST.TypeDefinition_InputObjectTypeDefinition <$> inputObjectTypeDefinition) "typeDefinition" -typeExtension ∷ ∀ s. StringLike s ⇒ Parser s AST.TypeExtension +typeExtension ∷ Parser String AST.TypeExtension typeExtension = (try (AST.TypeExtension_ScalarTypeExtension <$> scalarTypeExtension)) <|> (try (AST.TypeExtension_ObjectTypeExtension <$> objectTypeExtension)) @@ -661,19 +660,19 @@ typeExtension = <|> (AST.TypeExtension_InputObjectTypeExtension <$> inputObjectTypeExtension) "typeExtension" -rootOperationDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.RootOperationTypeDefinition +rootOperationDefinition ∷ Parser String AST.RootOperationTypeDefinition rootOperationDefinition = map AST.RootOperationTypeDefinition $ { operationType: _, namedType: _ } <$> operationType <*> (ignoreMe *> char ':' *> ignoreMe *> namedType) -schemaDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.SchemaDefinition +schemaDefinition ∷ Parser String AST.SchemaDefinition schemaDefinition = map AST.SchemaDefinition $ { directives: _, rootOperationTypeDefinition: _ } <$> (string "schema" *> ignoreMe *> optDir) <*> (ignoreMe *> listish "{" "}" rootOperationDefinition) -directiveDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.DirectiveDefinition +directiveDefinition ∷ Parser String AST.DirectiveDefinition directiveDefinition = map AST.DirectiveDefinition $ { description: _, name: _, argumentsDefinition: _, directiveLocations: _ } <$> optDesc @@ -681,34 +680,34 @@ directiveDefinition = <*> (ignoreMe *> ooo argumentsDefinition) <*> (ignoreMe *> string "on" *> ignoreMe *> directiveLocations) -typeSystemDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.TypeSystemDefinition +typeSystemDefinition ∷ Parser String AST.TypeSystemDefinition typeSystemDefinition = (try (AST.TypeSystemDefinition_SchemaDefinition <$> schemaDefinition)) <|> (try (AST.TypeSystemDefinition_TypeDefinition <$> typeDefinition)) <|> (AST.TypeSystemDefinition_DirectiveDefinition <$> directiveDefinition) "typeSystemDefinition" -alias ∷ ∀ s. StringLike s ⇒ Parser s String +alias ∷ Parser String String alias = name <* ignoreMe <* char ':' -inlineFragment ∷ ∀ s. StringLike s ⇒ Parser s AST.SelectionSet → Parser s AST.InlineFragment +inlineFragment ∷ Parser String AST.SelectionSet → Parser String AST.InlineFragment inlineFragment ss = map AST.InlineFragment $ { typeCondition: _, directives: _, selectionSet: _ } <$> (string "..." *> ignoreMe *> ooo typeCondition) <*> (ignoreMe *> optDir) <*> (ignoreMe *> ss) -selection ∷ ∀ s. StringLike s ⇒ Parser s AST.SelectionSet → Parser s AST.Selection +selection ∷ Parser String AST.SelectionSet → Parser String AST.Selection selection ss = (try (AST.Selection_Field <$> (field ss))) <|> (try (AST.Selection_FragmentSpread <$> fragmentSpread)) <|> (AST.Selection_InlineFragment <$> (inlineFragment ss)) "selection" -selectionSet ∷ ∀ s. StringLike s ⇒ Parser s AST.SelectionSet +selectionSet ∷ Parser String AST.SelectionSet selectionSet = fix \p → AST.SelectionSet <$> listish "{" "}" (selection p) -field ∷ ∀ s. StringLike s ⇒ Parser s AST.SelectionSet → Parser s AST.Field +field ∷ Parser String AST.SelectionSet → Parser String AST.Field field ss = map AST.Field $ { alias: _, name: _, arguments: _, directives: _, selectionSet: _ } <$> ooo alias @@ -717,7 +716,7 @@ field ss = <*> (ignoreMe *> optDir) <*> (ignoreMe *> ooo ss) -operationDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.OperationDefinition +operationDefinition ∷ Parser String AST.OperationDefinition operationDefinition = (try (AST.OperationDefinition_SelectionSet <$> selectionSet)) <|> ( map AST.OperationDefinition_OperationType $ { operationType: _, name: _, variableDefinitions: _, directives: _, selectionSet: _ } @@ -728,7 +727,7 @@ operationDefinition = <*> (ignoreMe *> selectionSet) ) -fragmentDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.FragmentDefinition +fragmentDefinition ∷ Parser String AST.FragmentDefinition fragmentDefinition = map AST.FragmentDefinition $ { fragmentName: _, typeCondition: _, directives: _, selectionSet: _ } <$> (string "fragment" *> ignoreMe *> fragmentName) @@ -736,24 +735,24 @@ fragmentDefinition = <*> (ignoreMe *> optDir) <*> selectionSet -typeSystemExtension ∷ ∀ s. StringLike s ⇒ Parser s AST.TypeSystemExtension +typeSystemExtension ∷ Parser String AST.TypeSystemExtension typeSystemExtension = (try (AST.TypeSystemExtension_SchemaExtension <$> schemaExtension)) <|> (AST.TypeSystemExtension_TypeExtension <$> typeExtension) "typeSystemExtension" -executableDefinition ∷ ∀ s. StringLike s ⇒ Parser s AST.ExecutableDefinition +executableDefinition ∷ Parser String AST.ExecutableDefinition executableDefinition = (try (AST.ExecutableDefinition_OperationDefinition <$> operationDefinition)) <|> (AST.ExecutableDefinition_FragmentDefinition <$> fragmentDefinition) "executableDefinition" -definition ∷ ∀ s. StringLike s ⇒ Parser s AST.Definition +definition ∷ Parser String AST.Definition definition = (try (AST.Definition_ExecutableDefinition <$> executableDefinition)) <|> (try (AST.Definition_TypeSystemDefinition <$> typeSystemDefinition)) <|> (AST.Definition_TypeSystemExtension <$> typeSystemExtension) "definition" -document ∷ ∀ s. StringLike s ⇒ Parser s AST.Document +document ∷ Parser String AST.Document document = AST.Document <$> (ignoreMe *> _listish definition) diff --git a/test/Data/GraphQL/ParseFull0.purs b/test/GraphQL/ParseFull0.purs similarity index 88% rename from test/Data/GraphQL/ParseFull0.purs rename to test/GraphQL/ParseFull0.purs index ad18972..eb589b6 100644 --- a/test/Data/GraphQL/ParseFull0.purs +++ b/test/GraphQL/ParseFull0.purs @@ -1,6 +1,7 @@ module Test.Data.GraphQL.ParseFull0 where import Prelude + import Data.Either (either) import Data.GraphQL.AST as AST import Data.GraphQL.Parser as GP @@ -11,17 +12,16 @@ import Data.Lens.Record as LR import Data.List (List, length) import Data.Maybe (Maybe(..), maybe) import Data.Profunctor.Choice (class Choice) -import Data.Symbol (SProxy(..)) +import Type.Proxy (Proxy(..)) import Data.Tuple (uncurry) import Effect.Aff (Aff) import Effect.Class (liftEffect) import Effect.Exception (throw) -import Test.Spec (SpecT, before, describe, it) +import Test.Spec (Spec, before, describe, it) import Test.Spec.Assertions (shouldEqual, fail) -import Text.Parsing.Parser (runParser) -import Text.Parsing.Parser.String (class StringLike) +import Parsing (runParser) -parseDocument ∷ ∀ s. StringLike s ⇒ s → Aff (AST.Document) +parseDocument ∷ String → Aff (AST.Document) parseDocument t = liftEffect (either (throw <<< show) pure (runParser t GP.document)) schema = @@ -99,7 +99,7 @@ getTweetName = L.preview $ ( lensToTweetObjectTypeDefinition <<< uncurry L.prism' AST._ObjectTypeDefinition - <<< LR.prop (SProxy ∷ SProxy "name") + <<< LR.prop (Proxy ∷ Proxy "name") ) getTweetFieldDefinitionList ∷ AST.Document → Maybe (List AST.FieldDefinition) @@ -107,7 +107,7 @@ getTweetFieldDefinitionList = L.preview $ ( lensToTweetObjectTypeDefinition <<< uncurry L.prism' AST._ObjectTypeDefinition - <<< LR.prop (SProxy ∷ SProxy "fieldsDefinition") + <<< LR.prop (Proxy ∷ Proxy "fieldsDefinition") <<< L._Just <<< uncurry L.prism' AST._FieldsDefinition ) @@ -117,12 +117,12 @@ getTweetIdArgName = L.preview $ ( lensToTweetObjectTypeDefinition <<< uncurry L.prism' AST._ObjectTypeDefinition - <<< LR.prop (SProxy ∷ SProxy "fieldsDefinition") + <<< LR.prop (Proxy ∷ Proxy "fieldsDefinition") <<< L._Just <<< uncurry L.prism' AST._FieldsDefinition <<< LI.ix 0 <<< uncurry L.prism' AST._FieldDefinition - <<< LR.prop (SProxy ∷ SProxy "name") + <<< LR.prop (Proxy ∷ Proxy "name") ) lensToUserObjectTypeDefinition ∷ ∀ m. Choice m ⇒ Wander m ⇒ m AST.ObjectTypeDefinition AST.ObjectTypeDefinition → m AST.Document AST.Document @@ -139,13 +139,13 @@ getUserFieldDefinitionList = L.preview $ ( lensToUserObjectTypeDefinition <<< uncurry L.prism' AST._ObjectTypeDefinition - <<< LR.prop (SProxy ∷ SProxy "fieldsDefinition") + <<< LR.prop (Proxy ∷ Proxy "fieldsDefinition") <<< L._Just <<< uncurry L.prism' AST._FieldsDefinition ) -testFullDoc ∷ ∀ m. Monad m ⇒ SpecT Aff Unit m Unit -testFullDoc = +spec ∷ Spec Unit +spec = describe "test full doc" do before (parseDocument schema) $ do diff --git a/test/Data/GraphQL/ParseFull1.purs b/test/GraphQL/ParseFull1.purs similarity index 83% rename from test/Data/GraphQL/ParseFull1.purs rename to test/GraphQL/ParseFull1.purs index 724373a..16965f2 100644 --- a/test/Data/GraphQL/ParseFull1.purs +++ b/test/GraphQL/ParseFull1.purs @@ -1,6 +1,7 @@ -module Test.Data.GraphQL.ParseFull1 where +module Data.GraphQL.ParseFull1.Test where import Prelude + import Data.Either (either) import Data.GraphQL.AST (ObjectValue(..)) import Data.GraphQL.AST as AST @@ -12,17 +13,16 @@ import Data.Lens.Record as LR import Data.List (singleton) import Data.Maybe (Maybe(..)) import Data.Profunctor.Choice (class Choice) -import Data.Symbol (SProxy(..)) +import Type.Proxy (Proxy(..)) import Data.Tuple (uncurry) import Effect.Aff (Aff) import Effect.Class (liftEffect) import Effect.Exception (throw) -import Test.Spec (SpecT, before, describe, it) +import Test.Spec (Spec, before, describe, it) import Test.Spec.Assertions (shouldEqual) -import Text.Parsing.Parser (runParser) -import Text.Parsing.Parser.String (class StringLike) +import Parsing (runParser) -parseDocument ∷ ∀ s. StringLike s ⇒ s → Aff (AST.Document) +parseDocument ∷ String → Aff (AST.Document) parseDocument t = liftEffect (either (throw <<< show) pure (runParser t GP.document)) query = @@ -59,7 +59,7 @@ getFirstQueryVarDef = L.preview $ ( lensToQueryDefinition <<< uncurry L.prism' AST._OperationDefinition_OperationType - <<< LR.prop (SProxy ∷ SProxy "variableDefinitions") + <<< LR.prop (Proxy ∷ Proxy "variableDefinitions") <<< L._Just <<< uncurry L.prism' AST._VariableDefinitions <<< LI.ix 0 @@ -70,19 +70,19 @@ getNameDef = L.preview $ ( lensToQueryDefinition <<< uncurry L.prism' AST._OperationDefinition_OperationType - <<< LR.prop (SProxy ∷ SProxy "selectionSet") + <<< LR.prop (Proxy ∷ Proxy "selectionSet") <<< uncurry L.prism' AST._SelectionSet <<< LI.ix 1 <<< uncurry L.prism' AST._Selection_Field <<< uncurry L.prism' AST._Field - <<< LR.prop (SProxy ∷ SProxy "arguments") + <<< LR.prop (Proxy ∷ Proxy "arguments") <<< _Just <<< uncurry L.prism' AST._Arguments <<< LI.ix 1 ) -testQuery ∷ ∀ m. Monad m ⇒ SpecT Aff Unit m Unit -testQuery = +spec ∷ Spec Unit +spec = describe "test full query" do before (parseDocument query) $ do diff --git a/test/Data/GraphQL/ParseFull2.purs b/test/GraphQL/ParseFull2.purs similarity index 97% rename from test/Data/GraphQL/ParseFull2.purs rename to test/GraphQL/ParseFull2.purs index 858a160..37f3411 100644 --- a/test/Data/GraphQL/ParseFull2.purs +++ b/test/GraphQL/ParseFull2.purs @@ -8,10 +8,9 @@ import Effect.Aff (Aff) import Effect.Class (liftEffect) import Effect.Exception (throw) import Test.Spec (SpecT, before, describe, it) -import Text.Parsing.Parser (runParser) -import Text.Parsing.Parser.String (class StringLike) +import Parsing (runParser) -parseDocument ∷ ∀ s. StringLike s ⇒ s → Aff (AST.Document) +parseDocument ∷ String → Aff (AST.Document) parseDocument t = liftEffect (either (throw <<< show) pure (runParser t GP.document)) -- uses a more full featured schema @@ -355,5 +354,5 @@ testCS = describe "test cs query" do before (parseDocument query) $ do - it "should parse" \doc → do + it "should parse" \_ → do pure unit diff --git a/test/Data/GraphQL/ParseFull3.purs b/test/GraphQL/ParseFull3.purs similarity index 93% rename from test/Data/GraphQL/ParseFull3.purs rename to test/GraphQL/ParseFull3.purs index 1b54830..97d5d74 100644 --- a/test/Data/GraphQL/ParseFull3.purs +++ b/test/GraphQL/ParseFull3.purs @@ -3,7 +3,6 @@ module Test.Data.GraphQL.ParseFull3 where import Prelude import Data.Either (either) import Data.GraphQL.AST as AST -import Data.GraphQL.Parser (implementsInterfaces) import Data.GraphQL.Parser as GP import Data.Lens (class Wander, Prism', _2, _Just, preview, prism', toListOf, traversed) import Data.Lens.Common (simple) @@ -12,7 +11,7 @@ import Data.Lens.Record (prop) import Data.List (List(..), length, (:)) import Data.Maybe (Maybe(..)) import Data.Profunctor.Choice (class Choice) -import Data.Symbol (SProxy(..)) +import Type.Proxy (Proxy(..)) import Data.Tuple (Tuple(..), uncurry) import Effect.Aff (Aff) import Effect.Class (liftEffect) @@ -21,7 +20,7 @@ import Node.Encoding (Encoding(..)) import Node.FS.Sync (readTextFile) import Test.Spec (SpecT, before, describe, it) import Test.Spec.Assertions (shouldEqual) -import Text.Parsing.Parser (runParser) +import Parsing (runParser) parseDocument :: String -> Aff AST.Document parseDocument t = do @@ -63,7 +62,7 @@ testSwapi = <<< uncurry prism' AST._TypeSystemDefinition_TypeDefinition <<< uncurry prism' AST._TypeDefinition_ObjectTypeDefinition <<< simple _Newtype - <<< (prop (SProxy :: SProxy "implementsInterfaces")) + <<< (prop (Proxy :: Proxy "implementsInterfaces")) <<< _Just ) doc diff --git a/test/Data/GraphQL/ParseSadistic0.purs b/test/GraphQL/ParseSadistic0.purs similarity index 96% rename from test/Data/GraphQL/ParseSadistic0.purs rename to test/GraphQL/ParseSadistic0.purs index c474901..ad397ee 100644 --- a/test/Data/GraphQL/ParseSadistic0.purs +++ b/test/GraphQL/ParseSadistic0.purs @@ -1,19 +1,19 @@ module Test.Data.GraphQL.ParseSadistic0 where import Prelude + import Data.Either (either) import Data.GraphQL.Parser as GP -import Effect.Aff (Aff) -import Test.Spec (SpecT, describe, it) +import Test.Spec (Spec, describe, it) import Test.Spec.Assertions (shouldEqual, fail) -import Text.Parsing.Parser (runParser) +import Parsing (runParser) query = """{ Z999999 : Z999 @Z99 ( Z9999999 : "뾞" Z9 : "펕ㅻ" Z9__ : $Z9999 ) @Z ( Z9 : true Z9999999 : null Z999 : $Z99999 Z99 : null Z9999999 : [ false null "㋶ꔠ艄翗" ] ) @Z9 ( Z999 : { Z9 : false Z9 : { Z9999 : null Z9999 : 233568 } Z999_9 : null Z999 : null Z9999 : true Z999 : false } ) @Z9 @Z99999 ( Z99 : 0.4079264874606982 Z9999999 : "" Z99 : $Z999999 Z9 : [ null 0.28475046823022443 ] Z9999 : { Z9 : "Z9" Z9 : 865238 Z999999 : "Z9999" Z99999 : "Z99" Z9 : 0.20705605773583802 } Z9999 : null ) @Z99999 ( Z9999999 : { Z9 : [ "" [ -679623 $Z ] { Z : null } "" ] Z9 : [ 0.972630813239436 ] } Z999 : -136147 Z9999999 : "嵉즹篙릏" Z9999 : 0.2963733232097576 Z99 : { Z9 : "晃캂ㄼ踛" Z : null Z : [ ] Z : -903096 Z99999 : 0.8035609935426903 } ) @_9 { Z99999 ( ) { Z9_9 : Z999 ( Z9999 : null Z9 : "㔉揆" Z999 : "" Z9 : $Z ) { Z99 : Z9 { } ... Z @Z99 @Z ( Z9 : true ) } ... { Z99 ( Z : null ) @Z99 ( Z9 : [ ] ) { } } ... on Z999 { ... Z99 } ... Z @Z99 ( Z99 : false Z99 : "" Z9 : null ) } Z9 : Z ( Z99 : "Z" Z99 : "Z" Z999_99 : null Z9 : false Z999 : -847508 Z999999 : false ) ... on Z999999 @Z99999 { ... on Z9 { Z99 ( Z99 : "Z" ) @Z @Z9 ( ) } ... Z9999 } } ... on Z99999 { ... Z99 @Z999 ( Z : 0.575622919749293 Z : null Z99 : { Z9999 : false Z99 : 0.43402963291575647 } Z9 : "Z" ) @Z999999 ( Z999 : 165296 Z99999 : true Z999 : "Z_99" Z9 : 0.9520399700626917 Z9999 : "서" ) @Z @Z9999 @Z9999 ( Z99 : "" Z99 : null Z99999 : [ { } 0.18022870699885707 true ] ) ... on Z @Z999999 @Z ( Z99 : "氭蓵臨" Z9 : "Z999" Z9999 : false Z999 : null ) @Z9999 ( Z99999 : [ "Z9" ] Z999999 : [ 0.23149938286817603 $Z99 [ "" null ] 0.21311289361357358 ] Z9999 : "Z" Z9 : $Z999 Z_99 : [ -793239 "Z" ] ) { Z : Z9 ( Z99 : "Z99" Z99 : null Z9999 : null ) @Z99_9 @Z99 ( Z999 : $Z99 Z : { Z9 : [ ] } Z99_9 : 0.41953172274843403 Z9999 : "Z9" ) { ... Z99 @Z9 ( ) Z9 : Z ( Z9 : 0.836182736715387 ) { } } } Z9999 @Z99999 ( Z999 : "Z9" Z99 : "Z9999" Z99999 : { Z999 : $Z9 Z9999 : "읒" Z9 : true Z9 : [ ] } Z : null Z99999 : $Z_99 ) @Z9 Z : Z ( Z99999 : { Z9999 : "᫃" Z : true Z : null } Z9 : true ) @Z99999 ( Z999999 : true Z : { Z : null Z9 : true Z999 : -969889 Z9 : $Z99 } Z9999 : { } _999 : "Z9" Z9 : { } Z99 : [ { Z9 : { } Z99 : [ ] } { } $Z ] ) { } ... on Z999999 @Z9 ( Z9 : $Z9999 Z_9 : [ true null ] Z9999 : "姖\\29" Z999 : "Z9999" ) @Z999 ( Z : 0.46380479469141217 Z99 : { Z : 166956 Z9 : null } Z99999 : { Z9 : null Z_999 : [ false ] Z : null } ) @Z999 ( Z9999 : "" Z999999 : "Z999" Z99 : { } ) @Z_99999 ( Z99 : $Z99 Z999 : 0.4802650699765724 ) @Z999 ( Z : { } Z9 : 514626 Z99999 : 0.10744267660539722 Z999 : null ) { } ... Z999 } ... Z9999999_ @_999999 @Z9 ( Z99999 : 0.9729139124848479 Z999999 : { Z9_99 : -631801 Z99 : [ ] Z999 : [ 0.6842147087139145 ] Z999999 : { Z9 : [ ] Z999 : { Z99 : null Z99 : "" } Z9999 : 0.5500629849499384 _99 : 0.17829077931972723 } Z999 : 0.41082164990288284 } Z99 : null ) @Z ( ) @Z999999 ( ) @Z9999999 ( Z999 : $Z999 Z : $Z9999 Z99999999 : 0.6118729406091724 Z99 : null Z : true Z : "Z999" ) @Z99 ( Z99 : "㵀ꔱ瞎뎔" Z9999999 : null ) ... Z9 @Z9 @Z99999 ( Z99999999 : null Z99 : { } Z999 : null Z : true ) @Z9 ( Z : true Z99 : "Z" Z9999 : 0.2192597427495102 Z9 : "Z999999" Z99999999 : 428559 Z99999 : false Z : 0.8863087859406642 Z : null ) @Z999999 ( Z : [ { _99 : [ ] Z9 : null } ] ) @Z99999999 @Z9999 @Z9999 ( Z9 : [ false 0.5977931714606439 ] Z999999 : 0.8410291014430249 Z : 869668 Z : [ "㙈齆" null 0.720802083947138 { Z_9 : "Z" } [ 483499 0.31544311219614146 ] ] Z999 : 755759 Z : false Z99999 : $Z Z : "�尓෪" ) ... @Z @Z9 ( Z99 : null Z9999999 : { } Z99999 : "慒╏" Z_ : "㠁䢦唕ﱗ" ) @_9999 ( Z9999 : "�ꚳⷚ" Z9999 : { Z999 : false Z999999 : null Z99 : null } ) @Z99999999 ( Z : $Z9 Z : "蚦喙脝⯞Ꟍ" Z9999999 : null Z : [ [ 0.8266237912823556 0.07284331837335756 ] true ] Z : "≴્" ) @Z99 ( Z99 : $Z Z99 : "䤷䞣" ) @Z99999999 { ... @Z9 ( ) { ... on Z99 @Z99 ( Z9999 : "Z99" ) { ... on Z99 { } ... on Z { } } ... Z ... on Z99 @Z9999 ( ) @Z9999 ( Z9999 : -498148 Z9999 : "" Z9 : $Z9 Z99 : $Z99 ) { Z9 : Z { } } } Z @Z99999 ( Z9_ : "Z999" Z999 : 0.31384074935402756 Z9999 : false Z999 : { Z9999 : "" Z99 : true Z99 : false Z : null } Z : -390163 ) @Z9 @Z9999 { ... Z9 @Z9999 ( Z_99 : null Z999 : "鹖뇈" ) @Z9 ( Z9999 : -528751 Z99 : { Z9 : 933454 Z9 : true } ) } ... on Z999 @Z99999 ( Z99999 : "Z999" Z9999 : "㾠摙㖚" Z999999 : "᭾髜믬ࠑ" Z999999 : 0.6020648617307026 Z99 : { Z : { Z9 : true Z9 : null } Z999 : 684254 Z99 : true } Z99 : { Z999 : { Z9 : -34080 Z9 : [ ] } Z : { Z9 : true Z99 : [ ] } Z9 : [ 0.6264860819217218 ] } ) @Z ( ) { } ... on Z9 @Z9 ( ) @Z99999 ( ) @Z ( ) { ... Z9999 ... @Z999 ( Z9999 : "馧ꦕ" ) @Z { ... on Z { } } Z99 : Z @Z99 ( Z999_ : { Z9 : { } Z9 : "Z" } Z : $Z ) @Z999 ( Z9999 : 0.1402587514092488 Z9999 : true Z9 : $Z99 Z99 : false ) @Z9999 ( Z9999 : $Z99 Z999 : 0.4145121771909819 ) @Z9 ( ) { Z99 : Z9 ( Z9 : $Z ) { } ... { } } } ... Z9999 @Z99 @Z99 ( ) } }""" ∷ String -testSadistic0 ∷ ∀ m. Monad m ⇒ SpecT Aff Unit m Unit -testSadistic0 = +spec ∷ Spec Unit +spec = describe "test complicated query 0" do it "should parse" do either (\s -> fail $ "Bad :: " <> (show s)) (\_ -> 1 `shouldEqual` 1) $ runParser query GP.selectionSet diff --git a/test/Data/GraphQL/ParseSadistic1.purs b/test/GraphQL/ParseSadistic1.purs similarity index 98% rename from test/Data/GraphQL/ParseSadistic1.purs rename to test/GraphQL/ParseSadistic1.purs index d878682..b039213 100644 --- a/test/Data/GraphQL/ParseSadistic1.purs +++ b/test/GraphQL/ParseSadistic1.purs @@ -3,10 +3,9 @@ module Test.Data.GraphQL.ParseSadistic1 where import Prelude import Data.Either (either) import Data.GraphQL.Parser as GP -import Effect.Aff (Aff) -import Test.Spec (SpecT, describe, it) +import Test.Spec (Spec, describe, it) import Test.Spec.Assertions (shouldEqual, fail) -import Text.Parsing.Parser (runParser) +import Parsing (runParser) query = """subscription Z9 @@ -139,8 +138,8 @@ query = }""" ∷ String -testSadistic1 ∷ ∀ m. Monad m ⇒ SpecT Aff Unit m Unit -testSadistic1 = +spec ∷ Spec Unit +spec = describe "test complicated query 1" do it "should parse" do either (\s -> fail $ "Bad :: " <> (show s)) (\_ -> 1 `shouldEqual` 1) $ runParser query GP.operationDefinition diff --git a/test/Data/GraphQL/ParseSimple.purs b/test/GraphQL/ParseSimple.purs similarity index 96% rename from test/Data/GraphQL/ParseSimple.purs rename to test/GraphQL/ParseSimple.purs index 677c8e1..81b670c 100644 --- a/test/Data/GraphQL/ParseSimple.purs +++ b/test/GraphQL/ParseSimple.purs @@ -1,6 +1,7 @@ module Test.Data.GraphQL.ParseSimple where import Prelude + import Control.Monad.Error.Class (class MonadThrow) import Data.Either (either) import Data.GraphQL.AST as AST @@ -9,16 +10,15 @@ import Data.List (List(..), singleton, (:)) import Data.Maybe (Maybe(..)) import Data.String.CodeUnits (fromCharArray) import Effect.Exception (Error) -import Test.Spec (SpecT, describe, it) +import Test.Spec (Spec, describe, it) import Test.Spec.Assertions (shouldEqual, fail) -import Text.Parsing.Parser (runParser, Parser) -import Text.Parsing.Parser.String (class StringLike) +import Parsing (runParser, Parser) -parseSuccess ∷ ∀ s t m. StringLike s ⇒ MonadThrow Error m ⇒ Show t ⇒ Eq t ⇒ Parser s t → s → t → m Unit +parseSuccess ∷ ∀ t m. MonadThrow Error m ⇒ Show t ⇒ Eq t ⇒ Parser String t → String → t → m Unit parseSuccess parser toparse tocomp = either (fail <<< show) (shouldEqual tocomp) (runParser toparse parser) -testParser ∷ forall e m. Monad m => Bind e => MonadThrow Error e => SpecT e Unit m Unit -testParser = +spec ∷ Spec Unit +spec = describe "test parser" do describe "test tokens" do it "should correctly parse comments" do @@ -45,6 +45,8 @@ testParser = parseSuccess (GP.listValue GP.value) "[]" (AST.ListValue (Nil)) parseSuccess (GP.listValue GP.value) "[1]" (AST.ListValue (AST.Value_IntValue (AST.IntValue 1) : Nil)) parseSuccess (GP.listValue GP.value) "[\n\n#hello\n\n]" (AST.ListValue (Nil)) + parseSuccess (GP.listValue GP.value) "[1 2]" (AST.ListValue (AST.Value_IntValue (AST.IntValue 1) : AST.Value_IntValue (AST.IntValue 2) : Nil)) + parseSuccess (GP.listValue GP.value) "[1 2 ]" (AST.ListValue (AST.Value_IntValue (AST.IntValue 1) : AST.Value_IntValue (AST.IntValue 2) : Nil)) parseSuccess (GP.listValue GP.value) "[\t\t1 2 \t,, \"3\" ]" (AST.ListValue (AST.Value_IntValue (AST.IntValue 1) : AST.Value_IntValue (AST.IntValue 2) : AST.Value_StringValue (AST.StringValue "3") : Nil)) parseSuccess (GP.listValue GP.value) "[1 2 \"3\"]" (AST.ListValue (AST.Value_IntValue (AST.IntValue 1) : AST.Value_IntValue (AST.IntValue 2) : AST.Value_StringValue (AST.StringValue "3") : Nil)) it "should correctly parse objects" do diff --git a/test/Data/GraphQL/RetrieveStringTypes.purs b/test/GraphQL/RetrieveStringTypes.purs similarity index 95% rename from test/Data/GraphQL/RetrieveStringTypes.purs rename to test/GraphQL/RetrieveStringTypes.purs index 900b499..b5b187c 100644 --- a/test/Data/GraphQL/RetrieveStringTypes.purs +++ b/test/GraphQL/RetrieveStringTypes.purs @@ -1,6 +1,7 @@ module Test.Data.GraphQL.RetrieveStringTypes where import Prelude + import Data.Either (either) import Data.GraphQL.AST as AST import Data.GraphQL.Parser as GP @@ -8,17 +9,16 @@ import Data.Lens as L import Data.Lens.Record as LR import Data.List (List) import Data.Set as Set -import Data.Symbol (SProxy(..)) +import Type.Proxy (Proxy(..)) import Data.Tuple (uncurry) import Effect.Aff (Aff) import Effect.Class (liftEffect) import Effect.Exception (throw) -import Test.Spec (SpecT, before, describe, it) +import Test.Spec (Spec, before, describe, it) import Test.Spec.Assertions (shouldEqual) -import Text.Parsing.Parser (runParser) -import Text.Parsing.Parser.String (class StringLike) +import Parsing (runParser) -parseDocument ∷ ∀ s. StringLike s ⇒ s → Aff (AST.Document) +parseDocument ∷ String → Aff (AST.Document) parseDocument t = liftEffect (either (throw <<< show) pure (runParser t GP.document)) -- uses a more full featured schema @@ -365,7 +365,7 @@ getFieldNamesFromDocument = <<< uncurry L.prism' AST._TypeSystemDefinition_TypeDefinition <<< uncurry L.prism' AST._TypeDefinition_ObjectTypeDefinition <<< uncurry L.prism' AST._ObjectTypeDefinition - <<< LR.prop (SProxy :: SProxy "fieldsDefinition") + <<< LR.prop (Proxy :: Proxy "fieldsDefinition") <<< L._Just <<< uncurry L.prism' AST._FieldsDefinition <<< L.traversed @@ -378,10 +378,10 @@ getFieldNamesFromDocument = (AST.NonNullType_NamedType (AST.NamedType "String")) ) ) - <<< LR.prop (SProxy :: SProxy "name") + <<< LR.prop (Proxy :: Proxy "name") -retrieveStringTypes ∷ ∀ m. Monad m ⇒ SpecT Aff Unit m Unit -retrieveStringTypes = +spec ∷ Spec Unit +spec = describe "test string type retriever" do before (parseDocument query) $ do diff --git a/test/Main.purs b/test/Main.purs index 782b377..9fdd04f 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -3,26 +3,11 @@ module Test.Main where import Prelude import Effect (Effect) import Effect.Aff (launchAff_) -import Test.Data.GraphQL.ParseFull0 (testFullDoc) -import Test.Data.GraphQL.ParseFull1 (testQuery) -import Test.Data.GraphQL.ParseFull2 (testCS) -import Test.Data.GraphQL.ParseFull3 (testSwapi) -import Test.Data.GraphQL.ParseSadistic0 (testSadistic0) -import Test.Data.GraphQL.ParseSadistic1 (testSadistic1) -import Test.Data.GraphQL.ParseSimple (testParser) -import Test.Data.GraphQL.RetrieveStringTypes (retrieveStringTypes) +import Test.Spec.Discovery (discover) import Test.Spec.Reporter.Console (consoleReporter) import Test.Spec.Runner (runSpec) -main ∷ Effect Unit -main = - launchAff_ - $ runSpec [ consoleReporter ] do - testParser - testFullDoc - testQuery - testCS - testSwapi - retrieveStringTypes - testSadistic0 - testSadistic1 +main :: Effect Unit +main = launchAff_ do + specs <- discover """Test\..*""" + runSpec [consoleReporter] specs