Skip to content

Commit c7d35bc

Browse files
committed
[AssetMapper] Fix URL pattern when importing es-module-shims to prevent a JS console syntax error
1 parent e0df5c3 commit c7d35bc

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

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

Lines changed: 26 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+
public 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,22 @@ 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.
343+
if (self::ES_MODULE_SHIMS === $packageName) {
344+
return self::URL_PATTERN_DIST_CSS;
345+
}
346+
347+
if (str_ends_with($path, '.css') || ($type && ImportMapType::CSS === $type)) {
348+
return self::URL_PATTERN_DIST_CSS;
349+
}
350+
351+
return self::URL_PATTERN_DIST;
352+
}
329353
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy