Skip to content

Commit b49807a

Browse files
[AssetMapper] Fix wiring resolvers, send requests in parallel and use readonly properties in MappedAsset
1 parent 24e26a1 commit b49807a

File tree

4 files changed

+36
-14
lines changed

4 files changed

+36
-14
lines changed

DependencyInjection/Compiler/UnusedTagsPass.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class UnusedTagsPass implements CompilerPassInterface
2525
'annotations.cached_reader',
2626
'assets.package',
2727
'asset_mapper.compiler',
28+
'asset_mapper.importmap.resolver',
2829
'auto_alias',
2930
'cache.pool',
3031
'cache.pool.clearer',

DependencyInjection/Configuration.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -902,7 +902,7 @@ private function addAssetMapperSection(ArrayNodeDefinition $rootNode, callable $
902902
->defaultValue('%kernel.project_dir%/assets/vendor')
903903
->end()
904904
->scalarNode('provider')
905-
->info('The provider (CDN) to use'.class_exists(ImportMapManager::class) ? sprintf(' (e.g.: "%s").', implode('", "', ImportMapManager::PROVIDERS)) : '.')
905+
->info('The provider (CDN) to use'.(class_exists(ImportMapManager::class) ? sprintf(' (e.g.: "%s").', implode('", "', ImportMapManager::PROVIDERS)) : '.'))
906906
->defaultValue('jsdelivr.esm')
907907
->end()
908908
->end()

DependencyInjection/FrameworkExtension.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
use Symfony\Component\AssetMapper\AssetMapper;
3535
use Symfony\Component\AssetMapper\Compiler\AssetCompilerInterface;
3636
use Symfony\Component\AssetMapper\ImportMap\ImportMapManager;
37+
use Symfony\Component\AssetMapper\ImportMap\Resolver\PackageResolverInterface;
3738
use Symfony\Component\BrowserKit\AbstractBrowser;
3839
use Symfony\Component\Cache\Adapter\AdapterInterface;
3940
use Symfony\Component\Cache\Adapter\ArrayAdapter;
@@ -1316,14 +1317,8 @@ private function registerAssetMapperConfiguration(array $config, ContainerBuilde
13161317
->replaceArgument(3, $config['vendor_dir'])
13171318
;
13181319

1319-
$importMapProviderId = 'asset_mapper.importmap.provider.jspm_provider';
1320-
if (ImportMapManager::PROVIDER_JSDELIVR_ESM === $config['provider']) {
1321-
$importMapProviderId = 'asset_mapper.importmap.provider.js_delivr_esm_provider';
1322-
}
1323-
$container->setAlias('asset_mapper.importmap.provider', new Alias($importMapProviderId));
1324-
13251320
$container
1326-
->getDefinition('asset_mapper.importmap.provider.jspm_provider')
1321+
->getDefinition('asset_mapper.importmap.resolver')
13271322
->replaceArgument(0, $config['provider'])
13281323
;
13291324

@@ -1332,6 +1327,9 @@ private function registerAssetMapperConfiguration(array $config, ContainerBuilde
13321327
->replaceArgument(2, $config['importmap_polyfill'] ?? ImportMapManager::POLYFILL_URL)
13331328
->replaceArgument(3, $config['importmap_script_attributes'])
13341329
;
1330+
1331+
$container->registerForAutoconfiguration(PackageResolverInterface::class)
1332+
->addTag('asset_mapper.importmap.resolver');
13351333
}
13361334

13371335
/**

Resources/config/asset_mapper.php

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@
2929
use Symfony\Component\AssetMapper\Factory\MappedAssetFactory;
3030
use Symfony\Component\AssetMapper\ImportMap\ImportMapManager;
3131
use Symfony\Component\AssetMapper\ImportMap\ImportMapRenderer;
32-
use Symfony\Component\AssetMapper\ImportMap\Providers\JsDelivrEsmImportMapProvider;
33-
use Symfony\Component\AssetMapper\ImportMap\Providers\JspmImportMapProvider;
32+
use Symfony\Component\AssetMapper\ImportMap\Resolver\JsDelivrEsmResolver;
33+
use Symfony\Component\AssetMapper\ImportMap\Resolver\JspmResolver;
34+
use Symfony\Component\AssetMapper\ImportMap\Resolver\PackageResolver;
3435
use Symfony\Component\AssetMapper\MapperAwareAssetPackage;
3536
use Symfony\Component\AssetMapper\Path\PublicAssetsPathResolver;
3637
use Symfony\Component\HttpKernel\Event\RequestEvent;
@@ -138,17 +139,39 @@
138139
service('asset_mapper.public_assets_path_resolver'),
139140
abstract_arg('importmap.php path'),
140141
abstract_arg('vendor directory'),
141-
// dynamic alias to the chosen provider
142-
service('asset_mapper.importmap.provider'),
142+
service('asset_mapper.importmap.resolver'),
143143
])
144144
->alias(ImportMapManager::class, 'asset_mapper.importmap.manager')
145145

146-
->set('asset_mapper.importmap.provider.jspm_provider', JspmImportMapProvider::class)
146+
->set('asset_mapper.importmap.resolver', PackageResolver::class)
147147
->args([
148148
abstract_arg('provider'),
149+
tagged_locator('asset_mapper.importmap.resolver'),
149150
])
150151

151-
->set('asset_mapper.importmap.provider.js_delivr_esm_provider', JsDelivrEsmImportMapProvider::class)
152+
->set('asset_mapper.importmap.resolver.jsdelivr_esm', JsDelivrEsmResolver::class)
153+
->args([service('http_client')])
154+
->tag('asset_mapper.importmap.resolver', ['resolver' => ImportMapManager::PROVIDER_JSDELIVR_ESM])
155+
156+
->set('asset_mapper.importmap.resolver.jspm', JspmResolver::class)
157+
->args([service('http_client'), ImportMapManager::PROVIDER_JSPM])
158+
->tag('asset_mapper.importmap.resolver', ['resolver' => ImportMapManager::PROVIDER_JSPM])
159+
160+
->set('asset_mapper.importmap.resolver.jspm_system', JspmResolver::class)
161+
->args([service('http_client'), ImportMapManager::PROVIDER_JSPM_SYSTEM])
162+
->tag('asset_mapper.importmap.resolver', ['resolver' => ImportMapManager::PROVIDER_JSPM_SYSTEM])
163+
164+
->set('asset_mapper.importmap.resolver.skypack', JspmResolver::class)
165+
->args([service('http_client'), ImportMapManager::PROVIDER_SKYPACK])
166+
->tag('asset_mapper.importmap.resolver', ['resolver' => ImportMapManager::PROVIDER_SKYPACK])
167+
168+
->set('asset_mapper.importmap.resolver.jsdelivr', JspmResolver::class)
169+
->args([service('http_client'), ImportMapManager::PROVIDER_JSDELIVR])
170+
->tag('asset_mapper.importmap.resolver', ['resolver' => ImportMapManager::PROVIDER_JSDELIVR])
171+
172+
->set('asset_mapper.importmap.resolver.unpkg', JspmResolver::class)
173+
->args([service('http_client'), ImportMapManager::PROVIDER_UNPKG])
174+
->tag('asset_mapper.importmap.resolver', ['resolver' => ImportMapManager::PROVIDER_UNPKG])
152175

153176
->set('asset_mapper.importmap.renderer', ImportMapRenderer::class)
154177
->args([

0 commit comments

Comments
 (0)