diff --git a/src/Generator.php b/src/Generator.php index 88b811a..3e36bac 100644 --- a/src/Generator.php +++ b/src/Generator.php @@ -36,7 +36,39 @@ public function generate(string $namespace, string $destinationPath) foreach ($this->all($namespace, $destinationPath . DIRECTORY_SEPARATOR) as $file) { $fileName = $destinationPath . DIRECTORY_SEPARATOR . str_replace('\\', DIRECTORY_SEPARATOR, substr($file->fqcn, strlen($namespace))) . '.php'; - $fileContents = ($file->contents instanceof Node ? $codePrinter->prettyPrintFile([ + if ($file->contents instanceof Node\Stmt\Namespace_) { + array_unshift($file->contents->stmts, ...[ + new Node\Stmt\Use_([ + new Node\Stmt\UseUse( + new Node\Name( + $namespace . 'Hydrator', + ) + ) + ]), + new Node\Stmt\Use_([ + new Node\Stmt\UseUse( + new Node\Name( + $namespace . 'Operation', + ) + ) + ]), + new Node\Stmt\Use_([ + new Node\Stmt\UseUse( + new Node\Name( + $namespace . 'Schema', + ) + ) + ]), + new Node\Stmt\Use_([ + new Node\Stmt\UseUse( + new Node\Name( + $namespace . 'WebHook', + ) + ) + ]), + ]); + } + $fileContents = ($file->contents instanceof Node\Stmt\Namespace_ ? $codePrinter->prettyPrintFile([ new Node\Stmt\Declare_([ new Node\Stmt\DeclareDeclare('strict_types', new Node\Scalar\LNumber(1)), ]), diff --git a/src/Generator/Client.php b/src/Generator/Client.php index 1bc01d3..3f6eb6a 100644 --- a/src/Generator/Client.php +++ b/src/Generator/Client.php @@ -162,22 +162,22 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie $factory->method('call')->makePublic()->setDocComment( new Doc(implode(PHP_EOL, [ '/**', - ' * @return ' . (function (string $namespace, array $operations): string { + ' * @return ' . (function (array $operations): string { $count = count($operations); $lastItem = $count - 1; $left = ''; $right = ''; for ($i = 0; $i < $count; $i++) { - $returnType = implode('|', array_map(static fn (string $className): string => strpos($className, '\\') === 0 ? $className : $namespace . 'Schema\\' . $className, array_unique($operations[$i]->returnType))); + $returnType = implode('|', array_map(static fn (string $className): string => strpos($className, '\\') === 0 ? $className : 'Schema\\' . $className, array_unique($operations[$i]->returnType))); if ($i !== $lastItem) { - $left .= '($call is ' . $namespace . 'Operation\\' . $operations[$i]->classNameSanitized . '::OPERATION_MATCH ? ' . $returnType . ' : '; + $left .= '($call is ' . 'Operation\\' . $operations[$i]->classNameSanitized . '::OPERATION_MATCH ? ' . $returnType . ' : '; } else { $left .= $returnType; } $right .= ')'; } return $left . $right; - })($namespace, $operations), + })($operations), ' */', ])) )->addParam((new Param('call'))->setType('string'))->addParam((new Param('params'))->setType('array')->setDefault([]))->addStmt(new Node\Stmt\Return_( @@ -203,30 +203,30 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie $factory->method('callAsync')->makePublic()->setDocComment( new Doc(implode(PHP_EOL, [ '/**', - ' * @return ' . (function (string $namespace, array $operations): string { + ' * @return ' . (function (array $operations): string { $count = count($operations); $lastItem = $count - 1; $left = ''; $right = ''; for ($i = 0; $i < $count; $i++) { - $returnType = implode('|', array_map(static fn (string $className): string => strpos($className, '\\') === 0 ? $className : $namespace . 'Schema\\' . $className, array_unique($operations[$i]->returnType))); + $returnType = implode('|', array_map(static fn (string $className): string => strpos($className, '\\') === 0 ? $className : 'Schema\\' . $className, array_unique($operations[$i]->returnType))); if ($i !== $lastItem) { - $left .= '($call is ' . $namespace . 'Operation\\' . $operations[$i]->classNameSanitized . '::OPERATION_MATCH ? ' . '\\' . PromiseInterface::class . '<' . $returnType . '>' . ' : '; + $left .= '($call is ' . 'Operation\\' . $operations[$i]->classNameSanitized . '::OPERATION_MATCH ? ' . '\\' . PromiseInterface::class . '<' . $returnType . '>' . ' : '; } else { $left .= '\\' . PromiseInterface::class . '<' . $returnType . '>'; } $right .= ')'; } return $left . $right; - })($namespace, $operations), + })($operations), ' */', ])) )->addParam((new Param('call'))->setType('string'))->addParam((new Param('params'))->setType('array')->setDefault([]))->addStmt(new Node\Stmt\Switch_( new Node\Expr\Variable('call'), - iterator_to_array((function (string $namespace, array $paths) use ($factory): iterable { + iterator_to_array((function (array $paths) use ($factory): iterable { foreach ($paths as $path) { foreach ($path->operations as $operation) { - $operationClassname = $namespace . 'Operation\\' . Utils::className(str_replace('/', '\\', $operation->className)); + $operationClassname = 'Operation\\' . Utils::className(str_replace('/', '\\', $operation->className)); yield new Node\Stmt\Case_( new Node\Expr\ClassConstFetch(new Node\Name($operationClassname), 'OPERATION_MATCH'), [ @@ -280,7 +280,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie new Node\Name('\array_key_exists'), [ new Arg(new Node\Expr\ClassConstFetch( - new Node\Name($namespace . 'Hydrator\\' . $path->hydrator->className), + new Node\Name('Hydrator\\' . $path->hydrator->className), new Node\Name('class'), )), new Arg(new Node\Expr\PropertyFetch( @@ -299,7 +299,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie new Node\Expr\Variable('this'), 'hydrator' ), new Node\Expr\ClassConstFetch( - new Node\Name($namespace . 'Hydrator\\' . $path->hydrator->className), + new Node\Name('Hydrator\\' . $path->hydrator->className), new Node\Name('class'), )), new Node\Expr\MethodCall( @@ -334,7 +334,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie new Node\Expr\Variable('this'), 'hydrator' ), new Node\Expr\ClassConstFetch( - new Node\Name($namespace . 'Hydrator\\' . $path->hydrator->className), + new Node\Name('Hydrator\\' . $path->hydrator->className), new Node\Name('class'), ))), ]), @@ -397,7 +397,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie 'uses' => [ new Node\Expr\Variable('operation'), ], - 'returnType' => count($operation->returnType) > 0 ? new Node\UnionType(array_map(static fn(string $object): Node\Name => new Node\Name(strpos($object, '\\') === 0 ? $object : $namespace . 'Schema\\' . $object), array_unique($operation->returnType))) : null, + 'returnType' => count($operation->returnType) > 0 ? new Node\UnionType(array_map(static fn(string $object): Node\Name => new Node\Name(strpos($object, '\\') === 0 ? $object : 'Schema\\' . $object), array_unique($operation->returnType))) : null, ])) ] )), @@ -407,7 +407,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie // yield new Node\Stmt\Echo_([new Node\Scalar\String_('/**' . @var_export($operationCall, true) . '*/')]); } } - })($namespace, $client->paths)) + })($client->paths)) ))->addStmt( new Node\Stmt\Throw_( new Node\Expr\New_( diff --git a/src/Generator/ClientInterface.php b/src/Generator/ClientInterface.php index cd90339..f864f0f 100644 --- a/src/Generator/ClientInterface.php +++ b/src/Generator/ClientInterface.php @@ -79,22 +79,22 @@ public static function generate(string $namespace, array $operations): iterable $factory->method('call')->makePublic()->setDocComment( new Doc(implode(PHP_EOL, [ '/**', - ' * @return ' . (function (string $namespace, array $operations): string { + ' * @return ' . (function (array $operations): string { $count = count($operations); $lastItem = $count - 1; $left = ''; $right = ''; for ($i = 0; $i < $count; $i++) { - $returnType = implode('|', array_map(static fn (string $className): string => strpos($className, '\\') === 0 ? $className : $namespace . 'Schema\\' . $className, array_unique($operations[$i]->returnType))); + $returnType = implode('|', array_map(static fn (string $className): string => strpos($className, '\\') === 0 ? $className : 'Schema\\' . $className, array_unique($operations[$i]->returnType))); if ($i !== $lastItem) { - $left .= '($call is ' . $namespace . 'Operation\\' . $operations[$i]->classNameSanitized . '::OPERATION_MATCH ? ' . $returnType . ' : '; + $left .= '($call is ' . 'Operation\\' . $operations[$i]->classNameSanitized . '::OPERATION_MATCH ? ' . $returnType . ' : '; } else { $left .= $returnType; } $right .= ')'; } return $left . $right; - })($namespace, $operations), + })($operations), ' */', ])) )->addParam((new Param('call'))->setType('string'))->addParam((new Param('params'))->setType('array')->setDefault([])) @@ -104,22 +104,22 @@ public static function generate(string $namespace, array $operations): iterable $factory->method('callAsync')->makePublic()->setDocComment( new Doc(implode(PHP_EOL, [ '/**', - ' * @return ' . (function (string $namespace,array $operations): string { + ' * @return ' . (function (array $operations): string { $count = count($operations); $lastItem = $count - 1; $left = ''; $right = ''; for ($i = 0; $i < $count; $i++) { - $returnType = implode('|', array_map(static fn (string $className): string => strpos($className, '\\') === 0 ? $className : $namespace . 'Schema\\' . $className, array_unique($operations[$i]->returnType))); + $returnType = implode('|', array_map(static fn (string $className): string => strpos($className, '\\') === 0 ? $className : 'Schema\\' . $className, array_unique($operations[$i]->returnType))); if ($i !== $lastItem) { - $left .= '($call is ' . $namespace . 'Operation\\' . $operations[$i]->classNameSanitized . '::OPERATION_MATCH ? ' . '\\' . PromiseInterface::class . '<' . $returnType . '>' . ' : '; + $left .= '($call is ' . 'Operation\\' . $operations[$i]->classNameSanitized . '::OPERATION_MATCH ? ' . '\\' . PromiseInterface::class . '<' . $returnType . '>' . ' : '; } else { $left .= '\\' . PromiseInterface::class . '<' . $returnType . '>'; } $right .= ')'; } return $left . $right; - })($namespace, $operations), + })($operations), ' */', ])) )->addParam((new Param('call'))->setType('string'))->addParam((new Param('params'))->setType('array')->setDefault([])) diff --git a/src/Generator/Hydrators.php b/src/Generator/Hydrators.php index 4b28529..d33d7b0 100644 --- a/src/Generator/Hydrators.php +++ b/src/Generator/Hydrators.php @@ -35,7 +35,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie $hydrators = array_filter($hydrators, static fn (\ApiClients\Tools\OpenApiClientGenerator\Representation\Hydrator $hydrator): bool => count($usefullHydrators[$hydrator->className]) > 0); foreach ($hydrators as $hydrator) { - $class->addStmt($factory->property($hydrator->methodName)->setType('?' . $namespace . 'Hydrator\\' . str_replace('/', '\\', $hydrator->className))->setDefault(null)->makePrivate()); + $class->addStmt($factory->property($hydrator->methodName)->setType('?' . 'Hydrator\\' . str_replace('/', '\\', $hydrator->className))->setDefault(null)->makePrivate()); } $class->addStmt( @@ -223,7 +223,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie foreach ($hydrators as $hydrator) { $class->addStmt( - $factory->method('getObjectMapper' . ucfirst($hydrator->methodName))->makePublic()->setReturnType($namespace . 'Hydrator\\' . str_replace('/', '\\', $hydrator->className))->addStmts([ + $factory->method('getObjectMapper' . ucfirst($hydrator->methodName))->makePublic()->setReturnType('Hydrator\\' . str_replace('/', '\\', $hydrator->className))->addStmts([ new Node\Stmt\If_( new Node\Expr\BinaryOp\Identical( new Node\Expr\Instanceof_( @@ -231,7 +231,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie new Node\Expr\Variable('this'), $hydrator->methodName ), - new Node\Expr\ConstFetch(new Node\Name($namespace . 'Hydrator\\' . str_replace('/', '\\', $hydrator->className))), + new Node\Expr\ConstFetch(new Node\Name('Hydrator\\' . str_replace('/', '\\', $hydrator->className))), ), new Node\Expr\ConstFetch(new Node\Name('false')), ), @@ -244,7 +244,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie $hydrator->methodName ), new Node\Expr\New_( - new Node\Name($namespace . 'Hydrator\\' . str_replace('/', '\\', $hydrator->className)) + new Node\Name('Hydrator\\' . str_replace('/', '\\', $hydrator->className)) ), ), ), diff --git a/src/Generator/Operation.php b/src/Generator/Operation.php index c644bd6..9f2ea9a 100644 --- a/src/Generator/Operation.php +++ b/src/Generator/Operation.php @@ -188,7 +188,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie new Node\Arg(new Node\Expr\Variable('data')), new Node\Arg(new Node\Expr\StaticCall(new Node\Name('\\' . \cebe\openapi\Reader::class), new Node\Name('readFromJson'), [ new Node\Expr\ClassConstFetch( - new Node\Name($namespace . 'Schema\\' . $requestBody->schema->className), + new Node\Name('Schema\\' . $requestBody->schema->className), new Node\Name('SCHEMA_JSON'), ), new Node\Expr\ClassConstFetch( @@ -224,7 +224,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie continue; } - $object = $namespace . 'Schema\\' . $contentTypeSchema->schema->className; + $object = 'Schema\\' . $contentTypeSchema->schema->className; $returnType[] = ($contentTypeSchema->schema->isArray ? '\\' . Observable::class . '<' : '') . $object . ($contentTypeSchema->schema->isArray ? '>' : ''); $returnTypeRaw[] = $contentTypeSchema->schema->isArray ? '\\' . Observable::class : $object; $hydrate = new Node\Expr\MethodCall( @@ -251,7 +251,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie new Node\Arg(new Node\Expr\Variable('body')), new Node\Arg(new Node\Expr\StaticCall(new Node\Name('\cebe\openapi\Reader'), new Node\Name('readFromJson'), [ new Node\Expr\ClassConstFetch( - new Node\Name($namespace . 'Schema\\' . $contentTypeSchema->schema->className), + new Node\Name('Schema\\' . $contentTypeSchema->schema->className), new Node\Name('SCHEMA_JSON'), ), new Node\Scalar\String_('\cebe\openapi\spec\Schema'), @@ -351,7 +351,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie $class->addStmt( $factory->property('responseSchemaValidator')->setType('\League\OpenAPIValidation\Schema\SchemaValidator')->makeReadonly()->makePrivate() )->addStmt( - $factory->property('hydrator')->setType($namespace . 'Hydrator\\' . $hydrator->className)->makeReadonly()->makePrivate() + $factory->property('hydrator')->setType('Hydrator\\' . $hydrator->className)->makeReadonly()->makePrivate() ); $constructor->addParam( @@ -365,7 +365,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie new Node\Expr\Variable('responseSchemaValidator'), ) )->addParam( - (new Param('hydrator'))->setType($namespace . 'Hydrator\\' . $hydrator->className) + (new Param('hydrator'))->setType('Hydrator\\' . $hydrator->className) )->addStmt( new Node\Expr\Assign( new Node\Expr\PropertyFetch( diff --git a/src/Generator/Schema.php b/src/Generator/Schema.php index e67590c..ecc92d4 100644 --- a/src/Generator/Schema.php +++ b/src/Generator/Schema.php @@ -85,7 +85,7 @@ public static function generate(string $namespace, \ApiClients\Tools\OpenApiClie $types = []; foreach ($property->type as $type) { if ($type->payload instanceof \ApiClients\Tools\OpenApiClientGenerator\Representation\Schema) { - $types[] = $namespace . 'Schema\\' . $type->payload->className; + $types[] = 'Schema\\' . $type->payload->className; continue; } diff --git a/src/Generator/WebHook.php b/src/Generator/WebHook.php index 43e207a..2308a2a 100644 --- a/src/Generator/WebHook.php +++ b/src/Generator/WebHook.php @@ -27,13 +27,13 @@ public static function generate(string $namespace, string $event, SchemaRegistry ' */', ]))); $class->addStmt($factory->property('requestSchemaValidator')->setType('\\' . \League\OpenAPIValidation\Schema\SchemaValidator::class)->makeReadonly()->makePrivate()); - $class->addStmt($factory->property('hydrator')->setType($namespace . 'Hydrator\\WebHook\\' . $className)->makeReadonly()->makePrivate()); + $class->addStmt($factory->property('hydrator')->setType('Hydrator\\WebHook\\' . $className)->makeReadonly()->makePrivate()); $constructor = $factory->method('__construct')->makePublic()->addParam( (new Param('requestSchemaValidator'))->setType('\\' . \League\OpenAPIValidation\Schema\SchemaValidator::class) )->addParam( - (new Param('hydrator'))->setType($namespace . 'Hydrator\\WebHook\\' . $className) + (new Param('hydrator'))->setType('Hydrator\\WebHook\\' . $className) )->addStmt( new Node\Expr\Assign( new Node\Expr\PropertyFetch( @@ -79,7 +79,7 @@ public static function generate(string $namespace, string $event, SchemaRegistry )), new Node\Arg(new Node\Expr\StaticCall(new Node\Name('\cebe\openapi\Reader'), new Node\Name('readFromJson'), [ new Node\Expr\ClassConstFetch( - new Node\Name($namespace . 'Schema\\' . $header->schema->className), + new Node\Name('Schema\\' . $header->schema->className), new Node\Name('SCHEMA_JSON'), ), new Node\Scalar\String_('\cebe\openapi\spec\Schema'), @@ -88,7 +88,7 @@ public static function generate(string $namespace, string $event, SchemaRegistry )); } foreach ($webHook->schema as $contentTYpe => $schema) { - $resolveReturnTypes[] = $namespace . 'Schema\\' . $schema->className; + $resolveReturnTypes[] = 'Schema\\' . $schema->className; $tmts[] = new Node\Stmt\If_( new Node\Expr\BinaryOp\Equal( new Node\Expr\ArrayDimFetch(new Node\Expr\Variable(new Node\Name('headers')), new Node\Scalar\String_('content-type')), @@ -106,7 +106,7 @@ public static function generate(string $namespace, string $event, SchemaRegistry new Node\Name('hydrateObject'), [ new Node\Arg(new Node\Expr\ClassConstFetch( - new Node\Name($namespace . 'Schema\\' . $schema->className), + new Node\Name('Schema\\' . $schema->className), new Node\Name('class'), )), new Node\Arg(new Node\Expr\Variable('data')), diff --git a/src/Generator/WebHooks.php b/src/Generator/WebHooks.php index e295cdd..7b3a849 100644 --- a/src/Generator/WebHooks.php +++ b/src/Generator/WebHooks.php @@ -121,7 +121,7 @@ public static function generate(string $namespace, array $webHooksHydrators, arr $schemas = []; foreach ($webHooks as $webHook) { foreach ($webHook->schema as $schema) { - $schemas[] = $namespace . 'Schema\\' . $schema->className; + $schemas[] = 'Schema\\' . $schema->className; } } @@ -211,7 +211,7 @@ public static function generate(string $namespace, array $webHooksHydrators, arr ); foreach ($webHooks as $event => $hooks) { - $eventClassname = $namespace . 'WebHook\\' .Utils::className($event); + $eventClassname = 'WebHook\\' .Utils::className($event); $eventSanitized = lcfirst((new Convert($event))->toPascal()); $class->addStmt($factory->property($eventSanitized)->setType('?' . $eventClassname)->setDefault(null)->makePrivate());