Primo Committ
This commit is contained in:
200
vendor/facade/ignition/src/ErrorPage/ErrorPageViewModel.php
vendored
Normal file
200
vendor/facade/ignition/src/ErrorPage/ErrorPageViewModel.php
vendored
Normal file
@@ -0,0 +1,200 @@
|
||||
<?php
|
||||
|
||||
namespace Facade\Ignition\ErrorPage;
|
||||
|
||||
use Closure;
|
||||
use Exception;
|
||||
use Facade\FlareClient\Report;
|
||||
use Facade\Ignition\Ignition;
|
||||
use Facade\Ignition\IgnitionConfig;
|
||||
use Facade\Ignition\Solutions\SolutionTransformer;
|
||||
use Illuminate\Contracts\Support\Arrayable;
|
||||
use Laravel\Telescope\Http\Controllers\HomeController;
|
||||
use Laravel\Telescope\IncomingExceptionEntry;
|
||||
use Laravel\Telescope\Telescope;
|
||||
use Throwable;
|
||||
|
||||
class ErrorPageViewModel implements Arrayable
|
||||
{
|
||||
/** @var \Throwable|null */
|
||||
protected $throwable;
|
||||
|
||||
/** @var array */
|
||||
protected $solutions;
|
||||
|
||||
/** @var \Facade\Ignition\IgnitionConfig */
|
||||
protected $ignitionConfig;
|
||||
|
||||
/** @var \Facade\FlareClient\Report */
|
||||
protected $report;
|
||||
|
||||
/** @var string */
|
||||
protected $defaultTab;
|
||||
|
||||
/** @var array */
|
||||
protected $defaultTabProps = [];
|
||||
|
||||
/** @var string */
|
||||
protected $appEnv;
|
||||
|
||||
/** @var bool */
|
||||
protected $appDebug;
|
||||
|
||||
public function __construct(?Throwable $throwable, IgnitionConfig $ignitionConfig, Report $report, array $solutions)
|
||||
{
|
||||
$this->throwable = $throwable;
|
||||
|
||||
$this->ignitionConfig = $ignitionConfig;
|
||||
|
||||
$this->report = $report;
|
||||
|
||||
$this->solutions = $solutions;
|
||||
|
||||
$this->appEnv = config('app.env');
|
||||
$this->appDebug = config('app.debug');
|
||||
}
|
||||
|
||||
public function throwableString(): string
|
||||
{
|
||||
if (! $this->throwable) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$throwableString = sprintf(
|
||||
"%s: %s in file %s on line %d\n\n%s\n",
|
||||
get_class($this->throwable),
|
||||
$this->throwable->getMessage(),
|
||||
$this->throwable->getFile(),
|
||||
$this->throwable->getLine(),
|
||||
$this->report->getThrowable()->getTraceAsString()
|
||||
);
|
||||
|
||||
return htmlspecialchars($throwableString);
|
||||
}
|
||||
|
||||
public function telescopeUrl(): ?string
|
||||
{
|
||||
try {
|
||||
if (! class_exists(Telescope::class)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (! count(Telescope::$entriesQueue)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$telescopeEntry = collect(Telescope::$entriesQueue)->first(function ($entry) {
|
||||
return $entry instanceof IncomingExceptionEntry;
|
||||
});
|
||||
|
||||
if (is_null($telescopeEntry)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$telescopeEntryId = (string) $telescopeEntry->uuid;
|
||||
|
||||
return url(action([HomeController::class, 'index'])."/exceptions/{$telescopeEntryId}");
|
||||
} catch (Exception $exception) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public function title(): string
|
||||
{
|
||||
$message = htmlspecialchars($this->report->getMessage());
|
||||
|
||||
return "🧨 {$message}";
|
||||
}
|
||||
|
||||
public function config(): array
|
||||
{
|
||||
return $this->ignitionConfig->toArray();
|
||||
}
|
||||
|
||||
public function solutions(): array
|
||||
{
|
||||
$solutions = [];
|
||||
|
||||
foreach ($this->solutions as $solution) {
|
||||
$solutions[] = (new SolutionTransformer($solution))->toArray();
|
||||
}
|
||||
|
||||
return $solutions;
|
||||
}
|
||||
|
||||
protected function shareEndpoint(): string
|
||||
{
|
||||
try {
|
||||
// use string notation as L5.5 and L5.6 don't support array notation yet
|
||||
return action('\Facade\Ignition\Http\Controllers\ShareReportController');
|
||||
} catch (Exception $exception) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
public function report(): array
|
||||
{
|
||||
return $this->report->toArray();
|
||||
}
|
||||
|
||||
public function jsonEncode($data): string
|
||||
{
|
||||
$jsonOptions = JSON_PARTIAL_OUTPUT_ON_ERROR | JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT;
|
||||
|
||||
return json_encode($data, $jsonOptions);
|
||||
}
|
||||
|
||||
public function getAssetContents(string $asset): string
|
||||
{
|
||||
$assetPath = __DIR__."/../../resources/compiled/{$asset}";
|
||||
|
||||
return file_get_contents($assetPath);
|
||||
}
|
||||
|
||||
public function styles(): array
|
||||
{
|
||||
return array_keys(Ignition::styles());
|
||||
}
|
||||
|
||||
public function scripts(): array
|
||||
{
|
||||
return array_keys(Ignition::scripts());
|
||||
}
|
||||
|
||||
public function tabs(): string
|
||||
{
|
||||
return json_encode(Ignition::$tabs);
|
||||
}
|
||||
|
||||
public function defaultTab(?string $defaultTab, ?array $defaultTabProps)
|
||||
{
|
||||
$this->defaultTab = $defaultTab ?? 'StackTab';
|
||||
|
||||
if ($defaultTabProps) {
|
||||
$this->defaultTabProps = $defaultTabProps;
|
||||
}
|
||||
}
|
||||
|
||||
public function toArray(): array
|
||||
{
|
||||
return [
|
||||
'throwableString' => $this->throwableString(),
|
||||
'telescopeUrl' => $this->telescopeUrl(),
|
||||
'shareEndpoint' => $this->shareEndpoint(),
|
||||
'title' => $this->title(),
|
||||
'config' => $this->config(),
|
||||
'solutions' => $this->solutions(),
|
||||
'report' => $this->report(),
|
||||
'housekeepingEndpoint' => url(config('ignition.housekeeping_endpoint_prefix', '_ignition')),
|
||||
'styles' => $this->styles(),
|
||||
'scripts' => $this->scripts(),
|
||||
'tabs' => $this->tabs(),
|
||||
'jsonEncode' => Closure::fromCallable([$this, 'jsonEncode']),
|
||||
'getAssetContents' => Closure::fromCallable([$this, 'getAssetContents']),
|
||||
'defaultTab' => $this->defaultTab,
|
||||
'defaultTabProps' => $this->defaultTabProps,
|
||||
'appEnv' => $this->appEnv,
|
||||
'appDebug' => $this->appDebug,
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user