create-berna-stencil 2.0.8 → 2.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eleventy.js +38 -19
- package/README.md +1 -1
- package/bin/create.js +1 -1
- package/docs/Components.md +12 -0
- package/docs/Creating pages.md +1 -2
- package/package.json +63 -61
- package/src/backend/_core/vendor/composer/autoload_static.php +10 -10
- package/src/backend/_core/vendor/composer/installed.json +6 -6
- package/src/backend/_core/vendor/composer/installed.php +2 -2
- package/src/backend/_core/vendor/graham-campbell/result-type/LICENSE +21 -21
- package/src/backend/_core/vendor/graham-campbell/result-type/composer.json +33 -33
- package/src/backend/_core/vendor/graham-campbell/result-type/src/Error.php +121 -121
- package/src/backend/_core/vendor/graham-campbell/result-type/src/Result.php +69 -69
- package/src/backend/_core/vendor/graham-campbell/result-type/src/Success.php +120 -120
- package/src/backend/_core/vendor/phpoption/phpoption/LICENSE +200 -200
- package/src/backend/_core/vendor/phpoption/phpoption/composer.json +50 -50
- package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php +175 -175
- package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/None.php +136 -136
- package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Option.php +434 -434
- package/src/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Some.php +169 -169
- package/src/backend/_core/vendor/symfony/polyfill-ctype/Ctype.php +232 -232
- package/src/backend/_core/vendor/symfony/polyfill-ctype/LICENSE +19 -19
- package/src/backend/_core/vendor/symfony/polyfill-ctype/README.md +12 -12
- package/src/backend/_core/vendor/symfony/polyfill-ctype/bootstrap.php +50 -50
- package/src/backend/_core/vendor/symfony/polyfill-ctype/bootstrap80.php +46 -46
- package/src/backend/_core/vendor/symfony/polyfill-ctype/composer.json +38 -38
- package/src/backend/_core/vendor/symfony/polyfill-mbstring/LICENSE +19 -19
- package/src/backend/_core/vendor/symfony/polyfill-mbstring/Mbstring.php +1077 -1077
- package/src/backend/_core/vendor/symfony/polyfill-mbstring/README.md +13 -13
- package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +119 -119
- package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1397 -1397
- package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +5 -5
- package/src/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +1489 -1489
- package/src/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap.php +171 -171
- package/src/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap80.php +167 -167
- package/src/backend/_core/vendor/symfony/polyfill-mbstring/composer.json +39 -39
- package/src/backend/_core/vendor/symfony/polyfill-php80/LICENSE +19 -19
- package/src/backend/_core/vendor/symfony/polyfill-php80/Php80.php +115 -115
- package/src/backend/_core/vendor/symfony/polyfill-php80/PhpToken.php +106 -106
- package/src/backend/_core/vendor/symfony/polyfill-php80/README.md +25 -25
- package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +31 -31
- package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +16 -16
- package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +20 -20
- package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +16 -16
- package/src/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +16 -16
- package/src/backend/_core/vendor/symfony/polyfill-php80/bootstrap.php +42 -42
- package/src/backend/_core/vendor/symfony/polyfill-php80/composer.json +37 -37
- package/src/backend/_core/vendor/vlucas/phpdotenv/LICENSE +30 -30
- package/src/backend/_core/vendor/vlucas/phpdotenv/composer.json +60 -60
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Dotenv.php +267 -267
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php +12 -12
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php +12 -12
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidFileException.php +12 -12
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidPathException.php +12 -12
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ValidationException.php +12 -12
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Loader.php +48 -48
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php +20 -20
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Resolver.php +65 -65
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Entry.php +59 -59
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/EntryParser.php +299 -299
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lexer.php +58 -58
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lines.php +127 -127
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Parser.php +53 -53
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/ParserInterface.php +19 -19
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Value.php +88 -88
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php +15 -15
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php +89 -89
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php +80 -80
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php +88 -88
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php +85 -85
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php +110 -110
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php +48 -48
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php +64 -64
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php +91 -91
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php +17 -17
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php +104 -104
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php +88 -88
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php +27 -27
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php +107 -107
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php +272 -272
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php +51 -51
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Paths.php +44 -44
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Reader.php +81 -81
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/FileStore.php +72 -72
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php +141 -141
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php +17 -17
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Store/StringStore.php +37 -37
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Util/Regex.php +112 -112
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Util/Str.php +108 -108
- package/src/backend/_core/vendor/vlucas/phpdotenv/src/Validator.php +207 -207
- package/src/frontend/components/layouts/base.njk +47 -34
- package/src/frontend/components/welcome.njk +32 -668
- package/src/frontend/data/site.json +43 -43
- package/src/frontend/scss/modules/_global.scss +0 -1
- package/src/backend/_core/vendor/graham-campbell/result-type/.gitattributes +0 -9
- package/src/backend/_core/vendor/graham-campbell/result-type/.github/CODE_OF_CONDUCT.md +0 -132
- package/src/backend/_core/vendor/graham-campbell/result-type/.github/CONTRIBUTING.md +0 -31
- package/src/backend/_core/vendor/graham-campbell/result-type/.github/FUNDING.yml +0 -2
- package/src/backend/_core/vendor/graham-campbell/result-type/.github/SECURITY.md +0 -14
- package/src/backend/_core/vendor/graham-campbell/result-type/.github/workflows/stale.yml +0 -11
- package/src/backend/_core/vendor/graham-campbell/result-type/.github/workflows/tests.yml +0 -40
- package/src/backend/_core/vendor/graham-campbell/result-type/CHANGELOG.md +0 -53
- package/src/backend/_core/vendor/graham-campbell/result-type/README.md +0 -42
- package/src/backend/_core/vendor/graham-campbell/result-type/phpunit.xml.dist +0 -13
- package/src/backend/_core/vendor/graham-campbell/result-type/tests/ResultTest.php +0 -95
- package/src/backend/_core/vendor/phpoption/phpoption/.gitattributes +0 -13
- package/src/backend/_core/vendor/phpoption/phpoption/.github/CODE_OF_CONDUCT.md +0 -132
- package/src/backend/_core/vendor/phpoption/phpoption/.github/CONTRIBUTING.md +0 -30
- package/src/backend/_core/vendor/phpoption/phpoption/.github/FUNDING.yml +0 -2
- package/src/backend/_core/vendor/phpoption/phpoption/.github/SECURITY.md +0 -14
- package/src/backend/_core/vendor/phpoption/phpoption/.github/workflows/static.yml +0 -40
- package/src/backend/_core/vendor/phpoption/phpoption/.github/workflows/tests.yml +0 -40
- package/src/backend/_core/vendor/phpoption/phpoption/Makefile +0 -17
- package/src/backend/_core/vendor/phpoption/phpoption/README.md +0 -201
- package/src/backend/_core/vendor/phpoption/phpoption/phpstan-baseline.neon +0 -44
- package/src/backend/_core/vendor/phpoption/phpoption/phpstan.neon.dist +0 -7
- package/src/backend/_core/vendor/phpoption/phpoption/phpunit.xml.dist +0 -13
- package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/EnsureTest.php +0 -72
- package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/LazyOptionTest.php +0 -357
- package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/NoneTest.php +0 -153
- package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/OptionTest.php +0 -166
- package/src/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php +0 -194
- package/src/backend/_core/vendor/phpoption/phpoption/tests/bootstrap.php +0 -8
- package/src/backend/_core/vendor/phpoption/phpoption/vendor-bin/phpstan/composer.json +0 -8
- package/src/backend/_core/vendor/vlucas/phpdotenv/.editorconfig +0 -15
- package/src/backend/_core/vendor/vlucas/phpdotenv/.gitattributes +0 -15
- package/src/backend/_core/vendor/vlucas/phpdotenv/.github/CODE_OF_CONDUCT.md +0 -132
- package/src/backend/_core/vendor/vlucas/phpdotenv/.github/CONTRIBUTING.md +0 -30
- package/src/backend/_core/vendor/vlucas/phpdotenv/.github/FUNDING.yml +0 -2
- package/src/backend/_core/vendor/vlucas/phpdotenv/.github/SECURITY.md +0 -14
- package/src/backend/_core/vendor/vlucas/phpdotenv/.github/workflows/static.yml +0 -40
- package/src/backend/_core/vendor/vlucas/phpdotenv/.github/workflows/tests.yml +0 -70
- package/src/backend/_core/vendor/vlucas/phpdotenv/Makefile +0 -17
- package/src/backend/_core/vendor/vlucas/phpdotenv/README.md +0 -370
- package/src/backend/_core/vendor/vlucas/phpdotenv/UPGRADING.md +0 -196
- package/src/backend/_core/vendor/vlucas/phpdotenv/phpstan-baseline.neon +0 -157
- package/src/backend/_core/vendor/vlucas/phpdotenv/phpstan.neon.dist +0 -7
- package/src/backend/_core/vendor/vlucas/phpdotenv/phpunit.xml.dist +0 -13
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/DotenvTest.php +0 -387
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Loader/LoaderTest.php +0 -86
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/EntryParserTest.php +0 -234
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LexerTest.php +0 -40
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LinesTest.php +0 -53
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/ParserTest.php +0 -98
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ArrayAdapterTest.php +0 -57
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/EnvConstAdapterTest.php +0 -75
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/PutenvAdapterTest.php +0 -52
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ServerConstAdapterTest.php +0 -75
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/RepositoryTest.php +0 -305
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Store/StoreTest.php +0 -141
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/ValidatorTest.php +0 -479
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/.env +0 -5
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/assertions.env +0 -18
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/booleans.env +0 -33
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/commented.env +0 -15
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/empty.env +0 -1
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/example.env +0 -1
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/exported.env +0 -7
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/immutable.env +0 -1
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/integers.env +0 -17
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/large.env +0 -2
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multibyte.env +0 -3
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiline.env +0 -14
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiple.env +0 -4
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/mutable.env +0 -1
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/nested.env +0 -15
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/quoted.env +0 -11
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/specialchars.env +0 -8
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/unicodevarnames.env +0 -2
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/utf8-with-bom-encoding.env +0 -3
- package/src/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/windows.env +0 -1
- package/src/backend/_core/vendor/vlucas/phpdotenv/vendor-bin/phpstan/composer.json +0 -15
- package/src/backend/config.php +0 -19
|
@@ -1,58 +1,58 @@
|
|
|
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
|
+
<?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 +1,127 @@
|
|
|
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
|
+
<?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 +1,53 @@
|
|
|
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
|
+
<?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 +1,19 @@
|
|
|
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
|
+
<?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
|
+
}
|