create-berna-stencil 2.0.0 → 2.0.2

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 (167) hide show
  1. package/README.md +1 -1
  2. package/package.json +58 -58
  3. package/src/backend/_core/vendor/composer/autoload_static.php +10 -10
  4. package/src/backend/_core/vendor/composer/installed.json +6 -6
  5. package/src/backend/_core/vendor/composer/installed.php +2 -2
  6. package/src/backend/_core/vendor/graham-campbell/result-type/LICENSE +21 -21
  7. package/src/backend/_core/vendor/graham-campbell/result-type/composer.json +33 -33
  8. package/src/backend/_core/vendor/graham-campbell/result-type/src/Error.php +121 -121
  9. package/src/backend/_core/vendor/graham-campbell/result-type/src/Result.php +69 -69
  10. package/src/backend/_core/vendor/graham-campbell/result-type/src/Success.php +120 -120
  11. package/src/backend/_core/vendor/phpoption/phpoption/LICENSE +200 -200
  12. package/src/backend/_core/vendor/phpoption/phpoption/composer.json +50 -50
  13. package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php +175 -175
  14. package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/None.php +136 -136
  15. package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Option.php +434 -434
  16. package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Some.php +169 -169
  17. package/src/backend/_core/vendor/symfony/polyfill-ctype/Ctype.php +232 -232
  18. package/src/backend/_core/vendor/symfony/polyfill-ctype/LICENSE +19 -19
  19. package/src/backend/_core/vendor/symfony/polyfill-ctype/README.md +12 -12
  20. package/src/backend/_core/vendor/symfony/polyfill-ctype/bootstrap.php +50 -50
  21. package/src/backend/_core/vendor/symfony/polyfill-ctype/bootstrap80.php +46 -46
  22. package/src/backend/_core/vendor/symfony/polyfill-ctype/composer.json +38 -38
  23. package/src/backend/_core/vendor/symfony/polyfill-mbstring/LICENSE +19 -19
  24. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Mbstring.php +1077 -1077
  25. package/src/backend/_core/vendor/symfony/polyfill-mbstring/README.md +13 -13
  26. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +119 -119
  27. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1397 -1397
  28. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +5 -5
  29. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +1489 -1489
  30. package/src/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap.php +171 -171
  31. package/src/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap80.php +167 -167
  32. package/src/backend/_core/vendor/symfony/polyfill-mbstring/composer.json +39 -39
  33. package/src/backend/_core/vendor/symfony/polyfill-php80/LICENSE +19 -19
  34. package/src/backend/_core/vendor/symfony/polyfill-php80/Php80.php +115 -115
  35. package/src/backend/_core/vendor/symfony/polyfill-php80/PhpToken.php +106 -106
  36. package/src/backend/_core/vendor/symfony/polyfill-php80/README.md +25 -25
  37. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +31 -31
  38. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +16 -16
  39. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +20 -20
  40. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +16 -16
  41. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +16 -16
  42. package/src/backend/_core/vendor/symfony/polyfill-php80/bootstrap.php +42 -42
  43. package/src/backend/_core/vendor/symfony/polyfill-php80/composer.json +37 -37
  44. package/src/backend/_core/vendor/vlucas/phpdotenv/LICENSE +30 -30
  45. package/src/backend/_core/vendor/vlucas/phpdotenv/composer.json +60 -60
  46. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Dotenv.php +267 -267
  47. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php +12 -12
  48. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php +12 -12
  49. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidFileException.php +12 -12
  50. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidPathException.php +12 -12
  51. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ValidationException.php +12 -12
  52. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Loader.php +48 -48
  53. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php +20 -20
  54. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Resolver.php +65 -65
  55. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Entry.php +59 -59
  56. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/EntryParser.php +299 -299
  57. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lexer.php +58 -58
  58. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lines.php +127 -127
  59. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Parser.php +53 -53
  60. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/ParserInterface.php +19 -19
  61. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Value.php +88 -88
  62. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php +15 -15
  63. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php +89 -89
  64. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php +80 -80
  65. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php +88 -88
  66. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php +85 -85
  67. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php +110 -110
  68. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php +48 -48
  69. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php +64 -64
  70. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php +91 -91
  71. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php +17 -17
  72. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php +104 -104
  73. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php +88 -88
  74. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php +27 -27
  75. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php +107 -107
  76. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php +272 -272
  77. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php +51 -51
  78. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Paths.php +44 -44
  79. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Reader.php +81 -81
  80. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/FileStore.php +72 -72
  81. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php +141 -141
  82. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php +17 -17
  83. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/StringStore.php +37 -37
  84. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Util/Regex.php +112 -112
  85. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Util/Str.php +108 -108
  86. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Validator.php +207 -207
  87. package/src/frontend/components/welcome.njk +21 -11
  88. package/src/frontend/data/site.json +43 -43
  89. package/src/backend/_core/vendor/graham-campbell/result-type/.gitattributes +0 -9
  90. package/src/backend/_core/vendor/graham-campbell/result-type/.github/CODE_OF_CONDUCT.md +0 -132
  91. package/src/backend/_core/vendor/graham-campbell/result-type/.github/CONTRIBUTING.md +0 -31
  92. package/src/backend/_core/vendor/graham-campbell/result-type/.github/FUNDING.yml +0 -2
  93. package/src/backend/_core/vendor/graham-campbell/result-type/.github/SECURITY.md +0 -14
  94. package/src/backend/_core/vendor/graham-campbell/result-type/.github/workflows/stale.yml +0 -11
  95. package/src/backend/_core/vendor/graham-campbell/result-type/.github/workflows/tests.yml +0 -40
  96. package/src/backend/_core/vendor/graham-campbell/result-type/CHANGELOG.md +0 -53
  97. package/src/backend/_core/vendor/graham-campbell/result-type/README.md +0 -42
  98. package/src/backend/_core/vendor/graham-campbell/result-type/phpunit.xml.dist +0 -13
  99. package/src/backend/_core/vendor/graham-campbell/result-type/tests/ResultTest.php +0 -95
  100. package/src/backend/_core/vendor/phpoption/phpoption/.gitattributes +0 -13
  101. package/src/backend/_core/vendor/phpoption/phpoption/.github/CODE_OF_CONDUCT.md +0 -132
  102. package/src/backend/_core/vendor/phpoption/phpoption/.github/CONTRIBUTING.md +0 -30
  103. package/src/backend/_core/vendor/phpoption/phpoption/.github/FUNDING.yml +0 -2
  104. package/src/backend/_core/vendor/phpoption/phpoption/.github/SECURITY.md +0 -14
  105. package/src/backend/_core/vendor/phpoption/phpoption/.github/workflows/static.yml +0 -40
  106. package/src/backend/_core/vendor/phpoption/phpoption/.github/workflows/tests.yml +0 -40
  107. package/src/backend/_core/vendor/phpoption/phpoption/Makefile +0 -17
  108. package/src/backend/_core/vendor/phpoption/phpoption/README.md +0 -201
  109. package/src/backend/_core/vendor/phpoption/phpoption/phpstan-baseline.neon +0 -44
  110. package/src/backend/_core/vendor/phpoption/phpoption/phpstan.neon.dist +0 -7
  111. package/src/backend/_core/vendor/phpoption/phpoption/phpunit.xml.dist +0 -13
  112. package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/EnsureTest.php +0 -72
  113. package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/LazyOptionTest.php +0 -357
  114. package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/NoneTest.php +0 -153
  115. package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/OptionTest.php +0 -166
  116. package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php +0 -194
  117. package/src/backend/_core/vendor/phpoption/phpoption/tests/bootstrap.php +0 -8
  118. package/src/backend/_core/vendor/phpoption/phpoption/vendor-bin/phpstan/composer.json +0 -8
  119. package/src/backend/_core/vendor/vlucas/phpdotenv/.editorconfig +0 -15
  120. package/src/backend/_core/vendor/vlucas/phpdotenv/.gitattributes +0 -15
  121. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/CODE_OF_CONDUCT.md +0 -132
  122. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/CONTRIBUTING.md +0 -30
  123. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/FUNDING.yml +0 -2
  124. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/SECURITY.md +0 -14
  125. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/workflows/static.yml +0 -40
  126. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/workflows/tests.yml +0 -70
  127. package/src/backend/_core/vendor/vlucas/phpdotenv/Makefile +0 -17
  128. package/src/backend/_core/vendor/vlucas/phpdotenv/README.md +0 -370
  129. package/src/backend/_core/vendor/vlucas/phpdotenv/UPGRADING.md +0 -196
  130. package/src/backend/_core/vendor/vlucas/phpdotenv/phpstan-baseline.neon +0 -157
  131. package/src/backend/_core/vendor/vlucas/phpdotenv/phpstan.neon.dist +0 -7
  132. package/src/backend/_core/vendor/vlucas/phpdotenv/phpunit.xml.dist +0 -13
  133. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/DotenvTest.php +0 -387
  134. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Loader/LoaderTest.php +0 -86
  135. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/EntryParserTest.php +0 -234
  136. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LexerTest.php +0 -40
  137. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LinesTest.php +0 -53
  138. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/ParserTest.php +0 -98
  139. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ArrayAdapterTest.php +0 -57
  140. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/EnvConstAdapterTest.php +0 -75
  141. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/PutenvAdapterTest.php +0 -52
  142. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ServerConstAdapterTest.php +0 -75
  143. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/RepositoryTest.php +0 -305
  144. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Store/StoreTest.php +0 -141
  145. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/ValidatorTest.php +0 -479
  146. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/.env +0 -5
  147. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/assertions.env +0 -18
  148. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/booleans.env +0 -33
  149. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/commented.env +0 -15
  150. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/empty.env +0 -1
  151. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/example.env +0 -1
  152. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/exported.env +0 -7
  153. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/immutable.env +0 -1
  154. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/integers.env +0 -17
  155. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/large.env +0 -2
  156. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multibyte.env +0 -3
  157. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiline.env +0 -14
  158. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiple.env +0 -4
  159. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/mutable.env +0 -1
  160. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/nested.env +0 -15
  161. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/quoted.env +0 -11
  162. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/specialchars.env +0 -8
  163. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/unicodevarnames.env +0 -2
  164. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/utf8-with-bom-encoding.env +0 -3
  165. package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/windows.env +0 -1
  166. package/src/backend/_core/vendor/vlucas/phpdotenv/vendor-bin/phpstan/composer.json +0 -15
  167. package/src/backend/config.php +0 -18
