Skip to content

Commit 105ec89

Browse files
authored
AssetLocator: entrypoints with absolute url should not be changed (#37)
* AssetLocator: move locateInBuildDirectory and locateInPublicPath methods login to method locateInPath * AssetLocator: entrypoints with absolute url should not be changed
1 parent 21a23a0 commit 105ec89

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

src/AssetLocator.php

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,33 @@ public function __construct(
3737
$this->ignoredAssetNames = $ignoredAssetNames;
3838
}
3939

40-
public function locateInPublicPath(string $asset): string
40+
private function locateInPath(string $path, string $asset): string
4141
{
4242
if ($this->devServer->isAvailable() && \in_array($asset, $this->ignoredAssetNames, true)) {
4343
return 'data:,';
4444
}
4545

46-
return \rtrim($this->publicPathProvider->getPublicPath(), '/') . '/' . \ltrim($this->assetResolver->resolveAssetName($asset), '/');
46+
$assetName = $this->assetResolver->resolveAssetName($asset);
47+
48+
if ($this->isAbsoluteUrl($assetName)) {
49+
return $assetName;
50+
}
51+
52+
return \rtrim($path, '/') . '/' . \ltrim($assetName, '/');
53+
}
54+
55+
public function locateInPublicPath(string $asset): string
56+
{
57+
return $this->locateInPath($this->publicPathProvider->getPublicPath(), $asset);
4758
}
4859

4960
public function locateInBuildDirectory(string $asset): string
5061
{
51-
if ($this->devServer->isAvailable() && \in_array($asset, $this->ignoredAssetNames, true)) {
52-
return 'data:,';
53-
}
62+
return $this->locateInPath($this->directoryProvider->getBuildDirectory(), $asset);
63+
}
5464

55-
return \rtrim($this->directoryProvider->getBuildDirectory(), '/') . '/' . \ltrim($this->assetResolver->resolveAssetName($asset), '/');
65+
private function isAbsoluteUrl(string $url): bool
66+
{
67+
return strpos($url, '://') !== false || substr($url, 0, 2) === '//';
5668
}
5769
}

tests/AssetLocatorTest.phpt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,36 +19,45 @@ final class AssetLocatorTest extends TestCase
1919
{
2020
$directoryProvider = createBuildDirectoryProvider('/home/user');
2121
$pathProvider = createPublicPathProvider('/foo');
22-
$assetResolver = createAssetNameResolver(['bar.js' => 'bar.js']);
22+
$assetResolver = createAssetNameResolver(['bar.js' => 'bar.js', 'foo1.js' => 'http://localhost/foo1.js', 'foo2.js' => '//localhost/foo2.js']);
2323
$devServer = createDisabledDevServer();
2424

2525
$assetLocator = new AssetLocator($directoryProvider, $pathProvider, $assetResolver, $devServer, []);
2626
Assert::same('/home/user/bar.js', $assetLocator->locateInBuildDirectory('bar.js'));
27+
Assert::same('http://localhost/foo1.js', $assetLocator->locateInBuildDirectory('foo1.js'));
28+
Assert::same('//localhost/foo2.js', $assetLocator->locateInBuildDirectory('foo2.js'));
2729
}
2830

2931
public function testLocateInPublicPath(): void
3032
{
3133
$directoryProvider = createBuildDirectoryProvider('/home/user');
3234
$pathProvider = createPublicPathProvider('/foo');
33-
$assetResolver = createAssetNameResolver(['bar.js' => 'bar.js']);
35+
$assetResolver = createAssetNameResolver(['bar.js' => 'bar.js', 'foo1.js' => 'http://localhost/foo1.js', 'foo2.js' => '//localhost/foo2.js']);
3436
$devServer = createDisabledDevServer();
3537

3638
$assetLocator = new AssetLocator($directoryProvider, $pathProvider, $assetResolver, $devServer, []);
3739
Assert::same('/foo/bar.js', $assetLocator->locateInPublicPath('bar.js'));
40+
Assert::same('http://localhost/foo1.js', $assetLocator->locateInBuildDirectory('foo1.js'));
41+
Assert::same('//localhost/foo2.js', $assetLocator->locateInBuildDirectory('foo2.js'));
3842
}
3943

4044
public function testIgnoredAssets(): void
4145
{
4246
$directoryProvider = createBuildDirectoryProvider('/home/user');
4347
$pathProvider = createPublicPathProvider('/foo');
44-
$assetResolver = createAssetNameResolver(['bar.js' => 'bar.js']);
48+
$assetResolver = createAssetNameResolver(['bar.js' => 'bar.js', 'foo1.js' => 'http://localhost/foo1.js', 'foo2.js' => '//localhost/foo2.js']);
4549
$devServer = createEnabledDevServer(true);
4650

4751
$assetLocator = new AssetLocator($directoryProvider, $pathProvider, $assetResolver, $devServer, ['foo.css']);
4852
Assert::same('data:,', $assetLocator->locateInBuildDirectory('foo.css'));
4953
Assert::same('data:,', $assetLocator->locateInPublicPath('foo.css'));
5054
Assert::same('/home/user/bar.js', $assetLocator->locateInBuildDirectory('bar.js'));
5155
Assert::same('/foo/bar.js', $assetLocator->locateInPublicPath('bar.js'));
56+
Assert::same('http://localhost/foo1.js', $assetLocator->locateInBuildDirectory('foo1.js'));
57+
Assert::same('http://localhost/foo1.js', $assetLocator->locateInPublicPath('foo1.js'));
58+
Assert::same('//localhost/foo2.js', $assetLocator->locateInBuildDirectory('foo2.js'));
59+
Assert::same('//localhost/foo2.js', $assetLocator->locateInPublicPath('foo2.js'));
60+
Assert::same('data:,', $assetLocator->locateInBuildDirectory('foo.css'));
5261
}
5362
}
5463

0 commit comments

Comments
 (0)