Update codestyle based on updated Symfony rules (#229)
This commit is contained in:
parent
e485fde727
commit
c081b90d74
33 changed files with 165 additions and 168 deletions
|
|
@ -21,7 +21,7 @@ use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
require_once dirname(__DIR__, 2).'/vendor/autoload.php';
|
require_once dirname(__DIR__, 2).'/vendor/autoload.php';
|
||||||
|
|
||||||
set_exception_handler(function (Throwable $t): never {
|
set_exception_handler(static function (Throwable $t): never {
|
||||||
logger()->critical('Uncaught exception: '.$t->getMessage(), ['exception' => $t]);
|
logger()->critical('Uncaught exception: '.$t->getMessage(), ['exception' => $t]);
|
||||||
|
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ $server = Server::builder()
|
||||||
->setCapabilities(new ServerCapabilities(logging: true, tools: true))
|
->setCapabilities(new ServerCapabilities(logging: true, tools: true))
|
||||||
->setDiscovery(__DIR__)
|
->setDiscovery(__DIR__)
|
||||||
->addTool(
|
->addTool(
|
||||||
function (RequestContext $context, string $dataset): array {
|
static function (RequestContext $context, string $dataset): array {
|
||||||
$client = $context->getClientGateway();
|
$client = $context->getClientGateway();
|
||||||
$client->log(LoggingLevel::Info, sprintf('Running quality checks on dataset "%s"', $dataset));
|
$client->log(LoggingLevel::Info, sprintf('Running quality checks on dataset "%s"', $dataset));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ final class InMemoryTaskRepository implements TaskRepositoryInterface
|
||||||
|
|
||||||
public function getTasksForUser(string $userId): array
|
public function getTasksForUser(string $userId): array
|
||||||
{
|
{
|
||||||
return array_values(array_filter($this->tasks, fn ($task) => $task['userId'] === $userId && !$task['completed']));
|
return array_values(array_filter($this->tasks, static fn ($task) => $task['userId'] === $userId && !$task['completed']));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllTasks(): array
|
public function getAllTasks(): array
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ final class SystemStatsService implements StatsServiceInterface
|
||||||
public function getSystemStats(): array
|
public function getSystemStats(): array
|
||||||
{
|
{
|
||||||
$allTasks = $this->taskRepository->getAllTasks();
|
$allTasks = $this->taskRepository->getAllTasks();
|
||||||
$completed = \count(array_filter($allTasks, fn ($task) => $task['completed']));
|
$completed = \count(array_filter($allTasks, static fn ($task) => $task['completed']));
|
||||||
$pending = \count($allTasks) - $completed;
|
$pending = \count($allTasks) - $completed;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,6 @@ final class UserIdCompletionProvider implements ProviderInterface
|
||||||
|
|
||||||
public function getCompletions(string $currentValue): array
|
public function getCompletions(string $currentValue): array
|
||||||
{
|
{
|
||||||
return array_filter(self::AVAILABLE_USER_IDS, fn (string $userId) => str_contains($userId, $currentValue));
|
return array_filter(self::AVAILABLE_USER_IDS, static fn (string $userId) => str_contains($userId, $currentValue));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ $server = Server::builder()
|
||||||
->setSession(new FileSessionStore(__DIR__.'/sessions'))
|
->setSession(new FileSessionStore(__DIR__.'/sessions'))
|
||||||
->setDiscovery(__DIR__)
|
->setDiscovery(__DIR__)
|
||||||
->addTool(
|
->addTool(
|
||||||
function (float $a, float $b, string $operation = 'add'): array {
|
static function (float $a, float $b, string $operation = 'add'): array {
|
||||||
$result = match ($operation) {
|
$result = match ($operation) {
|
||||||
'add' => $a + $b,
|
'add' => $a + $b,
|
||||||
'subtract' => $a - $b,
|
'subtract' => $a - $b,
|
||||||
|
|
@ -42,7 +42,7 @@ $server = Server::builder()
|
||||||
description: 'Perform basic math operations (add, subtract, multiply, divide)'
|
description: 'Perform basic math operations (add, subtract, multiply, divide)'
|
||||||
)
|
)
|
||||||
->addResource(
|
->addResource(
|
||||||
function (): array {
|
static function (): array {
|
||||||
$memoryUsage = memory_get_usage(true);
|
$memoryUsage = memory_get_usage(true);
|
||||||
$memoryPeak = memory_get_peak_usage(true);
|
$memoryPeak = memory_get_peak_usage(true);
|
||||||
$uptime = time() - ($_SERVER['REQUEST_TIME_FLOAT'] ?? time());
|
$uptime = time() - ($_SERVER['REQUEST_TIME_FLOAT'] ?? time());
|
||||||
|
|
|
||||||
|
|
@ -64,12 +64,12 @@ final class EnvToolHandler
|
||||||
'processed_input_length' => \strlen($input),
|
'processed_input_length' => \strlen($input),
|
||||||
'message' => 'Processed in PRODUCTION mode (summary only).',
|
'message' => 'Processed in PRODUCTION mode (summary only).',
|
||||||
];
|
];
|
||||||
} else {
|
|
||||||
return [
|
|
||||||
'mode' => $appMode ?: 'default',
|
|
||||||
'original_input' => $input,
|
|
||||||
'message' => 'Processed in default mode (APP_MODE not recognized or not set).',
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'mode' => $appMode ?: 'default',
|
||||||
|
'original_input' => $input,
|
||||||
|
'message' => 'Processed in default mode (APP_MODE not recognized or not set).',
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -267,10 +267,10 @@ final class SchemaShowcaseElements
|
||||||
$processed = array_unique($processed);
|
$processed = array_unique($processed);
|
||||||
break;
|
break;
|
||||||
case 'filter_short':
|
case 'filter_short':
|
||||||
$processed = array_filter($processed, fn ($item) => \strlen($item) <= 10);
|
$processed = array_filter($processed, static fn ($item) => \strlen($item) <= 10);
|
||||||
break;
|
break;
|
||||||
case 'filter_long':
|
case 'filter_long':
|
||||||
$processed = array_filter($processed, fn ($item) => \strlen($item) > 10);
|
$processed = array_filter($processed, static fn ($item) => \strlen($item) > 10);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ class EnumCompletionProvider implements ProviderInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->values = array_map(
|
$this->values = array_map(
|
||||||
fn ($case) => isset($case->value) && \is_string($case->value) ? $case->value : $case->name,
|
static fn ($case) => isset($case->value) && \is_string($case->value) ? $case->value : $case->name,
|
||||||
$enumClass::cases()
|
$enumClass::cases()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -46,7 +46,7 @@ class EnumCompletionProvider implements ProviderInterface
|
||||||
|
|
||||||
return array_values(array_filter(
|
return array_values(array_filter(
|
||||||
$this->values,
|
$this->values,
|
||||||
fn (string $value) => str_starts_with($value, $currentValue)
|
static fn (string $value) => str_starts_with($value, $currentValue)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ class ListCompletionProvider implements ProviderInterface
|
||||||
|
|
||||||
return array_values(array_filter(
|
return array_values(array_filter(
|
||||||
$this->values,
|
$this->values,
|
||||||
fn (string $value) => str_starts_with($value, $currentValue)
|
static fn (string $value) => str_starts_with($value, $currentValue)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -311,7 +311,7 @@ final class SchemaGenerator implements SchemaGeneratorInterface
|
||||||
// If no items specified by Schema attribute, infer from type
|
// If no items specified by Schema attribute, infer from type
|
||||||
if (!isset($paramSchema['items'])) {
|
if (!isset($paramSchema['items'])) {
|
||||||
$itemJsonTypes = $this->mapPhpTypeToJsonSchemaType($paramInfo['type_string']);
|
$itemJsonTypes = $this->mapPhpTypeToJsonSchemaType($paramInfo['type_string']);
|
||||||
$nonNullItemTypes = array_filter($itemJsonTypes, fn ($t) => 'null' !== $t);
|
$nonNullItemTypes = array_filter($itemJsonTypes, static fn ($t) => 'null' !== $t);
|
||||||
|
|
||||||
if (1 === \count($nonNullItemTypes)) {
|
if (1 === \count($nonNullItemTypes)) {
|
||||||
$paramSchema['items'] = ['type' => $nonNullItemTypes[0]];
|
$paramSchema['items'] = ['type' => $nonNullItemTypes[0]];
|
||||||
|
|
@ -574,7 +574,7 @@ final class SchemaGenerator implements SchemaGeneratorInterface
|
||||||
$types[] = $this->getTypeStringFromReflection($innerType, $innerType->allowsNull());
|
$types[] = $this->getTypeStringFromReflection($innerType, $innerType->allowsNull());
|
||||||
}
|
}
|
||||||
if ($nativeAllowsNull) {
|
if ($nativeAllowsNull) {
|
||||||
$types = array_filter($types, fn ($t) => 'null' !== strtolower($t));
|
$types = array_filter($types, static fn ($t) => 'null' !== strtolower($t));
|
||||||
}
|
}
|
||||||
$typeString = implode('|', array_unique(array_filter($types)));
|
$typeString = implode('|', array_unique(array_filter($types)));
|
||||||
} elseif ($type instanceof \ReflectionIntersectionType) {
|
} elseif ($type instanceof \ReflectionIntersectionType) {
|
||||||
|
|
@ -619,7 +619,7 @@ final class SchemaGenerator implements SchemaGeneratorInterface
|
||||||
// Remove leading backslash from class names, but handle built-ins like 'int' or unions like 'int|string'
|
// Remove leading backslash from class names, but handle built-ins like 'int' or unions like 'int|string'
|
||||||
if (str_contains($typeString, '\\')) {
|
if (str_contains($typeString, '\\')) {
|
||||||
$parts = preg_split('/([|&])/', $typeString, -1, \PREG_SPLIT_DELIM_CAPTURE);
|
$parts = preg_split('/([|&])/', $typeString, -1, \PREG_SPLIT_DELIM_CAPTURE);
|
||||||
$processedParts = array_map(fn ($part) => str_starts_with($part, '\\') ? ltrim($part, '\\') : $part, $parts);
|
$processedParts = array_map(static fn ($part) => str_starts_with($part, '\\') ? ltrim($part, '\\') : $part, $parts);
|
||||||
$typeString = implode('', $processedParts);
|
$typeString = implode('', $processedParts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -145,10 +145,10 @@ class SchemaValidator
|
||||||
}
|
}
|
||||||
|
|
||||||
return $obj;
|
return $obj;
|
||||||
} else {
|
|
||||||
// It's a list (sequential array), convert items recursively
|
|
||||||
return array_map([$this, 'convertDataForValidator'], $data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// It's a list (sequential array), convert items recursively
|
||||||
|
return array_map([$this, 'convertDataForValidator'], $data);
|
||||||
} elseif (\is_object($data) && $data instanceof \stdClass) {
|
} elseif (\is_object($data) && $data instanceof \stdClass) {
|
||||||
// Deep copy/convert stdClass objects as well
|
// Deep copy/convert stdClass objects as well
|
||||||
$obj = new \stdClass();
|
$obj = new \stdClass();
|
||||||
|
|
@ -194,7 +194,7 @@ class SchemaValidator
|
||||||
if (empty($pathComponents)) {
|
if (empty($pathComponents)) {
|
||||||
return '/';
|
return '/';
|
||||||
}
|
}
|
||||||
$escapedComponents = array_map(function ($component) {
|
$escapedComponents = array_map(static function ($component) {
|
||||||
$componentStr = (string) $component;
|
$componentStr = (string) $component;
|
||||||
|
|
||||||
return str_replace(['~', '/'], ['~0', '~1'], $componentStr);
|
return str_replace(['~', '/'], ['~0', '~1'], $componentStr);
|
||||||
|
|
@ -215,7 +215,7 @@ class SchemaValidator
|
||||||
switch (strtolower($keyword)) {
|
switch (strtolower($keyword)) {
|
||||||
case 'required':
|
case 'required':
|
||||||
$missing = $args['missing'] ?? [];
|
$missing = $args['missing'] ?? [];
|
||||||
$formattedMissing = implode(', ', array_map(fn ($p) => "`{$p}`", $missing));
|
$formattedMissing = implode(', ', array_map(static fn ($p) => "`{$p}`", $missing));
|
||||||
$message = "Missing required properties: {$formattedMissing}.";
|
$message = "Missing required properties: {$formattedMissing}.";
|
||||||
break;
|
break;
|
||||||
case 'type':
|
case 'type':
|
||||||
|
|
@ -236,7 +236,7 @@ class SchemaValidator
|
||||||
if (empty($allowedValues)) {
|
if (empty($allowedValues)) {
|
||||||
$message = 'Value does not match the allowed enumeration.';
|
$message = 'Value does not match the allowed enumeration.';
|
||||||
} else {
|
} else {
|
||||||
$formattedAllowed = array_map(function ($v) { /* ... formatting logic ... */
|
$formattedAllowed = array_map(static function ($v) { /* ... formatting logic ... */
|
||||||
if (\is_string($v)) {
|
if (\is_string($v)) {
|
||||||
return '"'.$v.'"';
|
return '"'.$v.'"';
|
||||||
}
|
}
|
||||||
|
|
@ -309,7 +309,7 @@ class SchemaValidator
|
||||||
break;
|
break;
|
||||||
case 'additionalProperties': // Corrected casing
|
case 'additionalProperties': // Corrected casing
|
||||||
$unexpected = $args['properties'] ?? [];
|
$unexpected = $args['properties'] ?? [];
|
||||||
$formattedUnexpected = implode(', ', array_map(fn ($p) => "`{$p}`", $unexpected));
|
$formattedUnexpected = implode(', ', array_map(static fn ($p) => "`{$p}`", $unexpected));
|
||||||
$message = "Object contains unexpected additional properties: {$formattedUnexpected}.";
|
$message = "Object contains unexpected additional properties: {$formattedUnexpected}.";
|
||||||
break;
|
break;
|
||||||
case 'format':
|
case 'format':
|
||||||
|
|
@ -320,7 +320,7 @@ class SchemaValidator
|
||||||
$builtInMessage = $error->message();
|
$builtInMessage = $error->message();
|
||||||
if ($builtInMessage && 'The data must match the schema' !== $builtInMessage) {
|
if ($builtInMessage && 'The data must match the schema' !== $builtInMessage) {
|
||||||
$placeholders = $args;
|
$placeholders = $args;
|
||||||
$builtInMessage = preg_replace_callback('/\{(\w+)\}/', function ($match) use ($placeholders) {
|
$builtInMessage = preg_replace_callback('/\{(\w+)\}/', static function ($match) use ($placeholders) {
|
||||||
$key = $match[1];
|
$key = $match[1];
|
||||||
$value = $placeholders[$key] ?? '{'.$key.'}';
|
$value = $placeholders[$key] ?? '{'.$key.'}';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ final class ResourceResultFormatter
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($allAreEmbeddedResource && $hasEmbeddedResource) {
|
if ($allAreEmbeddedResource && $hasEmbeddedResource) {
|
||||||
return array_map(fn ($item) => $item->resource, $readResult);
|
return array_map(static fn ($item) => $item->resource, $readResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($hasResourceContents || $hasEmbeddedResource) {
|
if ($hasResourceContents || $hasEmbeddedResource) {
|
||||||
|
|
|
||||||
|
|
@ -344,10 +344,10 @@ final class Registry implements RegistryInterface
|
||||||
public function getDiscoveryState(): DiscoveryState
|
public function getDiscoveryState(): DiscoveryState
|
||||||
{
|
{
|
||||||
return new DiscoveryState(
|
return new DiscoveryState(
|
||||||
tools: array_filter($this->tools, fn ($tool) => !$tool->isManual),
|
tools: array_filter($this->tools, static fn ($tool) => !$tool->isManual),
|
||||||
resources: array_filter($this->resources, fn ($resource) => !$resource->isManual),
|
resources: array_filter($this->resources, static fn ($resource) => !$resource->isManual),
|
||||||
prompts: array_filter($this->prompts, fn ($prompt) => !$prompt->isManual),
|
prompts: array_filter($this->prompts, static fn ($prompt) => !$prompt->isManual),
|
||||||
resourceTemplates: array_filter($this->resourceTemplates, fn ($template) => !$template->isManual),
|
resourceTemplates: array_filter($this->resourceTemplates, static fn ($template) => !$template->isManual),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -185,19 +185,17 @@ final class ReferenceHandler implements ReferenceHandlerInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
return $value;
|
return $value;
|
||||||
} else {
|
|
||||||
if (\is_string($argument)) {
|
|
||||||
foreach ($typeName::cases() as $case) {
|
|
||||||
if ($case->name === $argument) {
|
|
||||||
return $case;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$validNames = array_map(fn ($c) => $c->name, $typeName::cases());
|
|
||||||
throw new InvalidArgumentException("Invalid value '{$argument}' for unit enum {$typeName}. Expected one of: ".implode(', ', $validNames).'.');
|
|
||||||
} else {
|
|
||||||
throw new InvalidArgumentException("Invalid value type '{$argument}' for unit enum {$typeName}. Expected a string matching a case name.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (\is_string($argument)) {
|
||||||
|
foreach ($typeName::cases() as $case) {
|
||||||
|
if ($case->name === $argument) {
|
||||||
|
return $case;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$validNames = array_map(static fn ($c) => $c->name, $typeName::cases());
|
||||||
|
throw new InvalidArgumentException("Invalid value '{$argument}' for unit enum {$typeName}. Expected one of: ".implode(', ', $validNames).'.');
|
||||||
|
}
|
||||||
|
throw new InvalidArgumentException("Invalid value type '{$argument}' for unit enum {$typeName}. Expected a string matching a case name.");
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ class Annotations implements \JsonSerializable
|
||||||
}
|
}
|
||||||
if (null !== $this->audience) {
|
if (null !== $this->audience) {
|
||||||
foreach ($this->audience as $role) {
|
foreach ($this->audience as $role) {
|
||||||
if (!($role instanceof Role)) {
|
if (!$role instanceof Role) {
|
||||||
throw new InvalidArgumentException('All audience members must be instances of Role enum.');
|
throw new InvalidArgumentException('All audience members must be instances of Role enum.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -60,7 +60,7 @@ class Annotations implements \JsonSerializable
|
||||||
{
|
{
|
||||||
$audience = null;
|
$audience = null;
|
||||||
if (isset($data['audience']) && \is_array($data['audience'])) {
|
if (isset($data['audience']) && \is_array($data['audience'])) {
|
||||||
$audience = array_map(fn (string $r) => Role::from($r), $data['audience']);
|
$audience = array_map(static fn (string $r) => Role::from($r), $data['audience']);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new self(
|
return new self(
|
||||||
|
|
@ -76,7 +76,7 @@ class Annotations implements \JsonSerializable
|
||||||
{
|
{
|
||||||
$data = [];
|
$data = [];
|
||||||
if (null !== $this->audience) {
|
if (null !== $this->audience) {
|
||||||
$data['audience'] = array_map(fn (Role $r) => $r->value, $this->audience);
|
$data['audience'] = array_map(static fn (Role $r) => $r->value, $this->audience);
|
||||||
}
|
}
|
||||||
if (null !== $this->priority) {
|
if (null !== $this->priority) {
|
||||||
$data['priority'] = $this->priority;
|
$data['priority'] = $this->priority;
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ class Prompt implements \JsonSerializable
|
||||||
) {
|
) {
|
||||||
if (null !== $this->arguments) {
|
if (null !== $this->arguments) {
|
||||||
foreach ($this->arguments as $arg) {
|
foreach ($this->arguments as $arg) {
|
||||||
if (!($arg instanceof PromptArgument)) {
|
if (!$arg instanceof PromptArgument) {
|
||||||
throw new InvalidArgumentException('All items in Prompt "arguments" must be PromptArgument instances.');
|
throw new InvalidArgumentException('All items in Prompt "arguments" must be PromptArgument instances.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -64,7 +64,7 @@ class Prompt implements \JsonSerializable
|
||||||
}
|
}
|
||||||
$arguments = null;
|
$arguments = null;
|
||||||
if (isset($data['arguments']) && \is_array($data['arguments'])) {
|
if (isset($data['arguments']) && \is_array($data['arguments'])) {
|
||||||
$arguments = array_map(fn (array $argData) => PromptArgument::fromArray($argData), $data['arguments']);
|
$arguments = array_map(static fn (array $argData) => PromptArgument::fromArray($argData), $data['arguments']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($data['_meta']) && !\is_array($data['_meta'])) {
|
if (!empty($data['_meta']) && !\is_array($data['_meta'])) {
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ class ListPromptsResult implements ResultInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
return new self(
|
return new self(
|
||||||
array_map(fn (array $prompt) => Prompt::fromArray($prompt), $data['prompts']),
|
array_map(static fn (array $prompt) => Prompt::fromArray($prompt), $data['prompts']),
|
||||||
$data['nextCursor'] ?? null
|
$data['nextCursor'] ?? null
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ class ListResourceTemplatesResult implements ResultInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
return new self(
|
return new self(
|
||||||
array_map(fn (array $resourceTemplate) => ResourceTemplate::fromArray($resourceTemplate), $data['resourceTemplates']),
|
array_map(static fn (array $resourceTemplate) => ResourceTemplate::fromArray($resourceTemplate), $data['resourceTemplates']),
|
||||||
$data['nextCursor'] ?? null
|
$data['nextCursor'] ?? null
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ class ListResourcesResult implements ResultInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
return new self(
|
return new self(
|
||||||
array_map(fn (array $resource) => ResourceSchema::fromArray($resource), $data['resources']),
|
array_map(static fn (array $resource) => ResourceSchema::fromArray($resource), $data['resources']),
|
||||||
$data['nextCursor'] ?? null
|
$data['nextCursor'] ?? null
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue