From 724303ef6612b72d65794cc9f612f31dd233c7eb Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Mon, 15 May 2023 14:19:05 -0700 Subject: [PATCH] (dev/core#4279) Use esm-module-shims --- Civi/Core/Container.php | 3 +- Civi/Esm/ShimLoader.php | 81 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 Civi/Esm/ShimLoader.php diff --git a/Civi/Core/Container.php b/Civi/Core/Container.php index b7907b99db..e92ab7ebf0 100644 --- a/Civi/Core/Container.php +++ b/Civi/Core/Container.php @@ -392,7 +392,8 @@ class Container { [new Reference('action_object_provider')] ); - $container->setAlias('esm.loader', 'esm.loader.browser')->setPublic(TRUE); + // $container->setAlias('esm.loader', 'esm.loader.browser')->setPublic(TRUE); + $container->setAlias('esm.loader', 'esm.loader.shim')->setPublic(TRUE); \CRM_Utils_Hook::container($container); diff --git a/Civi/Esm/ShimLoader.php b/Civi/Esm/ShimLoader.php new file mode 100644 index 0000000000..49393e90d1 --- /dev/null +++ b/Civi/Esm/ShimLoader.php @@ -0,0 +1,81 @@ + + * +' + */ + protected function renderImportMap(array $importMap): string { + if (!$this->enableMap || empty($importMap)) { + return ''; + } + + $shimUrl = Civi::paths()->getUrl('[civicrm.bower]/es-module-shims/dist/es-module-shims.js'); + $shimHtml = sprintf("\n", htmlentities($shimUrl)); + + $flags = JSON_UNESCAPED_SLASHES; + if (Civi::settings()->get('debug_enabled')) { + $flags |= JSON_PRETTY_PRINT; + } + return $shimHtml . sprintf("", json_encode($importMap, $flags)); + } + + /** + * @param array $snippet + * The module resource being rendered, as per "CollectionInterface::add()". + * Ex: ['type' => 'scriptUrl', 'scriptUrl' => 'https://example.com/foo.js', 'esm' => TRUE] + * @return string + * HTML + * @see \CRM_Core_Resources_CollectionInterface::add() + */ + public function renderModule(array $snippet): string { + if (!$this->enableModules) { + return ''; + } + + switch ($snippet['type']) { + case 'script': + return sprintf("\n", $snippet['script']); + + case 'scriptUrl': + return sprintf("\n", $snippet['scriptUrl']); + + default: + return parent::renderModule($snippet); + } + } + +} -- 2.25.1