summaryrefslogtreecommitdiff
path: root/vendor/vlucas/phpdotenv/src/Store
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/vlucas/phpdotenv/src/Store')
-rw-r--r--vendor/vlucas/phpdotenv/src/Store/File/Paths.php44
-rw-r--r--vendor/vlucas/phpdotenv/src/Store/File/Reader.php81
-rw-r--r--vendor/vlucas/phpdotenv/src/Store/FileStore.php72
-rw-r--r--vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php141
-rw-r--r--vendor/vlucas/phpdotenv/src/Store/StoreInterface.php17
-rw-r--r--vendor/vlucas/phpdotenv/src/Store/StringStore.php37
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;
+ }
+}