+47
-4
@@ -44,6 +44,7 @@ class Spot extends Main
|
||||
const PROJECT_NAME = 'LiveTrail';
|
||||
|
||||
const MAIN_PAGE = 'index';
|
||||
const VITE_APP = 'src/app.js';
|
||||
|
||||
private Project $oProject;
|
||||
private Media $oMedia;
|
||||
@@ -165,6 +166,8 @@ class Spot extends Main
|
||||
}
|
||||
|
||||
public function getAppMainPage(string $sCsrfToken='') {
|
||||
$asViteAssets = $this->getViteAssets();
|
||||
|
||||
return parent::getMainPage(
|
||||
array(
|
||||
'projects' => $this->oProject->getProjects(),
|
||||
@@ -186,18 +189,58 @@ class Spot extends Main
|
||||
'tags' => [
|
||||
'language' => $this->oLang->getLanguage(),
|
||||
'title' => self::PROJECT_NAME,
|
||||
'app_entry' => $asViteAssets['app']
|
||||
],
|
||||
'instances' => [
|
||||
'entrypoint' => $this->getAppEntryPoints()
|
||||
'css' => $asViteAssets['css'],
|
||||
'module' => $asViteAssets['module']
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
private function getAppEntryPoints() {
|
||||
private function getViteAssets() {
|
||||
$asManifest = json_decode(file_get_contents(__DIR__.'/../public/.vite/manifest.json'), true);
|
||||
$asAppImport = $asManifest[self::VITE_APP];
|
||||
|
||||
//Recursive search for chunk imports
|
||||
$asImports = array();
|
||||
$asSeenImports = array(self::VITE_APP => true);
|
||||
$this->appendViteImportedChunks($asManifest, $asAppImport, $asSeenImports, $asImports);
|
||||
|
||||
//CSS
|
||||
$asCssFiles = array();
|
||||
foreach(array_merge(array($asAppImport), $asImports) as $asChunk) {
|
||||
foreach($asChunk['css'] ?? array() as $sCssFile) $asCssFiles[] = $sCssFile;
|
||||
}
|
||||
|
||||
//Modules
|
||||
$asModuleFiles = array();
|
||||
foreach($asImports as $asImport) {
|
||||
if(str_ends_with($asImport['file'] ?? '', '.js')) $asModuleFiles[] = $asImport['file'];
|
||||
}
|
||||
|
||||
return array(
|
||||
'app' => $asAppImport['file'],
|
||||
'css' => $this->getViteAssetInstances($asCssFiles),
|
||||
'module' => $this->getViteAssetInstances($asModuleFiles)
|
||||
);
|
||||
}
|
||||
|
||||
private function appendViteImportedChunks($asManifest, $asChunk, &$asSeenImports, &$asImports) {
|
||||
foreach($asChunk['imports'] ?? array() as $sImport) {
|
||||
if(isset($asSeenImports[$sImport]) || !isset($asManifest[$sImport])) continue;
|
||||
|
||||
$asSeenImports[$sImport] = true;
|
||||
$this->appendViteImportedChunks($asManifest, $asManifest[$sImport], $asSeenImports, $asImports);
|
||||
$asImports[] = $asManifest[$sImport];
|
||||
}
|
||||
}
|
||||
|
||||
private function getViteAssetInstances($asFilePaths) {
|
||||
return array_map(
|
||||
function($sFileName) {return ['filename' => self::addTimestampToFilePath($sFileName)];},
|
||||
json_decode(file_get_contents('assets/entrypoints.json'), true)['entrypoints']['app']
|
||||
function($sFilePath) { return array('filename' => $sFilePath); },
|
||||
$asFilePaths
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user