Serializer.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace Knuckles\Scribe\Config;
  3. use Illuminate\Support\Arr;
  4. use Illuminate\Support\Str;
  5. class Serializer
  6. {
  7. // todo new features & breaking changes:
  8. // - strategy config tuples - responseCalls support
  9. // - support route method + path in route matching
  10. // - no more route groups, header apply rules move to override
  11. // - no more apply rules for response_calls, use strategy settings. methods is replaced by only/except
  12. // todo design beta/migration story
  13. // todo design upgrade story
  14. // todo design continuous upgrade story
  15. // todo document parameters
  16. // todo support multiple base URLs
  17. public static function toOldConfig(Extracting $extractingConfig, Output $outputConfig): array
  18. {
  19. return [
  20. '__configVersion' => 'v2',
  21. 'theme' => $outputConfig->theme,
  22. 'title' => $outputConfig->title,
  23. 'description' => $outputConfig->description,
  24. 'base_url' => $outputConfig->baseUrls[0] ?? null,
  25. 'type' => $outputConfig->type[0],
  26. $outputConfig->type[0] => self::translateKeys($outputConfig->type[1]),
  27. 'try_it_out' => self::translateKeys($outputConfig->tryItOut),
  28. 'postman' => self::translateKeys($outputConfig->postman),
  29. 'openapi' => self::translateKeys($outputConfig->openApi),
  30. 'intro_text' => $outputConfig->introText,
  31. 'example_languages' => $outputConfig->exampleLanguages,
  32. 'logo' => $outputConfig->logo,
  33. 'last_updated' => $outputConfig->lastUpdated,
  34. 'groups' => [
  35. 'order' => $outputConfig->groupsOrder,
  36. 'default' => $extractingConfig->defaultGroup,
  37. ],
  38. 'examples' => [
  39. 'faker_seed' => $extractingConfig->fakerSeedForExamples,
  40. 'models_source' => $extractingConfig->dataSourcesForExampleModels,
  41. ],
  42. 'routeMatcher' => $extractingConfig->routeMatcher,
  43. 'database_connections_to_transact' => $extractingConfig->databaseConnectionsToTransact,
  44. 'fractal' => [
  45. 'serializer' => $extractingConfig->fractalSerializer,
  46. ],
  47. 'auth' => self::translateKeys($extractingConfig->auth),
  48. 'strategies' => $extractingConfig->strategies,
  49. 'routes' => static::generateRoutesConfig($extractingConfig->routes),
  50. ];
  51. }
  52. protected static function generateRoutesConfig(Routes $routesConfig): array
  53. {
  54. return [
  55. [
  56. 'match' => [
  57. 'prefixes' => $routesConfig->prefixes,
  58. 'domains' => $routesConfig->domains,
  59. 'versions' => $routesConfig->dingoVersions,
  60. ],
  61. 'include' => $routesConfig->alwaysInclude,
  62. 'exclude' => $routesConfig->alwaysExclude,
  63. ]
  64. ];
  65. }
  66. protected static function translateKeys($array)
  67. {
  68. return Arr::mapWithKeys($array, function ($value, $key) {
  69. return [Str::snake($key) => $value];
  70. });
  71. }
  72. }