refactor(specs): inline model resolution

This commit is contained in:
Chirag Aggarwal
2026-04-16 11:16:25 +05:30
parent a0db023860
commit 945cdb3a99
3 changed files with 36 additions and 15 deletions
-11
View File
@@ -263,17 +263,6 @@ abstract class Format
return $contents;
}
protected function getRegisteredModel(string $type): Model
{
foreach ($this->models as $model) {
if ($model->getType() === $type) {
return $model;
}
}
throw new \RuntimeException("Unresolved model '{$type}'. Ensure the model is registered.");
}
/**
* @param array<Model> $models
* @return array<string, mixed>|null
@@ -907,7 +907,15 @@ class OpenAPI3 extends Format
return ['$ref' => '#/components/schemas/' . $type];
}, $rule['type']),
'discriminator' => $this->getDisciminator(
\array_map(fn (string $type) => $this->getRegisteredModel($type), $rule['type']),
\array_map(function (string $type) {
foreach ($this->models as $model) {
if ($model->getType() === $type) {
return $model;
}
}
throw new \RuntimeException("Unresolved model '{$type}'. Ensure the model is registered.");
}, $rule['type']),
'#/components/schemas/'
),
]);
@@ -917,7 +925,15 @@ class OpenAPI3 extends Format
return ['$ref' => '#/components/schemas/' . $type];
}, $rule['type']),
'discriminator' => $this->getDisciminator(
\array_map(fn (string $type) => $this->getRegisteredModel($type), $rule['type']),
\array_map(function (string $type) {
foreach ($this->models as $model) {
if ($model->getType() === $type) {
return $model;
}
}
throw new \RuntimeException("Unresolved model '{$type}'. Ensure the model is registered.");
}, $rule['type']),
'#/components/schemas/'
),
]);
@@ -885,7 +885,15 @@ class Swagger2 extends Format
$items = \array_filter([
'x-anyOf' => \array_map(fn ($type) => ['$ref' => '#/definitions/' . $type], $rule['type']),
'x-discriminator' => $this->getDisciminator(
\array_map(fn (string $type) => $this->getRegisteredModel($type), $rule['type']),
\array_map(function (string $type) {
foreach ($this->models as $model) {
if ($model->getType() === $type) {
return $model;
}
}
throw new \RuntimeException("Unresolved model '{$type}'. Ensure the model is registered.");
}, $rule['type']),
'#/definitions/'
),
]);
@@ -893,7 +901,15 @@ class Swagger2 extends Format
$items = \array_filter([
'x-oneOf' => \array_map(fn ($type) => ['$ref' => '#/definitions/' . $type], $rule['type']),
'x-discriminator' => $this->getDisciminator(
\array_map(fn (string $type) => $this->getRegisteredModel($type), $rule['type']),
\array_map(function (string $type) {
foreach ($this->models as $model) {
if ($model->getType() === $type) {
return $model;
}
}
throw new \RuntimeException("Unresolved model '{$type}'. Ensure the model is registered.");
}, $rule['type']),
'#/definitions/'
),
]);