diff options
Diffstat (limited to 'vendor/vlucas/phpdotenv/src/Store')
| -rw-r--r-- | vendor/vlucas/phpdotenv/src/Store/File/Paths.php | 44 | ||||
| -rw-r--r-- | vendor/vlucas/phpdotenv/src/Store/File/Reader.php | 81 | ||||
| -rw-r--r-- | vendor/vlucas/phpdotenv/src/Store/FileStore.php | 72 | ||||
| -rw-r--r-- | vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php | 141 | ||||
| -rw-r--r-- | vendor/vlucas/phpdotenv/src/Store/StoreInterface.php | 17 | ||||
| -rw-r--r-- | vendor/vlucas/phpdotenv/src/Store/StringStore.php | 37 |
6 files changed, 392 insertions, 0 deletions
diff --git a/vendor/vlucas/phpdotenv/src/Store/File/Paths.php b/vendor/vlucas/phpdotenv/src/Store/File/Paths.php new file mode 100644 index 0000000..4f678a5 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Store/File/Paths.php @@ -0,0 +1,44 @@ +<?php + +declare(strict_types=1); + +namespace Dotenv\Store\File; + +/** + * @internal + */ +final class Paths +{ + /** + * This class is a singleton. + * + * @codeCoverageIgnore + * + * @return void + */ + private function __construct() + { + // + } + + /** + * Returns the full paths to the files. + * + * @param string[] $paths + * @param string[] $names + * + * @return string[] + */ + public static function filePaths(array $paths, array $names) + { + $files = []; + + foreach ($paths as $path) { + foreach ($names as $name) { + $files[] = \rtrim($path, \DIRECTORY_SEPARATOR).\DIRECTORY_SEPARATOR.$name; + } + } + + return $files; + } +} diff --git a/vendor/vlucas/phpdotenv/src/Store/File/Reader.php b/vendor/vlucas/phpdotenv/src/Store/File/Reader.php new file mode 100644 index 0000000..b0b7c5b --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Store/File/Reader.php @@ -0,0 +1,81 @@ +<?php + +declare(strict_types=1); + +namespace Dotenv\Store\File; + +use Dotenv\Exception\InvalidEncodingException; +use Dotenv\Util\Str; +use PhpOption\Option; + +/** + * @internal + */ +final class Reader +{ + /** + * This class is a singleton. + * + * @codeCoverageIgnore + * + * @return void + */ + private function __construct() + { + // + } + + /** + * Read the file(s), and return their raw content. + * + * We provide the file path as the key, and its content as the value. If + * short circuit mode is enabled, then the returned array with have length + * at most one. File paths that couldn't be read are omitted entirely. + * + * @param string[] $filePaths + * @param bool $shortCircuit + * @param string|null $fileEncoding + * + * @throws \Dotenv\Exception\InvalidEncodingException + * + * @return array<string,string> + */ + public static function read(array $filePaths, bool $shortCircuit = true, ?string $fileEncoding = null) + { + $output = []; + + foreach ($filePaths as $filePath) { + $content = self::readFromFile($filePath, $fileEncoding); + if ($content->isDefined()) { + $output[$filePath] = $content->get(); + if ($shortCircuit) { + break; + } + } + } + + return $output; + } + + /** + * Read the given file. + * + * @param string $path + * @param string|null $encoding + * + * @throws \Dotenv\Exception\InvalidEncodingException + * + * @return \PhpOption\Option<string> + */ + private static function readFromFile(string $path, ?string $encoding = null) + { + /** @var Option<string> */ + $content = Option::fromValue(@\file_get_contents($path), false); + + return $content->flatMap(static function (string $content) use ($encoding) { + return Str::utf8($content, $encoding)->mapError(static function (string $error) { + throw new InvalidEncodingException($error); + })->success(); + }); + } +} diff --git a/vendor/vlucas/phpdotenv/src/Store/FileStore.php b/vendor/vlucas/phpdotenv/src/Store/FileStore.php new file mode 100644 index 0000000..e7a4d3f --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Store/FileStore.php @@ -0,0 +1,72 @@ +<?php + +declare(strict_types=1); + +namespace Dotenv\Store; + +use Dotenv\Exception\InvalidPathException; +use Dotenv\Store\File\Reader; + +final class FileStore implements StoreInterface +{ + /** + * The file paths. + * + * @var string[] + */ + private $filePaths; + + /** + * Should file loading short circuit? + * + * @var bool + */ + private $shortCircuit; + + /** + * The file encoding. + * + * @var string|null + */ + private $fileEncoding; + + /** + * Create a new file store instance. + * + * @param string[] $filePaths + * @param bool $shortCircuit + * @param string|null $fileEncoding + * + * @return void + */ + public function __construct(array $filePaths, bool $shortCircuit, ?string $fileEncoding = null) + { + $this->filePaths = $filePaths; + $this->shortCircuit = $shortCircuit; + $this->fileEncoding = $fileEncoding; + } + + /** + * Read the content of the environment file(s). + * + * @throws \Dotenv\Exception\InvalidEncodingException|\Dotenv\Exception\InvalidPathException + * + * @return string + */ + public function read() + { + if ($this->filePaths === []) { + throw new InvalidPathException('At least one environment file path must be provided.'); + } + + $contents = Reader::read($this->filePaths, $this->shortCircuit, $this->fileEncoding); + + if (\count($contents) > 0) { + return \implode("\n", $contents); + } + + throw new InvalidPathException( + \sprintf('Unable to read any of the environment file(s) at [%s].', \implode(', ', $this->filePaths)) + ); + } +} diff --git a/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php b/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php new file mode 100644 index 0000000..2ce0851 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php @@ -0,0 +1,141 @@ +<?php + +declare(strict_types=1); + +namespace Dotenv\Store; + +use Dotenv\Store\File\Paths; + +final class StoreBuilder +{ + /** + * The of default name. + */ + private const DEFAULT_NAME = '.env'; + + /** + * The paths to search within. + * + * @var string[] + */ + private $paths; + + /** + * The file names to search for. + * + * @var string[] + */ + private $names; + + /** + * Should file loading short circuit? + * + * @var bool + */ + private $shortCircuit; + + /** + * The file encoding. + * + * @var string|null + */ + private $fileEncoding; + + /** + * Create a new store builder instance. + * + * @param string[] $paths + * @param string[] $names + * @param bool $shortCircuit + * @param string|null $fileEncoding + * + * @return void + */ + private function __construct(array $paths = [], array $names = [], bool $shortCircuit = false, ?string $fileEncoding = null) + { + $this->paths = $paths; + $this->names = $names; + $this->shortCircuit = $shortCircuit; + $this->fileEncoding = $fileEncoding; + } + + /** + * Create a new store builder instance with no names. + * + * @return \Dotenv\Store\StoreBuilder + */ + public static function createWithNoNames() + { + return new self(); + } + + /** + * Create a new store builder instance with the default name. + * + * @return \Dotenv\Store\StoreBuilder + */ + public static function createWithDefaultName() + { + return new self([], [self::DEFAULT_NAME]); + } + + /** + * Creates a store builder with the given path added. + * + * @param string $path + * + * @return \Dotenv\Store\StoreBuilder + */ + public function addPath(string $path) + { + return new self(\array_merge($this->paths, [$path]), $this->names, $this->shortCircuit, $this->fileEncoding); + } + + /** + * Creates a store builder with the given name added. + * + * @param string $name + * + * @return \Dotenv\Store\StoreBuilder + */ + public function addName(string $name) + { + return new self($this->paths, \array_merge($this->names, [$name]), $this->shortCircuit, $this->fileEncoding); + } + + /** + * Creates a store builder with short circuit mode enabled. + * + * @return \Dotenv\Store\StoreBuilder + */ + public function shortCircuit() + { + return new self($this->paths, $this->names, true, $this->fileEncoding); + } + + /** + * Creates a store builder with the specified file encoding. + * + * @param string|null $fileEncoding + * + * @return \Dotenv\Store\StoreBuilder + */ + public function fileEncoding(?string $fileEncoding = null) + { + return new self($this->paths, $this->names, $this->shortCircuit, $fileEncoding); + } + + /** + * Creates a new store instance. + * + * @return \Dotenv\Store\StoreInterface + */ + public function make() + { + return new FileStore( + Paths::filePaths($this->paths, $this->names), + $this->shortCircuit, + $this->fileEncoding + ); + } +} diff --git a/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php b/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php new file mode 100644 index 0000000..6f5b986 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php @@ -0,0 +1,17 @@ +<?php + +declare(strict_types=1); + +namespace Dotenv\Store; + +interface StoreInterface +{ + /** + * Read the content of the environment file(s). + * + * @throws \Dotenv\Exception\InvalidEncodingException|\Dotenv\Exception\InvalidPathException + * + * @return string + */ + public function read(); +} diff --git a/vendor/vlucas/phpdotenv/src/Store/StringStore.php b/vendor/vlucas/phpdotenv/src/Store/StringStore.php new file mode 100644 index 0000000..3f862a7 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Store/StringStore.php @@ -0,0 +1,37 @@ +<?php + +declare(strict_types=1); + +namespace Dotenv\Store; + +final class StringStore implements StoreInterface +{ + /** + * The file content. + * + * @var string + */ + private $content; + + /** + * Create a new string store instance. + * + * @param string $content + * + * @return void + */ + public function __construct(string $content) + { + $this->content = $content; + } + + /** + * Read the content of the environment file(s). + * + * @return string + */ + public function read() + { + return $this->content; + } +} |
