create-berna-stencil 2.0.7 → 2.0.9

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 (180) hide show
  1. package/.eleventy.js +38 -19
  2. package/README.md +2 -1
  3. package/bin/create.js +2 -2
  4. package/docs/Components.md +12 -0
  5. package/docs/Creating pages.md +3 -4
  6. package/docs/Head and SEO.md +7 -7
  7. package/package.json +63 -61
  8. package/src/backend/_core/vendor/composer/autoload_static.php +10 -10
  9. package/src/backend/_core/vendor/composer/installed.json +6 -6
  10. package/src/backend/_core/vendor/composer/installed.php +2 -2
  11. package/src/backend/_core/vendor/graham-campbell/result-type/LICENSE +21 -21
  12. package/src/backend/_core/vendor/graham-campbell/result-type/composer.json +33 -33
  13. package/src/backend/_core/vendor/graham-campbell/result-type/src/Error.php +121 -121
  14. package/src/backend/_core/vendor/graham-campbell/result-type/src/Result.php +69 -69
  15. package/src/backend/_core/vendor/graham-campbell/result-type/src/Success.php +120 -120
  16. package/src/backend/_core/vendor/phpoption/phpoption/LICENSE +200 -200
  17. package/src/backend/_core/vendor/phpoption/phpoption/composer.json +50 -50
  18. package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php +175 -175
  19. package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/None.php +136 -136
  20. package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Option.php +434 -434
  21. package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Some.php +169 -169
  22. package/src/backend/_core/vendor/symfony/polyfill-ctype/Ctype.php +232 -232
  23. package/src/backend/_core/vendor/symfony/polyfill-ctype/LICENSE +19 -19
  24. package/src/backend/_core/vendor/symfony/polyfill-ctype/README.md +12 -12
  25. package/src/backend/_core/vendor/symfony/polyfill-ctype/bootstrap.php +50 -50
  26. package/src/backend/_core/vendor/symfony/polyfill-ctype/bootstrap80.php +46 -46
  27. package/src/backend/_core/vendor/symfony/polyfill-ctype/composer.json +38 -38
  28. package/src/backend/_core/vendor/symfony/polyfill-mbstring/LICENSE +19 -19
  29. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Mbstring.php +1077 -1077
  30. package/src/backend/_core/vendor/symfony/polyfill-mbstring/README.md +13 -13
  31. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +119 -119
  32. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1397 -1397
  33. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +5 -5
  34. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +1489 -1489
  35. package/src/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap.php +171 -171
  36. package/src/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap80.php +167 -167
  37. package/src/backend/_core/vendor/symfony/polyfill-mbstring/composer.json +39 -39
  38. package/src/backend/_core/vendor/symfony/polyfill-php80/LICENSE +19 -19
  39. package/src/backend/_core/vendor/symfony/polyfill-php80/Php80.php +115 -115
  40. package/src/backend/_core/vendor/symfony/polyfill-php80/PhpToken.php +106 -106
  41. package/src/backend/_core/vendor/symfony/polyfill-php80/README.md +25 -25
  42. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +31 -31
  43. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +16 -16
  44. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +20 -20
  45. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +16 -16
  46. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +16 -16
  47. package/src/backend/_core/vendor/symfony/polyfill-php80/bootstrap.php +42 -42
  48. package/src/backend/_core/vendor/symfony/polyfill-php80/composer.json +37 -37
  49. package/src/backend/_core/vendor/vlucas/phpdotenv/LICENSE +30 -30
  50. package/src/backend/_core/vendor/vlucas/phpdotenv/composer.json +60 -60
  51. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Dotenv.php +267 -267
  52. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php +12 -12
  53. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php +12 -12
  54. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidFileException.php +12 -12
  55. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidPathException.php +12 -12
  56. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ValidationException.php +12 -12
  57. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Loader.php +48 -48
  58. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php +20 -20
  59. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Resolver.php +65 -65
  60. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Entry.php +59 -59
  61. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/EntryParser.php +299 -299
  62. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lexer.php +58 -58
  63. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lines.php +127 -127
  64. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Parser.php +53 -53
  65. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/ParserInterface.php +19 -19
  66. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Value.php +88 -88
  67. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php +15 -15
  68. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php +89 -89
  69. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php +80 -80
  70. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php +88 -88
  71. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php +85 -85
  72. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php +110 -110
  73. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php +48 -48
  74. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php +64 -64
  75. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php +91 -91
  76. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php +17 -17
  77. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php +104 -104
  78. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php +88 -88
  79. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php +27 -27
  80. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php +107 -107
  81. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php +272 -272
  82. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php +51 -51
  83. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Paths.php +44 -44
  84. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Reader.php +81 -81
  85. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/FileStore.php +72 -72
  86. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php +141 -141
  87. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php +17 -17
  88. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/StringStore.php +37 -37
  89. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Util/Regex.php +112 -112
  90. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Util/Str.php +108 -108
  91. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Validator.php +207 -207
  92. package/src/frontend/404.njk +2 -1
  93. package/src/frontend/components/global/footer.njk +13 -12
  94. package/src/frontend/components/global/header.njk +0 -4
  95. package/src/frontend/components/layouts/base.njk +47 -34
  96. package/src/frontend/components/welcome.njk +32 -668
  97. package/src/frontend/data/site.json +43 -43
  98. package/src/frontend/scss/modules/_buttons.scss +10 -4
  99. package/src/frontend/scss/modules/_footer.scss +5 -14
  100. package/src/frontend/scss/modules/_global.scss +1 -2
  101. package/src/frontend/scss/pages/404.scss +1 -1
  102. package/src/backend/_core/vendor/graham-campbell/result-type/.gitattributes +0 -9
  103. package/src/backend/_core/vendor/graham-campbell/result-type/.github/CODE_OF_CONDUCT.md +0 -132
  104. package/src/backend/_core/vendor/graham-campbell/result-type/.github/CONTRIBUTING.md +0 -31
  105. package/src/backend/_core/vendor/graham-campbell/result-type/.github/FUNDING.yml +0 -2
  106. package/src/backend/_core/vendor/graham-campbell/result-type/.github/SECURITY.md +0 -14
  107. package/src/backend/_core/vendor/graham-campbell/result-type/.github/workflows/stale.yml +0 -11
  108. package/src/backend/_core/vendor/graham-campbell/result-type/.github/workflows/tests.yml +0 -40
  109. package/src/backend/_core/vendor/graham-campbell/result-type/CHANGELOG.md +0 -53
  110. package/src/backend/_core/vendor/graham-campbell/result-type/README.md +0 -42
  111. package/src/backend/_core/vendor/graham-campbell/result-type/phpunit.xml.dist +0 -13
  112. package/src/backend/_core/vendor/graham-campbell/result-type/tests/ResultTest.php +0 -95
  113. package/src/backend/_core/vendor/phpoption/phpoption/.gitattributes +0 -13
  114. package/src/backend/_core/vendor/phpoption/phpoption/.github/CODE_OF_CONDUCT.md +0 -132
  115. package/src/backend/_core/vendor/phpoption/phpoption/.github/CONTRIBUTING.md +0 -30
  116. package/src/backend/_core/vendor/phpoption/phpoption/.github/FUNDING.yml +0 -2
  117. package/src/backend/_core/vendor/phpoption/phpoption/.github/SECURITY.md +0 -14
  118. package/src/backend/_core/vendor/phpoption/phpoption/.github/workflows/static.yml +0 -40
  119. package/src/backend/_core/vendor/phpoption/phpoption/.github/workflows/tests.yml +0 -40
  120. package/src/backend/_core/vendor/phpoption/phpoption/Makefile +0 -17
  121. package/src/backend/_core/vendor/phpoption/phpoption/README.md +0 -201
  122. package/src/backend/_core/vendor/phpoption/phpoption/phpstan-baseline.neon +0 -44
  123. package/src/backend/_core/vendor/phpoption/phpoption/phpstan.neon.dist +0 -7
  124. package/src/backend/_core/vendor/phpoption/phpoption/phpunit.xml.dist +0 -13
  125. package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/EnsureTest.php +0 -72
  126. package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/LazyOptionTest.php +0 -357
  127. package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/NoneTest.php +0 -153
  128. package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/OptionTest.php +0 -166
  129. package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php +0 -194
  130. package/src/backend/_core/vendor/phpoption/phpoption/tests/bootstrap.php +0 -8
  131. package/src/backend/_core/vendor/phpoption/phpoption/vendor-bin/phpstan/composer.json +0 -8
  132. package/src/backend/_core/vendor/vlucas/phpdotenv/.editorconfig +0 -15
  133. package/src/backend/_core/vendor/vlucas/phpdotenv/.gitattributes +0 -15
  134. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/CODE_OF_CONDUCT.md +0 -132
  135. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/CONTRIBUTING.md +0 -30
  136. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/FUNDING.yml +0 -2
  137. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/SECURITY.md +0 -14
  138. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/workflows/static.yml +0 -40
  139. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/workflows/tests.yml +0 -70
  140. package/src/backend/_core/vendor/vlucas/phpdotenv/Makefile +0 -17
  141. package/src/backend/_core/vendor/vlucas/phpdotenv/README.md +0 -370
  142. package/src/backend/_core/vendor/vlucas/phpdotenv/UPGRADING.md +0 -196
  143. package/src/backend/_core/vendor/vlucas/phpdotenv/phpstan-baseline.neon +0 -157
  144. package/src/backend/_core/vendor/vlucas/phpdotenv/phpstan.neon.dist +0 -7
  145. package/src/backend/_core/vendor/vlucas/phpdotenv/phpunit.xml.dist +0 -13
  146. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/DotenvTest.php +0 -387
  147. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Loader/LoaderTest.php +0 -86
  148. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/EntryParserTest.php +0 -234
  149. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LexerTest.php +0 -40
  150. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LinesTest.php +0 -53
  151. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/ParserTest.php +0 -98
  152. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ArrayAdapterTest.php +0 -57
  153. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/EnvConstAdapterTest.php +0 -75
  154. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/PutenvAdapterTest.php +0 -52
  155. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ServerConstAdapterTest.php +0 -75
  156. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/RepositoryTest.php +0 -305
  157. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Store/StoreTest.php +0 -141
  158. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/ValidatorTest.php +0 -479
  159. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/.env +0 -5
  160. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/assertions.env +0 -18
  161. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/booleans.env +0 -33
  162. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/commented.env +0 -15
  163. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/empty.env +0 -1
  164. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/example.env +0 -1
  165. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/exported.env +0 -7
  166. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/immutable.env +0 -1
  167. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/integers.env +0 -17
  168. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/large.env +0 -2
  169. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multibyte.env +0 -3
  170. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiline.env +0 -14
  171. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiple.env +0 -4
  172. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/mutable.env +0 -1
  173. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/nested.env +0 -15
  174. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/quoted.env +0 -11
  175. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/specialchars.env +0 -8
  176. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/unicodevarnames.env +0 -2
  177. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/utf8-with-bom-encoding.env +0 -3
  178. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/windows.env +0 -1
  179. package/src/backend/_core/vendor/vlucas/phpdotenv/vendor-bin/phpstan/composer.json +0 -15
  180. package/src/backend/config.php +0 -19
