packageManager->getPackage('core'), $this->packageManager->getPackage('backend'), $this->packageManager->getPackage('install'), ]; $bust = (string)$GLOBALS['EXEC_TIME']; if (!Environment::getContext()->isDevelopment()) { $bust = $this->hashService->hmac((new Typo3Version()) . Environment::getProjectPath(), self::class); } return new ImportMap( hashService: $this->hashService, packages: $packages, eventDispatcher: $this->createEventDispatcher($sitePath, $bust), ); } public function createEventDispatcher(string $sitePath, string $bust): EventDispatcherInterface { return new EventDispatcher( new class ($sitePath, $bust) implements ListenerProviderInterface { public function __construct(private string $sitePath, private string $bust) {} public function getListenersForEvent(object $event): iterable { if ($event instanceof ResolveVirtualJavaScriptImportEvent) { return [ function (ResolveVirtualJavaScriptImportEvent $event): void { if ($event->resolution === null && str_starts_with($event->virtualName, 'install-labels/')) { $parameters = [ 'install' => [ 'action' => 'labels', 'domain' => str_replace('install-labels/', '', $event->virtualName), 'bust' => $this->bust, ], ]; $event->resolution = '/' . ltrim($this->sitePath, '/') . '?__typo3_install&' . http_build_query($parameters, '', '&', PHP_QUERY_RFC3986); } }, ]; } return []; } } ); } }