summaryrefslogtreecommitdiff
path: root/vendor/vlucas/phpdotenv/src/Parser/Parser.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/vlucas/phpdotenv/src/Parser/Parser.php')
-rw-r--r--vendor/vlucas/phpdotenv/src/Parser/Parser.php53
1 files changed, 53 insertions, 0 deletions
diff --git a/vendor/vlucas/phpdotenv/src/Parser/Parser.php b/vendor/vlucas/phpdotenv/src/Parser/Parser.php
new file mode 100644
index 0000000..2d30dfd
--- /dev/null
+++ b/vendor/vlucas/phpdotenv/src/Parser/Parser.php
@@ -0,0 +1,53 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Dotenv\Parser;
+
+use Dotenv\Exception\InvalidFileException;
+use Dotenv\Util\Regex;
+use GrahamCampbell\ResultType\Result;
+use GrahamCampbell\ResultType\Success;
+
+final class Parser implements ParserInterface
+{
+ /**
+ * Parse content into an entry array.
+ *
+ * @param string $content
+ *
+ * @throws \Dotenv\Exception\InvalidFileException
+ *
+ * @return \Dotenv\Parser\Entry[]
+ */
+ public function parse(string $content)
+ {
+ return Regex::split("/(\r\n|\n|\r)/", $content)->mapError(static function () {
+ return 'Could not split into separate lines.';
+ })->flatMap(static function (array $lines) {
+ return self::process(Lines::process($lines));
+ })->mapError(static function (string $error) {
+ throw new InvalidFileException(\sprintf('Failed to parse dotenv file. %s', $error));
+ })->success()->get();
+ }
+
+ /**
+ * Convert the raw entries into proper entries.
+ *
+ * @param string[] $entries
+ *
+ * @return \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Entry[],string>
+ */
+ private static function process(array $entries)
+ {
+ /** @var \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Entry[],string> */
+ return \array_reduce($entries, static function (Result $result, string $raw) {
+ return $result->flatMap(static function (array $entries) use ($raw) {
+ return EntryParser::parse($raw)->map(static function (Entry $entry) use ($entries) {
+ /** @var \Dotenv\Parser\Entry[] */
+ return \array_merge($entries, [$entry]);
+ });
+ });
+ }, Success::create([]));
+ }
+}