@@ -1,272 +1,272 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Repository;
6
-
7
- use Dotenv\Repository\Adapter\AdapterInterface;
8
- use Dotenv\Repository\Adapter\EnvConstAdapter;
9
- use Dotenv\Repository\Adapter\GuardedWriter;
10
- use Dotenv\Repository\Adapter\ImmutableWriter;
11
- use Dotenv\Repository\Adapter\MultiReader;
12
- use Dotenv\Repository\Adapter\MultiWriter;
13
- use Dotenv\Repository\Adapter\ReaderInterface;
14
- use Dotenv\Repository\Adapter\ServerConstAdapter;
15
- use Dotenv\Repository\Adapter\WriterInterface;
16
- use InvalidArgumentException;
17
- use PhpOption\Some;
18
- use ReflectionClass;
19
-
20
- final class RepositoryBuilder
21
- {
22
- /**
23
- * The set of default adapters.
24
- */
25
- private const DEFAULT_ADAPTERS = [
26
- ServerConstAdapter::class,
27
- EnvConstAdapter::class,
28
- ];
29
-
30
- /**
31
- * The set of readers to use.
32
- *
33
- * @var \Dotenv\Repository\Adapter\ReaderInterface[]
34
- */
35
- private $readers;
36
-
37
- /**
38
- * The set of writers to use.
39
- *
40
- * @var \Dotenv\Repository\Adapter\WriterInterface[]
41
- */
42
- private $writers;
43
-
44
- /**
45
- * Are we immutable?
46
- *
47
- * @var bool
48
- */
49
- private $immutable;
50
-
51
- /**
52
- * The variable name allow list.
53
- *
54
- * @var string[]|null
55
- */
56
- private $allowList;
57
-
58
- /**
59
- * Create a new repository builder instance.
60
- *
61
- * @param \Dotenv\Repository\Adapter\ReaderInterface[] $readers
62
- * @param \Dotenv\Repository\Adapter\WriterInterface[] $writers
63
- * @param bool $immutable
64
- * @param string[]|null $allowList
65
- *
66
- * @return void
67
- */
68
- private function __construct(array $readers = [], array $writers = [], bool $immutable = false, ?array $allowList = null)
69
- {
70
- $this->readers = $readers;
71
- $this->writers = $writers;
72
- $this->immutable = $immutable;
73
- $this->allowList = $allowList;
74
- }
75
-
76
- /**
77
- * Create a new repository builder instance with no adapters added.
78
- *
79
- * @return \Dotenv\Repository\RepositoryBuilder
80
- */
81
- public static function createWithNoAdapters()
82
- {
83
- return new self();
84
- }
85
-
86
- /**
87
- * Create a new repository builder instance with the default adapters added.
88
- *
89
- * @return \Dotenv\Repository\RepositoryBuilder
90
- */
91
- public static function createWithDefaultAdapters()
92
- {
93
- $adapters = \iterator_to_array(self::defaultAdapters());
94
-
95
- return new self($adapters, $adapters);
96
- }
97
-
98
- /**
99
- * Return the array of default adapters.
100
- *
101
- * @return \Generator<\Dotenv\Repository\Adapter\AdapterInterface>
102
- */
103
- private static function defaultAdapters()
104
- {
105
- foreach (self::DEFAULT_ADAPTERS as $adapter) {
106
- $instance = $adapter::create();
107
- if ($instance->isDefined()) {
108
- yield $instance->get();
109
- }
110
- }
111
- }
112
-
113
- /**
114
- * Determine if the given name if of an adapterclass.
115
- *
116
- * @param string $name
117
- *
118
- * @return bool
119
- */
120
- private static function isAnAdapterClass(string $name)
121
- {
122
- if (!\class_exists($name)) {
123
- return false;
124
- }
125
-
126
- return (new ReflectionClass($name))->implementsInterface(AdapterInterface::class);
127
- }
128
-
129
- /**
130
- * Creates a repository builder with the given reader added.
131
- *
132
- * Accepts either a reader instance, or a class-string for an adapter. If
133
- * the adapter is not supported, then we silently skip adding it.
134
- *
135
- * @param \Dotenv\Repository\Adapter\ReaderInterface|string $reader
136
- *
137
- * @throws \InvalidArgumentException
138
- *
139
- * @return \Dotenv\Repository\RepositoryBuilder
140
- */
141
- public function addReader($reader)
142
- {
143
- if (!(\is_string($reader) && self::isAnAdapterClass($reader)) && !($reader instanceof ReaderInterface)) {
144
- throw new InvalidArgumentException(
145
- \sprintf(
146
- 'Expected either an instance of %s or a class-string implementing %s',
147
- ReaderInterface::class,
148
- AdapterInterface::class
149
- )
150
- );
151
- }
152
-
153
- $optional = Some::create($reader)->flatMap(static function ($reader) {
154
- return \is_string($reader) ? $reader::create() : Some::create($reader);
155
- });
156
-
157
- $readers = \array_merge($this->readers, \iterator_to_array($optional));
158
-
159
- return new self($readers, $this->writers, $this->immutable, $this->allowList);
160
- }
161
-
162
- /**
163
- * Creates a repository builder with the given writer added.
164
- *
165
- * Accepts either a writer instance, or a class-string for an adapter. If
166
- * the adapter is not supported, then we silently skip adding it.
167
- *
168
- * @param \Dotenv\Repository\Adapter\WriterInterface|string $writer
169
- *
170
- * @throws \InvalidArgumentException
171
- *
172
- * @return \Dotenv\Repository\RepositoryBuilder
173
- */
174
- public function addWriter($writer)
175
- {
176
- if (!(\is_string($writer) && self::isAnAdapterClass($writer)) && !($writer instanceof WriterInterface)) {
177
- throw new InvalidArgumentException(
178
- \sprintf(
179
- 'Expected either an instance of %s or a class-string implementing %s',
180
- WriterInterface::class,
181
- AdapterInterface::class
182
- )
183
- );
184
- }
185
-
186
- $optional = Some::create($writer)->flatMap(static function ($writer) {
187
- return \is_string($writer) ? $writer::create() : Some::create($writer);
188
- });
189
-
190
- $writers = \array_merge($this->writers, \iterator_to_array($optional));
191
-
192
- return new self($this->readers, $writers, $this->immutable, $this->allowList);
193
- }
194
-
195
- /**
196
- * Creates a repository builder with the given adapter added.
197
- *
198
- * Accepts either an adapter instance, or a class-string for an adapter. If
199
- * the adapter is not supported, then we silently skip adding it. We will
200
- * add the adapter as both a reader and a writer.
201
- *
202
- * @param \Dotenv\Repository\Adapter\WriterInterface|string $adapter
203
- *
204
- * @throws \InvalidArgumentException
205
- *
206
- * @return \Dotenv\Repository\RepositoryBuilder
207
- */
208
- public function addAdapter($adapter)
209
- {
210
- if (!(\is_string($adapter) && self::isAnAdapterClass($adapter)) && !($adapter instanceof AdapterInterface)) {
211
- throw new InvalidArgumentException(
212
- \sprintf(
213
- 'Expected either an instance of %s or a class-string implementing %s',
214
- WriterInterface::class,
215
- AdapterInterface::class
216
- )
217
- );
218
- }
219
-
220
- $optional = Some::create($adapter)->flatMap(static function ($adapter) {
221
- return \is_string($adapter) ? $adapter::create() : Some::create($adapter);
222
- });
223
-
224
- $readers = \array_merge($this->readers, \iterator_to_array($optional));
225
- $writers = \array_merge($this->writers, \iterator_to_array($optional));
226
-
227
- return new self($readers, $writers, $this->immutable, $this->allowList);
228
- }
229
-
230
- /**
231
- * Creates a repository builder with mutability enabled.
232
- *
233
- * @return \Dotenv\Repository\RepositoryBuilder
234
- */
235
- public function immutable()
236
- {
237
- return new self($this->readers, $this->writers, true, $this->allowList);
238
- }
239
-
240
- /**
241
- * Creates a repository builder with the given allow list.
242
- *
243
- * @param string[]|null $allowList
244
- *
245
- * @return \Dotenv\Repository\RepositoryBuilder
246
- */
247
- public function allowList(?array $allowList = null)
248
- {
249
- return new self($this->readers, $this->writers, $this->immutable, $allowList);
250
- }
251
-
252
- /**
253
- * Creates a new repository instance.
254
- *
255
- * @return \Dotenv\Repository\RepositoryInterface
256
- */
257
- public function make()
258
- {
259
- $reader = new MultiReader($this->readers);
260
- $writer = new MultiWriter($this->writers);
261
-
262
- if ($this->immutable) {
263
- $writer = new ImmutableWriter($writer, $reader);
264
- }
265
-
266
- if ($this->allowList !== null) {
267
- $writer = new GuardedWriter($writer, $this->allowList);
268
- }
269
-
270
- return new AdapterRepository($reader, $writer);
271
- }
272
- }
1
+ <?php
2
+
3
+ declare(strict_types=1);
4
+
5
+ namespace Dotenv\Repository;
6
+
7
+ use Dotenv\Repository\Adapter\AdapterInterface;
8
+ use Dotenv\Repository\Adapter\EnvConstAdapter;
9
+ use Dotenv\Repository\Adapter\GuardedWriter;
10
+ use Dotenv\Repository\Adapter\ImmutableWriter;
11
+ use Dotenv\Repository\Adapter\MultiReader;
12
+ use Dotenv\Repository\Adapter\MultiWriter;
13
+ use Dotenv\Repository\Adapter\ReaderInterface;
14
+ use Dotenv\Repository\Adapter\ServerConstAdapter;
15
+ use Dotenv\Repository\Adapter\WriterInterface;
16
+ use InvalidArgumentException;
17
+ use PhpOption\Some;
18
+ use ReflectionClass;
19
+
20
+ final class RepositoryBuilder
21
+ {
22
+ /**
23
+ * The set of default adapters.
24
+ */
25
+ private const DEFAULT_ADAPTERS = [
26
+ ServerConstAdapter::class,
27
+ EnvConstAdapter::class,
28
+ ];
29
+
30
+ /**
31
+ * The set of readers to use.
32
+ *
33
+ * @var \Dotenv\Repository\Adapter\ReaderInterface[]
34
+ */
35
+ private $readers;
36
+
37
+ /**
38
+ * The set of writers to use.
39
+ *
40
+ * @var \Dotenv\Repository\Adapter\WriterInterface[]
41
+ */
42
+ private $writers;
43
+
44
+ /**
45
+ * Are we immutable?
46
+ *
47
+ * @var bool
48
+ */
49
+ private $immutable;
50
+
51
+ /**
52
+ * The variable name allow list.
53
+ *
54
+ * @var string[]|null
55
+ */
56
+ private $allowList;
57
+
58
+ /**
59
+ * Create a new repository builder instance.
60
+ *
61
+ * @param \Dotenv\Repository\Adapter\ReaderInterface[] $readers
62
+ * @param \Dotenv\Repository\Adapter\WriterInterface[] $writers
63
+ * @param bool $immutable
64
+ * @param string[]|null $allowList
65
+ *
66
+ * @return void
67
+ */
68
+ private function __construct(array $readers = [], array $writers = [], bool $immutable = false, ?array $allowList = null)
69
+ {
70
+ $this->readers = $readers;
71
+ $this->writers = $writers;
72
+ $this->immutable = $immutable;
73
+ $this->allowList = $allowList;
74
+ }
75
+
76
+ /**
77
+ * Create a new repository builder instance with no adapters added.
78
+ *
79
+ * @return \Dotenv\Repository\RepositoryBuilder
80
+ */
81
+ public static function createWithNoAdapters()
82
+ {
83
+ return new self();
84
+ }
85
+
86
+ /**
87
+ * Create a new repository builder instance with the default adapters added.
88
+ *
89
+ * @return \Dotenv\Repository\RepositoryBuilder
90
+ */
91
+ public static function createWithDefaultAdapters()
92
+ {
93
+ $adapters = \iterator_to_array(self::defaultAdapters());
94
+
95
+ return new self($adapters, $adapters);
96
+ }
97
+
98
+ /**
99
+ * Return the array of default adapters.
100
+ *
101
+ * @return \Generator<\Dotenv\Repository\Adapter\AdapterInterface>
102
+ */
103
+ private static function defaultAdapters()
104
+ {
105
+ foreach (self::DEFAULT_ADAPTERS as $adapter) {
106
+ $instance = $adapter::create();
107
+ if ($instance->isDefined()) {
108
+ yield $instance->get();
109
+ }
110
+ }
111
+ }
112
+
113
+ /**
114
+ * Determine if the given name if of an adapterclass.
115
+ *
116
+ * @param string $name
117
+ *
118
+ * @return bool
119
+ */
120
+ private static function isAnAdapterClass(string $name)
121
+ {
122
+ if (!\class_exists($name)) {
123
+ return false;
124
+ }
125
+
126
+ return (new ReflectionClass($name))->implementsInterface(AdapterInterface::class);
127
+ }
128
+
129
+ /**
130
+ * Creates a repository builder with the given reader added.
131
+ *
132
+ * Accepts either a reader instance, or a class-string for an adapter. If
133
+ * the adapter is not supported, then we silently skip adding it.
134
+ *
135
+ * @param \Dotenv\Repository\Adapter\ReaderInterface|string $reader
136
+ *
137
+ * @throws \InvalidArgumentException
138
+ *
139
+ * @return \Dotenv\Repository\RepositoryBuilder
140
+ */
141
+ public function addReader($reader)
142
+ {
143
+ if (!(\is_string($reader) && self::isAnAdapterClass($reader)) && !($reader instanceof ReaderInterface)) {
144
+ throw new InvalidArgumentException(
145
+ \sprintf(
146
+ 'Expected either an instance of %s or a class-string implementing %s',
147
+ ReaderInterface::class,
148
+ AdapterInterface::class
149
+ )
150
+ );
151
+ }
152
+
153
+ $optional = Some::create($reader)->flatMap(static function ($reader) {
154
+ return \is_string($reader) ? $reader::create() : Some::create($reader);
155
+ });
156
+
157
+ $readers = \array_merge($this->readers, \iterator_to_array($optional));
158
+
159
+ return new self($readers, $this->writers, $this->immutable, $this->allowList);
160
+ }
161
+
162
+ /**
163
+ * Creates a repository builder with the given writer added.
164
+ *
165
+ * Accepts either a writer instance, or a class-string for an adapter. If
166
+ * the adapter is not supported, then we silently skip adding it.
167
+ *
168
+ * @param \Dotenv\Repository\Adapter\WriterInterface|string $writer
169
+ *
170
+ * @throws \InvalidArgumentException
171
+ *
172
+ * @return \Dotenv\Repository\RepositoryBuilder
173
+ */
174
+ public function addWriter($writer)
175
+ {
176
+ if (!(\is_string($writer) && self::isAnAdapterClass($writer)) && !($writer instanceof WriterInterface)) {
177
+ throw new InvalidArgumentException(
178
+ \sprintf(
179
+ 'Expected either an instance of %s or a class-string implementing %s',
180
+ WriterInterface::class,
181
+ AdapterInterface::class
182
+ )
183
+ );
184
+ }
185
+
186
+ $optional = Some::create($writer)->flatMap(static function ($writer) {
187
+ return \is_string($writer) ? $writer::create() : Some::create($writer);
188
+ });
189
+
190
+ $writers = \array_merge($this->writers, \iterator_to_array($optional));
191
+
192
+ return new self($this->readers, $writers, $this->immutable, $this->allowList);
193
+ }
194
+
195
+ /**
196
+ * Creates a repository builder with the given adapter added.
197
+ *
198
+ * Accepts either an adapter instance, or a class-string for an adapter. If
199
+ * the adapter is not supported, then we silently skip adding it. We will
200
+ * add the adapter as both a reader and a writer.
201
+ *
202
+ * @param \Dotenv\Repository\Adapter\WriterInterface|string $adapter
203
+ *
204
+ * @throws \InvalidArgumentException
205
+ *
206
+ * @return \Dotenv\Repository\RepositoryBuilder
207
+ */
208
+ public function addAdapter($adapter)
209
+ {
210
+ if (!(\is_string($adapter) && self::isAnAdapterClass($adapter)) && !($adapter instanceof AdapterInterface)) {
211
+ throw new InvalidArgumentException(
212
+ \sprintf(
213
+ 'Expected either an instance of %s or a class-string implementing %s',
214
+ WriterInterface::class,
215
+ AdapterInterface::class
216
+ )
217
+ );
218
+ }
219
+
220
+ $optional = Some::create($adapter)->flatMap(static function ($adapter) {
221
+ return \is_string($adapter) ? $adapter::create() : Some::create($adapter);
222
+ });
223
+
224
+ $readers = \array_merge($this->readers, \iterator_to_array($optional));
225
+ $writers = \array_merge($this->writers, \iterator_to_array($optional));
226
+
227
+ return new self($readers, $writers, $this->immutable, $this->allowList);
228
+ }
229
+
230
+ /**
231
+ * Creates a repository builder with mutability enabled.
232
+ *
233
+ * @return \Dotenv\Repository\RepositoryBuilder
234
+ */
235
+ public function immutable()
236
+ {
237
+ return new self($this->readers, $this->writers, true, $this->allowList);
238
+ }
239
+
240
+ /**
241
+ * Creates a repository builder with the given allow list.
242
+ *
243
+ * @param string[]|null $allowList
244
+ *
245
+ * @return \Dotenv\Repository\RepositoryBuilder
246
+ */
247
+ public function allowList(?array $allowList = null)
248
+ {
249
+ return new self($this->readers, $this->writers, $this->immutable, $allowList);
250
+ }
251
+
252
+ /**
253
+ * Creates a new repository instance.
254
+ *
255
+ * @return \Dotenv\Repository\RepositoryInterface
256
+ */
257
+ public function make()
258
+ {
259
+ $reader = new MultiReader($this->readers);
260
+ $writer = new MultiWriter($this->writers);
261
+
262
+ if ($this->immutable) {
263
+ $writer = new ImmutableWriter($writer, $reader);
264
+ }
265
+
266
+ if ($this->allowList !== null) {
267
+ $writer = new GuardedWriter($writer, $this->allowList);
268
+ }
269
+
270
+ return new AdapterRepository($reader, $writer);
271
+ }
272
+ }
@@ -1,51 +1,51 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Repository;
6
-
7
- interface RepositoryInterface
8
- {
9
- /**
10
- * Determine if the given environment variable is defined.
11
- *
12
- * @param string $name
13
- *
14
- * @return bool
15
- */
16
- public function has(string $name);
17
-
18
- /**
19
- * Get an environment variable.
20
- *
21
- * @param string $name
22
- *
23
- * @throws \InvalidArgumentException
24
- *
25
- * @return string|null
26
- */
27
- public function get(string $name);
28
-
29
- /**
30
- * Set an environment variable.
31
- *
32
- * @param string $name
33
- * @param string $value
34
- *
35
- * @throws \InvalidArgumentException
36
- *
37
- * @return bool
38
- */
39
- public function set(string $name, string $value);
40
-
41
- /**
42
- * Clear an environment variable.
43
- *
44
- * @param string $name
45
- *
46
- * @throws \InvalidArgumentException
47
- *
48
- * @return bool
49
- */
50
- public function clear(string $name);
51
- }
1
+ <?php
2
+
3
+ declare(strict_types=1);
4
+
5
+ namespace Dotenv\Repository;
6
+
7
+ interface RepositoryInterface
8
+ {
9
+ /**
10
+ * Determine if the given environment variable is defined.
11
+ *
12
+ * @param string $name
13
+ *
14
+ * @return bool
15
+ */
16
+ public function has(string $name);
17
+
18
+ /**
19
+ * Get an environment variable.
20
+ *
21
+ * @param string $name
22
+ *
23
+ * @throws \InvalidArgumentException
24
+ *
25
+ * @return string|null
26
+ */
27
+ public function get(string $name);
28
+
29
+ /**
30
+ * Set an environment variable.
31
+ *
32
+ * @param string $name
33
+ * @param string $value
34
+ *
35
+ * @throws \InvalidArgumentException
36
+ *
37
+ * @return bool
38
+ */
39
+ public function set(string $name, string $value);
40
+
41
+ /**
42
+ * Clear an environment variable.
43
+ *
44
+ * @param string $name
45
+ *
46
+ * @throws \InvalidArgumentException
47
+ *
48
+ * @return bool
49
+ */
50
+ public function clear(string $name);
51
+ }