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

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

+26-2
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)
0