Skip to content

Commit 24ee20d

Browse files
committed
wip
1 parent f6c82c7 commit 24ee20d

5 files changed

Lines changed: 80 additions & 11 deletions

File tree

res/php/alias-loader-include.tmpl.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
declare(strict_types=1);
44

55
$composerAutoLoader = require dirname(__DIR__) . '/autoload.php';
6-
$classAliasMap = require dirname(__DIR__) . '/composer/autoload_classaliasmap.php';
76
$classAliasLoader = new TYPO3\ClassAliasLoader\ClassAliasLoader($composerAutoLoader);
8-
$classAliasLoader->setAliasMap($classAliasMap);
9-
$classAliasLoader->register('{$prepend}');
7+
require_once __DIR__ . '/autoload_classaliasmap_static.php';
8+
$classAliasLoader->setAliasMap(TYPO3\ClassAliasLoader\ClassAliasLoaderStaticInit{$suffix}::$aliasMap);
9+
$classAliasLoader->register({$prepend});
1010
TYPO3\ClassAliasLoader\ClassAliasMap::setClassAliasLoader($classAliasLoader);

src/ClassAliasMapGenerator.php

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Composer\Package\PackageInterface;
1919
use Composer\Util\Filesystem;
2020
use 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
/**

src/IncludeFile.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,6 @@ protected function getIncludeFileContent($includeFilePath)
106106
*/
107107
private static function replaceToken($name, $content, $subject)
108108
{
109-
return str_replace('\'{$' . $name . '}\'', $content, $subject);
109+
return str_replace('{$' . $name . '}', $content, $subject);
110110
}
111111
}

src/IncludeFile/SuffixToken.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace TYPO3\ClassAliasLoader\IncludeFile;
6+
7+
/*
8+
* This file is part of the class alias loader package.
9+
*
10+
* (c) Helmut Hummel <info@helhum.io>
11+
*
12+
* For the full copyright and license information, please view the LICENSE
13+
* file that was distributed with this source code.
14+
*/
15+
16+
use Composer\Config;
17+
use Composer\IO\IOInterface;
18+
19+
class SuffixToken implements TokenInterface
20+
{
21+
/**
22+
* @var string
23+
*/
24+
private $name = 'suffix';
25+
26+
public function __construct(readonly string $suffix)
27+
{
28+
}
29+
30+
public function getName(): string
31+
{
32+
return $this->name;
33+
}
34+
35+
public function getContent(string $includeFilePath): string
36+
{
37+
return $this->suffix;
38+
}
39+
}

tests/Unit/IncludeFileTest.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public function setUp(): void
7878
$this->ioMock,
7979
$this->composerMock,
8080
[
81+
new IncludeFile\SuffixToken('asdf'),
8182
new IncludeFile\PrependToken($configMock),
8283
]
8384
);
@@ -93,6 +94,9 @@ public function tearDown(): void
9394
public function includeFileCanBeWritten(): void
9495
{
9596
$this->subject->register();
96-
self::assertTrue(file_exists($this->testDir . IncludeFile::INCLUDE_FILE));
97+
self::assertFileExists($this->testDir . IncludeFile::INCLUDE_FILE);
98+
$contents = file_get_contents($this->testDir . IncludeFile::INCLUDE_FILE);
99+
self::assertIsString($contents);
100+
self::assertStringContainsString('ClassAliasLoaderStaticInitasdf', $contents);
97101
}
98102
}

0 commit comments

Comments
 (0)