/**
* Set the transformation data. This will set a new resource instance on the response
* builder depending on what type of data is provided.
*
* @param mixed|null $data
* @param callable|string|null $transformer
* @param string|null $resourceKey
* @return self
*/
public function transform($data = null, $transformer = null, string $resourceKey = null) : SuccessResponseBuilder
{
$resource = $this->resourceFactory->make($data);
if (!is_null($resource->getData())) {
$model = $this->resolveModel($resource->getData());
$transformer = $this->resolveTransformer($model, $transformer);
$resourceKey = $this->resolveResourceKey($model, $resourceKey);
}
if ($transformer instanceof Transformer) {
$this->include($relations = $this->resolveNestedRelations($resource->getData()));
if ($transformer->allRelationsAllowed()) {
$transformer->setRelations($relations);
}
}
$this->resource = $resource->setTransformer($transformer)->setResourceKey($resourceKey);
return $this;
}