From da847f8f62506e426349bc9f6cbaa257bfea490d Mon Sep 17 00:00:00 2001 From: Roman Rudavskyi Date: Sat, 5 Jun 2021 09:04:38 +0300 Subject: [PATCH] Add first version of transformers sequence --- .../Exception/InvalidTransformersSequence.php | 28 ++++++++++++++++++ src/Optimizer/TransformationEngine.php | 2 ++ .../Transformer/PreloadHeroImage.php | 10 ++++++- .../Transformer/ServerSideRendering.php | 10 ++++++- src/Optimizer/TransformerProvides.php | 14 +++++++++ src/Optimizer/TransformerRequires.php | 14 +++++++++ .../TransformersSequenceValidator.php | 29 +++++++++++++++++++ 7 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 src/Optimizer/Exception/InvalidTransformersSequence.php create mode 100644 src/Optimizer/TransformerProvides.php create mode 100644 src/Optimizer/TransformerRequires.php create mode 100644 src/Optimizer/TransformersSequenceValidator.php diff --git a/src/Optimizer/Exception/InvalidTransformersSequence.php b/src/Optimizer/Exception/InvalidTransformersSequence.php new file mode 100644 index 000000000..ab913145d --- /dev/null +++ b/src/Optimizer/Exception/InvalidTransformersSequence.php @@ -0,0 +1,28 @@ +transformers = []; + TransformersSequenceValidator::validate($this->configuration->get(Configuration::KEY_TRANSFORMERS)); + foreach ($this->configuration->get(Configuration::KEY_TRANSFORMERS) as $transformerClass) { $this->transformers[$transformerClass] = new $transformerClass( ...$this->getTransformerDependencies($transformerClass) diff --git a/src/Optimizer/Transformer/PreloadHeroImage.php b/src/Optimizer/Transformer/PreloadHeroImage.php index fb1949740..725d628b7 100644 --- a/src/Optimizer/Transformer/PreloadHeroImage.php +++ b/src/Optimizer/Transformer/PreloadHeroImage.php @@ -17,6 +17,7 @@ use AmpProject\Optimizer\ImageDimensions; use AmpProject\Optimizer\Transformer; use AmpProject\Optimizer\TransformerConfiguration; +use AmpProject\Optimizer\TransformerProvides; use AmpProject\RequestDestination; use AmpProject\Tag; use AmpProject\Url; @@ -42,9 +43,11 @@ * * @package ampproject/amp-toolbox */ -final class PreloadHeroImage implements Transformer +final class PreloadHeroImage implements Transformer, TransformerProvides { + const TAG = 'preload_hero_image'; + /** * Class(es) to apply to a serverside-rendered image element. * @@ -158,6 +161,11 @@ public function __construct(TransformerConfiguration $configuration) $this->configuration = $configuration; } + public static function provides() + { + return [self::TAG]; + } + /** * Apply transformations to the provided DOM document. * diff --git a/src/Optimizer/Transformer/ServerSideRendering.php b/src/Optimizer/Transformer/ServerSideRendering.php index d3b764c99..d0d3248d9 100644 --- a/src/Optimizer/Transformer/ServerSideRendering.php +++ b/src/Optimizer/Transformer/ServerSideRendering.php @@ -17,6 +17,7 @@ use AmpProject\Optimizer\Exception\InvalidArgument; use AmpProject\Optimizer\Exception\InvalidHtmlAttribute; use AmpProject\Optimizer\Transformer; +use AmpProject\Optimizer\TransformerRequires; use AmpProject\Role; use AmpProject\Tag; use DOMAttr; @@ -37,9 +38,11 @@ * * @package ampproject/amp-toolbox */ -final class ServerSideRendering implements Transformer +final class ServerSideRendering implements Transformer, TransformerRequires { + const TAG = 'server_side_rendering'; + /** * List of layouts that support server-side rendering. * @@ -94,6 +97,11 @@ final class ServerSideRendering implements Transformer */ private $customCss; + public static function requires() + { + return [PreloadHeroImage::TAG]; + } + /** * Apply transformations to the provided DOM document. * diff --git a/src/Optimizer/TransformerProvides.php b/src/Optimizer/TransformerProvides.php new file mode 100644 index 000000000..ef8281aee --- /dev/null +++ b/src/Optimizer/TransformerProvides.php @@ -0,0 +1,14 @@ +