/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #pragma once #include #include #include #include #include #include #include #include namespace facebook { namespace react { /* * Build `ShadowNode` trees with a given given `Element` trees. */ class ComponentBuilder final { public: ComponentBuilder( ComponentDescriptorRegistry::Shared componentDescriptorRegistry); /* * Copyable and movable. */ ComponentBuilder(ComponentBuilder const &componentBuilder) = default; ComponentBuilder(ComponentBuilder &&componentBuilder) noexcept = default; ComponentBuilder &operator=(ComponentBuilder const &other) = default; ComponentBuilder &operator=(ComponentBuilder &&other) = default; /* * Builds a `ShadowNode` tree with given `Element` tree using stored * `ComponentDescriptorRegistry`. */ template std::shared_ptr build(Element element) const { return std::static_pointer_cast(build(element.fragment_)); } private: /* * Internal, type-erased version of `build`. */ ShadowNode::Unshared build(ElementFragment const &elementFragment) const; ComponentDescriptorRegistry::Shared componentDescriptorRegistry_; }; } // namespace react } // namespace facebook