sailor icon indicating copy to clipboard operation
sailor copied to clipboard

When trying to make a query named "Cases" - exceptions are thrown because it's not escaped somewhere

Open Spriz opened this issue 1 year ago • 0 comments

Describe the bug

When trying to use this query, it fails with [Nette\InvalidArgumentException] Value 'Case' is not valid class name.

query Foo {
    cases {
        edges {
            node {
                id
            }
        }
    }
}

Expected behavior/Solution I think the class name should be escaped here: https://github.com/spawnia/sailor/blob/master/src/Codegen/ObjectLikeBuilder.php#L35 with Escaper::escapeClassName($name),

Steps to reproduce Try generating client code for this graphql query:

query Foo {
    cases {
        edges {
            node {
                id
            }
        }
    }
}

Output/Logs

Click to expand
$ vendor/bin/sailor -vvv
Generating code for endpoint ordrestyring...

In ClassType.php line 164:
                                         
  [Nette\InvalidArgumentException]       
  Value 'Case' is not valid class name.  
                                         

Exception trace:
  at /app/packages/backend/vendor/nette/php-generator/src/PhpGenerator/ClassType.php:164
 Nette\PhpGenerator\ClassType->setName() at /app/packages/backend/vendor/nette/php-generator/src/PhpGenerator/ClassType.php:133
 Nette\PhpGenerator\ClassType->__construct() at /app/packages/backend/vendor/spawnia/sailor/src/Codegen/ObjectLikeBuilder.php:36
 Spawnia\Sailor\Codegen\ObjectLikeBuilder->__construct() at /app/packages/backend/vendor/spawnia/sailor/src/Codegen/OperationGenerator.php:325
 Spawnia\Sailor\Codegen\OperationGenerator->makeObjectLikeBuilder() at /app/packages/backend/vendor/spawnia/sailor/src/Codegen/OperationGenerator.php:227
 Spawnia\Sailor\Codegen\OperationGenerator->Spawnia\Sailor\Codegen\{closure}() at /app/packages/backend/vendor/webonyx/graphql-php/src/Language/Visitor.php:453
 GraphQL\Language\Visitor::GraphQL\Language\{closure}() at /app/packages/backend/vendor/webonyx/graphql-php/src/Language/Visitor.php:263
 GraphQL\Language\Visitor::visit() at /app/packages/backend/vendor/spawnia/sailor/src/Codegen/OperationGenerator.php:305
 Spawnia\Sailor\Codegen\OperationGenerator->generate() at /app/packages/backend/vendor/spawnia/sailor/src/Codegen/Generator.php:55
 Spawnia\Sailor\Codegen\Generator->generate() at /app/packages/backend/vendor/spawnia/sailor/src/Codegen/Writer.php:26
 Spawnia\Sailor\Codegen\Writer->write() at /app/packages/backend/vendor/spawnia/sailor/src/Console/CodegenCommand.php:39
 Spawnia\Sailor\Console\CodegenCommand->execute() at /app/packages/backend/vendor/symfony/console/Command/Command.php:298
 Symfony\Component\Console\Command\Command->run() at /app/packages/backend/vendor/symfony/console/Application.php:1040
 Symfony\Component\Console\Application->doRunCommand() at /app/packages/backend/vendor/symfony/console/Application.php:301
 Symfony\Component\Console\Application->doRun() at /app/packages/backend/vendor/symfony/console/Application.php:171
 Symfony\Component\Console\Application->run() at /app/packages/backend/vendor/spawnia/sailor/sailor:22
 include() at /app/packages/backend/vendor/bin/sailor:115

codegen [-c|--config CONFIG] [--] [<endpoint>]

Spriz avatar Aug 23 '24 21:08 Spriz