sourceType) !== 1) { throw new InvalidArgumentException('Preview source type must use lowercase letters, numbers, and hyphens'); } if ($this->identity === '' || $this->signature === '') { throw new InvalidArgumentException('Preview sources require an identity and content signature'); } if ($this->size !== null && $this->size < 0) { throw new InvalidArgumentException('Preview source size cannot be negative'); } $this->mimeType = MimeType::normalize($mimeType); } public function open(): BinaryResource { $resource = ($this->resourceFactory)(); if (!$resource instanceof BinaryResource) { throw new PreviewGenerationException('Preview source factory did not return a BinaryResource'); } return $resource; } }