create-berna-stencil 1.0.17 → 1.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/bin/create.js +1 -1
  2. package/package.json +72 -72
  3. package/src/api/core/vendor/autoload.php +22 -22
  4. package/src/api/core/vendor/composer/ClassLoader.php +579 -579
  5. package/src/api/core/vendor/composer/LICENSE +21 -21
  6. package/src/api/core/vendor/composer/autoload_classmap.php +15 -15
  7. package/src/api/core/vendor/composer/autoload_files.php +12 -12
  8. package/src/api/core/vendor/composer/autoload_namespaces.php +9 -9
  9. package/src/api/core/vendor/composer/autoload_psr4.php +16 -16
  10. package/src/api/core/vendor/composer/autoload_real.php +50 -50
  11. package/src/api/core/vendor/composer/autoload_static.php +86 -86
  12. package/src/api/core/vendor/composer/installed.php +2 -2
  13. package/src/api/core/vendor/composer/platform_check.php +25 -25
  14. package/src/api/core/vendor/graham-campbell/result-type/LICENSE +0 -21
  15. package/src/api/core/vendor/graham-campbell/result-type/composer.json +0 -33
  16. package/src/api/core/vendor/graham-campbell/result-type/src/Error.php +0 -121
  17. package/src/api/core/vendor/graham-campbell/result-type/src/Result.php +0 -69
  18. package/src/api/core/vendor/graham-campbell/result-type/src/Success.php +0 -120
  19. package/src/api/core/vendor/phpmailer/phpmailer/COMMITMENT +0 -46
  20. package/src/api/core/vendor/phpmailer/phpmailer/LICENSE +0 -502
  21. package/src/api/core/vendor/phpmailer/phpmailer/README.md +0 -232
  22. package/src/api/core/vendor/phpmailer/phpmailer/SECURITY.md +0 -37
  23. package/src/api/core/vendor/phpmailer/phpmailer/SMTPUTF8.md +0 -48
  24. package/src/api/core/vendor/phpmailer/phpmailer/VERSION +0 -1
  25. package/src/api/core/vendor/phpmailer/phpmailer/composer.json +0 -84
  26. package/src/api/core/vendor/phpmailer/phpmailer/get_oauth_token.php +0 -182
  27. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php +0 -26
  28. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-ar.php +0 -27
  29. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-as.php +0 -35
  30. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php +0 -27
  31. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-ba.php +0 -27
  32. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php +0 -27
  33. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php +0 -27
  34. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-bn.php +0 -35
  35. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php +0 -27
  36. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php +0 -28
  37. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php +0 -39
  38. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php +0 -28
  39. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php +0 -33
  40. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-eo.php +0 -37
  41. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php +0 -38
  42. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php +0 -28
  43. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php +0 -28
  44. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php +0 -27
  45. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-fo.php +0 -27
  46. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php +0 -36
  47. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-gl.php +0 -27
  48. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php +0 -27
  49. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php +0 -35
  50. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php +0 -27
  51. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php +0 -27
  52. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-hy.php +0 -27
  53. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php +0 -31
  54. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php +0 -28
  55. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php +0 -37
  56. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php +0 -27
  57. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php +0 -27
  58. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-ku.php +0 -27
  59. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php +0 -27
  60. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php +0 -27
  61. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-mg.php +0 -27
  62. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-mn.php +0 -27
  63. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php +0 -27
  64. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php +0 -37
  65. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php +0 -38
  66. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php +0 -33
  67. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt.php +0 -34
  68. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php +0 -38
  69. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php +0 -33
  70. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php +0 -36
  71. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-si.php +0 -34
  72. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php +0 -30
  73. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php +0 -36
  74. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr.php +0 -28
  75. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr_latn.php +0 -28
  76. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php +0 -27
  77. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-tl.php +0 -28
  78. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php +0 -38
  79. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-uk.php +0 -28
  80. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-ur.php +0 -30
  81. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php +0 -27
  82. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php +0 -29
  83. package/src/api/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php +0 -36
  84. package/src/api/core/vendor/phpmailer/phpmailer/src/DSNConfigurator.php +0 -245
  85. package/src/api/core/vendor/phpmailer/phpmailer/src/Exception.php +0 -40
  86. package/src/api/core/vendor/phpmailer/phpmailer/src/OAuth.php +0 -139
  87. package/src/api/core/vendor/phpmailer/phpmailer/src/OAuthTokenProvider.php +0 -44
  88. package/src/api/core/vendor/phpmailer/phpmailer/src/PHPMailer.php +0 -5525
  89. package/src/api/core/vendor/phpmailer/phpmailer/src/POP3.php +0 -470
  90. package/src/api/core/vendor/phpmailer/phpmailer/src/SMTP.php +0 -1617
  91. package/src/api/core/vendor/phpoption/phpoption/LICENSE +0 -201
  92. package/src/api/core/vendor/phpoption/phpoption/composer.json +0 -50
  93. package/src/api/core/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php +0 -175
  94. package/src/api/core/vendor/phpoption/phpoption/src/PhpOption/None.php +0 -136
  95. package/src/api/core/vendor/phpoption/phpoption/src/PhpOption/Option.php +0 -434
  96. package/src/api/core/vendor/phpoption/phpoption/src/PhpOption/Some.php +0 -169
  97. package/src/api/core/vendor/symfony/polyfill-ctype/Ctype.php +0 -232
  98. package/src/api/core/vendor/symfony/polyfill-ctype/LICENSE +0 -19
  99. package/src/api/core/vendor/symfony/polyfill-ctype/README.md +0 -12
  100. package/src/api/core/vendor/symfony/polyfill-ctype/bootstrap.php +0 -50
  101. package/src/api/core/vendor/symfony/polyfill-ctype/bootstrap80.php +0 -46
  102. package/src/api/core/vendor/symfony/polyfill-ctype/composer.json +0 -38
  103. package/src/api/core/vendor/symfony/polyfill-mbstring/LICENSE +0 -19
  104. package/src/api/core/vendor/symfony/polyfill-mbstring/Mbstring.php +0 -1077
  105. package/src/api/core/vendor/symfony/polyfill-mbstring/README.md +0 -13
  106. package/src/api/core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +0 -119
  107. package/src/api/core/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +0 -1397
  108. package/src/api/core/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +0 -5
  109. package/src/api/core/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +0 -1489
  110. package/src/api/core/vendor/symfony/polyfill-mbstring/bootstrap.php +0 -171
  111. package/src/api/core/vendor/symfony/polyfill-mbstring/bootstrap80.php +0 -167
  112. package/src/api/core/vendor/symfony/polyfill-mbstring/composer.json +0 -39
  113. package/src/api/core/vendor/symfony/polyfill-php80/LICENSE +0 -19
  114. package/src/api/core/vendor/symfony/polyfill-php80/Php80.php +0 -115
  115. package/src/api/core/vendor/symfony/polyfill-php80/PhpToken.php +0 -106
  116. package/src/api/core/vendor/symfony/polyfill-php80/README.md +0 -25
  117. package/src/api/core/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +0 -31
  118. package/src/api/core/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +0 -16
  119. package/src/api/core/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +0 -20
  120. package/src/api/core/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +0 -16
  121. package/src/api/core/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +0 -16
  122. package/src/api/core/vendor/symfony/polyfill-php80/bootstrap.php +0 -42
  123. package/src/api/core/vendor/symfony/polyfill-php80/composer.json +0 -37
  124. package/src/api/core/vendor/vlucas/phpdotenv/LICENSE +0 -30
  125. package/src/api/core/vendor/vlucas/phpdotenv/composer.json +0 -60
  126. package/src/api/core/vendor/vlucas/phpdotenv/src/Dotenv.php +0 -267
  127. package/src/api/core/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php +0 -12
  128. package/src/api/core/vendor/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php +0 -12
  129. package/src/api/core/vendor/vlucas/phpdotenv/src/Exception/InvalidFileException.php +0 -12
  130. package/src/api/core/vendor/vlucas/phpdotenv/src/Exception/InvalidPathException.php +0 -12
  131. package/src/api/core/vendor/vlucas/phpdotenv/src/Exception/ValidationException.php +0 -12
  132. package/src/api/core/vendor/vlucas/phpdotenv/src/Loader/Loader.php +0 -48
  133. package/src/api/core/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php +0 -20
  134. package/src/api/core/vendor/vlucas/phpdotenv/src/Loader/Resolver.php +0 -65
  135. package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/Entry.php +0 -59
  136. package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/EntryParser.php +0 -299
  137. package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/Lexer.php +0 -58
  138. package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/Lines.php +0 -127
  139. package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/Parser.php +0 -53
  140. package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/ParserInterface.php +0 -19
  141. package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/Value.php +0 -88
  142. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php +0 -15
  143. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php +0 -89
  144. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php +0 -80
  145. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php +0 -88
  146. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php +0 -85
  147. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php +0 -110
  148. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php +0 -48
  149. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php +0 -64
  150. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php +0 -91
  151. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php +0 -17
  152. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php +0 -104
  153. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php +0 -88
  154. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php +0 -27
  155. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php +0 -107
  156. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php +0 -272
  157. package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php +0 -51
  158. package/src/api/core/vendor/vlucas/phpdotenv/src/Store/File/Paths.php +0 -44
  159. package/src/api/core/vendor/vlucas/phpdotenv/src/Store/File/Reader.php +0 -81
  160. package/src/api/core/vendor/vlucas/phpdotenv/src/Store/FileStore.php +0 -72
  161. package/src/api/core/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php +0 -141
  162. package/src/api/core/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php +0 -17
  163. package/src/api/core/vendor/vlucas/phpdotenv/src/Store/StringStore.php +0 -37
  164. package/src/api/core/vendor/vlucas/phpdotenv/src/Util/Regex.php +0 -112
  165. package/src/api/core/vendor/vlucas/phpdotenv/src/Util/Str.php +0 -108
  166. package/src/api/core/vendor/vlucas/phpdotenv/src/Validator.php +0 -207
