diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 00000000..5f820b24
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+# These are supported funding model platforms
+github: [phpgt]
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 6a451fa7..57986ce2 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -3,44 +3,64 @@ name: CI
on: [push]
jobs:
- build:
+ composer:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- - uses: php-actions/composer@v2
- - name: Upload build for test runner
+
+ - name: Cache Composer dependencies
+ uses: actions/cache@v2
+ with:
+ path: /tmp/composer-cache
+ key: ${{ runner.os }}-${{ hashFiles('**/composer.lock') }}
+
+ - uses: php-actions/composer@v6
+
+ - name: Archive build
+ run: mkdir /tmp/github-actions/ && tar -cvf /tmp/github-actions/build.tar ./
+
+ - name: Upload build archive for test runners
uses: actions/upload-artifact@v2
with:
name: build-artifact
- path: ./
+ path: /tmp/github-actions
phpunit:
runs-on: ubuntu-latest
- needs: [build]
+ needs: [composer]
steps:
- uses: actions/download-artifact@v2
with:
name: build-artifact
- path: ./
+ path: /tmp/github-actions
+
+ - name: Extract build archive
+ run: tar -xvf /tmp/github-actions/build.tar ./
- name: PHP Unit tests
- uses: php-actions/phpunit@v9
+ uses: php-actions/phpunit@v3
with:
+ php_version: 8.0
+ php_extensions: xdebug
configuration: test/phpunit/phpunit.xml
+ bootstrap: vendor/autoload.php
phpstan:
runs-on: ubuntu-latest
- needs: [build]
+ needs: [composer]
steps:
- uses: actions/download-artifact@v2
with:
name: build-artifact
- path: ./
+ path: /tmp/github-actions
+
+ - name: Extract build archive
+ run: tar -xvf /tmp/github-actions/build.tar ./
- name: PHP Static Analysis
- uses: php-actions/phpstan@master
+ uses: php-actions/phpstan@v3
with:
- path: src/
\ No newline at end of file
+ path: src/
diff --git a/.scrutinizer.yml b/.scrutinizer.yml
index a2d2669e..3f7485fd 100644
--- a/.scrutinizer.yml
+++ b/.scrutinizer.yml
@@ -1,14 +1,25 @@
build:
environment:
- php:
- version: 7.4.0
- tests:
- override:
- -
- command: 'vendor/bin/phpunit test/unit --coverage-clover coverage --whitelist src'
- coverage:
- file: 'coverage'
- format: 'php-clover'
+ php: 8.0.0
+
+ nodes:
+ analysis:
+ tests:
+ override:
+ - php-scrutinizer-run
+
+ tests-and-coverage:
+ environment:
+ php:
+ ini:
+ "xdebug.mode": coverage
+ tests:
+ override:
+ - phpcs-run ./src
+ - command: "vendor/bin/phpunit test/phpunit --coverage-clover test/phpunit/_coverage --whitelist src"
+ coverage:
+ file: "test/phpunit/_coverage"
+ format: "php-clover"
checks:
php:
@@ -18,4 +29,4 @@ checks:
filter:
excluded_paths:
- test/*
- - vendor/*
\ No newline at end of file
+ - vendor/*
diff --git a/build.default.json b/build.default.json
index 52a31119..5f2125f7 100644
--- a/build.default.json
+++ b/build.default.json
@@ -3,12 +3,11 @@
"require": {
"node": "*",
"babel": "*",
- "webpack": "*",
- "webpack-cli": "*"
+ "webpack": "*"
},
"execute": {
- "command": "webpack-cli",
- "arguments": ["build", "--mode=development", "--devtool=source-map", "--entry=./script/main.es6", "--output-filename=script.js", "--output-path=./www"]
+ "command": "webpack",
+ "arguments": ["--entry","./script/main.es6", "--output-path", "./www", "--output-filename", "script.js", "--devtool", "source-map", "--mode", "production"]
}
},
diff --git a/composer.json b/composer.json
index 97a76a18..94f9a2c3 100644
--- a/composer.json
+++ b/composer.json
@@ -13,21 +13,17 @@
"ext-dom": "*",
"ext-json": "*",
"php": ">=8.0",
- "phpgt/build": "^1.0",
- "phpgt/cli": "^1.3",
+
"phpgt/config": "^1.0",
- "phpgt/cookie": "^1.0",
- "phpgt/cron": "^1.0",
- "phpgt/csrf": "^1.6",
- "phpgt/database": "^1.1",
- "phpgt/dom": "v3.0.0",
- "phpgt/domtemplate": "^1.3 || ^2.0",
- "phpgt/fetch": "^1.0",
+ "phpgt/csrf": "^1.7.2",
+ "phpgt/dom": "^3.0.0",
+ "phpgt/domtemplate": "^2.0",
+ "phpgt/database": "^1.4",
"phpgt/http": "^1.0",
- "phpgt/input": "^1.1",
- "phpgt/protectedglobal": "^1.0",
- "phpgt/server": "^1.1",
- "phpgt/session": "^1.1",
+ "phpgt/logger": "^1.0",
+ "phpgt/routing": "^1.0",
+ "phpgt/servicecontainer": "^1.1.1",
+ "phpgt/session": "^1.1.2",
"phpgt/sync": "^1.2",
"psr/http-server-middleware": "^1.0",
@@ -35,10 +31,8 @@
},
"require-dev": {
- "phpunit/phpunit": "8.* || 9.*",
- "behat/behat": "^3.0.5",
- "behat/mink-extension": "^2.3",
- "behat/mink-goutte-driver": "^1.2"
+ "phpstan/phpstan": "^1.4",
+ "phpunit/phpunit": "^9.5"
},
"autoload": {
@@ -63,5 +57,12 @@
"router",
"toolbox",
"prototype"
+ ],
+
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/PhpGt"
+ }
]
}
diff --git a/composer.lock b/composer.lock
index 0ab9986b..380d7cb6 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,117 +4,87 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "9259b8604fe99f00ba9567984803eef7",
+ "content-hash": "8930af8bf57e48f52900c6683b28d8d0",
"packages": [
{
- "name": "composer/semver",
- "version": "1.7.2",
+ "name": "magicalex/write-ini-file",
+ "version": "v1.2.4",
"source": {
"type": "git",
- "url": "https://github.com/composer/semver.git",
- "reference": "647490bbcaf7fc4891c58f47b825eb99d19c377a"
+ "url": "https://github.com/Magicalex/WriteiniFile.git",
+ "reference": "3a933e8222ed2b0ff724c2d4278666fa257e42ac"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/647490bbcaf7fc4891c58f47b825eb99d19c377a",
- "reference": "647490bbcaf7fc4891c58f47b825eb99d19c377a",
+ "url": "https://api.github.com/repos/Magicalex/WriteiniFile/zipball/3a933e8222ed2b0ff724c2d4278666fa257e42ac",
+ "reference": "3a933e8222ed2b0ff724c2d4278666fa257e42ac",
"shasum": ""
},
"require": {
- "php": "^5.3.2 || ^7.0 || ^8.0"
+ "php": ">=5.6.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.5 || ^5.0.5"
+ "php-coveralls/php-coveralls": "2.1.0",
+ "phpunit/phpunit": "5.7.*"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
"autoload": {
"psr-4": {
- "Composer\\Semver\\": "src"
+ "WriteiniFile\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "GPL-3.0"
],
"authors": [
{
- "name": "Nils Adermann",
- "email": "naderman@naderman.de",
- "homepage": "http://www.naderman.de"
- },
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- },
- {
- "name": "Rob Bast",
- "email": "rob.bast@gmail.com",
- "homepage": "http://robbast.nl"
+ "name": "magicalex",
+ "email": "magicalex@mondedie.fr"
}
],
- "description": "Semver library that offers utilities, version constraint parsing and validation.",
+ "description": "Write-ini-file php library for create, remove, erase, add, and update ini file",
+ "homepage": "https://github.com/Magicalex/WriteIniFile",
"keywords": [
- "semantic",
- "semver",
- "validation",
- "versioning"
+ "file",
+ "ini",
+ "write",
+ "write_ini_file"
],
"support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/1.7.2"
+ "issues": "https://github.com/Magicalex/WriteiniFile/issues",
+ "source": "https://github.com/Magicalex/WriteiniFile/tree/master"
},
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2020-12-03T15:47:16+00:00"
+ "time": "2018-09-09T12:40:38+00:00"
},
{
- "name": "dragonmantank/cron-expression",
- "version": "v2.3.1",
+ "name": "phpgt/cli",
+ "version": "v1.3.2",
"source": {
"type": "git",
- "url": "https://github.com/dragonmantank/cron-expression.git",
- "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2"
+ "url": "https://github.com/PhpGt/Cli.git",
+ "reference": "3f00088f76225088602e6d9faa1cf90fbd2205d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/65b2d8ee1f10915efb3b55597da3404f096acba2",
- "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2",
+ "url": "https://api.github.com/repos/PhpGt/Cli/zipball/3f00088f76225088602e6d9faa1cf90fbd2205d3",
+ "reference": "3f00088f76225088602e6d9faa1cf90fbd2205d3",
"shasum": ""
},
"require": {
- "php": "^7.0|^8.0"
+ "ext-json": "*",
+ "ext-readline": "*",
+ "php": ">=8.0",
+ "phpgt/daemon": "1.*"
},
"require-dev": {
- "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0"
+ "phpstan/phpstan": ">=0.12.64",
+ "phpunit/phpunit": "9.*"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.3-dev"
- }
- },
"autoload": {
"psr-4": {
- "Cron\\": "src/Cron/"
+ "Gt\\Cli\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -123,117 +93,111 @@
],
"authors": [
{
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "Chris Tankersley",
- "email": "chris@ctankersley.com",
- "homepage": "https://github.com/dragonmantank"
+ "name": "Greg Bowler",
+ "email": "greg.bowler@g105b.com"
}
],
- "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
+ "description": "Command line interface builder.",
"keywords": [
- "cron",
- "schedule"
+ "cli",
+ "phpgt",
+ "terminal",
+ "webengine"
],
"support": {
- "issues": "https://github.com/dragonmantank/cron-expression/issues",
- "source": "https://github.com/dragonmantank/cron-expression/tree/v2.3.1"
+ "issues": "https://github.com/PhpGt/Cli/issues",
+ "source": "https://github.com/PhpGt/Cli/tree/v1.3.2"
},
"funding": [
{
- "url": "https://github.com/dragonmantank",
+ "url": "https://github.com/sponsors/PhpGt",
"type": "github"
}
],
- "time": "2020-10-13T00:52:37+00:00"
+ "time": "2021-06-15T19:01:44+00:00"
},
{
- "name": "magicalex/write-ini-file",
- "version": "v1.2.4",
+ "name": "phpgt/config",
+ "version": "v1.1.0",
"source": {
"type": "git",
- "url": "https://github.com/Magicalex/WriteiniFile.git",
- "reference": "3a933e8222ed2b0ff724c2d4278666fa257e42ac"
+ "url": "https://github.com/PhpGt/Config.git",
+ "reference": "805bba9ef1cb8e087a04e4601045271f73868a96"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Magicalex/WriteiniFile/zipball/3a933e8222ed2b0ff724c2d4278666fa257e42ac",
- "reference": "3a933e8222ed2b0ff724c2d4278666fa257e42ac",
+ "url": "https://api.github.com/repos/PhpGt/Config/zipball/805bba9ef1cb8e087a04e4601045271f73868a96",
+ "reference": "805bba9ef1cb8e087a04e4601045271f73868a96",
"shasum": ""
},
"require": {
- "php": ">=5.6.0"
+ "magicalex/write-ini-file": "v1.2.4",
+ "php": ">=8.0",
+ "phpgt/typesafegetter": "1.*"
},
"require-dev": {
- "php-coveralls/php-coveralls": "2.1.0",
- "phpunit/phpunit": "5.7.*"
+ "phpstan/phpstan": ">=0.12.64",
+ "phpunit/phpunit": "9.*"
},
+ "bin": [
+ "bin/config-generate"
+ ],
"type": "library",
"autoload": {
"psr-4": {
- "WriteiniFile\\": "src"
+ "Gt\\Config\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "GPL-3.0"
+ "MIT"
],
"authors": [
{
- "name": "magicalex",
- "email": "magicalex@mondedie.fr"
+ "name": "Greg Bowler",
+ "email": "greg.bowler@g105b.com"
}
],
- "description": "Write-ini-file php library for create, remove, erase, add, and update ini file",
- "homepage": "https://github.com/Magicalex/WriteIniFile",
- "keywords": [
- "file",
- "ini",
- "write",
- "write_ini_file"
- ],
+ "description": "Manage configuration with ini files and environment variables.",
"support": {
- "issues": "https://github.com/Magicalex/WriteiniFile/issues",
- "source": "https://github.com/Magicalex/WriteiniFile/tree/master"
+ "issues": "https://github.com/PhpGt/Config/issues",
+ "source": "https://github.com/PhpGt/Config/tree/v1.1.0"
},
- "time": "2018-09-09T12:40:38+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/PhpGt",
+ "type": "github"
+ }
+ ],
+ "time": "2021-01-30T14:24:07+00:00"
},
{
- "name": "php-http/httplug",
- "version": "2.2.0",
+ "name": "phpgt/csrf",
+ "version": "v1.7.2",
"source": {
"type": "git",
- "url": "https://github.com/php-http/httplug.git",
- "reference": "191a0a1b41ed026b717421931f8d3bd2514ffbf9"
+ "url": "https://github.com/PhpGt/Csrf.git",
+ "reference": "301ede2ac2ca158e7e892eda7fc4a8752574d9ea"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/httplug/zipball/191a0a1b41ed026b717421931f8d3bd2514ffbf9",
- "reference": "191a0a1b41ed026b717421931f8d3bd2514ffbf9",
+ "url": "https://api.github.com/repos/PhpGt/Csrf/zipball/301ede2ac2ca158e7e892eda7fc4a8752574d9ea",
+ "reference": "301ede2ac2ca158e7e892eda7fc4a8752574d9ea",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0",
- "php-http/promise": "^1.1",
- "psr/http-client": "^1.0",
- "psr/http-message": "^1.0"
+ "php": ">=7.4",
+ "phpgt/dom": "^3.0.0",
+ "phpgt/session": "1.*"
},
"require-dev": {
- "friends-of-phpspec/phpspec-code-coverage": "^4.1",
- "phpspec/phpspec": "^5.1 || ^6.0"
+ "phpstan/phpstan": ">=0.12.64",
+ "phpunit/phpunit": "9.*"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.x-dev"
- }
- },
"autoload": {
"psr-4": {
- "Http\\Client\\": "src/"
+ "Gt\\Csrf\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -242,57 +206,56 @@
],
"authors": [
{
- "name": "Eric GELOEN",
- "email": "geloen.eric@gmail.com"
+ "name": "James Fellows",
+ "email": "mrfellows@gmail.com",
+ "role": "Developer"
},
{
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com",
- "homepage": "https://sagikazarmark.hu"
+ "name": "Greg Bowler",
+ "email": "greg.bowler@g105b.com",
+ "role": "Developer"
}
],
- "description": "HTTPlug, the HTTP client abstraction for PHP",
- "homepage": "http://httplug.io",
- "keywords": [
- "client",
- "http"
- ],
+ "description": "Automatic protection from Cross-Site Request Forgery.",
"support": {
- "issues": "https://github.com/php-http/httplug/issues",
- "source": "https://github.com/php-http/httplug/tree/master"
+ "issues": "https://github.com/PhpGt/Csrf/issues",
+ "source": "https://github.com/PhpGt/Csrf/tree/v1.7.2"
},
- "time": "2020-07-13T15:43:23+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/PhpGt",
+ "type": "github"
+ }
+ ],
+ "time": "2021-10-17T17:24:40+00:00"
},
{
- "name": "php-http/promise",
- "version": "1.1.0",
+ "name": "phpgt/cssxpath",
+ "version": "v1.1.4",
"source": {
"type": "git",
- "url": "https://github.com/php-http/promise.git",
- "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88"
+ "url": "https://github.com/PhpGt/CssXPath.git",
+ "reference": "7f073ba346c49a339a7b2cda9ccfdb1994c5d271"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
- "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
+ "url": "https://api.github.com/repos/PhpGt/CssXPath/zipball/7f073ba346c49a339a7b2cda9ccfdb1994c5d271",
+ "reference": "7f073ba346c49a339a7b2cda9ccfdb1994c5d271",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0"
+ "php": ">=7.3"
},
"require-dev": {
- "friends-of-phpspec/phpspec-code-coverage": "^4.3.2",
- "phpspec/phpspec": "^5.1.2 || ^6.2"
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "phpstan/phpstan": ">=0.12.42",
+ "phpunit/phpunit": "^9.5"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-dev"
- }
- },
"autoload": {
"psr-4": {
- "Http\\Promise\\": "src/"
+ "Gt\\CssXPath\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -301,96 +264,98 @@
],
"authors": [
{
- "name": "Joel Wurtz",
- "email": "joel.wurtz@gmail.com"
- },
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com"
+ "name": "Greg Bowler",
+ "email": "greg.bowler@g105b.com",
+ "homepage": "https://www.g105b.com",
+ "role": "Developer"
}
],
- "description": "Promise used for asynchronous HTTP requests",
- "homepage": "http://httplug.io",
- "keywords": [
- "promise"
- ],
+ "description": "Convert CSS selectors to XPath queries.",
"support": {
- "issues": "https://github.com/php-http/promise/issues",
- "source": "https://github.com/php-http/promise/tree/1.1.0"
+ "issues": "https://github.com/PhpGt/CssXPath/issues",
+ "source": "https://github.com/PhpGt/CssXPath/tree/v1.1.4"
},
- "time": "2020-07-07T09:29:14+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/PhpGt",
+ "type": "github"
+ }
+ ],
+ "time": "2021-11-13T15:40:44+00:00"
},
{
- "name": "phpgt/build",
- "version": "v1.0.1",
+ "name": "phpgt/daemon",
+ "version": "v1.1.2",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Build.git",
- "reference": "1c88657e01e3fed1df7df50c1f9df825290d1250"
+ "url": "https://github.com/PhpGt/Daemon.git",
+ "reference": "6490df99a22818149f30e3af408002ea7f73e035"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Build/zipball/1c88657e01e3fed1df7df50c1f9df825290d1250",
- "reference": "1c88657e01e3fed1df7df50c1f9df825290d1250",
+ "url": "https://api.github.com/repos/PhpGt/Daemon/zipball/6490df99a22818149f30e3af408002ea7f73e035",
+ "reference": "6490df99a22818149f30e3af408002ea7f73e035",
"shasum": ""
},
"require": {
- "composer/semver": "1.*",
- "ext-json": "*",
- "php": ">=7.4",
- "phpgt/cli": "*",
- "webmozart/glob": "4.*"
+ "php": ">=7.4"
},
"require-dev": {
- "phpunit/phpunit": "8.*"
+ "phpstan/phpstan": ">=0.12.42",
+ "phpunit/phpunit": "9.*"
},
- "bin": [
- "bin/build"
- ],
"type": "library",
"autoload": {
"psr-4": {
- "Gt\\Build\\": "./src"
+ "Gt\\Daemon\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Client-side build system for PHP projects.",
+ "description": "Background script execution with cross-platform compatible streaming.",
"support": {
- "issues": "https://github.com/PhpGt/Build/issues",
- "source": "https://github.com/PhpGt/Build/tree/master"
+ "issues": "https://github.com/PhpGt/Daemon/issues",
+ "source": "https://github.com/PhpGt/Daemon/tree/v1.1.2"
},
- "time": "2020-01-16T09:20:54+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/phpgt",
+ "type": "github"
+ }
+ ],
+ "time": "2021-02-02T17:33:16+00:00"
},
{
- "name": "phpgt/cli",
- "version": "v1.3.1",
+ "name": "phpgt/database",
+ "version": "v1.4.0",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Cli.git",
- "reference": "02e25f8c0908f6977bda7ff5ddf1c0af75ba3c4b"
+ "url": "https://github.com/PhpGt/Database.git",
+ "reference": "db929a74e7e57f8424027c8fe685b37c6459db86"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Cli/zipball/02e25f8c0908f6977bda7ff5ddf1c0af75ba3c4b",
- "reference": "02e25f8c0908f6977bda7ff5ddf1c0af75ba3c4b",
+ "url": "https://api.github.com/repos/PhpGt/Database/zipball/db929a74e7e57f8424027c8fe685b37c6459db86",
+ "reference": "db929a74e7e57f8424027c8fe685b37c6459db86",
"shasum": ""
},
"require": {
- "ext-json": "*",
+ "ext-pdo": "*",
"php": ">=7.4",
- "phpgt/daemon": "1.*"
+ "phpgt/cli": "^1.3",
+ "phpgt/config": "^v1.1.0"
},
"require-dev": {
- "phpstan/phpstan": ">=0.12.64",
- "phpunit/phpunit": "9.*"
+ "ext-sqlite3": "*",
+ "phpstan/phpstan": "^0.12",
+ "phpunit/phpunit": "^9.4"
},
+ "bin": [
+ "bin/migrate"
+ ],
"type": "library",
"autoload": {
"psr-4": {
- "Gt\\Cli\\": "./src"
+ "Gt\\Database\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -401,57 +366,60 @@
{
"name": "Greg Bowler",
"email": "greg.bowler@g105b.com"
+ },
+ {
+ "name": "James Fellows",
+ "email": "james.fellows@finanscapes.com"
+ },
+ {
+ "name": "Christopher Paul Shaw",
+ "email": "i-am-in-your-code-stealing-your-lulz@chris-shaw.com"
}
],
- "description": "Command line interface builder.",
- "keywords": [
- "cli",
- "phpgt",
- "terminal",
- "webengine"
- ],
+ "description": "Database API organisation.",
"support": {
- "issues": "https://github.com/PhpGt/Cli/issues",
- "source": "https://github.com/PhpGt/Cli/tree/v1.3.1"
+ "issues": "https://github.com/PhpGt/Database/issues",
+ "source": "https://github.com/PhpGt/Database/tree/v1.4.0"
},
"funding": [
{
- "url": "https://github.com/phpgt",
+ "url": "https://github.com/sponsors/PhpGt",
"type": "github"
}
],
- "time": "2021-02-15T09:40:11+00:00"
+ "time": "2021-09-23T09:07:04+00:00"
},
{
- "name": "phpgt/config",
- "version": "v1.1.0",
+ "name": "phpgt/dom",
+ "version": "v3.0.2",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Config.git",
- "reference": "805bba9ef1cb8e087a04e4601045271f73868a96"
+ "url": "https://github.com/PhpGt/Dom.git",
+ "reference": "762e10859d660d30c159cba3e8af19ec1ae5203c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Config/zipball/805bba9ef1cb8e087a04e4601045271f73868a96",
- "reference": "805bba9ef1cb8e087a04e4601045271f73868a96",
+ "url": "https://api.github.com/repos/PhpGt/Dom/zipball/762e10859d660d30c159cba3e8af19ec1ae5203c",
+ "reference": "762e10859d660d30c159cba3e8af19ec1ae5203c",
"shasum": ""
},
"require": {
- "magicalex/write-ini-file": "v1.2.4",
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
"php": ">=8.0",
- "phpgt/typesafegetter": "1.*"
- },
+ "phpgt/cssxpath": ">=1.1.2",
+ "phpgt/propfunc": "^1.0",
+ "psr/http-message": "^1.0"
+ },
"require-dev": {
- "phpstan/phpstan": ">=0.12.64",
- "phpunit/phpunit": "9.*"
+ "phpstan/phpstan": ">=0.12",
+ "phpunit/phpunit": ">=9.3.8"
},
- "bin": [
- "bin/config-generate"
- ],
"type": "library",
"autoload": {
"psr-4": {
- "Gt\\Config\\": "./src"
+ "Gt\\Dom\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -461,13 +429,55 @@
"authors": [
{
"name": "Greg Bowler",
- "email": "greg.bowler@g105b.com"
+ "email": "greg.bowler@g105b.com",
+ "homepage": "https://www.g105b.com",
+ "role": "Developer"
+ },
+ {
+ "name": "Alvaro Guimaraes",
+ "homepage": "https://github.com/aguimaraes",
+ "role": "Developer"
+ },
+ {
+ "name": "James Fellows",
+ "homepage": "https://github.com/j4m3s",
+ "role": "Developer"
+ },
+ {
+ "name": "Emile Ward",
+ "homepage": "https://github.com/emileward",
+ "role": "Developer"
+ },
+ {
+ "name": "Jelmer Wijnja",
+ "homepage": "https://github.com/Jelmergu",
+ "role": "Developer"
+ },
+ {
+ "name": "Ognjen Petrovic",
+ "homepage": "https://github.com/ognjen-petrovic",
+ "role": "Developer"
+ },
+ {
+ "name": "Jacob Bearden",
+ "homepage": "https://github.com/jacobbearden",
+ "role": "Documentation contributor"
+ },
+ {
+ "name": "Jaroslav Týc",
+ "homepage": "https://www.jaroslavtyc.com/",
+ "role": "Developer"
+ },
+ {
+ "name": "Andrii Beziazychnyi",
+ "homepage": "https://www.atwix.com/",
+ "role": "Developer"
}
],
- "description": "Manage configuration with ini files and environment variables.",
+ "description": "The modern DOM API for PHP projects.",
"support": {
- "issues": "https://github.com/PhpGt/Config/issues",
- "source": "https://github.com/PhpGt/Config/tree/v1.1.0"
+ "issues": "https://github.com/PhpGt/Dom/issues",
+ "source": "https://github.com/PhpGt/Dom/tree/v3.0.2"
},
"funding": [
{
@@ -475,115 +485,117 @@
"type": "github"
}
],
- "time": "2021-01-30T14:24:07+00:00"
+ "time": "2022-01-30T16:47:45+00:00"
},
{
- "name": "phpgt/cookie",
- "version": "v1.0.2",
+ "name": "phpgt/domtemplate",
+ "version": "v2.2.3",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Cookie.git",
- "reference": "dd811b6f04becc7c1f8524d84ad02e4635f4a94e"
+ "url": "https://github.com/PhpGt/DomTemplate.git",
+ "reference": "d8ea73c17a81ab54bea671701b324650f4d7dc48"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Cookie/zipball/dd811b6f04becc7c1f8524d84ad02e4635f4a94e",
- "reference": "dd811b6f04becc7c1f8524d84ad02e4635f4a94e",
+ "url": "https://api.github.com/repos/PhpGt/DomTemplate/zipball/d8ea73c17a81ab54bea671701b324650f4d7dc48",
+ "reference": "d8ea73c17a81ab54bea671701b324650f4d7dc48",
"shasum": ""
},
"require": {
- "php": ">=7.2"
+ "ext-dom": "*",
+ "php": ">=8.0",
+ "phpgt/dom": "^3.0.0"
},
"require-dev": {
- "phpunit/phpunit": "8.*"
+ "phpstan/phpstan": "~1.1",
+ "phpunit/phpunit": "~9.5"
},
"type": "library",
"autoload": {
"psr-4": {
- "Gt\\Cookie\\": "./src"
+ "Gt\\DomTemplate\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "authors": [
+ "description": "Bind dynamic data to reusable HTML components.",
+ "support": {
+ "issues": "https://github.com/PhpGt/DomTemplate/issues",
+ "source": "https://github.com/PhpGt/DomTemplate/tree/v2.2.3"
+ },
+ "funding": [
{
- "name": "Greg Bowler",
- "email": "greg.bowler@g105b.com"
+ "url": "https://github.com/sponsors/PhpGt",
+ "type": "github"
}
],
- "description": "Object oriented cookie handler.",
- "support": {
- "issues": "https://github.com/PhpGt/Cookie/issues",
- "source": "https://github.com/PhpGt/Cookie/tree/v1.0.2"
- },
- "time": "2019-07-17T20:11:11+00:00"
+ "time": "2022-01-30T16:25:30+00:00"
},
{
- "name": "phpgt/cron",
- "version": "v1.0.2",
+ "name": "phpgt/http",
+ "version": "v1.1.4",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Cron.git",
- "reference": "a2eb61546c617b8880c90207bad2e6918d32bedb"
+ "url": "https://github.com/PhpGt/Http.git",
+ "reference": "80ed7269050bc0f2de2402c5461711dd2418f55f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Cron/zipball/a2eb61546c617b8880c90207bad2e6918d32bedb",
- "reference": "a2eb61546c617b8880c90207bad2e6918d32bedb",
+ "url": "https://api.github.com/repos/PhpGt/Http/zipball/80ed7269050bc0f2de2402c5461711dd2418f55f",
+ "reference": "80ed7269050bc0f2de2402c5461711dd2418f55f",
"shasum": ""
},
"require": {
- "dragonmantank/cron-expression": "^2.2",
- "php": ">=7.4",
- "phpgt/cli": "1.*"
+ "php": ">=8.0",
+ "phpgt/input": "^v1",
+ "psr/http-message": "^v1.0.1",
+ "willdurand/negotiation": "v3.0.*"
},
"require-dev": {
"phpstan/phpstan": ">=0.12.64",
"phpunit/phpunit": "9.*"
},
- "bin": [
- "bin/cron"
- ],
"type": "library",
"autoload": {
"psr-4": {
- "Gt\\Cron\\": "./src/"
+ "Gt\\Http\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
- "description": "Run scripts or static functions at regular intervals.",
+ "license": [
+ "MIT"
+ ],
+ "description": "PSR-7 HTTP message implementation.",
"support": {
- "issues": "https://github.com/PhpGt/Cron/issues",
- "source": "https://github.com/PhpGt/Cron/tree/v1.0.2"
+ "issues": "https://github.com/PhpGt/Http/issues",
+ "source": "https://github.com/PhpGt/Http/tree/v1.1.4"
},
"funding": [
{
- "url": "https://github.com/phpgt",
+ "url": "https://github.com/sponsors/PhpGt",
"type": "github"
}
],
- "time": "2021-02-15T09:58:17+00:00"
+ "time": "2021-06-23T15:45:09+00:00"
},
{
- "name": "phpgt/csrf",
- "version": "v1.7.0",
+ "name": "phpgt/input",
+ "version": "v1.1.2",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Csrf.git",
- "reference": "f98b9eb71201bbc7ee94ad81b1fe13bde292cdd6"
+ "url": "https://github.com/PhpGt/Input.git",
+ "reference": "ae78931ffd5c4800f362db61bd86f8e545733e86"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Csrf/zipball/f98b9eb71201bbc7ee94ad81b1fe13bde292cdd6",
- "reference": "f98b9eb71201bbc7ee94ad81b1fe13bde292cdd6",
+ "url": "https://api.github.com/repos/PhpGt/Input/zipball/ae78931ffd5c4800f362db61bd86f8e545733e86",
+ "reference": "ae78931ffd5c4800f362db61bd86f8e545733e86",
"shasum": ""
},
"require": {
- "php": ">=7.2",
- "phpgt/dom": "*",
- "phpgt/session": "*"
+ "phpgt/http": "*"
},
"require-dev": {
"phpunit/phpunit": "8.*"
@@ -591,7 +603,45 @@
"type": "library",
"autoload": {
"psr-4": {
- "Gt\\Csrf\\": "./src"
+ "Gt\\Input\\": "./src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Encapsulated user input.",
+ "support": {
+ "issues": "https://github.com/PhpGt/Input/issues",
+ "source": "https://github.com/PhpGt/Input/tree/v1.1.2"
+ },
+ "time": "2019-11-29T11:22:35+00:00"
+ },
+ {
+ "name": "phpgt/logger",
+ "version": "v1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PhpGt/Logger.git",
+ "reference": "9cbb7c986941bff513aedf80dfa256497aff8dd2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PhpGt/Logger/zipball/9cbb7c986941bff513aedf80dfa256497aff8dd2",
+ "reference": "9cbb7c986941bff513aedf80dfa256497aff8dd2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "phpstan/phpstan": ">=0.12.64",
+ "phpunit/phpunit": "9.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Gt\\Logger\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -599,51 +649,49 @@
"MIT"
],
"authors": [
- {
- "name": "James Fellows",
- "email": "mrfellows@gmail.com",
- "role": "Developer"
- },
{
"name": "Greg Bowler",
- "email": "greg.bowler@g105b.com",
- "role": "Developer"
+ "email": "greg.bowler@g105b.com"
}
],
- "description": "Automatic protection from Cross-Site Request Forgery.",
+ "description": "PSR-3 logger and implementation.",
"support": {
- "issues": "https://github.com/PhpGt/Csrf/issues",
- "source": "https://github.com/PhpGt/Csrf/tree/master"
+ "issues": "https://github.com/PhpGt/Logger/issues",
+ "source": "https://github.com/PhpGt/Logger/tree/v1.0.0"
},
- "time": "2020-05-06T17:44:52+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/PhpGt",
+ "type": "github"
+ }
+ ],
+ "time": "2021-09-21T14:18:11+00:00"
},
{
- "name": "phpgt/cssxpath",
- "version": "v1.1.3",
+ "name": "phpgt/propfunc",
+ "version": "v1.0.1",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/CssXPath.git",
- "reference": "64813864ab00e52cbde2cd517d6c6235b7f9ac69"
+ "url": "https://github.com/PhpGt/PropFunc.git",
+ "reference": "091213649e89ff22d1ef640b46fbee5215c65520"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/CssXPath/zipball/64813864ab00e52cbde2cd517d6c6235b7f9ac69",
- "reference": "64813864ab00e52cbde2cd517d6c6235b7f9ac69",
+ "url": "https://api.github.com/repos/PhpGt/PropFunc/zipball/091213649e89ff22d1ef640b46fbee5215c65520",
+ "reference": "091213649e89ff22d1ef640b46fbee5215c65520",
"shasum": ""
},
"require": {
- "php": ">=7.4"
+ "php": ">=8.0"
},
"require-dev": {
- "ext-dom": "*",
- "ext-libxml": "*",
- "phpstan/phpstan": ">=0.12.42",
- "phpunit/phpunit": "^9.5"
+ "phpstan/phpstan": ">=0.12",
+ "phpunit/phpunit": ">=9.3"
},
"type": "library",
"autoload": {
"psr-4": {
- "Gt\\CssXPath\\": "./src"
+ "Gt\\PropFunc\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -658,46 +706,50 @@
"role": "Developer"
}
],
- "description": "Convert CSS selectors to XPath queries.",
+ "description": "Property accessor and mutator functions.",
"support": {
- "issues": "https://github.com/PhpGt/CssXPath/issues",
- "source": "https://github.com/PhpGt/CssXPath/tree/v1.1.3"
+ "issues": "https://github.com/PhpGt/PropFunc/issues",
+ "source": "https://github.com/PhpGt/PropFunc/tree/v1.0.1"
},
"funding": [
{
- "url": "https://github.com/phpgt",
+ "url": "https://github.com/sponsors/PhpGt",
"type": "github"
}
],
- "time": "2021-01-28T13:27:01+00:00"
+ "time": "2021-03-23T12:46:44+00:00"
},
{
- "name": "phpgt/curl",
- "version": "v3.0.4",
+ "name": "phpgt/routing",
+ "version": "v1.0.5",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Curl.git",
- "reference": "50436aa457d9ea508499b2f32b032b1882262efd"
+ "url": "https://github.com/PhpGt/Routing.git",
+ "reference": "847f46706a358340989cb996ce499fdcd8fca498"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Curl/zipball/50436aa457d9ea508499b2f32b032b1882262efd",
- "reference": "50436aa457d9ea508499b2f32b032b1882262efd",
+ "url": "https://api.github.com/repos/PhpGt/Routing/zipball/847f46706a358340989cb996ce499fdcd8fca498",
+ "reference": "847f46706a358340989cb996ce499fdcd8fca498",
"shasum": ""
},
"require": {
- "ext-curl": "*",
- "ext-json": "*",
- "php": ">=7.2.0"
+ "php": ">=8.0",
+ "phpgt/config": "^v1.1.0",
+ "phpgt/http": "^v1",
+ "phpgt/servicecontainer": "1.*",
+ "phpgt/typesafegetter": "^1.2.2",
+ "psr/http-message": "1.*",
+ "willdurand/negotiation": "^3.0"
},
"require-dev": {
- "phpstan/phpstan": ">=0.12.64",
- "phpunit/phpunit": "9.*"
+ "phpstan/phpstan": "~1.2",
+ "phpunit/phpunit": "~9.5"
},
"type": "library",
"autoload": {
"psr-4": {
- "Gt\\Curl\\": "./src"
+ "Gt\\Routing\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -707,211 +759,174 @@
"authors": [
{
"name": "Greg Bowler",
- "email": "greg.bowler@g105b.com"
+ "email": "greg.bowler@g105b.com",
+ "homepage": "https://www.g105b.com",
+ "role": "Developer"
}
],
- "description": "cURL object wrapper.",
+ "description": "Routes HTTP requests to your code.",
"keywords": [
- "curl",
- "curl_multi",
- "http",
- "interface"
+ "assembly",
+ "logic",
+ "redirect",
+ "request",
+ "route",
+ "router",
+ "uri",
+ "url",
+ "view"
],
"support": {
- "issues": "https://github.com/PhpGt/Curl/issues",
- "source": "https://github.com/PhpGt/Curl/tree/v3.0.4"
+ "issues": "https://github.com/PhpGt/Routing/issues",
+ "source": "https://github.com/PhpGt/Routing/tree/v1.0.5"
},
"funding": [
{
- "url": "https://github.com/phpgt",
+ "url": "https://github.com/sponsors/PhpGt",
"type": "github"
}
],
- "time": "2020-12-24T19:03:28+00:00"
+ "time": "2022-01-31T13:57:32+00:00"
},
{
- "name": "phpgt/daemon",
+ "name": "phpgt/servicecontainer",
"version": "v1.1.2",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Daemon.git",
- "reference": "6490df99a22818149f30e3af408002ea7f73e035"
+ "url": "https://github.com/PhpGt/ServiceContainer.git",
+ "reference": "8d0faf7325af1b5e46e24a19c5fa6a4f9371c240"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Daemon/zipball/6490df99a22818149f30e3af408002ea7f73e035",
- "reference": "6490df99a22818149f30e3af408002ea7f73e035",
+ "url": "https://api.github.com/repos/PhpGt/ServiceContainer/zipball/8d0faf7325af1b5e46e24a19c5fa6a4f9371c240",
+ "reference": "8d0faf7325af1b5e46e24a19c5fa6a4f9371c240",
"shasum": ""
},
"require": {
- "php": ">=7.4"
+ "php": ">=8.0",
+ "psr/container": "^2.0.1"
+ },
+ "provide": {
+ "psr/container-implementation": "1.0"
},
"require-dev": {
- "phpstan/phpstan": ">=0.12.42",
+ "phpstan/phpstan": "0.12.*",
"phpunit/phpunit": "9.*"
},
"type": "library",
"autoload": {
"psr-4": {
- "Gt\\Daemon\\": "./src"
+ "Gt\\ServiceContainer\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
- "description": "Background script execution with cross-platform compatible streaming.",
+ "license": [
+ "MIT"
+ ],
+ "description": "Centralised construction of a project's core objects.",
"support": {
- "issues": "https://github.com/PhpGt/Daemon/issues",
- "source": "https://github.com/PhpGt/Daemon/tree/v1.1.2"
+ "issues": "https://github.com/PhpGt/ServiceContainer/issues",
+ "source": "https://github.com/PhpGt/ServiceContainer/tree/v1.1.2"
},
"funding": [
{
- "url": "https://github.com/phpgt",
+ "url": "https://github.com/sponsors/PhpGt",
"type": "github"
}
],
- "time": "2021-02-02T17:33:16+00:00"
+ "time": "2021-11-09T11:41:52+00:00"
},
{
- "name": "phpgt/database",
- "version": "1.3.0",
+ "name": "phpgt/session",
+ "version": "v1.1.3",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Database.git",
- "reference": "168d6a74c9b97f5df537d875166f1d8c08cb3e86"
+ "url": "https://github.com/PhpGt/Session.git",
+ "reference": "5da87957e5b82f76b8cf4461b276bb22fae7c82c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Database/zipball/168d6a74c9b97f5df537d875166f1d8c08cb3e86",
- "reference": "168d6a74c9b97f5df537d875166f1d8c08cb3e86",
+ "url": "https://api.github.com/repos/PhpGt/Session/zipball/5da87957e5b82f76b8cf4461b276bb22fae7c82c",
+ "reference": "5da87957e5b82f76b8cf4461b276bb22fae7c82c",
"shasum": ""
},
"require": {
- "ext-pdo": "*",
- "php": ">=7.4",
- "phpgt/config": "*"
+ "php": ">=7.2"
},
"require-dev": {
- "ext-sqlite3": "*",
- "phpstan/phpstan": "^0.12.42",
- "phpunit/phpunit": "^9.4.0"
+ "phpstan/phpstan": "1.0.2",
+ "phpunit/phpunit": "9.*"
},
- "bin": [
- "bin/db-migrate"
- ],
"type": "library",
"autoload": {
"psr-4": {
- "Gt\\Database\\": "./src"
+ "Gt\\Session\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "authors": [
- {
- "name": "Greg Bowler",
- "email": "greg.bowler@g105b.com"
- },
- {
- "name": "James Fellows",
- "email": "james.fellows@finanscapes.com"
- },
+ "description": "Encapsulated user sessions.",
+ "support": {
+ "issues": "https://github.com/PhpGt/Session/issues",
+ "source": "https://github.com/PhpGt/Session/tree/v1.1.3"
+ },
+ "funding": [
{
- "name": "Christopher Paul Shaw",
- "email": "i-am-in-your-code-stealing-your-lulz@chris-shaw.com"
+ "url": "https://github.com/sponsors/PhpGt",
+ "type": "github"
}
],
- "description": "Database API organisation.",
- "support": {
- "issues": "https://github.com/PhpGt/Database/issues",
- "source": "https://github.com/PhpGt/Database/tree/1.3.0"
- },
- "time": "2021-04-29T17:24:29+00:00"
+ "time": "2021-11-04T14:38:29+00:00"
},
{
- "name": "phpgt/dom",
- "version": "v3.0.0",
+ "name": "phpgt/sync",
+ "version": "v1.2.8",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Dom.git",
- "reference": "cbe5a007908dd24bea14c1eeeccf8cc8f83a225f"
+ "url": "https://github.com/PhpGt/Sync.git",
+ "reference": "47e6865deb2fa82c6738c911be60f0eb2f845d21"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Dom/zipball/cbe5a007908dd24bea14c1eeeccf8cc8f83a225f",
- "reference": "cbe5a007908dd24bea14c1eeeccf8cc8f83a225f",
+ "url": "https://api.github.com/repos/PhpGt/Sync/zipball/47e6865deb2fa82c6738c911be60f0eb2f845d21",
+ "reference": "47e6865deb2fa82c6738c911be60f0eb2f845d21",
"shasum": ""
},
"require": {
- "ext-dom": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
"php": ">=8.0",
- "phpgt/cssxpath": ">=1.1.2",
- "phpgt/propfunc": "^1.0",
- "psr/http-message": "^1.0"
+ "phpgt/cli": "1.3.*",
+ "webmozart/glob": "4.*"
},
"require-dev": {
- "phpstan/phpstan": ">=0.12",
- "phpunit/phpunit": ">=9.3.8"
+ "phpstan/phpstan": "^0.12",
+ "phpunit/phpunit": "^9.5"
},
+ "bin": [
+ "bin/sync"
+ ],
"type": "library",
"autoload": {
"psr-4": {
- "Gt\\Dom\\": "./src"
+ "Gt\\Sync\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Greg Bowler",
- "email": "greg.bowler@g105b.com",
- "homepage": "https://www.g105b.com",
- "role": "Developer"
- },
- {
- "name": "Alvaro Guimaraes",
- "homepage": "https://github.com/aguimaraes",
- "role": "Developer"
- },
- {
- "name": "James Fellows",
- "homepage": "https://github.com/j4m3s",
- "role": "Developer"
- },
- {
- "name": "Emile Ward",
- "homepage": "https://github.com/emileward",
- "role": "Developer"
- },
- {
- "name": "Jelmer Wijnja",
- "homepage": "https://github.com/Jelmergu",
- "role": "Developer"
- },
- {
- "name": "Ognjen Petrovic",
- "homepage": "https://github.com/ognjen-petrovic",
- "role": "Developer"
- },
- {
- "name": "Jacob Bearden",
- "homepage": "https://github.com/jacobbearden",
- "role": "Documentation contributor"
- },
- {
- "name": "Jaroslav Týc",
- "homepage": "https://www.jaroslavtyc.com/",
- "role": "Developer"
- }
+ "description": "Synchronise two directories.",
+ "keywords": [
+ "copy",
+ "file",
+ "files",
+ "filesystem",
+ "recursive",
+ "rsync",
+ "synchronise",
+ "synchronize"
],
- "description": "The modern DOM API for PHP projects.",
"support": {
- "issues": "https://github.com/PhpGt/Dom/issues",
- "source": "https://github.com/PhpGt/Dom/tree/v3.0.0"
+ "issues": "https://github.com/PhpGt/Sync/issues",
+ "source": "https://github.com/PhpGt/Sync/tree/v1.2.8"
},
"funding": [
{
@@ -919,45 +934,48 @@
"type": "github"
}
],
- "time": "2021-09-15T18:35:06+00:00"
+ "time": "2021-10-13T20:05:27+00:00"
},
{
- "name": "phpgt/domtemplate",
- "version": "v2.0.1",
+ "name": "phpgt/typesafegetter",
+ "version": "v1.2.2",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/DomTemplate.git",
- "reference": "75332111a9eb7f44c8f59cccb90fe409e9c90ad3"
+ "url": "https://github.com/PhpGt/TypeSafeGetter.git",
+ "reference": "ffeb5d847b3a4b36081a5cd180587fc4d83c6e31"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/DomTemplate/zipball/75332111a9eb7f44c8f59cccb90fe409e9c90ad3",
- "reference": "75332111a9eb7f44c8f59cccb90fe409e9c90ad3",
+ "url": "https://api.github.com/repos/PhpGt/TypeSafeGetter/zipball/ffeb5d847b3a4b36081a5cd180587fc4d83c6e31",
+ "reference": "ffeb5d847b3a4b36081a5cd180587fc4d83c6e31",
"shasum": ""
},
"require": {
- "ext-dom": "*",
- "php": ">=8.0",
- "phpgt/dom": "^3.0.0"
+ "php": ">=8.0"
},
"require-dev": {
- "phpstan/phpstan": "0.12.*",
- "phpunit/phpunit": "9.*"
+ "phpstan/phpstan": ">=0.12.42"
},
"type": "library",
"autoload": {
"psr-4": {
- "Gt\\DomTemplate\\": "./src"
+ "Gt\\TypeSafeGetter\\": "./src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "Bind dynamic data to reusable HTML components.",
+ "authors": [
+ {
+ "name": "Greg Bowler",
+ "email": "greg.bowler@g105b.com"
+ }
+ ],
+ "description": "An interface for objects that expose type-safe getter methods.",
"support": {
- "issues": "https://github.com/PhpGt/DomTemplate/issues",
- "source": "https://github.com/PhpGt/DomTemplate/tree/v2.0.1"
+ "issues": "https://github.com/PhpGt/TypeSafeGetter/issues",
+ "source": "https://github.com/PhpGt/TypeSafeGetter/tree/v1.2.2"
},
"funding": [
{
@@ -965,44 +983,34 @@
"type": "github"
}
],
- "time": "2021-10-02T12:35:48+00:00"
+ "time": "2021-01-30T12:18:23+00:00"
},
{
- "name": "phpgt/fetch",
- "version": "v1.0.1",
+ "name": "psr/container",
+ "version": "2.0.2",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Fetch.git",
- "reference": "927f8474bc7f470b934244be55d19bd3a4644b96"
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Fetch/zipball/927f8474bc7f470b934244be55d19bd3a4644b96",
- "reference": "927f8474bc7f470b934244be55d19bd3a4644b96",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
"shasum": ""
},
"require": {
- "ext-curl": "*",
- "ext-json": "*",
- "php": ">=7.2",
- "php-http/httplug": "^2.0",
- "phpgt/curl": "*",
- "phpgt/http": "*",
- "react/event-loop": "^1.0",
- "react/promise": "2.*"
- },
- "provide": {
- "php-http/async-client-implementation": "1.0",
- "php-http/client-implementation": "1.0"
- },
- "require-dev": {
- "phpstan/phpstan": ">=0.12.42",
- "phpunit/phpunit": "9.*"
+ "php": ">=7.4.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Gt\\Fetch\\": "./src"
+ "Psr\\Container\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1011,144 +1019,163 @@
],
"authors": [
{
- "name": "Greg Bowler",
- "email": "greg.bowler@g105b.com"
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
}
],
- "description": "Asynchronous HTTP client with promises for PHP 7 applications.",
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
"keywords": [
- "ajax",
- "async",
- "asynchronous",
- "curl",
- "curl_multi",
- "fetch",
- "get",
- "http",
- "post",
- "xmlhttprequest"
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
],
"support": {
- "issues": "https://github.com/PhpGt/Fetch/issues",
- "source": "https://github.com/PhpGt/Fetch/tree/v1.0.1"
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/2.0.2"
},
- "funding": [
- {
- "url": "https://github.com/phpgt",
- "type": "github"
- }
- ],
- "time": "2020-12-28T18:29:42+00:00"
+ "time": "2021-11-05T16:47:00+00:00"
},
{
- "name": "phpgt/http",
- "version": "v1.1.4",
+ "name": "psr/http-message",
+ "version": "1.0.1",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Http.git",
- "reference": "80ed7269050bc0f2de2402c5461711dd2418f55f"
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Http/zipball/80ed7269050bc0f2de2402c5461711dd2418f55f",
- "reference": "80ed7269050bc0f2de2402c5461711dd2418f55f",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"shasum": ""
},
"require": {
- "php": ">=8.0",
- "phpgt/input": "^v1",
- "psr/http-message": "^v1.0.1",
- "willdurand/negotiation": "v3.0.*"
- },
- "require-dev": {
- "phpstan/phpstan": ">=0.12.64",
- "phpunit/phpunit": "9.*"
+ "php": ">=5.3.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Gt\\Http\\": "./src"
+ "Psr\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "PSR-7 HTTP message implementation.",
- "support": {
- "issues": "https://github.com/PhpGt/Http/issues",
- "source": "https://github.com/PhpGt/Http/tree/v1.1.4"
- },
- "funding": [
+ "authors": [
{
- "url": "https://github.com/sponsors/PhpGt",
- "type": "github"
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
}
],
- "time": "2021-06-23T15:45:09+00:00"
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/master"
+ },
+ "time": "2016-08-06T14:39:51+00:00"
},
{
- "name": "phpgt/input",
- "version": "v1.1.2",
+ "name": "psr/http-server-handler",
+ "version": "1.0.1",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Input.git",
- "reference": "ae78931ffd5c4800f362db61bd86f8e545733e86"
+ "url": "https://github.com/php-fig/http-server-handler.git",
+ "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Input/zipball/ae78931ffd5c4800f362db61bd86f8e545733e86",
- "reference": "ae78931ffd5c4800f362db61bd86f8e545733e86",
+ "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
+ "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
"shasum": ""
},
"require": {
- "phpgt/http": "*"
- },
- "require-dev": {
- "phpunit/phpunit": "8.*"
+ "php": ">=7.0",
+ "psr/http-message": "^1.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Gt\\Input\\": "./src"
+ "Psr\\Http\\Server\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "Encapsulated user input.",
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP server-side request handler",
+ "keywords": [
+ "handler",
+ "http",
+ "http-interop",
+ "psr",
+ "psr-15",
+ "psr-7",
+ "request",
+ "response",
+ "server"
+ ],
"support": {
- "issues": "https://github.com/PhpGt/Input/issues",
- "source": "https://github.com/PhpGt/Input/tree/v1.1.2"
+ "issues": "https://github.com/php-fig/http-server-handler/issues",
+ "source": "https://github.com/php-fig/http-server-handler/tree/master"
},
- "time": "2019-11-29T11:22:35+00:00"
+ "time": "2018-10-30T16:46:14+00:00"
},
{
- "name": "phpgt/propfunc",
- "version": "v1.0.1",
+ "name": "psr/http-server-middleware",
+ "version": "1.0.1",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/PropFunc.git",
- "reference": "091213649e89ff22d1ef640b46fbee5215c65520"
+ "url": "https://github.com/php-fig/http-server-middleware.git",
+ "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/PropFunc/zipball/091213649e89ff22d1ef640b46fbee5215c65520",
- "reference": "091213649e89ff22d1ef640b46fbee5215c65520",
+ "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5",
+ "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5",
"shasum": ""
},
"require": {
- "php": ">=8.0"
- },
- "require-dev": {
- "phpstan/phpstan": ">=0.12",
- "phpunit/phpunit": ">=9.3"
+ "php": ">=7.0",
+ "psr/http-message": "^1.0",
+ "psr/http-server-handler": "^1.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Gt\\PropFunc\\": "./src"
+ "Psr\\Http\\Server\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1157,218 +1184,297 @@
],
"authors": [
{
- "name": "Greg Bowler",
- "email": "greg.bowler@g105b.com",
- "homepage": "https://www.g105b.com",
- "role": "Developer"
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
}
],
- "description": "Property accessor and mutator functions.",
+ "description": "Common interface for HTTP server-side middleware",
+ "keywords": [
+ "http",
+ "http-interop",
+ "middleware",
+ "psr",
+ "psr-15",
+ "psr-7",
+ "request",
+ "response"
+ ],
"support": {
- "issues": "https://github.com/PhpGt/PropFunc/issues",
- "source": "https://github.com/PhpGt/PropFunc/tree/v1.0.1"
+ "issues": "https://github.com/php-fig/http-server-middleware/issues",
+ "source": "https://github.com/php-fig/http-server-middleware/tree/master"
},
- "funding": [
- {
- "url": "https://github.com/sponsors/PhpGt",
- "type": "github"
- }
- ],
- "time": "2021-03-23T12:46:44+00:00"
+ "time": "2018-10-30T17:12:04+00:00"
},
{
- "name": "phpgt/protectedglobal",
- "version": "v1.0.0",
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.24.0",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/ProtectedGlobal.git",
- "reference": "3291d2e846dd2d03d585364e9b6652fa76fae64a"
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "30885182c981ab175d4d034db0f6f469898070ab"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/ProtectedGlobal/zipball/3291d2e846dd2d03d585364e9b6652fa76fae64a",
- "reference": "3291d2e846dd2d03d585364e9b6652fa76fae64a",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
+ "reference": "30885182c981ab175d4d034db0f6f469898070ab",
"shasum": ""
},
"require": {
- "php": ">7.1"
+ "php": ">=7.1"
},
- "require-dev": {
- "phpunit/phpunit": "8.*"
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
"autoload": {
"psr-4": {
- "Gt\\ProtectedGlobal\\": "./src/"
- }
+ "Symfony\\Polyfill\\Ctype\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "Protect against accidental use of superglobals.",
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
"support": {
- "issues": "https://github.com/PhpGt/ProtectedGlobal/issues",
- "source": "https://github.com/PhpGt/ProtectedGlobal/tree/v1.0.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
},
- "time": "2019-06-03T15:19:50+00:00"
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-20T20:35:02+00:00"
},
{
- "name": "phpgt/server",
- "version": "v1.1.0",
+ "name": "webmozart/assert",
+ "version": "1.10.0",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Server.git",
- "reference": "b783ab4b972b83d44bcc24261d8e4669d1c25795"
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Server/zipball/b783ab4b972b83d44bcc24261d8e4669d1c25795",
- "reference": "b783ab4b972b83d44bcc24261d8e4669d1c25795",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
+ "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
"shasum": ""
},
"require": {
- "php": ">=7.4",
- "phpgt/cli": "*"
+ "php": "^7.2 || ^8.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<0.12.20",
+ "vimeo/psalm": "<4.6.1 || 4.6.2"
},
"require-dev": {
- "phpunit/phpunit": "8.*"
+ "phpunit/phpunit": "^8.5.13"
},
- "bin": [
- "bin/serve"
- ],
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Gt\\Server\\": "./src/"
+ "Webmozart\\Assert\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
- "description": "Development HTTP server.",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Assertions to validate method input/output with nice error messages.",
+ "keywords": [
+ "assert",
+ "check",
+ "validate"
+ ],
"support": {
- "issues": "https://github.com/PhpGt/Server/issues",
- "source": "https://github.com/PhpGt/Server/tree/master"
+ "issues": "https://github.com/webmozarts/assert/issues",
+ "source": "https://github.com/webmozarts/assert/tree/1.10.0"
},
- "time": "2020-01-03T17:34:52+00:00"
+ "time": "2021-03-09T10:59:23+00:00"
},
{
- "name": "phpgt/session",
- "version": "v1.1.2",
+ "name": "webmozart/glob",
+ "version": "4.4.0",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Session.git",
- "reference": "a890bade65489c9e3fc92cc3dfb44efc54985a9a"
+ "url": "https://github.com/webmozarts/glob.git",
+ "reference": "539b5dbc10021d3f9242e7a9e9b6b37843179e83"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Session/zipball/a890bade65489c9e3fc92cc3dfb44efc54985a9a",
- "reference": "a890bade65489c9e3fc92cc3dfb44efc54985a9a",
+ "url": "https://api.github.com/repos/webmozarts/glob/zipball/539b5dbc10021d3f9242e7a9e9b6b37843179e83",
+ "reference": "539b5dbc10021d3f9242e7a9e9b6b37843179e83",
"shasum": ""
},
"require": {
- "php": ">=7.2"
+ "php": "^7.3 || ^8.0.0",
+ "webmozart/path-util": "^2.2"
},
"require-dev": {
- "phpstan/phpstan": ">=0.12.64",
- "phpunit/phpunit": "9.*"
+ "phpunit/phpunit": "^9.5",
+ "symfony/filesystem": "^5.3"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Gt\\Session\\": "./src"
+ "Webmozart\\Glob\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "Encapsulated user sessions.",
- "support": {
- "issues": "https://github.com/PhpGt/Session/issues",
- "source": "https://github.com/PhpGt/Session/tree/v1.1.2"
- },
- "funding": [
+ "authors": [
{
- "url": "https://github.com/phpgt",
- "type": "github"
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
}
],
- "time": "2021-01-12T10:15:28+00:00"
+ "description": "A PHP implementation of Ant's glob.",
+ "support": {
+ "issues": "https://github.com/webmozarts/glob/issues",
+ "source": "https://github.com/webmozarts/glob/tree/4.4.0"
+ },
+ "time": "2021-10-07T16:13:08+00:00"
},
{
- "name": "phpgt/sync",
- "version": "v1.2.6",
+ "name": "webmozart/path-util",
+ "version": "2.3.0",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/Sync.git",
- "reference": "863c60643ff1ee816705a7ccb9cd0e7deeb83763"
+ "url": "https://github.com/webmozart/path-util.git",
+ "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/Sync/zipball/863c60643ff1ee816705a7ccb9cd0e7deeb83763",
- "reference": "863c60643ff1ee816705a7ccb9cd0e7deeb83763",
+ "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
+ "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
"shasum": ""
},
"require": {
- "php": ">=7.2",
- "phpgt/cli": "1.3.*",
- "webmozart/glob": "4.*"
+ "php": ">=5.3.3",
+ "webmozart/assert": "~1.0"
},
"require-dev": {
- "phpstan/phpstan": "^0.12",
- "phpunit/phpunit": "9.*"
+ "phpunit/phpunit": "^4.6",
+ "sebastian/version": "^1.0.1"
},
- "bin": [
- "bin/sync"
- ],
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Gt\\Sync\\": "./src"
+ "Webmozart\\PathUtil\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
- "description": "Synchronise two directories.",
- "keywords": [
- "copy",
- "file",
- "files",
- "filesystem",
- "recursive",
- "rsync",
- "synchronise",
- "synchronize"
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
],
+ "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
"support": {
- "issues": "https://github.com/PhpGt/Sync/issues",
- "source": "https://github.com/PhpGt/Sync/tree/v1.2.6"
+ "issues": "https://github.com/webmozart/path-util/issues",
+ "source": "https://github.com/webmozart/path-util/tree/2.3.0"
},
- "time": "2021-02-15T11:03:02+00:00"
+ "abandoned": "symfony/filesystem",
+ "time": "2015-12-17T08:42:14+00:00"
},
{
- "name": "phpgt/typesafegetter",
- "version": "v1.2.2",
+ "name": "willdurand/negotiation",
+ "version": "3.0.0",
"source": {
"type": "git",
- "url": "https://github.com/PhpGt/TypeSafeGetter.git",
- "reference": "ffeb5d847b3a4b36081a5cd180587fc4d83c6e31"
+ "url": "https://github.com/willdurand/Negotiation.git",
+ "reference": "04e14f38d4edfcc974114a07d2777d90c98f3d9c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhpGt/TypeSafeGetter/zipball/ffeb5d847b3a4b36081a5cd180587fc4d83c6e31",
- "reference": "ffeb5d847b3a4b36081a5cd180587fc4d83c6e31",
+ "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/04e14f38d4edfcc974114a07d2777d90c98f3d9c",
+ "reference": "04e14f38d4edfcc974114a07d2777d90c98f3d9c",
"shasum": ""
},
"require": {
- "php": ">=8.0"
+ "php": ">=7.1.0"
},
"require-dev": {
- "phpstan/phpstan": ">=0.12.42"
+ "symfony/phpunit-bridge": "^5.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Gt\\TypeSafeGetter\\": "./src"
+ "Negotiation\\": "src/Negotiation"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1377,3051 +1483,186 @@
],
"authors": [
{
- "name": "Greg Bowler",
- "email": "greg.bowler@g105b.com"
- }
- ],
- "description": "An interface for objects that expose type-safe getter methods.",
- "support": {
- "issues": "https://github.com/PhpGt/TypeSafeGetter/issues",
- "source": "https://github.com/PhpGt/TypeSafeGetter/tree/v1.2.2"
- },
- "funding": [
- {
- "url": "https://github.com/sponsors/PhpGt",
- "type": "github"
- }
- ],
- "time": "2021-01-30T12:18:23+00:00"
- },
- {
- "name": "psr/http-client",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-client.git",
- "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
- "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
- "shasum": ""
- },
- "require": {
- "php": "^7.0 || ^8.0",
- "psr/http-message": "^1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Client\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interface for HTTP clients",
- "homepage": "https://github.com/php-fig/http-client",
- "keywords": [
- "http",
- "http-client",
- "psr",
- "psr-18"
- ],
- "support": {
- "source": "https://github.com/php-fig/http-client/tree/master"
- },
- "time": "2020-06-29T06:28:15+00:00"
- },
- {
- "name": "psr/http-message",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-message.git",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Message\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interface for HTTP messages",
- "homepage": "https://github.com/php-fig/http-message",
- "keywords": [
- "http",
- "http-message",
- "psr",
- "psr-7",
- "request",
- "response"
- ],
- "support": {
- "source": "https://github.com/php-fig/http-message/tree/master"
- },
- "time": "2016-08-06T14:39:51+00:00"
- },
- {
- "name": "psr/http-server-handler",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-server-handler.git",
- "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
- "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0",
- "psr/http-message": "^1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Server\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interface for HTTP server-side request handler",
- "keywords": [
- "handler",
- "http",
- "http-interop",
- "psr",
- "psr-15",
- "psr-7",
- "request",
- "response",
- "server"
- ],
- "support": {
- "issues": "https://github.com/php-fig/http-server-handler/issues",
- "source": "https://github.com/php-fig/http-server-handler/tree/master"
- },
- "time": "2018-10-30T16:46:14+00:00"
- },
- {
- "name": "psr/http-server-middleware",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-server-middleware.git",
- "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5",
- "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0",
- "psr/http-message": "^1.0",
- "psr/http-server-handler": "^1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Server\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interface for HTTP server-side middleware",
- "keywords": [
- "http",
- "http-interop",
- "middleware",
- "psr",
- "psr-15",
- "psr-7",
- "request",
- "response"
- ],
- "support": {
- "issues": "https://github.com/php-fig/http-server-middleware/issues",
- "source": "https://github.com/php-fig/http-server-middleware/tree/master"
- },
- "time": "2018-10-30T17:12:04+00:00"
- },
- {
- "name": "react/event-loop",
- "version": "v1.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/reactphp/event-loop.git",
- "reference": "be6dee480fc4692cec0504e65eb486e3be1aa6f2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/reactphp/event-loop/zipball/be6dee480fc4692cec0504e65eb486e3be1aa6f2",
- "reference": "be6dee480fc4692cec0504e65eb486e3be1aa6f2",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
- },
- "suggest": {
- "ext-event": "~1.0 for ExtEventLoop",
- "ext-pcntl": "For signal handling support when using the StreamSelectLoop",
- "ext-uv": "* for ExtUvLoop"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "React\\EventLoop\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Christian Lück",
- "email": "christian@clue.engineering",
- "homepage": "https://clue.engineering/"
- },
- {
- "name": "Cees-Jan Kiewiet",
- "email": "reactphp@ceesjankiewiet.nl",
- "homepage": "https://wyrihaximus.net/"
- },
- {
- "name": "Jan Sorgalla",
- "email": "jsorgalla@gmail.com",
- "homepage": "https://sorgalla.com/"
- },
- {
- "name": "Chris Boden",
- "email": "cboden@gmail.com",
- "homepage": "https://cboden.dev/"
- }
- ],
- "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.",
- "keywords": [
- "asynchronous",
- "event-loop"
- ],
- "support": {
- "issues": "https://github.com/reactphp/event-loop/issues",
- "source": "https://github.com/reactphp/event-loop/tree/v1.2.0"
- },
- "funding": [
- {
- "url": "https://github.com/WyriHaximus",
- "type": "github"
- },
- {
- "url": "https://github.com/clue",
- "type": "github"
- }
- ],
- "time": "2021-07-11T12:31:24+00:00"
- },
- {
- "name": "react/promise",
- "version": "v2.8.0",
- "source": {
- "type": "git",
- "url": "https://github.com/reactphp/promise.git",
- "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
- "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
- "shasum": ""
- },
- "require": {
- "php": ">=5.4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "React\\Promise\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jan Sorgalla",
- "email": "jsorgalla@gmail.com"
- }
- ],
- "description": "A lightweight implementation of CommonJS Promises/A for PHP",
- "keywords": [
- "promise",
- "promises"
- ],
- "support": {
- "issues": "https://github.com/reactphp/promise/issues",
- "source": "https://github.com/reactphp/promise/tree/v2.8.0"
- },
- "time": "2020-05-12T15:16:56+00:00"
- },
- {
- "name": "symfony/polyfill-ctype",
- "version": "v1.23.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
- "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-ctype": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Ctype\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Gert de Pagter",
- "email": "BackEndTea@gmail.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for ctype functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "ctype",
- "polyfill",
- "portable"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-02-19T12:13:01+00:00"
- },
- {
- "name": "webmozart/assert",
- "version": "1.10.0",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozarts/assert.git",
- "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
- "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0",
- "symfony/polyfill-ctype": "^1.8"
- },
- "conflict": {
- "phpstan/phpstan": "<0.12.20",
- "vimeo/psalm": "<4.6.1 || 4.6.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5.13"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.10-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Webmozart\\Assert\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Assertions to validate method input/output with nice error messages.",
- "keywords": [
- "assert",
- "check",
- "validate"
- ],
- "support": {
- "issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.10.0"
- },
- "time": "2021-03-09T10:59:23+00:00"
- },
- {
- "name": "webmozart/glob",
- "version": "4.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozarts/glob.git",
- "reference": "06358fafde0f32edb4513f4fd88fe113a40c90ee"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozarts/glob/zipball/06358fafde0f32edb4513f4fd88fe113a40c90ee",
- "reference": "06358fafde0f32edb4513f4fd88fe113a40c90ee",
- "shasum": ""
- },
- "require": {
- "php": "^7.3 || ^8.0.0",
- "webmozart/path-util": "^2.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.0",
- "symfony/filesystem": "^5.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.1-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Webmozart\\Glob\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "A PHP implementation of Ant's glob.",
- "support": {
- "issues": "https://github.com/webmozarts/glob/issues",
- "source": "https://github.com/webmozarts/glob/tree/4.3.0"
- },
- "time": "2021-01-21T06:17:15+00:00"
- },
- {
- "name": "webmozart/path-util",
- "version": "2.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozart/path-util.git",
- "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
- "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "webmozart/assert": "~1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.6",
- "sebastian/version": "^1.0.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.3-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Webmozart\\PathUtil\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
- "support": {
- "issues": "https://github.com/webmozart/path-util/issues",
- "source": "https://github.com/webmozart/path-util/tree/2.3.0"
- },
- "time": "2015-12-17T08:42:14+00:00"
- },
- {
- "name": "willdurand/negotiation",
- "version": "3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/willdurand/Negotiation.git",
- "reference": "04e14f38d4edfcc974114a07d2777d90c98f3d9c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/04e14f38d4edfcc974114a07d2777d90c98f3d9c",
- "reference": "04e14f38d4edfcc974114a07d2777d90c98f3d9c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1.0"
- },
- "require-dev": {
- "symfony/phpunit-bridge": "^5.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Negotiation\\": "src/Negotiation"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "William Durand",
- "email": "will+git@drnd.me"
- }
- ],
- "description": "Content Negotiation tools for PHP provided as a standalone library.",
- "homepage": "http://williamdurand.fr/Negotiation/",
- "keywords": [
- "accept",
- "content",
- "format",
- "header",
- "negotiation"
- ],
- "support": {
- "issues": "https://github.com/willdurand/Negotiation/issues",
- "source": "https://github.com/willdurand/Negotiation/tree/3.0.0"
- },
- "time": "2020-09-25T08:01:41+00:00"
- }
- ],
- "packages-dev": [
- {
- "name": "behat/behat",
- "version": "v3.8.1",
- "source": {
- "type": "git",
- "url": "https://github.com/Behat/Behat.git",
- "reference": "fbb065457d523d9856d4b50775b4151a7598b510"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Behat/Behat/zipball/fbb065457d523d9856d4b50775b4151a7598b510",
- "reference": "fbb065457d523d9856d4b50775b4151a7598b510",
- "shasum": ""
- },
- "require": {
- "behat/gherkin": "^4.6.0",
- "behat/transliterator": "^1.2",
- "ext-mbstring": "*",
- "php": "^7.2 || ^8.0",
- "psr/container": "^1.0",
- "symfony/config": "^4.4 || ^5.0",
- "symfony/console": "^4.4 || ^5.0",
- "symfony/dependency-injection": "^4.4 || ^5.0",
- "symfony/event-dispatcher": "^4.4 || ^5.0",
- "symfony/translation": "^4.4 || ^5.0",
- "symfony/yaml": "^4.4 || ^5.0"
- },
- "require-dev": {
- "container-interop/container-interop": "^1.2",
- "herrera-io/box": "~1.6.1",
- "phpunit/phpunit": "^8.5 || ^9.0",
- "symfony/process": "^4.4 || ^5.0"
- },
- "suggest": {
- "ext-dom": "Needed to output test results in JUnit format."
- },
- "bin": [
- "bin/behat"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Behat\\Behat\\": "src/Behat/Behat/",
- "Behat\\Testwork\\": "src/Behat/Testwork/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- }
- ],
- "description": "Scenario-oriented BDD framework for PHP",
- "homepage": "http://behat.org/",
- "keywords": [
- "Agile",
- "BDD",
- "ScenarioBDD",
- "Scrum",
- "StoryBDD",
- "User story",
- "business",
- "development",
- "documentation",
- "examples",
- "symfony",
- "testing"
- ],
- "support": {
- "issues": "https://github.com/Behat/Behat/issues",
- "source": "https://github.com/Behat/Behat/tree/v3.8.1"
- },
- "time": "2020-11-07T15:55:18+00:00"
- },
- {
- "name": "behat/gherkin",
- "version": "v4.8.0",
- "source": {
- "type": "git",
- "url": "https://github.com/Behat/Gherkin.git",
- "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Behat/Gherkin/zipball/2391482cd003dfdc36b679b27e9f5326bd656acd",
- "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd",
- "shasum": ""
- },
- "require": {
- "php": "~7.2|~8.0"
- },
- "require-dev": {
- "cucumber/cucumber": "dev-gherkin-16.0.0",
- "phpunit/phpunit": "~8|~9",
- "symfony/phpunit-bridge": "~3|~4|~5",
- "symfony/yaml": "~3|~4|~5"
- },
- "suggest": {
- "symfony/yaml": "If you want to parse features, represented in YAML files"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.4-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "Behat\\Gherkin": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- }
- ],
- "description": "Gherkin DSL parser for PHP",
- "homepage": "http://behat.org/",
- "keywords": [
- "BDD",
- "Behat",
- "Cucumber",
- "DSL",
- "gherkin",
- "parser"
- ],
- "support": {
- "issues": "https://github.com/Behat/Gherkin/issues",
- "source": "https://github.com/Behat/Gherkin/tree/v4.8.0"
- },
- "time": "2021-02-04T12:44:21+00:00"
- },
- {
- "name": "behat/mink",
- "version": "v1.8.1",
- "source": {
- "type": "git",
- "url": "https://github.com/minkphp/Mink.git",
- "reference": "07c6a9fe3fa98c2de074b25d9ed26c22904e3887"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/minkphp/Mink/zipball/07c6a9fe3fa98c2de074b25d9ed26c22904e3887",
- "reference": "07c6a9fe3fa98c2de074b25d9ed26c22904e3887",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.1",
- "symfony/css-selector": "^2.7|^3.0|^4.0|^5.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20",
- "symfony/debug": "^2.7|^3.0|^4.0",
- "symfony/phpunit-bridge": "^3.4.38 || ^5.0.5"
- },
- "suggest": {
- "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
- "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation",
- "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)",
- "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)",
- "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Behat\\Mink\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- }
- ],
- "description": "Browser controller/emulator abstraction for PHP",
- "homepage": "http://mink.behat.org/",
- "keywords": [
- "browser",
- "testing",
- "web"
- ],
- "support": {
- "issues": "https://github.com/minkphp/Mink/issues",
- "source": "https://github.com/minkphp/Mink/tree/v1.8.1"
- },
- "time": "2020-03-11T15:45:53+00:00"
- },
- {
- "name": "behat/mink-browserkit-driver",
- "version": "v1.3.4",
- "source": {
- "type": "git",
- "url": "https://github.com/minkphp/MinkBrowserKitDriver.git",
- "reference": "e3b90840022ebcd544c7b394a3c9597ae242cbee"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/e3b90840022ebcd544c7b394a3c9597ae242cbee",
- "reference": "e3b90840022ebcd544c7b394a3c9597ae242cbee",
- "shasum": ""
- },
- "require": {
- "behat/mink": "^1.7.1@dev",
- "php": ">=5.3.6",
- "symfony/browser-kit": "~2.3|~3.0|~4.0",
- "symfony/dom-crawler": "~2.3|~3.0|~4.0"
- },
- "require-dev": {
- "mink/driver-testsuite": "dev-master",
- "symfony/debug": "^2.7|^3.0|^4.0",
- "symfony/http-kernel": "~2.3|~3.0|~4.0"
- },
- "type": "mink-driver",
- "extra": {
- "branch-alias": {
- "dev-master": "1.3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Behat\\Mink\\Driver\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- }
- ],
- "description": "Symfony2 BrowserKit driver for Mink framework",
- "homepage": "http://mink.behat.org/",
- "keywords": [
- "Mink",
- "Symfony2",
- "browser",
- "testing"
- ],
- "support": {
- "issues": "https://github.com/minkphp/MinkBrowserKitDriver/issues",
- "source": "https://github.com/minkphp/MinkBrowserKitDriver/tree/v1.3.4"
- },
- "time": "2020-03-11T09:49:45+00:00"
- },
- {
- "name": "behat/mink-extension",
- "version": "2.3.1",
- "source": {
- "type": "git",
- "url": "https://github.com/Behat/MinkExtension.git",
- "reference": "80f7849ba53867181b7e412df9210e12fba50177"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Behat/MinkExtension/zipball/80f7849ba53867181b7e412df9210e12fba50177",
- "reference": "80f7849ba53867181b7e412df9210e12fba50177",
- "shasum": ""
- },
- "require": {
- "behat/behat": "^3.0.5",
- "behat/mink": "^1.5",
- "php": ">=5.3.2",
- "symfony/config": "^2.7|^3.0|^4.0"
- },
- "require-dev": {
- "behat/mink-goutte-driver": "^1.1",
- "phpspec/phpspec": "^2.0"
- },
- "type": "behat-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "2.1.x-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "Behat\\MinkExtension": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Christophe Coevoet",
- "email": "stof@notk.org"
- },
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com"
- }
- ],
- "description": "Mink extension for Behat",
- "homepage": "http://extensions.behat.org/mink",
- "keywords": [
- "browser",
- "gui",
- "test",
- "web"
- ],
- "support": {
- "issues": "https://github.com/Behat/MinkExtension/issues",
- "source": "https://github.com/Behat/MinkExtension/tree/master"
- },
- "time": "2018-02-06T15:36:30+00:00"
- },
- {
- "name": "behat/mink-goutte-driver",
- "version": "v1.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/minkphp/MinkGoutteDriver.git",
- "reference": "8b9ad6d2d95bc70b840d15323365f52fcdaea6ca"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/8b9ad6d2d95bc70b840d15323365f52fcdaea6ca",
- "reference": "8b9ad6d2d95bc70b840d15323365f52fcdaea6ca",
- "shasum": ""
- },
- "require": {
- "behat/mink": "~1.6@dev",
- "behat/mink-browserkit-driver": "~1.2@dev",
- "fabpot/goutte": "~1.0.4|~2.0|~3.1",
- "php": ">=5.3.1"
- },
- "require-dev": {
- "symfony/phpunit-bridge": "~2.7|~3.0"
- },
- "type": "mink-driver",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Behat\\Mink\\Driver\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- }
- ],
- "description": "Goutte driver for Mink framework",
- "homepage": "http://mink.behat.org/",
- "keywords": [
- "browser",
- "goutte",
- "headless",
- "testing"
- ],
- "support": {
- "issues": "https://github.com/minkphp/MinkGoutteDriver/issues",
- "source": "https://github.com/minkphp/MinkGoutteDriver/tree/master"
- },
- "time": "2016-03-05T09:04:22+00:00"
- },
- {
- "name": "behat/transliterator",
- "version": "v1.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/Behat/Transliterator.git",
- "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Behat/Transliterator/zipball/3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc",
- "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "chuyskywalker/rolling-curl": "^3.1",
- "php-yaoi/php-yaoi": "^1.0",
- "phpunit/phpunit": "^4.8.36|^6.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Behat\\Transliterator\\": "src/Behat/Transliterator"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Artistic-1.0"
- ],
- "description": "String transliterator",
- "keywords": [
- "i18n",
- "slug",
- "transliterator"
- ],
- "support": {
- "issues": "https://github.com/Behat/Transliterator/issues",
- "source": "https://github.com/Behat/Transliterator/tree/v1.3.0"
- },
- "time": "2020-01-14T16:39:13+00:00"
- },
- {
- "name": "doctrine/instantiator",
- "version": "1.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^8.0",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
- "phpstan/phpstan": "^0.12",
- "phpstan/phpstan-phpunit": "^0.12",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "https://ocramius.github.io/"
- }
- ],
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
- "keywords": [
- "constructor",
- "instantiate"
- ],
- "support": {
- "issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-10T18:47:58+00:00"
- },
- {
- "name": "fabpot/goutte",
- "version": "v3.3.1",
- "source": {
- "type": "git",
- "url": "https://github.com/FriendsOfPHP/Goutte.git",
- "reference": "80a23b64f44d54dd571d114c473d9d7e9ed84ca5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/80a23b64f44d54dd571d114c473d9d7e9ed84ca5",
- "reference": "80a23b64f44d54dd571d114c473d9d7e9ed84ca5",
- "shasum": ""
- },
- "require": {
- "guzzlehttp/guzzle": "^6.0",
- "php": ">=7.1.3",
- "symfony/browser-kit": "^4.4|^5.0",
- "symfony/css-selector": "^4.4|^5.0",
- "symfony/dom-crawler": "^4.4|^5.0"
- },
- "require-dev": {
- "symfony/phpunit-bridge": "^5.0"
- },
- "type": "application",
- "extra": {
- "branch-alias": {
- "dev-master": "3.3-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Goutte\\": "Goutte"
- },
- "exclude-from-classmap": [
- "Goutte/Tests"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- }
- ],
- "description": "A simple PHP Web Scraper",
- "homepage": "https://github.com/FriendsOfPHP/Goutte",
- "keywords": [
- "scraper"
- ],
- "support": {
- "issues": "https://github.com/FriendsOfPHP/Goutte/issues",
- "source": "https://github.com/FriendsOfPHP/Goutte/tree/v3.3.1"
- },
- "time": "2020-11-01T09:30:18+00:00"
- },
- {
- "name": "guzzlehttp/guzzle",
- "version": "6.5.5",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/guzzle.git",
- "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e",
- "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "guzzlehttp/promises": "^1.0",
- "guzzlehttp/psr7": "^1.6.1",
- "php": ">=5.5",
- "symfony/polyfill-intl-idn": "^1.17.0"
- },
- "require-dev": {
- "ext-curl": "*",
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
- "psr/log": "^1.1"
- },
- "suggest": {
- "psr/log": "Required for using the Log middleware"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "6.5-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- }
- ],
- "description": "Guzzle is a PHP HTTP client library",
- "homepage": "http://guzzlephp.org/",
- "keywords": [
- "client",
- "curl",
- "framework",
- "http",
- "http client",
- "rest",
- "web service"
- ],
- "support": {
- "issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/6.5"
- },
- "time": "2020-06-16T21:01:06+00:00"
- },
- {
- "name": "guzzlehttp/promises",
- "version": "1.4.1",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/promises.git",
- "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d",
- "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5"
- },
- "require-dev": {
- "symfony/phpunit-bridge": "^4.4 || ^5.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Promise\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- }
- ],
- "description": "Guzzle promises library",
- "keywords": [
- "promise"
- ],
- "support": {
- "issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/1.4.1"
- },
- "time": "2021-03-07T09:25:29+00:00"
- },
- {
- "name": "guzzlehttp/psr7",
- "version": "1.8.2",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/psr7.git",
- "reference": "dc960a912984efb74d0a90222870c72c87f10c91"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91",
- "reference": "dc960a912984efb74d0a90222870c72c87f10c91",
- "shasum": ""
- },
- "require": {
- "php": ">=5.4.0",
- "psr/http-message": "~1.0",
- "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
- },
- "provide": {
- "psr/http-message-implementation": "1.0"
- },
- "require-dev": {
- "ext-zlib": "*",
- "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
- },
- "suggest": {
- "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.7-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Psr7\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "Tobias Schultze",
- "homepage": "https://github.com/Tobion"
- }
- ],
- "description": "PSR-7 message implementation that also provides common utility methods",
- "keywords": [
- "http",
- "message",
- "psr-7",
- "request",
- "response",
- "stream",
- "uri",
- "url"
- ],
- "support": {
- "issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/1.8.2"
- },
- "time": "2021-04-26T09:17:50+00:00"
- },
- {
- "name": "myclabs/deep-copy",
- "version": "1.10.2",
- "source": {
- "type": "git",
- "url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "replace": {
- "myclabs/deep-copy": "self.version"
- },
- "require-dev": {
- "doctrine/collections": "^1.0",
- "doctrine/common": "^2.6",
- "phpunit/phpunit": "^7.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "DeepCopy\\": "src/DeepCopy/"
- },
- "files": [
- "src/DeepCopy/deep_copy.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Create deep copies (clones) of your objects",
- "keywords": [
- "clone",
- "copy",
- "duplicate",
- "object",
- "object graph"
- ],
- "support": {
- "issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
- },
- "funding": [
- {
- "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-13T09:40:50+00:00"
- },
- {
- "name": "nikic/php-parser",
- "version": "v4.12.0",
- "source": {
- "type": "git",
- "url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "6608f01670c3cc5079e18c1dab1104e002579143"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6608f01670c3cc5079e18c1dab1104e002579143",
- "reference": "6608f01670c3cc5079e18c1dab1104e002579143",
- "shasum": ""
- },
- "require": {
- "ext-tokenizer": "*",
- "php": ">=7.0"
- },
- "require-dev": {
- "ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
- },
- "bin": [
- "bin/php-parse"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.9-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PhpParser\\": "lib/PhpParser"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Nikita Popov"
- }
- ],
- "description": "A PHP parser written in PHP",
- "keywords": [
- "parser",
- "php"
- ],
- "support": {
- "issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.12.0"
- },
- "time": "2021-07-21T10:44:31+00:00"
- },
- {
- "name": "phar-io/manifest",
- "version": "2.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/manifest.git",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-phar": "*",
- "ext-xmlwriter": "*",
- "phar-io/version": "^3.0.1",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
- "support": {
- "issues": "https://github.com/phar-io/manifest/issues",
- "source": "https://github.com/phar-io/manifest/tree/2.0.3"
- },
- "time": "2021-07-20T11:28:43+00:00"
- },
- {
- "name": "phar-io/version",
- "version": "3.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/version.git",
- "reference": "bae7c545bef187884426f042434e561ab1ddb182"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
- "reference": "bae7c545bef187884426f042434e561ab1ddb182",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Library for handling version information and constraints",
- "support": {
- "issues": "https://github.com/phar-io/version/issues",
- "source": "https://github.com/phar-io/version/tree/3.1.0"
- },
- "time": "2021-02-23T14:00:09+00:00"
- },
- {
- "name": "phpdocumentor/reflection-common",
- "version": "2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-2.x": "2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jaap van Otterdijk",
- "email": "opensource@ijaap.nl"
- }
- ],
- "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
- "homepage": "http://www.phpdoc.org",
- "keywords": [
- "FQSEN",
- "phpDocumentor",
- "phpdoc",
- "reflection",
- "static analysis"
- ],
- "support": {
- "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
- "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
- },
- "time": "2020-06-27T09:03:43+00:00"
- },
- {
- "name": "phpdocumentor/reflection-docblock",
- "version": "5.2.2",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
- "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
- "shasum": ""
- },
- "require": {
- "ext-filter": "*",
- "php": "^7.2 || ^8.0",
- "phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.3",
- "webmozart/assert": "^1.9.1"
- },
- "require-dev": {
- "mockery/mockery": "~1.3.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- },
- {
- "name": "Jaap van Otterdijk",
- "email": "account@ijaap.nl"
- }
- ],
- "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
- "support": {
- "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master"
- },
- "time": "2020-09-03T19:13:55+00:00"
- },
- {
- "name": "phpdocumentor/type-resolver",
- "version": "1.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
- "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0",
- "phpdocumentor/reflection-common": "^2.0"
- },
- "require-dev": {
- "ext-tokenizer": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-1.x": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- }
- ],
- "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
- "support": {
- "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0"
- },
- "time": "2020-09-17T18:55:26+00:00"
- },
- {
- "name": "phpspec/prophecy",
- "version": "1.13.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea",
- "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.2",
- "php": "^7.2 || ~8.0, <8.1",
- "phpdocumentor/reflection-docblock": "^5.2",
- "sebastian/comparator": "^3.0 || ^4.0",
- "sebastian/recursion-context": "^3.0 || ^4.0"
- },
- "require-dev": {
- "phpspec/phpspec": "^6.0",
- "phpunit/phpunit": "^8.0 || ^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.11.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Prophecy\\": "src/Prophecy"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- },
- {
- "name": "Marcello Duarte",
- "email": "marcello.duarte@gmail.com"
- }
- ],
- "description": "Highly opinionated mocking framework for PHP 5.3+",
- "homepage": "https://github.com/phpspec/prophecy",
- "keywords": [
- "Double",
- "Dummy",
- "fake",
- "mock",
- "spy",
- "stub"
- ],
- "support": {
- "issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/1.13.0"
- },
- "time": "2021-03-17T13:42:18+00:00"
- },
- {
- "name": "phpunit/php-code-coverage",
- "version": "9.2.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "f6293e1b30a2354e8428e004689671b83871edde"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde",
- "reference": "f6293e1b30a2354e8428e004689671b83871edde",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-libxml": "*",
- "ext-xmlwriter": "*",
- "nikic/php-parser": "^4.10.2",
- "php": ">=7.3",
- "phpunit/php-file-iterator": "^3.0.3",
- "phpunit/php-text-template": "^2.0.2",
- "sebastian/code-unit-reverse-lookup": "^2.0.2",
- "sebastian/complexity": "^2.0",
- "sebastian/environment": "^5.1.2",
- "sebastian/lines-of-code": "^1.0.3",
- "sebastian/version": "^3.0.1",
- "theseer/tokenizer": "^1.2.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-pcov": "*",
- "ext-xdebug": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "9.2-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
- "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
- "keywords": [
- "coverage",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-03-28T07:26:59+00:00"
- },
- {
- "name": "phpunit/php-file-iterator",
- "version": "3.0.5",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8",
- "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "FilterIterator implementation that filters files based on a list of suffixes.",
- "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
- "keywords": [
- "filesystem",
- "iterator"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:57:25+00:00"
- },
- {
- "name": "phpunit/php-invoker",
- "version": "3.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "ext-pcntl": "*",
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-pcntl": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Invoke callables with a timeout",
- "homepage": "https://github.com/sebastianbergmann/php-invoker/",
- "keywords": [
- "process"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
- "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:58:55+00:00"
- },
- {
- "name": "phpunit/php-text-template",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Simple template engine.",
- "homepage": "https://github.com/sebastianbergmann/php-text-template/",
- "keywords": [
- "template"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T05:33:50+00:00"
- },
- {
- "name": "phpunit/php-timer",
- "version": "5.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Utility class for timing",
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
- "keywords": [
- "timer"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:16:10+00:00"
- },
- {
- "name": "phpunit/phpunit",
- "version": "9.5.9",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b",
- "reference": "ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.3.1",
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-xml": "*",
- "ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.10.1",
- "phar-io/manifest": "^2.0.3",
- "phar-io/version": "^3.0.2",
- "php": ">=7.3",
- "phpspec/prophecy": "^1.12.1",
- "phpunit/php-code-coverage": "^9.2.3",
- "phpunit/php-file-iterator": "^3.0.5",
- "phpunit/php-invoker": "^3.1.1",
- "phpunit/php-text-template": "^2.0.3",
- "phpunit/php-timer": "^5.0.2",
- "sebastian/cli-parser": "^1.0.1",
- "sebastian/code-unit": "^1.0.6",
- "sebastian/comparator": "^4.0.5",
- "sebastian/diff": "^4.0.3",
- "sebastian/environment": "^5.1.3",
- "sebastian/exporter": "^4.0.3",
- "sebastian/global-state": "^5.0.1",
- "sebastian/object-enumerator": "^4.0.3",
- "sebastian/resource-operations": "^3.0.3",
- "sebastian/type": "^2.3.4",
- "sebastian/version": "^3.0.2"
- },
- "require-dev": {
- "ext-pdo": "*",
- "phpspec/prophecy-phpunit": "^2.0.1"
- },
- "suggest": {
- "ext-soap": "*",
- "ext-xdebug": "*"
- },
- "bin": [
- "phpunit"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "9.5-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ],
- "files": [
- "src/Framework/Assert/Functions.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "The PHP Unit Testing framework.",
- "homepage": "https://phpunit.de/",
- "keywords": [
- "phpunit",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.9"
- },
- "funding": [
- {
- "url": "https://phpunit.de/donate.html",
- "type": "custom"
- },
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-08-31T06:47:40+00:00"
- },
- {
- "name": "psr/container",
- "version": "1.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/container.git",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Psr\\Container\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common Container Interface (PHP FIG PSR-11)",
- "homepage": "https://github.com/php-fig/container",
- "keywords": [
- "PSR-11",
- "container",
- "container-interface",
- "container-interop",
- "psr"
- ],
- "support": {
- "issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/1.1.1"
- },
- "time": "2021-03-05T17:36:06+00:00"
- },
- {
- "name": "psr/event-dispatcher",
- "version": "1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/event-dispatcher.git",
- "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
- "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\EventDispatcher\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Standard interfaces for event handling.",
- "keywords": [
- "events",
- "psr",
- "psr-14"
- ],
- "support": {
- "issues": "https://github.com/php-fig/event-dispatcher/issues",
- "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
- },
- "time": "2019-01-08T18:20:26+00:00"
- },
- {
- "name": "ralouphie/getallheaders",
- "version": "3.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/ralouphie/getallheaders.git",
- "reference": "120b605dfeb996808c31b6477290a714d356e822"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
- "reference": "120b605dfeb996808c31b6477290a714d356e822",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6"
- },
- "require-dev": {
- "php-coveralls/php-coveralls": "^2.1",
- "phpunit/phpunit": "^5 || ^6.5"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/getallheaders.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ralph Khattar",
- "email": "ralph.khattar@gmail.com"
- }
- ],
- "description": "A polyfill for getallheaders.",
- "support": {
- "issues": "https://github.com/ralouphie/getallheaders/issues",
- "source": "https://github.com/ralouphie/getallheaders/tree/develop"
- },
- "time": "2019-03-08T08:55:37+00:00"
- },
- {
- "name": "sebastian/cli-parser",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for parsing CLI options",
- "homepage": "https://github.com/sebastianbergmann/cli-parser",
- "support": {
- "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T06:08:49+00:00"
- },
- {
- "name": "sebastian/code-unit",
- "version": "1.0.8",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the PHP code units",
- "homepage": "https://github.com/sebastianbergmann/code-unit",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit/issues",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:08:54+00:00"
- },
- {
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "2.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Looks up which function or method a line of code belongs to",
- "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:30:19+00:00"
- },
- {
- "name": "sebastian/comparator",
- "version": "4.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
- "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/diff": "^4.0",
- "sebastian/exporter": "^4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@2bepublished.at"
- }
- ],
- "description": "Provides the functionality to compare PHP values for equality",
- "homepage": "https://github.com/sebastianbergmann/comparator",
- "keywords": [
- "comparator",
- "compare",
- "equality"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T15:49:45+00:00"
- },
- {
- "name": "sebastian/complexity",
- "version": "2.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
- "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^4.7",
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for calculating the complexity of PHP code units",
- "homepage": "https://github.com/sebastianbergmann/complexity",
- "support": {
- "issues": "https://github.com/sebastianbergmann/complexity/issues",
- "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T15:52:27+00:00"
- },
- {
- "name": "sebastian/diff",
- "version": "4.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
- "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "symfony/process": "^4.2 || ^5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
+ "name": "William Durand",
+ "email": "will+git@drnd.me"
}
],
- "description": "Diff implementation",
- "homepage": "https://github.com/sebastianbergmann/diff",
+ "description": "Content Negotiation tools for PHP provided as a standalone library.",
+ "homepage": "http://williamdurand.fr/Negotiation/",
"keywords": [
- "diff",
- "udiff",
- "unidiff",
- "unified diff"
+ "accept",
+ "content",
+ "format",
+ "header",
+ "negotiation"
],
"support": {
- "issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
+ "issues": "https://github.com/willdurand/Negotiation/issues",
+ "source": "https://github.com/willdurand/Negotiation/tree/3.0.0"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:10:38+00:00"
- },
+ "time": "2020-09-25T08:01:41+00:00"
+ }
+ ],
+ "packages-dev": [
{
- "name": "sebastian/environment",
- "version": "5.1.3",
+ "name": "doctrine/instantiator",
+ "version": "1.4.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
- "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
+ "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-posix": "*"
+ "doctrine/coding-standard": "^8.0",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.1-dev"
- }
- },
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "https://ocramius.github.io/"
}
],
- "description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
"keywords": [
- "Xdebug",
- "environment",
- "hhvm"
+ "constructor",
+ "instantiate"
],
"support": {
- "issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:52:38+00:00"
- },
- {
- "name": "sebastian/exporter",
- "version": "4.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65",
- "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "ext-mbstring": "*",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
},
{
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
},
{
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "http://www.github.com/sebastianbergmann/exporter",
- "keywords": [
- "export",
- "exporter"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+ "type": "tidelift"
}
],
- "time": "2020-09-28T05:24:23+00:00"
+ "time": "2020-11-10T18:47:58+00:00"
},
{
- "name": "sebastian/global-state",
- "version": "5.0.3",
+ "name": "myclabs/deep-copy",
+ "version": "1.10.2",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49"
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49",
- "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
+ "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
- "ext-dom": "*",
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-uopz": "*"
+ "doctrine/collections": "^1.0",
+ "doctrine/common": "^2.6",
+ "phpunit/phpunit": "^7.1"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
"autoload": {
- "classmap": [
- "src/"
- ]
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
+ "MIT"
],
- "description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "description": "Create deep copies (clones) of your objects",
"keywords": [
- "global state"
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
],
"support": {
- "issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3"
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
}
],
- "time": "2021-06-11T13:31:12+00:00"
+ "time": "2020-11-13T09:40:50+00:00"
},
{
- "name": "sebastian/lines-of-code",
- "version": "1.0.3",
+ "name": "nikic/php-parser",
+ "version": "v4.13.2",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
- "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
+ "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.6",
- "php": ">=7.3"
+ "ext-tokenizer": "*",
+ "php": ">=7.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
},
+ "bin": [
+ "bin/php-parse"
+ ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-master": "4.9-dev"
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -4429,51 +1670,45 @@
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "Nikita Popov"
}
],
- "description": "Library for counting the lines of code in PHP source code",
- "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
"support": {
- "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-28T06:42:11+00:00"
+ "time": "2021-11-30T19:35:32+00:00"
},
{
- "name": "sebastian/object-enumerator",
- "version": "4.0.4",
+ "name": "phar-io/manifest",
+ "version": "2.0.3",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
@@ -4486,51 +1721,47 @@
"BSD-3-Clause"
],
"authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
}
],
- "description": "Traverses array structures and object graphs to enumerate all referenced objects",
- "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
"support": {
- "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.3"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:12:34+00:00"
+ "time": "2021-07-20T11:28:43+00:00"
},
{
- "name": "sebastian/object-reflector",
- "version": "2.0.4",
+ "name": "phar-io/version",
+ "version": "3.2.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
"shasum": ""
},
"require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
+ "php": "^7.2 || ^8.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
"autoload": {
"classmap": [
"src/"
@@ -4541,2073 +1772,1704 @@
"BSD-3-Clause"
],
"authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
}
],
- "description": "Allows reflection of object attributes, including inherited and non-public ones",
- "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "description": "Library for handling version information and constraints",
"support": {
- "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:14:26+00:00"
+ "time": "2022-02-21T01:04:05+00:00"
},
{
- "name": "sebastian/recursion-context",
- "version": "4.0.4",
+ "name": "phpdocumentor/reflection-common",
+ "version": "2.2.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
+ "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
- "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"shasum": ""
},
"require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
+ "php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-2.x": "2.x-dev"
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
+ "name": "Jaap van Otterdijk",
+ "email": "opensource@ijaap.nl"
}
],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+ "homepage": "http://www.phpdoc.org",
+ "keywords": [
+ "FQSEN",
+ "phpDocumentor",
+ "phpdoc",
+ "reflection",
+ "static analysis"
+ ],
"support": {
- "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
+ "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:17:30+00:00"
+ "time": "2020-06-27T09:03:43+00:00"
},
{
- "name": "sebastian/resource-operations",
- "version": "3.0.3",
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "5.3.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "ext-filter": "*",
+ "php": "^7.2 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.2",
+ "phpdocumentor/type-resolver": "^1.3",
+ "webmozart/assert": "^1.9.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.0"
+ "mockery/mockery": "~1.3.2",
+ "psalm/phar": "^4.8"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "5.x-dev"
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides a list of PHP built-in functions that operate on resources",
- "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
- "support": {
- "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
- "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
- },
- "funding": [
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ },
{
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
+ "name": "Jaap van Otterdijk",
+ "email": "account@ijaap.nl"
}
],
- "time": "2020-09-28T06:45:17+00:00"
+ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
+ },
+ "time": "2021-10-19T17:43:47+00:00"
},
{
- "name": "sebastian/type",
- "version": "2.3.4",
+ "name": "phpdocumentor/type-resolver",
+ "version": "1.6.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/type.git",
- "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914"
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914",
- "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706",
+ "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": "^7.2 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "ext-tokenizer": "*",
+ "psalm/phar": "^4.8"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.3-dev"
+ "dev-1.x": "1.x-dev"
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
}
],
- "description": "Collection of value objects that represent the types of the PHP type system",
- "homepage": "https://github.com/sebastianbergmann/type",
+ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
- "issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/2.3.4"
+ "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-06-15T12:49:02+00:00"
+ "time": "2022-01-04T19:58:01+00:00"
},
{
- "name": "sebastian/version",
- "version": "3.0.2",
+ "name": "phpspec/prophecy",
+ "version": "v1.15.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "c6c1022351a901512170118436c764e473f6de8c"
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
- "reference": "c6c1022351a901512170118436c764e473f6de8c",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
+ "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "doctrine/instantiator": "^1.2",
+ "php": "^7.2 || ~8.0, <8.2",
+ "phpdocumentor/reflection-docblock": "^5.2",
+ "sebastian/comparator": "^3.0 || ^4.0",
+ "sebastian/recursion-context": "^3.0 || ^4.0"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^6.0 || ^7.0",
+ "phpunit/phpunit": "^8.0 || ^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "1.x-dev"
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "Prophecy\\": "src/Prophecy"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
}
],
- "description": "Library that helps with managing the version number of Git-hosted PHP projects",
- "homepage": "https://github.com/sebastianbergmann/version",
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
"support": {
- "issues": "https://github.com/sebastianbergmann/version/issues",
- "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+ "issues": "https://github.com/phpspec/prophecy/issues",
+ "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T06:39:44+00:00"
+ "time": "2021-12-08T12:19:24+00:00"
},
{
- "name": "symfony/browser-kit",
- "version": "v4.4.27",
+ "name": "phpstan/phpstan",
+ "version": "1.4.6",
"source": {
"type": "git",
- "url": "https://github.com/symfony/browser-kit.git",
- "reference": "9629d1524d8ced5a4ec3e94abdbd638b4ec8319b"
+ "url": "https://github.com/phpstan/phpstan.git",
+ "reference": "8a7761f1c520e0dad6e04d862fdc697445457cfe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/9629d1524d8ced5a4ec3e94abdbd638b4ec8319b",
- "reference": "9629d1524d8ced5a4ec3e94abdbd638b4ec8319b",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/8a7761f1c520e0dad6e04d862fdc697445457cfe",
+ "reference": "8a7761f1c520e0dad6e04d862fdc697445457cfe",
"shasum": ""
},
"require": {
- "php": ">=7.1.3",
- "symfony/dom-crawler": "^3.4|^4.0|^5.0",
- "symfony/polyfill-php80": "^1.16"
- },
- "require-dev": {
- "symfony/css-selector": "^3.4|^4.0|^5.0",
- "symfony/http-client": "^4.3|^5.0",
- "symfony/mime": "^4.3|^5.0",
- "symfony/process": "^3.4|^4.0|^5.0"
+ "php": "^7.1|^8.0"
},
- "suggest": {
- "symfony/process": ""
+ "conflict": {
+ "phpstan/phpstan-shim": "*"
},
+ "bin": [
+ "phpstan",
+ "phpstan.phar"
+ ],
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4-dev"
+ }
+ },
"autoload": {
- "psr-4": {
- "Symfony\\Component\\BrowserKit\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "files": [
+ "bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically",
- "homepage": "https://symfony.com",
+ "description": "PHPStan - PHP Static Analysis Tool",
"support": {
- "source": "https://github.com/symfony/browser-kit/tree/v4.4.27"
+ "issues": "https://github.com/phpstan/phpstan/issues",
+ "source": "https://github.com/phpstan/phpstan/tree/1.4.6"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
+ "url": "https://github.com/ondrejmirtes",
+ "type": "github"
},
{
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/phpstan",
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "url": "https://www.patreon.com/phpstan",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
"type": "tidelift"
}
],
- "time": "2021-07-21T12:19:41+00:00"
+ "time": "2022-02-06T12:56:13+00:00"
},
{
- "name": "symfony/config",
- "version": "v4.4.30",
+ "name": "phpunit/php-code-coverage",
+ "version": "9.2.11",
"source": {
"type": "git",
- "url": "https://github.com/symfony/config.git",
- "reference": "d9ea72de055cd822e5228ff898e2aad2f52f76b0"
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "665a1ac0a763c51afc30d6d130dac0813092b17f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/d9ea72de055cd822e5228ff898e2aad2f52f76b0",
- "reference": "d9ea72de055cd822e5228ff898e2aad2f52f76b0",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/665a1ac0a763c51afc30d6d130dac0813092b17f",
+ "reference": "665a1ac0a763c51afc30d6d130dac0813092b17f",
"shasum": ""
},
"require": {
- "php": ">=7.1.3",
- "symfony/filesystem": "^3.4|^4.0|^5.0",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-php80": "^1.16",
- "symfony/polyfill-php81": "^1.22"
- },
- "conflict": {
- "symfony/finder": "<3.4"
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^4.13.0",
+ "php": ">=7.3",
+ "phpunit/php-file-iterator": "^3.0.3",
+ "phpunit/php-text-template": "^2.0.2",
+ "sebastian/code-unit-reverse-lookup": "^2.0.2",
+ "sebastian/complexity": "^2.0",
+ "sebastian/environment": "^5.1.2",
+ "sebastian/lines-of-code": "^1.0.3",
+ "sebastian/version": "^3.0.1",
+ "theseer/tokenizer": "^1.2.0"
},
"require-dev": {
- "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
- "symfony/finder": "^3.4|^4.0|^5.0",
- "symfony/messenger": "^4.1|^5.0",
- "symfony/service-contracts": "^1.1|^2",
- "symfony/yaml": "^3.4|^4.0|^5.0"
+ "phpunit/phpunit": "^9.3"
},
"suggest": {
- "symfony/yaml": "To use the yaml reference dumper"
+ "ext-pcov": "*",
+ "ext-xdebug": "*"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.2-dev"
+ }
+ },
"autoload": {
- "psr-4": {
- "Symfony\\Component\\Config\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
- "homepage": "https://symfony.com",
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
"support": {
- "source": "https://github.com/symfony/config/tree/v4.4.30"
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.11"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-08-04T20:31:23+00:00"
+ "time": "2022-02-18T12:46:09+00:00"
},
{
- "name": "symfony/console",
- "version": "v5.3.7",
+ "name": "phpunit/php-file-iterator",
+ "version": "3.0.6",
"source": {
"type": "git",
- "url": "https://github.com/symfony/console.git",
- "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a"
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/8b1008344647462ae6ec57559da166c2bfa5e16a",
- "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php73": "^1.8",
- "symfony/polyfill-php80": "^1.16",
- "symfony/service-contracts": "^1.1|^2",
- "symfony/string": "^5.1"
- },
- "conflict": {
- "psr/log": ">=3",
- "symfony/dependency-injection": "<4.4",
- "symfony/dotenv": "<5.1",
- "symfony/event-dispatcher": "<4.4",
- "symfony/lock": "<4.4",
- "symfony/process": "<4.4"
- },
- "provide": {
- "psr/log-implementation": "1.0|2.0"
+ "php": ">=7.3"
},
"require-dev": {
- "psr/log": "^1|^2",
- "symfony/config": "^4.4|^5.0",
- "symfony/dependency-injection": "^4.4|^5.0",
- "symfony/event-dispatcher": "^4.4|^5.0",
- "symfony/lock": "^4.4|^5.0",
- "symfony/process": "^4.4|^5.0",
- "symfony/var-dumper": "^4.4|^5.0"
- },
- "suggest": {
- "psr/log": "For using the console logger",
- "symfony/event-dispatcher": "",
- "symfony/lock": "",
- "symfony/process": ""
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
"autoload": {
- "psr-4": {
- "Symfony\\Component\\Console\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Eases the creation of beautiful and testable command line interfaces",
- "homepage": "https://symfony.com",
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
"keywords": [
- "cli",
- "command line",
- "console",
- "terminal"
+ "filesystem",
+ "iterator"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v5.3.7"
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-08-25T20:02:16+00:00"
+ "time": "2021-12-02T12:48:52+00:00"
},
{
- "name": "symfony/css-selector",
- "version": "v5.3.4",
+ "name": "phpunit/php-invoker",
+ "version": "3.1.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/css-selector.git",
- "reference": "7fb120adc7f600a59027775b224c13a33530dd90"
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/7fb120adc7f600a59027775b224c13a33530dd90",
- "reference": "7fb120adc7f600a59027775b224c13a33530dd90",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
},
- "type": "library",
"autoload": {
- "psr-4": {
- "Symfony\\Component\\CssSelector\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Jean-François Simon",
- "email": "jeanfrancois.simon@sensiolabs.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Converts CSS selectors to XPath expressions",
- "homepage": "https://symfony.com",
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
"support": {
- "source": "https://github.com/symfony/css-selector/tree/v5.3.4"
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-07-21T12:38:00+00:00"
+ "time": "2020-09-28T05:58:55+00:00"
},
{
- "name": "symfony/dependency-injection",
- "version": "v4.4.27",
+ "name": "phpunit/php-text-template",
+ "version": "2.0.4",
"source": {
"type": "git",
- "url": "https://github.com/symfony/dependency-injection.git",
- "reference": "52866e2cb314972ff36c5b3d405ba8f523e56f6e"
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/52866e2cb314972ff36c5b3d405ba8f523e56f6e",
- "reference": "52866e2cb314972ff36c5b3d405ba8f523e56f6e",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
"shasum": ""
},
"require": {
- "php": ">=7.1.3",
- "psr/container": "^1.0",
- "symfony/polyfill-php80": "^1.16",
- "symfony/service-contracts": "^1.1.6|^2"
- },
- "conflict": {
- "symfony/config": "<4.3|>=5.0",
- "symfony/finder": "<3.4",
- "symfony/proxy-manager-bridge": "<3.4",
- "symfony/yaml": "<3.4"
- },
- "provide": {
- "psr/container-implementation": "1.0",
- "symfony/service-implementation": "1.0|2.0"
+ "php": ">=7.3"
},
"require-dev": {
- "symfony/config": "^4.3",
- "symfony/expression-language": "^3.4|^4.0|^5.0",
- "symfony/yaml": "^4.4|^5.0"
- },
- "suggest": {
- "symfony/config": "",
- "symfony/expression-language": "For using expressions in service container configuration",
- "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required",
- "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
- "symfony/yaml": ""
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
"autoload": {
- "psr-4": {
- "Symfony\\Component\\DependencyInjection\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Allows you to standardize and centralize the way objects are constructed in your application",
- "homepage": "https://symfony.com",
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
"support": {
- "source": "https://github.com/symfony/dependency-injection/tree/v4.4.27"
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-07-23T15:41:52+00:00"
+ "time": "2020-10-26T05:33:50+00:00"
},
{
- "name": "symfony/deprecation-contracts",
- "version": "v2.4.0",
+ "name": "phpunit/php-timer",
+ "version": "5.0.3",
"source": {
"type": "git",
- "url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
- "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.4-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "dev-master": "5.0-dev"
}
},
"autoload": {
- "files": [
- "function.php"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "A generic function and convention to trigger deprecation notices",
- "homepage": "https://symfony.com",
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0"
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-03-23T23:28:01+00:00"
+ "time": "2020-10-26T13:16:10+00:00"
},
{
- "name": "symfony/dom-crawler",
- "version": "v4.4.30",
+ "name": "phpunit/phpunit",
+ "version": "9.5.14",
"source": {
"type": "git",
- "url": "https://github.com/symfony/dom-crawler.git",
- "reference": "4632ae3567746c7e915c33c67a2fb6ab746090c4"
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "1883687169c017d6ae37c58883ca3994cfc34189"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4632ae3567746c7e915c33c67a2fb6ab746090c4",
- "reference": "4632ae3567746c7e915c33c67a2fb6ab746090c4",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1883687169c017d6ae37c58883ca3994cfc34189",
+ "reference": "1883687169c017d6ae37c58883ca3994cfc34189",
"shasum": ""
},
"require": {
- "php": ">=7.1.3",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "^1.16"
- },
- "conflict": {
- "masterminds/html5": "<2.6"
+ "doctrine/instantiator": "^1.3.1",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.10.1",
+ "phar-io/manifest": "^2.0.3",
+ "phar-io/version": "^3.0.2",
+ "php": ">=7.3",
+ "phpspec/prophecy": "^1.12.1",
+ "phpunit/php-code-coverage": "^9.2.7",
+ "phpunit/php-file-iterator": "^3.0.5",
+ "phpunit/php-invoker": "^3.1.1",
+ "phpunit/php-text-template": "^2.0.3",
+ "phpunit/php-timer": "^5.0.2",
+ "sebastian/cli-parser": "^1.0.1",
+ "sebastian/code-unit": "^1.0.6",
+ "sebastian/comparator": "^4.0.5",
+ "sebastian/diff": "^4.0.3",
+ "sebastian/environment": "^5.1.3",
+ "sebastian/exporter": "^4.0.3",
+ "sebastian/global-state": "^5.0.1",
+ "sebastian/object-enumerator": "^4.0.3",
+ "sebastian/resource-operations": "^3.0.3",
+ "sebastian/type": "^2.3.4",
+ "sebastian/version": "^3.0.2"
},
"require-dev": {
- "masterminds/html5": "^2.6",
- "symfony/css-selector": "^3.4|^4.0|^5.0"
+ "ext-pdo": "*",
+ "phpspec/prophecy-phpunit": "^2.0.1"
},
"suggest": {
- "symfony/css-selector": ""
+ "ext-soap": "*",
+ "ext-xdebug": "*"
},
+ "bin": [
+ "phpunit"
+ ],
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.5-dev"
+ }
+ },
"autoload": {
- "psr-4": {
- "Symfony\\Component\\DomCrawler\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Eases DOM navigation for HTML and XML documents",
- "homepage": "https://symfony.com",
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
"support": {
- "source": "https://github.com/symfony/dom-crawler/tree/v4.4.30"
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.14"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
+ "url": "https://phpunit.de/sponsors.html",
"type": "custom"
},
{
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-08-28T15:40:01+00:00"
+ "time": "2022-02-18T12:54:07+00:00"
},
{
- "name": "symfony/event-dispatcher",
- "version": "v5.3.7",
+ "name": "sebastian/cli-parser",
+ "version": "1.0.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "ce7b20d69c66a20939d8952b617506a44d102130"
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ce7b20d69c66a20939d8952b617506a44d102130",
- "reference": "ce7b20d69c66a20939d8952b617506a44d102130",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/event-dispatcher-contracts": "^2",
- "symfony/polyfill-php80": "^1.16"
- },
- "conflict": {
- "symfony/dependency-injection": "<4.4"
- },
- "provide": {
- "psr/event-dispatcher-implementation": "1.0",
- "symfony/event-dispatcher-implementation": "2.0"
+ "php": ">=7.3"
},
"require-dev": {
- "psr/log": "^1|^2|^3",
- "symfony/config": "^4.4|^5.0",
- "symfony/dependency-injection": "^4.4|^5.0",
- "symfony/error-handler": "^4.4|^5.0",
- "symfony/expression-language": "^4.4|^5.0",
- "symfony/http-foundation": "^4.4|^5.0",
- "symfony/service-contracts": "^1.1|^2",
- "symfony/stopwatch": "^4.4|^5.0"
- },
- "suggest": {
- "symfony/dependency-injection": "",
- "symfony/http-kernel": ""
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
"autoload": {
- "psr-4": {
- "Symfony\\Component\\EventDispatcher\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
- "homepage": "https://symfony.com",
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.7"
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
},
"funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
}
],
- "time": "2021-08-04T21:20:46+00:00"
+ "time": "2020-09-28T06:08:49+00:00"
},
{
- "name": "symfony/event-dispatcher-contracts",
- "version": "v2.4.0",
+ "name": "sebastian/code-unit",
+ "version": "1.0.8",
"source": {
"type": "git",
- "url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11"
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11",
- "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "psr/event-dispatcher": "^1"
+ "php": ">=7.3"
},
- "suggest": {
- "symfony/event-dispatcher-implementation": ""
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.4-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "dev-master": "1.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Contracts\\EventDispatcher\\": ""
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Generic abstractions related to dispatching event",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
"support": {
- "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0"
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-03-23T23:28:01+00:00"
+ "time": "2020-10-26T13:08:54+00:00"
},
{
- "name": "symfony/filesystem",
- "version": "v5.3.4",
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "2.0.3",
"source": {
"type": "git",
- "url": "https://github.com/symfony/filesystem.git",
- "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32"
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/343f4fe324383ca46792cae728a3b6e2f708fb32",
- "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
"autoload": {
- "psr-4": {
- "Symfony\\Component\\Filesystem\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
- "description": "Provides basic utilities for the filesystem",
- "homepage": "https://symfony.com",
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v5.3.4"
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-07-21T12:40:44+00:00"
+ "time": "2020-09-28T05:30:19+00:00"
},
{
- "name": "symfony/polyfill-intl-grapheme",
- "version": "v1.23.1",
+ "name": "sebastian/comparator",
+ "version": "4.0.6",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "16880ba9c5ebe3642d1995ab866db29270b36535"
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535",
- "reference": "16880ba9c5ebe3642d1995ab866db29270b36535",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
+ "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.3",
+ "sebastian/diff": "^4.0",
+ "sebastian/exporter": "^4.0"
},
- "suggest": {
- "ext-intl": "For best performance"
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-master": "4.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
- },
- "files": [
- "bootstrap.php"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
}
],
- "description": "Symfony polyfill for intl's grapheme_* functions",
- "homepage": "https://symfony.com",
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
"keywords": [
- "compatibility",
- "grapheme",
- "intl",
- "polyfill",
- "portable",
- "shim"
+ "comparator",
+ "compare",
+ "equality"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1"
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-05-27T12:26:48+00:00"
+ "time": "2020-10-26T15:49:45+00:00"
},
{
- "name": "symfony/polyfill-intl-idn",
- "version": "v1.23.0",
+ "name": "sebastian/complexity",
+ "version": "2.0.2",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65"
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65",
- "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
+ "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
"shasum": ""
},
"require": {
- "php": ">=7.1",
- "symfony/polyfill-intl-normalizer": "^1.10",
- "symfony/polyfill-php72": "^1.10"
+ "nikic/php-parser": "^4.7",
+ "php": ">=7.3"
},
- "suggest": {
- "ext-intl": "For best performance"
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-master": "2.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Idn\\": ""
- },
- "files": [
- "bootstrap.php"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Laurent Bassin",
- "email": "laurent@bassin.info"
- },
- {
- "name": "Trevor Rowbotham",
- "email": "trevor.rowbotham@pm.me"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "idn",
- "intl",
- "polyfill",
- "portable",
- "shim"
- ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
"support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0"
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-05-27T09:27:20+00:00"
+ "time": "2020-10-26T15:52:27+00:00"
},
{
- "name": "symfony/polyfill-intl-normalizer",
- "version": "v1.23.0",
+ "name": "sebastian/diff",
+ "version": "4.0.4",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
- "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+ "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.3"
},
- "suggest": {
- "ext-intl": "For best performance"
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "symfony/process": "^4.2 || ^5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-master": "4.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
"classmap": [
- "Resources/stubs"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
}
],
- "description": "Symfony polyfill for intl's Normalizer class and related functions",
- "homepage": "https://symfony.com",
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
"keywords": [
- "compatibility",
- "intl",
- "normalizer",
- "polyfill",
- "portable",
- "shim"
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0"
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
+ "funding": [
{
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-02-19T12:13:01+00:00"
+ "time": "2020-10-26T13:10:38+00:00"
},
{
- "name": "symfony/polyfill-mbstring",
- "version": "v1.23.1",
+ "name": "sebastian/environment",
+ "version": "5.1.3",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6"
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6",
- "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
+ "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
},
"suggest": {
- "ext-mbstring": "For best performance"
+ "ext-posix": "*"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- },
- "files": [
- "bootstrap.php"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
- "description": "Symfony polyfill for the Mbstring extension",
- "homepage": "https://symfony.com",
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
"keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
+ "Xdebug",
+ "environment",
+ "hhvm"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1"
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-05-27T12:26:48+00:00"
+ "time": "2020-09-28T05:52:38+00:00"
},
{
- "name": "symfony/polyfill-php72",
- "version": "v1.23.0",
+ "name": "sebastian/exporter",
+ "version": "4.0.4",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "9a142215a36a3888e30d0a9eeea9766764e96976"
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976",
- "reference": "9a142215a36a3888e30d0a9eeea9766764e96976",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
+ "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.3",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-master": "4.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php72\\": ""
- },
- "files": [
- "bootstrap.php"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
}
],
- "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
- "homepage": "https://symfony.com",
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
"keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
+ "export",
+ "exporter"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0"
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-05-27T09:17:38+00:00"
+ "time": "2021-11-11T14:18:36+00:00"
},
{
- "name": "symfony/polyfill-php73",
- "version": "v1.23.0",
+ "name": "sebastian/global-state",
+ "version": "5.0.5",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010"
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010",
- "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
+ "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-uopz": "*"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-master": "5.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php73\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
"classmap": [
- "Resources/stubs"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
- "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
- "homepage": "https://symfony.com",
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
"keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
+ "global state"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0"
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-02-19T12:13:01+00:00"
+ "time": "2022-02-14T08:28:10+00:00"
},
{
- "name": "symfony/polyfill-php80",
- "version": "v1.23.1",
+ "name": "sebastian/lines-of-code",
+ "version": "1.0.3",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be"
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be",
- "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+ "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "nikic/php-parser": "^4.6",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-master": "1.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
"classmap": [
- "Resources/stubs"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1"
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-07-28T13:41:28+00:00"
+ "time": "2020-11-28T06:42:11+00:00"
},
{
- "name": "symfony/polyfill-php81",
- "version": "v1.23.0",
+ "name": "sebastian/object-enumerator",
+ "version": "4.0.4",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "e66119f3de95efc359483f810c4c3e6436279436"
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436",
- "reference": "e66119f3de95efc359483f810c4c3e6436279436",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-master": "4.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php81\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
"classmap": [
- "Resources/stubs"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
- "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
"support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0"
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-05-21T13:25:03+00:00"
+ "time": "2020-10-26T13:12:34+00:00"
},
{
- "name": "symfony/service-contracts",
- "version": "v2.4.0",
+ "name": "sebastian/object-reflector",
+ "version": "2.0.4",
"source": {
"type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
- "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "psr/container": "^1.1"
+ "php": ">=7.3"
},
- "suggest": {
- "symfony/service-implementation": ""
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.4-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "dev-master": "2.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Service\\": ""
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
- "description": "Generic abstractions related to writing services",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v2.4.0"
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-04-01T10:43:52+00:00"
+ "time": "2020-10-26T13:14:26+00:00"
},
{
- "name": "symfony/string",
- "version": "v5.3.7",
+ "name": "sebastian/recursion-context",
+ "version": "4.0.4",
"source": {
"type": "git",
- "url": "https://github.com/symfony/string.git",
- "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5"
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/8d224396e28d30f81969f083a58763b8b9ceb0a5",
- "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
+ "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.0",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "~1.15"
+ "php": ">=7.3"
},
"require-dev": {
- "symfony/error-handler": "^4.4|^5.0",
- "symfony/http-client": "^4.4|^5.0",
- "symfony/translation-contracts": "^1.1|^2",
- "symfony/var-exporter": "^4.4|^5.0"
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
"autoload": {
- "psr-4": {
- "Symfony\\Component\\String\\": ""
- },
- "files": [
- "Resources/functions.php"
- ],
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
}
],
- "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
- "homepage": "https://symfony.com",
- "keywords": [
- "grapheme",
- "i18n",
- "string",
- "unicode",
- "utf-8",
- "utf8"
- ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
"support": {
- "source": "https://github.com/symfony/string/tree/v5.3.7"
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-08-26T08:00:08+00:00"
+ "time": "2020-10-26T13:17:30+00:00"
},
{
- "name": "symfony/translation",
- "version": "v4.4.30",
+ "name": "sebastian/resource-operations",
+ "version": "3.0.3",
"source": {
"type": "git",
- "url": "https://github.com/symfony/translation.git",
- "reference": "db0ba1e85280d8ff11e38d53c70f8814d4d740f5"
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/db0ba1e85280d8ff11e38d53c70f8814d4d740f5",
- "reference": "db0ba1e85280d8ff11e38d53c70f8814d4d740f5",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
"shasum": ""
},
"require": {
- "php": ">=7.1.3",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "^1.16",
- "symfony/translation-contracts": "^1.1.6|^2"
- },
- "conflict": {
- "symfony/config": "<3.4",
- "symfony/dependency-injection": "<3.4",
- "symfony/http-kernel": "<4.4",
- "symfony/yaml": "<3.4"
- },
- "provide": {
- "symfony/translation-implementation": "1.0|2.0"
+ "php": ">=7.3"
},
"require-dev": {
- "psr/log": "^1|^2|^3",
- "symfony/config": "^3.4|^4.0|^5.0",
- "symfony/console": "^3.4|^4.0|^5.0",
- "symfony/dependency-injection": "^3.4|^4.0|^5.0",
- "symfony/finder": "~2.8|~3.0|~4.0|^5.0",
- "symfony/http-kernel": "^4.4",
- "symfony/intl": "^3.4|^4.0|^5.0",
- "symfony/service-contracts": "^1.1.2|^2",
- "symfony/yaml": "^3.4|^4.0|^5.0"
- },
- "suggest": {
- "psr/log-implementation": "To use logging capability in translator",
- "symfony/config": "",
- "symfony/yaml": ""
+ "phpunit/phpunit": "^9.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
"autoload": {
- "psr-4": {
- "Symfony\\Component\\Translation\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
- "description": "Provides tools to internationalize your application",
- "homepage": "https://symfony.com",
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
"support": {
- "source": "https://github.com/symfony/translation/tree/v4.4.30"
+ "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-08-26T05:57:13+00:00"
+ "time": "2020-09-28T06:45:17+00:00"
},
{
- "name": "symfony/translation-contracts",
- "version": "v2.4.0",
+ "name": "sebastian/type",
+ "version": "2.3.4",
"source": {
"type": "git",
- "url": "https://github.com/symfony/translation-contracts.git",
- "reference": "95c812666f3e91db75385749fe219c5e494c7f95"
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95",
- "reference": "95c812666f3e91db75385749fe219c5e494c7f95",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914",
+ "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914",
"shasum": ""
},
"require": {
- "php": ">=7.2.5"
+ "php": ">=7.3"
},
- "suggest": {
- "symfony/translation-implementation": ""
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.4-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "dev-master": "2.3-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Translation\\": ""
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Generic abstractions related to translation",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
"support": {
- "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0"
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "source": "https://github.com/sebastianbergmann/type/tree/2.3.4"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-03-23T23:28:01+00:00"
+ "time": "2021-06-15T12:49:02+00:00"
},
{
- "name": "symfony/yaml",
- "version": "v5.3.6",
+ "name": "sebastian/version",
+ "version": "3.0.2",
"source": {
"type": "git",
- "url": "https://github.com/symfony/yaml.git",
- "reference": "4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7"
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7",
- "reference": "4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/polyfill-ctype": "~1.8"
- },
- "conflict": {
- "symfony/console": "<4.4"
- },
- "require-dev": {
- "symfony/console": "^4.4|^5.0"
- },
- "suggest": {
- "symfony/console": "For validating YAML files using the lint command"
+ "php": ">=7.3"
},
- "bin": [
- "Resources/bin/yaml-lint"
- ],
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
"autoload": {
- "psr-4": {
- "Symfony\\Component\\Yaml\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Loads and dumps YAML files",
- "homepage": "https://symfony.com",
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v5.3.6"
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2021-07-29T06:20:01+00:00"
+ "time": "2020-09-28T06:39:44+00:00"
},
{
"name": "theseer/tokenizer",
@@ -6672,5 +3534,5 @@
"php": ">=8.0"
},
"platform-dev": [],
- "plugin-api-version": "2.1.0"
+ "plugin-api-version": "2.2.0"
}
diff --git a/config.default.ini b/config.default.ini
index 748ced1d..26fcf291 100644
--- a/config.default.ini
+++ b/config.default.ini
@@ -1,6 +1,28 @@
[app]
namespace=App
-default_content_type = text/html
+class_dir=class
+service_loader=ServiceLoader
+slow_delta=0.25
+very_slow_delta=0.50
+render_buffer_size=1024
+
+[router]
+router_file=router.php
+router_class=AppRouter
+default_content_type=text/html
+
+[view]
+component_directory=page/_component
+partial_directory=page/_partial
+
+[logger]
+type=stdout
+level=debug
+path=
+timestamp_format=Y-m-d H:i:s
+log_format={TIMESTAMP}\t{LEVEL}\t{MESSAGE}\t{CONTEXT}
+separator=\t
+newline=\n
[session]
handler=Gt\Session\FileHandler
@@ -20,4 +42,4 @@ migration_table=_migration
query_path=query
[security]
-default_headers="X-Content-Type-Options: nosniff; X-Frame-Options: deny; Content-Security-Policy: default-src 'none'"
\ No newline at end of file
+;default_headers="X-Content-Type-Options: nosniff; X-Frame-Options: deny; Content-Security-Policy: default-src 'none'"
diff --git a/go.php b/go.php
index 3631d401..5bbc7cc1 100644
--- a/go.php
+++ b/go.php
@@ -2,36 +2,56 @@
/**
* Welcome to the PHP.Gt WebEngine!
*
- * This file is the entry point to the WebEngine. The whole request-response lifecycle is
- * documented at https://github.com/PhpGt/WebEngine/wiki/From-request-to-response
+ * This file is the entry point to the WebEngine. The whole request-response
+ * lifecycle is documented at:
+ * https://github.com/PhpGt/WebEngine/wiki/From-request-to-response
*/
-
+chdir(dirname($_SERVER["DOCUMENT_ROOT"]));
+ini_set("display_errors", "on");
/**
- * Before any code is executed, return false here if a static file is requested. When running the
- * PHP inbuilt server, this will output the static file. Other webservers should not get to this
- * point, but it's safe to prevent unnecessary execution.
+ * Before any code is executed, return false here if a static file is requested.
+ * When running the PHP inbuilt server, this will output the static file.
+ * Other webservers should not get to this point, but it's safe to prevent
+ * unnecessary execution.
*/
$uri = urldecode(parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH));
if(strstr($uri, ".")
-|| is_file($_SERVER["DOCUMENT_ROOT"] . $uri)) {
+ || is_file($_SERVER["DOCUMENT_ROOT"] . $uri)) {
return false;
}
/**
- * Require the Composer autoloader, so the rest of the script can locate classes by their namespace,
- * rather than having to know where on disk the files exist.
- * @see https://getcomposer.org/doc/00-intro.md
+ * Require the Composer autoloader, so the rest of the script can locate
+ * classes by their namespace, rather than having to know where on disk the
+ * files exist.
+ * @link https://getcomposer.org/doc/00-intro.md
*/
-$composerAutoloaderPath = implode(DIRECTORY_SEPARATOR, [
- dirname($_SERVER["DOCUMENT_ROOT"]),
- "vendor",
- "autoload.php",
-]);
-require($composerAutoloaderPath);
+foreach([__DIR__, dirname($_SERVER["DOCUMENT_ROOT"])] as $dir) {
+ $autoloadPath = "$dir/vendor/autoload.php";
+ if(file_exists($autoloadPath)) {
+ /** @noinspection PhpIncludeInspection */
+ require $autoloadPath;
+ break;
+ }
+}
/**
- * That's all we need to start the request-response lifecycle. Buckle up and enjoy the ride!
- * @see https://github.com/PhpGt/WebEngine/wiki/From-request-to-response
+ * That's all we need to start the request-response lifecycle.
+ * Buckle up and enjoy the ride!
+ * @link https://github.com/PhpGt/WebEngine/wiki/From-request-to-response
*/
-$lifecycle = new Gt\WebEngine\Lifecycle();
-$lifecycle->start();
\ No newline at end of file
+if(file_exists("init.php")) {
+ require("init.php");
+}
+$lifecycle = new Gt\WebEngine\Middleware\Lifecycle();
+try {
+ $lifecycle->start();
+}
+catch(Exception $e) {
+ if(function_exists("exception_handler")) {
+ call_user_func("exception_handler", $e);
+ }
+ else {
+ throw $e;
+ }
+}
diff --git a/router.default.php b/router.default.php
new file mode 100644
index 00000000..f0011b3c
--- /dev/null
+++ b/router.default.php
@@ -0,0 +1,143 @@
+findForUriPath(
+ $request->getUri()->getPath(),
+ "api/v1",
+ "php"
+ ) as $logicName => $path) {
+ $this->addToLogicAssembly($path);
+ }
+ }
+
+ #[Any(name: "page-route", accept: "text/html,application/xhtml+xml,*/*")]
+ public function page(
+ Request $request
+ ):void {
+ $pathMatcher = new PathMatcher("page");
+ $this->setViewClass(HTMLView::class);
+ $pathMatcher->addFilter(function(string $filePath, string $uriPath, string $baseDir):bool {
+// There are three types of matching files: Basic, Magic and Dynamic.
+// Basic is where a URI matches directly to a file on disk.
+// Magic is where a URI matches a PHP.Gt-specific file, like _common or _header.
+// Dynamic is where a URI matches a file/directory marked as dynamic with "@".
+ $basicFileMatch = new BasicFileMatch($filePath, $baseDir);
+ if($basicFileMatch->matches($uriPath)) {
+ return true;
+ }
+
+ $magicFileMatch = new MagicFileMatch($filePath, $baseDir);
+ if($magicFileMatch->matches($uriPath)) {
+ return true;
+ }
+
+ return false;
+ });
+
+// This sort function allow multiple headers and footers to be in nested
+// directories, so the highest level header is at the start of the list,
+// with the reverse logic applied to footers.
+// TODO: Extract into own function. Should this be maintained within PHP.Gt/Routing ?
+ $headerFooterSort = function(string $a, string $b):int {
+ $fileNameA = pathinfo($a, PATHINFO_FILENAME);
+ $fileNameB = pathinfo($b, PATHINFO_FILENAME);
+
+ if($fileNameA === "_header") {
+ if($fileNameB === "_header") {
+ $aDepth = substr_count($a, "/");
+ $bDepth = substr_count($b, "/");
+ if($aDepth > $bDepth) {
+ return 1;
+ }
+ elseif($aDepth < $bDepth) {
+ return -1;
+ }
+ else {
+ return 0;
+ }
+ }
+
+
+ return -1;
+ }
+
+ if($fileNameA === "_footer") {
+ if($fileNameB === "_footer") {
+ $aDepth = substr_count($a, "/");
+ $bDepth = substr_count($b, "/");
+ if($aDepth < $bDepth) {
+ return 1;
+ }
+ elseif($aDepth > $bDepth) {
+ return -1;
+ }
+ else {
+ return 0;
+ }
+ }
+
+ return 1;
+ }
+
+ if($fileNameB === "_header") {
+ return 1;
+ }
+
+ if($fileNameB === "_footer") {
+ return -1;
+ }
+
+ return 0;
+ };
+
+ $sortNestLevelCallback = fn(string $a, string $b) =>
+ substr_count($a, "/") > substr_count($b, "/")
+ ? 1
+ : (substr_count($a, "/") < substr_count($b, "/")
+ ? -1
+ : 0);
+
+ $matchingLogics = $pathMatcher->findForUriPath(
+ $request->getUri()->getPath(),
+ "page",
+ "php"
+ );
+ usort($matchingLogics, $sortNestLevelCallback);
+ foreach($matchingLogics as $path) {
+ $this->addToLogicAssembly($path);
+ }
+
+ $matchingViews = $pathMatcher->findForUriPath(
+ $request->getUri()->getPath(),
+ "page",
+ "html"
+ );
+ usort($matchingViews, $headerFooterSort);
+ foreach($matchingViews as $path) {
+ $this->addToViewAssembly($path);
+ }
+ }
+
+ #[Post(path: "/greet/@name", function: "greet", accept: "text/plain")]
+ public function dynamicText(
+ DynamicPath $dynamicPath
+ ):void {
+ $this->addToLogicAssembly("class/Output/Greeter.php");
+ }
+}
diff --git a/src/Debug/Timer.php b/src/Debug/Timer.php
new file mode 100644
index 00000000..6c732097
--- /dev/null
+++ b/src/Debug/Timer.php
@@ -0,0 +1,19 @@
+startTime = microtime(true);
+ }
+
+ public function stop():void {
+ $this->endTime = microtime(true);
+ }
+
+ public function getDelta():float {
+ return $this->endTime - $this->startTime;
+ }
+}
diff --git a/src/Dispatch/ApiDispatcher.php b/src/Dispatch/ApiDispatcher.php
deleted file mode 100644
index bfafeaf9..00000000
--- a/src/Dispatch/ApiDispatcher.php
+++ /dev/null
@@ -1,22 +0,0 @@
-router = $router;
- $this->appNamespace = $appNamespace;
- $this->errorHandlingFlag = false;
- $this->logicFactory = new LogicFactory();
- $this->logicPropertyStore = null;
- }
-
- public function storeInternalObjects(
- Config $config,
- ServerInfo $serverInfo,
- Input $input,
- CookieHandler $cookie,
- Session $session,
- Database $database,
- Headers $headers
- ):void {
- $this->logicFactory->setConfig($config);
- $this->logicFactory->setServerInfo($serverInfo);
- $this->logicFactory->setInput($input);
- $this->logicFactory->setCookieHandler($cookie);
- $this->logicFactory->setSession($session);
- $this->logicFactory->setDatabase($database);
- $this->logicFactory->setHeaders($headers);
-
- }
-
- public function setCsrfProtection(TokenStore $csrfProtection):void {
- $this->csrfProtection = $csrfProtection;
- }
-
- /**
- * Handle the request and return a response.
- */
- public function handle(ServerRequestInterface $request):ResponseInterface {
- $uriPath = $request->getUri()->getPath();
- $response = null;
-
- if($this instanceof PageDispatcher) {
- $response = new PageResponse();
- }
- else {
- $response = new ApiResponse();
- }
-
- /** @var View|PageView|ApiView|null $view */
- $view = null;
- $templateDirectory = implode(DIRECTORY_SEPARATOR, [
- $this->router->getBaseViewLogicPath(),
- "_component",
- ]);
-
- $this->router->redirectInvalidPaths($uriPath);
- $viewAssembly = $this->router->getViewAssembly();
- $view = $this->getView(
- $response->getBody(),
- (string)$viewAssembly,
- $templateDirectory,
- $uriPath,
- $request->getHeaderLine("accept")
- );
-
- $this->logicFactory->setView($view);
- $baseLogicDirectory = $this->router->getBaseViewLogicPath();
- $logicAssembly = $this->router->getLogicAssembly();
-
-// TODO: Opportunity for dependency injection:
- $this->logicPropertyStore = new LogicPropertyStore();
-
- $logicObjects = $this->createLogicObjects(
- $logicAssembly,
- $baseLogicDirectory,
- $request->getUri(),
- $this->logicPropertyStore
- );
-
- if(!$logicAssembly->basenameExists()
- && !$viewAssembly->basenameExists()) {
- throw new BasenameNotFoundException($uriPath);
- }
-
-/*
- * Within the logic objects, code can throw HttpExceptions, such as HttpNotFound,
- * HttpForbidden, HttpTemporaryRedirect, etc. This try-catch-finally block will
- * handle any HttpExceptions thrown from the logic objects, but this is not the
- * only place where these exceptions can be thrown. For example, any syntax error
- * or runtime error can still generate exceptions, which will be caught upstream
- * and replaced with a relevant server error exception.
- *
- * Each catch block catches a different type of exception individually so that
- * different behaviour can be applied for logging/headers/etc.
- *
- * NOTE: The catch blocks return the updated response object, The finally
- * block updates the response with the status code of the exception before it
- * is returned, if one is thrown.
- */
- $httpException = null;
- $this->dispatchLogicObjects(
- $logicObjects,
- $this->logicPropertyStore
- );
-
- if($token = $this->injectCsrf($view)) {
- $response = $response->withHeader("X-CSRF", $token);
- }
-
- if(!$this->errorHandlingFlag
- && $errorResponse = $this->httpErrorResponse($request)) {
- return $errorResponse;
- }
-
- if($view instanceof PageView) {
- $view->getViewModel()->removeTemplateAttributes();
- }
- $view->stream();
-
- $response = $response->withHeader(
- "Content-type",
- $this->router->getContentType()
- );
- return $response;
- }
-
- public function overrideRouterUri(UriInterface $uri):void {
- $this->router->overrideUri($uri);
- }
-
- /** @throws BasenameNotFoundException */
- protected abstract function getView(
- StreamInterface $outputStream,
- string $body,
- string $templateDirectory,
- string $path = null,
- string $type = null
- ):View;
-
- protected function streamResponse(string $viewFile, StreamInterface $body) {
- $bodyContent = file_get_contents($viewFile);
- $body->write($bodyContent);
- }
-
- /** @return AbstractLogic[] */
- protected function createLogicObjects(
- Assembly $logicAssembly,
- string $baseLogicDirectory,
- UriInterface $uri,
- LogicPropertyStore $logicPropertyStore
- ):array {
- $logicObjects = [];
-
- foreach($logicAssembly as $logicPath) {
- try {
- $logicObjects []= $this->logicFactory->createLogicObjectFromPath(
- $logicPath,
- $this->appNamespace,
- $baseLogicDirectory,
- $uri,
- $logicPropertyStore
- );
- }
- catch(TypeError $exception) {
- throw new IncorrectLogicObjectType($logicPath);
- }
- }
-
- return $logicObjects;
- }
-
- /** @param AbstractLogic[] $logicObjects */
- protected function dispatchLogicObjects(
- array $logicObjects,
- LogicPropertyStore $logicPropertyStore
- ):void {
- foreach($logicObjects as $i => $setupLogic) {
- if($setupLogic instanceof ApiSetup
- || $setupLogic instanceof PageSetup) {
- $setupLogic->go();
- unset($logicObjects[$i]);
- }
- }
-
- foreach($logicObjects as $logic) {
- $this->setLogicProperties($logic, $logicPropertyStore);
- $logic->before();
- }
-
- foreach($logicObjects as $logic) {
- $logic->handleDo();
- }
-
- foreach($logicObjects as $logic) {
- $logic->go();
- }
-
- foreach($logicObjects as $logic) {
- $logic->after();
- }
- }
-
- protected function injectCsrf(View $view):?string {
- if($view instanceof PageView) {
- $protector = new HTMLDocumentProtector(
- $view->getViewModel(),
- $this->csrfProtection
- );
- return $protector->protectAndInject();
- }
-
- return null;
- }
-
- protected function httpErrorResponse(
- ServerRequestInterface $request
- ):?ResponseInterface {
-// TODO: Null is returned until issue #299 is resolved (no error handling for now).
- return null;
- }
-
- protected function setLogicProperties(
- AbstractLogic $logic,
- LogicPropertyStore $logicPropertyStore
- ):void {
- if($logic instanceof PageSetup
- || $logic instanceof ApiSetup) {
- return;
- }
-
- $propertyStoreReader = new LogicPropertyStoreReader(
- $logicPropertyStore
- );
-
- foreach($propertyStoreReader as $key => $value) {
- if(is_null($value)) {
- continue;
- }
-
- if(in_array($key, LogicPropertyStoreReader::FORBIDDEN_LOGIC_PROPERTIES)) {
-// TODO: Throw exception (?)
- continue;
- }
-
- if(!property_exists($logic, $key)) {
- continue;
- }
-
- $logic->$key = $value;
- }
- }
-}
\ No newline at end of file
diff --git a/src/Dispatch/DispatcherFactory.php b/src/Dispatch/DispatcherFactory.php
deleted file mode 100644
index 2f54de16..00000000
--- a/src/Dispatch/DispatcherFactory.php
+++ /dev/null
@@ -1,53 +0,0 @@
-get("app.namespace");
- $dispatcher = null;
-
- if($router instanceof PageRouter) {
- $dispatcher = new PageDispatcher($router, $appNamespace);
- }
- if($router instanceof ApiRouter) {
- $dispatcher = new ApiDispatcher($router, $appNamespace);
- }
-
- $dispatcher->storeInternalObjects(
- $config,
- $serverInfo,
- $input,
- $cookie,
- $session,
- $database,
- $headers
- );
-
- $dispatcher->setCsrfProtection($csrfProtection);
-
- return $dispatcher;
- }
-}
\ No newline at end of file
diff --git a/src/Dispatch/IncorrectLogicObjectType.php b/src/Dispatch/IncorrectLogicObjectType.php
deleted file mode 100644
index 993ba03b..00000000
--- a/src/Dispatch/IncorrectLogicObjectType.php
+++ /dev/null
@@ -1,6 +0,0 @@
-expandComponents();
- $document->extractTemplates();
-
- if(!is_null($path)) {
- $pathHyphens = str_replace("/", "-", $path);
- $document->body->classList->add("uri-$pathHyphens");
-
- $dirParts = "";
- $pathParts = explode("/", $path);
- foreach($pathParts as $pathPart) {
- if(empty($pathPart)) {
- continue;
- }
-
- $dirParts .= "-$pathPart";
- $document->body->classList->add("dir-$dirParts");
- }
- }
-
- return new PageView($outputStream, $document);
- }
-}
\ No newline at end of file
diff --git a/src/FileSystem/ApplicationRootDirectoryNotSetException.php b/src/FileSystem/ApplicationRootDirectoryNotSetException.php
deleted file mode 100644
index 5711758c..00000000
--- a/src/FileSystem/ApplicationRootDirectoryNotSetException.php
+++ /dev/null
@@ -1,6 +0,0 @@
-path = $this->getPath($basePath, $directory);
-
- if(is_null($this->path)) {
- throw new RequiredDirectoryNotFoundException($basePath);
- }
-
- $this->extensions = $extensions;
- $this->basename = $basename;
- $this->lookupBefore = $lookupBefore;
- $this->lookupAfter = $lookupAfter;
- $before = true;
- $after = true;
-
- $basenamePath = $this->findInDirectory($basename)[0] ?? null;
-
- if($basenameMustExist) {
- if(is_null($basenamePath)) {
- throw new BasenameNotFoundException($basename);
- }
-
- $basenameFile = new SplFileObject(
- $basenamePath,
- "r"
- );
- $line = $basenameFile->getCurrentLine();
- $basenameFile = null;
-
- if(strstr($line, "no-")) {
- if(strstr($line, "no-header")) {
- $before = false;
- }
- if(strstr($line, "no-footer")) {
- $after = false;
- }
- if(strstr(
- $line,
- "no-header-footer")
- ) {
- $before = false;
- $after = false;
- }
- }
- }
-
- $this->basenameExists = !is_null($basenamePath);
-
- $this->assemblyParts = $this->getAssemblyParts(
- $before,
- $after
- );
- }
-
- public function __toString():string {
- $string = "";
-
- foreach($this->assemblyParts as $part) {
- $string .= file_get_contents($part);
- }
-
- return $string;
- }
-
- public function basenameExists():bool {
- return $this->basenameExists;
- }
-
- protected function getAssemblyParts(
- bool $before = true,
- bool $after = true
- ):array {
- $beforeParts = [];
- $afterParts = [];
-
- if($before) {
- foreach($this->lookupBefore as $lookup) {
- $beforeParts = array_merge(
- $beforeParts,
- $this->findInDirectory(
- $lookup,
- true
- )
- );
- }
- }
-
- $parts = $this->findInDirectory(
- $this->basename,
- false
- );
-
- if($after) {
- foreach($this->lookupAfter as $lookup) {
- $afterParts = array_merge(
- $afterParts,
- $this->findInDirectory(
- $lookup,
- true
- )
- );
- }
- }
-
-// Before parts must be in order of outer-inner nested files.
-// After parts must be in order of inner-outer nested files.
- usort($beforeParts, fn(string $a, string $b)
- => substr_count($a, "/") > substr_count($b, "/"));
- usort($afterParts, fn(string $a, string $b)
- => substr_count($a, "/") < substr_count($b, "/"));
-
- $parts = array_merge(
- $beforeParts,
- $parts,
- $afterParts
- );
-
- $parts = array_filter($parts);
- $parts = array_unique($parts);
- return array_values(array_filter($parts));
- }
-
- protected function findInDirectory(
- string $basename,
- bool $bubbleUp = false
- ):array {
- $foundPathList = [];
- $appRoot = Path::getApplicationRootDirectory($this->path);
-
- $path = $this->path;
- do {
- $extensionString = implode(",", $this->extensions);
- $extensionGlob = implode("", [
- "{",
- $extensionString,
- "}",
- ]);
-
- $baseNamesToMatch = [
- $basename,
- ];
-
- $basenameFirstChar = $basename[0] ?? null;
-
- if($basenameFirstChar !== "_") {
- $baseNamesToMatch []= "@*";
- }
-
- foreach($baseNamesToMatch as $baseNameToMatch) {
- $glob = implode(DIRECTORY_SEPARATOR, [
- $path,
- "$baseNameToMatch.$extensionGlob",
- ]);
- $matches = glob($glob, GLOB_BRACE);
-
- if(!empty($matches)) {
- $foundPathList []= $matches[0];
- break;
- }
- }
-
- $path = dirname($path);
- } while($bubbleUp && $path !== $appRoot && $path !== "/");
-
- return $foundPathList;
- }
-
- private function getPath(string $baseName, string $directory):?string {
- $path = realpath($baseName . $directory);
-
-// If the path exists, simply return it.
- if($path !== false) {
- return $path;
- }
-
-// Replace the path with any dynamic directories that exist.
- $pathToScan = $baseName;
- $subDirectoryParts = explode(
- DIRECTORY_SEPARATOR,
- $directory
- );
- $subDirectoryParts = array_filter($subDirectoryParts);
-
- do {
- $fileList = [];
- if(is_dir($pathToScan)) {
- $fileList = scandir($pathToScan);
- }
-
- $nextDirName = array_shift($subDirectoryParts);
- if(in_array($nextDirName, $fileList)) {
- $pathToScan .= DIRECTORY_SEPARATOR . $nextDirName;
- }
- else {
- $dynamicDirectory = null;
-
- foreach($fileList as $file) {
- if($file[0] !== "@") {
- continue;
- }
-
- $dynamicDirectory = $file;
- }
-
- if(is_null($dynamicDirectory)) {
- break;
- }
-
- $pathToScan .= DIRECTORY_SEPARATOR . $dynamicDirectory;
- }
- } while(!empty($subDirectoryParts));
-
- if(is_dir($pathToScan)) {
- return $pathToScan;
- }
- if(is_file($pathToScan)) {
- return dirname($pathToScan);
- }
-
- return null;
- }
-
- public function current():string {
- return $this->assemblyParts[$this->iteratorKey];
- }
-
- public function next():void {
- $this->iteratorKey ++;
- }
-
- public function key():int {
- return $this->iteratorKey;
- }
-
- public function valid():bool {
- return isset($this->assemblyParts[$this->iteratorKey]);
- }
-
- public function rewind():void {
- $this->iteratorKey = 0;
- }
-}
\ No newline at end of file
diff --git a/src/FileSystem/BasenameNotFoundException.php b/src/FileSystem/BasenameNotFoundException.php
deleted file mode 100644
index 10969e96..00000000
--- a/src/FileSystem/BasenameNotFoundException.php
+++ /dev/null
@@ -1,6 +0,0 @@
-directory = $directory;
- }
-
- public function findParentContaining(string $match):?string {
- $path = $this->directory;
-
- while(strlen($path) > 0
- && (!$this->pathIsRoot($path)
- && !$this->directoryContains($path, $match))) {
- $lastSlashPos = strrpos($path, DIRECTORY_SEPARATOR);
- $path = substr($path, 0, $lastSlashPos);
- }
-
- if($path === "/") {
- if($match === "/"
- || empty($match)) {
- return $path;
- }
- else {
- return null;
- }
- }
-
- return $path;
- }
-
- private function pathIsRoot(string $path):bool {
-// Unix root path is a simple slash.
- if(DIRECTORY_SEPARATOR === "/") {
- return $path === "/";
- }
-
-// Windows root path is X:\
- return (
- substr_count($path, DIRECTORY_SEPARATOR) === 1
- && $path[1] === ":"
- );
- }
-
- private function directoryContains(string $directory, string $match):bool {
- return file_exists(implode(DIRECTORY_SEPARATOR, [
- $directory,
- $match,
- ]));
- }
-}
\ No newline at end of file
diff --git a/src/FileSystem/EmptyAssemblyException.php b/src/FileSystem/EmptyAssemblyException.php
deleted file mode 100644
index 327f9de7..00000000
--- a/src/FileSystem/EmptyAssemblyException.php
+++ /dev/null
@@ -1,6 +0,0 @@
-findParentContaining("composer.json")
- );
- }
-
- public static function getGtRootDirectory():string {
- $directoryWalker = new DirectoryWalker(__DIR__);
- return self::fixPath(
- $directoryWalker->findParentContaining("src")
- );
- }
-
- public static function getWwwDirectory(string $appRoot = null):string {
- $appRoot = self::defaultApplicationRoot($appRoot);
- return implode(DIRECTORY_SEPARATOR, [
- self::getApplicationRootDirectory($appRoot),
- "www",
- ]);
- }
-
- public static function getDataDirectory(string $appRoot = null):string {
- $appRoot = self::defaultApplicationRoot($appRoot);
- return implode(DIRECTORY_SEPARATOR, [
- self::getApplicationRootDirectory($appRoot),
- "data",
- ]);
- }
-
- public static function getPageDirectory(string $appRoot = null):string {
- $appRoot = self::defaultApplicationRoot($appRoot);
- return implode(DIRECTORY_SEPARATOR, [
- self::getApplicationRootDirectory($appRoot),
- "page",
- ]);
- }
- public static function getApiDirectory(string $appRoot = null):string {
- $appRoot = self::defaultApplicationRoot($appRoot);
- return implode(DIRECTORY_SEPARATOR, [
- self::getApplicationRootDirectory($appRoot),
- "api",
- ]);
- }
-
- public static function getAssetDirectory(string $appRoot = null):string {
- $appRoot = self::defaultApplicationRoot($appRoot);
- return implode(DIRECTORY_SEPARATOR, [
- self::getApplicationRootDirectory($appRoot),
- "asset",
- ]);
- }
-
- public static function getScriptDirectory(string $appRoot = null):string {
- $appRoot = self::defaultApplicationRoot($appRoot);
- return implode(DIRECTORY_SEPARATOR, [
- self::getApplicationRootDirectory($appRoot),
- "script",
- ]);
- }
-
- public static function getStyleDirectory(string $appRoot = null):string {
- $appRoot = self::defaultApplicationRoot($appRoot);
- return implode(DIRECTORY_SEPARATOR, [
- self::getApplicationRootDirectory($appRoot),
- "style",
- ]);
- }
-
- public static function getClassDirectory(string $appRoot = null):string {
- $appRoot = self::defaultApplicationRoot($appRoot);
- return implode(DIRECTORY_SEPARATOR, [
- self::getApplicationRootDirectory($appRoot),
- "class",
- ]);
- }
-
- public static function fixPath(
- string $path
- ):string {
- if(file_exists($path)) {
- return $path;
- }
-
-// TODO: This breaks within a "jailed" Linux user. See https://github.com/PhpGt/WebEngine/issues/260
-// Use a base directory of "getApplicationRootDirectory", and have this check for a constant
-// defined in go.php?
- $fixed = "";
- if(DIRECTORY_SEPARATOR === "/") {
- $fixed .= DIRECTORY_SEPARATOR;
- }
- $path = str_replace(["/", "\\"], DIRECTORY_SEPARATOR, $path);
- $pathParts = explode(DIRECTORY_SEPARATOR, $path);
-
- foreach($pathParts as $directory) {
- $currentSearchPath = $fixed;
- $currentSearchPath .= $directory;
-
-// If the directory exists without its path being changed, use that and continue to next child.
- if(is_dir($currentSearchPath)) {
- $fixed = "$currentSearchPath";
-
- if(strlen($fixed) > 1) {
- $fixed .= DIRECTORY_SEPARATOR;
- }
- continue;
- }
-
- $iterator = new DirectoryIterator($fixed);
- $foundMatch = false;
- foreach($iterator as $fileInfo) {
- $fileName = $fileInfo->getFilename();
- if($fileName === "." || $fileName === "..") {
- continue;
- }
-
- if(strtolower($fileName) === strtolower($directory)) {
- $fixed .= $fileName . DIRECTORY_SEPARATOR;
- $foundMatch = true;
- break;
- }
-
- $directoryWithHyphensParts = preg_split(
- '/(?=[A-Z])/',
- $directory
- );
- $directoryWithHyphensParts = array_filter($directoryWithHyphensParts);
-
- $directoryWithHyphens = implode(
- "-",
- $directoryWithHyphensParts
- );
-
- $directoryWithHyphens = str_replace(
- "_-",
- "@",
- $directoryWithHyphens
- );
-
- if(strtolower($fileName) === strtolower($directoryWithHyphens)) {
- $fixed .= $fileName . DIRECTORY_SEPARATOR;
- $foundMatch = true;
- break;
- }
- }
-
- if(!$foundMatch) {
- throw new PathNotFound($path);
- }
- }
-
- $fixed = rtrim($fixed, DIRECTORY_SEPARATOR);
- return $fixed;
- }
-
- protected static function defaultApplicationRoot(string $default = null) {
- if(!is_null($default)) {
- self::$appRoot = $default;
- return $default;
- }
-
- if(empty(self::$appRoot)) {
- self::$appRoot = getcwd();
-
- if(!is_file(implode(DIRECTORY_SEPARATOR, [
- self::$appRoot,
- "vendor",
- "autoload.php",
- ]))) {
- throw new ApplicationRootDirectoryNotSetException();
- }
- }
-
- return self::$appRoot;
- }
-}
\ No newline at end of file
diff --git a/src/FileSystem/PathNotFound.php b/src/FileSystem/PathNotFound.php
deleted file mode 100644
index c82f47bf..00000000
--- a/src/FileSystem/PathNotFound.php
+++ /dev/null
@@ -1,6 +0,0 @@
-getDocumentRoot());
- chdir($cwd);
-
- $config = ConfigFactory::createForProject(
- $cwd,
- implode(DIRECTORY_SEPARATOR, [
- dirname(__DIR__),
- "config.default.ini",
- ])
- );
-
- $input = new Input($_GET, $_POST, $_FILES);
- $cookie = new CookieHandler($_COOKIE);
-
- $sessionHandler = SessionSetup::attachHandler(
- $config->get("session.handler")
- );
- $sessionConfig = $config->getSection("session");
- $sessionId = $cookie[$sessionConfig["name"]];
- $sessionHandler = new Session(
- $sessionHandler,
- $sessionConfig,
- $sessionId
- );
-
- $databaseSettings = new Settings(
- $config->get("database.query_directory"),
- $config->get("database.driver"),
- $config->get("database.schema"),
- $config->get("database.host"),
- $config->get("database.port"),
- $config->get("database.username"),
- $config->get("database.password")
- );
- $database = new Database($databaseSettings);
-
- $this->protectGlobals();
- $this->attachAutoloaders(
- $server->getDocumentRoot(),
- $config->getSection("app")
- );
-
- $request = $this->createServerRequest(
- $server,
- $input,
- $cookie
- );
-
- $router = $this->createRouter(
- $request,
- $server->getDocumentRoot(),
- $config->get("app.default_content_type")
- );
-
- $csrfProtection = new SessionTokenStore(
- $sessionHandler->getStore(
- "gt.csrf",
- true
- )
- );
-
- if($router instanceof PageRouter) {
- $csrfProtection->processAndVerify(
- $input->getAll(Input::DATA_BODY)
- );
- }
-
- try {
- $dispatcher = $this->createDispatcher(
- $config,
- $server,
- $input,
- $cookie,
- $sessionHandler,
- $database,
- $router,
- $csrfProtection,
- new Headers($request->getHeaders())
- );
-
- $response = $this->process($request, $dispatcher);
- }
- catch(\Exception $exception) {
- if($exception instanceof AbstractResponseStatusException) {
- $code = $exception->getHttpCode();
- }
- elseif($exception instanceof BasenameNotFoundException) {
- $code = 404;
- }
- else {
- $code = 500;
- }
-
- $uri = $request->getUri();
- $dispatcher->overrideRouterUri($uri->withPath("_$code"));
- try {
- $response = $this->process($request, $dispatcher);
- }
- catch(\Exception $ignoreException) {
- // TODO: Log exception here.
- $response = new Response($code);
- }
-
- $response = $response->withStatus($code);
- if($exception instanceof AbstractRedirectionException) {
- $response = $response->withHeader(
- "Location",
- $exception->getMessage()
- );
- }
- }
-
- $buffer = ob_get_clean();
- return $this->finish($response, $buffer, $render);
- }
-
- /**
- * By default, PHP passes all sensitive user information around in global variables,
- * available for reading and modification in any code, including third party libraries.
- *
- * All global variables are replaced with objects that alert the developer of their
- * protection and encapsulation through GlobalStub objects.
- *
- * @see https://php.gt/globals
- */
- public function protectGlobals() {
- // TODO: Merge whitelist from config
- $whitelist = [
- "_COOKIE" => ["XDEBUG_SESSION"],
- ];
- $globalsAfterRemoval = Protection::removeGlobals(
- $GLOBALS,
- $whitelist
- );
- Protection::overrideInternals(
- $globalsAfterRemoval,
- $_ENV,
- $_SERVER,
- $_GET,
- $_POST,
- $_FILES,
- $_COOKIE,
- $_SESSION
- );
- }
-
- public function attachAutoloaders(string $documentRoot, ConfigSection $config) {
- $logicAutoloader = new Autoloader(
- $config["namespace"],
- $documentRoot
- );
-
- spl_autoload_register(
- [$logicAutoloader, "autoload"],
- true
- );
- }
-
- public function createServerRequest(
- ServerInfo $serverInfo,
- Input $input,
- CookieHandler $cookieHandler
- ):ServerRequestInterface {
- return RequestFactory::createServerRequest(
- $serverInfo,
- $input,
- $cookieHandler
- );
- }
-
- public function createRouter(
- RequestInterface $request,
- string $documentRoot,
- string $defaultContentType
- ):Router {
- $factory = new RouterFactory($defaultContentType);
- return $factory->create(
- $request,
- $documentRoot
- );
- }
-
- public function createDispatcher(
- Config $config,
- ServerInfo $serverInfo,
- Input $input,
- CookieHandler $cookie,
- Session $session,
- Database $database,
- Router $router,
- TokenStore $csrfProtection,
- Headers $headers
- ):Dispatcher {
- return DispatcherFactory::create(
- $config,
- $serverInfo,
- $input,
- $cookie,
- $session,
- $database,
- $router,
- $csrfProtection,
- $headers
- );
- }
-
- /**
- * Process an incoming server request and return a response, optionally delegating
- * response creation to a handler.
- * @throws BasenameNotFoundException
- */
- public function process(
- ServerRequestInterface $request,
- RequestHandlerInterface $handler
- ):ResponseInterface {
- return $handler->handle($request);
- }
-
- /**
- * The final part of the lifecycle is the finish function.
- * This is where the response is finally output to the client,
- * after the response headers are appended from any calls to the native
- * header function.
- */
- public static function finish(
- ResponseInterface $response,
- string $buffer = "",
- bool $render = true
- ):ResponseInterface {
- http_response_code($response->getStatusCode());
- foreach($response->getHeaders() as $key => $value) {
- header("$key: $value");
- }
-
- if($render) {
- echo $buffer;
- echo $response->getBody();
- }
-
- return $response;
- }
-}
diff --git a/src/Logic/AbstractLogic.php b/src/Logic/AbstractLogic.php
deleted file mode 100644
index affef476..00000000
--- a/src/Logic/AbstractLogic.php
+++ /dev/null
@@ -1,128 +0,0 @@
-config = $config;
- $this->server = $serverInfo;
- $this->input = $input;
- $this->cookie = $cookieHandler;
- $this->session = $session;
- $this->database = $database;
- $this->dynamicPath = $dynamicPath;
- $this->headers = $headers;
- }
-
- public function before() {
- // This is not a required function, but it has been placed here
- // so IDEs can see it when extending Logic classes.
- }
-
- public function go() {
- // This is not a required function, but it has been placed here
- // so IDEs can see it when extending Logic classes.
- }
-
- public function after() {
- // This is not a required function, but it has been placed here
- // so IDEs can see it when extending Logic classes.
- }
-
- public function handleDo():void {
- foreach($this->input as $key => $value) {
- if($key !== "do") {
- continue;
- }
-
- $methodName = "do";
-
- preg_match_all("([^-_ ]+)", $value, $matches);
- foreach($matches[0] as $methodNamePart) {
- $methodName .= ucfirst($methodNamePart);
- }
-
- if(method_exists($this, $methodName)) {
- $this->input->do($value)->call([$this, $methodName]);
- }
- }
- }
-
- protected function reload():void {
- $this->redirect($this->server->getRequestUri());
- }
-
- protected function redirect(string $uri, int $code = 303):void {
- switch($code) {
- case 301:
- $exception = HttpMovedPermanently::class;
- break;
- case 302:
- $exception = HttpFound::class;
- break;
- case 303:
- $exception = HttpSeeOther::class;
- break;
- case 307:
- $exception = HttpTemporaryRedirect::class;
- break;
- case 308:
- $exception = HttpPermanentRedirect::class;
- break;
- default:
- throw new RedirectCodeNotImplementedException($code);
- }
-
- throw new $exception($uri, $code);
- }
-
- protected function getDynamicPathParameter(string $parameter):?string {
- return $this->dynamicPath->get($parameter);
- }
-}
\ No newline at end of file
diff --git a/src/Logic/Api.php b/src/Logic/Api.php
deleted file mode 100644
index 3c702991..00000000
--- a/src/Logic/Api.php
+++ /dev/null
@@ -1,42 +0,0 @@
-document = $viewModel;
-
- parent::__construct(
- $viewModel,
- $config,
- $serverInfo,
- $input,
- $cookieHandler,
- $session,
- $database,
- $dynamicPath,
- $headers
- );
- }
-}
\ No newline at end of file
diff --git a/src/Logic/ApiSetup.php b/src/Logic/ApiSetup.php
deleted file mode 100644
index 87091b92..00000000
--- a/src/Logic/ApiSetup.php
+++ /dev/null
@@ -1,42 +0,0 @@
-logicProperty = $logicProperty;
- }
-}
\ No newline at end of file
diff --git a/src/Logic/AppAutoloader.php b/src/Logic/AppAutoloader.php
new file mode 100644
index 00000000..6aa85466
--- /dev/null
+++ b/src/Logic/AppAutoloader.php
@@ -0,0 +1,42 @@
+classDir)) {
+ return;
+ }
+
+ spl_autoload_register(fn(string $className) => $this->autoload($className));
+ }
+
+ private function autoload(string $className):void {
+ if(!str_starts_with($className, $this->namespace . "\\")) {
+ return;
+ }
+
+ $classNameWithoutAppNamespace = substr(
+ $className,
+ strlen($this->namespace) + 1
+ );
+
+ $phpFilePath = "./" . $this->classDir;
+ foreach(explode("\\", $classNameWithoutAppNamespace) as $classPart) {
+ $phpFilePath .= "/";
+ $phpFilePath .= ucfirst($classPart);
+ }
+
+ $phpFilePath .= ".php";
+ if(is_file($phpFilePath)) {
+ require($phpFilePath);
+ }
+ }
+}
diff --git a/src/Logic/AutoloadedClassDoesNotExistException.php b/src/Logic/AutoloadedClassDoesNotExistException.php
deleted file mode 100644
index bbea712c..00000000
--- a/src/Logic/AutoloadedClassDoesNotExistException.php
+++ /dev/null
@@ -1,6 +0,0 @@
-appNamespace = $appNamespace;
- $this->docRoot = $docRoot;
- }
-
- /**
- * @return ?string Returns the absolute classname of the autoloaded
- * class, or null if the required class isn't a Logic class.
- * @throws \Gt\WebEngine\FileSystem\PathNotFound
- */
- public function autoload(string $absoluteClassName):?string {
- $classSuffix = $this->getClassSuffix($absoluteClassName);
- if(is_null($classSuffix)) {
- return null;
- }
-
- $absoluteClassName = trim($absoluteClassName, "\\");
- if(strpos(
- $absoluteClassName,
- $this->appNamespace
- ) !== 0) {
- return null;
- }
-
- $logicType = substr(
- $absoluteClassName,
- strlen($this->appNamespace) + 1
- );
- $logicType = substr(
- $logicType,
- 0,
- strpos($logicType, "\\")
- );
-
- $path = $this->getPathForLogicType($logicType);
- $toRemove = explode("\\", $this->appNamespace);
- $toRemove []= $logicType;
-
- $relativeClassName = $this->getRelativeClassName(
- $absoluteClassName,
- ...$toRemove
- );
-
- $directoryPath = $this->buildDirectoryPathFromRelativeClassName(
- $path,
- $relativeClassName
- );
-
- $fileName = $this->findFileName(
- $directoryPath,
- $relativeClassName,
- $classSuffix
- );
-
- $autoloadPath = implode(DIRECTORY_SEPARATOR, [
- $directoryPath,
- $fileName,
- ]);
-
- $autoloadPath = Path::fixPath($autoloadPath);
- return $this->requireAndCheck($autoloadPath, $absoluteClassName);
- }
-
- protected function requireAndCheck(string $filePath, string $className):string {
- if(!is_file($filePath)) {
- throw new AutoloaderException("File path is not correct for when autoloading class '$className'");
- }
- require($filePath);
-
- if($className[0] !== "\\") {
- $className = "\\" . $className;
- }
- return $className;
- }
-
- protected function getClassSuffix($className):?string {
- $classSuffix = null;
-
- foreach(self::ALLOWED_SUFFIXES as $suffix) {
- if($this->classHasSuffix($className, $suffix)) {
- $classSuffix = $suffix;
- }
- }
-
- return $classSuffix ;
- }
-
- protected function classHasSuffix($className, $endsWith):bool {
- $length = strlen($endsWith);
-
- return $length === 0
- || (substr($className, -$length) === $endsWith);
- }
-
- protected function getPathForLogicType(string $type):string {
- switch(strtolower($type)) {
- case "api":
- $path = Path::getApiDirectory($this->docRoot);
- break;
-
- case "page":
- $path = Path::getPageDirectory($this->docRoot);
- break;
- }
-
- return $path;
- }
-
- protected function getRelativeClassName(string $absoluteClassName, string...$toRemove) {
- $parts = explode("\\", $absoluteClassName);
- foreach($toRemove as $remove) {
- if($remove === $parts[0]) {
- array_shift($parts);
- }
- }
-
- return implode("\\", $parts);
- }
-
- protected function buildDirectoryPathFromRelativeClassName(
- string $path,
- string $relativeClassName
- ):string {
- $parts = explode("\\", $relativeClassName);
- $partsToRemove = explode("\\", $this->appNamespace);
- array_pop($parts);
-
- foreach($parts as $part) {
- $path .= DIRECTORY_SEPARATOR . $part;
- }
-
- if(!is_dir($path)) {
-// The path of the file on-disk may not always match the class name, due to
-// web-mapping vs. namespace mapping
-// @see https://github.com/PhpGt/StyleGuide/blob/master/directories-files-namespaces/path-mapping.md
- $path = Path::fixPath($path);
- }
-
- return $path;
- }
-
- protected function findFileName(
- string $directoryPath,
- string $relativeClassName,
- string $classSuffix
- ):string {
- $matchingFileName = null;
-
- $parts = explode("\\", $relativeClassName);
- $className = array_pop($parts);
- $suffixPosition = strrpos(
- $className,
- $classSuffix
- );
- $searchFileName = substr($className,0, $suffixPosition);
- $searchFileName = "$searchFileName.php";
-
- $subDirectoryPath = $directoryPath;
-
- $subDirectoryPath = str_replace(
- DIRECTORY_SEPARATOR . "_",
- DIRECTORY_SEPARATOR . "@",
- $subDirectoryPath
- );
-
- $subDirectoryPath = Path::fixPath($subDirectoryPath);
-
- $searchFileNameLowerCase = strtolower($searchFileName);
- $searchFileNameHyphenatedLowerCase = strtolower(
- $this->hyphenate($searchFileName)
- );
- $searchList = [
- $searchFileNameLowerCase,
- $searchFileNameHyphenatedLowerCase,
- str_replace("_", "@", $searchFileNameLowerCase),
- str_replace("_", "@", $searchFileNameHyphenatedLowerCase),
- ];
-
- foreach(new DirectoryIterator($subDirectoryPath) as $fileInfo) {
- if(!$fileInfo->isFile()) {
- continue;
- }
-
- $fileName = $fileInfo->getFilename();
- $fileNameLowerCase = strtolower($fileName);
- if(!in_array($fileNameLowerCase, $searchList)) {
- continue;
- }
-
- $matchingFileName = $fileName;
- }
-
- $relativeFileName = substr($subDirectoryPath, strlen($directoryPath));
- $relativeFileName = trim($relativeFileName, "\\/");
- $relativeFileName = implode(DIRECTORY_SEPARATOR, [
- $relativeFileName,
- $matchingFileName,
- ]);
-
- return $relativeFileName;
- }
-
- protected function hyphenate(string $fileName):string {
- $file = pathinfo(
- $fileName,
- PATHINFO_FILENAME
- );
- $extension = pathinfo(
- $fileName,
- PATHINFO_EXTENSION
- );
-
- for($i = strlen($file) - 1; $i > 0; $i--) {
- if(!ctype_upper($file[$i])) {
- continue;
- }
-
- $fileName = substr_replace(
- $fileName,
- "-",
- $i,
- 0
- );
- }
-
- return $fileName;
- }
-}
\ No newline at end of file
diff --git a/src/Logic/AutoloaderException.php b/src/Logic/AutoloaderException.php
deleted file mode 100644
index a3eccb2d..00000000
--- a/src/Logic/AutoloaderException.php
+++ /dev/null
@@ -1,6 +0,0 @@
-keyValuePairs = $keyValuePairs;
- }
-
- public function get(string $key):?string {
- return $this->keyValuePairs[$key] ?? null;
- }
-}
\ No newline at end of file
diff --git a/src/Logic/InvalidLogicConstructorParameters.php b/src/Logic/InvalidLogicConstructorParameters.php
deleted file mode 100644
index 27be8541..00000000
--- a/src/Logic/InvalidLogicConstructorParameters.php
+++ /dev/null
@@ -1,6 +0,0 @@
-loadLogicFile($file);
+ }
+ }
+
+ public function invoke(string $name):void {
+ foreach($this->assembly as $file) {
+ $nsProject = (string)(new LogicProjectNamespace(
+ $file,
+ $this->appNamespace
+ ));
+
+ $instance = null;
+
+ if(class_exists($nsProject)) {
+ $instance = new $nsProject;
+ }
+
+ if($instance) {
+ if(method_exists($instance, $name)) {
+ $this->injector->invoke(
+ $instance,
+ $name
+ );
+ }
+ }
+ else {
+ $nsDefault = (string)(new LogicStreamNamespace($file));
+ $fqnsDefault = LogicStreamWrapper::NAMESPACE_PREFIX . $nsDefault;
+ $fnReferenceArray = [
+ "$fqnsDefault\\$name",
+ "$nsProject\\$name"
+ ];
+
+ foreach($fnReferenceArray as $fnReference) {
+ if(function_exists($fnReference)) {
+ $this->injector->invoke(
+ null,
+ $fnReference
+ );
+ }
+ }
+ }
+ }
+ }
+
+ private function loadLogicFile(string $file):void {
+ $streamPath = LogicStreamWrapper::STREAM_NAME . "://$file";
+ /** @noinspection PhpIncludeInspection */
+ require($streamPath);
+ }
+}
diff --git a/src/Logic/LogicFactory.php b/src/Logic/LogicFactory.php
deleted file mode 100644
index 6fe89855..00000000
--- a/src/Logic/LogicFactory.php
+++ /dev/null
@@ -1,180 +0,0 @@
-config = $config;
- }
-
- public function setServerInfo(ServerInfo $serverInfo):void {
- $this->serverInfo = $serverInfo;
- }
-
- public function setInput(Input $input):void {
- $this->input = $input;
- }
-
- public function setCookieHandler(CookieHandler $cookie):void {
- $this->cookie = $cookie;
- }
-
- public function setSession(Session $session):void {
- $this->session = $session;
- }
-
- public function setDatabase(Database $database):void {
- $this->database = $database;
- }
-
- public function setView(View $view):void {
- $this->view = $view;
- }
-
- public function setHeaders(Headers $headers):void {
- $this->headers = $headers;
- }
-
- public function createLogicObjectFromPath(
- string $path,
- string $appNamespace,
- string $baseDirectory,
- UriInterface $uri,
- LogicPropertyStore $logicPropertyStore
- ):AbstractLogic {
- $path = realpath($path);
- $baseDirectory = realpath($baseDirectory);
-
- $className = $this->getLogicClassFromPath(
- $path,
- $appNamespace,
- $baseDirectory
- );
-
- $dynamicPathParameters = $this->getDynamicPathParameters(
- $path,
- $baseDirectory,
- $uri
- );
-
- /** @var AbstractLogic $class */
- $class = new $className(
- $this->view->getViewModel(),
- $this->config,
- $this->serverInfo,
- $this->input,
- $this->cookie,
- $this->session,
- $this->database,
- $dynamicPathParameters,
- $this->headers,
- $logicPropertyStore
- );
-
- return $class;
- }
-
- public function getDynamicPathParameters(
- string $absolutePath,
- string $baseDirectory,
- UriInterface $uri
- ):DynamicPath {
- $uriPath = $uri->getPath();
- $relativeDirPath = str_replace(
- $baseDirectory,
- "",
- $absolutePath
- );
- $relativeDirPath = str_replace(
- DIRECTORY_SEPARATOR,
- "/",
- $relativeDirPath
- );
- $relativeDirParts = explode("/", $relativeDirPath);
- $relativeDirParts = array_filter($relativeDirParts);
-
- $uriParts = explode("/", $uriPath);
- $uriParts = array_filter($uriParts);
-
- $keyValuePairs = [];
- foreach($relativeDirParts as $i => $part) {
- $part = strtok($part, ".");
- if($part[0] !== "@") {
- continue;
- }
-
- $partName = substr($part, 1);
-
- if(isset($uriParts[$i])) {
- $keyValuePairs[$partName] = $uriParts[$i];
- }
- }
-
- return new DynamicPath($keyValuePairs);
- }
-
- protected function getLogicClassFromPath(
- string $path,
- string $appNamespace,
- string $baseDirectory
- ):string {
- $logicTypeNamespace = null;
- if($this->view instanceof ApiView) {
- $logicTypeNamespace = "Api";
- }
- if($this->view instanceof PageView) {
- $logicTypeNamespace = "Page";
- }
- $basePageNamespace = implode("\\", [
- $appNamespace,
- $logicTypeNamespace,
- ]);
-
- $logicPathRelative = substr($path, strlen($baseDirectory));
- $fullPath = $baseDirectory . $logicPathRelative;
- if(is_dir($fullPath)) {
- $logicPathRelative .= "/index";
- }
-// The relative logic path will be the filename with page directory stripped from the left.
-// /app/src/page/index.php => index.php
-// /app/src/api/child/directory/thing.php => child/directory/thing.php
- $className = ClassName::transformUriCharacters(
- $logicPathRelative,
- $basePageNamespace,
- $logicTypeNamespace
- );
-
- $className = str_replace("@", "_", $className);
- return $className;
- }
-}
\ No newline at end of file
diff --git a/src/Logic/LogicProjectNamespace.php b/src/Logic/LogicProjectNamespace.php
new file mode 100644
index 00000000..a0541f2a
--- /dev/null
+++ b/src/Logic/LogicProjectNamespace.php
@@ -0,0 +1,27 @@
+path);
+ $str = $this->namespacePrefix . "\\" . $str;
+ $str = strtok($str, ".");
+ $str = str_replace(["-", "@"], " ", $str);
+ $namespace = "";
+ foreach(explode("\\", $str) as $part) {
+ $part = ucwords($part);
+ $namespace .= "\\";
+ $namespace .= str_replace(" ", "", $part);
+ }
+ $namespace = trim($namespace, "\\");
+ $namespace .= "Page";
+ return $namespace;
+ }
+}
diff --git a/src/Logic/LogicPropertyStore.php b/src/Logic/LogicPropertyStore.php
deleted file mode 100644
index 5546688f..00000000
--- a/src/Logic/LogicPropertyStore.php
+++ /dev/null
@@ -1,30 +0,0 @@
-logicProperties->set("someKey", 123);
- * and then within another class such as IndexPage, declare a public property
- * of name $someKey, and it will automatically be set to the correct value.
- */
-class LogicPropertyStore {
- const FORBIDDEN_LOGIC_PROPERTIES = [
- "viewModel",
- "config",
- "server",
- "input",
- "cookie",
- "session",
- "database",
- "dynamicPath",
- ];
-
- protected $kvp = [];
-
- public function set(string $key, $value) {
- $this->kvp[$key] = $value;
- }
-}
\ No newline at end of file
diff --git a/src/Logic/LogicPropertyStoreReader.php b/src/Logic/LogicPropertyStoreReader.php
deleted file mode 100644
index c23a76fe..00000000
--- a/src/Logic/LogicPropertyStoreReader.php
+++ /dev/null
@@ -1,43 +0,0 @@
-propertyStore = $logicPropertyStore;
- }
-
- /** @link https://php.net/manual/en/iterator.rewind.php */
- public function rewind():void {
- $this->iteratorKey = 0;
- $this->iteratorStrings = array_keys($this->propertyStore->kvp);
- }
-
- /** @link https://php.net/manual/en/iterator.current.php */
- public function current() {
- return $this->propertyStore->kvp[$this->key()];
- }
-
- /** @link https://php.net/manual/en/iterator.next.php */
- public function next():void {
- $this->iteratorKey++;
- }
-
- /** @link https://php.net/manual/en/iterator.key.php */
- public function key():?string {
- return $this->iteratorStrings[$this->iteratorKey] ?? null;
- }
-
- /** @link https://php.net/manual/en/iterator.valid.php */
- public function valid():bool {
- return array_key_exists($this->key(), $this->propertyStore->kvp);
- }
-}
\ No newline at end of file
diff --git a/src/Logic/Page.php b/src/Logic/Page.php
deleted file mode 100644
index a2901a9e..00000000
--- a/src/Logic/Page.php
+++ /dev/null
@@ -1,42 +0,0 @@
-document = $viewModel;
-
- parent::__construct(
- $viewModel,
- $config,
- $serverInfo,
- $input,
- $cookieHandler,
- $session,
- $database,
- $dynamicPath,
- $headers
- );
- }
-}
\ No newline at end of file
diff --git a/src/Logic/PageSetup.php b/src/Logic/PageSetup.php
deleted file mode 100644
index b39c581a..00000000
--- a/src/Logic/PageSetup.php
+++ /dev/null
@@ -1,43 +0,0 @@
-logicProperty = $logicProperty;
- }
-}
\ No newline at end of file
diff --git a/src/Logic/RedirectCodeNotImplementedException.php b/src/Logic/RedirectCodeNotImplementedException.php
deleted file mode 100644
index 4697aed0..00000000
--- a/src/Logic/RedirectCodeNotImplementedException.php
+++ /dev/null
@@ -1,6 +0,0 @@
-config->get("database.query_directory"),
+ $this->config->get("database.driver"),
+ $this->config->get("database.schema"),
+ $this->config->get("database.host"),
+ $this->config->get("database.port"),
+ $this->config->get("database.username"),
+ $this->config->get("database.password"),
+ $this->config->get("database.connection_name") ?: DefaultSettings::DEFAULT_NAME,
+ $this->config->get("database.collation") ?: DefaultSettings::DEFAULT_COLLATION,
+ $this->config->get("database.charset") ?: DefaultSettings::DEFAULT_CHARSET,
+ );
+ return new Database($dbSettings);
+ }
+
+ #[LazyLoad(HTMLAttributeBinder::class)]
+ public function loadHTMLAttributeBinder():HTMLAttributeBinder {
+ return new HTMLAttributeBinder();
+ }
+
+ #[LazyLoad(HTMLAttributeCollection::class)]
+ public function loadHTMLAttributeCollection():HTMLAttributeCollection {
+ return new HTMLAttributeCollection();
+ }
+
+ #[LazyLoad(PlaceholderBinder::class)]
+ public function loadPlaceholderBinder():PlaceholderBinder {
+ return new PlaceholderBinder();
+ }
+
+ #[LazyLoad(ElementBinder::class)]
+ public function loadElementBinder():ElementBinder {
+ return new ElementBinder(
+ $this->container->get(HTMLAttributeBinder::class),
+ $this->container->get(HTMLAttributeCollection::class),
+ $this->container->get(PlaceholderBinder::class),
+ );
+ }
+
+ #[LazyLoad(TableBinder::class)]
+ public function loadTableBinder():TableBinder {
+ return new TableBinder(
+ $this->container->get(TemplateCollection::class),
+ $this->container->get(ElementBinder::class),
+ $this->container->get(HTMLAttributeBinder::class),
+ $this->container->get(HTMLAttributeCollection::class),
+ $this->container->get(PlaceholderBinder::class),
+ );
+ }
+
+ #[LazyLoad(TemplateCollection::class)]
+ public function loadTemplateCollection():TemplateCollection {
+ $document = $this->container->get(Document::class);
+ return new TemplateCollection($document);
+ }
+
+ #[LazyLoad(ListBinder::class)]
+ public function loadListBinder():ListBinder {
+ return new ListBinder(
+ $this->container->get(TemplateCollection::class)
+ );
+ }
+
+ #[LazyLoad(DocumentBinder::class)]
+ public function loadDocumentBinder():DocumentBinder {
+ $document = $this->container->get(Document::class);
+ return new DocumentBinder(
+ $document,
+ iterator_to_array($this->config->getSection("view")),
+ $this->container->get(ElementBinder::class),
+ $this->container->get(PlaceholderBinder::class),
+ $this->container->get(TableBinder::class),
+ $this->container->get(ListBinder::class),
+ $this->container->get(TemplateCollection::class),
+ );
+ }
+
+ #[LazyLoad(Uri::class)]
+ public function loadRequestUri():UriInterface {
+ return $this->request->getUri();
+ }
+}
diff --git a/src/Middleware/Lifecycle.php b/src/Middleware/Lifecycle.php
new file mode 100644
index 00000000..14a1c256
--- /dev/null
+++ b/src/Middleware/Lifecycle.php
@@ -0,0 +1,139 @@
+createServerRequestFromGlobalState(
+ $_SERVER,
+ $_FILES,
+ $_GET,
+ $_POST,
+ );
+
+// The handler is an individual component that processes a request and produces
+// a response, as defined by PSR-7. It's where all your applications logic is
+// executed - the brain of WebEngine.
+ $handler = new RequestHandler();
+
+// The request and request handler are passed to the PSR-15 process function,
+// which will return our PSR-7 HTTP Response.
+ $response = $this->process($request, $handler);
+
+// All logic will have executed at this point, so we clean the output buffer in
+// case there was any accidental data echoed to the page.
+ $buffer = ob_get_clean();
+// Now we can finish the HTTP lifecycle by providing the HTTP response for
+// outputting to the browser, along with the buffer so we can display the
+// contents in a debug area.
+ $this->finish(
+ $response,
+ $buffer,
+ $timer,
+ $handler->getConfigSection("app")
+ );
+ }
+
+ /**
+ * Process an incoming server request and return a response,
+ * delegating response creation to a handler.
+ */
+ public function process(
+ ServerRequestInterface $request,
+ RequestHandlerInterface $handler
+ ):ResponseInterface {
+ return $handler->handle($request);
+ }
+
+ public function finish(
+ ResponseInterface $response,
+ string $buffer,
+ Timer $timer,
+ ConfigSection $appConfig
+ ):void {
+ http_response_code($response->getStatusCode());
+
+ foreach($response->getHeaders() as $key => $value) {
+ $stringValue = implode(", ", $value);
+ header("$key: $stringValue", true);
+ }
+
+ $buffer = trim($buffer);
+ if(strlen($buffer) > 0) {
+ if(strstr($buffer, "\n")) {
+ $buffer = "\n$buffer";
+ }
+ Log::debug("Logic output: $buffer");
+ }
+
+ $renderBufferSize = $appConfig->getInt("render_buffer_size");
+ $body = $response->getBody();
+ $body->rewind();
+ ob_start();
+ while(!$body->eof()) {
+ echo $body->read($renderBufferSize);
+ ob_flush();
+ flush();
+ }
+
+// The very last thing that's done before the script ends is to stop the Timer,
+// so we know exactly how long the request-response lifecycle has taken.
+ $timer->stop();
+ $delta = number_format($timer->getDelta(), 2);
+ if($delta >= $appConfig->getFloat("slow_delta")) {
+ Log::warning("Lifecycle end with VERY SLOW delta time: $delta seconds. https://www.php.gt/webengine/slow-delta");
+ }
+ elseif($delta >= $appConfig->getFloat("very_slow_delta")) {
+ Log::notice("Lifecycle end with SLOW delta time: $delta seconds. https://www.php.gt/webengine/slow-delta");
+ }
+ else {
+ Log::debug("Lifecycle end, delta time: $delta seconds.");
+ }
+ }
+}
diff --git a/src/Middleware/RequestHandler.php b/src/Middleware/RequestHandler.php
new file mode 100644
index 00000000..99ba2b39
--- /dev/null
+++ b/src/Middleware/RequestHandler.php
@@ -0,0 +1,276 @@
+config = ConfigFactory::createForProject(
+ getcwd(),
+ getcwd() . "/vendor/phpgt/webengine/config.default.ini"
+ );
+ $this->setupLogger(
+ $this->config->getSection("logger")
+ );
+
+ $appAutoloader = new AppAutoloader(
+ $this->config->get("app.namespace"),
+ $this->config->get("app.class_dir"),
+ );
+ $appAutoloader->setup();
+
+ stream_wrapper_register(
+ "gt-logic-stream",
+ LogicStreamWrapper::class
+ );
+ }
+
+ public function handle(
+ ServerRequestInterface $request
+ ):ResponseInterface {
+// TODO: Handle 404s.
+ $response = new Response();
+ $requestUri = $request->getUri();
+ $uriPath = $requestUri->getPath();
+
+// Force trailing slashes in URLs. This is useful for consistency, but also
+// helps identify that WebEngine requests do not match an actual static file, as
+// file requests will never end in a slash.
+// 307 is used here to preserve any POST data that may be in the request.
+ if(!str_ends_with($uriPath, "/")) {
+ return $response
+ ->withHeader("Location", $requestUri)
+ ->withStatus(307);
+ }
+
+ $serviceContainer = new Container();
+ $serviceContainer->set($request);
+ $serviceContainer->addLoaderClass(
+ new DefaultServiceLoader(
+ $this->config,
+ $request,
+ $serviceContainer
+ )
+ );
+ $serviceContainer->set($this->config);
+ $customServiceContainerClassName = implode("\\", [
+ $this->config->get("app.namespace"),
+ $this->config->get("app.service_loader"),
+ ]);
+ if(class_exists($customServiceContainerClassName)) {
+ $constructorArgs = [];
+ if(is_a($customServiceContainerClassName, DefaultServiceLoader::class, true)) {
+ $constructorArgs = [
+ $this->config,
+ $request,
+ $serviceContainer,
+ ];
+ }
+
+ $serviceContainer->addLoaderClass(
+ new $customServiceContainerClassName(
+ ...$constructorArgs
+ )
+ );
+ }
+
+ $server = new ServerInfo($_SERVER);
+ $serviceContainer->set($server);
+
+ $router = $this->createRouter($serviceContainer);
+ $router->route($request);
+
+ $viewClass = $router->getViewClass() ?? NullView::class;
+ /** @var BaseView $view */
+ $view = new $viewClass($response->getBody());
+
+ $viewAssembly = $router->getViewAssembly();
+ $logicAssembly = $router->getLogicAssembly();
+
+ $dynamicPath = new DynamicPath(
+ $uriPath,
+ $viewAssembly,
+ $logicAssembly,
+ );
+ $serviceContainer->set($dynamicPath);
+
+ if(count($viewAssembly) === 0) {
+ $response = $response->withStatus(404);
+ }
+
+ foreach($viewAssembly as $viewFile) {
+ $view->addViewFile($viewFile);
+ }
+ $viewModel = $view->createViewModel();
+ $serviceContainer->set($viewModel);
+
+// TODO: Set a Session loader here, so the CSRF handler can use it.
+
+ if($viewModel instanceof HTMLDocument) {
+ try {
+ $partial = new PartialContent(implode(DIRECTORY_SEPARATOR, [
+ getcwd(),
+ $this->config->getString("view.component_directory")
+ ]));
+ $componentExpander = new ComponentExpander($viewModel, $partial);
+ $componentExpander->expand();
+ }
+ catch(PartialContentDirectoryNotFoundException) {}
+
+ try {
+ $partial = new PartialContent(implode(DIRECTORY_SEPARATOR, [
+ getcwd(),
+ $this->config->getString("view.partial_directory")
+ ]));
+
+ $partialExpander = new PartialExpander($viewModel, $partial);
+ $partialExpander->expand();
+ }
+ catch(PartialContentDirectoryNotFoundException) {}
+
+ $dynamicUri = $dynamicPath->getUrl("page/");
+ $dynamicUri = str_replace("/", "--", $dynamicUri);
+ $dynamicUri = str_replace("@", "_", $dynamicUri);
+ $viewModel->body->classList->add("uri" . $dynamicUri);
+ $bodyDirClass = "dir";
+ foreach(explode("--", $dynamicUri) as $i => $pathPart) {
+ if($i === 0) {
+ continue;
+ }
+ $bodyDirClass .= "--$pathPart";
+ $viewModel->body->classList->add($bodyDirClass);
+ }
+
+// ini_set('session.serialize_handler', 'php_serialize');
+ $sessionConfig = $this->config->getSection("session");
+ $sessionId = $_COOKIE[$sessionConfig["name"]] ?? null;
+ $sessionHandler = SessionSetup::attachHandler(
+ $sessionConfig->getString("handler")
+ );
+ $session = new Session(
+ $sessionHandler,
+ $sessionConfig,
+ $sessionId
+ );
+ $serviceContainer->set($session);
+
+// TODO: Complete CSRF implementation - maybe use its own cookie?
+// /** @var Session $session */
+// $session = $serviceContainer->get(Session::class);
+// $csrfTokenStore = new SessionTokenStore($session->getStore("csrf", true));
+//
+// if($request->getMethod() === "POST") {
+// $csrfTokenStore->processAndVerify($_POST);
+// }
+//
+// $protector = new HTMLDocumentProtector($viewModel, $csrfTokenStore);
+// $protector->protectAndInject();
+ }
+
+// TODO: Kill globals.
+ $input = new Input($_GET, $_POST, $_FILES);
+ $serviceContainer->set($input);
+
+ $injector = new Injector($serviceContainer);
+
+ $logicExecutor = new LogicExecutor(
+ $logicAssembly,
+ $injector,
+ $this->config->getString("app.namespace")
+ );
+ $input->when("do")->call(
+ fn(InputData $data) => $logicExecutor->invoke(
+ "do_" . str_replace("-", "_", $data->getString("do"))
+ )
+ );
+ $logicExecutor->invoke("go");
+ $logicExecutor->invoke("go_after");
+
+ /** @var DocumentBinder $documentBinder */
+ $documentBinder = $serviceContainer->get(DocumentBinder::class);
+ $documentBinder->cleanDatasets();
+
+ $view->stream($viewModel);
+ return $response;
+ }
+
+ public function getConfigSection(string $sectionName):ConfigSection {
+ return $this->config->getSection($sectionName);
+ }
+
+ private function setupLogger(ConfigSection $logConfig):void {
+ $type = $logConfig->getString("type");
+ $path = $logConfig->getString("path");
+ $level = $logConfig->getString("level");
+ $timestampFormat = $logConfig->getString("timestamp_format");
+ $logFormat = explode("\\t", $logConfig->getString("log_format"));
+ $separator = $logConfig->getString("separator");
+ $newLine = $logConfig->getString("newline");
+ $logHandler = match($type) {
+ "file" => new FileHandler($path, $timestampFormat, $logFormat, $separator, $newLine),
+ "stream" => new StreamHandler($path),
+ default => new StdOutHandler()
+ };
+ LogConfig::addHandler($logHandler, $level);
+ }
+
+ private function createRouter(Container $container):BaseRouter {
+ $routerConfig = $this->config->getSection("router");
+ $namespace = $this->config->getString("app.namespace");
+ $appRouterFile = $routerConfig->getString("router_file");
+ $appRouterClass = $routerConfig->getString("router_class");
+ $defaultRouterFile = dirname(dirname(__DIR__)) . "/router.default.php";
+
+ if(file_exists($appRouterFile)) {
+ require($appRouterFile);
+ $class = "\\$namespace\\$appRouterClass";
+ }
+ else {
+ require($defaultRouterFile);
+ $class = "\\Gt\\WebEngine\\DefaultRouter";
+ }
+
+ /** @var BaseRouter $router */
+ $router = new $class($routerConfig);
+ $router->setContainer($container);
+ return $router;
+ }
+}
diff --git a/src/Refactor/DocumentStringParseException.php b/src/Refactor/DocumentStringParseException.php
deleted file mode 100644
index 00e8e658..00000000
--- a/src/Refactor/DocumentStringParseException.php
+++ /dev/null
@@ -1,6 +0,0 @@
-type = $type;
- }
-
- public function __toString() {
- return $this->render();
- }
-
- protected function render():string {
- if($this->type === "application/json") {
- return $this->saveJSON();
- }
-
- return $this->saveHTML();
- }
-
- protected function saveJSON():string {
- $json = new StdClass();
-
- foreach($this->children as $child) {
- $key = $child->tagName;
- $json->$key = $child->nodeValue;
- }
-
- return json_encode($json);
- }
-
- protected function getStringValue($type, $value):string {
- switch($type) {
- case "bool":
- case "boolean":
- return $value ? "true" : "false";
-
- case "object":
- // TODO: Recursively load.
- return "(object)";
-
- case "int":
- case "integer":
- case "float":
- case "double":
- default:
- return (string)$value;
- }
- }
-}
\ No newline at end of file
diff --git a/src/Response/ApiResponse.php b/src/Response/ApiResponse.php
deleted file mode 100644
index 14821762..00000000
--- a/src/Response/ApiResponse.php
+++ /dev/null
@@ -1,7 +0,0 @@
-documentRoot);
- }
-}
\ No newline at end of file
diff --git a/src/Route/PageRouter.php b/src/Route/PageRouter.php
deleted file mode 100644
index 70695839..00000000
--- a/src/Route/PageRouter.php
+++ /dev/null
@@ -1,12 +0,0 @@
-documentRoot);
- }
-}
\ No newline at end of file
diff --git a/src/Route/Router.php b/src/Route/Router.php
deleted file mode 100644
index 3e38cb19..00000000
--- a/src/Route/Router.php
+++ /dev/null
@@ -1,195 +0,0 @@
-request = $request;
- $this->documentRoot = $documentRoot;
- $this->contentType = $contentType;
-
- $uri = $request->getUri();
- $this->baseViewLogicPath = $this->getBaseViewLogicPath();
- $this->viewLogicPath = $this->getViewLogicPath($uri);
- $this->viewLogicBasename = $this->getViewLogicBasename($uri);
- }
-
- /**
- * The base view-logic path is the absolute path on disk to where all View and Logic files
- * exist, according to the current Route type.
- */
- abstract public function getBaseViewLogicPath():string;
-
- public function redirectInvalidPaths(string $uri):void {
- if(strlen($uri) > 1
- && substr($uri, -1) === "/") {
- throw new HttpSeeOther(rtrim($uri, "/"));
- }
-
- if($this->viewLogicBasename !== self::DEFAULT_BASENAME) {
- return;
- }
-
- $lastSlashPosition = strrpos($uri, "/");
- $lastPieceOfUri = substr($uri, $lastSlashPosition + 1);
-
- if($lastPieceOfUri !== self::DEFAULT_BASENAME) {
- return;
- }
-
- $uri = substr($uri, 0, $lastSlashPosition);
- if(strlen($uri) === 0) {
- $uri = "/";
- }
-
- throw new HttpSeeOther($uri);
- }
-
- public function getViewAssembly():Assembly {
- return new Assembly(
- $this->baseViewLogicPath,
- $this->viewLogicPath,
- $this->viewLogicBasename,
- static::VIEW_EXTENSIONS,
- static::VIEW_BEFORE,
- static::VIEW_AFTER
- );
- }
-
- public function getLogicAssembly():Assembly {
- return new Assembly(
- $this->baseViewLogicPath,
- $this->viewLogicPath,
- $this->viewLogicBasename,
- static::LOGIC_EXTENSIONS,
- static::LOGIC_BEFORE,
- static::LOGIC_AFTER
- );
- }
-
- public function getContentType():string {
- return $this->contentType;
- }
-
- public function overrideUri(UriInterface $uri) {
- $this->viewLogicPath = $this->getViewLogicPath($uri);
- $this->viewLogicBasename = $this->getViewLogicBasename($uri);
- }
-
- protected function getViewLogicBasename(UriInterface $uri):?string {
- $uriPath = $uri->getPath();
- $basename = self::DEFAULT_BASENAME;
-
- if($uriPath === "/") {
- return $basename;
- }
-
- $absolutePath = $this->baseViewLogicPath
- . str_replace(
- "/",
- DIRECTORY_SEPARATOR,
- $uriPath
- );
-
- if($this->isAddressableFile($absolutePath)
- || !$this->isAddressableDir($absolutePath)) {
- $basename = pathinfo(
- $absolutePath,
- PATHINFO_BASENAME
- );
- }
-
- return $basename;
- }
-
- protected function isAddressableFile(string $absolutePath):bool {
- $matches = glob("$absolutePath.*");
- if(!empty($matches) && is_file($matches[0])) {
- return true;
- }
-
- return $this->isDynamicFile($absolutePath);
- }
-
- protected function isAddressableDir(string $absolutePath):bool {
- if(is_dir($absolutePath)) {
- return true;
- }
-
- return $this->isDynamicDir($absolutePath);
- }
-
- protected function isDynamicFile(string $absolutePath):bool {
- if(file_exists($absolutePath)) {
- return false;
- }
-
-// TODO: Why are we only returning false here?
- return false;
- }
-
- protected function isDynamicDir(string $absolutePath):bool {
- if(file_exists($absolutePath)) {
- return false;
- }
-
-// TODO: Why are we only returning false here?
- return false;
- }
-
- /**
- * The view-logic sub-path is the path on disk to the directory
- * containing the requested View and Logic files,
- * relative to the base view-logic path.
- */
- protected function getViewLogicPath(UriInterface $uri):string {
- $uriPath = $uri->getPath();
- $uriPath = str_replace(
- "/",
- DIRECTORY_SEPARATOR,
- $uriPath
- );
- $absolutePath = $this->baseViewLogicPath . $uriPath;
-
- if(!is_dir($absolutePath)) {
- $dynamicMatches = glob("$absolutePath/@*");
- foreach($dynamicMatches as $match) {
- if(is_dir($match)) {
- $absolutePath = $match;
- break;
- }
- }
- }
-
- return substr($absolutePath, strlen($this->baseViewLogicPath));
- }
-}
\ No newline at end of file
diff --git a/src/Route/RouterFactory.php b/src/Route/RouterFactory.php
deleted file mode 100644
index 1b570d3f..00000000
--- a/src/Route/RouterFactory.php
+++ /dev/null
@@ -1,88 +0,0 @@
- PageRouter::class,
- "application/json" => ApiRouter::class,
- "application/xml" => ApiRouter::class,
- ];
- private string $defaultContentType;
-
- public function __construct(string $defaultContentType = "text/html") {
- $this->defaultContentType = $defaultContentType;
- }
-
- public function create(
- RequestInterface $request,
- string $documentRoot
- ):Router {
- $typeHeader = $request->getHeaderLine("accept");
- $type = $this->getType($typeHeader);
- $routerClass = $this->getRouterClassForType($type);
-
- /** @var Router $router */
- $router = new $routerClass(
- $request,
- $documentRoot,
- $type
- );
-
- return $router;
- }
-
- protected function getType(string $accept = null):string {
- if(empty($accept)) {
- $accept = $this->defaultContentType;
- }
-
- $negotiator = new Negotiator();
-
- $priorities = self::ACCEPT_PRIORITIES;
- array_unshift($priorities, $this->defaultContentType);
-
- /** @var Accept $acceptHeader */
- $acceptHeader = $negotiator->getBest(
- $accept,
- $priorities
- );
-
- $type = null;
- if($acceptHeader) {
- $type = $acceptHeader->getType();
- }
-
- if(empty($type)) {
- throw new RoutingException("Accept header has no route: $accept");
- }
-
- return $type;
- }
-
- protected function getRouterClassForType(string $type):string {
- $routerClass = null;
-
- if(empty($type)) {
- $type = $this->defaultContentType;
- }
-
- foreach(explode(",", $type) as $singleType) {
- $singleType = strtok($singleType, ";");
- if(array_key_exists($singleType, self::TYPE_MAP)) {
- $routerClass = self::TYPE_MAP[$singleType];
- }
- }
-
- return $routerClass;
- }
-}
diff --git a/src/Route/RoutingException.php b/src/Route/RoutingException.php
deleted file mode 100644
index cd5407ff..00000000
--- a/src/Route/RoutingException.php
+++ /dev/null
@@ -1,6 +0,0 @@
- */
+ protected array $viewFileArray;
+
+ public function __construct(StreamInterface $outputStream) {
+ $this->outputStream = $outputStream;
+ $this->viewFileArray = [];
+ }
+
+ abstract public function createViewModel():mixed;
+
+ public function addViewFile(string $fileName):void {
+ array_push($this->viewFileArray, $fileName);
+ }
+
+ public function stream(mixed $viewModel):void {
+ $this->outputStream->write((string)$viewModel);
+ }
+}
diff --git a/src/View/HTMLView.php b/src/View/HTMLView.php
new file mode 100644
index 00000000..a7cd8608
--- /dev/null
+++ b/src/View/HTMLView.php
@@ -0,0 +1,16 @@
+viewFileArray as $viewFile) {
+ $html .= file_get_contents($viewFile);
+ }
+
+ return HTMLDocumentFactory::create($html);
+ }
+}
diff --git a/src/View/NullView.php b/src/View/NullView.php
new file mode 100644
index 00000000..b1196b8d
--- /dev/null
+++ b/src/View/NullView.php
@@ -0,0 +1,8 @@
+outputStream = $outputStream;
- $this->viewModel = $viewModel;
- }
-
- public function getViewModel() {
- return $this->viewModel;
- }
-
- public function stream():void {
- $this->outputStream->write((string)$this->viewModel);
- }
-}
\ No newline at end of file
diff --git a/test/behaviour/behat.yml b/test/behaviour/behat.yml
deleted file mode 100644
index 392b9387..00000000
--- a/test/behaviour/behat.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-default:
- extensions:
- Behat\MinkExtension:
- base_url: 'http://localhost:8080'
- sessions:
- default:
- goutte: ~
diff --git a/test/behaviour/features/CommonLogic.feature b/test/behaviour/features/CommonLogic.feature
deleted file mode 100644
index c39f266c..00000000
--- a/test/behaviour/features/CommonLogic.feature
+++ /dev/null
@@ -1,5 +0,0 @@
-Feature: Common Logic
- As a WebEngine developer
- In order to write DRY code
- I want to execute common logic across multiple pages
-
diff --git a/test/behaviour/features/DynamicPages.feature b/test/behaviour/features/DynamicPages.feature
deleted file mode 100644
index 1e79a07e..00000000
--- a/test/behaviour/features/DynamicPages.feature
+++ /dev/null
@@ -1,27 +0,0 @@
-Feature: Dynamic Pages
- As a WebEngine developer
- In order to write dynamic applications
- I want to route certain requests through dynamic logic
-
- Scenario: Page titles with index
- Given I am on the homepage
- Then I should see "Base Index page"
- When I follow "Go to dir"
- Then I should see "Dir Index page"
- When I follow "Go to nested"
- Then I should see "Nested Index page"
- When I follow "Go to abcdefg"
- Then I should see "Dynamic page"
- And I should see "Dynamic page requested: abcdefg."
- When I am on "/dir/nested/test-123-behat"
- Then I should see "Dynamic page requested: test-123-behat"
-
- Scenario: Page titles without index
- Given I am on the homepage
- And I follow "Go to dir"
- And I follow "Go to nested without index"
- Then I should see "Dynamic page"
- And I should see "Dynamic page requested: index."
- When I am on "/dir/nested-no-index/another-test-456"
- Then I should see "Dynamic page"
- Then I should see "Dynamic page requested: another-test-456"
\ No newline at end of file
diff --git a/test/behaviour/features/bootstrap/FeatureContext.php b/test/behaviour/features/bootstrap/FeatureContext.php
deleted file mode 100644
index 703cc055..00000000
--- a/test/behaviour/features/bootstrap/FeatureContext.php
+++ /dev/null
@@ -1,29 +0,0 @@
-exec();
- self::$pid = self::$process->getPid();
- posix_setpgid(self::$pid, self::$pid);
- chdir($cwd);
- sleep(1);
- }
-
- /** @AfterSuite */
- public static function tearDown(AfterSuiteScope $event) {
- posix_kill(-self::$pid, 2);
- self::$process->terminate(2);
- }
-}
\ No newline at end of file
diff --git a/test/phpunit/FileSystem/DirectoryWalkerTest.php b/test/phpunit/FileSystem/DirectoryWalkerTest.php
deleted file mode 100644
index a7993638..00000000
--- a/test/phpunit/FileSystem/DirectoryWalkerTest.php
+++ /dev/null
@@ -1,81 +0,0 @@
- $value) {
- if($value === "webengine") {
- break;
- }
- }
- $randomDirectoryCount = mt_rand($webenginePosition, $numDirectories);
- $directoryListUpToParent = array_splice($directoryList, 0, $randomDirectoryCount);
- $parentDirectory = implode(DIRECTORY_SEPARATOR, $directoryListUpToParent);
-
-// Create a directory in the $parent_path to look for:
- $directoryName = $this->getRandomName();
- mkdir(implode(DIRECTORY_SEPARATOR, [
- $parentDirectory,
- $directoryName,
- ]),
- 0775,
- true
- );
- $directoryWalker = new DirectoryWalker($directory);
-
- self::assertEquals(
- $parentDirectory,
- $directoryWalker->findParentContaining($directoryName)
- );
- }
-
- public function dataProviderParentExists():array {
- return $this->dataProviderParent(true);
- }
-
- public function dataProviderParentNotExists():array {
- return $this->dataProviderParent(false);
- }
-
- protected function dataProviderParent(bool $exists, int $num = 10):array {
- $tmp = Helper::getTmpDir();
- $data = [];
-
- for($i = 0; $i < $num; $i++) {
- $directory = $tmp;
- $numberOfChildren = rand(5, 25);
- for($childNum = 0; $childNum < $numberOfChildren; $childNum++) {
- $directory .= DIRECTORY_SEPARATOR . $this->getRandomName();
- }
-
- $data []= [$directory];
- }
-
- if($exists) {
- foreach($data as $parameters) {
- if(!is_dir($parameters[0])) {
- mkdir($parameters[0], 0775, true);
- }
- }
- }
-
- return $data;
- }
-
- protected function getRandomName(int $maxLength = 10):string {
- $lengthOfDirectoryName = rand(2, $maxLength);
- return bin2hex(
- random_bytes(
- floor($lengthOfDirectoryName / 2)
- )
- );
- }
-}
diff --git a/test/phpunit/FileSystem/PathTest.php b/test/phpunit/FileSystem/PathTest.php
deleted file mode 100644
index 73e0e6d5..00000000
--- a/test/phpunit/FileSystem/PathTest.php
+++ /dev/null
@@ -1,171 +0,0 @@
-before();
- self::assertIsCallable([$testClass, "go"]);
- $testClass->go();
- self::assertIsCallable([$testClass, "after"]);
- $testClass->after();
- }
-
- public function testHandleDo() {
- $viewModel = self::createMock(ObjectDocument::class);
- $config = self::createMock(Config::class);
- $server = self::createMock(ServerInfo::class);
- $input = self::createMock(Input::class);
- $cookie = self::createMock(CookieHandler::class);
- $session = self::createMock(Session::class);
- $database = self::createMock(Database::class);
- $dynamicPath = self::createMock(DynamicPath::class);
- $headers = self::createMock(Headers::class);
-
- $args = [
- $viewModel,
- $config,
- $server,
- $input,
- $cookie,
- $session,
- $database,
- $dynamicPath,
- $headers,
- ];
-
- $testClass = new class(...$args) extends Api {
- public $testObj;
-
- function testSetupInputData($testData) {
- $this->input = $testData;
- $this->testObj = new StdClass();
- $this->testObj->doneSomething = false;
- }
-
- function doSomething() {
- $this->testObj->doneSomething = true;
- }
- };
-
- $testData = new class implements Iterator {
- private $data = [
- "name" => "none",
- "do" => "something",
- ];
- private $iteratorKey = 0;
-
- public function current() {
- $keys = array_keys($this->data);
- $key = $keys[$this->iteratorKey];
- return $this->data[$key];
- }
-
- public function next() {
- $this->iteratorKey++;
- }
-
- public function key() {
- $keys = array_keys($this->data);
- return $keys[$this->iteratorKey];
- }
-
- public function valid() {
- $keys = array_keys($this->data);
- $key = $keys[$this->iteratorKey] ?? null;
- return isset($this->data[$key]);
- }
-
- public function rewind() {
- $this->iteratorKey = 0;
- }
-
- public function do() {
- $caller = new class {
- function call($callable) {
- $callable();
- }
- };
- return $caller;
- }
- };
-
- $testClass->testSetupInputData($testData);
- $testClass->handleDo();
- self::assertTrue($testClass->testObj->doneSomething);
- }
-
- /** @runInSeparateProcess */
- public function testReload() {
- $viewModel = self::createMock(ObjectDocument::class);
- $config = self::createMock(Config::class);
- $server = self::createMock(ServerInfo::class);
- $input = self::createMock(Input::class);
- $cookie = self::createMock(CookieHandler::class);
- $session = self::createMock(Session::class);
- $database = self::createMock(Database::class);
- $dynamicPath = self::createMock(DynamicPath::class);
- $headers = self::createMock(Headers::class);
-
- $args = [
- $viewModel,
- $config,
- $server,
- $input,
- $cookie,
- $session,
- $database,
- $dynamicPath,
- $headers,
- ];
-
- $sut = new class(...$args) extends Api {
- function doTestReload() {
- $this->reload();
- }
- };
-
- self::expectException(HttpSeeOther::class);
- $sut->doTestReload();
- }
-
- public function testGetDynamicPathParameter() {
- $expectedPathParam = uniqid();
-
- $viewModel = self::createMock(ObjectDocument::class);
- $config = self::createMock(Config::class);
- $server = self::createMock(ServerInfo::class);
- $input = self::createMock(Input::class);
- $cookie = self::createMock(CookieHandler::class);
- $session = self::createMock(Session::class);
- $database = self::createMock(Database::class);
- $dynamicPath = self::createMock(DynamicPath::class);
- $dynamicPath->method("get")
- ->with("testParam")
- ->willReturn($expectedPathParam);
- $headers = self::createMock(Headers::class);
-
- $args = [
- $viewModel,
- $config,
- $server,
- $input,
- $cookie,
- $session,
- $database,
- $dynamicPath,
- $headers,
- ];
-
- $sut = new class(...$args) extends Api {
- function doTestDynamicParam($testObj) {
- $testObj->message = $this->getDynamicPathParameter("testParam");
- }
- };
-
- $testObj = new StdClass();
- $testObj->message = null;
- $sut->doTestDynamicParam($testObj);
-
- self::assertEquals($expectedPathParam, $testObj->message);
- }
-}
\ No newline at end of file
diff --git a/test/phpunit/Logic/AutoloaderTest.php b/test/phpunit/Logic/AutoloaderTest.php
deleted file mode 100644
index 4975a726..00000000
--- a/test/phpunit/Logic/AutoloaderTest.php
+++ /dev/null
@@ -1,192 +0,0 @@
-autoload(
- "\\Test\\App\\Page\\_CommonPage"
- );
-
- self::assertTrue(class_exists(
- "\\Test\\App\\Page\\_CommonPage",
- false
- ));
- }
-
- public function testAutoloadFindsNestedCommonPage() {
- $docRoot = implode(DIRECTORY_SEPARATOR, [
- __DIR__,
- "..",
- "..",
- "project",
- "dynamic-uris",
- ]);
-
- $autoloader = new Autoloader(
- "Test\\App",
- realpath($docRoot)
- );
-
- $autoloader->autoload(
- "\\Test\\App\\Page\\dir\\nested\\_CommonPage"
- );
-
- self::assertTrue(class_exists(
- "\\Test\\App\\Page\\dir\\nested\\_CommonPage",
- false
- ));
- }
-
- public function testAutoloadWithInvalidSuffix() {
- $docRoot = implode(DIRECTORY_SEPARATOR, [
- __DIR__,
- "..",
- "..",
- "project",
- "dynamic-uris",
- ]);
-
- $autoloader = new Autoloader(
- "Test\\App",
- realpath($docRoot)
- );
- $autoloader->autoload("\\Test\\App\\ExampleThing");
- self::assertFalse(class_exists(
- "\\Test\\App\\ExampleThing",
- false
- ));
- }
-
- public function testAutoloadOtherNamespace() {
- $docRoot = implode(DIRECTORY_SEPARATOR, [
- __DIR__,
- "..",
- "..",
- "project",
- "dynamic-uris",
- ]);
-
- $autoloader = new Autoloader(
- "Test\\App",
- realpath($docRoot)
- );
- $autoloader->autoload(ThisClassShouldNotBeLoadedPage::class);
- self::assertFalse(class_exists(
- ThisClassShouldNotBeLoadedPage::class,
- false
- ));
- }
-
- public function testAutoloadFindsApiClass() {
- $docRoot = implode(DIRECTORY_SEPARATOR, [
- __DIR__,
- "..",
- "..",
- "project",
- "autoloading",
- "www",
- ]);
-
- $autoloader = new Autoloader(
- "Test\\App",
- realpath($docRoot)
- );
-
- $autoloader->autoload(
- "\\Test\\App\\Api\\ServiceThingApi"
- );
-
- self::assertTrue(class_exists(
- "\\Test\\App\\Api\\ServiceThingApi",
- false
- ));
- }
-
- public function testAutoloadFindsDoublyNestedApiClass() {
- $docRoot = implode(DIRECTORY_SEPARATOR, [
- __DIR__,
- "..",
- "..",
- "project",
- "autoloading",
- "www",
- ]);
-
- $autoloader = new Autoloader(
- "Test\\App",
- realpath($docRoot)
- );
-
- $autoloader->autoload(
- "\\Test\\App\\Api\\OneNest\\TwoNest\\DoublyNestedApi"
- );
-
- self::assertTrue(class_exists(
- "\\Test\\App\\Api\\OneNest\\TwoNest\\DoublyNestedApi",
- false
- ));
- }
-
- public function testAutoloadFindsDoublyNestedWrongNamedApiClassFile() {
- $docRoot = implode(DIRECTORY_SEPARATOR, [
- __DIR__,
- "..",
- "..",
- "project",
- "autoloading",
- "www",
- ]);
-
- $autoloader = new Autoloader(
- "Test\\App",
- realpath($docRoot)
- );
-
- self::expectException(AutoloaderException::class);
- self::expectExceptionMessage("File path is not correct for when autoloading class 'Test\\App\\Api\\OneNest\\TwoNest\\WrongNameApi'");
- $autoloader->autoload(
- "\\Test\\App\\Api\\OneNest\\TwoNest\\WrongNameApi"
- );
- }
-
- public function testAutoloadFindsNestedDynamicApi() {
- $docRoot = implode(DIRECTORY_SEPARATOR, [
- __DIR__,
- "..",
- "..",
- "project",
- "dynamic-uris",
- "www",
- ]);
-
- $autoloader = new Autoloader(
- "Test\\App",
- realpath($docRoot)
- );
-
- $autoloader->autoload("\\Test\\App\\Api\\_DynamicOne\\_DynamicTwo\\_DynApi");
- self::assertTrue(class_exists(
- "\\Test\\App\\Api\\_DynamicOne\\_DynamicTwo\\_DynApi",
- false
- ));
- }
-}
\ No newline at end of file
diff --git a/test/phpunit/Logic/ClassNameTest.php b/test/phpunit/Logic/ClassNameTest.php
deleted file mode 100644
index f00d8478..00000000
--- a/test/phpunit/Logic/ClassNameTest.php
+++ /dev/null
@@ -1,57 +0,0 @@
- uniqid(),
- "type" => uniqid(),
- ]);
- self::assertNull($sut->get("nothing"));
- }
-
- public function testGetKey() {
- $nameValue = uniqid();
- $typeValue = uniqid();
- $sut = new DynamicPath([
- "name" => $nameValue,
- "type" => $typeValue,
- ]);
- self::assertEquals($nameValue, $sut->get("name"));
- self::assertEquals($typeValue, $sut->get("type"));
- }
-}
\ No newline at end of file
diff --git a/test/phpunit/Logic/LogicFactoryTest.php b/test/phpunit/Logic/LogicFactoryTest.php
deleted file mode 100644
index fdb64b90..00000000
--- a/test/phpunit/Logic/LogicFactoryTest.php
+++ /dev/null
@@ -1,161 +0,0 @@
-config = self::createMock(Config::class);
- $this->serverInfo = self::createMock(ServerInfo::class);
- $this->input = self::createMock(Input::class);
- $this->cookie = self::createMock(CookieHandler::class);
- $this->session = self::createMock(Session::class);
- $this->database = self::createMock(Database::class);
- $this->view = self::createMock(View::class);
- $this->headers = self::createMock(Headers::class);
- }
-
- public function testCreatePageLogicFromPathApi() {
- $appNamespace = "\\Test\\App";
- $projectRoot = implode(DIRECTORY_SEPARATOR, [
- __DIR__,
- "..",
- "..",
- "project",
- "autoloading",
- ]);
- $baseDirectory = $projectRoot . "/api";
- $path = $projectRoot . "/api/service-thing.php";
- /** @var MockObject|UriInterface $uri */
- $uri = self::createMock(Uri::class);
- $logicPropertyStore = self::createMock(LogicPropertyStore::class);
-
- require_once($path);
-
- $this->view = self::createMock(ApiView::class);
-
- $sut = new LogicFactory();
- $this->setMocks($sut);
- $logic = $sut->createLogicObjectFromPath(
- $path,
- $appNamespace,
- $baseDirectory,
- $uri,
- $logicPropertyStore
- );
-
- self::assertInstanceOf(Api::class, $logic);
- }
-
- public function testCreatePageLogicFromPathPage() {
- $appNamespace = "\\Test\\App";
- $projectRoot = implode(DIRECTORY_SEPARATOR, [
- __DIR__,
- "..",
- "..",
- "project",
- "autoloading",
- ]);
- $baseDirectory = $projectRoot . "/page";
- $path = $projectRoot . "/page/dir/index.php";
- /** @var MockObject|UriInterface $uri */
- $uri = self::createMock(Uri::class);
- $logicPropertyStore = self::createMock(LogicPropertyStore::class);
-
- require_once($path);
-
- $this->view = self::createMock(PageView::class);
-
- $sut = new LogicFactory();
- $this->setMocks($sut);
- $logic = $sut->createLogicObjectFromPath(
- $path,
- $appNamespace,
- $baseDirectory,
- $uri,
- $logicPropertyStore
- );
-
- self::assertInstanceOf(Page::class, $logic);
- }
-
- public function testCreatePageLogicFromPathPageNoIndexInUri() {
- $appNamespace = "\\Test\\App";
- $projectRoot = implode(DIRECTORY_SEPARATOR, [
- __DIR__,
- "..",
- "..",
- "project",
- "autoloading",
- ]);
- $baseDirectory = $projectRoot . "/page";
- $path = $projectRoot . "/page/dir";
- /** @var MockObject|UriInterface $uri */
- $uri = self::createMock(Uri::class);
- $uri->method("getPath")
- ->willReturn("/dir");
- $logicPropertyStore = self::createMock(LogicPropertyStore::class);
-
- /** @noinspection PhpIncludeInspection */
- require_once("$path/index.php");
-
- $this->view = self::createMock(PageView::class);
-
- $sut = new LogicFactory();
- $this->setMocks($sut);
- $logic = $sut->createLogicObjectFromPath(
- $path,
- $appNamespace,
- $baseDirectory,
- $uri,
- $logicPropertyStore
- );
-
- self::assertInstanceOf(Page::class, $logic);
- }
-
- private function setMocks(LogicFactory $factory) {
- $factory->setConfig($this->config);
- $factory->setServerInfo($this->serverInfo);
- $factory->setInput($this->input);
- $factory->setCookieHandler($this->cookie);
- $factory->setSession($this->session);
- $factory->setDatabase($this->database);
- $factory->setView($this->view);
- $factory->setHeaders($this->headers);
- }
-}
diff --git a/test/phpunit/Logic/PageTest.php b/test/phpunit/Logic/PageTest.php
deleted file mode 100644
index 81d34ca4..00000000
--- a/test/phpunit/Logic/PageTest.php
+++ /dev/null
@@ -1,212 +0,0 @@
-before();
- self::assertIsCallable([$testClass, "go"]);
- $testClass->go();
- self::assertIsCallable([$testClass, "after"]);
- $testClass->after();
- }
-
- public function testHandleDo() {
- $viewModel = self::createMock(HTMLDocument::class);
- $config = self::createMock(Config::class);
- $server = self::createMock(ServerInfo::class);
- $input = self::createMock(Input::class);
- $cookie = self::createMock(CookieHandler::class);
- $session = self::createMock(Session::class);
- $database = self::createMock(Database::class);
- $dynamicPath = self::createMock(DynamicPath::class);
- $headers = self::createMock(Headers::class);
-
- $args = [
- $viewModel,
- $config,
- $server,
- $input,
- $cookie,
- $session,
- $database,
- $dynamicPath,
- $headers,
- ];
-
- $testClass = new class(...$args) extends Page {
- public $testObj;
-
- function testSetupInputData($testData) {
- $this->input = $testData;
- $this->testObj = new StdClass();
- $this->testObj->doneSomething = false;
- }
-
- function doSomething() {
- $this->testObj->doneSomething = true;
- }
- };
-
- $testData = new class implements Iterator {
- private $data = [
- "name" => "none",
- "do" => "something",
- ];
- private $iteratorKey = 0;
-
- public function current() {
- $keys = array_keys($this->data);
- $key = $keys[$this->iteratorKey];
- return $this->data[$key];
- }
-
- public function next() {
- $this->iteratorKey++;
- }
-
- public function key() {
- $keys = array_keys($this->data);
- return $keys[$this->iteratorKey];
- }
-
- public function valid() {
- $keys = array_keys($this->data);
- $key = $keys[$this->iteratorKey] ?? null;
- return isset($this->data[$key]);
- }
-
- public function rewind() {
- $this->iteratorKey = 0;
- }
-
- public function do() {
- $caller = new class {
- function call($callable) {
- $callable();
- }
- };
- return $caller;
- }
- };
-
- $testClass->testSetupInputData($testData);
- $testClass->handleDo();
- self::assertTrue($testClass->testObj->doneSomething);
- }
-
- /** @runInSeparateProcess */
- public function testReload() {
- $viewModel = self::createMock(HTMLDocument::class);
- $config = self::createMock(Config::class);
- $server = self::createMock(ServerInfo::class);
- $input = self::createMock(Input::class);
- $cookie = self::createMock(CookieHandler::class);
- $session = self::createMock(Session::class);
- $database = self::createMock(Database::class);
- $dynamicPath = self::createMock(DynamicPath::class);
- $headers = self::createMock(Headers::class);
-
- $args = [
- $viewModel,
- $config,
- $server,
- $input,
- $cookie,
- $session,
- $database,
- $dynamicPath,
- $headers,
- ];
-
- $sut = new class(...$args) extends Page {
- function doTestReload() {
- $this->reload();
- }
- };
-
- self::expectException(HttpSeeOther::class);
- $sut->doTestReload();
- }
-
- public function testGetDynamicPathParameter() {
- $expectedPathParam = uniqid();
-
- $viewModel = self::createMock(HTMLDocument::class);
- $config = self::createMock(Config::class);
- $server = self::createMock(ServerInfo::class);
- $input = self::createMock(Input::class);
- $cookie = self::createMock(CookieHandler::class);
- $session = self::createMock(Session::class);
- $database = self::createMock(Database::class);
- $dynamicPath = self::createMock(DynamicPath::class);
- $dynamicPath->method("get")
- ->with("testParam")
- ->willReturn($expectedPathParam);
- $headers = self::createMock(Headers::class);
-
- $args = [
- $viewModel,
- $config,
- $server,
- $input,
- $cookie,
- $session,
- $database,
- $dynamicPath,
- $headers,
- ];
-
- $sut = new class(...$args) extends Page {
- function doTestDynamicParam($testObj) {
- $testObj->message = $this->getDynamicPathParameter("testParam");
- }
- };
-
- $testObj = new StdClass();
- $testObj->message = null;
- $sut->doTestDynamicParam($testObj);
-
- self::assertEquals($expectedPathParam, $testObj->message);
- }
-}
\ No newline at end of file
diff --git a/test/phpunit/Logic/func_header.php b/test/phpunit/Logic/func_header.php
deleted file mode 100644
index 0576d024..00000000
--- a/test/phpunit/Logic/func_header.php
+++ /dev/null
@@ -1,9 +0,0 @@
-method("getUri")
- ->willReturn($uri);
- $sut = new ApiRouter(
- $request,
- "",
- "application/json"
- );
- $path = $sut->getBaseViewLogicPath();
- self::assertEquals("/api", $path);
- }
-
- /**
- * @runInSeparateProcess
- * @dataProvider dataUri
- */
- public function testRedirectIndex(string $uri) {
- Override::replace("header", __DIR__);
- $uri = self::createMock(Uri::class);
- /** @var MockObject|Request $request */
- $request = self::createMock(Request::class);
- $request->method("getUri")
- ->willReturn($uri);
- $sut = new ApiRouter(
- $request,
- "",
- "application/json"
- );
-
- $sut->redirectInvalidPaths($uri);
-
- $expectedHeaderCalls = [];
- $lastPartOfUri = substr(
- $uri,
- strrpos($uri, "/") + 1
- );
- $uriNoLastPart = substr($uri, 0, strrpos($uri, "/"));
- if($lastPartOfUri === "index") {
- $expectedHeaderCalls []= ["Location: $uriNoLastPart", true, 303];
- }
-
- self::expectCallsToFunction("header", $expectedHeaderCalls);
- }
-
- public function testGetViewAssemblyNoApiDir() {
- $tmp = $this->getTmpDir("testGetViewAssemblyNoApiDir");
- touch("$tmp/composer.json");
-
- $uri = self::createMock(Uri::class);
- /** @var MockObject|Request $request */
- $request = self::createMock(Request::class);
- $request->method("getUri")
- ->willReturn($uri);
-
- $sut = new ApiRouter(
- $request,
- $tmp,
- "application/json"
- );
- self::expectException(RequiredDirectoryNotFoundException::class);
- $sut->getViewAssembly($uri);
- }
-
- public function testGetViewAssembly() {
- $tmp = $this->getTmpDir("testGetViewAssembly");
- touch("$tmp/composer.json");
- mkdir("$tmp/api");
- touch("$tmp/api/example.json");
-
- $uri = self::createMock(Uri::class);
- $uri->method("getPath")
- ->willReturn("/example");
- /** @var MockObject|Request $request */
- $request = self::createMock(Request::class);
- $request->method("getUri")
- ->willReturn($uri);
-
- $sut = new ApiRouter(
- $request,
- $tmp,
- "application/json"
- );
- $assembly = $sut->getViewAssembly($uri);
-
- $i = null;
-
- foreach($assembly as $i => $assemblyPart) {
- self::assertFileExists($assemblyPart);
- self::assertStringEndsWith(".json", $assemblyPart);
- }
- self::assertNotNull($i);
- }
-
- public function testGetLogicAssembly() {
- $tmp = $this->getTmpDir("testGetLogicAssembly");
- touch("$tmp/composer.json");
- mkdir("$tmp/api");
- touch("$tmp/api/example.php");
-
- /** @var MockObject|Uri $uri */
- $uri = self::createMock(Uri::class);
- $uri->method("getPath")
- ->willReturn("/example");
- /** @var MockObject|Request $request */
- $request = self::createMock(Request::class);
- $request->method("getUri")
- ->willReturn($uri);
-
- $sut = new ApiRouter(
- $request,
- $tmp,
- "application/json"
- );
- $assembly = $sut->getLogicAssembly();
-
- $i = null;
-
- foreach($assembly as $i => $assemblyPart) {
- self::assertFileExists($assemblyPart);
- self::assertStringEndsWith(".php", $assemblyPart);
- }
-
- self::assertNotNull($i);
- }
-
- public function testGetViewAssemblyDynamic() {
- $tmp = $this->getTmpDir("testGetLogicAssemblyDynamic");
- touch("$tmp/composer.json");
- mkdir("$tmp/api");
- mkdir("$tmp/api/item");
- touch("$tmp/api/item/@itemName.json");
-
- $uri = self::createMock(Uri::class);
- $uri->method("getPath")
- ->willReturn("/item/something");
- /** @var MockObject|Request $request */
- $request = self::createMock(Request::class);
- $request->method("getUri")
- ->willReturn($uri);
- $sut = new ApiRouter(
- $request,
- $tmp,
- "application/json"
- );
- $assembly = $sut->getViewAssembly();
-
- $i = null;
-
- foreach($assembly as $i => $assemblyPart) {
- self::assertFileExists($assemblyPart);
- self::assertStringEndsWith(".json", $assemblyPart);
- }
-
- self::assertNotNull($i);
- }
-}
\ No newline at end of file
diff --git a/test/phpunit/Route/PageRouterTest.php b/test/phpunit/Route/PageRouterTest.php
deleted file mode 100644
index 97f331ee..00000000
--- a/test/phpunit/Route/PageRouterTest.php
+++ /dev/null
@@ -1,173 +0,0 @@
-method("getUri")
- ->willReturn($uri);
-
- $sut = new PageRouter(
- $request,
- "",
- "text/html"
- );
- $path = $sut->getBaseViewLogicPath();
- self::assertEquals("/page", $path);
- }
-
- /**
- * @runInSeparateProcess
- * @dataProvider dataUri
- */
- public function testRedirectIndex(string $uriPath) {
- Override::replace("header", __DIR__);
- $uri = self::createMock(Uri::class);
- $uri->method("getPath")
- ->willReturn($uriPath);
- /** @var MockObject|Request $request */
- $request = self::createMock(Request::class);
- $request->method("getUri")
- ->willReturn($uri);
- $sut = new PageRouter(
- $request,
- "",
- "text/html"
- );
- $sut->redirectInvalidPaths($uri);
-
- $expectedHeaderCalls = [];
- $lastPartOfUri = substr(
- $uri,
- strrpos($uri, "/") + 1
- );
- $uriNoLastPart = substr($uri, 0, strrpos($uri, "/"));
- if($lastPartOfUri === "index") {
- $expectedHeaderCalls []= ["Location: $uriNoLastPart", true, 303];
- }
-
- self::expectCallsToFunction("header", $expectedHeaderCalls);
- }
-
- public function testGetViewAssemblyNoPageDir() {
- $tmp = $this->getTmpDir("testGetViewAssemblyNoPageDir");
- touch("$tmp/composer.json");
-
- $uri = self::createMock(Uri::class);
- $uri->method("getPath")
- ->willReturn("/");
- /** @var MockObject|Request $request */
- $request = self::createMock(Request::class);
- $request->method("getUri")
- ->willReturn($uri);
- $sut = new PageRouter(
- $request,
- $tmp,
- "text/html"
- );
- self::expectException(RequiredDirectoryNotFoundException::class);
- $sut->getViewAssembly();
- }
-
- public function testGetViewAssembly() {
- $tmp = $this->getTmpDir("testGetViewAssembly");
- touch("$tmp/composer.json");
- mkdir("$tmp/page");
- touch("$tmp/page/index.html");
-
- $uri = self::createMock(Uri::class);
- $uri->method("getPath")
- ->willReturn("/");
- /** @var MockObject|Request $request */
- $request = self::createMock(Request::class);
- $request->method("getUri")
- ->willReturn($uri);
- $sut = new PageRouter(
- $request,
- $tmp,
- "text/html"
- );
- $assembly = $sut->getViewAssembly();
-
- $i = null;
-
- foreach($assembly as $i => $assemblyPart) {
- self::assertFileExists($assemblyPart);
- self::assertStringEndsWith(".html", $assemblyPart);
- }
- self::assertNotNull($i);
- }
-
- public function testGetLogicAssembly() {
- $tmp = $this->getTmpDir("testGetLogicAssembly");
- touch("$tmp/composer.json");
- mkdir("$tmp/page");
- touch("$tmp/page/index.php");
-
- $uri = self::createMock(Uri::class);
- $uri->method("getPath")
- ->willReturn("/");
-
- /** @var MockObject|Request $request */
- $request = self::createMock(Request::class);
- $request->method("getUri")
- ->willReturn($uri);
-
- $sut = new PageRouter(
- $request,
- $tmp,
- "text/html"
- );
- $assembly = $sut->getLogicAssembly();
-
- $i = null;
-
- foreach($assembly as $i => $assemblyPart) {
- self::assertFileExists($assemblyPart);
- self::assertStringEndsWith(".php", $assemblyPart);
- }
-
- self::assertNotNull($i);
- }
-
- public function testGetViewAssemblyDynamic() {
- $tmp = $this->getTmpDir("testGetLogicAssemblyDynamic");
- touch("$tmp/composer.json");
- mkdir("$tmp/page");
- mkdir("$tmp/page/item");
- touch("$tmp/page/item/@itemName.html");
-
- $uri = self::createMock(Uri::class);
- $uri->method("getPath")
- ->willReturn("/item/something");
-
- /** @var MockObject|Request $request */
- $request = self::createMock(Request::class);
- $request->method("getUri")
- ->willReturn($uri);
- $sut = new PageRouter(
- $request,
- $tmp,
- "text/html"
- );
- $assembly = $sut->getViewAssembly();
-
- $i = null;
-
- foreach($assembly as $i => $assemblyPart) {
- self::assertFileExists($assemblyPart);
- self::assertStringEndsWith(".html", $assemblyPart);
- }
-
- self::assertNotNull($i);
- }
-}
\ No newline at end of file
diff --git a/test/phpunit/Route/RouterFactoryTest.php b/test/phpunit/Route/RouterFactoryTest.php
deleted file mode 100644
index 14f9ab28..00000000
--- a/test/phpunit/Route/RouterFactoryTest.php
+++ /dev/null
@@ -1,121 +0,0 @@
-method("getHeaderLine")
- ->with("accept")
- ->willReturn("no/matches");
- $request->method("getUri")
- ->willReturn($uri);
-
- self::expectException(RoutingException::class);
- self::expectExceptionMessage("Accept header has no route: no/matches");
- $sut = new RouterFactory();
- $sut->create($request, "");
- }
-
- public function testCreateEmptyAcceptHeader() {
- $uri = self::createMock(Uri::class);
-
- $request = self::createMock(Request::class);
- $request->method("getHeaderLine")
- ->with("accept")
- ->willReturn("");
- $request->method("getUri")
- ->willReturn($uri);
-
-// The accept header should default to text/html if none is provided.
- $sut = new RouterFactory();
- $router = $sut->create($request, "");
- self::assertInstanceOf(
- PageRouter::class,
- $router
- );
- }
-
- public function testCreateWildcardAcceptHeader() {
- $uri = self::createMock(Uri::class);
-
- $request = self::createMock(Request::class);
- $request->method("getHeaderLine")
- ->with("accept")
- ->willReturn("*/*");
- $request->method("getUri")
- ->willReturn($uri);
-
-// The accept header should default to text/html if */* is provided.
- $sut = new RouterFactory();
- $router = $sut->create($request, "");
- self::assertInstanceOf(
- PageRouter::class,
- $router
- );
- }
-
- public function testCreateWildcardAcceptHeaderWithJsonDefault() {
- $uri = self::createMock(Uri::class);
-
- $request = self::createMock(Request::class);
- $request->method("getHeaderLine")
- ->with("accept")
- ->willReturn("*/*");
- $request->method("getUri")
- ->willReturn($uri);
-
-// The accept header should default to text/json if */* is provided - this is
-// due to the default value in the config.
- $sut = new RouterFactory("application/json");
- $router = $sut->create($request, "");
- self::assertInstanceOf(
- ApiRouter::class,
- $router
- );
- }
-
- public function testCreateTextHtmlAcceptHeader() {
- $uri = self::createMock(Uri::class);
- $request = self::createMock(Request::class);
- $request->method("getHeaderLine")
- ->with("accept")
- ->willReturn("text/html");
- $request->method("getUri")
- ->willReturn($uri);
-
- $sut = new RouterFactory();
- $router = $sut->create($request, "");
- self::assertInstanceOf(
- PageRouter::class,
- $router
- );
- }
-
- public function testCreateApplicationJsonHeader() {
- $uri = self::createMock(Uri::class);
- $request = self::createMock(Request::class);
- $request->method("getHeaderLine")
- ->with("accept")
- ->willReturn("application/json");
- $request->method("getUri")
- ->willReturn($uri);
-
- $sut = new RouterFactory();
- $router = $sut->create($request, "");
- self::assertInstanceOf(
- ApiRouter::class,
- $router
- );
- }
-}
\ No newline at end of file
diff --git a/test/phpunit/Route/RouterTestCase.php b/test/phpunit/Route/RouterTestCase.php
deleted file mode 100644
index a732de1f..00000000
--- a/test/phpunit/Route/RouterTestCase.php
+++ /dev/null
@@ -1,31 +0,0 @@
- 0) {
- $nesting = rand(1, 10);
- for($n = 0; $n < $nesting; $n++) {
- $uri .= uniqid("nest-") . "/";
- }
-
- if($i % 10 === 0) {
- $uri .= "index";
- }
- }
-
- $params []= $uri;
- $data []= $params;
- }
-
- return $data;
- }
-}
\ No newline at end of file
diff --git a/test/phpunit/Route/func_header.php b/test/phpunit/Route/func_header.php
deleted file mode 100644
index 700cc09b..00000000
--- a/test/phpunit/Route/func_header.php
+++ /dev/null
@@ -1,9 +0,0 @@
-getViewModel()
- );
- }
-
- public function testStream() {
- $exampleViewModelString = uniqid("view-model-");
-
- $outputStream = self::createMock(Stream::class);
- $outputStream->expects(self::once())
- ->method("write")
- ->with($exampleViewModelString);
-
- $viewModel = self::createMock(HTMLDocument::class);
- $viewModel->expects(self::once())
- ->method("__toString")
- ->willReturn($exampleViewModelString);
-
- $sut = new ApiView($outputStream, $viewModel);
- $sut->stream();
- }
-}
\ No newline at end of file
diff --git a/test/phpunit/View/PageViewTest.php b/test/phpunit/View/PageViewTest.php
deleted file mode 100644
index 3112b23d..00000000
--- a/test/phpunit/View/PageViewTest.php
+++ /dev/null
@@ -1,36 +0,0 @@
-getViewModel()
- );
- }
-
- public function testStream() {
- $exampleViewModelString = uniqid("view-model-");
-
- $outputStream = self::createMock(Stream::class);
- $outputStream->expects(self::once())
- ->method("write")
- ->with($exampleViewModelString);
-
- $viewModel = self::createMock(HTMLDocument::class);
- $viewModel->expects(self::once())
- ->method("__toString")
- ->willReturn($exampleViewModelString);
-
- $sut = new PageView($outputStream, $viewModel);
- $sut->stream();
- }
-}
\ No newline at end of file
diff --git a/test/phpunit/WebEngineTestCase.php b/test/phpunit/WebEngineTestCase.php
deleted file mode 100644
index bbfb4833..00000000
--- a/test/phpunit/WebEngineTestCase.php
+++ /dev/null
@@ -1,69 +0,0 @@
-createdTmpDirs as $dir) {
- $this->recursiveUnlink($dir);
- }
-
- parent::tearDown();
- }
-
- public function getTmpDir(string $prefix = null):string {
- if(is_null($prefix)) {
- $prefix = "webengine-test-case";
- }
-
- $dir = implode(DIRECTORY_SEPARATOR, [
- sys_get_temp_dir(),
- "phpgt",
- "webengine",
- uniqid($prefix . "-"),
- ]);
- if(!is_dir($dir)) {
- mkdir($dir, 0775, true);
- }
-
- $this->createdTmpDirs []= $dir;
-
- return $dir;
- }
-
- public static function expectCallsToFunction(
- string $functionName,
- array $parameterCalls
- ) {
- self::assertEquals(
- count($parameterCalls),
- Override::getNumCalls($functionName)
- );
-
- $actualParameterCalls = Override::getCalls($functionName);
- foreach($parameterCalls as $i => $expectedParam) {
- self::assertEquals(
- $expectedParam,
- $actualParameterCalls[$i]
- );
- }
- }
-
- private function recursiveUnlink(string $path):void {
- $contents = glob("$path/*");
- foreach($contents as $filePath) {
- if(is_file($filePath)) {
- unlink($filePath);
- }
- elseif(is_dir($filePath)) {
- $this->recursiveUnlink($filePath);
- }
- }
-
- rmdir($path);
- }
-}
\ No newline at end of file
diff --git a/test/phpunit/phpunit.xml b/test/phpunit/phpunit.xml
deleted file mode 100644
index 001d1236..00000000
--- a/test/phpunit/phpunit.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
The following PHP has been executed:
-Dynamic page requested: X.
-The following PHP has been executed:
-Dynamic page requested: X.
-The following PHP has been executed:
-The following PHP has been executed:
-The following PHP has been executed:
-