create-berna-stencil 2.4.3 → 2.6.0

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 (181) hide show
  1. package/.eleventy.js +1 -1
  2. package/README.md +5 -1
  3. package/_tools/modules/updateIncludes.js +5 -5
  4. package/_tools/res/templates/template.njk +2 -2
  5. package/bin/create.js +2 -2
  6. package/docs/Assistant CLI.md +3 -3
  7. package/docs/Backend.md +33 -8
  8. package/docs/Components.md +4 -4
  9. package/docs/Creating pages.md +3 -3
  10. package/docs/Styling with SCSS.md +1 -1
  11. package/nginx.conf +27 -3
  12. package/package.json +1 -1
  13. package/src/backend/_core/index.php +23 -6
  14. package/src/backend/_core/vendor/composer/autoload_static.php +10 -10
  15. package/src/backend/_core/vendor/composer/installed.json +6 -6
  16. package/src/backend/_core/vendor/composer/installed.php +2 -2
  17. package/src/backend/_core/vendor/graham-campbell/result-type/LICENSE +21 -21
  18. package/src/backend/_core/vendor/graham-campbell/result-type/composer.json +33 -33
  19. package/src/backend/_core/vendor/graham-campbell/result-type/src/Error.php +121 -121
  20. package/src/backend/_core/vendor/graham-campbell/result-type/src/Result.php +69 -69
  21. package/src/backend/_core/vendor/graham-campbell/result-type/src/Success.php +120 -120
  22. package/src/backend/_core/vendor/phpoption/phpoption/LICENSE +200 -200
  23. package/src/backend/_core/vendor/phpoption/phpoption/composer.json +50 -50
  24. package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php +175 -175
  25. package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/None.php +136 -136
  26. package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Option.php +434 -434
  27. package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Some.php +169 -169
  28. package/src/backend/_core/vendor/symfony/polyfill-ctype/Ctype.php +232 -232
  29. package/src/backend/_core/vendor/symfony/polyfill-ctype/LICENSE +19 -19
  30. package/src/backend/_core/vendor/symfony/polyfill-ctype/README.md +12 -12
  31. package/src/backend/_core/vendor/symfony/polyfill-ctype/bootstrap.php +50 -50
  32. package/src/backend/_core/vendor/symfony/polyfill-ctype/bootstrap80.php +46 -46
  33. package/src/backend/_core/vendor/symfony/polyfill-ctype/composer.json +38 -38
  34. package/src/backend/_core/vendor/symfony/polyfill-mbstring/LICENSE +19 -19
  35. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Mbstring.php +1077 -1077
  36. package/src/backend/_core/vendor/symfony/polyfill-mbstring/README.md +13 -13
  37. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +119 -119
  38. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1397 -1397
  39. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +5 -5
  40. package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +1489 -1489
  41. package/src/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap.php +171 -171
  42. package/src/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap80.php +167 -167
  43. package/src/backend/_core/vendor/symfony/polyfill-mbstring/composer.json +39 -39
  44. package/src/backend/_core/vendor/symfony/polyfill-php80/LICENSE +19 -19
  45. package/src/backend/_core/vendor/symfony/polyfill-php80/Php80.php +115 -115
  46. package/src/backend/_core/vendor/symfony/polyfill-php80/PhpToken.php +106 -106
  47. package/src/backend/_core/vendor/symfony/polyfill-php80/README.md +25 -25
  48. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +31 -31
  49. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +16 -16
  50. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +20 -20
  51. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +16 -16
  52. package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +16 -16
  53. package/src/backend/_core/vendor/symfony/polyfill-php80/bootstrap.php +42 -42
  54. package/src/backend/_core/vendor/symfony/polyfill-php80/composer.json +37 -37
  55. package/src/backend/_core/vendor/vlucas/phpdotenv/LICENSE +30 -30
  56. package/src/backend/_core/vendor/vlucas/phpdotenv/composer.json +60 -60
  57. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Dotenv.php +267 -267
  58. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php +12 -12
  59. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php +12 -12
  60. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidFileException.php +12 -12
  61. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidPathException.php +12 -12
  62. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ValidationException.php +12 -12
  63. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Loader.php +48 -48
  64. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php +20 -20
  65. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Resolver.php +65 -65
  66. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Entry.php +59 -59
  67. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/EntryParser.php +299 -299
  68. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lexer.php +58 -58
  69. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lines.php +127 -127
  70. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Parser.php +53 -53
  71. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/ParserInterface.php +19 -19
  72. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Value.php +88 -88
  73. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php +15 -15
  74. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php +89 -89
  75. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php +80 -80
  76. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php +88 -88
  77. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php +85 -85
  78. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php +110 -110
  79. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php +48 -48
  80. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php +64 -64
  81. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php +91 -91
  82. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php +17 -17
  83. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php +104 -104
  84. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php +88 -88
  85. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php +27 -27
  86. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php +107 -107
  87. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php +272 -272
  88. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php +51 -51
  89. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Paths.php +44 -44
  90. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Reader.php +81 -81
  91. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/FileStore.php +72 -72
  92. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php +141 -141
  93. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php +17 -17
  94. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/StringStore.php +37 -37
  95. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Util/Regex.php +112 -112
  96. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Util/Str.php +108 -108
  97. package/src/backend/_core/vendor/vlucas/phpdotenv/src/Validator.php +207 -207
  98. package/src/backend/config.example.php +13 -4
  99. package/src/frontend/data/site.json +43 -43
  100. package/src/frontend/index.njk +2 -2
  101. package/src/frontend/{components/layouts → layouts}/base.njk +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
  181. /package/src/frontend/{components/layouts/includes.njk → layouts/pageComponents.njk} +0 -0
