create-berna-stencil 2.6.2 → 2.6.4

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 (264) hide show
  1. package/index.js +3 -0
  2. package/package.json +5 -28
  3. package/.eleventy.js +0 -94
  4. package/.eleventyignore +0 -4
  5. package/LICENSE +0 -170
  6. package/NOTICE +0 -5
  7. package/README.md +0 -53
  8. package/_tools/assistant.js +0 -150
  9. package/_tools/buildJs.js +0 -28
  10. package/_tools/cleanOutput.js +0 -20
  11. package/_tools/modules/constants.js +0 -23
  12. package/_tools/modules/pageComponents.js +0 -77
  13. package/_tools/modules/updateData.js +0 -84
  14. package/_tools/modules/updateOutputPath.js +0 -112
  15. package/_tools/modules/updatePage.js +0 -162
  16. package/_tools/modules/utils.js +0 -27
  17. package/_tools/modules/validation.js +0 -20
  18. package/_tools/res/templates/template.js +0 -5
  19. package/_tools/res/templates/template.njk +0 -9
  20. package/_tools/res/templates/template.scss +0 -23
  21. package/_tools/res/templates/template.ts +0 -5
  22. package/bin/create.js +0 -429
  23. package/docs/Assistant CLI.md +0 -61
  24. package/docs/Backend.md +0 -148
  25. package/docs/Components.md +0 -96
  26. package/docs/Creating pages.md +0 -65
  27. package/docs/Deploy.md +0 -55
  28. package/docs/Head and SEO.md +0 -94
  29. package/docs/Javascript.md +0 -53
  30. package/docs/Styling with SCSS.md +0 -140
  31. package/nginx.conf +0 -69
  32. package/out/.htaccess +0 -16
  33. package/out/404.html +0 -163
  34. package/out/assets/brand/favicon.svg +0 -37
  35. package/out/assets/brand/logo.svg +0 -37
  36. package/out/backend/.htaccess +0 -7
  37. package/out/backend/_core/composer.json +0 -5
  38. package/out/backend/_core/composer.lock +0 -492
  39. package/out/backend/_core/index.php +0 -148
  40. package/out/backend/_core/init.php +0 -34
  41. package/out/backend/_core/modules/RateLimiter.php +0 -31
  42. package/out/backend/_core/modules/Response.php +0 -49
  43. package/out/backend/_core/vendor/autoload.php +0 -22
  44. package/out/backend/_core/vendor/composer/ClassLoader.php +0 -579
  45. package/out/backend/_core/vendor/composer/InstalledVersions.php +0 -396
  46. package/out/backend/_core/vendor/composer/LICENSE +0 -21
  47. package/out/backend/_core/vendor/composer/autoload_classmap.php +0 -15
  48. package/out/backend/_core/vendor/composer/autoload_files.php +0 -12
  49. package/out/backend/_core/vendor/composer/autoload_namespaces.php +0 -9
  50. package/out/backend/_core/vendor/composer/autoload_psr4.php +0 -15
  51. package/out/backend/_core/vendor/composer/autoload_real.php +0 -50
  52. package/out/backend/_core/vendor/composer/autoload_static.php +0 -81
  53. package/out/backend/_core/vendor/composer/installed.json +0 -497
  54. package/out/backend/_core/vendor/composer/installed.php +0 -77
  55. package/out/backend/_core/vendor/composer/platform_check.php +0 -25
  56. package/out/backend/_core/vendor/graham-campbell/result-type/CHANGELOG.md +0 -53
  57. package/out/backend/_core/vendor/graham-campbell/result-type/LICENSE +0 -21
  58. package/out/backend/_core/vendor/graham-campbell/result-type/README.md +0 -42
  59. package/out/backend/_core/vendor/graham-campbell/result-type/composer.json +0 -33
  60. package/out/backend/_core/vendor/graham-campbell/result-type/phpunit.xml.dist +0 -13
  61. package/out/backend/_core/vendor/graham-campbell/result-type/src/Error.php +0 -121
  62. package/out/backend/_core/vendor/graham-campbell/result-type/src/Result.php +0 -69
  63. package/out/backend/_core/vendor/graham-campbell/result-type/src/Success.php +0 -120
  64. package/out/backend/_core/vendor/graham-campbell/result-type/tests/ResultTest.php +0 -95
  65. package/out/backend/_core/vendor/phpoption/phpoption/LICENSE +0 -201
  66. package/out/backend/_core/vendor/phpoption/phpoption/Makefile +0 -17
  67. package/out/backend/_core/vendor/phpoption/phpoption/README.md +0 -201
  68. package/out/backend/_core/vendor/phpoption/phpoption/composer.json +0 -50
  69. package/out/backend/_core/vendor/phpoption/phpoption/phpstan-baseline.neon +0 -44
  70. package/out/backend/_core/vendor/phpoption/phpoption/phpstan.neon.dist +0 -7
  71. package/out/backend/_core/vendor/phpoption/phpoption/phpunit.xml.dist +0 -13
  72. package/out/backend/_core/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php +0 -175
  73. package/out/backend/_core/vendor/phpoption/phpoption/src/PhpOption/None.php +0 -136
  74. package/out/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Option.php +0 -434
  75. package/out/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Some.php +0 -169
  76. package/out/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/EnsureTest.php +0 -72
  77. package/out/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/LazyOptionTest.php +0 -357
  78. package/out/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/NoneTest.php +0 -153
  79. package/out/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/OptionTest.php +0 -166
  80. package/out/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php +0 -194
  81. package/out/backend/_core/vendor/phpoption/phpoption/tests/bootstrap.php +0 -8
  82. package/out/backend/_core/vendor/phpoption/phpoption/vendor-bin/phpstan/composer.json +0 -8
  83. package/out/backend/_core/vendor/symfony/polyfill-ctype/Ctype.php +0 -232
  84. package/out/backend/_core/vendor/symfony/polyfill-ctype/LICENSE +0 -19
  85. package/out/backend/_core/vendor/symfony/polyfill-ctype/README.md +0 -12
  86. package/out/backend/_core/vendor/symfony/polyfill-ctype/bootstrap.php +0 -50
  87. package/out/backend/_core/vendor/symfony/polyfill-ctype/bootstrap80.php +0 -46
  88. package/out/backend/_core/vendor/symfony/polyfill-ctype/composer.json +0 -38
  89. package/out/backend/_core/vendor/symfony/polyfill-mbstring/LICENSE +0 -19
  90. package/out/backend/_core/vendor/symfony/polyfill-mbstring/Mbstring.php +0 -1077
  91. package/out/backend/_core/vendor/symfony/polyfill-mbstring/README.md +0 -13
  92. package/out/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +0 -119
  93. package/out/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +0 -1397
  94. package/out/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +0 -5
  95. package/out/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +0 -1489
  96. package/out/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap.php +0 -171
  97. package/out/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap80.php +0 -167
  98. package/out/backend/_core/vendor/symfony/polyfill-mbstring/composer.json +0 -39
  99. package/out/backend/_core/vendor/symfony/polyfill-php80/LICENSE +0 -19
  100. package/out/backend/_core/vendor/symfony/polyfill-php80/Php80.php +0 -115
  101. package/out/backend/_core/vendor/symfony/polyfill-php80/PhpToken.php +0 -106
  102. package/out/backend/_core/vendor/symfony/polyfill-php80/README.md +0 -25
  103. package/out/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +0 -31
  104. package/out/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +0 -16
  105. package/out/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +0 -20
  106. package/out/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +0 -16
  107. package/out/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +0 -16
  108. package/out/backend/_core/vendor/symfony/polyfill-php80/bootstrap.php +0 -42
  109. package/out/backend/_core/vendor/symfony/polyfill-php80/composer.json +0 -37
  110. package/out/backend/_core/vendor/vlucas/phpdotenv/.editorconfig +0 -15
  111. package/out/backend/_core/vendor/vlucas/phpdotenv/LICENSE +0 -30
  112. package/out/backend/_core/vendor/vlucas/phpdotenv/Makefile +0 -17
  113. package/out/backend/_core/vendor/vlucas/phpdotenv/README.md +0 -370
  114. package/out/backend/_core/vendor/vlucas/phpdotenv/UPGRADING.md +0 -196
  115. package/out/backend/_core/vendor/vlucas/phpdotenv/composer.json +0 -60
  116. package/out/backend/_core/vendor/vlucas/phpdotenv/phpstan-baseline.neon +0 -157
  117. package/out/backend/_core/vendor/vlucas/phpdotenv/phpstan.neon.dist +0 -7
  118. package/out/backend/_core/vendor/vlucas/phpdotenv/phpunit.xml.dist +0 -13
  119. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Dotenv.php +0 -267
  120. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php +0 -12
  121. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php +0 -12
  122. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidFileException.php +0 -12
  123. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidPathException.php +0 -12
  124. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ValidationException.php +0 -12
  125. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Loader.php +0 -48
  126. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php +0 -20
  127. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Resolver.php +0 -65
  128. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Entry.php +0 -59
  129. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/EntryParser.php +0 -299
  130. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lexer.php +0 -58
  131. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lines.php +0 -127
  132. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Parser.php +0 -53
  133. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/ParserInterface.php +0 -19
  134. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Value.php +0 -88
  135. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php +0 -15
  136. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php +0 -89
  137. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php +0 -80
  138. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php +0 -88
  139. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php +0 -85
  140. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php +0 -110
  141. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php +0 -48
  142. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php +0 -64
  143. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php +0 -91
  144. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php +0 -17
  145. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php +0 -104
  146. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php +0 -88
  147. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php +0 -27
  148. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php +0 -107
  149. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php +0 -272
  150. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php +0 -51
  151. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Paths.php +0 -44
  152. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Reader.php +0 -81
  153. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Store/FileStore.php +0 -72
  154. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php +0 -141
  155. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php +0 -17
  156. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Store/StringStore.php +0 -37
  157. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Util/Regex.php +0 -112
  158. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Util/Str.php +0 -108
  159. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Validator.php +0 -207
  160. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/DotenvTest.php +0 -387
  161. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Loader/LoaderTest.php +0 -86
  162. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/EntryParserTest.php +0 -234
  163. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LexerTest.php +0 -40
  164. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LinesTest.php +0 -53
  165. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/ParserTest.php +0 -98
  166. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ArrayAdapterTest.php +0 -57
  167. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/EnvConstAdapterTest.php +0 -75
  168. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/PutenvAdapterTest.php +0 -52
  169. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ServerConstAdapterTest.php +0 -75
  170. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/RepositoryTest.php +0 -305
  171. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Store/StoreTest.php +0 -141
  172. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/ValidatorTest.php +0 -479
  173. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/.env +0 -5
  174. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/assertions.env +0 -18
  175. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/booleans.env +0 -33
  176. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/commented.env +0 -15
  177. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/empty.env +0 -1
  178. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/example.env +0 -1
  179. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/exported.env +0 -7
  180. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/immutable.env +0 -1
  181. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/integers.env +0 -17
  182. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/large.env +0 -2
  183. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multibyte.env +0 -3
  184. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiline.env +0 -14
  185. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiple.env +0 -4
  186. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/mutable.env +0 -1
  187. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/nested.env +0 -15
  188. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/quoted.env +0 -11
  189. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/specialchars.env +0 -8
  190. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/unicodevarnames.env +0 -2
  191. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/utf8-with-bom-encoding.env +0 -3
  192. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/windows.env +0 -1
  193. package/out/backend/_core/vendor/vlucas/phpdotenv/vendor-bin/phpstan/composer.json +0 -15
  194. package/out/backend/api/protected/example-protected.php +0 -17
  195. package/out/backend/api/public/example-public.php +0 -17
  196. package/out/backend/database/Database.php +0 -24
  197. package/out/backend/database/migrations/create_example_db.sql +0 -1
  198. package/out/backend/web.config +0 -17
  199. package/out/css/fonts/bootstrap-icons.woff +0 -0
  200. package/out/css/fonts/bootstrap-icons.woff2 +0 -0
  201. package/out/css/github-markdown-dark.css +0 -1124
  202. package/out/css/github-markdown-light.css +0 -1124
  203. package/out/css/pages/404.css +0 -21517
  204. package/out/css/pages/homepage.css +0 -21508
  205. package/out/data/site.json +0 -44
  206. package/out/index.html +0 -1147
  207. package/out/js/bootstrap.bundle.min.js +0 -7
  208. package/out/js/pages/js/pages/404.js +0 -6
  209. package/out/js/pages/js/pages/homepage.js +0 -6
  210. package/out/js/pages/ts/pages/404.js +0 -6
  211. package/out/js/pages/ts/pages/homepage.js +0 -6
  212. package/out/llms.txt +0 -14
  213. package/out/robots.txt +0 -4
  214. package/out/sitemap.xml +0 -15
  215. package/out/web.config +0 -27
  216. package/src/backend/.htaccess +0 -7
  217. package/src/backend/_core/composer.json +0 -5
  218. package/src/backend/_core/composer.lock +0 -492
  219. package/src/backend/_core/index.php +0 -148
  220. package/src/backend/_core/init.php +0 -34
  221. package/src/backend/_core/modules/RateLimiter.php +0 -31
  222. package/src/backend/_core/modules/Response.php +0 -49
  223. package/src/backend/api/protected/example-protected.php +0 -17
  224. package/src/backend/api/public/example-public.php +0 -17
  225. package/src/backend/database/Database.php +0 -24
  226. package/src/backend/database/migrations/create_example_db.sql +0 -1
  227. package/src/backend/web.config +0 -17
  228. package/src/frontend/.htaccess +0 -16
  229. package/src/frontend/404.njk +0 -17
  230. package/src/frontend/assets/brand/favicon.svg +0 -37
  231. package/src/frontend/assets/brand/logo.svg +0 -37
  232. package/src/frontend/components/global/footer.njk +0 -27
  233. package/src/frontend/components/global/header.njk +0 -11
  234. package/src/frontend/components/welcome.njk +0 -251
  235. package/src/frontend/data/site.json +0 -44
  236. package/src/frontend/index.njk +0 -9
  237. package/src/frontend/js/modules/exampleModule.js +0 -3
  238. package/src/frontend/js/pages/404.js +0 -7
  239. package/src/frontend/js/pages/homepage.js +0 -7
  240. package/src/frontend/layouts/base.njk +0 -137
  241. package/src/frontend/layouts/pageComponents.njk +0 -14
  242. package/src/frontend/llms.njk +0 -18
  243. package/src/frontend/robots.njk +0 -8
  244. package/src/frontend/scss/modules/_animations.scss +0 -25
  245. package/src/frontend/scss/modules/_buttons.scss +0 -24
  246. package/src/frontend/scss/modules/_footer.scss +0 -32
  247. package/src/frontend/scss/modules/_global.scss +0 -46
  248. package/src/frontend/scss/modules/_header.scss +0 -33
  249. package/src/frontend/scss/modules/_mobile.scss +0 -30
  250. package/src/frontend/scss/modules/_notification.scss +0 -56
  251. package/src/frontend/scss/modules/_root.scss +0 -35
  252. package/src/frontend/scss/modules/_typography.scss +0 -15
  253. package/src/frontend/scss/modules/frameworks/_bootstrap.scss +0 -110
  254. package/src/frontend/scss/modules/frameworks/_bulma.scss +0 -109
  255. package/src/frontend/scss/modules/frameworks/_foundation.scss +0 -139
  256. package/src/frontend/scss/modules/frameworks/_uikit.scss +0 -110
  257. package/src/frontend/scss/pages/404.scss +0 -28
  258. package/src/frontend/scss/pages/homepage.scss +0 -23
  259. package/src/frontend/sitemap.njk +0 -17
  260. package/src/frontend/ts/modules/exampleModule.ts +0 -3
  261. package/src/frontend/ts/pages/404.ts +0 -7
  262. package/src/frontend/ts/pages/homepage.ts +0 -7
  263. package/src/frontend/web.config +0 -27
  264. package/tsconfig.json +0 -25
