create-berna-stencil 1.0.18 → 1.0.19
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/bin/create.js +1 -1
- package/package.json +2 -2
- package/src/api/core/composer.lock +492 -574
- package/src/api/core/vendor/autoload.php +22 -22
- package/src/api/core/vendor/composer/ClassLoader.php +579 -579
- package/src/api/core/vendor/composer/LICENSE +21 -21
- package/src/api/core/vendor/composer/autoload_classmap.php +15 -15
- package/src/api/core/vendor/composer/autoload_files.php +12 -12
- package/src/api/core/vendor/composer/autoload_namespaces.php +9 -9
- package/src/api/core/vendor/composer/autoload_psr4.php +15 -16
- package/src/api/core/vendor/composer/autoload_real.php +50 -50
- package/src/api/core/vendor/composer/autoload_static.php +81 -86
- package/src/api/core/vendor/composer/installed.json +6 -91
- package/src/api/core/vendor/composer/installed.php +2 -11
- package/src/api/core/vendor/composer/platform_check.php +25 -25
- package/src/api/core/vendor/graham-campbell/result-type/.gitattributes +9 -0
- package/src/api/core/vendor/graham-campbell/result-type/.github/CODE_OF_CONDUCT.md +132 -0
- package/src/api/core/vendor/graham-campbell/result-type/.github/CONTRIBUTING.md +31 -0
- package/src/api/core/vendor/graham-campbell/result-type/.github/FUNDING.yml +2 -0
- package/src/api/core/vendor/graham-campbell/result-type/.github/SECURITY.md +14 -0
- package/src/api/core/vendor/graham-campbell/result-type/.github/workflows/stale.yml +11 -0
- package/src/api/core/vendor/graham-campbell/result-type/.github/workflows/tests.yml +40 -0
- package/src/api/core/vendor/graham-campbell/result-type/CHANGELOG.md +53 -0
- package/src/api/core/vendor/graham-campbell/result-type/LICENSE +21 -0
- package/src/api/core/vendor/graham-campbell/result-type/README.md +42 -0
- package/src/api/core/vendor/graham-campbell/result-type/composer.json +33 -0
- package/src/api/core/vendor/graham-campbell/result-type/phpunit.xml.dist +13 -0
- package/src/api/core/vendor/graham-campbell/result-type/src/Error.php +121 -0
- package/src/api/core/vendor/graham-campbell/result-type/src/Result.php +69 -0
- package/src/api/core/vendor/graham-campbell/result-type/src/Success.php +120 -0
- package/src/api/core/vendor/graham-campbell/result-type/tests/ResultTest.php +95 -0
- package/src/api/core/vendor/phpoption/phpoption/.gitattributes +13 -0
- package/src/api/core/vendor/phpoption/phpoption/.github/CODE_OF_CONDUCT.md +132 -0
- package/src/api/core/vendor/phpoption/phpoption/.github/CONTRIBUTING.md +30 -0
- package/src/api/core/vendor/phpoption/phpoption/.github/FUNDING.yml +2 -0
- package/src/api/core/vendor/phpoption/phpoption/.github/SECURITY.md +14 -0
- package/src/api/core/vendor/phpoption/phpoption/.github/workflows/static.yml +40 -0
- package/src/api/core/vendor/phpoption/phpoption/.github/workflows/tests.yml +40 -0
- package/src/api/core/vendor/phpoption/phpoption/LICENSE +201 -0
- package/src/api/core/vendor/phpoption/phpoption/Makefile +17 -0
- package/src/api/core/vendor/phpoption/phpoption/README.md +201 -0
- package/src/api/core/vendor/phpoption/phpoption/composer.json +50 -0
- package/src/api/core/vendor/phpoption/phpoption/phpstan-baseline.neon +44 -0
- package/src/api/core/vendor/phpoption/phpoption/phpstan.neon.dist +7 -0
- package/src/api/core/vendor/phpoption/phpoption/phpunit.xml.dist +13 -0
- package/src/api/core/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php +175 -0
- package/src/api/core/vendor/phpoption/phpoption/src/PhpOption/None.php +136 -0
- package/src/api/core/vendor/phpoption/phpoption/src/PhpOption/Option.php +434 -0
- package/src/api/core/vendor/phpoption/phpoption/src/PhpOption/Some.php +169 -0
- package/src/api/core/vendor/phpoption/phpoption/tests/PhpOption/Tests/EnsureTest.php +72 -0
- package/src/api/core/vendor/phpoption/phpoption/tests/PhpOption/Tests/LazyOptionTest.php +357 -0
- package/src/api/core/vendor/phpoption/phpoption/tests/PhpOption/Tests/NoneTest.php +153 -0
- package/src/api/core/vendor/phpoption/phpoption/tests/PhpOption/Tests/OptionTest.php +166 -0
- package/src/api/core/vendor/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php +194 -0
- package/src/api/core/vendor/phpoption/phpoption/tests/bootstrap.php +8 -0
- package/src/api/core/vendor/phpoption/phpoption/vendor-bin/phpstan/composer.json +8 -0
- package/src/api/core/vendor/symfony/polyfill-ctype/Ctype.php +232 -0
- package/src/api/core/vendor/symfony/polyfill-ctype/LICENSE +19 -0
- package/src/api/core/vendor/symfony/polyfill-ctype/README.md +12 -0
- package/src/api/core/vendor/symfony/polyfill-ctype/bootstrap.php +50 -0
- package/src/api/core/vendor/symfony/polyfill-ctype/bootstrap80.php +46 -0
- package/src/api/core/vendor/symfony/polyfill-ctype/composer.json +38 -0
- package/src/api/core/vendor/symfony/polyfill-mbstring/LICENSE +19 -0
- package/src/api/core/vendor/symfony/polyfill-mbstring/Mbstring.php +1077 -0
- package/src/api/core/vendor/symfony/polyfill-mbstring/README.md +13 -0
- package/src/api/core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +119 -0
- package/src/api/core/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1397 -0
- package/src/api/core/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +5 -0
- package/src/api/core/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +1489 -0
- package/src/api/core/vendor/symfony/polyfill-mbstring/bootstrap.php +171 -0
- package/src/api/core/vendor/symfony/polyfill-mbstring/bootstrap80.php +167 -0
- package/src/api/core/vendor/symfony/polyfill-mbstring/composer.json +39 -0
- package/src/api/core/vendor/symfony/polyfill-php80/LICENSE +19 -0
- package/src/api/core/vendor/symfony/polyfill-php80/Php80.php +115 -0
- package/src/api/core/vendor/symfony/polyfill-php80/PhpToken.php +106 -0
- package/src/api/core/vendor/symfony/polyfill-php80/README.md +25 -0
- package/src/api/core/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +31 -0
- package/src/api/core/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +16 -0
- package/src/api/core/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +20 -0
- package/src/api/core/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +16 -0
- package/src/api/core/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +16 -0
- package/src/api/core/vendor/symfony/polyfill-php80/bootstrap.php +42 -0
- package/src/api/core/vendor/symfony/polyfill-php80/composer.json +37 -0
- package/src/api/core/vendor/vlucas/phpdotenv/.editorconfig +15 -0
- package/src/api/core/vendor/vlucas/phpdotenv/.gitattributes +15 -0
- package/src/api/core/vendor/vlucas/phpdotenv/.github/CODE_OF_CONDUCT.md +132 -0
- package/src/api/core/vendor/vlucas/phpdotenv/.github/CONTRIBUTING.md +30 -0
- package/src/api/core/vendor/vlucas/phpdotenv/.github/FUNDING.yml +2 -0
- package/src/api/core/vendor/vlucas/phpdotenv/.github/SECURITY.md +14 -0
- package/src/api/core/vendor/vlucas/phpdotenv/.github/workflows/static.yml +40 -0
- package/src/api/core/vendor/vlucas/phpdotenv/.github/workflows/tests.yml +70 -0
- package/src/api/core/vendor/vlucas/phpdotenv/LICENSE +30 -0
- package/src/api/core/vendor/vlucas/phpdotenv/Makefile +17 -0
- package/src/api/core/vendor/vlucas/phpdotenv/README.md +370 -0
- package/src/api/core/vendor/vlucas/phpdotenv/UPGRADING.md +196 -0
- package/src/api/core/vendor/vlucas/phpdotenv/composer.json +60 -0
- package/src/api/core/vendor/vlucas/phpdotenv/phpstan-baseline.neon +157 -0
- package/src/api/core/vendor/vlucas/phpdotenv/phpstan.neon.dist +7 -0
- package/src/api/core/vendor/vlucas/phpdotenv/phpunit.xml.dist +13 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Dotenv.php +267 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php +12 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php +12 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Exception/InvalidFileException.php +12 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Exception/InvalidPathException.php +12 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Exception/ValidationException.php +12 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Loader/Loader.php +48 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php +20 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Loader/Resolver.php +65 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/Entry.php +59 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/EntryParser.php +299 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/Lexer.php +58 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/Lines.php +127 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/Parser.php +53 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/ParserInterface.php +19 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Parser/Value.php +88 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php +15 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php +89 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php +80 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php +88 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php +85 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php +110 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php +48 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php +64 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php +91 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php +17 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php +104 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php +88 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php +27 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php +107 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php +272 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php +51 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Store/File/Paths.php +44 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Store/File/Reader.php +81 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Store/FileStore.php +72 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php +141 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php +17 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Store/StringStore.php +37 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Util/Regex.php +112 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Util/Str.php +108 -0
- package/src/api/core/vendor/vlucas/phpdotenv/src/Validator.php +207 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/Dotenv/DotenvTest.php +387 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/Dotenv/Loader/LoaderTest.php +86 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/EntryParserTest.php +234 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LexerTest.php +40 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LinesTest.php +53 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/ParserTest.php +98 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ArrayAdapterTest.php +57 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/EnvConstAdapterTest.php +75 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/PutenvAdapterTest.php +52 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ServerConstAdapterTest.php +75 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/RepositoryTest.php +305 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/Dotenv/Store/StoreTest.php +141 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/Dotenv/ValidatorTest.php +479 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/.env +5 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/assertions.env +18 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/booleans.env +33 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/commented.env +15 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/empty.env +1 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/example.env +1 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/exported.env +7 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/immutable.env +1 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/integers.env +17 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/large.env +2 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/multibyte.env +3 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiline.env +14 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiple.env +4 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/mutable.env +1 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/nested.env +15 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/quoted.env +11 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/specialchars.env +8 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/unicodevarnames.env +2 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/utf8-with-bom-encoding.env +3 -0
- package/src/api/core/vendor/vlucas/phpdotenv/tests/fixtures/env/windows.env +1 -0
- package/src/api/core/vendor/vlucas/phpdotenv/vendor-bin/phpstan/composer.json +15 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
parameters:
|
|
2
|
+
ignoreErrors:
|
|
3
|
+
-
|
|
4
|
+
message: '#^PHPDoc tag @var with type PhpOption\\Option\<Dotenv\\Parser\\Value\> is not subtype of type PhpOption\\Option\<Dotenv\\Parser\\Value\|null\>\.$#'
|
|
5
|
+
identifier: varTag.type
|
|
6
|
+
count: 1
|
|
7
|
+
path: src/Parser/Entry.php
|
|
8
|
+
|
|
9
|
+
-
|
|
10
|
+
message: '#^Anonymous function should return GrahamCampbell\\ResultType\\Result\<mixed, string\> but returns GrahamCampbell\\ResultType\\Result\<Dotenv\\Parser\\Entry, string\>\.$#'
|
|
11
|
+
identifier: return.type
|
|
12
|
+
count: 1
|
|
13
|
+
path: src/Parser/EntryParser.php
|
|
14
|
+
|
|
15
|
+
-
|
|
16
|
+
message: '#^Method Dotenv\\Parser\\EntryParser\:\:parse\(\) should return GrahamCampbell\\ResultType\\Result\<Dotenv\\Parser\\Entry, string\> but returns GrahamCampbell\\ResultType\\Result\<mixed, string\>\.$#'
|
|
17
|
+
identifier: return.type
|
|
18
|
+
count: 1
|
|
19
|
+
path: src/Parser/EntryParser.php
|
|
20
|
+
|
|
21
|
+
-
|
|
22
|
+
message: '#^PHPDoc tag @var with type GrahamCampbell\\ResultType\\Result\<Dotenv\\Parser\\Value\|null, string\> is not subtype of type GrahamCampbell\\ResultType\\Result\<Dotenv\\Parser\\Value, string\>\|GrahamCampbell\\ResultType\\Result\<null, mixed\>\.$#'
|
|
23
|
+
identifier: varTag.type
|
|
24
|
+
count: 1
|
|
25
|
+
path: src/Parser/EntryParser.php
|
|
26
|
+
|
|
27
|
+
-
|
|
28
|
+
message: '#^Parameter \#2 \$callback of function array_reduce expects callable\(GrahamCampbell\\ResultType\\Result\<array\{Dotenv\\Parser\\Value, int\}, mixed\>\|GrahamCampbell\\ResultType\\Result\<array\{mixed, int\}, string\>, string\)\: \(GrahamCampbell\\ResultType\\Result\<array\{Dotenv\\Parser\\Value, int\}, mixed\>\|GrahamCampbell\\ResultType\\Result\<array\{mixed, int\}, string\>\), Closure\(GrahamCampbell\\ResultType\\Result, string\)\: GrahamCampbell\\ResultType\\Result\<array\{Dotenv\\Parser\\Value, int\}, string\> given\.$#'
|
|
29
|
+
identifier: argument.type
|
|
30
|
+
count: 1
|
|
31
|
+
path: src/Parser/EntryParser.php
|
|
32
|
+
|
|
33
|
+
-
|
|
34
|
+
message: '#^Only booleans are allowed in a negated boolean, int\|false given\.$#'
|
|
35
|
+
identifier: booleanNot.exprNotBoolean
|
|
36
|
+
count: 1
|
|
37
|
+
path: src/Parser/Lexer.php
|
|
38
|
+
|
|
39
|
+
-
|
|
40
|
+
message: '#^Parameter \#1 \$pattern of function preg_match expects string, mixed given\.$#'
|
|
41
|
+
identifier: argument.type
|
|
42
|
+
count: 1
|
|
43
|
+
path: src/Parser/Lexer.php
|
|
44
|
+
|
|
45
|
+
-
|
|
46
|
+
message: '#^PHPDoc tag @var with type PhpOption\\Option\<Dotenv\\Repository\\Adapter\\AdapterInterface\> is not subtype of type PhpOption\\Some\<Dotenv\\Repository\\Adapter\\ApacheAdapter\>\.$#'
|
|
47
|
+
identifier: varTag.type
|
|
48
|
+
count: 1
|
|
49
|
+
path: src/Repository/Adapter/ApacheAdapter.php
|
|
50
|
+
|
|
51
|
+
-
|
|
52
|
+
message: '#^PHPDoc tag @var with type PhpOption\\Option\<string\> is not subtype of type PhpOption\\Option\<string\|false\|null\>\.$#'
|
|
53
|
+
identifier: varTag.type
|
|
54
|
+
count: 1
|
|
55
|
+
path: src/Repository/Adapter/ApacheAdapter.php
|
|
56
|
+
|
|
57
|
+
-
|
|
58
|
+
message: '#^PHPDoc tag @var with type PhpOption\\Option\<Dotenv\\Repository\\Adapter\\AdapterInterface\> is not subtype of type PhpOption\\Some\<Dotenv\\Repository\\Adapter\\ArrayAdapter\>\.$#'
|
|
59
|
+
identifier: varTag.type
|
|
60
|
+
count: 1
|
|
61
|
+
path: src/Repository/Adapter/ArrayAdapter.php
|
|
62
|
+
|
|
63
|
+
-
|
|
64
|
+
message: '#^Cannot cast mixed to string\.$#'
|
|
65
|
+
identifier: cast.string
|
|
66
|
+
count: 1
|
|
67
|
+
path: src/Repository/Adapter/EnvConstAdapter.php
|
|
68
|
+
|
|
69
|
+
-
|
|
70
|
+
message: '#^PHPDoc tag @var with type PhpOption\\Option\<Dotenv\\Repository\\Adapter\\AdapterInterface\> is not subtype of type PhpOption\\Some\<Dotenv\\Repository\\Adapter\\EnvConstAdapter\>\.$#'
|
|
71
|
+
identifier: varTag.type
|
|
72
|
+
count: 1
|
|
73
|
+
path: src/Repository/Adapter/EnvConstAdapter.php
|
|
74
|
+
|
|
75
|
+
-
|
|
76
|
+
message: '#^PHPDoc tag @var with type PhpOption\\Option\<Dotenv\\Repository\\Adapter\\AdapterInterface\> is not subtype of type PhpOption\\Some\<Dotenv\\Repository\\Adapter\\PutenvAdapter\>\.$#'
|
|
77
|
+
identifier: varTag.type
|
|
78
|
+
count: 1
|
|
79
|
+
path: src/Repository/Adapter/PutenvAdapter.php
|
|
80
|
+
|
|
81
|
+
-
|
|
82
|
+
message: '#^PHPDoc tag @var with type PhpOption\\Option\<string\> is not subtype of type PhpOption\\Option\<string\|false\>\.$#'
|
|
83
|
+
identifier: varTag.type
|
|
84
|
+
count: 1
|
|
85
|
+
path: src/Repository/Adapter/PutenvAdapter.php
|
|
86
|
+
|
|
87
|
+
-
|
|
88
|
+
message: '#^Cannot cast mixed to string\.$#'
|
|
89
|
+
identifier: cast.string
|
|
90
|
+
count: 1
|
|
91
|
+
path: src/Repository/Adapter/ServerConstAdapter.php
|
|
92
|
+
|
|
93
|
+
-
|
|
94
|
+
message: '#^PHPDoc tag @var with type PhpOption\\Option\<Dotenv\\Repository\\Adapter\\AdapterInterface\> is not subtype of type PhpOption\\Some\<Dotenv\\Repository\\Adapter\\ServerConstAdapter\>\.$#'
|
|
95
|
+
identifier: varTag.type
|
|
96
|
+
count: 1
|
|
97
|
+
path: src/Repository/Adapter/ServerConstAdapter.php
|
|
98
|
+
|
|
99
|
+
-
|
|
100
|
+
message: '#^Parameter \#1 \$callable of method PhpOption\\Some\<Dotenv\\Repository\\Adapter\\AdapterInterface\|string\>\:\:flatMap\(\) expects callable\(Dotenv\\Repository\\Adapter\\AdapterInterface\|string\)\: PhpOption\\Option\<S\>, Closure\(mixed\)\: mixed given\.$#'
|
|
101
|
+
identifier: argument.type
|
|
102
|
+
count: 1
|
|
103
|
+
path: src/Repository/RepositoryBuilder.php
|
|
104
|
+
|
|
105
|
+
-
|
|
106
|
+
message: '#^Parameter \#1 \$callable of method PhpOption\\Some\<Dotenv\\Repository\\Adapter\\ReaderInterface\|string\>\:\:flatMap\(\) expects callable\(Dotenv\\Repository\\Adapter\\ReaderInterface\|string\)\: PhpOption\\Option\<S\>, Closure\(mixed\)\: mixed given\.$#'
|
|
107
|
+
identifier: argument.type
|
|
108
|
+
count: 1
|
|
109
|
+
path: src/Repository/RepositoryBuilder.php
|
|
110
|
+
|
|
111
|
+
-
|
|
112
|
+
message: '#^Parameter \#1 \$callable of method PhpOption\\Some\<Dotenv\\Repository\\Adapter\\WriterInterface\|string\>\:\:flatMap\(\) expects callable\(Dotenv\\Repository\\Adapter\\WriterInterface\|string\)\: PhpOption\\Option\<S\>, Closure\(mixed\)\: mixed given\.$#'
|
|
113
|
+
identifier: argument.type
|
|
114
|
+
count: 1
|
|
115
|
+
path: src/Repository/RepositoryBuilder.php
|
|
116
|
+
|
|
117
|
+
-
|
|
118
|
+
message: '#^Parameter \#1 \$readers of class Dotenv\\Repository\\RepositoryBuilder constructor expects array\<Dotenv\\Repository\\Adapter\\ReaderInterface\>, array\<Dotenv\\Repository\\Adapter\\ReaderInterface\|S\> given\.$#'
|
|
119
|
+
identifier: argument.type
|
|
120
|
+
count: 2
|
|
121
|
+
path: src/Repository/RepositoryBuilder.php
|
|
122
|
+
|
|
123
|
+
-
|
|
124
|
+
message: '#^Parameter \#2 \$writers of class Dotenv\\Repository\\RepositoryBuilder constructor expects array\<Dotenv\\Repository\\Adapter\\WriterInterface\>, array\<Dotenv\\Repository\\Adapter\\WriterInterface\|S\> given\.$#'
|
|
125
|
+
identifier: argument.type
|
|
126
|
+
count: 2
|
|
127
|
+
path: src/Repository/RepositoryBuilder.php
|
|
128
|
+
|
|
129
|
+
-
|
|
130
|
+
message: '#^PHPDoc tag @var with type PhpOption\\Option\<string\> is not subtype of type PhpOption\\Option\<string\|false\>\.$#'
|
|
131
|
+
identifier: varTag.type
|
|
132
|
+
count: 1
|
|
133
|
+
path: src/Store/File/Reader.php
|
|
134
|
+
|
|
135
|
+
-
|
|
136
|
+
message: '#^Method Dotenv\\Util\\Regex\:\:occurrences\(\) should return GrahamCampbell\\ResultType\\Result\<int, string\> but returns GrahamCampbell\\ResultType\\Result\<int\<0, max\>, string\>\.$#'
|
|
137
|
+
identifier: return.type
|
|
138
|
+
count: 1
|
|
139
|
+
path: src/Util/Regex.php
|
|
140
|
+
|
|
141
|
+
-
|
|
142
|
+
message: '#^Loose comparison via "\=\=" is not allowed\.$#'
|
|
143
|
+
identifier: equal.notAllowed
|
|
144
|
+
count: 1
|
|
145
|
+
path: src/Util/Str.php
|
|
146
|
+
|
|
147
|
+
-
|
|
148
|
+
message: '#^PHPDoc tag @var with type GrahamCampbell\\ResultType\\Result\<string, string\> is not subtype of type GrahamCampbell\\ResultType\\Result\<mixed, non\-falsy\-string\>\.$#'
|
|
149
|
+
identifier: varTag.type
|
|
150
|
+
count: 2
|
|
151
|
+
path: src/Util/Str.php
|
|
152
|
+
|
|
153
|
+
-
|
|
154
|
+
message: '#^PHPDoc tag @var with type PhpOption\\Option\<int\> is not subtype of type PhpOption\\Option\<int\<0, max\>\|false\>\.$#'
|
|
155
|
+
identifier: varTag.type
|
|
156
|
+
count: 1
|
|
157
|
+
path: src/Util/Str.php
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" backupGlobals="false" beStrictAboutTestsThatDoNotTestAnything="true" beStrictAboutOutputDuringTests="true" bootstrap="vendor/autoload.php" colors="true" failOnRisky="true" failOnWarning="true" processIsolation="false" stopOnError="false" stopOnFailure="false" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.4/phpunit.xsd">
|
|
3
|
+
<testsuites>
|
|
4
|
+
<testsuite name="PHP Dotenv Test Suite">
|
|
5
|
+
<directory suffix="Test.php">./tests</directory>
|
|
6
|
+
</testsuite>
|
|
7
|
+
</testsuites>
|
|
8
|
+
<source>
|
|
9
|
+
<include>
|
|
10
|
+
<directory suffix=".php">./src</directory>
|
|
11
|
+
</include>
|
|
12
|
+
</source>
|
|
13
|
+
</phpunit>
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
declare(strict_types=1);
|
|
4
|
+
|
|
5
|
+
namespace Dotenv;
|
|
6
|
+
|
|
7
|
+
use Dotenv\Exception\InvalidPathException;
|
|
8
|
+
use Dotenv\Loader\Loader;
|
|
9
|
+
use Dotenv\Loader\LoaderInterface;
|
|
10
|
+
use Dotenv\Parser\Parser;
|
|
11
|
+
use Dotenv\Parser\ParserInterface;
|
|
12
|
+
use Dotenv\Repository\Adapter\ArrayAdapter;
|
|
13
|
+
use Dotenv\Repository\Adapter\PutenvAdapter;
|
|
14
|
+
use Dotenv\Repository\RepositoryBuilder;
|
|
15
|
+
use Dotenv\Repository\RepositoryInterface;
|
|
16
|
+
use Dotenv\Store\StoreBuilder;
|
|
17
|
+
use Dotenv\Store\StoreInterface;
|
|
18
|
+
use Dotenv\Store\StringStore;
|
|
19
|
+
|
|
20
|
+
class Dotenv
|
|
21
|
+
{
|
|
22
|
+
/**
|
|
23
|
+
* The store instance.
|
|
24
|
+
*
|
|
25
|
+
* @var \Dotenv\Store\StoreInterface
|
|
26
|
+
*/
|
|
27
|
+
private $store;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The parser instance.
|
|
31
|
+
*
|
|
32
|
+
* @var \Dotenv\Parser\ParserInterface
|
|
33
|
+
*/
|
|
34
|
+
private $parser;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The loader instance.
|
|
38
|
+
*
|
|
39
|
+
* @var \Dotenv\Loader\LoaderInterface
|
|
40
|
+
*/
|
|
41
|
+
private $loader;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The repository instance.
|
|
45
|
+
*
|
|
46
|
+
* @var \Dotenv\Repository\RepositoryInterface
|
|
47
|
+
*/
|
|
48
|
+
private $repository;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Create a new dotenv instance.
|
|
52
|
+
*
|
|
53
|
+
* @param \Dotenv\Store\StoreInterface $store
|
|
54
|
+
* @param \Dotenv\Parser\ParserInterface $parser
|
|
55
|
+
* @param \Dotenv\Loader\LoaderInterface $loader
|
|
56
|
+
* @param \Dotenv\Repository\RepositoryInterface $repository
|
|
57
|
+
*
|
|
58
|
+
* @return void
|
|
59
|
+
*/
|
|
60
|
+
public function __construct(
|
|
61
|
+
StoreInterface $store,
|
|
62
|
+
ParserInterface $parser,
|
|
63
|
+
LoaderInterface $loader,
|
|
64
|
+
RepositoryInterface $repository
|
|
65
|
+
) {
|
|
66
|
+
$this->store = $store;
|
|
67
|
+
$this->parser = $parser;
|
|
68
|
+
$this->loader = $loader;
|
|
69
|
+
$this->repository = $repository;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Create a new dotenv instance.
|
|
74
|
+
*
|
|
75
|
+
* @param \Dotenv\Repository\RepositoryInterface $repository
|
|
76
|
+
* @param string|string[] $paths
|
|
77
|
+
* @param string|string[]|null $names
|
|
78
|
+
* @param bool $shortCircuit
|
|
79
|
+
* @param string|null $fileEncoding
|
|
80
|
+
*
|
|
81
|
+
* @return \Dotenv\Dotenv
|
|
82
|
+
*/
|
|
83
|
+
public static function create(RepositoryInterface $repository, $paths, $names = null, bool $shortCircuit = true, ?string $fileEncoding = null)
|
|
84
|
+
{
|
|
85
|
+
$builder = $names === null ? StoreBuilder::createWithDefaultName() : StoreBuilder::createWithNoNames();
|
|
86
|
+
|
|
87
|
+
foreach ((array) $paths as $path) {
|
|
88
|
+
$builder = $builder->addPath($path);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
foreach ((array) $names as $name) {
|
|
92
|
+
$builder = $builder->addName($name);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if ($shortCircuit) {
|
|
96
|
+
$builder = $builder->shortCircuit();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return new self($builder->fileEncoding($fileEncoding)->make(), new Parser(), new Loader(), $repository);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Create a new mutable dotenv instance with default repository.
|
|
104
|
+
*
|
|
105
|
+
* @param string|string[] $paths
|
|
106
|
+
* @param string|string[]|null $names
|
|
107
|
+
* @param bool $shortCircuit
|
|
108
|
+
* @param string|null $fileEncoding
|
|
109
|
+
*
|
|
110
|
+
* @return \Dotenv\Dotenv
|
|
111
|
+
*/
|
|
112
|
+
public static function createMutable($paths, $names = null, bool $shortCircuit = true, ?string $fileEncoding = null)
|
|
113
|
+
{
|
|
114
|
+
$repository = RepositoryBuilder::createWithDefaultAdapters()->make();
|
|
115
|
+
|
|
116
|
+
return self::create($repository, $paths, $names, $shortCircuit, $fileEncoding);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Create a new mutable dotenv instance with default repository with the putenv adapter.
|
|
121
|
+
*
|
|
122
|
+
* @param string|string[] $paths
|
|
123
|
+
* @param string|string[]|null $names
|
|
124
|
+
* @param bool $shortCircuit
|
|
125
|
+
* @param string|null $fileEncoding
|
|
126
|
+
*
|
|
127
|
+
* @return \Dotenv\Dotenv
|
|
128
|
+
*/
|
|
129
|
+
public static function createUnsafeMutable($paths, $names = null, bool $shortCircuit = true, ?string $fileEncoding = null)
|
|
130
|
+
{
|
|
131
|
+
$repository = RepositoryBuilder::createWithDefaultAdapters()
|
|
132
|
+
->addAdapter(PutenvAdapter::class)
|
|
133
|
+
->make();
|
|
134
|
+
|
|
135
|
+
return self::create($repository, $paths, $names, $shortCircuit, $fileEncoding);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Create a new immutable dotenv instance with default repository.
|
|
140
|
+
*
|
|
141
|
+
* @param string|string[] $paths
|
|
142
|
+
* @param string|string[]|null $names
|
|
143
|
+
* @param bool $shortCircuit
|
|
144
|
+
* @param string|null $fileEncoding
|
|
145
|
+
*
|
|
146
|
+
* @return \Dotenv\Dotenv
|
|
147
|
+
*/
|
|
148
|
+
public static function createImmutable($paths, $names = null, bool $shortCircuit = true, ?string $fileEncoding = null)
|
|
149
|
+
{
|
|
150
|
+
$repository = RepositoryBuilder::createWithDefaultAdapters()->immutable()->make();
|
|
151
|
+
|
|
152
|
+
return self::create($repository, $paths, $names, $shortCircuit, $fileEncoding);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Create a new immutable dotenv instance with default repository with the putenv adapter.
|
|
157
|
+
*
|
|
158
|
+
* @param string|string[] $paths
|
|
159
|
+
* @param string|string[]|null $names
|
|
160
|
+
* @param bool $shortCircuit
|
|
161
|
+
* @param string|null $fileEncoding
|
|
162
|
+
*
|
|
163
|
+
* @return \Dotenv\Dotenv
|
|
164
|
+
*/
|
|
165
|
+
public static function createUnsafeImmutable($paths, $names = null, bool $shortCircuit = true, ?string $fileEncoding = null)
|
|
166
|
+
{
|
|
167
|
+
$repository = RepositoryBuilder::createWithDefaultAdapters()
|
|
168
|
+
->addAdapter(PutenvAdapter::class)
|
|
169
|
+
->immutable()
|
|
170
|
+
->make();
|
|
171
|
+
|
|
172
|
+
return self::create($repository, $paths, $names, $shortCircuit, $fileEncoding);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Create a new dotenv instance with an array backed repository.
|
|
177
|
+
*
|
|
178
|
+
* @param string|string[] $paths
|
|
179
|
+
* @param string|string[]|null $names
|
|
180
|
+
* @param bool $shortCircuit
|
|
181
|
+
* @param string|null $fileEncoding
|
|
182
|
+
*
|
|
183
|
+
* @return \Dotenv\Dotenv
|
|
184
|
+
*/
|
|
185
|
+
public static function createArrayBacked($paths, $names = null, bool $shortCircuit = true, ?string $fileEncoding = null)
|
|
186
|
+
{
|
|
187
|
+
$repository = RepositoryBuilder::createWithNoAdapters()->addAdapter(ArrayAdapter::class)->make();
|
|
188
|
+
|
|
189
|
+
return self::create($repository, $paths, $names, $shortCircuit, $fileEncoding);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Parse the given content and resolve nested variables.
|
|
194
|
+
*
|
|
195
|
+
* This method behaves just like load(), only without mutating your actual
|
|
196
|
+
* environment. We do this by using an array backed repository.
|
|
197
|
+
*
|
|
198
|
+
* @param string $content
|
|
199
|
+
*
|
|
200
|
+
* @throws \Dotenv\Exception\InvalidFileException
|
|
201
|
+
*
|
|
202
|
+
* @return array<string, string|null>
|
|
203
|
+
*/
|
|
204
|
+
public static function parse(string $content)
|
|
205
|
+
{
|
|
206
|
+
$repository = RepositoryBuilder::createWithNoAdapters()->addAdapter(ArrayAdapter::class)->make();
|
|
207
|
+
|
|
208
|
+
$phpdotenv = new self(new StringStore($content), new Parser(), new Loader(), $repository);
|
|
209
|
+
|
|
210
|
+
return $phpdotenv->load();
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Read and load environment file(s).
|
|
215
|
+
*
|
|
216
|
+
* @throws \Dotenv\Exception\InvalidPathException|\Dotenv\Exception\InvalidEncodingException|\Dotenv\Exception\InvalidFileException
|
|
217
|
+
*
|
|
218
|
+
* @return array<string, string|null>
|
|
219
|
+
*/
|
|
220
|
+
public function load()
|
|
221
|
+
{
|
|
222
|
+
$entries = $this->parser->parse($this->store->read());
|
|
223
|
+
|
|
224
|
+
return $this->loader->load($this->repository, $entries);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Read and load environment file(s), silently failing if no files can be read.
|
|
229
|
+
*
|
|
230
|
+
* @throws \Dotenv\Exception\InvalidEncodingException|\Dotenv\Exception\InvalidFileException
|
|
231
|
+
*
|
|
232
|
+
* @return array<string, string|null>
|
|
233
|
+
*/
|
|
234
|
+
public function safeLoad()
|
|
235
|
+
{
|
|
236
|
+
try {
|
|
237
|
+
return $this->load();
|
|
238
|
+
} catch (InvalidPathException $e) {
|
|
239
|
+
// suppressing exception
|
|
240
|
+
return [];
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Required ensures that the specified variables exist, and returns a new validator object.
|
|
246
|
+
*
|
|
247
|
+
* @param string|string[] $variables
|
|
248
|
+
*
|
|
249
|
+
* @return \Dotenv\Validator
|
|
250
|
+
*/
|
|
251
|
+
public function required($variables)
|
|
252
|
+
{
|
|
253
|
+
return (new Validator($this->repository, (array) $variables))->required();
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Returns a new validator object that won't check if the specified variables exist.
|
|
258
|
+
*
|
|
259
|
+
* @param string|string[] $variables
|
|
260
|
+
*
|
|
261
|
+
* @return \Dotenv\Validator
|
|
262
|
+
*/
|
|
263
|
+
public function ifPresent($variables)
|
|
264
|
+
{
|
|
265
|
+
return new Validator($this->repository, (array) $variables);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
declare(strict_types=1);
|
|
4
|
+
|
|
5
|
+
namespace Dotenv\Loader;
|
|
6
|
+
|
|
7
|
+
use Dotenv\Parser\Entry;
|
|
8
|
+
use Dotenv\Parser\Value;
|
|
9
|
+
use Dotenv\Repository\RepositoryInterface;
|
|
10
|
+
|
|
11
|
+
final class Loader implements LoaderInterface
|
|
12
|
+
{
|
|
13
|
+
/**
|
|
14
|
+
* Load the given entries into the repository.
|
|
15
|
+
*
|
|
16
|
+
* We'll substitute any nested variables, and send each variable to the
|
|
17
|
+
* repository, with the effect of actually mutating the environment.
|
|
18
|
+
*
|
|
19
|
+
* @param \Dotenv\Repository\RepositoryInterface $repository
|
|
20
|
+
* @param \Dotenv\Parser\Entry[] $entries
|
|
21
|
+
*
|
|
22
|
+
* @return array<string, string|null>
|
|
23
|
+
*/
|
|
24
|
+
public function load(RepositoryInterface $repository, array $entries)
|
|
25
|
+
{
|
|
26
|
+
/** @var array<string, string|null> */
|
|
27
|
+
return \array_reduce($entries, static function (array $vars, Entry $entry) use ($repository) {
|
|
28
|
+
$name = $entry->getName();
|
|
29
|
+
|
|
30
|
+
$value = $entry->getValue()->map(static function (Value $value) use ($repository) {
|
|
31
|
+
return Resolver::resolve($repository, $value);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
if ($value->isDefined()) {
|
|
35
|
+
$inner = $value->get();
|
|
36
|
+
if ($repository->set($name, $inner)) {
|
|
37
|
+
return \array_merge($vars, [$name => $inner]);
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
if ($repository->clear($name)) {
|
|
41
|
+
return \array_merge($vars, [$name => null]);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return $vars;
|
|
46
|
+
}, []);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
declare(strict_types=1);
|
|
4
|
+
|
|
5
|
+
namespace Dotenv\Loader;
|
|
6
|
+
|
|
7
|
+
use Dotenv\Repository\RepositoryInterface;
|
|
8
|
+
|
|
9
|
+
interface LoaderInterface
|
|
10
|
+
{
|
|
11
|
+
/**
|
|
12
|
+
* Load the given entries into the repository.
|
|
13
|
+
*
|
|
14
|
+
* @param \Dotenv\Repository\RepositoryInterface $repository
|
|
15
|
+
* @param \Dotenv\Parser\Entry[] $entries
|
|
16
|
+
*
|
|
17
|
+
* @return array<string, string|null>
|
|
18
|
+
*/
|
|
19
|
+
public function load(RepositoryInterface $repository, array $entries);
|
|
20
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
declare(strict_types=1);
|
|
4
|
+
|
|
5
|
+
namespace Dotenv\Loader;
|
|
6
|
+
|
|
7
|
+
use Dotenv\Parser\Value;
|
|
8
|
+
use Dotenv\Repository\RepositoryInterface;
|
|
9
|
+
use Dotenv\Util\Regex;
|
|
10
|
+
use Dotenv\Util\Str;
|
|
11
|
+
use PhpOption\Option;
|
|
12
|
+
|
|
13
|
+
final class Resolver
|
|
14
|
+
{
|
|
15
|
+
/**
|
|
16
|
+
* This class is a singleton.
|
|
17
|
+
*
|
|
18
|
+
* @codeCoverageIgnore
|
|
19
|
+
*
|
|
20
|
+
* @return void
|
|
21
|
+
*/
|
|
22
|
+
private function __construct()
|
|
23
|
+
{
|
|
24
|
+
//
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the nested variables in the given value.
|
|
29
|
+
*
|
|
30
|
+
* Replaces ${varname} patterns in the allowed positions in the variable
|
|
31
|
+
* value by an existing environment variable.
|
|
32
|
+
*
|
|
33
|
+
* @param \Dotenv\Repository\RepositoryInterface $repository
|
|
34
|
+
* @param \Dotenv\Parser\Value $value
|
|
35
|
+
*
|
|
36
|
+
* @return string
|
|
37
|
+
*/
|
|
38
|
+
public static function resolve(RepositoryInterface $repository, Value $value)
|
|
39
|
+
{
|
|
40
|
+
return \array_reduce($value->getVars(), static function (string $s, int $i) use ($repository) {
|
|
41
|
+
return Str::substr($s, 0, $i).self::resolveVariable($repository, Str::substr($s, $i));
|
|
42
|
+
}, $value->getChars());
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Resolve a single nested variable.
|
|
47
|
+
*
|
|
48
|
+
* @param \Dotenv\Repository\RepositoryInterface $repository
|
|
49
|
+
* @param string $str
|
|
50
|
+
*
|
|
51
|
+
* @return string
|
|
52
|
+
*/
|
|
53
|
+
private static function resolveVariable(RepositoryInterface $repository, string $str)
|
|
54
|
+
{
|
|
55
|
+
return Regex::replaceCallback(
|
|
56
|
+
'/\A\${([a-zA-Z0-9_.]+)}/',
|
|
57
|
+
static function (array $matches) use ($repository) {
|
|
58
|
+
/** @var string */
|
|
59
|
+
return Option::fromValue($repository->get($matches[1]))->getOrElse($matches[0]);
|
|
60
|
+
},
|
|
61
|
+
$str,
|
|
62
|
+
1
|
|
63
|
+
)->success()->getOrElse($str);
|
|
64
|
+
}
|
|
65
|
+
}
|