8000 [AssetMapper] Fix URL pattern when importing es-module-shims · symfony/symfony@1472137 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1472137

Browse files
hashbangedfabpot
authored andcommitted
[AssetMapper] Fix URL pattern when importing es-module-shims
1 parent 877b173 commit 1472137

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

src/Symfony/Component/AssetMapper/ImportMap/Resolver/JsDelivrEsmResolver.php

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ final class JsDelivrEsmResolver implements PackageResolverInterface
3030

3131
public const IMPORT_REGEX = '#(?:import\s*(?:\w+,)?(?:(?:\{[^}]*\}|\w+|\*\s*as\s+\w+)\s*\bfrom\s*)?|export\s*(?:\{[^}]*\}|\*)\s*from\s*)("/npm/((?:@[^/]+/)?[^@]+?)(?:@([^/]+))?((?:/[^/]+)*?)/\+esm")#';
3232

33+
private const ES_MODULE_SHIMS = 'es-module-shims';
34+
3335
private HttpClientInterface $httpClient;
3436

3537
public function __construct(
@@ -78,7 +80,7 @@ public function resolvePackages(array $packagesToRequire): array
7880
throw new RuntimeException(sprintf('Unable to find the latest version for package "%s" - try specifying the version manually.', $packageName));
7981
}
8082

81-
$pattern = str_ends_with($filePath, '.css') ? self::URL_PATTERN_DIST_CSS : self::URL_PATTERN_DIST;
83+
$pattern = $this->resolveUrlPattern($packageName, $filePath);
8284
$requiredPackages[$i][1] = $this->httpClient->request('GET', sprintf($pattern, $packageName, $version, $filePath));
8385
$requiredPackages[$i][4] = $version;
8486

@@ -169,7 +171,11 @@ public function downloadPackages(array $importMapEntries, callable $progressCall
169171
throw new \InvalidArgumentException(sprintf('The entry "%s" is not a remote package.', $entry->importName));
170172
}
171173

172-
$pattern = ImportMapType::CSS === $entry->type ? self::URL_PATTERN_DIST_CSS : self::URL_PATTERN_DIST;
174+
$pattern = $this->resolveUrlPattern(
175+
$entry->getPackageName(),
176+
$entry->getPackagePathString(),
177+
$entry->type,
178+
);
173179
$url = sprintf($pattern, $entry->getPackageName(), $entry->version, $entry->getPackagePathString());
174180

175181
$responses[$package] = [$this->httpClient->request('GET', $url), $entry];
@@ -326,4 +332,19 @@ private function makeImportsBare(string $content, array &$dependencies, array &$
326332

327333
return preg_replace('{/\*# sourceMappingURL=[^ ]*+ \*/}', '', $content);
328334
}
335+
336+
/**
337+
* Determine the URL pattern to be used by the HTTP Client.
338+
*/
339+
private function resolveUrlPattern(string $packageName, string $path, ImportMapType $type = null): string
340+
{
341+
// The URL for the es-module-shims polyfill package uses the CSS pattern to
342+
// prevent a syntax error in the browser console, so check the package name
343+
// as part of the condition.
344+
if (self::ES_MODULE_SHIMS === $packageName || str_ends_with($path, '.css') || ImportMapType::CSS === $type) {
345+
return self::URL_PATTERN_DIST_CSS;
346+
}
347+
348+
return self::URL_PATTERN_DIST;
349+
}
329350
}

src/Symfony/Component/AssetMapper/Tests/ImportMap/Resolver/JsDelivrEsmResolverTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -439,17 +439,17 @@ public static function provideDownloadPackagesTests()
439439
],
440440
[
441441
[
442-
'url' => '/es-module-shims@1.8.2/+esm',
442+
'url' => '/es-module-shims@1.8.2',
443443
'body' => <<<'EOF'
444-
const je="\n//# sourceURL=",Ue="\n//# sourceMappingURL=",Me=/^(text|application)\/(x-)?javascript(;|$)/,_e=/^(application)\/wasm(;|$)/,Ie=/^(text|application)\/json(;|$)/,Re=/^(text|application)\/css(;|$)/,Te=/url\(\s*(?:(["'])((?:\\.|[^\n\\"'])+)\1|((?:\\.|[^\s,"'()\\])+))\s*\)/g;export{t as default};
444+
const je="\n//# sourceURL=",Ue="\n//# sourceMappingURL=",Me=/^(text|application)\/(x-)?javascript(;|$)/,_e=/^(application)\/wasm(;|$)/,Ie=/^(text|application)\/json(;|$)/,Re=/^(text|application)\/css(;|$)/,Te=/url\(\s*(?:(["'])((?:\\.|[^\n\\"'])+)\1|((?:\\.|[^\s,"'()\\])+))\s*\)/g;
445445
//# sourceMappingURL=/sm/ef3916de598f421a779ba0e69af94655b2043095cde2410cc01893452d893338.map
446446
EOF
447447
],
448448
],
449449
[
450450
'es-module-shims' => [
451451
'content' => <<<'EOF'
452-
const je="\n//# sourceURL=",Ue="\n//# sourceMappingURL=",Me=/^(text|application)\/(x-)?javascript(;|$)/,_e=/^(application)\/wasm(;|$)/,Ie=/^(text|application)\/json(;|$)/,Re=/^(text|application)\/css(;|$)/,Te=/url\(\s*(?:(["'])((?:\\.|[^\n\\"'])+)\1|((?:\\.|[^\s,"'()\\])+))\s*\)/g;export{t as default};
452+
const je="\n//# sourceURL=",Ue="\n//# sourceMappingURL=",Me=/^(text|application)\/(x-)?javascript(;|$)/,_e=/^(application)\/wasm(;|$)/,Ie=/^(text|application)\/json(;|$)/,Re=/^(text|application)\/css(;|$)/,Te=/url\(\s*(?:(["'])((?:\\.|[^\n\\"'])+)\1|((?:\\.|[^\s,"'()\\])+))\s*\)/g;
453453
EOF,
454454
'dependencies' => [],
455455
'extraFiles' => [],

0 commit comments

Comments
 (0)
0