@@ -1,65 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Loader;
6
-
7
- use Dotenv\Parser\Value;
8
- use Dotenv\Repository\RepositoryInterface;
9
- use Dotenv\Util\Regex;
10
- use Dotenv\Util\Str;
11
- use PhpOption\Option;
12
-
13
- final class Resolver
14
- {
15
- /**
16
- * This class is a singleton.
17
- *
18
- * @codeCoverageIgnore
19
- *
20
- * @return void
21
- */
22
- private function __construct()
23
- {
24
- //
25
- }
26
-
27
- /**
28
- * Resolve the nested variables in the given value.
29
- *
30
- * Replaces ${varname} patterns in the allowed positions in the variable
31
- * value by an existing environment variable.
32
- *
33
- * @param \Dotenv\Repository\RepositoryInterface $repository
34
- * @param \Dotenv\Parser\Value $value
35
- *
36
- * @return string
37
- */
38
- public static function resolve(RepositoryInterface $repository, Value $value)
39
- {
40
- return \array_reduce($value->getVars(), static function (string $s, int $i) use ($repository) {
41
- return Str::substr($s, 0, $i).self::resolveVariable($repository, Str::substr($s, $i));
42
- }, $value->getChars());
43
- }
44
-
45
- /**
46
- * Resolve a single nested variable.
47
- *
48
- * @param \Dotenv\Repository\RepositoryInterface $repository
49
- * @param string $str
50
- *
51
- * @return string
52
- */
53
- private static function resolveVariable(RepositoryInterface $repository, string $str)
54
- {
55
- return Regex::replaceCallback(
56
- '/\A\${([a-zA-Z0-9_.]+)}/',
57
- static function (array $matches) use ($repository) {
58
- /** @var string */
59
- return Option::fromValue($repository->get($matches[1]))->getOrElse($matches[0]);
60
- },
61
- $str,
62
- 1
63
- )->success()->getOrElse($str);
64
- }
65
- }
@@ -1,59 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Parser;
6
-
7
- use PhpOption\Option;
8
-
9
- final class Entry
10
- {
11
- /**
12
- * The entry name.
13
- *
14
- * @var string
15
- */
16
- private $name;
17
-
18
- /**
19
- * The entry value.
20
- *
21
- * @var \Dotenv\Parser\Value|null
22
- */
23
- private $value;
24
-
25
- /**
26
- * Create a new entry instance.
27
- *
28
- * @param string $name
29
- * @param \Dotenv\Parser\Value|null $value
30
- *
31
- * @return void
32
- */
33
- public function __construct(string $name, ?Value $value = null)
34
- {
35
- $this->name = $name;
36
- $this->value = $value;
37
- }
38
-
39
- /**
40
- * Get the entry name.
41
- *
42
- * @return string
43
- */
44
- public function getName()
45
- {
46
- return $this->name;
47
- }
48
-
49
- /**
50
- * Get the entry value.
51
- *
52
- * @return \PhpOption\Option<\Dotenv\Parser\Value>
53
- */
54
- public function getValue()
55
- {
56
- /** @var \PhpOption\Option<\Dotenv\Parser\Value> */
57
- return Option::fromValue($this->value);
58
- }
59
- }
@@ -1,299 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Parser;
6
-
7
- use Dotenv\Util\Regex;
8
- use Dotenv\Util\Str;
9
- use GrahamCampbell\ResultType\Error;
10
- use GrahamCampbell\ResultType\Result;
11
- use GrahamCampbell\ResultType\Success;
12
-
13
- final class EntryParser
14
- {
15
- private const INITIAL_STATE = 0;
16
- private const UNQUOTED_STATE = 1;
17
- private const SINGLE_QUOTED_STATE = 2;
18
- private const DOUBLE_QUOTED_STATE = 3;
19
- private const ESCAPE_SEQUENCE_STATE = 4;
20
- private const WHITESPACE_STATE = 5;
21
- private const COMMENT_STATE = 6;
22
- private const REJECT_STATES = [self::SINGLE_QUOTED_STATE, self::DOUBLE_QUOTED_STATE, self::ESCAPE_SEQUENCE_STATE];
23
-
24
- /**
25
- * This class is a singleton.
26
- *
27
- * @codeCoverageIgnore
28
- *
29
- * @return void
30
- */
31
- private function __construct()
32
- {
33
- //
34
- }
35
-
36
- /**
37
- * Parse a raw entry into a proper entry.
38
- *
39
- * That is, turn a raw environment variable entry into a name and possibly
40
- * a value. We wrap the answer in a result type.
41
- *
42
- * @param string $entry
43
- *
44
- * @return \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Entry, string>
45
- */
46
- public static function parse(string $entry)
47
- {
48
- return self::splitStringIntoParts($entry)->flatMap(static function (array $parts) {
49
- [$name, $value] = $parts;
50
-
51
- return self::parseName($name)->flatMap(static function (string $name) use ($value) {
52
- /** @var Result<Value|null, string> */
53
- $parsedValue = $value === null ? Success::create(null) : self::parseValue($value);
54
-
55
- return $parsedValue->map(static function (?Value $value) use ($name) {
56
- return new Entry($name, $value);
57
- });
58
- });
59
- });
60
- }
61
-
62
- /**
63
- * Split the compound string into parts.
64
- *
65
- * @param string $line
66
- *
67
- * @return \GrahamCampbell\ResultType\Result<array{string, string|null},string>
68
- */
69
- private static function splitStringIntoParts(string $line)
70
- {
71
- /** @var array{string, string|null} */
72
- $result = Str::pos($line, '=')->map(static function () use ($line) {
73
- return \array_map('trim', \explode('=', $line, 2));
74
- })->getOrElse([$line, null]);
75
-
76
- if ($result[0] === '') {
77
- /** @var \GrahamCampbell\ResultType\Result<array{string, string|null},string> */
78
- return Error::create(self::getErrorMessage('an unexpected equals', $line));
79
- }
80
-
81
- /** @var \GrahamCampbell\ResultType\Result<array{string, string|null},string> */
82
- return Success::create($result);
83
- }
84
-
85
- /**
86
- * Parse the given variable name.
87
- *
88
- * That is, strip the optional quotes and leading "export" from the
89
- * variable name. We wrap the answer in a result type.
90
- *
91
- * @param string $name
92
- *
93
- * @return \GrahamCampbell\ResultType\Result<string, string>
94
- */
95
- private static function parseName(string $name)
96
- {
97
- if (Str::len($name) > 8 && Str::substr($name, 0, 6) === 'export' && \ctype_space(Str::substr($name, 6, 1))) {
98
- $name = \ltrim(Str::substr($name, 6));
99
- }
100
-
101
- if (self::isQuotedName($name)) {
102
- $name = Str::substr($name, 1, -1);
103
- }
104
-
105
- if (!self::isValidName($name)) {
106
- /** @var \GrahamCampbell\ResultType\Result<string, string> */
107
- return Error::create(self::getErrorMessage('an invalid name', $name));
108
- }
109
-
110
- /** @var \GrahamCampbell\ResultType\Result<string, string> */
111
- return Success::create($name);
112
- }
113
-
114
- /**
115
- * Is the given variable name quoted?
116
- *
117
- * @param string $name
118
- *
119
- * @return bool
120
- */
121
- private static function isQuotedName(string $name)
122
- {
123
- if (Str::len($name) < 3) {
124
- return false;
125
- }
126
-
127
- $first = Str::substr($name, 0, 1);
128
- $last = Str::substr($name, -1, 1);
129
-
130
- return ($first === '"' && $last === '"') || ($first === '\'' && $last === '\'');
131
- }
132
-
133
- /**
134
- * Is the given variable name valid?
135
- *
136
- * @param string $name
137
- *
138
- * @return bool
139
- */
140
- private static function isValidName(string $name)
141
- {
142
- return Regex::matches('~(*UTF8)\A[\p{Ll}\p{Lu}\p{M}\p{N}_.]+\z~', $name)->success()->getOrElse(false);
143
- }
144
-
145
- /**
146
- * Parse the given variable value.
147
- *
148
- * This has the effect of stripping quotes and comments, dealing with
149
- * special characters, and locating nested variables, but not resolving
150
- * them. Formally, we run a finite state automaton with an output tape: a
151
- * transducer. We wrap the answer in a result type.
152
- *
153
- * @param string $value
154
- *
155
- * @return \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Value, string>
156
- */
157
- private static function parseValue(string $value)
158
- {
159
- if (\trim($value) === '') {
160
- /** @var \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Value, string> */
161
- return Success::create(Value::blank());
162
- }
163
-
164
- return \array_reduce(\iterator_to_array(Lexer::lex($value)), static function (Result $data, string $token) {
165
- return $data->flatMap(static function (array $data) use ($token) {
166
- return self::processToken($data[1], $token)->map(static function (array $val) use ($data) {
167
- return [$data[0]->append($val[0], $val[1]), $val[2]];
168
- });
169
- });
170
- }, Success::create([Value::blank(), self::INITIAL_STATE]))->flatMap(static function (array $result) {
171
- if (in_array($result[1], self::REJECT_STATES, true)) {
172
- /** @var \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Value, string> */
173
- return Error::create('a missing closing quote');
174
- }
175
-
176
- /** @var \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Value, string> */
177
- return Success::create($result[0]);
178
- })->mapError(static function (string $err) use ($value) {
179
- return self::getErrorMessage($err, $value);
180
- });
181
- }
182
-
183
- /**
184
- * Process the given token.
185
- *
186
- * @param int $state
187
- * @param string $token
188
- *
189
- * @return \GrahamCampbell\ResultType\Result<array{string, bool, int}, string>
190
- */
191
- private static function processToken(int $state, string $token)
192
- {
193
- switch ($state) {
194
- case self::INITIAL_STATE:
195
- if ($token === '\'') {
196
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
197
- return Success::create(['', false, self::SINGLE_QUOTED_STATE]);
198
- } elseif ($token === '"') {
199
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
200
- return Success::create(['', false, self::DOUBLE_QUOTED_STATE]);
201
- } elseif ($token === '#') {
202
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
203
- return Success::create(['', false, self::COMMENT_STATE]);
204
- } elseif ($token === '$') {
205
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
206
- return Success::create([$token, true, self::UNQUOTED_STATE]);
207
- } else {
208
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
209
- return Success::create([$token, false, self::UNQUOTED_STATE]);
210
- }
211
- case self::UNQUOTED_STATE:
212
- if ($token === '#') {
213
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
214
- return Success::create(['', false, self::COMMENT_STATE]);
215
- } elseif (\ctype_space($token)) {
216
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
217
- return Success::create(['', false, self::WHITESPACE_STATE]);
218
- } elseif ($token === '$') {
219
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
220
- return Success::create([$token, true, self::UNQUOTED_STATE]);
221
- } else {
222
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
223
- return Success::create([$token, false, self::UNQUOTED_STATE]);
224
- }
225
- case self::SINGLE_QUOTED_STATE:
226
- if ($token === '\'') {
227
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
228
- return Success::create(['', false, self::WHITESPACE_STATE]);
229
- } else {
230
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
231
- return Success::create([$token, false, self::SINGLE_QUOTED_STATE]);
232
- }
233
- case self::DOUBLE_QUOTED_STATE:
234
- if ($token === '"') {
235
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
236
- return Success::create(['', false, self::WHITESPACE_STATE]);
237
- } elseif ($token === '\\') {
238
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
239
- return Success::create(['', false, self::ESCAPE_SEQUENCE_STATE]);
240
- } elseif ($token === '$') {
241
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
242
- return Success::create([$token, true, self::DOUBLE_QUOTED_STATE]);
243
- } else {
244
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
245
- return Success::create([$token, false, self::DOUBLE_QUOTED_STATE]);
246
- }
247
- case self::ESCAPE_SEQUENCE_STATE:
248
- if ($token === '"' || $token === '\\') {
249
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
250
- return Success::create([$token, false, self::DOUBLE_QUOTED_STATE]);
251
- } elseif ($token === '$') {
252
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
253
- return Success::create([$token, false, self::DOUBLE_QUOTED_STATE]);
254
- } else {
255
- $first = Str::substr($token, 0, 1);
256
- if (\in_array($first, ['f', 'n', 'r', 't', 'v'], true)) {
257
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
258
- return Success::create([\stripcslashes('\\'.$first).Str::substr($token, 1), false, self::DOUBLE_QUOTED_STATE]);
259
- } else {
260
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
261
- return Error::create('an unexpected escape sequence');
262
- }
263
- }
264
- case self::WHITESPACE_STATE:
265
- if ($token === '#') {
266
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
267
- return Success::create(['', false, self::COMMENT_STATE]);
268
- } elseif (!\ctype_space($token)) {
269
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
270
- return Error::create('unexpected whitespace');
271
- } else {
272
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
273
- return Success::create(['', false, self::WHITESPACE_STATE]);
274
- }
275
- case self::COMMENT_STATE:
276
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
277
- return Success::create(['', false, self::COMMENT_STATE]);
278
- default:
279
- throw new \Error('Parser entered invalid state.');
280
- }
281
- }
282
-
283
- /**
284
- * Generate a friendly error message.
285
- *
286
- * @param string $cause
287
- * @param string $subject
288
- *
289
- * @return string
290
- */
291
- private static function getErrorMessage(string $cause, string $subject)
292
- {
293
- return \sprintf(
294
- 'Encountered %s at [%s].',
295
- $cause,
296
- \strtok($subject, "\n")
297
- );
298
- }
299
- }
@@ -1,58 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Parser;
6
-
7
- final class Lexer
8
- {
9
- /**
10
- * The regex for each type of token.
11
- */
12
- private const PATTERNS = [
13
- '[\r\n]{1,1000}', '[^\S\r\n]{1,1000}', '\\\\', '\'', '"', '\\#', '\\$', '([^(\s\\\\\'"\\#\\$)]|\\(|\\)){1,1000}',
14
- ];
15
-
16
- /**
17
- * This class is a singleton.
18
- *
19
- * @codeCoverageIgnore
20
- *
21
- * @return void
22
- */
23
- private function __construct()
24
- {
25
- //
26
- }
27
-
28
- /**
29
- * Convert content into a token stream.
30
- *
31
- * Multibyte string processing is not needed here, and nether is error
32
- * handling, for performance reasons.
33
- *
34
- * @param string $content
35
- *
36
- * @return \Generator<string>
37
- */
38
- public static function lex(string $content)
39
- {
40
- static $regex;
41
-
42
- if ($regex === null) {
43
- $regex = '(('.\implode(')|(', self::PATTERNS).'))A';
44
- }
45
-
46
- $offset = 0;
47
-
48
- while (isset($content[$offset])) {
49
- if (!\preg_match($regex, $content, $matches, 0, $offset)) {
50
- throw new \Error(\sprintf('Lexer encountered unexpected character [%s].', $content[$offset]));
51
- }
52
-
53
- $offset += \strlen($matches[0]);
54
-
55
- yield $matches[0];
56
- }
57
- }
58
- }
@@ -1,127 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Parser;
6
-
7
- use Dotenv\Util\Regex;
8
- use Dotenv\Util\Str;
9
-
10
- final class Lines
11
- {
12
- /**
13
- * This class is a singleton.
14
- *
15
- * @codeCoverageIgnore
16
- *
17
- * @return void
18
- */
19
- private function __construct()
20
- {
21
- //
22
- }
23
-
24
- /**
25
- * Process the array of lines of environment variables.
26
- *
27
- * This will produce an array of raw entries, one per variable.
28
- *
29
- * @param string[] $lines
30
- *
31
- * @return string[]
32
- */
33
- public static function process(array $lines)
34
- {
35
- $output = [];
36
- $multiline = false;
37
- $multilineBuffer = [];
38
-
39
- foreach ($lines as $line) {
40
- [$multiline, $line, $multilineBuffer] = self::multilineProcess($multiline, $line, $multilineBuffer);
41
-
42
- if (!$multiline && !self::isCommentOrWhitespace($line)) {
43
- $output[] = $line;
44
- }
45
- }
46
-
47
- return $output;
48
- }
49
-
50
- /**
51
- * Used to make all multiline variable process.
52
- *
53
- * @param bool $multiline
54
- * @param string $line
55
- * @param string[] $buffer
56
- *
57
- * @return array{bool,string, string[]}
58
- */
59
- private static function multilineProcess(bool $multiline, string $line, array $buffer)
60
- {
61
- $startsOnCurrentLine = $multiline ? false : self::looksLikeMultilineStart($line);
62
-
63
- // check if $line can be multiline variable
64
- if ($startsOnCurrentLine) {
65
- $multiline = true;
66
- }
67
-
68
- if ($multiline) {
69
- \array_push($buffer, $line);
70
-
71
- if (self::looksLikeMultilineStop($line, $startsOnCurrentLine)) {
72
- $multiline = false;
73
- $line = \implode("\n", $buffer);
74
- $buffer = [];
75
- }
76
- }
77
-
78
- return [$multiline, $line, $buffer];
79
- }
80
-
81
- /**
82
- * Determine if the given line can be the start of a multiline variable.
83
- *
84
- * @param string $line
85
- *
86
- * @return bool
87
- */
88
- private static function looksLikeMultilineStart(string $line)
89
- {
90
- return Str::pos($line, '="')->map(static function () use ($line) {
91
- return self::looksLikeMultilineStop($line, true) === false;
92
- })->getOrElse(false);
93
- }
94
-
95
- /**
96
- * Determine if the given line can be the start of a multiline variable.
97
- *
98
- * @param string $line
99
- * @param bool $started
100
- *
101
- * @return bool
102
- */
103
- private static function looksLikeMultilineStop(string $line, bool $started)
104
- {
105
- if ($line === '"') {
106
- return true;
107
- }
108
-
109
- return Regex::occurrences('/(?=([^\\\\]"))/', \str_replace('\\\\', '', $line))->map(static function (int $count) use ($started) {
110
- return $started ? $count > 1 : $count >= 1;
111
- })->success()->getOrElse(false);
112
- }
113
-
114
- /**
115
- * Determine if the line in the file is a comment or whitespace.
116
- *
117
- * @param string $line
118
- *
119
- * @return bool
120
- */
121
- private static function isCommentOrWhitespace(string $line)
122
- {
123
- $line = \trim($line);
124
-
125
- return $line === '' || (isset($line[0]) && $line[0] === '#');
126
- }
127
- }
@@ -1,53 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Parser;
6
-
7
- use Dotenv\Exception\InvalidFileException;
8
- use Dotenv\Util\Regex;
9
- use GrahamCampbell\ResultType\Result;
10
- use GrahamCampbell\ResultType\Success;
11
-
12
- final class Parser implements ParserInterface
13
- {
14
- /**
15
- * Parse content into an entry array.
16
- *
17
- * @param string $content
18
- *
19
- * @throws \Dotenv\Exception\InvalidFileException
20
- *
21
- * @return \Dotenv\Parser\Entry[]
22
- */
23
- public function parse(string $content)
24
- {
25
- return Regex::split("/(\r\n|\n|\r)/", $content)->mapError(static function () {
26
- return 'Could not split into separate lines.';
27
- })->flatMap(static function (array $lines) {
28
- return self::process(Lines::process($lines));
29
- })->mapError(static function (string $error) {
30
- throw new InvalidFileException(\sprintf('Failed to parse dotenv file. %s', $error));
31
- })->success()->get();
32
- }
33
-
34
- /**
35
- * Convert the raw entries into proper entries.
36
- *
37
- * @param string[] $entries
38
- *
39
- * @return \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Entry[], string>
40
- */
41
- private static function process(array $entries)
42
- {
43
- /** @var \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Entry[], string> */
44
- return \array_reduce($entries, static function (Result $result, string $raw) {
45
- return $result->flatMap(static function (array $entries) use ($raw) {
46
- return EntryParser::parse($raw)->map(static function (Entry $entry) use ($entries) {
47
- /** @var \Dotenv\Parser\Entry[] */
48
- return \array_merge($entries, [$entry]);
49
- });
50
- });
51
- }, Success::create([]));
52
- }
53
- }
@@ -1,19 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Parser;
6
-
7
- interface ParserInterface
8
- {
9
- /**
10
- * Parse content into an entry array.
11
- *
12
- * @param string $content
13
- *
14
- * @throws \Dotenv\Exception\InvalidFileException
15
- *
16
- * @return \Dotenv\Parser\Entry[]
17
- */
18
- public function parse(string $content);
19
- }