create-berna-stencil 1.0.8 → 1.0.10
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 +3 -1
- package/.env.example +8 -0
- package/.gitignore +2 -1
- package/README.md +1 -5
- package/bin/create.js +2 -1
- package/package.json +71 -70
- package/src/.htaccess +18 -0
- package/src/api/.htaccess +12 -0
- package/src/api/composer.json +6 -0
- package/src/api/composer.lock +574 -0
- package/src/api/endpoints/protected/secret.php +16 -0
- package/src/api/endpoints/protected/send-mail.php +75 -0
- package/src/api/endpoints/public/ping.php +16 -0
- package/src/api/index.php +95 -0
- package/src/api/init.php +43 -0
- package/src/api/modules/Response.php +37 -0
- package/src/api/vendor/autoload.php +22 -0
- package/src/api/vendor/composer/ClassLoader.php +579 -0
- package/src/api/vendor/composer/InstalledVersions.php +396 -0
- package/src/api/vendor/composer/LICENSE +21 -0
- package/src/api/vendor/composer/autoload_classmap.php +15 -0
- package/src/api/vendor/composer/autoload_files.php +12 -0
- package/src/api/vendor/composer/autoload_namespaces.php +9 -0
- package/src/api/vendor/composer/autoload_psr4.php +16 -0
- package/src/api/vendor/composer/autoload_real.php +50 -0
- package/src/api/vendor/composer/autoload_static.php +86 -0
- package/src/api/vendor/composer/installed.json +582 -0
- package/src/api/vendor/composer/installed.php +86 -0
- package/src/api/vendor/composer/platform_check.php +25 -0
- package/src/api/vendor/graham-campbell/result-type/.gitattributes +9 -0
- package/src/api/vendor/graham-campbell/result-type/.github/CODE_OF_CONDUCT.md +132 -0
- package/src/api/vendor/graham-campbell/result-type/.github/CONTRIBUTING.md +31 -0
- package/src/api/vendor/graham-campbell/result-type/.github/FUNDING.yml +2 -0
- package/src/api/vendor/graham-campbell/result-type/.github/SECURITY.md +14 -0
- package/src/api/vendor/graham-campbell/result-type/.github/workflows/stale.yml +11 -0
- package/src/api/vendor/graham-campbell/result-type/.github/workflows/tests.yml +40 -0
- package/src/api/vendor/graham-campbell/result-type/CHANGELOG.md +53 -0
- package/src/api/vendor/graham-campbell/result-type/LICENSE +21 -0
- package/src/api/vendor/graham-campbell/result-type/README.md +42 -0
- package/src/api/vendor/graham-campbell/result-type/composer.json +33 -0
- package/src/api/vendor/graham-campbell/result-type/phpunit.xml.dist +13 -0
- package/src/api/vendor/graham-campbell/result-type/src/Error.php +121 -0
- package/src/api/vendor/graham-campbell/result-type/src/Result.php +69 -0
- package/src/api/vendor/graham-campbell/result-type/src/Success.php +120 -0
- package/src/api/vendor/graham-campbell/result-type/tests/ResultTest.php +95 -0
- package/src/api/vendor/phpmailer/phpmailer/.codecov.yml +21 -0
- package/src/api/vendor/phpmailer/phpmailer/.editorconfig +15 -0
- package/src/api/vendor/phpmailer/phpmailer/.gitattributes +17 -0
- package/src/api/vendor/phpmailer/phpmailer/.github/FUNDING.yml +6 -0
- package/src/api/vendor/phpmailer/phpmailer/.github/ISSUE_TEMPLATE/bug_report.md +23 -0
- package/src/api/vendor/phpmailer/phpmailer/.github/actions/build-docs/Dockerfile +15 -0
- package/src/api/vendor/phpmailer/phpmailer/.github/actions/build-docs/entrypoint.sh +5 -0
- package/src/api/vendor/phpmailer/phpmailer/.github/dependabot.yml +21 -0
- package/src/api/vendor/phpmailer/phpmailer/.github/workflows/docs.yaml +30 -0
- package/src/api/vendor/phpmailer/phpmailer/.github/workflows/scorecards.yml +61 -0
- package/src/api/vendor/phpmailer/phpmailer/.github/workflows/tests.yml +237 -0
- package/src/api/vendor/phpmailer/phpmailer/.phan/config.php +41 -0
- package/src/api/vendor/phpmailer/phpmailer/COMMITMENT +46 -0
- package/src/api/vendor/phpmailer/phpmailer/LICENSE +502 -0
- package/src/api/vendor/phpmailer/phpmailer/README.md +232 -0
- package/src/api/vendor/phpmailer/phpmailer/SECURITY.md +37 -0
- package/src/api/vendor/phpmailer/phpmailer/SMTPUTF8.md +48 -0
- package/src/api/vendor/phpmailer/phpmailer/UPGRADING.md +125 -0
- package/src/api/vendor/phpmailer/phpmailer/VERSION +1 -0
- package/src/api/vendor/phpmailer/phpmailer/changelog.md +1122 -0
- package/src/api/vendor/phpmailer/phpmailer/composer.json +84 -0
- package/src/api/vendor/phpmailer/phpmailer/docs/README.md +9 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/DKIM_gen_keys.phps +81 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/DKIM_sign.phps +46 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/README.md +96 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/azure_xoauth2.phps +126 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/callback.phps +76 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/contactform-ajax.phps +146 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/contactform.phps +95 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/contents.html +17 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/contentsutf8.html +23 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/exceptions.phps +40 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/extending.phps +72 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/gmail.phps +106 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps +121 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/images/PHPMailer card logo.afdesign +0 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/images/PHPMailer card logo.png +0 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/images/PHPMailer card logo.svg +209 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/images/phpmailer.png +0 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/images/phpmailer_mini.png +0 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/mail.phps +35 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/mailing_list.phps +96 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps +60 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/send_file_upload.phps +60 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/send_multiple_file_upload.phps +60 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/sendmail.phps +37 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/sendoauth2.phps +100 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/simple_contact_form.phps +102 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/smime_signed_mail.phps +99 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/smtp.phps +62 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/smtp_check.phps +60 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/smtp_low_memory.phps +117 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/smtp_no_auth.phps +53 -0
- package/src/api/vendor/phpmailer/phpmailer/examples/ssl_options.phps +81 -0
- package/src/api/vendor/phpmailer/phpmailer/get_oauth_token.php +182 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php +26 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-ar.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-as.php +35 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-ba.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-bn.php +35 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php +28 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php +39 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php +28 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php +33 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-eo.php +37 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php +38 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php +28 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php +28 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-fo.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php +36 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-gl.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php +35 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-hy.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php +31 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php +28 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php +37 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-ku.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-mg.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-mn.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php +37 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php +38 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php +33 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt.php +34 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php +38 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php +33 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php +36 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-si.php +34 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php +30 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php +36 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr.php +28 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr_latn.php +28 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-tl.php +28 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php +38 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-uk.php +28 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-ur.php +30 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php +27 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php +29 -0
- package/src/api/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php +36 -0
- package/src/api/vendor/phpmailer/phpmailer/phpcs.xml.dist +52 -0
- package/src/api/vendor/phpmailer/phpmailer/phpdoc.dist.xml +20 -0
- package/src/api/vendor/phpmailer/phpmailer/phpunit.xml.dist +36 -0
- package/src/api/vendor/phpmailer/phpmailer/src/DSNConfigurator.php +245 -0
- package/src/api/vendor/phpmailer/phpmailer/src/Exception.php +40 -0
- package/src/api/vendor/phpmailer/phpmailer/src/OAuth.php +139 -0
- package/src/api/vendor/phpmailer/phpmailer/src/OAuthTokenProvider.php +44 -0
- package/src/api/vendor/phpmailer/phpmailer/src/PHPMailer.php +5525 -0
- package/src/api/vendor/phpmailer/phpmailer/src/POP3.php +470 -0
- package/src/api/vendor/phpmailer/phpmailer/src/SMTP.php +1617 -0
- package/src/api/vendor/phpmailer/phpmailer/test/DebugLogTestListener.php +47 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/FileIsAccessibleTest/accessible.txt +1 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/FileIsAccessibleTest/inaccessible.txt +1 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/LocalizationTest/phpmailer.lang-fr.php +10 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/LocalizationTest/phpmailer.lang-nl.php +10 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/LocalizationTest/phpmailer.lang-xa_scri_cc.php +9 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/LocalizationTest/phpmailer.lang-xb_scri.php +9 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/LocalizationTest/phpmailer.lang-xc_cc.php +9 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/LocalizationTest/phpmailer.lang-xd_cc.php +9 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/LocalizationTest/phpmailer.lang-xd_scri.php +9 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/LocalizationTest/phpmailer.lang-xe.php +9 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/LocalizationTest/phpmailer.lang-xx.php +9 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/LocalizationTest/phpmailer.lang-yy.php +16 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/LocalizationTest/phpmailer.lang-yz.php +16 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Fixtures/LocalizationTest/phpmailer.lang-zz.php +20 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Language/TranslationCompletenessTest.php +97 -0
- package/src/api/vendor/phpmailer/phpmailer/test/OAuth/OAuthTest.php +76 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/AddEmbeddedImageTest.php +178 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/AddStringAttachmentTest.php +147 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/AddStringEmbeddedImageTest.php +161 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/AddrFormatTest.php +70 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/AuthCRAMMD5Test.php +48 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/CustomHeaderTest.php +285 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/DKIMTest.php +258 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/DKIMWithoutExceptionsTest.php +46 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/DSNConfiguratorTest.php +221 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/EncodeQTest.php +110 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/EncodeStringTest.php +135 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/FileIsAccessibleTest.php +103 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/FilenameToTypeTest.php +74 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/GenerateIdTest.php +75 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/GetLastMessageIDTest.php +110 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/HasLineLongerThanMaxTest.php +158 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/Html2TextTest.php +231 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/ICalTest.php +126 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/IsPermittedPathTest.php +108 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/IsValidHostTest.php +107 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/LocalizationTest.php +505 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/MailTransportTest.php +261 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/MbPathinfoTest.php +171 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/MimeTypesTest.php +70 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/NormalizeBreaksTest.php +111 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/PHPMailerTest.php +1388 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/ParseAddressesTest.php +321 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/PunyencodeAddressTest.php +141 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/QuotedStringTest.php +70 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/ReplyToGetSetClearTest.php +444 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/SetErrorTest.php +154 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/SetFromTest.php +202 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/SetTest.php +81 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/SetWordWrapTest.php +120 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/Utf8CharBoundaryTest.php +66 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/ValidateAddressCustomValidatorTest.php +116 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/ValidateAddressTest.php +485 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/WrapTextTest.php +125 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PHPMailer/XMailerTest.php +75 -0
- package/src/api/vendor/phpmailer/phpmailer/test/POP3/PopBeforeSmtpTest.php +139 -0
- package/src/api/vendor/phpmailer/phpmailer/test/PreSendTestCase.php +46 -0
- package/src/api/vendor/phpmailer/phpmailer/test/Security/DenialOfServiceVectorsTest.php +52 -0
- package/src/api/vendor/phpmailer/phpmailer/test/SendTestCase.php +126 -0
- package/src/api/vendor/phpmailer/phpmailer/test/TestCase.php +392 -0
- package/src/api/vendor/phpmailer/phpmailer/test/fakepopserver.sh +126 -0
- package/src/api/vendor/phpmailer/phpmailer/test/fakesendmail.sh +22 -0
- package/src/api/vendor/phpmailer/phpmailer/test/runfakepopserver.sh +12 -0
- package/src/api/vendor/phpmailer/phpmailer/test/testbootstrap-dist.php +8 -0
- package/src/api/vendor/phpmailer/phpmailer/test/validators.php +12 -0
- package/src/api/vendor/phpoption/phpoption/.gitattributes +13 -0
- package/src/api/vendor/phpoption/phpoption/.github/CODE_OF_CONDUCT.md +132 -0
- package/src/api/vendor/phpoption/phpoption/.github/CONTRIBUTING.md +30 -0
- package/src/api/vendor/phpoption/phpoption/.github/FUNDING.yml +2 -0
- package/src/api/vendor/phpoption/phpoption/.github/SECURITY.md +14 -0
- package/src/api/vendor/phpoption/phpoption/.github/workflows/static.yml +40 -0
- package/src/api/vendor/phpoption/phpoption/.github/workflows/tests.yml +40 -0
- package/src/api/vendor/phpoption/phpoption/LICENSE +201 -0
- package/src/api/vendor/phpoption/phpoption/Makefile +17 -0
- package/src/api/vendor/phpoption/phpoption/README.md +201 -0
- package/src/api/vendor/phpoption/phpoption/composer.json +50 -0
- package/src/api/vendor/phpoption/phpoption/phpstan-baseline.neon +44 -0
- package/src/api/vendor/phpoption/phpoption/phpstan.neon.dist +7 -0
- package/src/api/vendor/phpoption/phpoption/phpunit.xml.dist +13 -0
- package/src/api/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php +175 -0
- package/src/api/vendor/phpoption/phpoption/src/PhpOption/None.php +136 -0
- package/src/api/vendor/phpoption/phpoption/src/PhpOption/Option.php +434 -0
- package/src/api/vendor/phpoption/phpoption/src/PhpOption/Some.php +169 -0
- package/src/api/vendor/phpoption/phpoption/tests/PhpOption/Tests/EnsureTest.php +72 -0
- package/src/api/vendor/phpoption/phpoption/tests/PhpOption/Tests/LazyOptionTest.php +357 -0
- package/src/api/vendor/phpoption/phpoption/tests/PhpOption/Tests/NoneTest.php +153 -0
- package/src/api/vendor/phpoption/phpoption/tests/PhpOption/Tests/OptionTest.php +166 -0
- package/src/api/vendor/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php +194 -0
- package/src/api/vendor/phpoption/phpoption/tests/bootstrap.php +8 -0
- package/src/api/vendor/phpoption/phpoption/vendor-bin/phpstan/composer.json +8 -0
- package/src/api/vendor/symfony/polyfill-ctype/Ctype.php +232 -0
- package/src/api/vendor/symfony/polyfill-ctype/LICENSE +19 -0
- package/src/api/vendor/symfony/polyfill-ctype/README.md +12 -0
- package/src/api/vendor/symfony/polyfill-ctype/bootstrap.php +50 -0
- package/src/api/vendor/symfony/polyfill-ctype/bootstrap80.php +46 -0
- package/src/api/vendor/symfony/polyfill-ctype/composer.json +38 -0
- package/src/api/vendor/symfony/polyfill-mbstring/LICENSE +19 -0
- package/src/api/vendor/symfony/polyfill-mbstring/Mbstring.php +1077 -0
- package/src/api/vendor/symfony/polyfill-mbstring/README.md +13 -0
- package/src/api/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +119 -0
- package/src/api/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1397 -0
- package/src/api/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +5 -0
- package/src/api/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +1489 -0
- package/src/api/vendor/symfony/polyfill-mbstring/bootstrap.php +171 -0
- package/src/api/vendor/symfony/polyfill-mbstring/bootstrap80.php +167 -0
- package/src/api/vendor/symfony/polyfill-mbstring/composer.json +39 -0
- package/src/api/vendor/symfony/polyfill-php80/LICENSE +19 -0
- package/src/api/vendor/symfony/polyfill-php80/Php80.php +115 -0
- package/src/api/vendor/symfony/polyfill-php80/PhpToken.php +106 -0
- package/src/api/vendor/symfony/polyfill-php80/README.md +25 -0
- package/src/api/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +31 -0
- package/src/api/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +16 -0
- package/src/api/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +20 -0
- package/src/api/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +16 -0
- package/src/api/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +16 -0
- package/src/api/vendor/symfony/polyfill-php80/bootstrap.php +42 -0
- package/src/api/vendor/symfony/polyfill-php80/composer.json +37 -0
- package/src/api/vendor/vlucas/phpdotenv/.editorconfig +15 -0
- package/src/api/vendor/vlucas/phpdotenv/.gitattributes +15 -0
- package/src/api/vendor/vlucas/phpdotenv/.github/CODE_OF_CONDUCT.md +132 -0
- package/src/api/vendor/vlucas/phpdotenv/.github/CONTRIBUTING.md +30 -0
- package/src/api/vendor/vlucas/phpdotenv/.github/FUNDING.yml +2 -0
- package/src/api/vendor/vlucas/phpdotenv/.github/SECURITY.md +14 -0
- package/src/api/vendor/vlucas/phpdotenv/.github/workflows/static.yml +40 -0
- package/src/api/vendor/vlucas/phpdotenv/.github/workflows/tests.yml +70 -0
- package/src/api/vendor/vlucas/phpdotenv/LICENSE +30 -0
- package/src/api/vendor/vlucas/phpdotenv/Makefile +17 -0
- package/src/api/vendor/vlucas/phpdotenv/README.md +370 -0
- package/src/api/vendor/vlucas/phpdotenv/UPGRADING.md +196 -0
- package/src/api/vendor/vlucas/phpdotenv/composer.json +60 -0
- package/src/api/vendor/vlucas/phpdotenv/phpstan-baseline.neon +157 -0
- package/src/api/vendor/vlucas/phpdotenv/phpstan.neon.dist +7 -0
- package/src/api/vendor/vlucas/phpdotenv/phpunit.xml.dist +13 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Dotenv.php +267 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php +12 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php +12 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Exception/InvalidFileException.php +12 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Exception/InvalidPathException.php +12 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Exception/ValidationException.php +12 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Loader/Loader.php +48 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php +20 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Loader/Resolver.php +65 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Parser/Entry.php +59 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Parser/EntryParser.php +299 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Parser/Lexer.php +58 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Parser/Lines.php +127 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Parser/Parser.php +53 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Parser/ParserInterface.php +19 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Parser/Value.php +88 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php +15 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php +89 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php +80 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php +88 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php +85 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php +110 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php +48 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php +64 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php +91 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php +17 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php +104 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php +88 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php +27 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php +107 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php +272 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php +51 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Store/File/Paths.php +44 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Store/File/Reader.php +81 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Store/FileStore.php +72 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php +141 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php +17 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Store/StringStore.php +37 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Util/Regex.php +112 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Util/Str.php +108 -0
- package/src/api/vendor/vlucas/phpdotenv/src/Validator.php +207 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/Dotenv/DotenvTest.php +387 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/Dotenv/Loader/LoaderTest.php +86 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/EntryParserTest.php +234 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LexerTest.php +40 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LinesTest.php +53 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/ParserTest.php +98 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ArrayAdapterTest.php +57 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/EnvConstAdapterTest.php +75 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/PutenvAdapterTest.php +52 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ServerConstAdapterTest.php +75 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/RepositoryTest.php +305 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/Dotenv/Store/StoreTest.php +141 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/Dotenv/ValidatorTest.php +479 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/.env +5 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/assertions.env +18 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/booleans.env +33 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/commented.env +15 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/empty.env +1 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/example.env +1 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/exported.env +7 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/immutable.env +1 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/integers.env +17 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/large.env +2 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/multibyte.env +3 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/multiline.env +14 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/multiple.env +4 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/mutable.env +1 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/nested.env +15 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/quoted.env +11 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/specialchars.env +8 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/unicodevarnames.env +2 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/utf8-with-bom-encoding.env +3 -0
- package/src/api/vendor/vlucas/phpdotenv/tests/fixtures/env/windows.env +1 -0
- package/src/api/vendor/vlucas/phpdotenv/vendor-bin/phpstan/composer.json +15 -0
- package/src/api/configExample.php +0 -28
- package/src/api/sendEmail.php +0 -131
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
declare(strict_types=1);
|
|
4
|
+
|
|
5
|
+
namespace Dotenv\Parser;
|
|
6
|
+
|
|
7
|
+
use PhpOption\Option;
|
|
8
|
+
|
|
9
|
+
final class Entry
|
|
10
|
+
{
|
|
11
|
+
/**
|
|
12
|
+
* The entry name.
|
|
13
|
+
*
|
|
14
|
+
* @var string
|
|
15
|
+
*/
|
|
16
|
+
private $name;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The entry value.
|
|
20
|
+
*
|
|
21
|
+
* @var \Dotenv\Parser\Value|null
|
|
22
|
+
*/
|
|
23
|
+
private $value;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Create a new entry instance.
|
|
27
|
+
*
|
|
28
|
+
* @param string $name
|
|
29
|
+
* @param \Dotenv\Parser\Value|null $value
|
|
30
|
+
*
|
|
31
|
+
* @return void
|
|
32
|
+
*/
|
|
33
|
+
public function __construct(string $name, ?Value $value = null)
|
|
34
|
+
{
|
|
35
|
+
$this->name = $name;
|
|
36
|
+
$this->value = $value;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Get the entry name.
|
|
41
|
+
*
|
|
42
|
+
* @return string
|
|
43
|
+
*/
|
|
44
|
+
public function getName()
|
|
45
|
+
{
|
|
46
|
+
return $this->name;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Get the entry value.
|
|
51
|
+
*
|
|
52
|
+
* @return \PhpOption\Option<\Dotenv\Parser\Value>
|
|
53
|
+
*/
|
|
54
|
+
public function getValue()
|
|
55
|
+
{
|
|
56
|
+
/** @var \PhpOption\Option<\Dotenv\Parser\Value> */
|
|
57
|
+
return Option::fromValue($this->value);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,299 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +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
|
+
}
|
|
@@ -0,0 +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
|
+
}
|
|
@@ -0,0 +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
|
+
}
|
|
@@ -0,0 +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
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
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
|
+
}
|