From 72f1d485dba2be128e51aecf0d8198f0e94e3c88 Mon Sep 17 00:00:00 2001 From: Maelan LE BORGNE Date: Wed, 11 Oct 2023 09:21:38 +0200 Subject: [PATCH 1/3] Added packageName and filePath to ImportMapEntry when requiring --- .../Component/AssetMapper/ImportMap/ImportMapManager.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/AssetMapper/ImportMap/ImportMapManager.php b/src/Symfony/Component/AssetMapper/ImportMap/ImportMapManager.php index 6144eab323f37..eebba71d6e7ca 100644 --- a/src/Symfony/Component/AssetMapper/ImportMap/ImportMapManager.php +++ b/src/Symfony/Component/AssetMapper/ImportMap/ImportMapManager.php @@ -295,13 +295,15 @@ private function requirePackages(array $packagesToRequire, ImportMapEntries $imp $resolvedPackages = $this->resolver->resolvePackages($packagesToRequire); foreach ($resolvedPackages as $resolvedPackage) { $importName = $resolvedPackage->requireOptions->importName ?: $resolvedPackage->requireOptions->packageName; - + [$packageName, $filePath] = ImportMapConfigReader::splitPackageNameAndFilePath($importName); $newEntry = new ImportMapEntry( $importName, path: $resolvedPackage->requireOptions->path, version: $resolvedPackage->version, type: $resolvedPackage->type, isEntrypoint: $resolvedPackage->requireOptions->entrypoint, + packageName: $packageName, + filePath: $filePath, ); $importMapEntries->add($newEntry); $addedEntries[] = $newEntry; From 8adabc1d021b2fda4645a67e6025b96f4661f7bc Mon Sep 17 00:00:00 2001 From: Maelan LE BORGNE Date: Thu, 12 Oct 2023 14:04:43 +0200 Subject: [PATCH 2/3] Throw exception before download query if entry is not valid --- .../AssetMapper/ImportMap/Resolver/JsDelivrEsmResolver.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Symfony/Component/AssetMapper/ImportMap/Resolver/JsDelivrEsmResolver.php b/src/Symfony/Component/AssetMapper/ImportMap/Resolver/JsDelivrEsmResolver.php index a14a8f0ac5e7b..1e07d27ebcb62 100644 --- a/src/Symfony/Component/AssetMapper/ImportMap/Resolver/JsDelivrEsmResolver.php +++ b/src/Symfony/Component/AssetMapper/ImportMap/Resolver/JsDelivrEsmResolver.php @@ -161,6 +161,9 @@ public function downloadPackages(array $importMapEntries, callable $progressCall foreach ($importMapEntries as $package => $entry) { $pattern = ImportMapType::CSS === $entry->type ? $this->distUrlCssPattern : $this->distUrlPattern; + if (null === $entry->packageName || null === $entry->version || null === $entry->filePath) { + throw new RuntimeException(sprintf('The package %s cannot be downloaded. "packageName", "version" or "filePath" must be defined.', $entry->importName)); + } $url = sprintf($pattern, $entry->packageName, $entry->version, $entry->filePath); $responses[$package] = $this->httpClient->request('GET', $url); From 47e334d858732d36a742e833fcaa7bf1f0505f7a Mon Sep 17 00:00:00 2001 From: Maelan LE BORGNE Date: Thu, 12 Oct 2023 14:29:44 +0200 Subject: [PATCH 3/3] Throw exception before download query if entry is not valid --- .../AssetMapper/ImportMap/Resolver/JsDelivrEsmResolver.php | 2 +- .../Tests/ImportMap/Resolver/JsDelivrEsmResolverTest.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/AssetMapper/ImportMap/Resolver/JsDelivrEsmResolver.php b/src/Symfony/Component/AssetMapper/ImportMap/Resolver/JsDelivrEsmResolver.php index 1e07d27ebcb62..bdc6acc43ab98 100644 --- a/src/Symfony/Component/AssetMapper/ImportMap/Resolver/JsDelivrEsmResolver.php +++ b/src/Symfony/Component/AssetMapper/ImportMap/Resolver/JsDelivrEsmResolver.php @@ -162,7 +162,7 @@ public function downloadPackages(array $importMapEntries, callable $progressCall foreach ($importMapEntries as $package => $entry) { $pattern = ImportMapType::CSS === $entry->type ? $this->distUrlCssPattern : $this->distUrlPattern; if (null === $entry->packageName || null === $entry->version || null === $entry->filePath) { - throw new RuntimeException(sprintf('The package %s cannot be downloaded. "packageName", "version" or "filePath" must be defined.', $entry->importName)); + throw new RuntimeException(sprintf('The package "%s" cannot be downloaded. "packageName", "version" and "filePath" must be defined.', $entry->importName)); } $url = sprintf($pattern, $entry->packageName, $entry->version, $entry->filePath); diff --git a/src/Symfony/Component/AssetMapper/Tests/ImportMap/Resolver/JsDelivrEsmResolverTest.php b/src/Symfony/Component/AssetMapper/Tests/ImportMap/Resolver/JsDelivrEsmResolverTest.php index b27ff210f0448..8b11d991c1b14 100644 --- a/src/Symfony/Component/AssetMapper/Tests/ImportMap/Resolver/JsDelivrEsmResolverTest.php +++ b/src/Symfony/Component/AssetMapper/Tests/ImportMap/Resolver/JsDelivrEsmResolverTest.php @@ -293,7 +293,7 @@ public function testDownloadPackages(array $importMapEntries, array $expectedReq public static function provideDownloadPackagesTests() { yield 'single package' => [ - ['lodash' => new ImportMapEntry('lodash', version: '1.2.3', packageName: 'lodash')], + ['lodash' => new ImportMapEntry('lodash', version: '1.2.3', packageName: 'lodash', filePath: '')], [ [ 'url' => '/lodash@1.2.3/+esm', @@ -333,7 +333,7 @@ public static function provideDownloadPackagesTests() yield 'multiple files' => [ [ - 'lodash' => new ImportMapEntry('lodash', version: '1.2.3', packageName: 'lodash'), + 'lodash' => new ImportMapEntry('lodash', version: '1.2.3', packageName: 'lodash', filePath: ''), 'chart.js/auto' => new ImportMapEntry('chart.js/auto', version: '4.5.6', packageName: 'chart.js', filePath: '/auto'), 'bootstrap/dist/bootstrap.css' => new ImportMapEntry('bootstrap/dist/bootstrap.css', version: '5.0.6', type: ImportMapType::CSS, packageName: 'bootstrap', filePath: '/dist/bootstrap.css'), ],