create-berna-stencil 2.6.2 → 2.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/index.js +3 -0
  2. package/package.json +5 -28
  3. package/.eleventy.js +0 -94
  4. package/.eleventyignore +0 -4
  5. package/LICENSE +0 -170
  6. package/NOTICE +0 -5
  7. package/README.md +0 -53
  8. package/_tools/assistant.js +0 -150
  9. package/_tools/buildJs.js +0 -28
  10. package/_tools/cleanOutput.js +0 -20
  11. package/_tools/modules/constants.js +0 -23
  12. package/_tools/modules/pageComponents.js +0 -77
  13. package/_tools/modules/updateData.js +0 -84
  14. package/_tools/modules/updateOutputPath.js +0 -112
  15. package/_tools/modules/updatePage.js +0 -162
  16. package/_tools/modules/utils.js +0 -27
  17. package/_tools/modules/validation.js +0 -20
  18. package/_tools/res/templates/template.js +0 -5
  19. package/_tools/res/templates/template.njk +0 -9
  20. package/_tools/res/templates/template.scss +0 -23
  21. package/_tools/res/templates/template.ts +0 -5
  22. package/bin/create.js +0 -429
  23. package/docs/Assistant CLI.md +0 -61
  24. package/docs/Backend.md +0 -148
  25. package/docs/Components.md +0 -96
  26. package/docs/Creating pages.md +0 -65
  27. package/docs/Deploy.md +0 -55
  28. package/docs/Head and SEO.md +0 -94
  29. package/docs/Javascript.md +0 -53
  30. package/docs/Styling with SCSS.md +0 -140
  31. package/nginx.conf +0 -69
  32. package/out/.htaccess +0 -16
  33. package/out/404.html +0 -163
  34. package/out/assets/brand/favicon.svg +0 -37
  35. package/out/assets/brand/logo.svg +0 -37
  36. package/out/backend/.htaccess +0 -7
  37. package/out/backend/_core/composer.json +0 -5
  38. package/out/backend/_core/composer.lock +0 -492
  39. package/out/backend/_core/index.php +0 -148
  40. package/out/backend/_core/init.php +0 -34
  41. package/out/backend/_core/modules/RateLimiter.php +0 -31
  42. package/out/backend/_core/modules/Response.php +0 -49
  43. package/out/backend/_core/vendor/autoload.php +0 -22
  44. package/out/backend/_core/vendor/composer/ClassLoader.php +0 -579
  45. package/out/backend/_core/vendor/composer/InstalledVersions.php +0 -396
  46. package/out/backend/_core/vendor/composer/LICENSE +0 -21
  47. package/out/backend/_core/vendor/composer/autoload_classmap.php +0 -15
  48. package/out/backend/_core/vendor/composer/autoload_files.php +0 -12
  49. package/out/backend/_core/vendor/composer/autoload_namespaces.php +0 -9
  50. package/out/backend/_core/vendor/composer/autoload_psr4.php +0 -15
  51. package/out/backend/_core/vendor/composer/autoload_real.php +0 -50
  52. package/out/backend/_core/vendor/composer/autoload_static.php +0 -81
  53. package/out/backend/_core/vendor/composer/installed.json +0 -497
  54. package/out/backend/_core/vendor/composer/installed.php +0 -77
  55. package/out/backend/_core/vendor/composer/platform_check.php +0 -25
  56. package/out/backend/_core/vendor/graham-campbell/result-type/CHANGELOG.md +0 -53
  57. package/out/backend/_core/vendor/graham-campbell/result-type/LICENSE +0 -21
  58. package/out/backend/_core/vendor/graham-campbell/result-type/README.md +0 -42
  59. package/out/backend/_core/vendor/graham-campbell/result-type/composer.json +0 -33
  60. package/out/backend/_core/vendor/graham-campbell/result-type/phpunit.xml.dist +0 -13
  61. package/out/backend/_core/vendor/graham-campbell/result-type/src/Error.php +0 -121
  62. package/out/backend/_core/vendor/graham-campbell/result-type/src/Result.php +0 -69
  63. package/out/backend/_core/vendor/graham-campbell/result-type/src/Success.php +0 -120
  64. package/out/backend/_core/vendor/graham-campbell/result-type/tests/ResultTest.php +0 -95
  65. package/out/backend/_core/vendor/phpoption/phpoption/LICENSE +0 -201
  66. package/out/backend/_core/vendor/phpoption/phpoption/Makefile +0 -17
  67. package/out/backend/_core/vendor/phpoption/phpoption/README.md +0 -201
  68. package/out/backend/_core/vendor/phpoption/phpoption/composer.json +0 -50
  69. package/out/backend/_core/vendor/phpoption/phpoption/phpstan-baseline.neon +0 -44
  70. package/out/backend/_core/vendor/phpoption/phpoption/phpstan.neon.dist +0 -7
  71. package/out/backend/_core/vendor/phpoption/phpoption/phpunit.xml.dist +0 -13
  72. package/out/backend/_core/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php +0 -175
  73. package/out/backend/_core/vendor/phpoption/phpoption/src/PhpOption/None.php +0 -136
  74. package/out/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Option.php +0 -434
  75. package/out/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Some.php +0 -169
  76. package/out/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/EnsureTest.php +0 -72
  77. package/out/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/LazyOptionTest.php +0 -357
  78. package/out/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/NoneTest.php +0 -153
  79. package/out/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/OptionTest.php +0 -166
  80. package/out/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php +0 -194
  81. package/out/backend/_core/vendor/phpoption/phpoption/tests/bootstrap.php +0 -8
  82. package/out/backend/_core/vendor/phpoption/phpoption/vendor-bin/phpstan/composer.json +0 -8
  83. package/out/backend/_core/vendor/symfony/polyfill-ctype/Ctype.php +0 -232
  84. package/out/backend/_core/vendor/symfony/polyfill-ctype/LICENSE +0 -19
  85. package/out/backend/_core/vendor/symfony/polyfill-ctype/README.md +0 -12
  86. package/out/backend/_core/vendor/symfony/polyfill-ctype/bootstrap.php +0 -50
  87. package/out/backend/_core/vendor/symfony/polyfill-ctype/bootstrap80.php +0 -46
  88. package/out/backend/_core/vendor/symfony/polyfill-ctype/composer.json +0 -38
  89. package/out/backend/_core/vendor/symfony/polyfill-mbstring/LICENSE +0 -19
  90. package/out/backend/_core/vendor/symfony/polyfill-mbstring/Mbstring.php +0 -1077
  91. package/out/backend/_core/vendor/symfony/polyfill-mbstring/README.md +0 -13
  92. package/out/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +0 -119
  93. package/out/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +0 -1397
  94. package/out/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +0 -5
  95. package/out/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +0 -1489
  96. package/out/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap.php +0 -171
  97. package/out/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap80.php +0 -167
  98. package/out/backend/_core/vendor/symfony/polyfill-mbstring/composer.json +0 -39
  99. package/out/backend/_core/vendor/symfony/polyfill-php80/LICENSE +0 -19
  100. package/out/backend/_core/vendor/symfony/polyfill-php80/Php80.php +0 -115
  101. package/out/backend/_core/vendor/symfony/polyfill-php80/PhpToken.php +0 -106
  102. package/out/backend/_core/vendor/symfony/polyfill-php80/README.md +0 -25
  103. package/out/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +0 -31
  104. package/out/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +0 -16
  105. package/out/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +0 -20
  106. package/out/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +0 -16
  107. package/out/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +0 -16
  108. package/out/backend/_core/vendor/symfony/polyfill-php80/bootstrap.php +0 -42
  109. package/out/backend/_core/vendor/symfony/polyfill-php80/composer.json +0 -37
  110. package/out/backend/_core/vendor/vlucas/phpdotenv/.editorconfig +0 -15
  111. package/out/backend/_core/vendor/vlucas/phpdotenv/LICENSE +0 -30
  112. package/out/backend/_core/vendor/vlucas/phpdotenv/Makefile +0 -17
  113. package/out/backend/_core/vendor/vlucas/phpdotenv/README.md +0 -370
  114. package/out/backend/_core/vendor/vlucas/phpdotenv/UPGRADING.md +0 -196
  115. package/out/backend/_core/vendor/vlucas/phpdotenv/composer.json +0 -60
  116. package/out/backend/_core/vendor/vlucas/phpdotenv/phpstan-baseline.neon +0 -157
  117. package/out/backend/_core/vendor/vlucas/phpdotenv/phpstan.neon.dist +0 -7
  118. package/out/backend/_core/vendor/vlucas/phpdotenv/phpunit.xml.dist +0 -13
  119. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Dotenv.php +0 -267
  120. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php +0 -12
  121. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php +0 -12
  122. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidFileException.php +0 -12
  123. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidPathException.php +0 -12
  124. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ValidationException.php +0 -12
  125. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Loader.php +0 -48
  126. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php +0 -20
  127. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Resolver.php +0 -65
  128. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Entry.php +0 -59
  129. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/EntryParser.php +0 -299
  130. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lexer.php +0 -58
  131. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lines.php +0 -127
  132. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Parser.php +0 -53
  133. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/ParserInterface.php +0 -19
  134. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Value.php +0 -88
  135. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php +0 -15
  136. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php +0 -89
  137. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php +0 -80
  138. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php +0 -88
  139. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php +0 -85
  140. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php +0 -110
  141. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php +0 -48
  142. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php +0 -64
  143. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php +0 -91
  144. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php +0 -17
  145. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php +0 -104
  146. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php +0 -88
  147. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php +0 -27
  148. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php +0 -107
  149. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php +0 -272
  150. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php +0 -51
  151. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Paths.php +0 -44
  152. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Reader.php +0 -81
  153. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Store/FileStore.php +0 -72
  154. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php +0 -141
  155. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php +0 -17
  156. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Store/StringStore.php +0 -37
  157. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Util/Regex.php +0 -112
  158. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Util/Str.php +0 -108
  159. package/out/backend/_core/vendor/vlucas/phpdotenv/src/Validator.php +0 -207
  160. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/DotenvTest.php +0 -387
  161. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Loader/LoaderTest.php +0 -86
  162. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/EntryParserTest.php +0 -234
  163. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LexerTest.php +0 -40
  164. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LinesTest.php +0 -53
  165. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/ParserTest.php +0 -98
  166. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ArrayAdapterTest.php +0 -57
  167. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/EnvConstAdapterTest.php +0 -75
  168. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/PutenvAdapterTest.php +0 -52
  169. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ServerConstAdapterTest.php +0 -75
  170. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/RepositoryTest.php +0 -305
  171. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Store/StoreTest.php +0 -141
  172. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/ValidatorTest.php +0 -479
  173. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/.env +0 -5
  174. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/assertions.env +0 -18
  175. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/booleans.env +0 -33
  176. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/commented.env +0 -15
  177. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/empty.env +0 -1
  178. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/example.env +0 -1
  179. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/exported.env +0 -7
  180. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/immutable.env +0 -1
  181. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/integers.env +0 -17
  182. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/large.env +0 -2
  183. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multibyte.env +0 -3
  184. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiline.env +0 -14
  185. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiple.env +0 -4
  186. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/mutable.env +0 -1
  187. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/nested.env +0 -15
  188. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/quoted.env +0 -11
  189. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/specialchars.env +0 -8
  190. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/unicodevarnames.env +0 -2
  191. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/utf8-with-bom-encoding.env +0 -3
  192. package/out/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/windows.env +0 -1
  193. package/out/backend/_core/vendor/vlucas/phpdotenv/vendor-bin/phpstan/composer.json +0 -15
  194. package/out/backend/api/protected/example-protected.php +0 -17
  195. package/out/backend/api/public/example-public.php +0 -17
  196. package/out/backend/database/Database.php +0 -24
  197. package/out/backend/database/migrations/create_example_db.sql +0 -1
  198. package/out/backend/web.config +0 -17
  199. package/out/css/fonts/bootstrap-icons.woff +0 -0
  200. package/out/css/fonts/bootstrap-icons.woff2 +0 -0
  201. package/out/css/github-markdown-dark.css +0 -1124
  202. package/out/css/github-markdown-light.css +0 -1124
  203. package/out/css/pages/404.css +0 -21517
  204. package/out/css/pages/homepage.css +0 -21508
  205. package/out/data/site.json +0 -44
  206. package/out/index.html +0 -1147
  207. package/out/js/bootstrap.bundle.min.js +0 -7
  208. package/out/js/pages/js/pages/404.js +0 -6
  209. package/out/js/pages/js/pages/homepage.js +0 -6
  210. package/out/js/pages/ts/pages/404.js +0 -6
  211. package/out/js/pages/ts/pages/homepage.js +0 -6
  212. package/out/llms.txt +0 -14
  213. package/out/robots.txt +0 -4
  214. package/out/sitemap.xml +0 -15
  215. package/out/web.config +0 -27
  216. package/src/backend/.htaccess +0 -7
  217. package/src/backend/_core/composer.json +0 -5
  218. package/src/backend/_core/composer.lock +0 -492
  219. package/src/backend/_core/index.php +0 -148
  220. package/src/backend/_core/init.php +0 -34
  221. package/src/backend/_core/modules/RateLimiter.php +0 -31
  222. package/src/backend/_core/modules/Response.php +0 -49
  223. package/src/backend/api/protected/example-protected.php +0 -17
  224. package/src/backend/api/public/example-public.php +0 -17
  225. package/src/backend/database/Database.php +0 -24
  226. package/src/backend/database/migrations/create_example_db.sql +0 -1
  227. package/src/backend/web.config +0 -17
  228. package/src/frontend/.htaccess +0 -16
  229. package/src/frontend/404.njk +0 -17
  230. package/src/frontend/assets/brand/favicon.svg +0 -37
  231. package/src/frontend/assets/brand/logo.svg +0 -37
  232. package/src/frontend/components/global/footer.njk +0 -27
  233. package/src/frontend/components/global/header.njk +0 -11
  234. package/src/frontend/components/welcome.njk +0 -251
  235. package/src/frontend/data/site.json +0 -44
  236. package/src/frontend/index.njk +0 -9
  237. package/src/frontend/js/modules/exampleModule.js +0 -3
  238. package/src/frontend/js/pages/404.js +0 -7
  239. package/src/frontend/js/pages/homepage.js +0 -7
  240. package/src/frontend/layouts/base.njk +0 -137
  241. package/src/frontend/layouts/pageComponents.njk +0 -14
  242. package/src/frontend/llms.njk +0 -18
  243. package/src/frontend/robots.njk +0 -8
  244. package/src/frontend/scss/modules/_animations.scss +0 -25
  245. package/src/frontend/scss/modules/_buttons.scss +0 -24
  246. package/src/frontend/scss/modules/_footer.scss +0 -32
  247. package/src/frontend/scss/modules/_global.scss +0 -46
  248. package/src/frontend/scss/modules/_header.scss +0 -33
  249. package/src/frontend/scss/modules/_mobile.scss +0 -30
  250. package/src/frontend/scss/modules/_notification.scss +0 -56
  251. package/src/frontend/scss/modules/_root.scss +0 -35
  252. package/src/frontend/scss/modules/_typography.scss +0 -15
  253. package/src/frontend/scss/modules/frameworks/_bootstrap.scss +0 -110
  254. package/src/frontend/scss/modules/frameworks/_bulma.scss +0 -109
  255. package/src/frontend/scss/modules/frameworks/_foundation.scss +0 -139
  256. package/src/frontend/scss/modules/frameworks/_uikit.scss +0 -110
  257. package/src/frontend/scss/pages/404.scss +0 -28
  258. package/src/frontend/scss/pages/homepage.scss +0 -23
  259. package/src/frontend/sitemap.njk +0 -17
  260. package/src/frontend/ts/modules/exampleModule.ts +0 -3
  261. package/src/frontend/ts/pages/404.ts +0 -7
  262. package/src/frontend/ts/pages/homepage.ts +0 -7
  263. package/src/frontend/web.config +0 -27
  264. package/tsconfig.json +0 -25
