configuration = new Configuration($config); $this->configuration->validate(); $this->tagBuilder = new TagBuilder($this->configuration); } /** * Creates a new Image instance using the current configuration instance. * * @param string $publicId The public ID of the image. * * @return Image */ public function image($publicId) { return $this->createWithConfiguration($publicId, Image::class); } /** * Creates a new Video instance using the current configuration instance. * * @param string|mixed $publicId The public ID of the video. * * @return Video */ public function video($publicId) { return $this->createWithConfiguration($publicId, Video::class); } /** * Creates a new Raw instance using the current configuration instance. * * @param string|mixed $publicId The public ID of the file. * * @return File */ public function raw($publicId) { return $this->createWithConfiguration($publicId, File::class); } /** * Returns an instance of the TagBuilder class that includes builders for all tags. * * @return TagBuilder */ public function tag() { return $this->tagBuilder; } /** * Creates a new ImageTag instance using the current configuration instance. * * @param string|mixed $publicId The public ID of the image. * * @return ImageTag */ public function imageTag($publicId) { return $this->createWithConfiguration($publicId, ImageTag::class); } /** * Creates a new VideoTag instance using the current configuration instance. * * @param string|mixed $publicId The public ID of the video. * @param array|null $sources The tag src definition. * * @return VideoTag */ public function videoTag($publicId, $sources = null) { $videoTag = ClassUtils::forceInstance($publicId, VideoTag::class, null, $sources, $this->configuration); $videoTag->importConfiguration($this->configuration); return $videoTag; } /** * Creates a new AdminApi instance using the current configuration instance. * * @return AdminApi */ public function adminApi() { return new AdminApi($this->configuration); } /** * Creates a new UploadApi instance using the current configuration instance. * * @return UploadApi */ public function uploadApi() { return new UploadApi($this->configuration); } /** * Creates a new SearchApi instance using the current configuration instance. * * @return SearchApi */ public function searchApi() { return new SearchApi($this->configuration); } /** * Creates a new SearchFoldersApi instance using the current configuration instance. * * @return SearchFoldersApi */ public function searchFoldersApi() { return new SearchFoldersApi($this->configuration); } /** * Creates a new object and imports current instance configuration. * * @param mixed $publicId The public Id or the object. * @param string $className The class name of the object to create. * @param mixed ...$args Additional constructor arguments. * * @return mixed * * @internal */ protected function createWithConfiguration($publicId, $className, ...$args) { $instance = ClassUtils::forceInstance($publicId, $className, null, $this->configuration, ...$args); // this covers the case when an instance of the asset is provided and the line above is a no op. $instance->importConfiguration($this->configuration); return $instance; } }