diff --git a/config/openapi-client-generator.php b/config/openapi-client-generator.php index 2cee2b6..a61ea33 100644 --- a/config/openapi-client-generator.php +++ b/config/openapi-client-generator.php @@ -77,6 +77,14 @@ 'packageName' => '' ], + /** + * Global Properties from https://openapi-generator.tech/docs/globals + */ + 'global_params' => [ + 'apiTests' => false, + 'modelTests' => false, + ], + /** * Directory where you can place templates to override default ones. . Used in -t */ @@ -86,10 +94,5 @@ * Files that will be ignored during repository cleanup */ 'files_to_ignore_during_cleanup' => ['.git', '.gitignore'], - - /** - * Options for disable patch section "require" composer.json - */ - 'composer_disable_patch_require' => false, ] ]; diff --git a/src/Commands/GenerateClient.php b/src/Commands/GenerateClient.php index cde88a5..025f405 100644 --- a/src/Commands/GenerateClient.php +++ b/src/Commands/GenerateClient.php @@ -49,6 +49,11 @@ abstract class GenerateClient extends Command */ protected $params; + /** + * @var array + */ + protected $globalParams; + /** * @var string */ @@ -71,6 +76,7 @@ public function __construct() $this->gitHost = config('openapi-client-generator.git_host', ''); $this->params = config("openapi-client-generator.{$this->client}_args.params"); + $this->globalParams = config("openapi-client-generator.{$this->client}_args.global_params", []); $this->templateDir = config("openapi-client-generator.{$this->client}_args.template_dir", ''); $this->filesToIgnoreDuringCleanup = config("openapi-client-generator.{$this->client}_args.files_to_ignore_during_cleanup", []); } @@ -129,18 +135,22 @@ private function getGeneratorArguments(): string $arguments .= " -t " . escapeshellarg($this->templateDir); } - $additionalParams = $this->getAdditionalParamsArgument(); - + $additionalParams = $this->getParamsArgument($this->params); if (Str::length($additionalParams) > 0) { $arguments .= " -p " . escapeshellarg($additionalParams); } + $globalParams = $this->getParamsArgument($this->globalParams); + if (Str::length($globalParams) > 0) { + $arguments .= " --global-property=" . escapeshellarg($globalParams); + } + return $arguments; } - private function getAdditionalParamsArgument(): string + private function getParamsArgument(array $params): string { - return collect($this->params) + return collect($params) ->map(function ($value, $name) { $escapedValue = PHP_OS_FAMILY !== 'Windows' ? str_replace("\\", "\\\\", $value) : $value; return "$name=$escapedValue"; @@ -179,31 +189,36 @@ protected function externalTemplatePath(string $path): ?string return $resultPath; } - private function recursiveClearDirectory(string $dir, int $level = 0) + private function recursiveClearDirectory(string $dir, int $level = 0, string $baseDir = ''): bool { if (!$dir) { - return; + return true; } + $disableDeleteDir = false; foreach (scandir($dir) as $fileWithoutDir) { if (in_array($fileWithoutDir, ['..', '.'])) { continue; } $file = $dir . "/" . $fileWithoutDir; + $pathFromBase = $baseDir ? $baseDir . '/' . $fileWithoutDir : $fileWithoutDir; - if ($level === 0 && in_array($fileWithoutDir, $this->filesToIgnoreDuringCleanup)) { + if (in_array($pathFromBase, $this->filesToIgnoreDuringCleanup)) { + $disableDeleteDir = true; continue; } if (is_dir($file)) { - $this->recursiveClearDirectory($file, $level + 1); + $disableDeleteDir = $this->recursiveClearDirectory($file, $level + 1, $pathFromBase) || $disableDeleteDir; } else { unlink($file); } } - if ($level > 0) { + if ($level > 0 && !$disableDeleteDir) { rmdir($dir); } + + return $disableDeleteDir; } } diff --git a/src/Commands/GenerateNodeJSClient.php b/src/Commands/GenerateNodeJSClient.php index 8541fca..304c3f0 100644 --- a/src/Commands/GenerateNodeJSClient.php +++ b/src/Commands/GenerateNodeJSClient.php @@ -15,7 +15,8 @@ use Ensi\LaravelOpenapiClientGenerator\Core\Generators\NestModuleGenerator; use Ensi\LaravelOpenapiClientGenerator\Core\Generators\NodeJSUtilsGenerator; -class GenerateNodeJSClient extends GenerateClient { +class GenerateNodeJSClient extends GenerateClient +{ /** * @var string */ diff --git a/src/Commands/GeneratePhpClient.php b/src/Commands/GeneratePhpClient.php index 0b3176b..b708519 100644 --- a/src/Commands/GeneratePhpClient.php +++ b/src/Commands/GeneratePhpClient.php @@ -11,7 +11,8 @@ use Ensi\LaravelOpenapiClientGenerator\Core\Patchers\ComposerPackagePatcher; use Ensi\LaravelOpenapiClientGenerator\Core\Generators\PhpProviderGenerator; -class GeneratePhpClient extends GenerateClient { +class GeneratePhpClient extends GenerateClient +{ /** * @var string */ @@ -42,16 +43,11 @@ class GeneratePhpClient extends GenerateClient { */ protected $laravelPackageConfigKey; - /** @var bool */ - private $disableComposerPatchRequire; - public function __construct() { parent::__construct(); $this->composerName = config('openapi-client-generator.php_args.composer_name'); $this->laravelPackageConfigKey = config("openapi-client-generator.{$this->client}_args.laravel_package_config_key", ''); - - $this->disableComposerPatchRequire = (bool) config('openapi-client-generator.php_args.composer_disable_patch_require', false); } protected function patchClientPackage(): void @@ -85,9 +81,7 @@ private function patchEnums(): void private function patchComposerPackage(): void { $patcher = new ComposerPackagePatcher($this->outputDir, $this->composerName); - $patcher - ->setDisableRequirePatching($this->disableComposerPatchRequire) - ->patch(); + $patcher->patch(); } private function generateProvider(): void { diff --git a/src/Core/Generators/NestModuleConfigGenerator.php b/src/Core/Generators/NestModuleConfigGenerator.php index b27b0d4..0d5b800 100644 --- a/src/Core/Generators/NestModuleConfigGenerator.php +++ b/src/Core/Generators/NestModuleConfigGenerator.php @@ -4,7 +4,8 @@ use Illuminate\Support\Str; -class NestModuleConfigGenerator { +class NestModuleConfigGenerator +{ CONST MODULE_DIRNAME = 'module'; CONST MODULE_FILENAME = 'module.ts'; CONST CONFIG_FILENAME = 'config.ts'; diff --git a/src/Core/Generators/NestModuleGenerator.php b/src/Core/Generators/NestModuleGenerator.php index 2874b2b..e265638 100644 --- a/src/Core/Generators/NestModuleGenerator.php +++ b/src/Core/Generators/NestModuleGenerator.php @@ -5,7 +5,8 @@ use FilesystemIterator; use Illuminate\Support\Str; -class NestModuleGenerator { +class NestModuleGenerator +{ CONST MODULE_DIRNAME = 'module'; CONST MODULE_FILENAME = 'module.ts'; CONST CONFIG_FILENAME = 'config.ts'; diff --git a/src/Core/Generators/NodeJSUtilsGenerator.php b/src/Core/Generators/NodeJSUtilsGenerator.php index 959ed9d..1005284 100644 --- a/src/Core/Generators/NodeJSUtilsGenerator.php +++ b/src/Core/Generators/NodeJSUtilsGenerator.php @@ -2,7 +2,8 @@ namespace Ensi\LaravelOpenapiClientGenerator\Core\Generators; -class NodeJSUtilsGenerator { +class NodeJSUtilsGenerator +{ CONST UTILS_DIRNAME = 'utils'; CONST QUERY_STRING_FILTER_WRAPPER_FILENAME = 'querystringFilterWrapper.ts'; CONST INDEX_FILENAME = 'index.ts'; diff --git a/src/Core/Patchers/ComposerPackagePatcher.php b/src/Core/Patchers/ComposerPackagePatcher.php index 306404f..adf0294 100644 --- a/src/Core/Patchers/ComposerPackagePatcher.php +++ b/src/Core/Patchers/ComposerPackagePatcher.php @@ -2,14 +2,11 @@ namespace Ensi\LaravelOpenapiClientGenerator\Core\Patchers; -class ComposerPackagePatcher extends PackageManifestPatcher { +class ComposerPackagePatcher extends PackageManifestPatcher +{ - /** @var string */ - protected $manifestName = 'composer.json'; - /** @var string */ - protected $packageName; - /** @var bool */ - private $disableRequirePatching = false; + protected string $manifestName = 'composer.json'; + protected string $packageName; public function __construct(string $packageRootDir, string $packageName) { @@ -17,22 +14,9 @@ public function __construct(string $packageRootDir, string $packageName) $this->packageName = $packageName; } - public function setDisableRequirePatching(bool $disableRequirePatching): self - { - $this->disableRequirePatching = $disableRequirePatching; - - return $this; - } - protected function applyPatchers($manifest): array { - $manifest = $this->patchPackageName($manifest); - - if (false === $this->disableRequirePatching) { - $manifest = $this->patchRequire($manifest); - } - - return $manifest; + return $this->patchPackageName($manifest); } protected function patchPackageName($manifest) @@ -41,13 +25,4 @@ protected function patchPackageName($manifest) return $manifest; } - - protected function patchRequire($manifest) - { - $manifest['require']['php'] = '^7.1 || ^8.0'; - $manifest['require']['guzzlehttp/guzzle'] = '^6.2 || ^7.0'; - $manifest['require']['guzzlehttp/psr7'] = '^1.6.1'; - - return $manifest; - } } diff --git a/src/Core/Patchers/EnumPatcher.php b/src/Core/Patchers/EnumPatcher.php index 9b0b5d2..a427b0f 100644 --- a/src/Core/Patchers/EnumPatcher.php +++ b/src/Core/Patchers/EnumPatcher.php @@ -2,7 +2,8 @@ namespace Ensi\LaravelOpenapiClientGenerator\Core\Patchers; -abstract class EnumPatcher { +abstract class EnumPatcher +{ /** * @var string diff --git a/src/Core/Patchers/NodeJSEnumPatcher.php b/src/Core/Patchers/NodeJSEnumPatcher.php index 214a64e..0054612 100644 --- a/src/Core/Patchers/NodeJSEnumPatcher.php +++ b/src/Core/Patchers/NodeJSEnumPatcher.php @@ -4,7 +4,8 @@ use Illuminate\Support\Str; -class NodeJSEnumPatcher extends EnumPatcher { +class NodeJSEnumPatcher extends EnumPatcher +{ protected function getSpecificationName(): string { diff --git a/src/Core/Patchers/NodeJSIndexFilePatcher.php b/src/Core/Patchers/NodeJSIndexFilePatcher.php index a2284d0..b0a40e6 100644 --- a/src/Core/Patchers/NodeJSIndexFilePatcher.php +++ b/src/Core/Patchers/NodeJSIndexFilePatcher.php @@ -2,7 +2,8 @@ namespace Ensi\LaravelOpenapiClientGenerator\Core\Patchers; -class NodeJSIndexFilePatcher { +class NodeJSIndexFilePatcher +{ /** * @var string */ diff --git a/src/Core/Patchers/NpmPackagePatcher.php b/src/Core/Patchers/NpmPackagePatcher.php index bd04038..02bb8b4 100644 --- a/src/Core/Patchers/NpmPackagePatcher.php +++ b/src/Core/Patchers/NpmPackagePatcher.php @@ -2,16 +2,14 @@ namespace Ensi\LaravelOpenapiClientGenerator\Core\Patchers; -class NpmPackagePatcher extends PackageManifestPatcher { +class NpmPackagePatcher extends PackageManifestPatcher +{ CONST NESTJS_COMMON_PACKAGE_VERSION = '7.0.0'; CONST NESTJS_CONFIG_PACKAGE_VERSION = '0.5.0'; CONST RXJS_PACKAGE_VERSION = '6.5.4'; CONST NODE_FETCH_PACKAGE_VERSION = '2.6.1'; - /** - * @var string - */ - protected $manifestName = 'package.json'; + protected string $manifestName = 'package.json'; /** * @var boolean diff --git a/src/Core/Patchers/PackageManifestPatcher.php b/src/Core/Patchers/PackageManifestPatcher.php index 24ad61b..f455e08 100644 --- a/src/Core/Patchers/PackageManifestPatcher.php +++ b/src/Core/Patchers/PackageManifestPatcher.php @@ -2,12 +2,10 @@ namespace Ensi\LaravelOpenapiClientGenerator\Core\Patchers; -abstract class PackageManifestPatcher { +abstract class PackageManifestPatcher +{ - /** - * @var string - */ - protected $manifestName; + protected string $manifestName; /** * @var string @@ -19,7 +17,8 @@ public function __construct(string $packageRootDir) $this->packageRootDir = $packageRootDir; } - public function patch(): void { + public function patch(): void + { $manifest = $this->getManifest(); $manifest = $this->applyPatchers($manifest); diff --git a/src/Core/Patchers/PhpEnumPatcher.php b/src/Core/Patchers/PhpEnumPatcher.php index 33d5047..4544a0b 100644 --- a/src/Core/Patchers/PhpEnumPatcher.php +++ b/src/Core/Patchers/PhpEnumPatcher.php @@ -4,7 +4,8 @@ use Illuminate\Support\Str; -class PhpEnumPatcher extends EnumPatcher { +class PhpEnumPatcher extends EnumPatcher +{ protected function getSpecificationName(): string { diff --git a/src/Core/Patchers/TypeScriptConfigPatcher.php b/src/Core/Patchers/TypeScriptConfigPatcher.php index ddfba4c..71ad10d 100644 --- a/src/Core/Patchers/TypeScriptConfigPatcher.php +++ b/src/Core/Patchers/TypeScriptConfigPatcher.php @@ -2,12 +2,10 @@ namespace Ensi\LaravelOpenapiClientGenerator\Core\Patchers; -class TypeScriptConfigPatcher extends PackageManifestPatcher { +class TypeScriptConfigPatcher extends PackageManifestPatcher +{ - /** - * @var string - */ - protected $manifestName = 'tsconfig.json'; + protected string $manifestName = 'tsconfig.json'; protected function applyPatchers($tsConfig) {