@@ -1,357 +0,0 @@
1
- <?php
2
-
3
- namespace PhpOption\Tests;
4
-
5
- use PhpOption\LazyOption;
6
- use PhpOption\None;
7
- use PhpOption\Option;
8
- use PhpOption\Some;
9
- use PHPUnit\Framework\TestCase;
10
-
11
- class LazyOptionTest extends TestCase
12
- {
13
- private static function createSubject($default = null): object
14
- {
15
- return new class ($default) {
16
- private $default;
17
-
18
- public function __construct($default)
19
- {
20
- $this->default = $default;
21
- }
22
-
23
- public function execute($v = null): Option
24
- {
25
- return Option::fromValue($v ?? $this->default);
26
- }
27
- };
28
- }
29
-
30
- private static function createInvalidSubject(): object
31
- {
32
- return new class {
33
- public function execute($v = null)
34
- {
35
- return null;
36
- }
37
- };
38
- }
39
-
40
- public function testGetWithArgumentsAndConstructor(): void
41
- {
42
- $some = LazyOption::create([self::createSubject(), 'execute'], ['foo']);
43
-
44
- self::assertSame('foo', $some->get());
45
- self::assertSame('foo', $some->getOrElse(null));
46
- self::assertSame('foo', $some->getOrCall('does_not_exist'));
47
- self::assertSame('foo', $some->getOrThrow(new \RuntimeException('does_not_exist')));
48
- self::assertFalse($some->isEmpty());
49
- }
50
-
51
- public function testGetWithArgumentsAndCreate(): void
52
- {
53
- $some = new LazyOption([self::createSubject(), 'execute'], ['foo']);
54
-
55
- self::assertSame('foo', $some->get());
56
- self::assertSame('foo', $some->getOrElse(null));
57
- self::assertSame('foo', $some->getOrCall('does_not_exist'));
58
- self::assertSame('foo', $some->getOrThrow(new \RuntimeException('does_not_exist')));
59
- self::assertFalse($some->isEmpty());
60
- }
61
-
62
- public function testGetWithoutArgumentsAndConstructor(): void
63
- {
64
- $some = new LazyOption([self::createSubject('foo'), 'execute']);
65
-
66
- self::assertSame('foo', $some->get());
67
- self::assertSame('foo', $some->getOrElse(null));
68
- self::assertSame('foo', $some->getOrCall('does_not_exist'));
69
- self::assertSame('foo', $some->getOrThrow(new \RuntimeException('does_not_exist')));
70
- self::assertFalse($some->isEmpty());
71
- }
72
-
73
- public function testGetWithoutArgumentsAndCreate(): void
74
- {
75
- $option = LazyOption::create([self::createSubject('foo'), 'execute']);
76
-
77
- self::assertTrue($option->isDefined());
78
- self::assertFalse($option->isEmpty());
79
- self::assertSame('foo', $option->get());
80
- self::assertSame('foo', $option->getOrElse(null));
81
- self::assertSame('foo', $option->getOrCall('does_not_exist'));
82
- self::assertSame('foo', $option->getOrThrow(new \RuntimeException('does_not_exist')));
83
- }
84
-
85
- public function testCallbackReturnsNull(): void
86
- {
87
- if (method_exists($this, 'expectException')) {
88
- $this->expectException('RuntimeException');
89
- $this->expectExceptionMessage('None has no value');
90
- } else {
91
- $this->setExpectedException('RuntimeException', 'None has no value');
92
- }
93
-
94
- $option = LazyOption::create([self::createSubject(), 'execute']);
95
-
96
- self::assertFalse($option->isDefined());
97
- self::assertTrue($option->isEmpty());
98
- self::assertSame('alt', $option->getOrElse('alt'));
99
- self::assertSame('alt', $option->getOrCall(function () {
100
- return 'alt';
101
- }));
102
-
103
- $option->get();
104
- }
105
-
106
- public function testExceptionIsThrownIfCallbackReturnsNonOption(): void
107
- {
108
- $option = LazyOption::create([self::createInvalidSubject(), 'execute']);
109
-
110
- if (method_exists($this, 'expectException')) {
111
- $this->expectException('RuntimeException');
112
- $this->expectExceptionMessage('Expected instance of PhpOption\Option');
113
- } else {
114
- $this->setExpectedException('RuntimeException', 'Expected instance of PhpOption\Option');
115
- }
116
-
117
- $option->isDefined();
118
- }
119
-
120
- public function testInvalidCallbackAndConstructor(): void
121
- {
122
- if (method_exists($this, 'expectException')) {
123
- $this->expectException('InvalidArgumentException');
124
- $this->expectExceptionMessage('Invalid callback given');
125
- } else {
126
- $this->setExpectedException('InvalidArgumentException', 'Invalid callback given');
127
- }
128
-
129
- new LazyOption('invalidCallback');
130
- }
131
-
132
- public function testInvalidCallbackAndCreate(): void
133
- {
134
- if (method_exists($this, 'expectException')) {
135
- $this->expectException('InvalidArgumentException');
136
- $this->expectExceptionMessage('Invalid callback given');
137
- } else {
138
- $this->setExpectedException('InvalidArgumentException', 'Invalid callback given');
139
- }
140
-
141
- LazyOption::create('invalidCallback');
142
- }
143
-
144
- public function testifDefined(): void
145
- {
146
- $called = false;
147
- $self = $this;
148
- LazyOption::fromValue('foo')->ifDefined(function ($v) use (&$called, $self) {
149
- $called = true;
150
- $self->assertSame('foo', $v);
151
- });
152
- self::assertTrue($called);
153
- }
154
-
155
- public function testForAll(): void
156
- {
157
- $called = false;
158
- $self = $this;
159
- self::assertInstanceOf(Some::class, LazyOption::fromValue('foo')->forAll(function ($v) use (&$called, $self) {
160
- $called = true;
161
- $self->assertSame('foo', $v);
162
- }));
163
- self::assertTrue($called);
164
- }
165
-
166
- public function testOrElse(): void
167
- {
168
- $some = Some::create('foo');
169
- $lazy = LazyOption::create(function () use ($some) {
170
- return $some;
171
- });
172
- self::assertSame($some, $lazy->orElse(None::create()));
173
- self::assertSame($some, $lazy->orElse(Some::create('bar')));
174
- }
175
-
176
- public function testFoldLeftRight(): void
177
- {
178
- $callback = function () {
179
- };
180
-
181
- // Use TestOption as a concrete implementation to test with
182
- $option = self::createPartialMock(TestOption::class, ['foldLeft', 'foldRight']);
183
- $option->expects(self::once())
184
- ->method('foldLeft')
185
- ->with(5, $callback)
186
- ->willReturn(6);
187
- $lazyOption = new LazyOption(function () use ($option) {
188
- return $option;
189
- });
190
- self::assertSame(6, $lazyOption->foldLeft(5, $callback));
191
-
192
- $option->expects(self::once())
193
- ->method('foldRight')
194
- ->with(5, $callback)
195
- ->willReturn(6);
196
- $lazyOption = new LazyOption(function () use ($option) {
197
- return $option;
198
- });
199
- self::assertSame(6, $lazyOption->foldRight(5, $callback));
200
- }
201
- }
202
-
203
- class TestOption extends Option
204
- {
205
- private $value;
206
-
207
- public function __construct($value = null)
208
- {
209
- $this->value = $value;
210
- }
211
-
212
- public function get()
213
- {
214
- return $this->value;
215
- }
216
-
217
- public function getOrElse($default)
218
- {
219
- if ($this->isDefined()) {
220
- return $this->value;
221
- }
222
-
223
- return $default;
224
- }
225
-
226
- public function getOrCall($callable)
227
- {
228
- if ($this->isDefined()) {
229
- return $this->value;
230
- }
231
-
232
- return call_user_func($callable);
233
- }
234
-
235
- public function getOrThrow(\Exception $ex)
236
- {
237
- if ($this->isDefined()) {
238
- return $this->value;
239
- }
240
-
241
- throw $ex;
242
- }
243
-
244
- public function isEmpty()
245
- {
246
- return $this->value === null;
247
- }
248
-
249
- public function isDefined()
250
- {
251
- return $this->value !== null;
252
- }
253
-
254
- public function orElse(Option $else)
255
- {
256
- if ($this->isDefined()) {
257
- return $this;
258
- }
259
-
260
- return $else;
261
- }
262
-
263
- public function ifDefined($callable)
264
- {
265
- if ($this->isDefined()) {
266
- call_user_func($callable, $this->value);
267
- }
268
- }
269
-
270
- public function forAll($callable)
271
- {
272
- if ($this->isDefined()) {
273
- call_user_func($callable, $this->value);
274
- }
275
- }
276
-
277
- public function map($callable)
278
- {
279
- if ($this->isDefined()) {
280
- return new self(call_user_func($callable, $this->value));
281
- }
282
-
283
- return $this;
284
- }
285
-
286
- public function flatMap($callable)
287
- {
288
- if ($this->isDefined()) {
289
- return call_user_func($callable, $this->value);
290
- }
291
-
292
- return $this;
293
- }
294
-
295
- public function filter($callable)
296
- {
297
- if ($this->isDefined() && call_user_func($callable, $this->value)) {
298
- return $this;
299
- }
300
-
301
- return None::create();
302
- }
303
-
304
- public function filterNot($callable)
305
- {
306
- if ($this->isDefined() && !call_user_func($callable, $this->value)) {
307
- return $this;
308
- }
309
-
310
- return None::create();
311
- }
312
-
313
- public function select($value)
314
- {
315
- if ($this->isDefined() && $this->value === $value) {
316
- return $this;
317
- }
318
-
319
- return None::create();
320
- }
321
-
322
- public function reject($value)
323
- {
324
- if ($this->isDefined() && $this->value !== $value) {
325
- return $this;
326
- }
327
-
328
- return None::create();
329
- }
330
-
331
- public function foldLeft($initialValue, $callable)
332
- {
333
- if ($this->isDefined()) {
334
- return call_user_func($callable, $initialValue, $this->value);
335
- }
336
-
337
- return $initialValue;
338
- }
339
-
340
- public function foldRight($initialValue, $callable)
341
- {
342
- if ($this->isDefined()) {
343
- return call_user_func($callable, $this->value, $initialValue);
344
- }
345
-
346
- return $initialValue;
347
- }
348
-
349
- public function getIterator(): \Traversable
350
- {
351
- if ($this->isDefined()) {
352
- return new \ArrayIterator([$this->value]);
353
- }
354
-
355
- return new \ArrayIterator([]);
356
- }
357
- }
@@ -1,153 +0,0 @@
1
- <?php
2
-
3
- namespace PhpOption\Tests;
4
-
5
- use PhpOption\None;
6
- use PhpOption\Some;
7
- use PHPUnit\Framework\TestCase;
8
-
9
- class NoneTest extends TestCase
10
- {
11
- public function testGet(): void
12
- {
13
- if (method_exists($this, 'expectException')) {
14
- $this->expectException('RuntimeException');
15
- } else {
16
- $this->setExpectedException('RuntimeException');
17
- }
18
-
19
- $none = None::create();
20
- $none->get();
21
- }
22
-
23
- public function testGetOrElse(): void
24
- {
25
- $none = None::create();
26
- self::assertSame('foo', $none->getOrElse('foo'));
27
- }
28
-
29
- public function testGetOrCall(): void
30
- {
31
- $none = None::create();
32
- self::assertSame('foo', $none->getOrCall(function () {
33
- return 'foo';
34
- }));
35
- }
36
-
37
- public function testGetOrThrow(): void
38
- {
39
- if (method_exists($this, 'expectException')) {
40
- $this->expectException('RuntimeException');
41
- $this->expectExceptionMessage('Not Found!');
42
- } else {
43
- $this->setExpectedException('RuntimeException', 'Not Found!');
44
- }
45
-
46
- None::create()->getOrThrow(new \RuntimeException('Not Found!'));
47
- }
48
-
49
- public function testIsEmpty(): void
50
- {
51
- $none = None::create();
52
- self::assertTrue($none->isEmpty());
53
- }
54
-
55
- public function testOrElse(): void
56
- {
57
- $option = Some::create('foo');
58
- self::assertSame($option, None::create()->orElse($option));
59
- }
60
-
61
- public function testifDefined(): void
62
- {
63
- $none = None::create();
64
-
65
- self::assertNull($none->ifDefined(function () {
66
- throw new \LogicException('Should never be called.');
67
- }));
68
- }
69
-
70
- public function testForAll(): void
71
- {
72
- $none = None::create();
73
-
74
- self::assertSame($none, $none->forAll(function () {
75
- throw new \LogicException('Should never be called.');
76
- }));
77
- }
78
-
79
- public function testMap(): void
80
- {
81
- $none = None::create();
82
-
83
- self::assertSame($none, $none->map(function () {
84
- throw new \LogicException('Should not be called.');
85
- }));
86
- }
87
-
88
- public function testFlatMap(): void
89
- {
90
- $none = None::create();
91
-
92
- self::assertSame($none, $none->flatMap(function () {
93
- throw new \LogicException('Should not be called.');
94
- }));
95
- }
96
-
97
- public function testFilter(): void
98
- {
99
- $none = None::create();
100
-
101
- self::assertSame($none, $none->filter(function () {
102
- throw new \LogicException('Should not be called.');
103
- }));
104
- }
105
-
106
- public function testFilterNot(): void
107
- {
108
- $none = None::create();
109
-
110
- self::assertSame($none, $none->filterNot(function () {
111
- throw new \LogicException('Should not be called.');
112
- }));
113
- }
114
-
115
- public function testSelect(): void
116
- {
117
- $none = None::create();
118
-
119
- self::assertSame($none, $none->select(null));
120
- }
121
-
122
- public function testReject(): void
123
- {
124
- $none = None::create();
125
-
126
- self::assertSame($none, $none->reject(null));
127
- }
128
-
129
- public function testForeach(): void
130
- {
131
- $none = None::create();
132
-
133
- $called = 0;
134
- foreach ($none as $value) {
135
- $called++;
136
- }
137
-
138
- self::assertSame(0, $called);
139
- }
140
-
141
- public function testFoldLeftRight(): void
142
- {
143
- $none = None::create();
144
-
145
- self::assertSame(1, $none->foldLeft(1, function () {
146
- $this->fail();
147
- }));
148
-
149
- self::assertSame(1, $none->foldRight(1, function () {
150
- $this->fail();
151
- }));
152
- }
153
- }
@@ -1,166 +0,0 @@
1
- <?php
2
-
3
- namespace PhpOption\Tests;
4
-
5
- use ArrayAccess;
6
- use LogicException;
7
- use PhpOption\LazyOption;
8
- use PhpOption\None;
9
- use PhpOption\Option;
10
- use PhpOption\Some;
11
- use PHPUnit\Framework\TestCase;
12
-
13
- class OptionTest extends TestCase
14
- {
15
- public function testfromValueWithDefaultNoneValue(): void
16
- {
17
- self::assertInstanceOf(None::class, Option::fromValue(null));
18
- self::assertInstanceOf(Some::class, Option::fromValue('value'));
19
- }
20
-
21
- public function testFromValueWithFalseNoneValue(): void
22
- {
23
- self::assertInstanceOf(None::class, Option::fromValue(false, false));
24
- self::assertInstanceOf(Some::class, Option::fromValue('value', false));
25
- self::assertInstanceOf(Some::class, Option::fromValue(null, false));
26
- }
27
-
28
- public function testFromArraysValue(): void
29
- {
30
- self::assertEquals(None::create(), Option::fromArraysValue('foo', 'bar'));
31
- self::assertEquals(None::create(), Option::fromArraysValue(null, 'bar'));
32
- self::assertEquals(None::create(), Option::fromArraysValue(['foo' => 'bar'], 'baz'));
33
- self::assertEquals(None::create(), Option::fromArraysValue(['foo' => null], 'foo'));
34
- self::assertEquals(None::create(), Option::fromArraysValue(['foo' => 'bar'], null));
35
- self::assertEquals(new Some('foo'), Option::fromArraysValue(['foo' => 'foo'], 'foo'));
36
- self::assertEquals(new Some('foo'), Option::fromArraysValue([13 => 'foo'], 13));
37
-
38
- $object = new SomeArrayObject();
39
- $object['foo'] = 'foo';
40
- self::assertEquals(new Some('foo'), Option::fromArraysValue($object, 'foo'));
41
-
42
- $object = new SomeArrayObject();
43
- $object[13] = 'foo';
44
- self::assertEquals(new Some('foo'), Option::fromArraysValue($object, 13));
45
- }
46
-
47
- public function testFromReturn(): void
48
- {
49
- $null = function () {
50
- };
51
- $false = function () {
52
- return false;
53
- };
54
- $some = function () {
55
- return 'foo';
56
- };
57
-
58
- self::assertTrue(Option::fromReturn($null)->isEmpty());
59
- self::assertFalse(Option::fromReturn($false)->isEmpty());
60
- self::assertTrue(Option::fromReturn($false, [], false)->isEmpty());
61
- self::assertTrue(Option::fromReturn($some)->isDefined());
62
- self::assertFalse(Option::fromReturn($some, [], 'foo')->isDefined());
63
- }
64
-
65
- public function testOrElse(): void
66
- {
67
- $a = new Some('a');
68
- $b = new Some('b');
69
-
70
- self::assertSame('a', $a->orElse($b)->get());
71
- }
72
-
73
- public function testOrElseWithNoneAsFirst(): void
74
- {
75
- $a = None::create();
76
- $b = new Some('b');
77
-
78
- self::assertSame('b', $a->orElse($b)->get());
79
- }
80
-
81
- public function testOrElseWithLazyOptions(): void
82
- {
83
- $throws = function () {
84
- throw new LogicException('Should never be called.');
85
- };
86
-
87
- $a = new Some('a');
88
- $b = new LazyOption($throws);
89
-
90
- self::assertSame('a', $a->orElse($b)->get());
91
- }
92
-
93
- public function testOrElseWithMultipleAlternatives(): void
94
- {
95
- $throws = new LazyOption(function () {
96
- throw new LogicException('Should never be called.');
97
- });
98
- $returns = new LazyOption(function () {
99
- return new Some('foo');
100
- });
101
-
102
- $a = None::create();
103
-
104
- self::assertSame('foo', $a->orElse($returns)->orElse($throws)->get());
105
- }
106
-
107
- public function testLift(): void
108
- {
109
- $f = function ($a, $b) {
110
- return $a + $b;
111
- };
112
-
113
- $fL = Option::lift($f);
114
-
115
- $a = new Some(1);
116
- $b = new Some(5);
117
- $n = None::create();
118
-
119
- self::assertSame(6, $fL($a, $b)->get());
120
- self::assertSame(6, $fL($b, $a)->get());
121
- self::assertSame($n, $fL($a, $n));
122
- self::assertSame($n, $fL($n, $a));
123
- self::assertSame($n, $fL($n, $n));
124
- }
125
-
126
- public function testLiftDegenerate(): void
127
- {
128
- $f = function () {
129
- };
130
-
131
- $fL1 = Option::lift($f);
132
- $fL2 = Option::lift($f, false);
133
-
134
- self::assertEquals(None::create(), $fL1());
135
- self::assertEquals(Some::create(null), $fL2());
136
- }
137
- }
138
-
139
- class SomeArrayObject implements ArrayAccess
140
- {
141
- private $data = [];
142
-
143
- #[\ReturnTypeWillChange]
144
- public function offsetExists($offset)
145
- {
146
- return isset($this->data[$offset]);
147
- }
148
-
149
- #[\ReturnTypeWillChange]
150
- public function offsetGet($offset)
151
- {
152
- return $this->data[$offset];
153
- }
154
-
155
- #[\ReturnTypeWillChange]
156
- public function offsetSet($offset, $value)
157
- {
158
- $this->data[$offset] = $value;
159
- }
160
-
161
- #[\ReturnTypeWillChange]
162
- public function offsetUnset($offset)
163
- {
164
- unset($this->data[$offset]);
165
- }
166
- }