@@ -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
+ }
@@ -2,13 +2,22 @@
2
2
  declare(strict_types=1);
3
3
 
4
4
  return [
5
- // Default key for protected endpoints that don't have a specific key in ENDPOINT_KEYS
6
- 'API_KEY' => 'DEFAULT_KEY',
5
+ // Default key for protected endpoints that don't have a specific key in CUSTOM_ENDPOINT_KEYS
6
+ 'GENERAL_API_KEY' => 'DEFAULT_KEY',
7
7
 
8
8
  // If you want restrict access to protected endpoints to specific clients, you can define custom keys for each endpoint
9
9
  // For subfolder endpoints, use the relative path ('subfolder/endpoint')
10
- 'ENDPOINT_KEYS' => [
11
- 'subfolder/example-protected' => 'custom-key',
10
+ 'CUSTOM_ENDPOINT_KEYS' => [
11
+ 'subfolder/example-protected' => 'custom-key',
12
+ ],
13
+
14
+ 'GENERAL_ALLOWED_ORIGINS' => [
15
+ '*',
16
+ // 'https://example.com',
17
+ ],
18
+
19
+ 'CUSTOM_ENDPOINT_ORIGINS' => [
20
+ 'subfolder/example-protected' => ['https://app.example.com'],
12
21
  ],
13
22
 
14
23
  // Database configuration
@@ -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 +1,9 @@
1
1
  ---
2
2
  title: homepage
3
3
  permalink: /
4
- layout: includes.njk
4
+ layout: pageComponents.njk
5
5
  ---
6
6
 
7
7
  <!-- !IMPORTANT -->
8
8
  <!-- DO NOT ADD ANYTHING HERE -->
9
- <!-- You should create a new component.njk into src/components and include that in components/layouts/includes.njk -->
9
+ <!-- You should create a new component.njk into src/components and include that in layouts/pageComponents.njk -->
@@ -43,7 +43,7 @@
43
43
  <meta name="twitter:image" content="{{ site.url }}{{ site.logo }}">
44
44
 
45
45
  {#╔══════════════════════════════════════════╗
46
- ║ JSON-LD — Structured data for SEO/AI
46
+ ║ JSON-LD — Structured data for SEO/AI
47
47
  ╚══════════════════════════════════════════╝#}
48
48
 
49
49
  <script type="application/ld+json">
@@ -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