OneBot: Leantime 改造版源码(BOM/Univer 表格/AI 接管/品牌替换等)
This commit is contained in:
118
app/Core/Support/Mix.php
Normal file
118
app/Core/Support/Mix.php
Normal file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
namespace Leantime\Core\Support;
|
||||
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Str;
|
||||
use Leantime\Core\Events\DispatchesEvents;
|
||||
|
||||
class Mix
|
||||
{
|
||||
use DispatchesEvents;
|
||||
|
||||
private $manifest = [];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
// if (! Cache::store('installation')->has('manifest://' . ($manifestDir = APP_ROOT . '/public/dist'))) {
|
||||
// Cache::store('installation')->put('manifest://' . $manifestDir, json_decode(file_get_contents("$manifestDir/mix-manifest.json"), true), 60 * 60 * 24 * 7);
|
||||
// }
|
||||
// $this->manifest[$manifestDir] = Cache::store('installation')->get('manifest://' . $manifestDir);
|
||||
$this->manifest[$manifestDir = APP_ROOT.'/public/dist'] = json_decode(file_get_contents("$manifestDir/mix-manifest.json"), true);
|
||||
|
||||
/**
|
||||
* WARNING: All files in the manifest directories will be exposed to public queries!
|
||||
*
|
||||
* @var string[] $manifestDirectories
|
||||
**/
|
||||
$manifestDirectories = self::dispatchFilter('mix_manifest_directories', []);
|
||||
|
||||
if (empty($manifestDirectories) || ! is_array($manifestDirectories)) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($manifestDirectories as $manifestDirectory) {
|
||||
$manifestDirectory = rtrim($manifestDirectory, '/');
|
||||
// if (Cache::store('installation')->has('manifest://' . $manifestDirectory)) {
|
||||
// $this->manifest[$manifestDirectory] = Cache::get('manifest://' . $manifestDirectory);
|
||||
// continue;
|
||||
// }
|
||||
|
||||
if (! file_exists($manifestPath = $manifestDirectory.'/mix-manifest.json')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Cache::store('installation')->put('manifest://' . $manifestDirectory, array_map(
|
||||
// fn ($path) => $this->preparePath($path, $manifestDirectory),
|
||||
// json_decode(file_get_contents($manifestPath), true)
|
||||
// ), 60 * 60 * 24 * 7);
|
||||
//
|
||||
// $this->manifest[$manifestDirectory] = Cache::store('installation')->get('manifest://' . $manifestDirectory);
|
||||
|
||||
$this->manifest[$manifestDirectory] = array_map(
|
||||
fn ($path) => $this->preparePath($path, $manifestDirectory),
|
||||
json_decode(file_get_contents($manifestPath), true)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function __invoke(string $path, string $manifestDirectory = ''): string
|
||||
{
|
||||
$manifestDirectory = Str::start('/', $manifestDirectory ?: APP_ROOT.'/public/dist');
|
||||
$path = Str::start($path, '/');
|
||||
|
||||
if (! isset($this->manifest[$manifestDirectory])) {
|
||||
throw new \Exception("Unable to locate Manifest in: {$manifestDirectory}.");
|
||||
}
|
||||
|
||||
if (! isset($this->manifest[$manifestDirectory][$path])) {
|
||||
throw new \InvalidArgumentException("Unable to locate Mix file: {$path}.");
|
||||
}
|
||||
|
||||
return $this->manifest[$manifestDirectory][$path];
|
||||
}
|
||||
|
||||
private function preparePath(string $path, string $manifestDirectory): string
|
||||
{
|
||||
if (str_starts_with($manifestDirectory, APP_ROOT.'/app')) {
|
||||
$urlPrefix = Str::of($manifestDirectory)
|
||||
->replace(APP_ROOT.'/app', '')
|
||||
->ltrim('/')
|
||||
->explode('/')
|
||||
->map(fn ($pathPart) => Str::slug($pathPart))
|
||||
->join('/');
|
||||
|
||||
$urlPrefix = Str::of($urlPrefix)
|
||||
->prepend('/api/static-asset/')
|
||||
->rtrim('/')
|
||||
->toString();
|
||||
|
||||
} elseif (str_starts_with($manifestDirectory, 'phar://'.APP_ROOT.'/app')) {
|
||||
|
||||
$urlPrefix = Str::of($manifestDirectory)
|
||||
->replace('phar://'.APP_ROOT.'/app', '')
|
||||
->ltrim('/')
|
||||
->explode('/')
|
||||
->join('/');
|
||||
|
||||
$urlPrefix = Str::of($urlPrefix)
|
||||
->prepend('/api/static-asset/')
|
||||
->rtrim('/')
|
||||
->toString();
|
||||
|
||||
} else {
|
||||
$urlPrefix = Str::of($manifestDirectory)
|
||||
->replace(APP_ROOT.'/public', '')
|
||||
->start('/public')
|
||||
->rtrim('/')
|
||||
->toString();
|
||||
}
|
||||
|
||||
return $urlPrefix.Str::start($path, '/');
|
||||
}
|
||||
|
||||
public function getManifest(): array
|
||||
{
|
||||
return $this->manifest;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user