@@ -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}
0 commit comments