1818use Composer \Package \PackageInterface ;
1919use Composer \Util \Filesystem ;
2020use TYPO3 \ClassAliasLoader \IncludeFile \PrependToken ;
21+ use TYPO3 \ClassAliasLoader \IncludeFile \SuffixToken ;
2122
2223/**
2324 * This class loops over all packages that are installed by composer and
@@ -94,10 +95,24 @@ public function generateAliasMapFiles(): bool
9495 return false ;
9596 }
9697
98+ $ suffix = null ;
99+ if (!$ config ->get ('autoloader-suffix ' ) && is_readable ($ vendorPath . '/autoload.php ' )) {
100+ $ content = file_get_contents ($ vendorPath . '/autoload.php ' );
101+ if (preg_match ('{ComposerAutoloaderInit([^:\s]+)::} ' , $ content , $ match )) {
102+ $ suffix = $ match [1 ];
103+ }
104+ }
105+ if (!$ suffix ) {
106+ $ suffix = $ config ->get ('autoloader-suffix ' ) ?: md5 (uniqid ('' , true ));
107+ }
108+
97109 $ includeFile = new IncludeFile (
98110 $ this ->io ,
99111 $ this ->composer ,
100112 [
113+ new SuffixToken (
114+ $ suffix
115+ ),
101116 new PrependToken (
102117 $ this ->composer ->getConfig ()
103118 ),
@@ -106,23 +121,34 @@ public function generateAliasMapFiles(): bool
106121 $ includeFile ->register ();
107122
108123 $ this ->io ->write ('<info>Generating ' . ($ classAliasMappingFound ? '' : 'empty ' ) . 'class alias map file</info> ' );
109- $ this ->generateAliasMapFile ($ aliasToClassNameMapping , $ classNameToAliasMapping , $ targetDir );
124+ $ this ->generateAliasMapFile ($ aliasToClassNameMapping , $ classNameToAliasMapping , $ targetDir, $ suffix );
110125
111126 return true ;
112127 }
113128
114- private function generateAliasMapFile (array $ aliasToClassNameMapping , array $ classNameToAliasMapping , string $ targetDir ): void
129+ private function generateAliasMapFile (array $ aliasToClassNameMapping , array $ classNameToAliasMapping , string $ targetDir, string $ suffix ): void
115130 {
116131 $ exportArray = [
117132 'aliasToClassNameMapping ' => $ aliasToClassNameMapping ,
118133 'classNameToAliasMapping ' => $ classNameToAliasMapping ,
119134 ];
120135
121- $ fileContent = '<?php ' . chr (10 ) . 'return ' ;
122- $ fileContent .= var_export ($ exportArray , true );
123- $ fileContent .= '; ' ;
136+ $ fileContent = <<<EOF
137+ <?php
124138
125- file_put_contents ($ targetDir . '/autoload_classaliasmap.php ' , $ fileContent );
139+ // autoload_classaliasmap_static.php @generated by ClassAliasLoader
140+
141+ namespace TYPO3\ClassAliasLoader;
142+
143+ class ClassAliasLoaderStaticInit $ suffix
144+ {
145+ public static \$aliasMap=
146+ EOF ;
147+ $ fileContent .= var_export ($ exportArray , true );
148+ $ fileContent .= ';
149+ }
150+ ' ;
151+ file_put_contents ($ targetDir . '/autoload_classaliasmap_static.php ' , $ fileContent );
126152 }
127153
128154 /**
0 commit comments