@@ -1,207 +1,207 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv;
6
-
7
- use Dotenv\Exception\ValidationException;
8
- use Dotenv\Repository\RepositoryInterface;
9
- use Dotenv\Util\Regex;
10
- use Dotenv\Util\Str;
11
-
12
- class Validator
13
- {
14
- /**
15
- * The environment repository instance.
16
- *
17
- * @var \Dotenv\Repository\RepositoryInterface
18
- */
19
- private $repository;
20
-
21
- /**
22
- * The variables to validate.
23
- *
24
- * @var string[]
25
- */
26
- private $variables;
27
-
28
- /**
29
- * Create a new validator instance.
30
- *
31
- * @param \Dotenv\Repository\RepositoryInterface $repository
32
- * @param string[] $variables
33
- *
34
- * @return void
35
- */
36
- public function __construct(RepositoryInterface $repository, array $variables)
37
- {
38
- $this->repository = $repository;
39
- $this->variables = $variables;
40
- }
41
-
42
- /**
43
- * Assert that each variable is present.
44
- *
45
- * @throws \Dotenv\Exception\ValidationException
46
- *
47
- * @return \Dotenv\Validator
48
- */
49
- public function required()
50
- {
51
- return $this->assert(
52
- static function (?string $value) {
53
- return $value !== null;
54
- },
55
- 'is missing'
56
- );
57
- }
58
-
59
- /**
60
- * Assert that each variable is not empty.
61
- *
62
- * @throws \Dotenv\Exception\ValidationException
63
- *
64
- * @return \Dotenv\Validator
65
- */
66
- public function notEmpty()
67
- {
68
- return $this->assertNullable(
69
- static function (string $value) {
70
- return Str::len(\trim($value)) > 0;
71
- },
72
- 'is empty'
73
- );
74
- }
75
-
76
- /**
77
- * Assert that each specified variable is an integer.
78
- *
79
- * @throws \Dotenv\Exception\ValidationException
80
- *
81
- * @return \Dotenv\Validator
82
- */
83
- public function isInteger()
84
- {
85
- return $this->assertNullable(
86
- static function (string $value) {
87
- return \ctype_digit($value);
88
- },
89
- 'is not an integer'
90
- );
91
- }
92
-
93
- /**
94
- * Assert that each specified variable is a boolean.
95
- *
96
- * @throws \Dotenv\Exception\ValidationException
97
- *
98
- * @return \Dotenv\Validator
99
- */
100
- public function isBoolean()
101
- {
102
- return $this->assertNullable(
103
- static function (string $value) {
104
- if ($value === '') {
105
- return false;
106
- }
107
-
108
- return \filter_var($value, \FILTER_VALIDATE_BOOLEAN, \FILTER_NULL_ON_FAILURE) !== null;
109
- },
110
- 'is not a boolean'
111
- );
112
- }
113
-
114
- /**
115
- * Assert that each variable is amongst the given choices.
116
- *
117
- * @param string[] $choices
118
- *
119
- * @throws \Dotenv\Exception\ValidationException
120
- *
121
- * @return \Dotenv\Validator
122
- */
123
- public function allowedValues(array $choices)
124
- {
125
- return $this->assertNullable(
126
- static function (string $value) use ($choices) {
127
- return \in_array($value, $choices, true);
128
- },
129
- \sprintf('is not one of [%s]', \implode(', ', $choices))
130
- );
131
- }
132
-
133
- /**
134
- * Assert that each variable matches the given regular expression.
135
- *
136
- * @param string $regex
137
- *
138
- * @throws \Dotenv\Exception\ValidationException
139
- *
140
- * @return \Dotenv\Validator
141
- */
142
- public function allowedRegexValues(string $regex)
143
- {
144
- return $this->assertNullable(
145
- static function (string $value) use ($regex) {
146
- return Regex::matches($regex, $value)->success()->getOrElse(false);
147
- },
148
- \sprintf('does not match "%s"', $regex)
149
- );
150
- }
151
-
152
- /**
153
- * Assert that the callback returns true for each variable.
154
- *
155
- * @param callable(?string):bool $callback
156
- * @param string $message
157
- *
158
- * @throws \Dotenv\Exception\ValidationException
159
- *
160
- * @return \Dotenv\Validator
161
- */
162
- public function assert(callable $callback, string $message)
163
- {
164
- $failing = [];
165
-
166
- foreach ($this->variables as $variable) {
167
- if ($callback($this->repository->get($variable)) === false) {
168
- $failing[] = \sprintf('%s %s', $variable, $message);
169
- }
170
- }
171
-
172
- if (\count($failing) > 0) {
173
- throw new ValidationException(\sprintf(
174
- 'One or more environment variables failed assertions: %s.',
175
- \implode(', ', $failing)
176
- ));
177
- }
178
-
179
- return $this;
180
- }
181
-
182
- /**
183
- * Assert that the callback returns true for each variable.
184
- *
185
- * Skip checking null variable values.
186
- *
187
- * @param callable(string):bool $callback
188
- * @param string $message
189
- *
190
- * @throws \Dotenv\Exception\ValidationException
191
- *
192
- * @return \Dotenv\Validator
193
- */
194
- public function assertNullable(callable $callback, string $message)
195
- {
196
- return $this->assert(
197
- static function (?string $value) use ($callback) {
198
- if ($value === null) {
199
- return true;
200
- }
201
-
202
- return $callback($value);
203
- },
204
- $message
205
- );
206
- }
207
- }
1
+ <?php
2
+
3
+ declare(strict_types=1);
4
+
5
+ namespace Dotenv;
6
+
7
+ use Dotenv\Exception\ValidationException;
8
+ use Dotenv\Repository\RepositoryInterface;
9
+ use Dotenv\Util\Regex;
10
+ use Dotenv\Util\Str;
11
+
12
+ class Validator
13
+ {
14
+ /**
15
+ * The environment repository instance.
16
+ *
17
+ * @var \Dotenv\Repository\RepositoryInterface
18
+ */
19
+ private $repository;
20
+
21
+ /**
22
+ * The variables to validate.
23
+ *
24
+ * @var string[]
25
+ */
26
+ private $variables;
27
+
28
+ /**
29
+ * Create a new validator instance.
30
+ *
31
+ * @param \Dotenv\Repository\RepositoryInterface $repository
32
+ * @param string[] $variables
33
+ *
34
+ * @return void
35
+ */
36
+ public function __construct(RepositoryInterface $repository, array $variables)
37
+ {
38
+ $this->repository = $repository;
39
+ $this->variables = $variables;
40
+ }
41
+
42
+ /**
43
+ * Assert that each variable is present.
44
+ *
45
+ * @throws \Dotenv\Exception\ValidationException
46
+ *
47
+ * @return \Dotenv\Validator
48
+ */
49
+ public function required()
50
+ {
51
+ return $this->assert(
52
+ static function (?string $value) {
53
+ return $value !== null;
54
+ },
55
+ 'is missing'
56
+ );
57
+ }
58
+
59
+ /**
60
+ * Assert that each variable is not empty.
61
+ *
62
+ * @throws \Dotenv\Exception\ValidationException
63
+ *
64
+ * @return \Dotenv\Validator
65
+ */
66
+ public function notEmpty()
67
+ {
68
+ return $this->assertNullable(
69
+ static function (string $value) {
70
+ return Str::len(\trim($value)) > 0;
71
+ },
72
+ 'is empty'
73
+ );
74
+ }
75
+
76
+ /**
77
+ * Assert that each specified variable is an integer.
78
+ *
79
+ * @throws \Dotenv\Exception\ValidationException
80
+ *
81
+ * @return \Dotenv\Validator
82
+ */
83
+ public function isInteger()
84
+ {
85
+ return $this->assertNullable(
86
+ static function (string $value) {
87
+ return \ctype_digit($value);
88
+ },
89
+ 'is not an integer'
90
+ );
91
+ }
92
+
93
+ /**
94
+ * Assert that each specified variable is a boolean.
95
+ *
96
+ * @throws \Dotenv\Exception\ValidationException
97
+ *
98
+ * @return \Dotenv\Validator
99
+ */
100
+ public function isBoolean()
101
+ {
102
+ return $this->assertNullable(
103
+ static function (string $value) {
104
+ if ($value === '') {
105
+ return false;
106
+ }
107
+
108
+ return \filter_var($value, \FILTER_VALIDATE_BOOLEAN, \FILTER_NULL_ON_FAILURE) !== null;
109
+ },
110
+ 'is not a boolean'
111
+ );
112
+ }
113
+
114
+ /**
115
+ * Assert that each variable is amongst the given choices.
116
+ *
117
+ * @param string[] $choices
118
+ *
119
+ * @throws \Dotenv\Exception\ValidationException
120
+ *
121
+ * @return \Dotenv\Validator
122
+ */
123
+ public function allowedValues(array $choices)
124
+ {
125
+ return $this->assertNullable(
126
+ static function (string $value) use ($choices) {
127
+ return \in_array($value, $choices, true);
128
+ },
129
+ \sprintf('is not one of [%s]', \implode(', ', $choices))
130
+ );
131
+ }
132
+
133
+ /**
134
+ * Assert that each variable matches the given regular expression.
135
+ *
136
+ * @param string $regex
137
+ *
138
+ * @throws \Dotenv\Exception\ValidationException
139
+ *
140
+ * @return \Dotenv\Validator
141
+ */
142
+ public function allowedRegexValues(string $regex)
143
+ {
144
+ return $this->assertNullable(
145
+ static function (string $value) use ($regex) {
146
+ return Regex::matches($regex, $value)->success()->getOrElse(false);
147
+ },
148
+ \sprintf('does not match "%s"', $regex)
149
+ );
150
+ }
151
+
152
+ /**
153
+ * Assert that the callback returns true for each variable.
154
+ *
155
+ * @param callable(?string):bool $callback
156
+ * @param string $message
157
+ *
158
+ * @throws \Dotenv\Exception\ValidationException
159
+ *
160
+ * @return \Dotenv\Validator
161
+ */
162
+ public function assert(callable $callback, string $message)
163
+ {
164
+ $failing = [];
165
+
166
+ foreach ($this->variables as $variable) {
167
+ if ($callback($this->repository->get($variable)) === false) {
168
+ $failing[] = \sprintf('%s %s', $variable, $message);
169
+ }
170
+ }
171
+
172
+ if (\count($failing) > 0) {
173
+ throw new ValidationException(\sprintf(
174
+ 'One or more environment variables failed assertions: %s.',
175
+ \implode(', ', $failing)
176
+ ));
177
+ }
178
+
179
+ return $this;
180
+ }
181
+
182
+ /**
183
+ * Assert that the callback returns true for each variable.
184
+ *
185
+ * Skip checking null variable values.
186
+ *
187
+ * @param callable(string):bool $callback
188
+ * @param string $message
189
+ *
190
+ * @throws \Dotenv\Exception\ValidationException
191
+ *
192
+ * @return \Dotenv\Validator
193
+ */
194
+ public function assertNullable(callable $callback, string $message)
195
+ {
196
+ return $this->assert(
197
+ static function (?string $value) use ($callback) {
198
+ if ($value === null) {
199
+ return true;
200
+ }
201
+
202
+ return $callback($value);
203
+ },
204
+ $message
205
+ );
206
+ }
207
+ }
@@ -220,14 +220,15 @@ body {
220
220
  <p>It is bundled and minified by esbuild and loaded automatically by <code>base.njk</code></p>
221
221
  <p>Import only what the page needs.</p>
222
222
  <h4>examplePage.js <small>(<code>src/frontend/js/pages/</code>)</small></h4>
223
- <pre><code>import { initLangSwitcher } from '../modules/langSwitcher.js';
224
- import { showNotification } from '../modules/notification.js';
223
+ <pre><code>
224
+ import { initLangSwitcher } from '../modules/langSwitcher.js';
225
+ import { showNotification } from '../modules/notification.js';
225
226
 
226
- document.addEventListener("DOMContentLoaded", () => {
227
- initLangSwitcher();
228
- });
227
+ document.addEventListener("DOMContentLoaded", () => {
228
+ initLangSwitcher();
229
+ });
229
230
 
230
- showNotification("Page loaded", "success", 3000);</code></pre>
231
+ showNotification("Page loaded", "success", 3000);</code></pre>
231
232
  <h3>Modules</h3>
232
233
  <p>Modules live in <code>src/frontend/js/modules/</code>. Some must be called inside <code>DOMContentLoaded</code> as they interact with the DOM; others create elements dynamically and can be called anywhere.</p>
233
234
  <h4>Call inside <code>DOMContentLoaded</code></h4>
@@ -266,9 +267,9 @@ body {
266
267
  <p>Create a new <code>.js</code> file in <code>src/frontend/js/modules/</code>. You can organize them into subfolders freely.</p>
267
268
  <p>Use ESM syntax — esbuild handles the bundling:</p>
268
269
  <pre><code>// _yourModule.js
269
- export function yourFunction() {
270
- // ...
271
- }</code></pre>
270
+ export function yourFunction() {
271
+ // ...
272
+ }</code></pre>
272
273
  <p>Then import it in the pages that need it:</p>
273
274
  <pre><code>import { yourFunction } from '../modules/yourModule.js';</code></pre>
274
275
  <blockquote>⚠️ Files inside <code>_tools/</code> run directly in Node.js without a bundler — use CommonJS (<code>require</code> / <code>module.exports</code>) there, not ESM.</blockquote>
@@ -309,7 +310,7 @@ body {
309
310
  "description": "Page description"
310
311
  }
311
312
  }</code></pre>
312
- <p>See <a href="head-and-seo.html">head-and-seo.md</a> for all available options.</p>
313
+ <p>See <a href="#" class="nav-to-head-seo">Head & SEO</a> for all available options</p>
313
314
  </div>
314
315
  </div>
315
316
 
@@ -831,7 +832,16 @@ const res = await fetch('/api/posts', {
831
832
  if (assistantRadio) {
832
833
  assistantRadio.checked = true;
833
834
  assistantRadio.dispatchEvent(new Event('change'));
834
- document.querySelector('.tabs-container');
835
+ }
836
+ });
837
+ document.querySelector('.nav-to-head-seo').addEventListener('click', (e) => {
838
+ e.preventDefault();
839
+
840
+ const headAndSeoRadio = document.querySelector('input[name="guide-filter"][value="head-seo"]');
841
+
842
+ if (headAndSeoRadio) {
843
+ headAndSeoRadio.checked = true;
844
+ headAndSeoRadio.dispatchEvent(new Event('change'));
835
845
  }
836
846
  });
837
847
  </script>
@@ -1,44 +1,44 @@
1
- {
2
- "site_name": "Site name",
3
- "title": "Site title",
4
- "description": "Site description",
5
- "keywords": "keyword1, keyword2, keyword3",
6
- "domain": "yoursite.com",
7
- "url": "https://yoursite.com",
8
- "lang": "en",
9
- "author": "Name and surname",
10
- "data_bs_theme": "dark",
11
- "favicon": "/assets/brand/favicon.svg",
12
- "logo": "/assets/brand/logo.svg",
13
- "copyright": {
14
- "year": "2026",
15
- "text": "Copyright text"
16
- },
17
- "legal": {
18
- "privacy": "",
19
- "cookie": "",
20
- "cookieControls": "",
21
- "terms": ""
22
- },
23
- "pages": {
24
- "404": {
25
- "seo": {
26
- "title": "404 - Not found"
27
- },
28
- "cdn": {
29
- "css": [],
30
- "js": []
31
- }
32
- },
33
- "homepage": {
34
- "seo": {
35
- "title": "Homepage",
36
- "description": "Description"
37
- },
38
- "cdn": {
39
- "css": [],
40
- "js": []
41
- }
42
- }
43
- }
1
+ {
2
+ "site_name": "Site name",
3
+ "title": "Site title",
4
+ "description": "Site description",
5
+ "keywords": "keyword1, keyword2, keyword3",
6
+ "domain": "yoursite.com",
7
+ "url": "https://yoursite.com",
8
+ "lang": "en",
9
+ "author": "Name and surname",
10
+ "data_bs_theme": "dark",
11
+ "favicon": "/assets/brand/favicon.svg",
12
+ "logo": "/assets/brand/logo.svg",
13
+ "copyright": {
14
+ "year": "2026",
15
+ "text": "Copyright text"
16
+ },
17
+ "legal": {
18
+ "privacy": "",
19
+ "cookie": "",
20
+ "cookieControls": "",
21
+ "terms": ""
22
+ },
23
+ "pages": {
24
+ "404": {
25
+ "seo": {
26
+ "title": "404 - Not found"
27
+ },
28
+ "cdn": {
29
+ "css": [],
30
+ "js": []
31
+ }
32
+ },
33
+ "homepage": {
34
+ "seo": {
35
+ "title": "Homepage",
36
+ "description": "Description"
37
+ },
38
+ "cdn": {
39
+ "css": [],
40
+ "js": []
41
+ }
42
+ }
43
+ }
44
44
  }
@@ -1,9 +0,0 @@
1
- * text=auto
2
-
3
- /tests export-ignore
4
- /.gitattributes export-ignore
5
- /.github export-ignore
6
- /.gitignore export-ignore
7
- /phpunit.xml.dist export-ignore
8
- /CHANGELOG.md export-ignore
9
- /README.md export-ignore