namespace Elementor\Modules\Variables\Storage;
use Elementor\Core\Kits\Documents\Kit;
use Elementor\Modules\Variables\Adapters\Prop_Type_Adapter;
class Variables_Repository {
private const VARIABLES_META_KEY = '_elementor_global_variables';
public function __construct( Kit $kit ) {
public function load(): Variables_Collection {
$db_record = $this->kit->get_json_meta( self::VARIABLES_META_KEY );
if ( is_array( $db_record ) && ! empty( $db_record ) ) {
$collection = Variables_Collection::hydrate( $db_record );
Prop_Type_Adapter::from_storage( $collection );
return Variables_Collection::default();
public function save( Variables_Collection $collection ) {
$collection->increment_watermark();
$record = Prop_Type_Adapter::to_storage( $collection );
if ( $this->kit->update_json_meta( static::VARIABLES_META_KEY, $record ) ) {
return $collection->watermark();