├── .gitignore ├── app └── Component │ ├── AddTask.pre │ ├── Page.pre │ ├── Task.pre │ └── TaskList.pre ├── composer.json ├── composer.lock ├── demo.gif ├── public └── index.php ├── readme.md └── server.pre /.gitignore: -------------------------------------------------------------------------------- 1 | /app/**/*.php 2 | /pre.paths 3 | /pre.compilers 4 | /server.php 5 | /vendor 6 | -------------------------------------------------------------------------------- /app/Component/AddTask.pre: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | ); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/Component/Page.pre: -------------------------------------------------------------------------------- 1 | hasValid($props)); 12 | 13 | { $children } = $props; 14 | 15 | return ( 16 | "". 17 | 18 | 19 | {$children} 20 | 21 | 22 | ); 23 | } 24 | 25 | private function hasValid($props) 26 | { 27 | if (empty($props["children"])) { 28 | throw new InvalidArgumentException("page needs content (children)"); 29 | } 30 | 31 | return true; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Component/Task.pre: -------------------------------------------------------------------------------- 1 | hasValid($props)); 12 | 13 | { $children, $id } = $props; 14 | 15 | return ( 16 |
  • 17 | {$children} 18 | remove 19 |
  • 20 | ); 21 | } 22 | 23 | private function hasValid($props) 24 | { 25 | if (!isset($props["id"])) { 26 | throw new InvalidArgumentException("task needs id (attribute)"); 27 | } 28 | 29 | if (empty($props["children"])) { 30 | throw new InvalidArgumentException("task needs text (children)"); 31 | } 32 | 33 | return true; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/Component/TaskList.pre: -------------------------------------------------------------------------------- 1 | 13 | {$this->children($children)} 14 | 15 | ); 16 | } 17 | 18 | private function children($children) 19 | { 20 | if (count($children)) { 21 | return {$children}->map(($task) => { 22 | return ( 23 | {$task["text"]} 24 | ); 25 | }); 26 | } 27 | 28 | return ( 29 | No tasks 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "silex/silex": "^2.0", 4 | "pre/collections": "^0.4.1", 5 | "pre/short-closures": "^0.5.2", 6 | "pre/phpx": "^0.2.0" 7 | }, 8 | "autoload": { 9 | "psr-4": { 10 | "App\\": "app" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "85e18c12c5e3aefbfb69f88d85709188", 8 | "packages": [ 9 | { 10 | "name": "doctrine/annotations", 11 | "version": "v1.5.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/doctrine/annotations.git", 15 | "reference": "5beebb01b025c94e93686b7a0ed3edae81fe3e7f" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/5beebb01b025c94e93686b7a0ed3edae81fe3e7f", 20 | "reference": "5beebb01b025c94e93686b7a0ed3edae81fe3e7f", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "doctrine/lexer": "1.*", 25 | "php": "^7.1" 26 | }, 27 | "require-dev": { 28 | "doctrine/cache": "1.*", 29 | "phpunit/phpunit": "^5.7" 30 | }, 31 | "type": "library", 32 | "extra": { 33 | "branch-alias": { 34 | "dev-master": "1.5.x-dev" 35 | } 36 | }, 37 | "autoload": { 38 | "psr-4": { 39 | "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" 40 | } 41 | }, 42 | "notification-url": "https://packagist.org/downloads/", 43 | "license": [ 44 | "MIT" 45 | ], 46 | "authors": [ 47 | { 48 | "name": "Roman Borschel", 49 | "email": "roman@code-factory.org" 50 | }, 51 | { 52 | "name": "Benjamin Eberlei", 53 | "email": "kontakt@beberlei.de" 54 | }, 55 | { 56 | "name": "Guilherme Blanco", 57 | "email": "guilhermeblanco@gmail.com" 58 | }, 59 | { 60 | "name": "Jonathan Wage", 61 | "email": "jonwage@gmail.com" 62 | }, 63 | { 64 | "name": "Johannes Schmitt", 65 | "email": "schmittjoh@gmail.com" 66 | } 67 | ], 68 | "description": "Docblock Annotations Parser", 69 | "homepage": "http://www.doctrine-project.org", 70 | "keywords": [ 71 | "annotations", 72 | "docblock", 73 | "parser" 74 | ], 75 | "time": "2017-07-22T10:58:02+00:00" 76 | }, 77 | { 78 | "name": "doctrine/lexer", 79 | "version": "v1.0.1", 80 | "source": { 81 | "type": "git", 82 | "url": "https://github.com/doctrine/lexer.git", 83 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" 84 | }, 85 | "dist": { 86 | "type": "zip", 87 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", 88 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", 89 | "shasum": "" 90 | }, 91 | "require": { 92 | "php": ">=5.3.2" 93 | }, 94 | "type": "library", 95 | "extra": { 96 | "branch-alias": { 97 | "dev-master": "1.0.x-dev" 98 | } 99 | }, 100 | "autoload": { 101 | "psr-0": { 102 | "Doctrine\\Common\\Lexer\\": "lib/" 103 | } 104 | }, 105 | "notification-url": "https://packagist.org/downloads/", 106 | "license": [ 107 | "MIT" 108 | ], 109 | "authors": [ 110 | { 111 | "name": "Roman Borschel", 112 | "email": "roman@code-factory.org" 113 | }, 114 | { 115 | "name": "Guilherme Blanco", 116 | "email": "guilhermeblanco@gmail.com" 117 | }, 118 | { 119 | "name": "Johannes Schmitt", 120 | "email": "schmittjoh@gmail.com" 121 | } 122 | ], 123 | "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", 124 | "homepage": "http://www.doctrine-project.org", 125 | "keywords": [ 126 | "lexer", 127 | "parser" 128 | ], 129 | "time": "2014-09-09T13:34:57+00:00" 130 | }, 131 | { 132 | "name": "friendsofphp/php-cs-fixer", 133 | "version": "v2.4.0", 134 | "source": { 135 | "type": "git", 136 | "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", 137 | "reference": "63661f3add3609e90e4ab8115113e189ae547bb4" 138 | }, 139 | "dist": { 140 | "type": "zip", 141 | "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/63661f3add3609e90e4ab8115113e189ae547bb4", 142 | "reference": "63661f3add3609e90e4ab8115113e189ae547bb4", 143 | "shasum": "" 144 | }, 145 | "require": { 146 | "doctrine/annotations": "^1.2", 147 | "ext-json": "*", 148 | "ext-tokenizer": "*", 149 | "gecko-packages/gecko-php-unit": "^2.0", 150 | "php": "^5.6 || >=7.0 <7.2", 151 | "sebastian/diff": "^1.4", 152 | "symfony/console": "^3.0", 153 | "symfony/event-dispatcher": "^3.0", 154 | "symfony/filesystem": "^3.0", 155 | "symfony/finder": "^3.0", 156 | "symfony/options-resolver": "^3.0", 157 | "symfony/polyfill-php70": "^1.0", 158 | "symfony/polyfill-php72": "^1.4", 159 | "symfony/process": "^3.0", 160 | "symfony/stopwatch": "^3.0" 161 | }, 162 | "conflict": { 163 | "hhvm": "*" 164 | }, 165 | "require-dev": { 166 | "johnkary/phpunit-speedtrap": "^1.1", 167 | "justinrainbow/json-schema": "^5.0", 168 | "phpunit/phpunit": "^4.8.35 || ^5.4.3", 169 | "satooshi/php-coveralls": "^1.0", 170 | "symfony/phpunit-bridge": "^3.2.2" 171 | }, 172 | "suggest": { 173 | "ext-mbstring": "For handling non-UTF8 characters in cache signature.", 174 | "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." 175 | }, 176 | "bin": [ 177 | "php-cs-fixer" 178 | ], 179 | "type": "application", 180 | "extra": { 181 | "branch-alias": { 182 | "dev-master": "2.4-dev" 183 | } 184 | }, 185 | "autoload": { 186 | "psr-4": { 187 | "PhpCsFixer\\": "src/" 188 | }, 189 | "classmap": [ 190 | "tests/Test/Assert/AssertTokensTrait.php", 191 | "tests/Test/AbstractFixerTestCase.php", 192 | "tests/Test/AbstractIntegrationTestCase.php", 193 | "tests/Test/IntegrationCase.php", 194 | "tests/Test/IntegrationCaseFactory.php" 195 | ] 196 | }, 197 | "notification-url": "https://packagist.org/downloads/", 198 | "license": [ 199 | "MIT" 200 | ], 201 | "authors": [ 202 | { 203 | "name": "Dariusz Rumiński", 204 | "email": "dariusz.ruminski@gmail.com" 205 | }, 206 | { 207 | "name": "Fabien Potencier", 208 | "email": "fabien@symfony.com" 209 | } 210 | ], 211 | "description": "A tool to automatically fix PHP code style", 212 | "time": "2017-07-18T15:35:40+00:00" 213 | }, 214 | { 215 | "name": "gecko-packages/gecko-php-unit", 216 | "version": "v2.1", 217 | "source": { 218 | "type": "git", 219 | "url": "https://github.com/GeckoPackages/GeckoPHPUnit.git", 220 | "reference": "5b9e9622c7efd3b22655270b80c03f9e52878a6e" 221 | }, 222 | "dist": { 223 | "type": "zip", 224 | "url": "https://api.github.com/repos/GeckoPackages/GeckoPHPUnit/zipball/5b9e9622c7efd3b22655270b80c03f9e52878a6e", 225 | "reference": "5b9e9622c7efd3b22655270b80c03f9e52878a6e", 226 | "shasum": "" 227 | }, 228 | "require": { 229 | "php": "^5.3.6 || ^7.0" 230 | }, 231 | "require-dev": { 232 | "phpunit/phpunit": "^4.8.35 || ^5.4.3" 233 | }, 234 | "type": "library", 235 | "autoload": { 236 | "psr-4": { 237 | "GeckoPackages\\PHPUnit\\": "src\\PHPUnit" 238 | } 239 | }, 240 | "notification-url": "https://packagist.org/downloads/", 241 | "license": [ 242 | "MIT" 243 | ], 244 | "description": "Additional PHPUnit tests.", 245 | "homepage": "https://github.com/GeckoPackages", 246 | "keywords": [ 247 | "extension", 248 | "filesystem", 249 | "phpunit" 250 | ], 251 | "time": "2017-06-20T11:22:48+00:00" 252 | }, 253 | { 254 | "name": "nikic/php-parser", 255 | "version": "v3.1.0", 256 | "source": { 257 | "type": "git", 258 | "url": "https://github.com/nikic/PHP-Parser.git", 259 | "reference": "4d4896e553f2094e657fe493506dc37c509d4e2b" 260 | }, 261 | "dist": { 262 | "type": "zip", 263 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4d4896e553f2094e657fe493506dc37c509d4e2b", 264 | "reference": "4d4896e553f2094e657fe493506dc37c509d4e2b", 265 | "shasum": "" 266 | }, 267 | "require": { 268 | "ext-tokenizer": "*", 269 | "php": ">=5.5" 270 | }, 271 | "require-dev": { 272 | "phpunit/phpunit": "~4.0|~5.0" 273 | }, 274 | "bin": [ 275 | "bin/php-parse" 276 | ], 277 | "type": "library", 278 | "extra": { 279 | "branch-alias": { 280 | "dev-master": "3.0-dev" 281 | } 282 | }, 283 | "autoload": { 284 | "psr-4": { 285 | "PhpParser\\": "lib/PhpParser" 286 | } 287 | }, 288 | "notification-url": "https://packagist.org/downloads/", 289 | "license": [ 290 | "BSD-3-Clause" 291 | ], 292 | "authors": [ 293 | { 294 | "name": "Nikita Popov" 295 | } 296 | ], 297 | "description": "A PHP parser written in PHP", 298 | "keywords": [ 299 | "parser", 300 | "php" 301 | ], 302 | "time": "2017-07-28T14:45:09+00:00" 303 | }, 304 | { 305 | "name": "paragonie/random_compat", 306 | "version": "v2.0.10", 307 | "source": { 308 | "type": "git", 309 | "url": "https://github.com/paragonie/random_compat.git", 310 | "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d" 311 | }, 312 | "dist": { 313 | "type": "zip", 314 | "url": "https://api.github.com/repos/paragonie/random_compat/zipball/634bae8e911eefa89c1abfbf1b66da679ac8f54d", 315 | "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d", 316 | "shasum": "" 317 | }, 318 | "require": { 319 | "php": ">=5.2.0" 320 | }, 321 | "require-dev": { 322 | "phpunit/phpunit": "4.*|5.*" 323 | }, 324 | "suggest": { 325 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." 326 | }, 327 | "type": "library", 328 | "autoload": { 329 | "files": [ 330 | "lib/random.php" 331 | ] 332 | }, 333 | "notification-url": "https://packagist.org/downloads/", 334 | "license": [ 335 | "MIT" 336 | ], 337 | "authors": [ 338 | { 339 | "name": "Paragon Initiative Enterprises", 340 | "email": "security@paragonie.com", 341 | "homepage": "https://paragonie.com" 342 | } 343 | ], 344 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", 345 | "keywords": [ 346 | "csprng", 347 | "pseudorandom", 348 | "random" 349 | ], 350 | "time": "2017-03-13T16:27:32+00:00" 351 | }, 352 | { 353 | "name": "pimple/pimple", 354 | "version": "v3.2.2", 355 | "source": { 356 | "type": "git", 357 | "url": "https://github.com/silexphp/Pimple.git", 358 | "reference": "4d45fb62d96418396ec58ba76e6f065bca16e10a" 359 | }, 360 | "dist": { 361 | "type": "zip", 362 | "url": "https://api.github.com/repos/silexphp/Pimple/zipball/4d45fb62d96418396ec58ba76e6f065bca16e10a", 363 | "reference": "4d45fb62d96418396ec58ba76e6f065bca16e10a", 364 | "shasum": "" 365 | }, 366 | "require": { 367 | "php": ">=5.3.0", 368 | "psr/container": "^1.0" 369 | }, 370 | "require-dev": { 371 | "symfony/phpunit-bridge": "^3.2" 372 | }, 373 | "type": "library", 374 | "extra": { 375 | "branch-alias": { 376 | "dev-master": "3.2.x-dev" 377 | } 378 | }, 379 | "autoload": { 380 | "psr-0": { 381 | "Pimple": "src/" 382 | } 383 | }, 384 | "notification-url": "https://packagist.org/downloads/", 385 | "license": [ 386 | "MIT" 387 | ], 388 | "authors": [ 389 | { 390 | "name": "Fabien Potencier", 391 | "email": "fabien@symfony.com" 392 | } 393 | ], 394 | "description": "Pimple, a simple Dependency Injection Container", 395 | "homepage": "http://pimple.sensiolabs.org", 396 | "keywords": [ 397 | "container", 398 | "dependency injection" 399 | ], 400 | "time": "2017-07-23T07:32:15+00:00" 401 | }, 402 | { 403 | "name": "pre/collections", 404 | "version": "0.4.1", 405 | "source": { 406 | "type": "git", 407 | "url": "https://github.com/preprocess/pre-collections.git", 408 | "reference": "96ee6f4ca6035d97e9545bf68a248efb5bc33222" 409 | }, 410 | "dist": { 411 | "type": "zip", 412 | "url": "https://api.github.com/repos/preprocess/pre-collections/zipball/96ee6f4ca6035d97e9545bf68a248efb5bc33222", 413 | "reference": "96ee6f4ca6035d97e9545bf68a248efb5bc33222", 414 | "shasum": "" 415 | }, 416 | "require": { 417 | "pre/plugin": "^0.7.3" 418 | }, 419 | "require-dev": { 420 | "phpunit/phpunit": "^5.0|^6.0" 421 | }, 422 | "type": "pre-macro", 423 | "extra": { 424 | "macros": [ 425 | "src/macros.yay" 426 | ] 427 | }, 428 | "autoload": { 429 | "files": [ 430 | "src/parsers.php" 431 | ], 432 | "psr-4": { 433 | "Pre\\Collections\\": "src" 434 | } 435 | }, 436 | "notification-url": "https://packagist.org/downloads/", 437 | "license": [ 438 | "MIT" 439 | ], 440 | "time": "2017-08-17T15:56:38+00:00" 441 | }, 442 | { 443 | "name": "pre/phpx", 444 | "version": "0.2.0", 445 | "source": { 446 | "type": "git", 447 | "url": "https://github.com/preprocess/pre-phpx.git", 448 | "reference": "0c82021ff704796a979843ddfe93c2a65740db8b" 449 | }, 450 | "dist": { 451 | "type": "zip", 452 | "url": "https://api.github.com/repos/preprocess/pre-phpx/zipball/0c82021ff704796a979843ddfe93c2a65740db8b", 453 | "reference": "0c82021ff704796a979843ddfe93c2a65740db8b", 454 | "shasum": "" 455 | }, 456 | "require": { 457 | "pre/plugin": "^0.7.7" 458 | }, 459 | "type": "pre-compiler", 460 | "extra": { 461 | "compilers": [ 462 | "Pre\\Phpx\\compile" 463 | ] 464 | }, 465 | "autoload": { 466 | "files": [ 467 | "src/parser.php", 468 | "src/renderers.php" 469 | ] 470 | }, 471 | "notification-url": "https://packagist.org/downloads/", 472 | "time": "2017-08-17T15:57:42+00:00" 473 | }, 474 | { 475 | "name": "pre/plugin", 476 | "version": "0.7.7", 477 | "source": { 478 | "type": "git", 479 | "url": "https://github.com/preprocess/pre-plugin.git", 480 | "reference": "7587dc7cd00a55f132fdbdef1b5e6dff629f3387" 481 | }, 482 | "dist": { 483 | "type": "zip", 484 | "url": "https://api.github.com/repos/preprocess/pre-plugin/zipball/7587dc7cd00a55f132fdbdef1b5e6dff629f3387", 485 | "reference": "7587dc7cd00a55f132fdbdef1b5e6dff629f3387", 486 | "shasum": "" 487 | }, 488 | "require": { 489 | "composer-plugin-api": "^1.1", 490 | "friendsofphp/php-cs-fixer": "^2.0", 491 | "tuupola/base62": "^0.8", 492 | "yay/yay": "^0.2" 493 | }, 494 | "require-dev": { 495 | "composer/composer": "^1.3", 496 | "phpunit/phpunit": "^5.0|^6.0" 497 | }, 498 | "type": "composer-plugin", 499 | "extra": { 500 | "class": [ 501 | "Pre\\Plugin\\Integration\\Plugin" 502 | ] 503 | }, 504 | "autoload": { 505 | "files": [ 506 | "src/autoload.php", 507 | "src/functions.php", 508 | "src/expanders.php", 509 | "src/bootstrap.php" 510 | ], 511 | "psr-4": { 512 | "Pre\\Plugin\\": "src" 513 | } 514 | }, 515 | "notification-url": "https://packagist.org/downloads/", 516 | "license": [ 517 | "MIT" 518 | ], 519 | "time": "2017-08-16T08:52:56+00:00" 520 | }, 521 | { 522 | "name": "pre/short-closures", 523 | "version": "0.5.2", 524 | "source": { 525 | "type": "git", 526 | "url": "https://github.com/preprocess/pre-short-closures.git", 527 | "reference": "279fc104f49049c1cd10daa56b507439a7d5b504" 528 | }, 529 | "dist": { 530 | "type": "zip", 531 | "url": "https://api.github.com/repos/preprocess/pre-short-closures/zipball/279fc104f49049c1cd10daa56b507439a7d5b504", 532 | "reference": "279fc104f49049c1cd10daa56b507439a7d5b504", 533 | "shasum": "" 534 | }, 535 | "require": { 536 | "pre/plugin": "^0.7.3" 537 | }, 538 | "require-dev": { 539 | "phpunit/phpunit": "^5.0|^6.0" 540 | }, 541 | "type": "pre-macro", 542 | "extra": { 543 | "macros": [ 544 | "src/macros.yay" 545 | ] 546 | }, 547 | "notification-url": "https://packagist.org/downloads/", 548 | "license": [ 549 | "MIT" 550 | ], 551 | "time": "2017-06-06T09:02:11+00:00" 552 | }, 553 | { 554 | "name": "psr/container", 555 | "version": "1.0.0", 556 | "source": { 557 | "type": "git", 558 | "url": "https://github.com/php-fig/container.git", 559 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 560 | }, 561 | "dist": { 562 | "type": "zip", 563 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 564 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 565 | "shasum": "" 566 | }, 567 | "require": { 568 | "php": ">=5.3.0" 569 | }, 570 | "type": "library", 571 | "extra": { 572 | "branch-alias": { 573 | "dev-master": "1.0.x-dev" 574 | } 575 | }, 576 | "autoload": { 577 | "psr-4": { 578 | "Psr\\Container\\": "src/" 579 | } 580 | }, 581 | "notification-url": "https://packagist.org/downloads/", 582 | "license": [ 583 | "MIT" 584 | ], 585 | "authors": [ 586 | { 587 | "name": "PHP-FIG", 588 | "homepage": "http://www.php-fig.org/" 589 | } 590 | ], 591 | "description": "Common Container Interface (PHP FIG PSR-11)", 592 | "homepage": "https://github.com/php-fig/container", 593 | "keywords": [ 594 | "PSR-11", 595 | "container", 596 | "container-interface", 597 | "container-interop", 598 | "psr" 599 | ], 600 | "time": "2017-02-14T16:28:37+00:00" 601 | }, 602 | { 603 | "name": "psr/log", 604 | "version": "1.0.2", 605 | "source": { 606 | "type": "git", 607 | "url": "https://github.com/php-fig/log.git", 608 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 609 | }, 610 | "dist": { 611 | "type": "zip", 612 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 613 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 614 | "shasum": "" 615 | }, 616 | "require": { 617 | "php": ">=5.3.0" 618 | }, 619 | "type": "library", 620 | "extra": { 621 | "branch-alias": { 622 | "dev-master": "1.0.x-dev" 623 | } 624 | }, 625 | "autoload": { 626 | "psr-4": { 627 | "Psr\\Log\\": "Psr/Log/" 628 | } 629 | }, 630 | "notification-url": "https://packagist.org/downloads/", 631 | "license": [ 632 | "MIT" 633 | ], 634 | "authors": [ 635 | { 636 | "name": "PHP-FIG", 637 | "homepage": "http://www.php-fig.org/" 638 | } 639 | ], 640 | "description": "Common interface for logging libraries", 641 | "homepage": "https://github.com/php-fig/log", 642 | "keywords": [ 643 | "log", 644 | "psr", 645 | "psr-3" 646 | ], 647 | "time": "2016-10-10T12:19:37+00:00" 648 | }, 649 | { 650 | "name": "sebastian/diff", 651 | "version": "1.4.3", 652 | "source": { 653 | "type": "git", 654 | "url": "https://github.com/sebastianbergmann/diff.git", 655 | "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" 656 | }, 657 | "dist": { 658 | "type": "zip", 659 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", 660 | "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", 661 | "shasum": "" 662 | }, 663 | "require": { 664 | "php": "^5.3.3 || ^7.0" 665 | }, 666 | "require-dev": { 667 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 668 | }, 669 | "type": "library", 670 | "extra": { 671 | "branch-alias": { 672 | "dev-master": "1.4-dev" 673 | } 674 | }, 675 | "autoload": { 676 | "classmap": [ 677 | "src/" 678 | ] 679 | }, 680 | "notification-url": "https://packagist.org/downloads/", 681 | "license": [ 682 | "BSD-3-Clause" 683 | ], 684 | "authors": [ 685 | { 686 | "name": "Kore Nordmann", 687 | "email": "mail@kore-nordmann.de" 688 | }, 689 | { 690 | "name": "Sebastian Bergmann", 691 | "email": "sebastian@phpunit.de" 692 | } 693 | ], 694 | "description": "Diff implementation", 695 | "homepage": "https://github.com/sebastianbergmann/diff", 696 | "keywords": [ 697 | "diff" 698 | ], 699 | "time": "2017-05-22T07:24:03+00:00" 700 | }, 701 | { 702 | "name": "silex/silex", 703 | "version": "v2.2.0", 704 | "source": { 705 | "type": "git", 706 | "url": "https://github.com/silexphp/Silex.git", 707 | "reference": "ec7d5b5334465414952d4b2e935e73bd085dbbbb" 708 | }, 709 | "dist": { 710 | "type": "zip", 711 | "url": "https://api.github.com/repos/silexphp/Silex/zipball/ec7d5b5334465414952d4b2e935e73bd085dbbbb", 712 | "reference": "ec7d5b5334465414952d4b2e935e73bd085dbbbb", 713 | "shasum": "" 714 | }, 715 | "require": { 716 | "php": ">=5.5.9", 717 | "pimple/pimple": "~3.0", 718 | "symfony/event-dispatcher": "~2.8|^3.0", 719 | "symfony/http-foundation": "~2.8|^3.0", 720 | "symfony/http-kernel": "~2.8|^3.0", 721 | "symfony/routing": "~2.8|^3.0" 722 | }, 723 | "conflict": { 724 | "phpunit/phpunit": "<4.8.35 || >= 5.0, <5.4.3" 725 | }, 726 | "replace": { 727 | "silex/api": "self.version", 728 | "silex/providers": "self.version" 729 | }, 730 | "require-dev": { 731 | "doctrine/dbal": "~2.2", 732 | "monolog/monolog": "^1.4.1", 733 | "swiftmailer/swiftmailer": "~5", 734 | "symfony/asset": "~2.8|^3.0", 735 | "symfony/browser-kit": "~2.8|^3.0", 736 | "symfony/config": "~2.8|^3.0", 737 | "symfony/css-selector": "~2.8|^3.0", 738 | "symfony/debug": "~2.8|^3.0", 739 | "symfony/doctrine-bridge": "~2.8|^3.0", 740 | "symfony/dom-crawler": "~2.8|^3.0", 741 | "symfony/expression-language": "~2.8|^3.0", 742 | "symfony/finder": "~2.8|^3.0", 743 | "symfony/form": "~2.8|^3.0", 744 | "symfony/intl": "~2.8|^3.0", 745 | "symfony/monolog-bridge": "~2.8|^3.0", 746 | "symfony/options-resolver": "~2.8|^3.0", 747 | "symfony/phpunit-bridge": "^3.2", 748 | "symfony/process": "~2.8|^3.0", 749 | "symfony/security": "~2.8|^3.0", 750 | "symfony/serializer": "~2.8|^3.0", 751 | "symfony/translation": "~2.8|^3.0", 752 | "symfony/twig-bridge": "~2.8|^3.0", 753 | "symfony/validator": "~2.8|^3.0", 754 | "symfony/var-dumper": "~2.8|^3.0", 755 | "symfony/web-link": "^3.3", 756 | "twig/twig": "~1.28|~2.0" 757 | }, 758 | "type": "library", 759 | "extra": { 760 | "branch-alias": { 761 | "dev-master": "2.2.x-dev" 762 | } 763 | }, 764 | "autoload": { 765 | "psr-4": { 766 | "Silex\\": "src/Silex" 767 | } 768 | }, 769 | "notification-url": "https://packagist.org/downloads/", 770 | "license": [ 771 | "MIT" 772 | ], 773 | "authors": [ 774 | { 775 | "name": "Fabien Potencier", 776 | "email": "fabien@symfony.com" 777 | }, 778 | { 779 | "name": "Igor Wiedler", 780 | "email": "igor@wiedler.ch" 781 | } 782 | ], 783 | "description": "The PHP micro-framework based on the Symfony Components", 784 | "homepage": "http://silex.sensiolabs.org", 785 | "keywords": [ 786 | "microframework" 787 | ], 788 | "time": "2017-07-23T07:40:14+00:00" 789 | }, 790 | { 791 | "name": "symfony/console", 792 | "version": "v3.3.6", 793 | "source": { 794 | "type": "git", 795 | "url": "https://github.com/symfony/console.git", 796 | "reference": "b0878233cb5c4391347e5495089c7af11b8e6201" 797 | }, 798 | "dist": { 799 | "type": "zip", 800 | "url": "https://api.github.com/repos/symfony/console/zipball/b0878233cb5c4391347e5495089c7af11b8e6201", 801 | "reference": "b0878233cb5c4391347e5495089c7af11b8e6201", 802 | "shasum": "" 803 | }, 804 | "require": { 805 | "php": ">=5.5.9", 806 | "symfony/debug": "~2.8|~3.0", 807 | "symfony/polyfill-mbstring": "~1.0" 808 | }, 809 | "conflict": { 810 | "symfony/dependency-injection": "<3.3" 811 | }, 812 | "require-dev": { 813 | "psr/log": "~1.0", 814 | "symfony/config": "~3.3", 815 | "symfony/dependency-injection": "~3.3", 816 | "symfony/event-dispatcher": "~2.8|~3.0", 817 | "symfony/filesystem": "~2.8|~3.0", 818 | "symfony/http-kernel": "~2.8|~3.0", 819 | "symfony/process": "~2.8|~3.0" 820 | }, 821 | "suggest": { 822 | "psr/log": "For using the console logger", 823 | "symfony/event-dispatcher": "", 824 | "symfony/filesystem": "", 825 | "symfony/process": "" 826 | }, 827 | "type": "library", 828 | "extra": { 829 | "branch-alias": { 830 | "dev-master": "3.3-dev" 831 | } 832 | }, 833 | "autoload": { 834 | "psr-4": { 835 | "Symfony\\Component\\Console\\": "" 836 | }, 837 | "exclude-from-classmap": [ 838 | "/Tests/" 839 | ] 840 | }, 841 | "notification-url": "https://packagist.org/downloads/", 842 | "license": [ 843 | "MIT" 844 | ], 845 | "authors": [ 846 | { 847 | "name": "Fabien Potencier", 848 | "email": "fabien@symfony.com" 849 | }, 850 | { 851 | "name": "Symfony Community", 852 | "homepage": "https://symfony.com/contributors" 853 | } 854 | ], 855 | "description": "Symfony Console Component", 856 | "homepage": "https://symfony.com", 857 | "time": "2017-07-29T21:27:59+00:00" 858 | }, 859 | { 860 | "name": "symfony/debug", 861 | "version": "v3.3.6", 862 | "source": { 863 | "type": "git", 864 | "url": "https://github.com/symfony/debug.git", 865 | "reference": "7c13ae8ce1e2adbbd574fc39de7be498e1284e13" 866 | }, 867 | "dist": { 868 | "type": "zip", 869 | "url": "https://api.github.com/repos/symfony/debug/zipball/7c13ae8ce1e2adbbd574fc39de7be498e1284e13", 870 | "reference": "7c13ae8ce1e2adbbd574fc39de7be498e1284e13", 871 | "shasum": "" 872 | }, 873 | "require": { 874 | "php": ">=5.5.9", 875 | "psr/log": "~1.0" 876 | }, 877 | "conflict": { 878 | "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" 879 | }, 880 | "require-dev": { 881 | "symfony/http-kernel": "~2.8|~3.0" 882 | }, 883 | "type": "library", 884 | "extra": { 885 | "branch-alias": { 886 | "dev-master": "3.3-dev" 887 | } 888 | }, 889 | "autoload": { 890 | "psr-4": { 891 | "Symfony\\Component\\Debug\\": "" 892 | }, 893 | "exclude-from-classmap": [ 894 | "/Tests/" 895 | ] 896 | }, 897 | "notification-url": "https://packagist.org/downloads/", 898 | "license": [ 899 | "MIT" 900 | ], 901 | "authors": [ 902 | { 903 | "name": "Fabien Potencier", 904 | "email": "fabien@symfony.com" 905 | }, 906 | { 907 | "name": "Symfony Community", 908 | "homepage": "https://symfony.com/contributors" 909 | } 910 | ], 911 | "description": "Symfony Debug Component", 912 | "homepage": "https://symfony.com", 913 | "time": "2017-07-28T15:27:31+00:00" 914 | }, 915 | { 916 | "name": "symfony/event-dispatcher", 917 | "version": "v3.3.6", 918 | "source": { 919 | "type": "git", 920 | "url": "https://github.com/symfony/event-dispatcher.git", 921 | "reference": "67535f1e3fd662bdc68d7ba317c93eecd973617e" 922 | }, 923 | "dist": { 924 | "type": "zip", 925 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67535f1e3fd662bdc68d7ba317c93eecd973617e", 926 | "reference": "67535f1e3fd662bdc68d7ba317c93eecd973617e", 927 | "shasum": "" 928 | }, 929 | "require": { 930 | "php": ">=5.5.9" 931 | }, 932 | "conflict": { 933 | "symfony/dependency-injection": "<3.3" 934 | }, 935 | "require-dev": { 936 | "psr/log": "~1.0", 937 | "symfony/config": "~2.8|~3.0", 938 | "symfony/dependency-injection": "~3.3", 939 | "symfony/expression-language": "~2.8|~3.0", 940 | "symfony/stopwatch": "~2.8|~3.0" 941 | }, 942 | "suggest": { 943 | "symfony/dependency-injection": "", 944 | "symfony/http-kernel": "" 945 | }, 946 | "type": "library", 947 | "extra": { 948 | "branch-alias": { 949 | "dev-master": "3.3-dev" 950 | } 951 | }, 952 | "autoload": { 953 | "psr-4": { 954 | "Symfony\\Component\\EventDispatcher\\": "" 955 | }, 956 | "exclude-from-classmap": [ 957 | "/Tests/" 958 | ] 959 | }, 960 | "notification-url": "https://packagist.org/downloads/", 961 | "license": [ 962 | "MIT" 963 | ], 964 | "authors": [ 965 | { 966 | "name": "Fabien Potencier", 967 | "email": "fabien@symfony.com" 968 | }, 969 | { 970 | "name": "Symfony Community", 971 | "homepage": "https://symfony.com/contributors" 972 | } 973 | ], 974 | "description": "Symfony EventDispatcher Component", 975 | "homepage": "https://symfony.com", 976 | "time": "2017-06-09T14:53:08+00:00" 977 | }, 978 | { 979 | "name": "symfony/filesystem", 980 | "version": "v3.3.6", 981 | "source": { 982 | "type": "git", 983 | "url": "https://github.com/symfony/filesystem.git", 984 | "reference": "427987eb4eed764c3b6e38d52a0f87989e010676" 985 | }, 986 | "dist": { 987 | "type": "zip", 988 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/427987eb4eed764c3b6e38d52a0f87989e010676", 989 | "reference": "427987eb4eed764c3b6e38d52a0f87989e010676", 990 | "shasum": "" 991 | }, 992 | "require": { 993 | "php": ">=5.5.9" 994 | }, 995 | "type": "library", 996 | "extra": { 997 | "branch-alias": { 998 | "dev-master": "3.3-dev" 999 | } 1000 | }, 1001 | "autoload": { 1002 | "psr-4": { 1003 | "Symfony\\Component\\Filesystem\\": "" 1004 | }, 1005 | "exclude-from-classmap": [ 1006 | "/Tests/" 1007 | ] 1008 | }, 1009 | "notification-url": "https://packagist.org/downloads/", 1010 | "license": [ 1011 | "MIT" 1012 | ], 1013 | "authors": [ 1014 | { 1015 | "name": "Fabien Potencier", 1016 | "email": "fabien@symfony.com" 1017 | }, 1018 | { 1019 | "name": "Symfony Community", 1020 | "homepage": "https://symfony.com/contributors" 1021 | } 1022 | ], 1023 | "description": "Symfony Filesystem Component", 1024 | "homepage": "https://symfony.com", 1025 | "time": "2017-07-11T07:17:58+00:00" 1026 | }, 1027 | { 1028 | "name": "symfony/finder", 1029 | "version": "v3.3.6", 1030 | "source": { 1031 | "type": "git", 1032 | "url": "https://github.com/symfony/finder.git", 1033 | "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4" 1034 | }, 1035 | "dist": { 1036 | "type": "zip", 1037 | "url": "https://api.github.com/repos/symfony/finder/zipball/baea7f66d30854ad32988c11a09d7ffd485810c4", 1038 | "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4", 1039 | "shasum": "" 1040 | }, 1041 | "require": { 1042 | "php": ">=5.5.9" 1043 | }, 1044 | "type": "library", 1045 | "extra": { 1046 | "branch-alias": { 1047 | "dev-master": "3.3-dev" 1048 | } 1049 | }, 1050 | "autoload": { 1051 | "psr-4": { 1052 | "Symfony\\Component\\Finder\\": "" 1053 | }, 1054 | "exclude-from-classmap": [ 1055 | "/Tests/" 1056 | ] 1057 | }, 1058 | "notification-url": "https://packagist.org/downloads/", 1059 | "license": [ 1060 | "MIT" 1061 | ], 1062 | "authors": [ 1063 | { 1064 | "name": "Fabien Potencier", 1065 | "email": "fabien@symfony.com" 1066 | }, 1067 | { 1068 | "name": "Symfony Community", 1069 | "homepage": "https://symfony.com/contributors" 1070 | } 1071 | ], 1072 | "description": "Symfony Finder Component", 1073 | "homepage": "https://symfony.com", 1074 | "time": "2017-06-01T21:01:25+00:00" 1075 | }, 1076 | { 1077 | "name": "symfony/http-foundation", 1078 | "version": "v3.3.6", 1079 | "source": { 1080 | "type": "git", 1081 | "url": "https://github.com/symfony/http-foundation.git", 1082 | "reference": "49e8cd2d59a7aa9bfab19e46de680c76e500a031" 1083 | }, 1084 | "dist": { 1085 | "type": "zip", 1086 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/49e8cd2d59a7aa9bfab19e46de680c76e500a031", 1087 | "reference": "49e8cd2d59a7aa9bfab19e46de680c76e500a031", 1088 | "shasum": "" 1089 | }, 1090 | "require": { 1091 | "php": ">=5.5.9", 1092 | "symfony/polyfill-mbstring": "~1.1" 1093 | }, 1094 | "require-dev": { 1095 | "symfony/expression-language": "~2.8|~3.0" 1096 | }, 1097 | "type": "library", 1098 | "extra": { 1099 | "branch-alias": { 1100 | "dev-master": "3.3-dev" 1101 | } 1102 | }, 1103 | "autoload": { 1104 | "psr-4": { 1105 | "Symfony\\Component\\HttpFoundation\\": "" 1106 | }, 1107 | "exclude-from-classmap": [ 1108 | "/Tests/" 1109 | ] 1110 | }, 1111 | "notification-url": "https://packagist.org/downloads/", 1112 | "license": [ 1113 | "MIT" 1114 | ], 1115 | "authors": [ 1116 | { 1117 | "name": "Fabien Potencier", 1118 | "email": "fabien@symfony.com" 1119 | }, 1120 | { 1121 | "name": "Symfony Community", 1122 | "homepage": "https://symfony.com/contributors" 1123 | } 1124 | ], 1125 | "description": "Symfony HttpFoundation Component", 1126 | "homepage": "https://symfony.com", 1127 | "time": "2017-07-21T11:04:46+00:00" 1128 | }, 1129 | { 1130 | "name": "symfony/http-kernel", 1131 | "version": "v3.3.6", 1132 | "source": { 1133 | "type": "git", 1134 | "url": "https://github.com/symfony/http-kernel.git", 1135 | "reference": "db10d05f1d95e4168e638db7a81c79616f568ea5" 1136 | }, 1137 | "dist": { 1138 | "type": "zip", 1139 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/db10d05f1d95e4168e638db7a81c79616f568ea5", 1140 | "reference": "db10d05f1d95e4168e638db7a81c79616f568ea5", 1141 | "shasum": "" 1142 | }, 1143 | "require": { 1144 | "php": ">=5.5.9", 1145 | "psr/log": "~1.0", 1146 | "symfony/debug": "~2.8|~3.0", 1147 | "symfony/event-dispatcher": "~2.8|~3.0", 1148 | "symfony/http-foundation": "~3.3" 1149 | }, 1150 | "conflict": { 1151 | "symfony/config": "<2.8", 1152 | "symfony/dependency-injection": "<3.3", 1153 | "symfony/var-dumper": "<3.3", 1154 | "twig/twig": "<1.34|<2.4,>=2" 1155 | }, 1156 | "require-dev": { 1157 | "psr/cache": "~1.0", 1158 | "symfony/browser-kit": "~2.8|~3.0", 1159 | "symfony/class-loader": "~2.8|~3.0", 1160 | "symfony/config": "~2.8|~3.0", 1161 | "symfony/console": "~2.8|~3.0", 1162 | "symfony/css-selector": "~2.8|~3.0", 1163 | "symfony/dependency-injection": "~3.3", 1164 | "symfony/dom-crawler": "~2.8|~3.0", 1165 | "symfony/expression-language": "~2.8|~3.0", 1166 | "symfony/finder": "~2.8|~3.0", 1167 | "symfony/process": "~2.8|~3.0", 1168 | "symfony/routing": "~2.8|~3.0", 1169 | "symfony/stopwatch": "~2.8|~3.0", 1170 | "symfony/templating": "~2.8|~3.0", 1171 | "symfony/translation": "~2.8|~3.0", 1172 | "symfony/var-dumper": "~3.3" 1173 | }, 1174 | "suggest": { 1175 | "symfony/browser-kit": "", 1176 | "symfony/class-loader": "", 1177 | "symfony/config": "", 1178 | "symfony/console": "", 1179 | "symfony/dependency-injection": "", 1180 | "symfony/finder": "", 1181 | "symfony/var-dumper": "" 1182 | }, 1183 | "type": "library", 1184 | "extra": { 1185 | "branch-alias": { 1186 | "dev-master": "3.3-dev" 1187 | } 1188 | }, 1189 | "autoload": { 1190 | "psr-4": { 1191 | "Symfony\\Component\\HttpKernel\\": "" 1192 | }, 1193 | "exclude-from-classmap": [ 1194 | "/Tests/" 1195 | ] 1196 | }, 1197 | "notification-url": "https://packagist.org/downloads/", 1198 | "license": [ 1199 | "MIT" 1200 | ], 1201 | "authors": [ 1202 | { 1203 | "name": "Fabien Potencier", 1204 | "email": "fabien@symfony.com" 1205 | }, 1206 | { 1207 | "name": "Symfony Community", 1208 | "homepage": "https://symfony.com/contributors" 1209 | } 1210 | ], 1211 | "description": "Symfony HttpKernel Component", 1212 | "homepage": "https://symfony.com", 1213 | "time": "2017-08-01T10:25:59+00:00" 1214 | }, 1215 | { 1216 | "name": "symfony/options-resolver", 1217 | "version": "v3.3.6", 1218 | "source": { 1219 | "type": "git", 1220 | "url": "https://github.com/symfony/options-resolver.git", 1221 | "reference": "ff48982d295bcac1fd861f934f041ebc73ae40f0" 1222 | }, 1223 | "dist": { 1224 | "type": "zip", 1225 | "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ff48982d295bcac1fd861f934f041ebc73ae40f0", 1226 | "reference": "ff48982d295bcac1fd861f934f041ebc73ae40f0", 1227 | "shasum": "" 1228 | }, 1229 | "require": { 1230 | "php": ">=5.5.9" 1231 | }, 1232 | "type": "library", 1233 | "extra": { 1234 | "branch-alias": { 1235 | "dev-master": "3.3-dev" 1236 | } 1237 | }, 1238 | "autoload": { 1239 | "psr-4": { 1240 | "Symfony\\Component\\OptionsResolver\\": "" 1241 | }, 1242 | "exclude-from-classmap": [ 1243 | "/Tests/" 1244 | ] 1245 | }, 1246 | "notification-url": "https://packagist.org/downloads/", 1247 | "license": [ 1248 | "MIT" 1249 | ], 1250 | "authors": [ 1251 | { 1252 | "name": "Fabien Potencier", 1253 | "email": "fabien@symfony.com" 1254 | }, 1255 | { 1256 | "name": "Symfony Community", 1257 | "homepage": "https://symfony.com/contributors" 1258 | } 1259 | ], 1260 | "description": "Symfony OptionsResolver Component", 1261 | "homepage": "https://symfony.com", 1262 | "keywords": [ 1263 | "config", 1264 | "configuration", 1265 | "options" 1266 | ], 1267 | "time": "2017-04-12T14:14:56+00:00" 1268 | }, 1269 | { 1270 | "name": "symfony/polyfill-mbstring", 1271 | "version": "v1.5.0", 1272 | "source": { 1273 | "type": "git", 1274 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1275 | "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803" 1276 | }, 1277 | "dist": { 1278 | "type": "zip", 1279 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7c8fae0ac1d216eb54349e6a8baa57d515fe8803", 1280 | "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803", 1281 | "shasum": "" 1282 | }, 1283 | "require": { 1284 | "php": ">=5.3.3" 1285 | }, 1286 | "suggest": { 1287 | "ext-mbstring": "For best performance" 1288 | }, 1289 | "type": "library", 1290 | "extra": { 1291 | "branch-alias": { 1292 | "dev-master": "1.5-dev" 1293 | } 1294 | }, 1295 | "autoload": { 1296 | "psr-4": { 1297 | "Symfony\\Polyfill\\Mbstring\\": "" 1298 | }, 1299 | "files": [ 1300 | "bootstrap.php" 1301 | ] 1302 | }, 1303 | "notification-url": "https://packagist.org/downloads/", 1304 | "license": [ 1305 | "MIT" 1306 | ], 1307 | "authors": [ 1308 | { 1309 | "name": "Nicolas Grekas", 1310 | "email": "p@tchwork.com" 1311 | }, 1312 | { 1313 | "name": "Symfony Community", 1314 | "homepage": "https://symfony.com/contributors" 1315 | } 1316 | ], 1317 | "description": "Symfony polyfill for the Mbstring extension", 1318 | "homepage": "https://symfony.com", 1319 | "keywords": [ 1320 | "compatibility", 1321 | "mbstring", 1322 | "polyfill", 1323 | "portable", 1324 | "shim" 1325 | ], 1326 | "time": "2017-06-14T15:44:48+00:00" 1327 | }, 1328 | { 1329 | "name": "symfony/polyfill-php70", 1330 | "version": "v1.5.0", 1331 | "source": { 1332 | "type": "git", 1333 | "url": "https://github.com/symfony/polyfill-php70.git", 1334 | "reference": "b6482e68974486984f59449ecea1fbbb22ff840f" 1335 | }, 1336 | "dist": { 1337 | "type": "zip", 1338 | "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/b6482e68974486984f59449ecea1fbbb22ff840f", 1339 | "reference": "b6482e68974486984f59449ecea1fbbb22ff840f", 1340 | "shasum": "" 1341 | }, 1342 | "require": { 1343 | "paragonie/random_compat": "~1.0|~2.0", 1344 | "php": ">=5.3.3" 1345 | }, 1346 | "type": "library", 1347 | "extra": { 1348 | "branch-alias": { 1349 | "dev-master": "1.5-dev" 1350 | } 1351 | }, 1352 | "autoload": { 1353 | "psr-4": { 1354 | "Symfony\\Polyfill\\Php70\\": "" 1355 | }, 1356 | "files": [ 1357 | "bootstrap.php" 1358 | ], 1359 | "classmap": [ 1360 | "Resources/stubs" 1361 | ] 1362 | }, 1363 | "notification-url": "https://packagist.org/downloads/", 1364 | "license": [ 1365 | "MIT" 1366 | ], 1367 | "authors": [ 1368 | { 1369 | "name": "Nicolas Grekas", 1370 | "email": "p@tchwork.com" 1371 | }, 1372 | { 1373 | "name": "Symfony Community", 1374 | "homepage": "https://symfony.com/contributors" 1375 | } 1376 | ], 1377 | "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", 1378 | "homepage": "https://symfony.com", 1379 | "keywords": [ 1380 | "compatibility", 1381 | "polyfill", 1382 | "portable", 1383 | "shim" 1384 | ], 1385 | "time": "2017-06-14T15:44:48+00:00" 1386 | }, 1387 | { 1388 | "name": "symfony/polyfill-php72", 1389 | "version": "v1.5.0", 1390 | "source": { 1391 | "type": "git", 1392 | "url": "https://github.com/symfony/polyfill-php72.git", 1393 | "reference": "8abc9097f5001d310f0edba727469c988acc6ea7" 1394 | }, 1395 | "dist": { 1396 | "type": "zip", 1397 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/8abc9097f5001d310f0edba727469c988acc6ea7", 1398 | "reference": "8abc9097f5001d310f0edba727469c988acc6ea7", 1399 | "shasum": "" 1400 | }, 1401 | "require": { 1402 | "php": ">=5.3.3" 1403 | }, 1404 | "type": "library", 1405 | "extra": { 1406 | "branch-alias": { 1407 | "dev-master": "1.5-dev" 1408 | } 1409 | }, 1410 | "autoload": { 1411 | "psr-4": { 1412 | "Symfony\\Polyfill\\Php72\\": "" 1413 | }, 1414 | "files": [ 1415 | "bootstrap.php" 1416 | ] 1417 | }, 1418 | "notification-url": "https://packagist.org/downloads/", 1419 | "license": [ 1420 | "MIT" 1421 | ], 1422 | "authors": [ 1423 | { 1424 | "name": "Nicolas Grekas", 1425 | "email": "p@tchwork.com" 1426 | }, 1427 | { 1428 | "name": "Symfony Community", 1429 | "homepage": "https://symfony.com/contributors" 1430 | } 1431 | ], 1432 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", 1433 | "homepage": "https://symfony.com", 1434 | "keywords": [ 1435 | "compatibility", 1436 | "polyfill", 1437 | "portable", 1438 | "shim" 1439 | ], 1440 | "time": "2017-07-11T13:25:55+00:00" 1441 | }, 1442 | { 1443 | "name": "symfony/process", 1444 | "version": "v3.3.6", 1445 | "source": { 1446 | "type": "git", 1447 | "url": "https://github.com/symfony/process.git", 1448 | "reference": "07432804942b9f6dd7b7377faf9920af5f95d70a" 1449 | }, 1450 | "dist": { 1451 | "type": "zip", 1452 | "url": "https://api.github.com/repos/symfony/process/zipball/07432804942b9f6dd7b7377faf9920af5f95d70a", 1453 | "reference": "07432804942b9f6dd7b7377faf9920af5f95d70a", 1454 | "shasum": "" 1455 | }, 1456 | "require": { 1457 | "php": ">=5.5.9" 1458 | }, 1459 | "type": "library", 1460 | "extra": { 1461 | "branch-alias": { 1462 | "dev-master": "3.3-dev" 1463 | } 1464 | }, 1465 | "autoload": { 1466 | "psr-4": { 1467 | "Symfony\\Component\\Process\\": "" 1468 | }, 1469 | "exclude-from-classmap": [ 1470 | "/Tests/" 1471 | ] 1472 | }, 1473 | "notification-url": "https://packagist.org/downloads/", 1474 | "license": [ 1475 | "MIT" 1476 | ], 1477 | "authors": [ 1478 | { 1479 | "name": "Fabien Potencier", 1480 | "email": "fabien@symfony.com" 1481 | }, 1482 | { 1483 | "name": "Symfony Community", 1484 | "homepage": "https://symfony.com/contributors" 1485 | } 1486 | ], 1487 | "description": "Symfony Process Component", 1488 | "homepage": "https://symfony.com", 1489 | "time": "2017-07-13T13:05:09+00:00" 1490 | }, 1491 | { 1492 | "name": "symfony/routing", 1493 | "version": "v3.3.6", 1494 | "source": { 1495 | "type": "git", 1496 | "url": "https://github.com/symfony/routing.git", 1497 | "reference": "4aee1a917fd4859ff8b51b9fd1dfb790a5ecfa26" 1498 | }, 1499 | "dist": { 1500 | "type": "zip", 1501 | "url": "https://api.github.com/repos/symfony/routing/zipball/4aee1a917fd4859ff8b51b9fd1dfb790a5ecfa26", 1502 | "reference": "4aee1a917fd4859ff8b51b9fd1dfb790a5ecfa26", 1503 | "shasum": "" 1504 | }, 1505 | "require": { 1506 | "php": ">=5.5.9" 1507 | }, 1508 | "conflict": { 1509 | "symfony/config": "<2.8", 1510 | "symfony/dependency-injection": "<3.3", 1511 | "symfony/yaml": "<3.3" 1512 | }, 1513 | "require-dev": { 1514 | "doctrine/annotations": "~1.0", 1515 | "doctrine/common": "~2.2", 1516 | "psr/log": "~1.0", 1517 | "symfony/config": "~2.8|~3.0", 1518 | "symfony/dependency-injection": "~3.3", 1519 | "symfony/expression-language": "~2.8|~3.0", 1520 | "symfony/http-foundation": "~2.8|~3.0", 1521 | "symfony/yaml": "~3.3" 1522 | }, 1523 | "suggest": { 1524 | "doctrine/annotations": "For using the annotation loader", 1525 | "symfony/config": "For using the all-in-one router or any loader", 1526 | "symfony/dependency-injection": "For loading routes from a service", 1527 | "symfony/expression-language": "For using expression matching", 1528 | "symfony/http-foundation": "For using a Symfony Request object", 1529 | "symfony/yaml": "For using the YAML loader" 1530 | }, 1531 | "type": "library", 1532 | "extra": { 1533 | "branch-alias": { 1534 | "dev-master": "3.3-dev" 1535 | } 1536 | }, 1537 | "autoload": { 1538 | "psr-4": { 1539 | "Symfony\\Component\\Routing\\": "" 1540 | }, 1541 | "exclude-from-classmap": [ 1542 | "/Tests/" 1543 | ] 1544 | }, 1545 | "notification-url": "https://packagist.org/downloads/", 1546 | "license": [ 1547 | "MIT" 1548 | ], 1549 | "authors": [ 1550 | { 1551 | "name": "Fabien Potencier", 1552 | "email": "fabien@symfony.com" 1553 | }, 1554 | { 1555 | "name": "Symfony Community", 1556 | "homepage": "https://symfony.com/contributors" 1557 | } 1558 | ], 1559 | "description": "Symfony Routing Component", 1560 | "homepage": "https://symfony.com", 1561 | "keywords": [ 1562 | "router", 1563 | "routing", 1564 | "uri", 1565 | "url" 1566 | ], 1567 | "time": "2017-07-21T17:43:13+00:00" 1568 | }, 1569 | { 1570 | "name": "symfony/stopwatch", 1571 | "version": "v3.3.6", 1572 | "source": { 1573 | "type": "git", 1574 | "url": "https://github.com/symfony/stopwatch.git", 1575 | "reference": "602a15299dc01556013b07167d4f5d3a60e90d15" 1576 | }, 1577 | "dist": { 1578 | "type": "zip", 1579 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/602a15299dc01556013b07167d4f5d3a60e90d15", 1580 | "reference": "602a15299dc01556013b07167d4f5d3a60e90d15", 1581 | "shasum": "" 1582 | }, 1583 | "require": { 1584 | "php": ">=5.5.9" 1585 | }, 1586 | "type": "library", 1587 | "extra": { 1588 | "branch-alias": { 1589 | "dev-master": "3.3-dev" 1590 | } 1591 | }, 1592 | "autoload": { 1593 | "psr-4": { 1594 | "Symfony\\Component\\Stopwatch\\": "" 1595 | }, 1596 | "exclude-from-classmap": [ 1597 | "/Tests/" 1598 | ] 1599 | }, 1600 | "notification-url": "https://packagist.org/downloads/", 1601 | "license": [ 1602 | "MIT" 1603 | ], 1604 | "authors": [ 1605 | { 1606 | "name": "Fabien Potencier", 1607 | "email": "fabien@symfony.com" 1608 | }, 1609 | { 1610 | "name": "Symfony Community", 1611 | "homepage": "https://symfony.com/contributors" 1612 | } 1613 | ], 1614 | "description": "Symfony Stopwatch Component", 1615 | "homepage": "https://symfony.com", 1616 | "time": "2017-04-12T14:14:56+00:00" 1617 | }, 1618 | { 1619 | "name": "tuupola/base62", 1620 | "version": "0.8.0", 1621 | "source": { 1622 | "type": "git", 1623 | "url": "https://github.com/tuupola/base62.git", 1624 | "reference": "5218b96d005e43124ae9d763efb091ee20505ae9" 1625 | }, 1626 | "dist": { 1627 | "type": "zip", 1628 | "url": "https://api.github.com/repos/tuupola/base62/zipball/5218b96d005e43124ae9d763efb091ee20505ae9", 1629 | "reference": "5218b96d005e43124ae9d763efb091ee20505ae9", 1630 | "shasum": "" 1631 | }, 1632 | "require": { 1633 | "php": "^5.5 || ^7.0" 1634 | }, 1635 | "require-dev": { 1636 | "paragonie/random_compat": "^2.0", 1637 | "phpbench/phpbench": "^0.13.0", 1638 | "phpunit/phpunit": "^4.8", 1639 | "squizlabs/php_codesniffer": "^2.5" 1640 | }, 1641 | "type": "library", 1642 | "autoload": { 1643 | "psr-4": { 1644 | "Tuupola\\": "src" 1645 | } 1646 | }, 1647 | "notification-url": "https://packagist.org/downloads/", 1648 | "license": [ 1649 | "MIT" 1650 | ], 1651 | "authors": [ 1652 | { 1653 | "name": "Mika Tuupola", 1654 | "email": "tuupola@appelsiini.net", 1655 | "homepage": "http://www.appelsiini.net/", 1656 | "role": "Developer" 1657 | } 1658 | ], 1659 | "description": "Base62 encoder and decoder for arbitrary data", 1660 | "homepage": "https://github.com/tuupola/base62", 1661 | "keywords": [ 1662 | "base62" 1663 | ], 1664 | "time": "2017-03-12T07:14:17+00:00" 1665 | }, 1666 | { 1667 | "name": "yay/yay", 1668 | "version": "0.2.0", 1669 | "source": { 1670 | "type": "git", 1671 | "url": "https://github.com/marcioAlmada/yay.git", 1672 | "reference": "9013a0a1c4d08eb197d8afec009652d90233ffe5" 1673 | }, 1674 | "dist": { 1675 | "type": "zip", 1676 | "url": "https://api.github.com/repos/marcioAlmada/yay/zipball/9013a0a1c4d08eb197d8afec009652d90233ffe5", 1677 | "reference": "9013a0a1c4d08eb197d8afec009652d90233ffe5", 1678 | "shasum": "" 1679 | }, 1680 | "require": { 1681 | "ext-mbstring": "*", 1682 | "ext-tokenizer": "*", 1683 | "nikic/php-parser": "^2.1|^3.0", 1684 | "php": "7.*" 1685 | }, 1686 | "require-dev": { 1687 | "phpunit/phpunit": "~5.2" 1688 | }, 1689 | "bin": [ 1690 | "bin/yay", 1691 | "bin/yay-pretty" 1692 | ], 1693 | "type": "library", 1694 | "autoload": { 1695 | "files": [ 1696 | "src/parsers.php", 1697 | "src/expanders.php" 1698 | ], 1699 | "psr-4": { 1700 | "Yay\\": "src/" 1701 | } 1702 | }, 1703 | "notification-url": "https://packagist.org/downloads/", 1704 | "license": [ 1705 | "MIT" 1706 | ], 1707 | "authors": [ 1708 | { 1709 | "name": "Márcio Almada", 1710 | "email": "marcio3w@gmail.com", 1711 | "homepage": "https://github.com/marcioAlmada" 1712 | } 1713 | ], 1714 | "description": "A high level PHP Pre-Processor", 1715 | "keywords": [ 1716 | "language", 1717 | "pre-processor", 1718 | "syntax" 1719 | ], 1720 | "time": "2017-05-08T03:18:20+00:00" 1721 | } 1722 | ], 1723 | "packages-dev": [], 1724 | "aliases": [], 1725 | "minimum-stability": "stable", 1726 | "stability-flags": [], 1727 | "prefer-stable": false, 1728 | "prefer-lowest": false, 1729 | "platform": [], 1730 | "platform-dev": [] 1731 | } 1732 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/preprocess/example-phpx/2010aae8e944afc18b486bde96960dc2f0bb7a2b/demo.gif -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | register(new SessionServiceProvider()); 13 | 14 | $app->get("/", (Request $request) => { 15 | $session = $request->getSession(); 16 | 17 | $tasks = $session->get("tasks", []); 18 | 19 | return ( 20 | 21 | {$tasks} 22 | 23 | 24 | ); 25 | }); 26 | 27 | $app->post("/add", (Request $request) => { 28 | $session = $request->getSession(); 29 | 30 | $id = $session->get("id", 0); 31 | $tasks = $session->get("tasks", []); 32 | 33 | $tasks[] = [ 34 | "id" => $id++, 35 | "text" => $request->get("text"), 36 | ]; 37 | 38 | $session->set("id", $id); 39 | $session->set("tasks", $tasks); 40 | 41 | return $app->redirect("/"); 42 | }); 43 | 44 | $app->get("/remove/{id}", (Request $request, $id) => { 45 | $session = $request->getSession(); 46 | 47 | $tasks = $session->get("tasks", []); 48 | 49 | $tasks = array_filter($tasks, ($task) => { 50 | return $task["id"] !== (int) $id; 51 | }); 52 | 53 | $session->set("tasks", $tasks); 54 | 55 | return $app->redirect("/"); 56 | }); 57 | 58 | $app->run(); 59 | --------------------------------------------------------------------------------