@@ -1,299 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Parser;
6
-
7
- use Dotenv\Util\Regex;
8
- use Dotenv\Util\Str;
9
- use GrahamCampbell\ResultType\Error;
10
- use GrahamCampbell\ResultType\Result;
11
- use GrahamCampbell\ResultType\Success;
12
-
13
- final class EntryParser
14
- {
15
- private const INITIAL_STATE = 0;
16
- private const UNQUOTED_STATE = 1;
17
- private const SINGLE_QUOTED_STATE = 2;
18
- private const DOUBLE_QUOTED_STATE = 3;
19
- private const ESCAPE_SEQUENCE_STATE = 4;
20
- private const WHITESPACE_STATE = 5;
21
- private const COMMENT_STATE = 6;
22
- private const REJECT_STATES = [self::SINGLE_QUOTED_STATE, self::DOUBLE_QUOTED_STATE, self::ESCAPE_SEQUENCE_STATE];
23
-
24
- /**
25
- * This class is a singleton.
26
- *
27
- * @codeCoverageIgnore
28
- *
29
- * @return void
30
- */
31
- private function __construct()
32
- {
33
- //
34
- }
35
-
36
- /**
37
- * Parse a raw entry into a proper entry.
38
- *
39
- * That is, turn a raw environment variable entry into a name and possibly
40
- * a value. We wrap the answer in a result type.
41
- *
42
- * @param string $entry
43
- *
44
- * @return \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Entry, string>
45
- */
46
- public static function parse(string $entry)
47
- {
48
- return self::splitStringIntoParts($entry)->flatMap(static function (array $parts) {
49
- [$name, $value] = $parts;
50
-
51
- return self::parseName($name)->flatMap(static function (string $name) use ($value) {
52
- /** @var Result<Value|null, string> */
53
- $parsedValue = $value === null ? Success::create(null) : self::parseValue($value);
54
-
55
- return $parsedValue->map(static function (?Value $value) use ($name) {
56
- return new Entry($name, $value);
57
- });
58
- });
59
- });
60
- }
61
-
62
- /**
63
- * Split the compound string into parts.
64
- *
65
- * @param string $line
66
- *
67
- * @return \GrahamCampbell\ResultType\Result<array{string, string|null},string>
68
- */
69
- private static function splitStringIntoParts(string $line)
70
- {
71
- /** @var array{string, string|null} */
72
- $result = Str::pos($line, '=')->map(static function () use ($line) {
73
- return \array_map('trim', \explode('=', $line, 2));
74
- })->getOrElse([$line, null]);
75
-
76
- if ($result[0] === '') {
77
- /** @var \GrahamCampbell\ResultType\Result<array{string, string|null},string> */
78
- return Error::create(self::getErrorMessage('an unexpected equals', $line));
79
- }
80
-
81
- /** @var \GrahamCampbell\ResultType\Result<array{string, string|null},string> */
82
- return Success::create($result);
83
- }
84
-
85
- /**
86
- * Parse the given variable name.
87
- *
88
- * That is, strip the optional quotes and leading "export" from the
89
- * variable name. We wrap the answer in a result type.
90
- *
91
- * @param string $name
92
- *
93
- * @return \GrahamCampbell\ResultType\Result<string, string>
94
- */
95
- private static function parseName(string $name)
96
- {
97
- if (Str::len($name) > 8 && Str::substr($name, 0, 6) === 'export' && \ctype_space(Str::substr($name, 6, 1))) {
98
- $name = \ltrim(Str::substr($name, 6));
99
- }
100
-
101
- if (self::isQuotedName($name)) {
102
- $name = Str::substr($name, 1, -1);
103
- }
104
-
105
- if (!self::isValidName($name)) {
106
- /** @var \GrahamCampbell\ResultType\Result<string, string> */
107
- return Error::create(self::getErrorMessage('an invalid name', $name));
108
- }
109
-
110
- /** @var \GrahamCampbell\ResultType\Result<string, string> */
111
- return Success::create($name);
112
- }
113
-
114
- /**
115
- * Is the given variable name quoted?
116
- *
117
- * @param string $name
118
- *
119
- * @return bool
120
- */
121
- private static function isQuotedName(string $name)
122
- {
123
- if (Str::len($name) < 3) {
124
- return false;
125
- }
126
-
127
- $first = Str::substr($name, 0, 1);
128
- $last = Str::substr($name, -1, 1);
129
-
130
- return ($first === '"' && $last === '"') || ($first === '\'' && $last === '\'');
131
- }
132
-
133
- /**
134
- * Is the given variable name valid?
135
- *
136
- * @param string $name
137
- *
138
- * @return bool
139
- */
140
- private static function isValidName(string $name)
141
- {
142
- return Regex::matches('~(*UTF8)\A[\p{Ll}\p{Lu}\p{M}\p{N}_.]+\z~', $name)->success()->getOrElse(false);
143
- }
144
-
145
- /**
146
- * Parse the given variable value.
147
- *
148
- * This has the effect of stripping quotes and comments, dealing with
149
- * special characters, and locating nested variables, but not resolving
150
- * them. Formally, we run a finite state automaton with an output tape: a
151
- * transducer. We wrap the answer in a result type.
152
- *
153
- * @param string $value
154
- *
155
- * @return \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Value, string>
156
- */
157
- private static function parseValue(string $value)
158
- {
159
- if (\trim($value) === '') {
160
- /** @var \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Value, string> */
161
- return Success::create(Value::blank());
162
- }
163
-
164
- return \array_reduce(\iterator_to_array(Lexer::lex($value)), static function (Result $data, string $token) {
165
- return $data->flatMap(static function (array $data) use ($token) {
166
- return self::processToken($data[1], $token)->map(static function (array $val) use ($data) {
167
- return [$data[0]->append($val[0], $val[1]), $val[2]];
168
- });
169
- });
170
- }, Success::create([Value::blank(), self::INITIAL_STATE]))->flatMap(static function (array $result) {
171
- if (in_array($result[1], self::REJECT_STATES, true)) {
172
- /** @var \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Value, string> */
173
- return Error::create('a missing closing quote');
174
- }
175
-
176
- /** @var \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Value, string> */
177
- return Success::create($result[0]);
178
- })->mapError(static function (string $err) use ($value) {
179
- return self::getErrorMessage($err, $value);
180
- });
181
- }
182
-
183
- /**
184
- * Process the given token.
185
- *
186
- * @param int $state
187
- * @param string $token
188
- *
189
- * @return \GrahamCampbell\ResultType\Result<array{string, bool, int}, string>
190
- */
191
- private static function processToken(int $state, string $token)
192
- {
193
- switch ($state) {
194
- case self::INITIAL_STATE:
195
- if ($token === '\'') {
196
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
197
- return Success::create(['', false, self::SINGLE_QUOTED_STATE]);
198
- } elseif ($token === '"') {
199
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
200
- return Success::create(['', false, self::DOUBLE_QUOTED_STATE]);
201
- } elseif ($token === '#') {
202
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
203
- return Success::create(['', false, self::COMMENT_STATE]);
204
- } elseif ($token === '$') {
205
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
206
- return Success::create([$token, true, self::UNQUOTED_STATE]);
207
- } else {
208
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
209
- return Success::create([$token, false, self::UNQUOTED_STATE]);
210
- }
211
- case self::UNQUOTED_STATE:
212
- if ($token === '#') {
213
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
214
- return Success::create(['', false, self::COMMENT_STATE]);
215
- } elseif (\ctype_space($token)) {
216
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
217
- return Success::create(['', false, self::WHITESPACE_STATE]);
218
- } elseif ($token === '$') {
219
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
220
- return Success::create([$token, true, self::UNQUOTED_STATE]);
221
- } else {
222
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
223
- return Success::create([$token, false, self::UNQUOTED_STATE]);
224
- }
225
- case self::SINGLE_QUOTED_STATE:
226
- if ($token === '\'') {
227
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
228
- return Success::create(['', false, self::WHITESPACE_STATE]);
229
- } else {
230
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
231
- return Success::create([$token, false, self::SINGLE_QUOTED_STATE]);
232
- }
233
- case self::DOUBLE_QUOTED_STATE:
234
- if ($token === '"') {
235
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
236
- return Success::create(['', false, self::WHITESPACE_STATE]);
237
- } elseif ($token === '\\') {
238
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
239
- return Success::create(['', false, self::ESCAPE_SEQUENCE_STATE]);
240
- } elseif ($token === '$') {
241
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
242
- return Success::create([$token, true, self::DOUBLE_QUOTED_STATE]);
243
- } else {
244
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
245
- return Success::create([$token, false, self::DOUBLE_QUOTED_STATE]);
246
- }
247
- case self::ESCAPE_SEQUENCE_STATE:
248
- if ($token === '"' || $token === '\\') {
249
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
250
- return Success::create([$token, false, self::DOUBLE_QUOTED_STATE]);
251
- } elseif ($token === '$') {
252
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
253
- return Success::create([$token, false, self::DOUBLE_QUOTED_STATE]);
254
- } else {
255
- $first = Str::substr($token, 0, 1);
256
- if (\in_array($first, ['f', 'n', 'r', 't', 'v'], true)) {
257
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
258
- return Success::create([\stripcslashes('\\'.$first).Str::substr($token, 1), false, self::DOUBLE_QUOTED_STATE]);
259
- } else {
260
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
261
- return Error::create('an unexpected escape sequence');
262
- }
263
- }
264
- case self::WHITESPACE_STATE:
265
- if ($token === '#') {
266
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
267
- return Success::create(['', false, self::COMMENT_STATE]);
268
- } elseif (!\ctype_space($token)) {
269
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
270
- return Error::create('unexpected whitespace');
271
- } else {
272
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
273
- return Success::create(['', false, self::WHITESPACE_STATE]);
274
- }
275
- case self::COMMENT_STATE:
276
- /** @var \GrahamCampbell\ResultType\Result<array{string, bool, int}, string> */
277
- return Success::create(['', false, self::COMMENT_STATE]);
278
- default:
279
- throw new \Error('Parser entered invalid state.');
280
- }
281
- }
282
-
283
- /**
284
- * Generate a friendly error message.
285
- *
286
- * @param string $cause
287
- * @param string $subject
288
- *
289
- * @return string
290
- */
291
- private static function getErrorMessage(string $cause, string $subject)
292
- {
293
- return \sprintf(
294
- 'Encountered %s at [%s].',
295
- $cause,
296
- \strtok($subject, "\n")
297
- );
298
- }
299
- }
@@ -1,58 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Parser;
6
-
7
- final class Lexer
8
- {
9
- /**
10
- * The regex for each type of token.
11
- */
12
- private const PATTERNS = [
13
- '[\r\n]{1,1000}', '[^\S\r\n]{1,1000}', '\\\\', '\'', '"', '\\#', '\\$', '([^(\s\\\\\'"\\#\\$)]|\\(|\\)){1,1000}',
14
- ];
15
-
16
- /**
17
- * This class is a singleton.
18
- *
19
- * @codeCoverageIgnore
20
- *
21
- * @return void
22
- */
23
- private function __construct()
24
- {
25
- //
26
- }
27
-
28
- /**
29
- * Convert content into a token stream.
30
- *
31
- * Multibyte string processing is not needed here, and nether is error
32
- * handling, for performance reasons.
33
- *
34
- * @param string $content
35
- *
36
- * @return \Generator<string>
37
- */
38
- public static function lex(string $content)
39
- {
40
- static $regex;
41
-
42
- if ($regex === null) {
43
- $regex = '(('.\implode(')|(', self::PATTERNS).'))A';
44
- }
45
-
46
- $offset = 0;
47
-
48
- while (isset($content[$offset])) {
49
- if (!\preg_match($regex, $content, $matches, 0, $offset)) {
50
- throw new \Error(\sprintf('Lexer encountered unexpected character [%s].', $content[$offset]));
51
- }
52
-
53
- $offset += \strlen($matches[0]);
54
-
55
- yield $matches[0];
56
- }
57
- }
58
- }
@@ -1,127 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Parser;
6
-
7
- use Dotenv\Util\Regex;
8
- use Dotenv\Util\Str;
9
-
10
- final class Lines
11
- {
12
- /**
13
- * This class is a singleton.
14
- *
15
- * @codeCoverageIgnore
16
- *
17
- * @return void
18
- */
19
- private function __construct()
20
- {
21
- //
22
- }
23
-
24
- /**
25
- * Process the array of lines of environment variables.
26
- *
27
- * This will produce an array of raw entries, one per variable.
28
- *
29
- * @param string[] $lines
30
- *
31
- * @return string[]
32
- */
33
- public static function process(array $lines)
34
- {
35
- $output = [];
36
- $multiline = false;
37
- $multilineBuffer = [];
38
-
39
- foreach ($lines as $line) {
40
- [$multiline, $line, $multilineBuffer] = self::multilineProcess($multiline, $line, $multilineBuffer);
41
-
42
- if (!$multiline && !self::isCommentOrWhitespace($line)) {
43
- $output[] = $line;
44
- }
45
- }
46
-
47
- return $output;
48
- }
49
-
50
- /**
51
- * Used to make all multiline variable process.
52
- *
53
- * @param bool $multiline
54
- * @param string $line
55
- * @param string[] $buffer
56
- *
57
- * @return array{bool,string, string[]}
58
- */
59
- private static function multilineProcess(bool $multiline, string $line, array $buffer)
60
- {
61
- $startsOnCurrentLine = $multiline ? false : self::looksLikeMultilineStart($line);
62
-
63
- // check if $line can be multiline variable
64
- if ($startsOnCurrentLine) {
65
- $multiline = true;
66
- }
67
-
68
- if ($multiline) {
69
- \array_push($buffer, $line);
70
-
71
- if (self::looksLikeMultilineStop($line, $startsOnCurrentLine)) {
72
- $multiline = false;
73
- $line = \implode("\n", $buffer);
74
- $buffer = [];
75
- }
76
- }
77
-
78
- return [$multiline, $line, $buffer];
79
- }
80
-
81
- /**
82
- * Determine if the given line can be the start of a multiline variable.
83
- *
84
- * @param string $line
85
- *
86
- * @return bool
87
- */
88
- private static function looksLikeMultilineStart(string $line)
89
- {
90
- return Str::pos($line, '="')->map(static function () use ($line) {
91
- return self::looksLikeMultilineStop($line, true) === false;
92
- })->getOrElse(false);
93
- }
94
-
95
- /**
96
- * Determine if the given line can be the start of a multiline variable.
97
- *
98
- * @param string $line
99
- * @param bool $started
100
- *
101
- * @return bool
102
- */
103
- private static function looksLikeMultilineStop(string $line, bool $started)
104
- {
105
- if ($line === '"') {
106
- return true;
107
- }
108
-
109
- return Regex::occurrences('/(?=([^\\\\]"))/', \str_replace('\\\\', '', $line))->map(static function (int $count) use ($started) {
110
- return $started ? $count > 1 : $count >= 1;
111
- })->success()->getOrElse(false);
112
- }
113
-
114
- /**
115
- * Determine if the line in the file is a comment or whitespace.
116
- *
117
- * @param string $line
118
- *
119
- * @return bool
120
- */
121
- private static function isCommentOrWhitespace(string $line)
122
- {
123
- $line = \trim($line);
124
-
125
- return $line === '' || (isset($line[0]) && $line[0] === '#');
126
- }
127
- }
@@ -1,53 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Parser;
6
-
7
- use Dotenv\Exception\InvalidFileException;
8
- use Dotenv\Util\Regex;
9
- use GrahamCampbell\ResultType\Result;
10
- use GrahamCampbell\ResultType\Success;
11
-
12
- final class Parser implements ParserInterface
13
- {
14
- /**
15
- * Parse content into an entry array.
16
- *
17
- * @param string $content
18
- *
19
- * @throws \Dotenv\Exception\InvalidFileException
20
- *
21
- * @return \Dotenv\Parser\Entry[]
22
- */
23
- public function parse(string $content)
24
- {
25
- return Regex::split("/(\r\n|\n|\r)/", $content)->mapError(static function () {
26
- return 'Could not split into separate lines.';
27
- })->flatMap(static function (array $lines) {
28
- return self::process(Lines::process($lines));
29
- })->mapError(static function (string $error) {
30
- throw new InvalidFileException(\sprintf('Failed to parse dotenv file. %s', $error));
31
- })->success()->get();
32
- }
33
-
34
- /**
35
- * Convert the raw entries into proper entries.
36
- *
37
- * @param string[] $entries
38
- *
39
- * @return \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Entry[], string>
40
- */
41
- private static function process(array $entries)
42
- {
43
- /** @var \GrahamCampbell\ResultType\Result<\Dotenv\Parser\Entry[], string> */
44
- return \array_reduce($entries, static function (Result $result, string $raw) {
45
- return $result->flatMap(static function (array $entries) use ($raw) {
46
- return EntryParser::parse($raw)->map(static function (Entry $entry) use ($entries) {
47
- /** @var \Dotenv\Parser\Entry[] */
48
- return \array_merge($entries, [$entry]);
49
- });
50
- });
51
- }, Success::create([]));
52
- }
53
- }
@@ -1,19 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Parser;
6
-
7
- interface ParserInterface
8
- {
9
- /**
10
- * Parse content into an entry array.
11
- *
12
- * @param string $content
13
- *
14
- * @throws \Dotenv\Exception\InvalidFileException
15
- *
16
- * @return \Dotenv\Parser\Entry[]
17
- */
18
- public function parse(string $content);
19
- }
@@ -1,88 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Parser;
6
-
7
- use Dotenv\Util\Str;
8
-
9
- final class Value
10
- {
11
- /**
12
- * The string representation of the parsed value.
13
- *
14
- * @var string
15
- */
16
- private $chars;
17
-
18
- /**
19
- * The locations of the variables in the value.
20
- *
21
- * @var int[]
22
- */
23
- private $vars;
24
-
25
- /**
26
- * Internal constructor for a value.
27
- *
28
- * @param string $chars
29
- * @param int[] $vars
30
- *
31
- * @return void
32
- */
33
- private function __construct(string $chars, array $vars)
34
- {
35
- $this->chars = $chars;
36
- $this->vars = $vars;
37
- }
38
-
39
- /**
40
- * Create an empty value instance.
41
- *
42
- * @return \Dotenv\Parser\Value
43
- */
44
- public static function blank()
45
- {
46
- return new self('', []);
47
- }
48
-
49
- /**
50
- * Create a new value instance, appending the characters.
51
- *
52
- * @param string $chars
53
- * @param bool $var
54
- *
55
- * @return \Dotenv\Parser\Value
56
- */
57
- public function append(string $chars, bool $var)
58
- {
59
- return new self(
60
- $this->chars.$chars,
61
- $var ? \array_merge($this->vars, [Str::len($this->chars)]) : $this->vars
62
- );
63
- }
64
-
65
- /**
66
- * Get the string representation of the parsed value.
67
- *
68
- * @return string
69
- */
70
- public function getChars()
71
- {
72
- return $this->chars;
73
- }
74
-
75
- /**
76
- * Get the locations of the variables in the value.
77
- *
78
- * @return int[]
79
- */
80
- public function getVars()
81
- {
82
- $vars = $this->vars;
83
-
84
- \rsort($vars);
85
-
86
- return $vars;
87
- }
88
- }
@@ -1,15 +0,0 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace Dotenv\Repository\Adapter;
6
-
7
- interface AdapterInterface extends ReaderInterface, WriterInterface
8
- {
9
- /**
10
- * Create a new instance of the adapter, if it is available.
11
- *
12
- * @return \PhpOption\Option<\Dotenv\Repository\Adapter\AdapterInterface>
13
- */
14
- public static function create();
15
- }