Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
83d6a2169b | ||
|
|
21e7a4d966 | ||
|
|
404cd24855 | ||
|
|
b4ad72ee67 | ||
|
|
bea628b619 | ||
|
|
3637e54982 |
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"presets": [
|
||||
[
|
||||
"@babel/preset-env",
|
||||
{
|
||||
"targets": {
|
||||
"browsers": [
|
||||
"last 2 versions"
|
||||
]
|
||||
},
|
||||
"modules":false
|
||||
}
|
||||
]
|
||||
],
|
||||
"plugins": [
|
||||
"lodash"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
parser: "@typescript-eslint/parser",
|
||||
parserOptions: {
|
||||
"project": "./tsconfig.json"
|
||||
},
|
||||
ignorePatterns: ['*.test.ts', '.eslintrc.js', 'webpack.config.js', '*.js'],
|
||||
overrides: [{
|
||||
files: ['*.ts', '*.tsx'],
|
||||
}],
|
||||
plugins: [
|
||||
"@typescript-eslint",
|
||||
],
|
||||
extends: [
|
||||
"eslint:recommended",
|
||||
"plugin:@typescript-eslint/eslint-recommended",
|
||||
"plugin:@typescript-eslint/recommended"
|
||||
],
|
||||
rules: {
|
||||
'@typescript-eslint/no-floating-promises': 'error',
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -4,7 +4,8 @@
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
|
||||
|
||||
/node_modules
|
||||
package-lock.json
|
||||
|
||||
|
||||
# 체섭 ignore
|
||||
|
||||
@@ -23,7 +23,6 @@ return [
|
||||
'f_config/config.php',
|
||||
'hwe/a_bestGeneral.php',
|
||||
'hwe/a_emperior.php',
|
||||
'hwe/a_emperior2.php',
|
||||
'hwe/a_emperior_detail.php',
|
||||
'hwe/a_genList.php',
|
||||
'hwe/a_hallOfFame.php',
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@
|
||||
"ezyang/htmlpurifier": "^4.10",
|
||||
"xemlock/htmlpurifier-html5": "^0.1.7",
|
||||
"catfan/medoo": "^1.5",
|
||||
"phan/phan": "^2.7",
|
||||
"phan/phan": "*",
|
||||
"erusev/parsedown-extra": "^0.8.1",
|
||||
"nette/caching": "^3.0"
|
||||
},
|
||||
|
||||
Generated
+1175
-289
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "ab1175c8592ba7f7756d5f02a3aa051c",
|
||||
"content-hash": "2aeb036fc53a6fdc343bd2707d4697ee",
|
||||
"packages": [
|
||||
{
|
||||
"name": "brandonwamboldt/utilphp",
|
||||
@@ -50,20 +50,24 @@
|
||||
"php",
|
||||
"utility"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/brandonwamboldt/utilphp/issues",
|
||||
"source": "https://github.com/brandonwamboldt/utilphp/tree/master"
|
||||
},
|
||||
"time": "2015-02-02T17:56:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "catfan/medoo",
|
||||
"version": "v1.7.8",
|
||||
"version": "v1.7.10",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/catfan/Medoo.git",
|
||||
"reference": "dd9d570584cfb1e09ec470608479b86e41d5b60d"
|
||||
"reference": "2d675f73e23f63bbaeb9a8aa33318659a3d3c32f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/catfan/Medoo/zipball/dd9d570584cfb1e09ec470608479b86e41d5b60d",
|
||||
"reference": "dd9d570584cfb1e09ec470608479b86e41d5b60d",
|
||||
"url": "https://api.github.com/repos/catfan/Medoo/zipball/2d675f73e23f63bbaeb9a8aa33318659a3d3c32f",
|
||||
"reference": "2d675f73e23f63bbaeb9a8aa33318659a3d3c32f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -110,32 +114,37 @@
|
||||
"sql",
|
||||
"sqlite"
|
||||
],
|
||||
"time": "2019-12-19T05:04:34+00:00"
|
||||
"support": {
|
||||
"issues": "https://github.com/catfan/Medoo/issues",
|
||||
"source": "https://github.com/catfan/Medoo"
|
||||
},
|
||||
"time": "2020-02-11T08:20:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "composer/semver",
|
||||
"version": "1.5.1",
|
||||
"version": "3.2.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/composer/semver.git",
|
||||
"reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de"
|
||||
"reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
|
||||
"reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
|
||||
"url": "https://api.github.com/repos/composer/semver/zipball/31f3ea725711245195f62e54ffa402d8ef2fdba9",
|
||||
"reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.3.2 || ^7.0"
|
||||
"php": "^5.3.2 || ^7.0 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.5 || ^5.0.5"
|
||||
"phpstan/phpstan": "^0.12.54",
|
||||
"symfony/phpunit-bridge": "^4.2 || ^5"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.x-dev"
|
||||
"dev-main": "3.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -171,28 +180,48 @@
|
||||
"validation",
|
||||
"versioning"
|
||||
],
|
||||
"time": "2020-01-13T12:06:48+00:00"
|
||||
"support": {
|
||||
"irc": "irc://irc.freenode.org/composer",
|
||||
"issues": "https://github.com/composer/semver/issues",
|
||||
"source": "https://github.com/composer/semver/tree/3.2.5"
|
||||
},
|
||||
"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": "2021-05-24T12:41:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "composer/xdebug-handler",
|
||||
"version": "1.4.1",
|
||||
"version": "2.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/composer/xdebug-handler.git",
|
||||
"reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7"
|
||||
"reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/1ab9842d69e64fb3a01be6b656501032d1b78cb7",
|
||||
"reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7",
|
||||
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339",
|
||||
"reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.3.2 || ^7.0 || ^8.0",
|
||||
"psr/log": "^1.0"
|
||||
"psr/log": "^1 || ^2 || ^3"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
|
||||
"phpstan/phpstan": "^0.12.55",
|
||||
"symfony/phpunit-bridge": "^4.2 || ^5"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@@ -215,7 +244,26 @@
|
||||
"Xdebug",
|
||||
"performance"
|
||||
],
|
||||
"time": "2020-03-01T12:26:26+00:00"
|
||||
"support": {
|
||||
"irc": "irc://irc.freenode.org/composer",
|
||||
"issues": "https://github.com/composer/xdebug-handler/issues",
|
||||
"source": "https://github.com/composer/xdebug-handler/tree/2.0.2"
|
||||
},
|
||||
"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": "2021-07-31T17:03:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "erusev/parsedown",
|
||||
@@ -261,6 +309,10 @@
|
||||
"markdown",
|
||||
"parser"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/erusev/parsedown/issues",
|
||||
"source": "https://github.com/erusev/parsedown/tree/1.7.x"
|
||||
},
|
||||
"time": "2019-12-30T22:54:17+00:00"
|
||||
},
|
||||
{
|
||||
@@ -308,20 +360,24 @@
|
||||
"parsedown",
|
||||
"parser"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/erusev/parsedown-extra/issues",
|
||||
"source": "https://github.com/erusev/parsedown-extra/tree/0.8.x"
|
||||
},
|
||||
"time": "2019-12-30T23:20:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ezyang/htmlpurifier",
|
||||
"version": "v4.12.0",
|
||||
"version": "v4.13.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ezyang/htmlpurifier.git",
|
||||
"reference": "a617e55bc62a87eec73bd456d146d134ad716f03"
|
||||
"reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/a617e55bc62a87eec73bd456d146d134ad716f03",
|
||||
"reference": "a617e55bc62a87eec73bd456d146d134ad716f03",
|
||||
"url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75",
|
||||
"reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -337,6 +393,9 @@
|
||||
},
|
||||
"files": [
|
||||
"library/HTMLPurifier.composer.php"
|
||||
],
|
||||
"exclude-from-classmap": [
|
||||
"/library/HTMLPurifier/Language/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
@@ -355,29 +414,33 @@
|
||||
"keywords": [
|
||||
"html"
|
||||
],
|
||||
"time": "2019-10-28T03:44:26+00:00"
|
||||
"support": {
|
||||
"issues": "https://github.com/ezyang/htmlpurifier/issues",
|
||||
"source": "https://github.com/ezyang/htmlpurifier/tree/master"
|
||||
},
|
||||
"time": "2020-06-29T00:56:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "felixfbecker/advanced-json-rpc",
|
||||
"version": "v3.1.1",
|
||||
"version": "v3.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/felixfbecker/php-advanced-json-rpc.git",
|
||||
"reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40"
|
||||
"reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/0ed363f8de17d284d479ec813c9ad3f6834b5c40",
|
||||
"reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40",
|
||||
"url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447",
|
||||
"reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"netresearch/jsonmapper": "^1.0 || ^2.0",
|
||||
"php": ">=7.0",
|
||||
"phpdocumentor/reflection-docblock": "^4.0.0 || ^5.0.0"
|
||||
"netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
|
||||
"php": "^7.1 || ^8.0",
|
||||
"phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^6.0.0"
|
||||
"phpunit/phpunit": "^7.0 || ^8.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@@ -396,7 +459,11 @@
|
||||
}
|
||||
],
|
||||
"description": "A more advanced JSONRPC implementation",
|
||||
"time": "2020-03-11T15:21:41+00:00"
|
||||
"support": {
|
||||
"issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues",
|
||||
"source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1"
|
||||
},
|
||||
"time": "2021-06-11T22:34:44+00:00"
|
||||
},
|
||||
{
|
||||
"name": "firephp/firephp-core",
|
||||
@@ -432,27 +499,33 @@
|
||||
],
|
||||
"description": "Traditional FirePHPCore library for sending PHP variables to the browser.",
|
||||
"homepage": "https://github.com/firephp/firephp-core",
|
||||
"support": {
|
||||
"forum": "http://groups.google.com/group/firephp-dev",
|
||||
"issues": "https://github.com/firephp/firephp-core/issues",
|
||||
"source": "https://github.com/firephp/firephp-core"
|
||||
},
|
||||
"time": "2013-04-23T15:28:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/guzzle",
|
||||
"version": "6.5.2",
|
||||
"version": "6.5.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/guzzle.git",
|
||||
"reference": "43ece0e75098b7ecd8d13918293029e555a50f82"
|
||||
"reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82",
|
||||
"reference": "43ece0e75098b7ecd8d13918293029e555a50f82",
|
||||
"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"
|
||||
"php": ">=5.5",
|
||||
"symfony/polyfill-intl-idn": "^1.17.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-curl": "*",
|
||||
@@ -460,7 +533,6 @@
|
||||
"psr/log": "^1.1"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
|
||||
"psr/log": "Required for using the Log middleware"
|
||||
},
|
||||
"type": "library",
|
||||
@@ -499,27 +571,31 @@
|
||||
"rest",
|
||||
"web service"
|
||||
],
|
||||
"time": "2019-12-23T11:57:10+00:00"
|
||||
"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": "v1.3.1",
|
||||
"version": "1.4.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/promises.git",
|
||||
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
|
||||
"reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
|
||||
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
|
||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d",
|
||||
"reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.5.0"
|
||||
"php": ">=5.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.0"
|
||||
"symfony/phpunit-bridge": "^4.4 || ^5.1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -550,20 +626,24 @@
|
||||
"keywords": [
|
||||
"promise"
|
||||
],
|
||||
"time": "2016-12-20T10:07:11+00:00"
|
||||
"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.6.1",
|
||||
"version": "1.8.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/psr7.git",
|
||||
"reference": "239400de7a173fe9901b9ac7c06497751f00727a"
|
||||
"reference": "dc960a912984efb74d0a90222870c72c87f10c91"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
|
||||
"reference": "239400de7a173fe9901b9ac7c06497751f00727a",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91",
|
||||
"reference": "dc960a912984efb74d0a90222870c72c87f10c91",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -576,15 +656,15 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-zlib": "*",
|
||||
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
|
||||
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
|
||||
},
|
||||
"suggest": {
|
||||
"zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
|
||||
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.6-dev"
|
||||
"dev-master": "1.7-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -621,29 +701,33 @@
|
||||
"uri",
|
||||
"url"
|
||||
],
|
||||
"time": "2019-07-01T23:21:34+00:00"
|
||||
"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": "league/plates",
|
||||
"version": "3.3.0",
|
||||
"version": "v3.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/plates.git",
|
||||
"reference": "b1684b6f127714497a0ef927ce42c0b44b45a8af"
|
||||
"reference": "6d3ee31199b536a4e003b34a356ca20f6f75496a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/plates/zipball/b1684b6f127714497a0ef927ce42c0b44b45a8af",
|
||||
"reference": "b1684b6f127714497a0ef927ce42c0b44b45a8af",
|
||||
"url": "https://api.github.com/repos/thephpleague/plates/zipball/6d3ee31199b536a4e003b34a356ca20f6f75496a",
|
||||
"reference": "6d3ee31199b536a4e003b34a356ca20f6f75496a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.3 | ^7.0"
|
||||
"php": "^7.0|^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"mikey179/vfsstream": "^1.4",
|
||||
"phpunit/phpunit": "~4.0",
|
||||
"squizlabs/php_codesniffer": "~1.5"
|
||||
"mikey179/vfsstream": "^1.6",
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"squizlabs/php_codesniffer": "^3.5"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -665,10 +749,15 @@
|
||||
"name": "Jonathan Reinink",
|
||||
"email": "jonathan@reinink.ca",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "RJ Garcia",
|
||||
"email": "ragboyjr@icloud.com",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Plates, the native PHP template system that's fast, easy to use and easy to extend.",
|
||||
"homepage": "http://platesphp.com",
|
||||
"homepage": "https://platesphp.com",
|
||||
"keywords": [
|
||||
"league",
|
||||
"package",
|
||||
@@ -676,27 +765,31 @@
|
||||
"templating",
|
||||
"views"
|
||||
],
|
||||
"time": "2016-12-28T00:14:17+00:00"
|
||||
"support": {
|
||||
"issues": "https://github.com/thephpleague/plates/issues",
|
||||
"source": "https://github.com/thephpleague/plates/tree/v3.4.0"
|
||||
},
|
||||
"time": "2020-12-25T05:00:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "microsoft/tolerant-php-parser",
|
||||
"version": "v0.0.20",
|
||||
"version": "v0.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/microsoft/tolerant-php-parser.git",
|
||||
"reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4"
|
||||
"reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4",
|
||||
"reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4",
|
||||
"url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/6a965617cf484355048ac6d2d3de7b6ec93abb16",
|
||||
"reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.0"
|
||||
"php": ">=7.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^6.4"
|
||||
"phpunit/phpunit": "^8.5.15"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@@ -717,20 +810,24 @@
|
||||
}
|
||||
],
|
||||
"description": "Tolerant PHP-to-AST parser designed for IDE usage scenarios",
|
||||
"time": "2020-02-18T02:57:19+00:00"
|
||||
"support": {
|
||||
"issues": "https://github.com/microsoft/tolerant-php-parser/issues",
|
||||
"source": "https://github.com/microsoft/tolerant-php-parser/tree/v0.1.1"
|
||||
},
|
||||
"time": "2021-07-16T21:28:12+00:00"
|
||||
},
|
||||
{
|
||||
"name": "monolog/monolog",
|
||||
"version": "1.25.3",
|
||||
"version": "1.26.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Seldaek/monolog.git",
|
||||
"reference": "fa82921994db851a8becaf3787a9e73c5976b6f1"
|
||||
"reference": "c6b00f05152ae2c9b04a448f99c7590beb6042f5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/fa82921994db851a8becaf3787a9e73c5976b6f1",
|
||||
"reference": "fa82921994db851a8becaf3787a9e73c5976b6f1",
|
||||
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/c6b00f05152ae2c9b04a448f99c7590beb6042f5",
|
||||
"reference": "c6b00f05152ae2c9b04a448f99c7590beb6042f5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -744,11 +841,10 @@
|
||||
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
|
||||
"doctrine/couchdb": "~1.0@dev",
|
||||
"graylog2/gelf-php": "~1.0",
|
||||
"jakub-onderka/php-parallel-lint": "0.9",
|
||||
"php-amqplib/php-amqplib": "~2.4",
|
||||
"php-console/php-console": "^3.1.3",
|
||||
"phpstan/phpstan": "^0.12.59",
|
||||
"phpunit/phpunit": "~4.5",
|
||||
"phpunit/phpunit-mock-objects": "2.3.0",
|
||||
"ruflin/elastica": ">=0.90 <3.0",
|
||||
"sentry/sentry": "^0.13",
|
||||
"swiftmailer/swiftmailer": "^5.3|^6.0"
|
||||
@@ -767,11 +863,6 @@
|
||||
"sentry/sentry": "Allow sending log messages to a Sentry server"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Monolog\\": "src/Monolog"
|
||||
@@ -795,20 +886,34 @@
|
||||
"logging",
|
||||
"psr-3"
|
||||
],
|
||||
"time": "2019-12-20T14:15:16+00:00"
|
||||
"support": {
|
||||
"issues": "https://github.com/Seldaek/monolog/issues",
|
||||
"source": "https://github.com/Seldaek/monolog/tree/1.26.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/Seldaek",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-05-28T08:32:12+00:00"
|
||||
},
|
||||
{
|
||||
"name": "netresearch/jsonmapper",
|
||||
"version": "v2.1.0",
|
||||
"version": "v4.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/cweiske/jsonmapper.git",
|
||||
"reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e"
|
||||
"reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/e0f1e33a71587aca81be5cffbb9746510e1fe04e",
|
||||
"reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e",
|
||||
"url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d",
|
||||
"reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -816,10 +921,10 @@
|
||||
"ext-pcre": "*",
|
||||
"ext-reflection": "*",
|
||||
"ext-spl": "*",
|
||||
"php": ">=5.6"
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~4.8.35 || ~5.7 || ~6.4 || ~7.0",
|
||||
"phpunit/phpunit": "~7.5 || ~8.0 || ~9.0",
|
||||
"squizlabs/php_codesniffer": "~3.5"
|
||||
},
|
||||
"type": "library",
|
||||
@@ -841,31 +946,37 @@
|
||||
}
|
||||
],
|
||||
"description": "Map nested JSON structures onto PHP classes",
|
||||
"time": "2020-04-16T18:48:43+00:00"
|
||||
"support": {
|
||||
"email": "cweiske@cweiske.de",
|
||||
"issues": "https://github.com/cweiske/jsonmapper/issues",
|
||||
"source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0"
|
||||
},
|
||||
"time": "2020-12-01T19:48:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nette/caching",
|
||||
"version": "v3.0.1",
|
||||
"version": "v3.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nette/caching.git",
|
||||
"reference": "b9ecbf920f240bd1ab14900d9a77876924ad7fb4"
|
||||
"reference": "3e771c589dee414724be473c24ad16dae50c1960"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nette/caching/zipball/b9ecbf920f240bd1ab14900d9a77876924ad7fb4",
|
||||
"reference": "b9ecbf920f240bd1ab14900d9a77876924ad7fb4",
|
||||
"url": "https://api.github.com/repos/nette/caching/zipball/3e771c589dee414724be473c24ad16dae50c1960",
|
||||
"reference": "3e771c589dee414724be473c24ad16dae50c1960",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"nette/finder": "^2.4 || ^3.0",
|
||||
"nette/utils": "^2.4 || ^3.0",
|
||||
"php": ">=7.1"
|
||||
"php": ">=7.2 <8.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"latte/latte": "^2.4",
|
||||
"latte/latte": "^2.10",
|
||||
"nette/di": "^v3.0",
|
||||
"nette/tester": "^2.0",
|
||||
"phpstan/phpstan": "^0.12",
|
||||
"tracy/tracy": "^2.4"
|
||||
},
|
||||
"suggest": {
|
||||
@@ -874,7 +985,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0-dev"
|
||||
"dev-master": "3.1-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -885,8 +996,8 @@
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD-3-Clause",
|
||||
"GPL-2.0",
|
||||
"GPL-3.0"
|
||||
"GPL-2.0-only",
|
||||
"GPL-3.0-only"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
@@ -907,7 +1018,11 @@
|
||||
"nette",
|
||||
"sqlite"
|
||||
],
|
||||
"time": "2019-11-19T18:41:40+00:00"
|
||||
"support": {
|
||||
"issues": "https://github.com/nette/caching/issues",
|
||||
"source": "https://github.com/nette/caching/tree/v3.1.1"
|
||||
},
|
||||
"time": "2021-03-06T14:07:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nette/finder",
|
||||
@@ -970,24 +1085,31 @@
|
||||
"iterator",
|
||||
"nette"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/nette/finder/issues",
|
||||
"source": "https://github.com/nette/finder/tree/v2.5.2"
|
||||
},
|
||||
"time": "2020-01-03T20:35:40+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nette/utils",
|
||||
"version": "v3.1.2",
|
||||
"version": "v3.2.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nette/utils.git",
|
||||
"reference": "488f58378bba71767e7831c83f9e0fa808bf83b9"
|
||||
"reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nette/utils/zipball/488f58378bba71767e7831c83f9e0fa808bf83b9",
|
||||
"reference": "488f58378bba71767e7831c83f9e0fa808bf83b9",
|
||||
"url": "https://api.github.com/repos/nette/utils/zipball/967cfc4f9a1acd5f1058d76715a424c53343c20c",
|
||||
"reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
"php": ">=7.2 <8.1"
|
||||
},
|
||||
"conflict": {
|
||||
"nette/di": "<3.0.6"
|
||||
},
|
||||
"require-dev": {
|
||||
"nette/tester": "~2.0",
|
||||
@@ -1006,7 +1128,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.1-dev"
|
||||
"dev-master": "3.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1030,7 +1152,7 @@
|
||||
"homepage": "https://nette.org/contributors"
|
||||
}
|
||||
],
|
||||
"description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
|
||||
"description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
|
||||
"homepage": "https://nette.org",
|
||||
"keywords": [
|
||||
"array",
|
||||
@@ -1048,7 +1170,11 @@
|
||||
"utility",
|
||||
"validation"
|
||||
],
|
||||
"time": "2020-05-27T09:58:51+00:00"
|
||||
"support": {
|
||||
"issues": "https://github.com/nette/utils/issues",
|
||||
"source": "https://github.com/nette/utils/tree/v3.2.2"
|
||||
},
|
||||
"time": "2021-03-03T22:53:25+00:00"
|
||||
},
|
||||
{
|
||||
"name": "pguardiario/phpuri",
|
||||
@@ -1072,47 +1198,52 @@
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"description": "A php library for converting relative urls to absolute.",
|
||||
"support": {
|
||||
"issues": "https://github.com/monkeysuffrage/phpuri/issues",
|
||||
"source": "https://github.com/monkeysuffrage/phpuri/tree/1.0.0"
|
||||
},
|
||||
"time": "2015-05-24T09:13:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phan/phan",
|
||||
"version": "2.7.1",
|
||||
"version": "5.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phan/phan.git",
|
||||
"reference": "67c51bb1593e5c30271fc16d691b82e318b90b77"
|
||||
"reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phan/phan/zipball/67c51bb1593e5c30271fc16d691b82e318b90b77",
|
||||
"reference": "67c51bb1593e5c30271fc16d691b82e318b90b77",
|
||||
"url": "https://api.github.com/repos/phan/phan/zipball/f36b6b9a2f4143a25f35ce94d712ceb0527e9d90",
|
||||
"reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"composer/semver": "^1.4",
|
||||
"composer/xdebug-handler": "^1.3.2",
|
||||
"composer/semver": "^1.4|^2.0|^3.0",
|
||||
"composer/xdebug-handler": "^1.3.2|^2.0.0",
|
||||
"ext-filter": "*",
|
||||
"ext-json": "*",
|
||||
"ext-tokenizer": "*",
|
||||
"felixfbecker/advanced-json-rpc": "^3.0.4",
|
||||
"microsoft/tolerant-php-parser": "0.0.20",
|
||||
"netresearch/jsonmapper": "^1.6.0|^2.0",
|
||||
"php": "^7.1.0",
|
||||
"sabre/event": "^5.0",
|
||||
"symfony/console": "^2.3|^3.0|^4.0|^5.0",
|
||||
"microsoft/tolerant-php-parser": "^0.1.0",
|
||||
"netresearch/jsonmapper": "^1.6.0|^2.0|^3.0|^4.0",
|
||||
"php": "^7.2.0|^8.0.0",
|
||||
"sabre/event": "^5.0.3",
|
||||
"symfony/console": "^3.2|^4.0|^5.0",
|
||||
"symfony/polyfill-mbstring": "^1.11.0",
|
||||
"symfony/polyfill-php72": "^1.15"
|
||||
"symfony/polyfill-php80": "^1.20.0",
|
||||
"tysonandre/var_representation_polyfill": "^0.0.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"brianium/paratest": "^4.0.0",
|
||||
"phpunit/phpunit": "^7.5.0"
|
||||
"phpunit/phpunit": "^8.5.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-ast": "Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.6+ is recommended.",
|
||||
"ext-ast": "Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.14+ is recommended.",
|
||||
"ext-iconv": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8",
|
||||
"ext-igbinary": "Improves performance of polyfill when ext-ast is unavailable",
|
||||
"ext-mbstring": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8",
|
||||
"ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions."
|
||||
"ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions.",
|
||||
"ext-var_representation": "Suggested for converting values to strings in issue messages"
|
||||
},
|
||||
"bin": [
|
||||
"phan",
|
||||
@@ -1146,7 +1277,11 @@
|
||||
"php",
|
||||
"static"
|
||||
],
|
||||
"time": "2020-04-12T01:25:29+00:00"
|
||||
"support": {
|
||||
"issues": "https://github.com/phan/phan/issues",
|
||||
"source": "https://github.com/phan/phan/tree/5.0.0"
|
||||
},
|
||||
"time": "2021-08-01T18:17:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "php-extended/php-system",
|
||||
@@ -1186,6 +1321,10 @@
|
||||
"php",
|
||||
"system"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://gitlab.com/php-extended/php-system/issues",
|
||||
"source": "https://gitlab.com/php-extended/php-system"
|
||||
},
|
||||
"time": "2018-06-07T06:03:27+00:00"
|
||||
},
|
||||
{
|
||||
@@ -1230,29 +1369,33 @@
|
||||
"php",
|
||||
"tail"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://gitlab.com/php-extended/php-tail/issues",
|
||||
"source": "https://gitlab.com/php-extended/php-tail"
|
||||
},
|
||||
"time": "2018-06-07T06:04:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpdocumentor/reflection-common",
|
||||
"version": "2.1.0",
|
||||
"version": "2.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
|
||||
"reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b"
|
||||
"reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
|
||||
"reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
|
||||
"reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
"php": "^7.2 || ^8.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.x-dev"
|
||||
"dev-2.x": "2.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1279,32 +1422,35 @@
|
||||
"reflection",
|
||||
"static analysis"
|
||||
],
|
||||
"time": "2020-04-27T09:25:28+00:00"
|
||||
"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.1.0",
|
||||
"version": "5.2.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
||||
"reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e"
|
||||
"reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
|
||||
"reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
|
||||
"reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-filter": "^7.1",
|
||||
"php": "^7.2",
|
||||
"phpdocumentor/reflection-common": "^2.0",
|
||||
"phpdocumentor/type-resolver": "^1.0",
|
||||
"webmozart/assert": "^1"
|
||||
"ext-filter": "*",
|
||||
"php": "^7.2 || ^8.0",
|
||||
"phpdocumentor/reflection-common": "^2.2",
|
||||
"phpdocumentor/type-resolver": "^1.3",
|
||||
"webmozart/assert": "^1.9.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/instantiator": "^1",
|
||||
"mockery/mockery": "^1"
|
||||
"mockery/mockery": "~1.3.2"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -1332,34 +1478,37 @@
|
||||
}
|
||||
],
|
||||
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
|
||||
"time": "2020-02-22T12:28:44+00:00"
|
||||
"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.1.0",
|
||||
"version": "1.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpDocumentor/TypeResolver.git",
|
||||
"reference": "7462d5f123dfc080dfdf26897032a6513644fc95"
|
||||
"reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95",
|
||||
"reference": "7462d5f123dfc080dfdf26897032a6513644fc95",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
|
||||
"reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2",
|
||||
"php": "^7.2 || ^8.0",
|
||||
"phpdocumentor/reflection-common": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-tokenizer": "^7.2",
|
||||
"mockery/mockery": "~1"
|
||||
"ext-tokenizer": "*"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.x-dev"
|
||||
"dev-1.x": "1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1378,31 +1527,30 @@
|
||||
}
|
||||
],
|
||||
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
|
||||
"time": "2020-02-18T18:59:58+00:00"
|
||||
"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": "psr/container",
|
||||
"version": "1.0.0",
|
||||
"version": "1.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/container.git",
|
||||
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
|
||||
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
||||
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
||||
"url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
|
||||
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
"php": ">=7.2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Container\\": "src/"
|
||||
@@ -1415,7 +1563,7 @@
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "http://www.php-fig.org/"
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common Container Interface (PHP FIG PSR-11)",
|
||||
@@ -1427,7 +1575,11 @@
|
||||
"container-interop",
|
||||
"psr"
|
||||
],
|
||||
"time": "2017-02-14T16:28:37+00:00"
|
||||
"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/http-message",
|
||||
@@ -1477,20 +1629,23 @@
|
||||
"request",
|
||||
"response"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/http-message/tree/master"
|
||||
},
|
||||
"time": "2016-08-06T14:39:51+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/log",
|
||||
"version": "1.1.2",
|
||||
"version": "1.1.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/log.git",
|
||||
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
|
||||
"reference": "d49695b909c3b7628b6289db5479a1c204601f11"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
||||
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
|
||||
"reference": "d49695b909c3b7628b6289db5479a1c204601f11",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1514,7 +1669,7 @@
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "http://www.php-fig.org/"
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for logging libraries",
|
||||
@@ -1524,7 +1679,10 @@
|
||||
"psr",
|
||||
"psr-3"
|
||||
],
|
||||
"time": "2019-11-01T11:05:21+00:00"
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/log/tree/1.1.4"
|
||||
},
|
||||
"time": "2021-05-03T11:20:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ralouphie/getallheaders",
|
||||
@@ -1564,28 +1722,33 @@
|
||||
}
|
||||
],
|
||||
"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": "sabre/event",
|
||||
"version": "5.1.0",
|
||||
"version": "5.1.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sabre-io/event.git",
|
||||
"reference": "d00a17507af0e7544cfe17096372f5d733e3b276"
|
||||
"reference": "c120bec57c17b6251a496efc82b732418b49d50a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sabre-io/event/zipball/d00a17507af0e7544cfe17096372f5d733e3b276",
|
||||
"reference": "d00a17507af0e7544cfe17096372f5d733e3b276",
|
||||
"url": "https://api.github.com/repos/sabre-io/event/zipball/c120bec57c17b6251a496efc82b732418b49d50a",
|
||||
"reference": "c120bec57c17b6251a496efc82b732418b49d50a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1"
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "~2.16.1",
|
||||
"phpunit/phpunit": "^7 || ^8"
|
||||
"phpstan/phpstan": "^0.12",
|
||||
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@@ -1624,20 +1787,25 @@
|
||||
"reactor",
|
||||
"signal"
|
||||
],
|
||||
"time": "2020-01-31T18:52:29+00:00"
|
||||
"support": {
|
||||
"forum": "https://groups.google.com/group/sabredav-discuss",
|
||||
"issues": "https://github.com/sabre-io/event/issues",
|
||||
"source": "https://github.com/fruux/sabre-event"
|
||||
},
|
||||
"time": "2020-10-03T11:02:22+00:00"
|
||||
},
|
||||
{
|
||||
"name": "scssphp/scssphp",
|
||||
"version": "1.0.6",
|
||||
"version": "v1.6.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/scssphp/scssphp.git",
|
||||
"reference": "5b3c9d704950d8f9637f5110c36c281ec47dc13c"
|
||||
"reference": "b83594e2323c5d6e80785df3f91b9d1d32aad530"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/scssphp/scssphp/zipball/5b3c9d704950d8f9637f5110c36c281ec47dc13c",
|
||||
"reference": "5b3c9d704950d8f9637f5110c36c281ec47dc13c",
|
||||
"url": "https://api.github.com/repos/scssphp/scssphp/zipball/b83594e2323c5d6e80785df3f91b9d1d32aad530",
|
||||
"reference": "b83594e2323c5d6e80785df3f91b9d1d32aad530",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1646,11 +1814,19 @@
|
||||
"php": ">=5.6.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.3",
|
||||
"squizlabs/php_codesniffer": "~2.5",
|
||||
"twbs/bootstrap": "~4.3",
|
||||
"bamarni/composer-bin-plugin": "^1.4",
|
||||
"phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.3 || ^9.4",
|
||||
"sass/sass-spec": "*",
|
||||
"squizlabs/php_codesniffer": "~3.5",
|
||||
"symfony/phpunit-bridge": "^5.1",
|
||||
"twbs/bootstrap": "~5.0",
|
||||
"twbs/bootstrap4": "4.6.0",
|
||||
"zurb/foundation": "~6.5"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-iconv": "Can be used as fallback when ext-mbstring is not available",
|
||||
"ext-mbstring": "For best performance, mbstring should be installed as it is faster than ext-iconv"
|
||||
},
|
||||
"bin": [
|
||||
"bin/pscss"
|
||||
],
|
||||
@@ -1685,24 +1861,28 @@
|
||||
"scss",
|
||||
"stylesheet"
|
||||
],
|
||||
"time": "2019-12-12T05:00:52+00:00"
|
||||
"support": {
|
||||
"issues": "https://github.com/scssphp/scssphp/issues",
|
||||
"source": "https://github.com/scssphp/scssphp/tree/v1.6.0"
|
||||
},
|
||||
"time": "2021-07-02T16:28:10+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sergeytsalkov/meekrodb",
|
||||
"version": "v2.3",
|
||||
"version": "v2.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/SergeyTsalkov/meekrodb.git",
|
||||
"reference": "eb36858f1aff94ae1665900e681a1cfb78563ee1"
|
||||
"reference": "e30c240d54bc81f58c58507a9ed768032eb494a5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/SergeyTsalkov/meekrodb/zipball/eb36858f1aff94ae1665900e681a1cfb78563ee1",
|
||||
"reference": "eb36858f1aff94ae1665900e681a1cfb78563ee1",
|
||||
"url": "https://api.github.com/repos/SergeyTsalkov/meekrodb/zipball/e30c240d54bc81f58c58507a9ed768032eb494a5",
|
||||
"reference": "e30c240d54bc81f58c58507a9ed768032eb494a5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.2.0"
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@@ -1728,39 +1908,49 @@
|
||||
"mysqli",
|
||||
"pdo"
|
||||
],
|
||||
"time": "2014-06-16T22:40:22+00:00"
|
||||
"support": {
|
||||
"email": "support@meekro.com",
|
||||
"issues": "https://github.com/SergeyTsalkov/meekrodb/issues",
|
||||
"source": "https://github.com/SergeyTsalkov/meekrodb/tree/v2.4"
|
||||
},
|
||||
"time": "2021-06-29T04:31:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v5.0.8",
|
||||
"version": "v5.3.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935"
|
||||
"reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935",
|
||||
"reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/51b71afd6d2dc8f5063199357b9880cea8d8bfe2",
|
||||
"reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2.5",
|
||||
"php": ">=7.2.5",
|
||||
"symfony/deprecation-contracts": "^2.1",
|
||||
"symfony/polyfill-mbstring": "~1.0",
|
||||
"symfony/polyfill-php73": "^1.8",
|
||||
"symfony/service-contracts": "^1.1|^2"
|
||||
"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"
|
||||
"psr/log-implementation": "1.0|2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"psr/log": "~1.0",
|
||||
"psr/log": "^1|^2",
|
||||
"symfony/config": "^4.4|^5.0",
|
||||
"symfony/dependency-injection": "^4.4|^5.0",
|
||||
"symfony/event-dispatcher": "^4.4|^5.0",
|
||||
@@ -1775,11 +1965,6 @@
|
||||
"symfony/process": ""
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "5.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\Console\\": ""
|
||||
@@ -1802,42 +1987,127 @@
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony Console Component",
|
||||
"description": "Eases the creation of beautiful and testable command line interfaces",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2020-03-30T11:42:42+00:00"
|
||||
"keywords": [
|
||||
"cli",
|
||||
"command line",
|
||||
"console",
|
||||
"terminal"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/console/tree/v5.3.6"
|
||||
},
|
||||
"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-07-27T19:10:22+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/lock",
|
||||
"version": "v4.4.3",
|
||||
"name": "symfony/deprecation-contracts",
|
||||
"version": "v2.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/lock.git",
|
||||
"reference": "6c4f5b620871cfef5b004fc57f2ca74572ae03b3"
|
||||
"url": "https://github.com/symfony/deprecation-contracts.git",
|
||||
"reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/lock/zipball/6c4f5b620871cfef5b004fc57f2ca74572ae03b3",
|
||||
"reference": "6c4f5b620871cfef5b004fc57f2ca74572ae03b3",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
|
||||
"reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1.3",
|
||||
"psr/log": "~1.0"
|
||||
},
|
||||
"conflict": {
|
||||
"doctrine/dbal": "<2.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/dbal": "~2.5",
|
||||
"mongodb/mongodb": "~1.1",
|
||||
"predis/predis": "~1.0"
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.4-dev"
|
||||
"dev-main": "2.4-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/contracts",
|
||||
"url": "https://github.com/symfony/contracts"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"function.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "A generic function and convention to trigger deprecation notices",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.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-03-23T23:28:01+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/lock",
|
||||
"version": "v4.4.27",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/lock.git",
|
||||
"reference": "6ca476d4ac992802f2a4043929f68f1818449486"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/lock/zipball/6ca476d4ac992802f2a4043929f68f1818449486",
|
||||
"reference": "6ca476d4ac992802f2a4043929f68f1818449486",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1.3",
|
||||
"psr/log": "^1|^2|^3",
|
||||
"symfony/polyfill-php80": "^1.16"
|
||||
},
|
||||
"conflict": {
|
||||
"doctrine/dbal": "<2.6"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/dbal": "^2.6|^3.0",
|
||||
"predis/predis": "~1.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\Lock\\": ""
|
||||
@@ -1860,7 +2130,7 @@
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony Lock Component",
|
||||
"description": "Creates and manages locks, a mechanism to provide exclusive access to a shared resource",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"cas",
|
||||
@@ -1870,24 +2140,41 @@
|
||||
"redlock",
|
||||
"semaphore"
|
||||
],
|
||||
"time": "2020-01-04T13:00:46+00:00"
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/lock/tree/v4.4.27"
|
||||
},
|
||||
"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-07-23T15:41:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
"version": "v1.15.0",
|
||||
"version": "v1.23.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||
"reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14"
|
||||
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
|
||||
"reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
||||
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.3"
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-ctype": "For best performance"
|
||||
@@ -1895,7 +2182,11 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.15-dev"
|
||||
"dev-main": "1.23-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1928,24 +2219,293 @@
|
||||
"polyfill",
|
||||
"portable"
|
||||
],
|
||||
"time": "2020-02-27T09:26:54+00:00"
|
||||
"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": "symfony/polyfill-mbstring",
|
||||
"version": "v1.15.0",
|
||||
"name": "symfony/polyfill-intl-grapheme",
|
||||
"version": "v1.23.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac"
|
||||
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
|
||||
"reference": "16880ba9c5ebe3642d1995ab866db29270b36535"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
|
||||
"reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535",
|
||||
"reference": "16880ba9c5ebe3642d1995ab866db29270b36535",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.3"
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-intl": "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\\Intl\\Grapheme\\": ""
|
||||
},
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill for intl's grapheme_* functions",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"grapheme",
|
||||
"intl",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.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"
|
||||
}
|
||||
],
|
||||
"time": "2021-05-27T12:26:48+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-idn",
|
||||
"version": "v1.23.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-idn.git",
|
||||
"reference": "65bd267525e82759e7d8c4e8ceea44f398838e65"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65",
|
||||
"reference": "65bd267525e82759e7d8c4e8ceea44f398838e65",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1",
|
||||
"symfony/polyfill-intl-normalizer": "^1.10",
|
||||
"symfony/polyfill-php72": "^1.10"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-intl": "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\\Intl\\Idn\\": ""
|
||||
},
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Laurent Bassin",
|
||||
"email": "laurent@bassin.info"
|
||||
},
|
||||
{
|
||||
"name": "Trevor Rowbotham",
|
||||
"email": "trevor.rowbotham@pm.me"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-idn/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-05-27T09:27:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-normalizer",
|
||||
"version": "v1.23.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
||||
"reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
|
||||
"reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-intl": "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\\Intl\\Normalizer\\": ""
|
||||
},
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"classmap": [
|
||||
"Resources/stubs"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill for intl's Normalizer class and related functions",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"intl",
|
||||
"normalizer",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/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": "symfony/polyfill-mbstring",
|
||||
"version": "v1.23.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6",
|
||||
"reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "For best performance"
|
||||
@@ -1953,7 +2513,11 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.15-dev"
|
||||
"dev-main": "1.23-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1987,29 +2551,50 @@
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2020-03-09T19:04:49+00:00"
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.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"
|
||||
}
|
||||
],
|
||||
"time": "2021-05-27T12:26:48+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php72",
|
||||
"version": "v1.15.0",
|
||||
"version": "v1.23.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php72.git",
|
||||
"reference": "37b0976c78b94856543260ce09b460a7bc852747"
|
||||
"reference": "9a142215a36a3888e30d0a9eeea9766764e96976"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747",
|
||||
"reference": "37b0976c78b94856543260ce09b460a7bc852747",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976",
|
||||
"reference": "9a142215a36a3888e30d0a9eeea9766764e96976",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.3"
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.15-dev"
|
||||
"dev-main": "1.23-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -2042,29 +2627,50 @@
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2020-02-27T09:26:54+00:00"
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php72/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-05-27T09:17:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php73",
|
||||
"version": "v1.15.0",
|
||||
"version": "v1.23.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php73.git",
|
||||
"reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7"
|
||||
"reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7",
|
||||
"reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010",
|
||||
"reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.3"
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.15-dev"
|
||||
"dev-main": "1.23-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -2100,25 +2706,125 @@
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2020-02-27T09:26:54+00:00"
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php73/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": "symfony/service-contracts",
|
||||
"version": "v2.0.1",
|
||||
"name": "symfony/polyfill-php80",
|
||||
"version": "v1.23.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/service-contracts.git",
|
||||
"reference": "144c5e51266b281231e947b51223ba14acf1a749"
|
||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||
"reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749",
|
||||
"reference": "144c5e51266b281231e947b51223ba14acf1a749",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be",
|
||||
"reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2.5",
|
||||
"psr/container": "^1.0"
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"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\\Php80\\": ""
|
||||
},
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"classmap": [
|
||||
"Resources/stubs"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Ion Bazan",
|
||||
"email": "ion.bazan@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.23.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"
|
||||
}
|
||||
],
|
||||
"time": "2021-07-28T13:41:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/service-contracts",
|
||||
"version": "v2.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/service-contracts.git",
|
||||
"reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
|
||||
"reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"psr/container": "^1.1"
|
||||
},
|
||||
"suggest": {
|
||||
"symfony/service-implementation": ""
|
||||
@@ -2126,7 +2832,11 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.0-dev"
|
||||
"dev-main": "2.4-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/contracts",
|
||||
"url": "https://github.com/symfony/contracts"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -2158,27 +2868,178 @@
|
||||
"interoperability",
|
||||
"standards"
|
||||
],
|
||||
"time": "2019-11-18T17:27:11+00:00"
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/service-contracts/tree/v2.4.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-04-01T10:43:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "vlucas/valitron",
|
||||
"version": "v1.4.7",
|
||||
"name": "symfony/string",
|
||||
"version": "v5.3.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/vlucas/valitron.git",
|
||||
"reference": "a03072bed1679660200766d134507a30193eaf6d"
|
||||
"url": "https://github.com/symfony/string.git",
|
||||
"reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/vlucas/valitron/zipball/a03072bed1679660200766d134507a30193eaf6d",
|
||||
"reference": "a03072bed1679660200766d134507a30193eaf6d",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1",
|
||||
"reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1",
|
||||
"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"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\String\\": ""
|
||||
},
|
||||
"files": [
|
||||
"Resources/functions.php"
|
||||
],
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/string/tree/v5.3.3"
|
||||
},
|
||||
"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-06-27T11:44:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "tysonandre/var_representation_polyfill",
|
||||
"version": "0.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/TysonAndre/var_representation_polyfill.git",
|
||||
"reference": "3f17999ee1f257319ddc6721dd26ebbc5d175f33"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/TysonAndre/var_representation_polyfill/zipball/3f17999ee1f257319ddc6721dd26ebbc5d175f33",
|
||||
"reference": "3f17999ee1f257319ddc6721dd26ebbc5d175f33",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-tokenizer": "*",
|
||||
"php": "^7.2.0|^8.0.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phan/phan": "^4.0",
|
||||
"phpunit/phpunit": "^8.5.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"VarRepresentation\\": "src/VarRepresentation"
|
||||
},
|
||||
"files": [
|
||||
"src/var_representation.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Tyson Andre"
|
||||
}
|
||||
],
|
||||
"description": "Polyfill for var_representation",
|
||||
"keywords": [
|
||||
"var_export",
|
||||
"var_representation"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/TysonAndre/var_representation_polyfill/issues",
|
||||
"source": "https://github.com/TysonAndre/var_representation_polyfill/tree/0.0.2"
|
||||
},
|
||||
"time": "2021-06-26T18:55:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "vlucas/valitron",
|
||||
"version": "v1.4.10",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/vlucas/valitron.git",
|
||||
"reference": "5ebd5d7af82cc0a9d798e816a2ecad63f1b59ceb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/vlucas/valitron/zipball/5ebd5d7af82cc0a9d798e816a2ecad63f1b59ceb",
|
||||
"reference": "5ebd5d7af82cc0a9d798e816a2ecad63f1b59ceb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.8.35 || ^5.5 || ^6.5"
|
||||
"phpunit/phpunit": ">=4.8.35"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "It can support the multiple bytes string length."
|
||||
@@ -2197,43 +3058,59 @@
|
||||
{
|
||||
"name": "Vance Lucas",
|
||||
"email": "vance@vancelucas.com",
|
||||
"homepage": "http://www.vancelucas.com"
|
||||
"homepage": "https://www.vancelucas.com"
|
||||
}
|
||||
],
|
||||
"description": "Simple, elegant, stand-alone validation library with NO dependencies",
|
||||
"homepage": "http://github.com/vlucas/valitron",
|
||||
"homepage": "https://github.com/vlucas/valitron",
|
||||
"keywords": [
|
||||
"valid",
|
||||
"validation",
|
||||
"validator"
|
||||
],
|
||||
"time": "2019-08-29T19:49:43+00:00"
|
||||
"support": {
|
||||
"issues": "https://github.com/vlucas/valitron/issues",
|
||||
"source": "https://github.com/vlucas/valitron/tree/v1.4.10"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/vlucas/valitron",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-07-08T16:18:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "webmozart/assert",
|
||||
"version": "1.8.0",
|
||||
"version": "1.10.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/webmozart/assert.git",
|
||||
"reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6"
|
||||
"url": "https://github.com/webmozarts/assert.git",
|
||||
"reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
|
||||
"reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
|
||||
"url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
|
||||
"reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.3.3 || ^7.0",
|
||||
"php": "^7.2 || ^8.0",
|
||||
"symfony/polyfill-ctype": "^1.8"
|
||||
},
|
||||
"conflict": {
|
||||
"vimeo/psalm": "<3.9.1"
|
||||
"phpstan/phpstan": "<0.12.20",
|
||||
"vimeo/psalm": "<4.6.1 || 4.6.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.8.36 || ^7.5.13"
|
||||
"phpunit/phpunit": "^8.5.13"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.10-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Webmozart\\Assert\\": "src/"
|
||||
@@ -2255,7 +3132,11 @@
|
||||
"check",
|
||||
"validate"
|
||||
],
|
||||
"time": "2020-04-18T12:12:48+00:00"
|
||||
"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": "xemlock/htmlpurifier-html5",
|
||||
@@ -2306,6 +3187,10 @@
|
||||
"validator",
|
||||
"xss"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/xemlock/htmlpurifier-html5/issues",
|
||||
"source": "https://github.com/xemlock/htmlpurifier-html5/tree/master"
|
||||
},
|
||||
"time": "2019-08-07T17:19:21+00:00"
|
||||
}
|
||||
],
|
||||
@@ -2319,5 +3204,6 @@
|
||||
"platform-dev": [],
|
||||
"platform-overrides": {
|
||||
"php": "7.3"
|
||||
}
|
||||
},
|
||||
"plugin-api-version": "2.0.0"
|
||||
}
|
||||
|
||||
@@ -24,3 +24,7 @@ foreach ($db->queryFirstColumn(
|
||||
) as $generalNo) {
|
||||
CheckHall($generalNo);
|
||||
}
|
||||
|
||||
foreach(General::createGeneralObjListFromDB($db->queryFirstColumn('SELECT `no` FROM general WHERE npc = 0')) as $genObj){
|
||||
$genObj->mergeTotalInheritancePoint();
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
$generalID = $session->generalID;
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
$me = General::createGeneralObjFromDB($generalID);
|
||||
|
||||
|
||||
$pointHelpText = [
|
||||
'sum' => '다음 플레이에서 사용할 수 있는 총 포인트입니다.',
|
||||
'new' => '이번 플레이에서 얻은 총 포인트입니다.',
|
||||
'previous' => '이전에 물려받은 포인트입니다.',
|
||||
'lived_month' => '살아남은 기간입니다. (1개월 단위)',
|
||||
'max_belong' => '가장 오래 임관했던 국가의 연도입니다.',
|
||||
'max_domestic_critical' => '성공한 내정 중 최대 연속값입니다.',
|
||||
'snipe_combat' => '유리한 상성을 가지고 전투했습니다.',
|
||||
'combat' => '전투 횟수입니다.',
|
||||
'sabotage' => '계략 성공 횟수입니다.',
|
||||
'unifier' => '천통에 기여한 포인트입니다. <br>각 국의 군주, 천통 수뇌, 천통 군주가 받습니다.',
|
||||
'dex' => '총 숙련도합입니다.',
|
||||
'tournament' => '토너먼트 입상 포인트입니다.',
|
||||
'betting' => '성공적인 베팅을 했습니다. <br>수익율과 베팅 성공 횟수를 따릅니다.',
|
||||
];
|
||||
$items = [];
|
||||
foreach(array_keys(General::INHERITANCE_KEY) as $key){
|
||||
$items[$key] = $me->getInheritancePoint($key)??0;
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title><?= UniqueConst::$serverName ?>: 유산 관리</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=1024" />
|
||||
<?= WebUtil::printCSS('../e_lib/bootstrap.min.css') ?>
|
||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||
<?= WebUtil::printCSS('../css/config.css') ?>
|
||||
<?= WebUtil::printCSS('css/common.css') ?>
|
||||
<?= WebUtil::printCSS('css/inheritPoint.css') ?>
|
||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||
<?= WebUtil::printJS('../e_lib/jquery-3.3.1.min.js') ?>
|
||||
<?= WebUtil::printJS('../e_lib/bootstrap.bundle.min.js') ?>
|
||||
<?= WebUtil::printJS('js/common.js') ?>
|
||||
<?= WebUtil::printJS('js/inheritPoint.js') ?>
|
||||
<script>
|
||||
var items = <?=Json::encode($items)?>;
|
||||
var helpText = <?=Json::encode($pointHelpText)?>;
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body onload="formStart()">
|
||||
|
||||
<table style='width:1000px;margin:auto;' class='tb_layout bg0'>
|
||||
<tr>
|
||||
<td style='text-align:left;'>유산 관리<br><?= backButton() ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="container" class="tb_layout bg0" style="width:1000px;margin:auto;border:solid 1px #888888;">
|
||||
<div id='inheritance_list'>
|
||||
<div id="inherit_sum" class='inherit_item'>
|
||||
<div class="row">
|
||||
<label id="inherit_sum_head" class='inherit_head col-sm-6 col-form-label'>총 포인트</label>
|
||||
<div class="col-sm-6">
|
||||
<input type="text" class="form-control inherit_value" readonly id="inherit_sum_value" value="">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="text-align:right">
|
||||
<small class="form-text text-muted"></small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="inherit_previous" class='inherit_item'>
|
||||
<div class="row">
|
||||
<label id="inherit_sum_head" class='inherit_head col-sm-6 col-form-label'>기존 포인트</label>
|
||||
<div class="col-sm-6">
|
||||
<input type="text" class="form-control inherit_value" readonly id="inherit_previous_value" value="">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="text-align:right">
|
||||
<small class="form-text text-muted"></small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="inherit_new" class='inherit_item'>
|
||||
<div class="row">
|
||||
<label id="inherit_sum_head" class='inherit_head col-sm-6 col-form-label'>신규 포인트</label>
|
||||
<div class="col-sm-6">
|
||||
<input type="text" class="form-control inherit_value" readonly id="inherit_new_value" value="">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="text-align:right">
|
||||
<small class="form-text text-muted"></small>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:100%; padding:0 10px"><hr style="border-top:1px solid #888888;"></div>
|
||||
<?php foreach (General::INHERITANCE_KEY as $key => [$type, $multiplier, $name]) : ?>
|
||||
<?php if ($key == 'previous') {
|
||||
continue;
|
||||
} ?>
|
||||
<div id="inherit_<?= $key ?>" class='inherit_item inherit_template_item'>
|
||||
<div class="row">
|
||||
<label id="inherit_<?= $key ?>_head" class='inherit_head col-sm-6 col-form-label'><?= $name ?></label>
|
||||
<div class="col-sm-6">
|
||||
<input type="text" class="form-control inherit_value" readonly id="inherit_<?= $key ?>_value" value="">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="text-align:right">
|
||||
<small class="form-text text-muted"></small>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -91,6 +91,7 @@ $zeroPolicy = new AutorunNationPolicy($general, ($gameStor->autorun_user)['optio
|
||||
var availableGeneralActionPriorityItems = <?= Json::encode(AutorunGeneralPolicy::$default_priority) ?>;
|
||||
|
||||
var btnHelpMessage = {
|
||||
'불가침제의': '군주가 NPC이고, 타국에서 원조를 받았을 때,<br>세입(금/쌀) 대비 원조량에 따라 불가침제의를 합니다.',
|
||||
'선전포고': '군주가 NPC이고, 전쟁중이 아닐 때,<br>주변국중 하나를 골라 선포합니다.<br><br>선포 시점은 다음을 참고합니다.<br>- 인구율<br>- 도시내정률<br>- NPC전투장권장 금 충족률<br>- NPC전투장권장 쌀 충족률<br><br>국력이 낮은 국가를 조금 더 선호합니다.',
|
||||
'천도': '인구가 많은 곳을 찾아 천도를 시도합니다.<br>영토의 가운데를 선호합니다.<br><br>도시 인구가 충분하다면, 굳이 천도하지는 않습니다.',
|
||||
'유저장긴급포상': '금/쌀이 부족한 유저전투장에게 긴급하게 포상합니다.<br>국고가 권장량보다 적어지더라도 시도합니다.',
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
#inheritance_list{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.inherit_padding{
|
||||
width: 33%;
|
||||
padding: 10px 2px;
|
||||
}
|
||||
|
||||
.inherit_item{
|
||||
width: 33%;
|
||||
padding: 10px 2px;
|
||||
}
|
||||
|
||||
.col-form-label{
|
||||
text-align:right;
|
||||
padding-right:2ch;
|
||||
}
|
||||
|
||||
.inherit_value{
|
||||
text-align: right;
|
||||
}
|
||||
+10
-1
@@ -1566,6 +1566,9 @@ function giveRandomUniqueItem(General $general, string $acquireType): bool
|
||||
continue;
|
||||
}
|
||||
foreach ($itemCategories as $itemCode => $cnt) {
|
||||
if($cnt == 0){
|
||||
continue;
|
||||
}
|
||||
if (!key_exists($itemCode, $occupiedUnique)) {
|
||||
$availableUnique[] = [[$itemType, $itemCode], $cnt];
|
||||
continue;
|
||||
@@ -1704,7 +1707,7 @@ function deleteNation(General $lord, bool $applyDB):array
|
||||
$nationID,
|
||||
$lordID
|
||||
),
|
||||
['npc', 'gold', 'rice', 'experience', 'explevel', 'dedication', 'dedlevel', 'aux'], 1
|
||||
['npc', 'gold', 'rice', 'experience', 'explevel', 'dedication', 'dedlevel', 'belong', 'aux'], 1
|
||||
);
|
||||
$nationGeneralList[$lordID] = $lord;
|
||||
|
||||
@@ -1721,6 +1724,12 @@ function deleteNation(General $lord, bool $applyDB):array
|
||||
|
||||
// 전 장수 재야로
|
||||
foreach($nationGeneralList as $general){
|
||||
$general->setAuxVar('max_belong',
|
||||
max(
|
||||
$general->getVar('belong'),
|
||||
$general->getAuxVar('max_belong')??0
|
||||
)
|
||||
);
|
||||
$general->setVar('belong', 0);
|
||||
$general->setVar('troop', 0);
|
||||
$general->setVar('officer_level', 0);
|
||||
|
||||
+42
-3
@@ -623,10 +623,14 @@ function updateNationState()
|
||||
$nation['nation'],
|
||||
$targetKillTurn
|
||||
);
|
||||
$nationGenList = General::createGeneralObjListFromDB($nationGenIDList, ['belong'], 2);
|
||||
$nationGenList = General::createGeneralObjListFromDB($nationGenIDList, ['belong', 'npc'], 2);
|
||||
$chiefObj = null;
|
||||
|
||||
$uniqueLotteryWeightList = [];
|
||||
foreach ($nationGenList as $nationGen) {
|
||||
if ($nationGen->getVar('officer_level') == 12) {
|
||||
$chiefObj = $nationGen;
|
||||
}
|
||||
$trialCnt = count(GameConst::$allItems);
|
||||
|
||||
foreach ($nationGen->getItems() as $item) {
|
||||
@@ -642,9 +646,9 @@ function updateNationState()
|
||||
$score = $nationGen->getVar('belong') + 5;
|
||||
|
||||
if ($nationGen->getVar('officer_level') == 12) {
|
||||
$score += 200; //NOTE: 꼬우면 군주하세요.
|
||||
$score += 100; //NOTE: 꼬우면 군주하세요.
|
||||
} else if ($nationGen->getVar('officer_level') == 11) {
|
||||
$score += 70;
|
||||
$score += 50;
|
||||
} else if ($nationGen->getVar('officer_level') > 4) {
|
||||
$score += 35;
|
||||
}
|
||||
@@ -665,6 +669,10 @@ function updateNationState()
|
||||
giveRandomUniqueItem($winnerObj, '작위보상');
|
||||
$winnerObj->applyDB($db);
|
||||
}
|
||||
|
||||
if($chiefObj){
|
||||
$chiefObj->increaseInheritancePoint('unifier', 250 * $levelDiff);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -982,6 +990,15 @@ function checkEmperior()
|
||||
$nationLogger = new ActionLogger(0, $nationID, $admin['year'], $admin['month']);
|
||||
$nationLogger->pushNationalHistoryLog("<D><b>{$nationName}</b></>{$josaYi} 전토를 통일");
|
||||
|
||||
foreach(General::createGeneralObjListFromDB($db->queryFirstColumn('SELECT `no` FROM general WHERE npc = 0')) as $genObj){
|
||||
if($genObj->getNationID() == $nationID){
|
||||
if($genObj->getVar('officer_level') > 4){
|
||||
$genObj->increaseInheritancePoint('unifier', 2000);
|
||||
};
|
||||
}
|
||||
$genObj->mergeTotalInheritancePoint();
|
||||
}
|
||||
|
||||
$gameStor->isunited = 2;
|
||||
$gameStor->conlimit = $gameStor->conlimit * 100;
|
||||
|
||||
@@ -1132,3 +1149,25 @@ function checkEmperior()
|
||||
//연감 월결산
|
||||
LogHistory();
|
||||
}
|
||||
|
||||
function resetInheritanceUser(int $userID){
|
||||
$inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$userID}");
|
||||
$totalPoint = 0;
|
||||
foreach($inheritStor->getAll() as [$value,]){
|
||||
$totalPoint += $value;
|
||||
}
|
||||
$totalPoint = Util::toInt($totalPoint);
|
||||
$inheritStor->resetValues();
|
||||
$inheritStor->setValue('previous', [$totalPoint, null]);
|
||||
}
|
||||
|
||||
function updateMaxDomesticCritical(General $general, $score){
|
||||
$maxDomesticCritical = $general->getAuxVar('max_domestic_critical')??0;
|
||||
$maxDomesticCritical += $score / 2;
|
||||
$general->setAuxVar('max_domestic_critical', $maxDomesticCritical);
|
||||
|
||||
$oldMaxDomesticCritical = $general->getInheritancePoint('max_domestic_critical');
|
||||
if($maxDomesticCritical > $oldMaxDomesticCritical){
|
||||
$general->setInheritancePoint('max_domestic_critical', $maxDomesticCritical);
|
||||
}
|
||||
}
|
||||
+11
-6
@@ -689,7 +689,8 @@ function setGift($tnmt_type, $tnmt, $phase) {
|
||||
'grp_no'=>$general['grp_no'],
|
||||
'reward'=>$cost,
|
||||
'msg'=>"<span class='ev_highlight'>16강 진출</span>",
|
||||
'logger'=>$logger
|
||||
'logger'=>$logger,
|
||||
'inheritance_point'=>10,
|
||||
];
|
||||
}
|
||||
//8강자 명성 돈
|
||||
@@ -723,6 +724,7 @@ function setGift($tnmt_type, $tnmt, $phase) {
|
||||
//포상 장수 이름, 금액
|
||||
$resultHelper[$generalID]['reward'] += $cost;
|
||||
$resultHelper[$generalID]['msg'] = "<span class='ev_highlight'>4강 진출</span>";
|
||||
General::createGeneralObjFromDB($generalID)->increaseInheritancePoint('tournament', 10);
|
||||
}
|
||||
//결승자 명성 돈
|
||||
$cost = $admin['develcost'] * 6;
|
||||
@@ -739,6 +741,7 @@ function setGift($tnmt_type, $tnmt, $phase) {
|
||||
//포상 장수 이름, 금액
|
||||
$resultHelper[$generalID]['reward'] += $cost;
|
||||
$resultHelper[$generalID]['msg'] = "<span class='ev_highlight'>준우승</span>으";
|
||||
$resultHelper[$generalID]['inheritance_point'] = 50;
|
||||
if($general['lose'] > 0){
|
||||
$runnerUp = $general;
|
||||
}
|
||||
@@ -761,6 +764,7 @@ function setGift($tnmt_type, $tnmt, $phase) {
|
||||
//포상 장수 이름, 금액
|
||||
$resultHelper[$generalID]['reward'] += $cost;
|
||||
$resultHelper[$generalID]['msg'] = "<span class='ev_highlight'>우승</span>으";
|
||||
$resultHelper[$generalID]['inheritance_point'] = 100;
|
||||
$winner = $general;
|
||||
}
|
||||
|
||||
@@ -775,9 +779,6 @@ function setGift($tnmt_type, $tnmt, $phase) {
|
||||
$runnerUpLogger = $resultHelper[$runnerUp['no']]['logger'];
|
||||
$runnerUpLogger->pushGeneralHistoryLog("<C>{$tp}</> 대회에서 준우승");
|
||||
|
||||
|
||||
|
||||
|
||||
$winnerRewardText = number_format($resultHelper[$winner['no']]['reward']);
|
||||
$runnerUpRewardText = number_format($resultHelper[$runnerUp['no']]['reward']);
|
||||
|
||||
@@ -786,12 +787,16 @@ function setGift($tnmt_type, $tnmt, $phase) {
|
||||
|
||||
$winnerLogger->pushGlobalHistoryLog("<C>{$tp}</> 대회에서 <Y>{$winner['name']}</>{$josaYiWinner} <C>우승</>, <Y>{$runnerUp['name']}</>{$josaYiRunnerUp} <C>준우승</>을 차지하여 천하에 이름을 떨칩니다!", ActionLogger::EVENT_YEAR_MONTH);
|
||||
$winnerLogger->pushGlobalHistoryLog("<C>{$tp}</> 대회의 <S>우승자</>에게는 <C>{$winnerRewardText}</>, <S>준우승자</>에겐 <C>{$runnerUpRewardText}</>의 <S>상금</>과 약간의 <S>명성</>이 주어집니다!", ActionLogger::EVENT_YEAR_MONTH);
|
||||
|
||||
foreach($resultHelper as $general){
|
||||
|
||||
$generalObjList = General::createGeneralObjListFromDB(array_keys($resultHelper));
|
||||
|
||||
foreach($resultHelper as $generalID=>$general){
|
||||
$rewardText = number_format($general['reward']);
|
||||
/** @var ActionLogger */
|
||||
$logger = $general['logger'];
|
||||
$logger->pushGeneralActionLog("<C>{$tp}</> 대회의 {$general['msg']}로 <C>{$rewardText}</>의 <S>상금</>, 약간의 <S>명성</> 획득!", ActionLogger::EVENT_PLAIN);
|
||||
//TODO: 토너먼트의 다른 값이 모두 sql에 직접 입력하므로 기반을 바꿔야함.
|
||||
$generalObjList[$generalID]->increaseInheritancePoint('tournament', $general['inheritance_point']);
|
||||
}
|
||||
|
||||
//우승자 번호
|
||||
|
||||
@@ -140,6 +140,7 @@ if(!$v->validate()){
|
||||
'reason'=>'[출병자]'.$v->errorStr()
|
||||
]);
|
||||
}
|
||||
$rawAttacker['owner'] = 0;
|
||||
|
||||
$defenderList = [];
|
||||
foreach($rawDefenderList as $idx=>$rawDefenderGeneral){
|
||||
@@ -152,6 +153,7 @@ foreach($rawDefenderList as $idx=>$rawDefenderGeneral){
|
||||
'reason'=>"[수비자{$idx}]".$v->errorStr()
|
||||
]);
|
||||
}
|
||||
$rawDefenderGeneral['owner'] = 0;
|
||||
|
||||
$defenderList[] = new General($rawDefenderGeneral, extractRankVar($rawDefenderGeneral), $rawDefenderCity, $rawAttackerNation, $year, $month, true);
|
||||
}
|
||||
|
||||
@@ -266,6 +266,8 @@ foreach(Util::range(GameConst::$maxTurn) as $turnIdx){
|
||||
}
|
||||
$db->insert('general_turn', $turnRows);
|
||||
|
||||
resetInheritanceUser($userID);
|
||||
|
||||
$rank_data = [];
|
||||
foreach(array_keys(General::RANK_COLUMN) as $rankColumn){
|
||||
$rank_data[] = [
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,8 @@
|
||||
/**
|
||||
* @license
|
||||
* Lodash <https://lodash.com/>
|
||||
* Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
|
||||
* Released under MIT license <https://lodash.com/license>
|
||||
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
|
||||
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
||||
*/
|
||||
File diff suppressed because one or more lines are too long
+10
-1
@@ -261,6 +261,15 @@ function processWar_NG(
|
||||
|
||||
$attacker->addTrain(1);
|
||||
$defender->addTrain(1);
|
||||
|
||||
$attackerCrewTypeCoef = $attacker->getCrewType()->getAttackCoef($defender->getCrewType()) * $defender->getCrewType()->getDefenceCoef($attacker->getCrewType());
|
||||
$defenderCrewTypeCoef = $defender->getCrewType()->getAttackCoef($attacker->getCrewType()) * $attacker->getCrewType()->getDefenceCoef($defender->getCrewType());
|
||||
if($attackerCrewTypeCoef > $defenderCrewTypeCoef && $attacker instanceof WarUnitGeneral){
|
||||
$attacker->getGeneral()->increaseInheritancePoint('snipe_combat', 1);
|
||||
}
|
||||
if($defenderCrewTypeCoef > $attackerCrewTypeCoef && $defender instanceof WarUnitGeneral){
|
||||
$defender->getGeneral()->increaseInheritancePoint('snipe_combat', 1);
|
||||
}
|
||||
|
||||
$attackerName = $attacker->getName();
|
||||
$attackerCrewTypeName = $attacker->getCrewTypeName();
|
||||
@@ -522,7 +531,7 @@ function ConquerCity(array $admin, General $general, array $city) {
|
||||
|
||||
$lord = new General($db->queryFirstRow(
|
||||
'SELECT %l FROM general WHERE nation = %i AND officer_level = %i LIMIT 1',
|
||||
Util::formatListOfBackticks(General::mergeQueryColumn(['npc', 'gold', 'rice', 'experience', 'explevel', 'dedication', 'dedlevel', 'aux'], 1)[0]),
|
||||
Util::formatListOfBackticks(General::mergeQueryColumn(['npc', 'gold', 'rice', 'experience', 'explevel', 'belong', 'dedication', 'dedlevel', 'aux'], 1)[0]),
|
||||
$defenderNationID,
|
||||
12
|
||||
), null, $city, $loseNation, $year, $month, false);
|
||||
|
||||
@@ -14,6 +14,7 @@ class che_명마_07_기주마 extends \sammo\BaseStatItem{
|
||||
}
|
||||
|
||||
public function onCalcStat(General $general, string $statName, $value, $aux=null){
|
||||
$value = parent::onCalcStat($general, $statName, $value, $aux);
|
||||
if($statName === 'initWarPhase'){
|
||||
return $value + 1;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ class che_서적_01_효경전 extends \sammo\BaseStatItem{
|
||||
}
|
||||
|
||||
public function onCalcStat(General $general, string $statName, $value, $aux=null){
|
||||
$value = parent::onCalcStat($general, $statName, $value, $aux);
|
||||
if($statName === 'warMagicTrialProb'){
|
||||
return $value + 0.01;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ class che_서적_02_회남자 extends \sammo\BaseStatItem{
|
||||
}
|
||||
|
||||
public function onCalcStat(General $general, string $statName, $value, $aux=null){
|
||||
$value = parent::onCalcStat($general, $statName, $value, $aux);
|
||||
if($statName === 'warMagicTrialProb'){
|
||||
return $value + 0.01;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ class che_서적_03_변도론 extends \sammo\BaseStatItem{
|
||||
}
|
||||
|
||||
public function onCalcStat(General $general, string $statName, $value, $aux=null){
|
||||
$value = parent::onCalcStat($general, $statName, $value, $aux);
|
||||
if($statName === 'warMagicTrialProb'){
|
||||
return $value + 0.02;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ class che_서적_04_건상역주 extends \sammo\BaseStatItem{
|
||||
}
|
||||
|
||||
public function onCalcStat(General $general, string $statName, $value, $aux=null){
|
||||
$value = parent::onCalcStat($general, $statName, $value, $aux);
|
||||
if($statName === 'warMagicTrialProb'){
|
||||
return $value + 0.02;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ class che_서적_05_여씨춘추 extends \sammo\BaseStatItem{
|
||||
}
|
||||
|
||||
public function onCalcStat(General $general, string $statName, $value, $aux=null){
|
||||
$value = parent::onCalcStat($general, $statName, $value, $aux);
|
||||
if($statName === 'warMagicTrialProb'){
|
||||
return $value + 0.03;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ class che_서적_06_사민월령 extends \sammo\BaseStatItem{
|
||||
}
|
||||
|
||||
public function onCalcStat(General $general, string $statName, $value, $aux=null){
|
||||
$value = parent::onCalcStat($general, $statName, $value, $aux);
|
||||
if($statName === 'warMagicTrialProb'){
|
||||
return $value + 0.03;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ class che_서적_07_위료자 extends \sammo\BaseStatItem{
|
||||
}
|
||||
|
||||
public function onCalcStat(General $general, string $statName, $value, $aux=null){
|
||||
$value = parent::onCalcStat($general, $statName, $value, $aux);
|
||||
if($statName === 'warMagicTrialProb'){
|
||||
return $value + 0.2;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ class che_서적_08_전론 extends \sammo\BaseStatItem{
|
||||
}
|
||||
|
||||
public function onCalcStat(General $general, string $statName, $value, $aux=null){
|
||||
$value = parent::onCalcStat($general, $statName, $value, $aux);
|
||||
if($statName === 'warMagicSuccessDamage'){
|
||||
return $value * 1.2;
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ class AutorunNationPolicy {
|
||||
static $NPC몰수 = 'NPC몰수';
|
||||
|
||||
// 군주 행동
|
||||
static $불가침제의 = '불가침제의';
|
||||
static $선전포고 = '선전포고';
|
||||
static $천도 = '천도';
|
||||
|
||||
@@ -35,6 +36,7 @@ class AutorunNationPolicy {
|
||||
|
||||
//실제 행동
|
||||
static public $defaultPriority = [
|
||||
'불가침제의',
|
||||
'선전포고',
|
||||
'천도',
|
||||
|
||||
@@ -106,6 +108,7 @@ class AutorunNationPolicy {
|
||||
public $canNPC포상 = true;
|
||||
public $canNPC몰수 = true;
|
||||
|
||||
public $can불가침제의 = true;
|
||||
public $can선전포고 = true;
|
||||
public $can천도 = true;
|
||||
|
||||
|
||||
@@ -14,7 +14,8 @@ use function sammo\{
|
||||
getDomesticExpLevelBonus,
|
||||
CriticalRatioDomestic,
|
||||
CriticalScoreEx,
|
||||
tryUniqueItemLottery
|
||||
tryUniqueItemLottery,
|
||||
updateMaxDomesticCritical
|
||||
};
|
||||
|
||||
use \sammo\Constraint\Constraint;
|
||||
@@ -93,6 +94,13 @@ class che_기술연구 extends che_상업투자{
|
||||
$exp = $score * 0.7;
|
||||
$ded = $score * 1.0;
|
||||
|
||||
if($pick == 'success'){
|
||||
updateMaxDomesticCritical($general, $score);
|
||||
}
|
||||
else{
|
||||
$general->setAuxVar('max_domestic_critical', 0);
|
||||
}
|
||||
|
||||
$scoreText = number_format($score, 0);
|
||||
|
||||
$josaUl = JosaUtil::pick(static::$actionName, '을');
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\Command\General;
|
||||
|
||||
use \sammo\{
|
||||
DB, Util, JosaUtil, TimeUtil, Json,
|
||||
General,
|
||||
ActionLogger,
|
||||
GameConst, GameUnitConst,
|
||||
LastTurn,
|
||||
Command
|
||||
};
|
||||
use \sammo\DB;
|
||||
use \sammo\Util;
|
||||
use \sammo\JosaUtil;
|
||||
use \sammo\TimeUtil;
|
||||
use \sammo\Json;
|
||||
use \sammo\General;
|
||||
use \sammo\ActionLogger;
|
||||
use \sammo\GameConst;
|
||||
use \sammo\GameUnitConst;
|
||||
use \sammo\LastTurn;
|
||||
use \sammo\Command;
|
||||
|
||||
|
||||
use function \sammo\{
|
||||
tryUniqueItemLottery,
|
||||
getInvitationList,
|
||||
getNationStaticInfo
|
||||
};
|
||||
use function \sammo\tryUniqueItemLottery;
|
||||
use function \sammo\getInvitationList;
|
||||
use function \sammo\getNationStaticInfo;
|
||||
|
||||
use \sammo\Constraint\Constraint;
|
||||
use \sammo\Constraint\ConstraintHelper;
|
||||
@@ -24,10 +25,12 @@ use sammo\MustNotBeReachedException;
|
||||
|
||||
|
||||
|
||||
class che_랜덤임관 extends Command\GeneralCommand{
|
||||
class che_랜덤임관 extends Command\GeneralCommand
|
||||
{
|
||||
static protected $actionName = '랜덤임관';
|
||||
|
||||
protected function argTest():bool{
|
||||
protected function argTest(): bool
|
||||
{
|
||||
$this->arg = null;
|
||||
return true;
|
||||
|
||||
@@ -71,7 +74,7 @@ class che_랜덤임관 extends Command\GeneralCommand{
|
||||
|
||||
$relYear = $env['year'] - $env['startyear'];
|
||||
|
||||
$this->fullConditionConstraints=[
|
||||
$this->fullConditionConstraints = [
|
||||
ConstraintHelper::BeNeutral(),
|
||||
ConstraintHelper::AllowJoinAction(),
|
||||
];
|
||||
@@ -83,28 +86,34 @@ class che_랜덤임관 extends Command\GeneralCommand{
|
||||
*/
|
||||
}
|
||||
|
||||
public function getCommandDetailTitle():string{
|
||||
public function getCommandDetailTitle(): string
|
||||
{
|
||||
return '무작위 국가로 임관';
|
||||
}
|
||||
|
||||
public function getBrief():string{
|
||||
public function getBrief(): string
|
||||
{
|
||||
return '무작위 국가로 임관';
|
||||
}
|
||||
|
||||
public function getCost():array{
|
||||
public function getCost(): array
|
||||
{
|
||||
return [0, 0];
|
||||
}
|
||||
|
||||
public function getPreReqTurn():int{
|
||||
|
||||
public function getPreReqTurn(): int
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function getPostReqTurn():int{
|
||||
public function getPostReqTurn(): int
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function run():bool{
|
||||
if(!$this->hasFullConditionMet()){
|
||||
public function run(): bool
|
||||
{
|
||||
if (!$this->hasFullConditionMet()) {
|
||||
throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
|
||||
}
|
||||
|
||||
@@ -126,108 +135,107 @@ class che_랜덤임관 extends Command\GeneralCommand{
|
||||
$destNation = null;
|
||||
|
||||
if ($general->getNPCType() >= 2 && !$env['fiction'] && 1000 <= $env['scenario'] && $env['scenario'] < 2000) {
|
||||
if($notIn){
|
||||
if ($notIn) {
|
||||
$nations = $db->query(
|
||||
'SELECT nation.`name` as `name`,nation.nation as nation,scout,gennum,`affinity` FROM nation join general on general.nation = nation.nation and general.officer_level = 12 WHERE scout=0 and gennum<%i and nation.nation not in %li',
|
||||
$relYear<3?GameConst::$initialNationGenLimit:GameConst::$defaultMaxGeneral,
|
||||
$relYear < 3 ? GameConst::$initialNationGenLimit : GameConst::$defaultMaxGeneral,
|
||||
$notIn
|
||||
);
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
$nations = $db->query(
|
||||
'SELECT nation.`name` as `name`,nation.nation as nation,scout,gennum,`affinity` FROM nation join general on general.nation = nation.nation and general.officer_level = 12 WHERE scout=0 and gennum<%i',
|
||||
$relYear<3?GameConst::$initialNationGenLimit:GameConst::$defaultMaxGeneral
|
||||
$relYear < 3 ? GameConst::$initialNationGenLimit : GameConst::$defaultMaxGeneral
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
shuffle($nations);
|
||||
|
||||
$allGen = Util::arraySum($nations, 'gennum');
|
||||
|
||||
$maxScore = 1<<30;
|
||||
|
||||
$maxScore = 1 << 30;
|
||||
|
||||
$affinity = $general->getVar('affinity');
|
||||
|
||||
foreach($nations as $testNation){
|
||||
|
||||
foreach ($nations as $testNation) {
|
||||
$affinity = abs($affinity - $testNation['affinity']);
|
||||
$affinity = min($affinity, abs($affinity - 150));
|
||||
|
||||
$score = log($affinity + 1, 2);//0~
|
||||
|
||||
|
||||
$score = log($affinity + 1, 2); //0~
|
||||
|
||||
//쉐킷쉐킷
|
||||
$score += Util::randF();
|
||||
|
||||
$score += sqrt($testNation['gennum']/$allGen);
|
||||
|
||||
if($score < $maxScore){
|
||||
|
||||
$score += sqrt($testNation['gennum'] / $allGen);
|
||||
|
||||
if ($score < $maxScore) {
|
||||
$maxScore = $score;
|
||||
$destNation = $testNation;
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
$onlyRandom = $env['join_mode'] == 'onlyRandom';
|
||||
$genLimit = GameConst::$defaultMaxGeneral;
|
||||
if($onlyRandom && TimeUtil::IsRangeMonth($env['init_year'], $env['init_month'], 1, $env['year'], $env['month'])){
|
||||
if ($onlyRandom && TimeUtil::IsRangeMonth($env['init_year'], $env['init_month'], 1, $env['year'], $env['month'])) {
|
||||
$genLimit = GameConst::$initialNationGenLimitForRandInit;
|
||||
}
|
||||
else if($relYear < 3){
|
||||
} else if ($relYear < 3) {
|
||||
$genLimit = GameConst::$initialNationGenLimit;
|
||||
}
|
||||
|
||||
$generalsCnt = [];
|
||||
if($notIn){
|
||||
if ($notIn) {
|
||||
$rawGeneralsCnt = $db->query(
|
||||
'SELECT general.nation as nation, nation.gennum, nation.name, npc, count(*) as cnt FROM general JOIN nation ON general.nation = nation.nation WHERE npc < 4 AND nation.gennum < %i AND nation.scout=0 AND nation.nation NOT IN %li GROUP BY general.nation, general.npc',
|
||||
'SELECT general.nation as nation, nation.gennum, nation.name, npc, count(*) as cnt FROM general JOIN nation ON general.nation = nation.nation WHERE npc != 9 AND nation.gennum < %i AND nation.scout=0 AND nation.nation NOT IN %li GROUP BY general.nation, general.npc',
|
||||
$genLimit,
|
||||
$notIn
|
||||
);
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
$rawGeneralsCnt = $db->query(
|
||||
'SELECT general.nation as nation, nation.gennum, nation.name, npc, count(*) as cnt FROM general JOIN nation ON general.nation = nation.nation WHERE npc < 4 AND nation.gennum < %i AND nation.scout=0 GROUP BY general.nation, general.npc',
|
||||
'SELECT general.nation as nation, nation.gennum, nation.name, npc, count(*) as cnt FROM general JOIN nation ON general.nation = nation.nation WHERE npc != 9 AND nation.gennum < %i AND nation.scout=0 GROUP BY general.nation, general.npc',
|
||||
$genLimit
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
foreach($rawGeneralsCnt as $nation){
|
||||
|
||||
foreach ($rawGeneralsCnt as $nation) {
|
||||
$nationID = $nation['nation'];
|
||||
if(!\key_exists($nationID, $generalsCnt)){
|
||||
if (!\key_exists($nationID, $generalsCnt)) {
|
||||
$generalsCnt[$nationID] = [
|
||||
'nation'=>$nationID,
|
||||
'gennum'=>$nation['gennum'],
|
||||
'name'=>$nation['name'],
|
||||
'cnt'=>0,
|
||||
'nation' => $nationID,
|
||||
'gennum' => $nation['gennum'],
|
||||
'name' => $nation['name'],
|
||||
'cnt' => 0,
|
||||
];
|
||||
$generalsCnt[$nationID]['cnt'] = 0;
|
||||
}
|
||||
|
||||
if($nation['npc'] <= 2){
|
||||
|
||||
if ($nation['npc'] <= 2) {
|
||||
$calcCnt = $nation['cnt'];
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
$calcCnt = $nation['cnt'] / 2;
|
||||
}
|
||||
|
||||
if ($general->getNPCType() < 2 && Util::starts_with($nation['name'], 'ⓤ')) {
|
||||
$calcCnt *= 100;
|
||||
}
|
||||
|
||||
$generalsCnt[$nationID]['cnt'] += $calcCnt;
|
||||
}
|
||||
|
||||
$randVals = [];
|
||||
foreach($generalsCnt as $testNation){
|
||||
$randVals[] = [$testNation, 1/$testNation['cnt']];
|
||||
foreach ($generalsCnt as $testNation) {
|
||||
$randVals[] = [$testNation, 1 / $testNation['cnt']];
|
||||
}
|
||||
|
||||
if($randVals){
|
||||
if ($randVals) {
|
||||
$destNation = Util::choiceRandomUsingWeightPair($randVals);
|
||||
}
|
||||
}
|
||||
|
||||
$logger = $general->getLogger();
|
||||
|
||||
if(!$destNation){
|
||||
if (!$destNation) {
|
||||
//임관 가능한 국가가 없다!
|
||||
$logger->pushGeneralActionLog("임관 가능한 국가가 없습니다. <1>$date</>");
|
||||
$logger->pushGeneralActionLog("임관 가능한 국가가 없습니다. <1>$date</>");
|
||||
$this->alternative = new che_요양($general, $this->env, null);
|
||||
return false;
|
||||
}
|
||||
@@ -236,7 +244,7 @@ class che_랜덤임관 extends Command\GeneralCommand{
|
||||
$destNationID = $destNation['nation'];
|
||||
$destNationName = $destNation['name'];
|
||||
|
||||
|
||||
|
||||
|
||||
$talkList = [
|
||||
'어쩌다 보니',
|
||||
@@ -257,10 +265,9 @@ class che_랜덤임관 extends Command\GeneralCommand{
|
||||
$logger->pushGeneralHistoryLog("<D><b>{$destNationName}</b></>에 랜덤 임관");
|
||||
$logger->pushGlobalActionLog("<Y>{$generalName}</>{$josaYi} {$randomTalk} <D><b>{$destNationName}</b></>에 <S>임관</>했습니다.");
|
||||
|
||||
if($gennum < GameConst::$initialNationGenLimit) {
|
||||
if ($gennum < GameConst::$initialNationGenLimit) {
|
||||
$exp = 700;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$exp = 100;
|
||||
}
|
||||
|
||||
@@ -268,22 +275,21 @@ class che_랜덤임관 extends Command\GeneralCommand{
|
||||
$general->setVar('officer_level', 1);
|
||||
$general->setVar('officer_city', 0);
|
||||
$general->setVar('belong', 1);
|
||||
|
||||
if($this->destGeneralObj !== null){
|
||||
|
||||
if ($this->destGeneralObj !== null) {
|
||||
$general->setVar('city', $this->destGeneralObj->getCityID());
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
$targetCityID = $db->queryFirstField('SELECT city FROM general WHERE nation = %i AND officer_level=12', $destNationID);
|
||||
$general->setVar('city', $targetCityID);
|
||||
}
|
||||
|
||||
$db->update('nation', [
|
||||
'gennum'=>$db->sqleval('gennum + 1')
|
||||
'gennum' => $db->sqleval('gennum + 1')
|
||||
], 'nation=%i', $destNationID);
|
||||
|
||||
$relYear = $env['year'] - $env['startyear'];
|
||||
if($general->getNPCType() == 1 || $relYear >= 3){
|
||||
$joinedNations = $general->getAuxVar('joinedNations')??[];
|
||||
if ($general->getNPCType() == 1 || $relYear >= 3) {
|
||||
$joinedNations = $general->getAuxVar('joinedNations') ?? [];
|
||||
$joinedNations[] = $destNationID;
|
||||
$general->setAuxVar('joinedNations', $joinedNations);
|
||||
}
|
||||
@@ -296,5 +302,4 @@ class che_랜덤임관 extends Command\GeneralCommand{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,8 @@ use function \sammo\{
|
||||
getDomesticExpLevelBonus,
|
||||
CriticalRatioDomestic,
|
||||
CriticalScoreEx,
|
||||
tryUniqueItemLottery
|
||||
tryUniqueItemLottery,
|
||||
updateMaxDomesticCritical
|
||||
};
|
||||
|
||||
use \sammo\Constraint\Constraint;
|
||||
@@ -165,6 +166,13 @@ class che_상업투자 extends Command\GeneralCommand{
|
||||
$exp = $score * 0.7;
|
||||
$ded = $score * 1.0;
|
||||
|
||||
if($pick == 'success'){
|
||||
updateMaxDomesticCritical($general, $score);
|
||||
}
|
||||
else{
|
||||
$general->setAuxVar('max_domestic_critical', 0);
|
||||
}
|
||||
|
||||
$scoreText = number_format($score, 0);
|
||||
|
||||
$josaUl = JosaUtil::pick(static::$actionName, '을');
|
||||
@@ -203,6 +211,4 @@ class che_상업투자 extends Command\GeneralCommand{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -202,6 +202,8 @@ class che_임관 extends Command\GeneralCommand{
|
||||
$nationList[$nationID]['scoutmsg'] = $scoutMsg;
|
||||
}
|
||||
|
||||
$hiddenItems = [];
|
||||
|
||||
foreach($nationList as &$nation){
|
||||
if($env['year'] < $env['startyear']+3 && $nation['gennum'] >= GameConst::$initialNationGenLimit){
|
||||
$nation['availableJoin'] = false;
|
||||
@@ -217,7 +219,9 @@ class che_임관 extends Command\GeneralCommand{
|
||||
$nation['availableJoin'] = false;
|
||||
}
|
||||
|
||||
|
||||
if(Util::starts_with($nation['name'], 'ⓤ')){
|
||||
$hiddenItems[$nation['nation']] = $nation['nation'];
|
||||
}
|
||||
}
|
||||
unset($nation);
|
||||
ob_start();
|
||||
@@ -228,6 +232,7 @@ class che_임관 extends Command\GeneralCommand{
|
||||
임관할 국가를 목록에서 선택하세요.<br>
|
||||
<select class='formInput' name="destNationID" id="destNationID" size='1' style='color:white;background-color:black;'>
|
||||
<?php foreach($nationList as $nation): ?>
|
||||
<?php if(key_exists($nation['nation'], $hiddenItems)){ continue; } ?>
|
||||
<option
|
||||
value='<?=$nation['nation']?>'
|
||||
style='<?=$nation['availableJoin']?'':'background-color:red;'?>'
|
||||
|
||||
@@ -209,7 +209,10 @@ class che_장수대상임관 extends Command\GeneralCommand{
|
||||
$nationList[$nationID]['scoutmsg'] = $scoutMsg;
|
||||
}
|
||||
|
||||
$hiddenItems = [];
|
||||
|
||||
foreach($nationList as &$nation){
|
||||
$nation['hideen'] = false;
|
||||
if($env['year'] < $env['startyear']+3 && $nation['gennum'] >= GameConst::$initialNationGenLimit){
|
||||
$nation['availableJoin'] = false;
|
||||
}
|
||||
@@ -224,7 +227,9 @@ class che_장수대상임관 extends Command\GeneralCommand{
|
||||
$nation['availableJoin'] = false;
|
||||
}
|
||||
|
||||
|
||||
if(Util::starts_with($nation['name'], 'ⓤ')){
|
||||
$hiddenItems[$nation['nation']] = $nation['nation'];
|
||||
}
|
||||
}
|
||||
unset($nation);
|
||||
ob_start();
|
||||
@@ -235,6 +240,7 @@ class che_장수대상임관 extends Command\GeneralCommand{
|
||||
임관할 국가를 목록에서 선택하세요.<br>
|
||||
<select class='formInput' name="destGeneralID" id="destGeneralID" size='1' style='color:white;background-color:black;'>
|
||||
<?php foreach($generalList as $targetGeneral): ?>
|
||||
<?php if(key_exists($targetGeneral['nation'], $hiddenItems)){ continue; } ?>
|
||||
<option value='<?=$targetGeneral['no']?>'><?=getColoredName($targetGeneral['name'],$targetGeneral['npc'])?>【<?=getNationStaticInfo($targetGeneral['nation'])['name']??'재야'?>】</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
|
||||
@@ -15,7 +15,8 @@ use function \sammo\{
|
||||
getDomesticExpLevelBonus,
|
||||
CriticalRatioDomestic,
|
||||
CriticalScoreEx,
|
||||
tryUniqueItemLottery
|
||||
tryUniqueItemLottery,
|
||||
updateMaxDomesticCritical
|
||||
};
|
||||
|
||||
use \sammo\Constraint\Constraint;
|
||||
@@ -150,6 +151,13 @@ class che_정착장려 extends Command\GeneralCommand{
|
||||
$exp = $score * 0.7;
|
||||
$ded = $score * 1.0;
|
||||
|
||||
if($pick == 'success'){
|
||||
updateMaxDomesticCritical($general, $score);
|
||||
}
|
||||
else{
|
||||
$general->setAuxVar('max_domestic_critical', 0);
|
||||
}
|
||||
|
||||
$score *= 10;
|
||||
|
||||
$scoreText = number_format($score, 0);
|
||||
@@ -187,5 +195,5 @@ class che_정착장려 extends Command\GeneralCommand{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -15,7 +15,8 @@ use function \sammo\{
|
||||
getDomesticExpLevelBonus,
|
||||
CriticalRatioDomestic,
|
||||
CriticalScoreEx,
|
||||
tryUniqueItemLottery
|
||||
tryUniqueItemLottery,
|
||||
updateMaxDomesticCritical
|
||||
};
|
||||
|
||||
use \sammo\Constraint\Constraint;
|
||||
@@ -150,6 +151,13 @@ class che_주민선정 extends Command\GeneralCommand{
|
||||
$exp = $score * 0.7;
|
||||
$ded = $score * 1.0;
|
||||
|
||||
if($pick == 'success'){
|
||||
updateMaxDomesticCritical($general, $score);
|
||||
}
|
||||
else{
|
||||
$general->setAuxVar('max_domestic_critical', 0);
|
||||
}
|
||||
|
||||
$score /= 10;
|
||||
|
||||
$scoreText = number_format($score, 1);
|
||||
|
||||
@@ -9,16 +9,17 @@ use \sammo\{
|
||||
LastTurn,
|
||||
GameUnitConst,
|
||||
Command,
|
||||
Json,
|
||||
KVStorage,
|
||||
StringUtil
|
||||
};
|
||||
|
||||
use function \sammo\{
|
||||
getDomesticExpLevelBonus,
|
||||
CriticalRatioDomestic,
|
||||
CriticalScoreEx,
|
||||
getAllNationStaticInfo,
|
||||
getNationStaticInfo
|
||||
};
|
||||
use function \sammo\getDomesticExpLevelBonus;
|
||||
use function \sammo\CriticalRatioDomestic;
|
||||
use function \sammo\CriticalScoreEx;
|
||||
use function \sammo\getAllNationStaticInfo;
|
||||
use function \sammo\getNationStaticInfo;
|
||||
|
||||
|
||||
use \sammo\Constraint\Constraint;
|
||||
use \sammo\Constraint\ConstraintHelper;
|
||||
@@ -223,7 +224,10 @@ class che_물자원조 extends Command\NationCommand{
|
||||
$destNationLogger = new ActionLogger(0, $destChiefID, $year, $month);
|
||||
$destNationLogger->pushNationalHistoryLog("<D><b>{$nationName}</b></>{$josaRoSrc}부터 금<C>{$goldAmountText}</> 쌀<C>{$riceAmountText}</>을 지원 받음");
|
||||
|
||||
|
||||
$destNationStor = KVStorage::getStorage(DB::db(), $destNationID, 'nation_env');
|
||||
$destRecvAssist = $destNationStor->getValue('recv_assist')??[];
|
||||
$destRecvAssist["n{$nationID}"] = [$nationID, ($destRecvAssist["n{$nationID}"][1]??0) + $goldAmount + $riceAmount];
|
||||
$destNationStor->setValue('recv_assist', $destRecvAssist);
|
||||
|
||||
$db->update('nation', [
|
||||
'gold'=>$db->sqleval('gold - %i', $goldAmount),
|
||||
|
||||
@@ -2,33 +2,31 @@
|
||||
|
||||
namespace sammo\Command\Nation;
|
||||
|
||||
use\sammo\{
|
||||
DB,
|
||||
Util,
|
||||
JosaUtil,
|
||||
General,
|
||||
DummyGeneral,
|
||||
ActionLogger,
|
||||
GameConst,
|
||||
LastTurn,
|
||||
GameUnitConst,
|
||||
Command,
|
||||
MessageTarget,
|
||||
DiplomaticMessage,
|
||||
Message,
|
||||
};
|
||||
use \sammo\DB;
|
||||
use \sammo\Util;
|
||||
use \sammo\JosaUtil;
|
||||
use \sammo\General;
|
||||
use \sammo\DummyGeneral;
|
||||
use \sammo\ActionLogger;
|
||||
use \sammo\GameConst;
|
||||
use \sammo\LastTurn;
|
||||
use \sammo\GameUnitConst;
|
||||
use \sammo\Command;
|
||||
use \sammo\MessageTarget;
|
||||
use \sammo\DiplomaticMessage;
|
||||
use \sammo\Message;
|
||||
|
||||
use function\sammo\{
|
||||
getDomesticExpLevelBonus,
|
||||
CriticalRatioDomestic,
|
||||
CriticalScoreEx,
|
||||
getAllNationStaticInfo,
|
||||
getNationStaticInfo,
|
||||
GetImageURL
|
||||
};
|
||||
use function \sammo\getDomesticExpLevelBonus;
|
||||
use function \sammo\CriticalRatioDomestic;
|
||||
use function \sammo\CriticalScoreEx;
|
||||
use function \sammo\getAllNationStaticInfo;
|
||||
use function \sammo\getNationStaticInfo;
|
||||
use function \sammo\GetImageUR;
|
||||
|
||||
use \sammo\Constraint\Constraint;
|
||||
use \sammo\Constraint\ConstraintHelper;
|
||||
use sammo\Json;
|
||||
use sammo\KVStorage;
|
||||
|
||||
class che_불가침수락 extends Command\NationCommand
|
||||
{
|
||||
@@ -191,6 +189,13 @@ class che_불가침수락 extends Command\NationCommand
|
||||
$destNationID = $destNation['nation'];
|
||||
$destNationName = $destNation['name'];
|
||||
|
||||
$destNationStor = KVStorage::getStorage(DB::db(), $destNationID, 'nation_env');
|
||||
$destRecvAssist = $destNationStor->getValue('recv_assist')??[];
|
||||
$destRespAssist = $destNationStor->getValue('resp_assist')??[];
|
||||
|
||||
$destRespAssist["n{$nationID}"] = [$nationID, $destRecvAssist["n{$nationID}"][1]??0];
|
||||
$destNationStor->setValue('resp_assist', $destRespAssist);
|
||||
|
||||
$year = $this->arg['year'];
|
||||
$month = $this->arg['month'];
|
||||
|
||||
|
||||
@@ -50,6 +50,11 @@ class AllowJoinDestNation extends Constraint{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($this->general['npc']??2 < 2 && \sammo\Util::starts_with($this->destNation['name'], 'ⓤ')){
|
||||
$this->reason = "유저장은 태수국에 임관할 수 없습니다.";
|
||||
return false;
|
||||
}
|
||||
|
||||
$joinedNations = $this->general['auxVar']['joinedNations']??[];
|
||||
if(in_array($this->destNation['nation'], $joinedNations)){
|
||||
$this->reason = "이미 임관했었던 국가입니다.";
|
||||
|
||||
@@ -0,0 +1,282 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\Event\Action;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use sammo\ActionLogger;
|
||||
use sammo\CityConst;
|
||||
use sammo\DB;
|
||||
use sammo\GameConst;
|
||||
use sammo\Json;
|
||||
use sammo\KVStorage;
|
||||
use sammo\Scenario\GeneralBuilder;
|
||||
use sammo\Scenario\Nation;
|
||||
use sammo\UniqueConst;
|
||||
use sammo\Util;
|
||||
|
||||
use function sammo\GetNationColors;
|
||||
use function sammo\getNationStaticInfo;
|
||||
use function sammo\pickGeneralFromPool;
|
||||
use function sammo\refreshNationStaticInfo;
|
||||
|
||||
class RaiseNPCNation extends \sammo\Event\Action
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
const CITY_KEYS = ['pop', 'agri', 'comm', 'secu', 'def', 'wall'];
|
||||
const MIN_DIST_USERNATION = 4;
|
||||
const MIN_DIST_NPCNATION = 2;
|
||||
|
||||
private function calcAvgNationCity(array $cities)
|
||||
{
|
||||
if (count($cities) == 0) {
|
||||
throw new InvalidArgumentException();
|
||||
}
|
||||
|
||||
$targetCities = [];
|
||||
|
||||
foreach ($cities as $city) {
|
||||
if ($city['nation'] == 0) {
|
||||
continue;
|
||||
}
|
||||
$citySum = 0;
|
||||
foreach (static::CITY_KEYS as $key) {
|
||||
if ($key === 'pop') {
|
||||
continue;
|
||||
}
|
||||
$citySum += $city[$key];
|
||||
}
|
||||
$city['sum'] = $citySum;
|
||||
|
||||
$targetCities[] = $city;
|
||||
}
|
||||
|
||||
$cityCnt = count($targetCities);
|
||||
|
||||
if ($cityCnt == 0) {
|
||||
$target = Util::choiceRandom($cities);
|
||||
$randCity = [];
|
||||
foreach (static::CITY_KEYS as $key) {
|
||||
$randCity[$key] = $target["{$key}_max"];
|
||||
}
|
||||
return $randCity;
|
||||
}
|
||||
|
||||
usort($targetCities, function (array $lhs, array $rhs) {
|
||||
return $lhs['sum'] <=> $rhs['sum'];
|
||||
});
|
||||
|
||||
|
||||
//최소, 최대 도시 몇개를 뺀다. 정렬은 신경쓰지 않는다.
|
||||
|
||||
if ($cityCnt >= 3) {
|
||||
$reduceCnt = Util::valueFit(Util::round($cityCnt / 6, 0), 1);
|
||||
foreach (Util::range($reduceCnt) as $_idx) {
|
||||
array_pop($targetCities);
|
||||
}
|
||||
|
||||
foreach (Util::range($reduceCnt) as $idx) {
|
||||
$targetCities[$idx] = array_pop($targetCities);
|
||||
}
|
||||
|
||||
$cityCnt -= $reduceCnt * 2;
|
||||
}
|
||||
|
||||
$avgCity = [];
|
||||
foreach ($targetCities as $city) {
|
||||
foreach (static::CITY_KEYS as $key) {
|
||||
$avgCity[$key] = ($avgCity[$key] ?? 0) + $city[$key];
|
||||
}
|
||||
}
|
||||
|
||||
foreach (static::CITY_KEYS as $key) {
|
||||
$avgCity[$key] = Util::toInt($avgCity[$key] / $cityCnt);
|
||||
}
|
||||
return $avgCity;
|
||||
}
|
||||
|
||||
public function calcAvgNationGeneralCnt(): int
|
||||
{
|
||||
$nationUsers = [];
|
||||
foreach (\sammo\getAllNationStaticInfo() as $nation) {
|
||||
if ($nation['level'] == 0) {
|
||||
continue;
|
||||
}
|
||||
$nationUsers[] = $nation['gennum'];
|
||||
}
|
||||
|
||||
$nationCnt = count($nationUsers);
|
||||
if ($nationCnt == 0) {
|
||||
return GameConst::$initialNationGenLimit;
|
||||
}
|
||||
|
||||
sort($nationUsers);
|
||||
if ($nationCnt >= 3) {
|
||||
$reduceCnt = Util::valueFit(Util::round($nationCnt / 6, 0), 1);
|
||||
foreach (Util::range($reduceCnt) as $_idx) {
|
||||
array_pop($nationUsers);
|
||||
}
|
||||
|
||||
foreach (Util::range($reduceCnt) as $idx) {
|
||||
$nationUsers[$idx] = array_pop($nationUsers);
|
||||
}
|
||||
$nationCnt -= $reduceCnt * 2;
|
||||
}
|
||||
|
||||
return Util::round(array_sum($nationUsers) / $nationCnt);
|
||||
}
|
||||
|
||||
public function calcAvgTech(): int
|
||||
{
|
||||
$techSum = 0;
|
||||
$nationCnt = 0;
|
||||
foreach (\sammo\getAllNationStaticInfo() as $nation) {
|
||||
if ($nation['level'] == 0) {
|
||||
continue;
|
||||
}
|
||||
$techSum += $nation['tech'];
|
||||
$nationCnt += 1;
|
||||
}
|
||||
if ($nationCnt == 0) {
|
||||
return 0;
|
||||
}
|
||||
return Util::toInt($techSum / $nationCnt);
|
||||
}
|
||||
|
||||
private function buildNation(int $nationID, int $tech, array $baseCity, array $avgCity, int $genCnt, $env)
|
||||
{
|
||||
$db = DB::db();
|
||||
|
||||
$targetCity = [
|
||||
'trust' => 100
|
||||
];
|
||||
foreach (static::CITY_KEYS as $key) {
|
||||
$targetCity[$key] = min($baseCity["{$key}_max"], $avgCity[$key]);
|
||||
}
|
||||
|
||||
$pickTypeList = ['무' => 1, '지' => 1];
|
||||
|
||||
$cityID = $baseCity['city'];
|
||||
$cityName = $baseCity['name'];
|
||||
$nationName = "ⓤ{$cityName}";
|
||||
|
||||
$color = Util::choiceRandom(GetNationColors());
|
||||
$nationObj = new Nation($nationID, $nationName, $color, 0, 2000, "우리도 할 수 있다! {$cityName}군", $tech, null, 2, [$cityName]);
|
||||
$nationObj->build($env);
|
||||
|
||||
$ruler = (new GeneralBuilder("{$cityName}태수", false, null, $nationID))
|
||||
->setOfficerLevel(12)
|
||||
->setCityID($cityID)
|
||||
->setNPCType(6)
|
||||
->setGoldRice(1000, 1000)
|
||||
->fillRandomStat($pickTypeList)
|
||||
->setKillturn(240)
|
||||
->fillRemainSpecAsZero($env);
|
||||
$ruler->build($env);
|
||||
|
||||
$nationObj->addGeneral($ruler);
|
||||
|
||||
$birthYear = $env['year'] - 20;
|
||||
$deadYearMin = $env['year'] + 10;
|
||||
|
||||
foreach (pickGeneralFromPool(DB::db(), 0, $genCnt - 1) as $pickedNPC) {
|
||||
//대충 10년후부터 6년마다 절반?
|
||||
$deadYear = $deadYearMin + Util::toInt(60 * (1 - log(Util::randRange(1, 1024), 2)/10));
|
||||
$newNPC = $pickedNPC->getGeneralBuilder();
|
||||
$newNPC->setNationID($nationID)
|
||||
->setCityID($cityID)
|
||||
->setNPCType(6)
|
||||
->setGoldRice(1000, 1000)
|
||||
->setLifeSpan($birthYear, $deadYear)
|
||||
->fillRandomStat($pickTypeList)
|
||||
->fillRemainSpecAsZero($env);
|
||||
$newNPC->build($env);
|
||||
$pickedNPC->occupyGeneralName();
|
||||
|
||||
$nationObj->addGeneral($newNPC);
|
||||
}
|
||||
|
||||
$nationObj->postBuild($env);
|
||||
$db->update('city', $targetCity, 'city = %i', $cityID);
|
||||
refreshNationStaticInfo();
|
||||
}
|
||||
|
||||
public function run(array $env)
|
||||
{
|
||||
$db = DB::db();
|
||||
|
||||
$allCities = $db->query('SELECT * FROM city WHERE 5 <= level AND level <= 6'); //소, 중 성만 선택
|
||||
|
||||
$emptyCities = [];
|
||||
$occupiedCities = [];
|
||||
$npcCities = [];
|
||||
|
||||
$avgCity = $this->calcAvgNationCity($allCities);
|
||||
|
||||
foreach ($allCities as $city) {
|
||||
if ($city['nation'] == 0) {
|
||||
$emptyCities[$city['city']] = $city;
|
||||
} else {
|
||||
$occupiedCities[$city['city']] = $city;
|
||||
}
|
||||
}
|
||||
|
||||
$avgGenCnt = $this->calcAvgNationGeneralCnt();
|
||||
|
||||
$serverID = UniqueConst::$serverID;
|
||||
$lastNationID = max(
|
||||
$db->queryFirstField("SELECT max(`nation`) FROM `nation`"),
|
||||
$db->queryFirstField("SELECT max(`nation`) FROM `ng_old_nations` WHERE server_id = %s", $serverID),
|
||||
);
|
||||
|
||||
$avgTech = $this->calcAvgTech();
|
||||
Util::shuffle_assoc($emptyCities);
|
||||
|
||||
$occupiedCitiesID = array_keys($occupiedCities);
|
||||
$npcCitiesID = [];
|
||||
|
||||
refreshNationStaticInfo();
|
||||
|
||||
foreach ($emptyCities as $emptyCity) {
|
||||
$cityID = $emptyCity['city'];
|
||||
|
||||
$minDistance = 999;
|
||||
foreach ($occupiedCitiesID as $targetCityID) {
|
||||
$minDistance = min(\sammo\calcCityDistance($cityID, $targetCityID, null), $minDistance);
|
||||
if ($minDistance < static::MIN_DIST_USERNATION) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($minDistance < static::MIN_DIST_USERNATION) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$minDistance = 999;
|
||||
foreach ($npcCitiesID as $targetCityID) {
|
||||
$minDistance = min(\sammo\calcCityDistance($cityID, $targetCityID, null), $minDistance);
|
||||
if ($minDistance < static::MIN_DIST_NPCNATION) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($minDistance < static::MIN_DIST_NPCNATION) {
|
||||
continue;
|
||||
}
|
||||
|
||||
//TODO: 거리 측정
|
||||
$lastNationID += 1;
|
||||
$this->buildNation($lastNationID, $avgTech, $emptyCity, $avgCity, $avgGenCnt, $env);
|
||||
$npcCities[$cityID] = $emptyCity;
|
||||
$npcCitiesID[] = $cityID;
|
||||
}
|
||||
|
||||
if (count($npcCities) > 0) {
|
||||
$logger = new ActionLogger(0, 0, $env['year'], $env['month']);
|
||||
$logger->pushGlobalHistoryLog("<L><b>【공지】</b></>공백지에 임의의 국가가 생성되었습니다.");
|
||||
$logger->flush();
|
||||
}
|
||||
|
||||
return [__CLASS__, count($npcCities)];
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
<?php
|
||||
namespace sammo\Event\Condition;
|
||||
|
||||
use sammo\Event\Condition;
|
||||
|
||||
class Logic extends \sammo\Event\Condition{
|
||||
private $mode = 'and';
|
||||
|
||||
@@ -24,7 +26,9 @@ class Logic extends \sammo\Event\Condition{
|
||||
}
|
||||
|
||||
$this->mode = $mode;
|
||||
$this->conditions = $conditions;
|
||||
$this->conditions = array_map(function($condition){
|
||||
return Condition::build($condition);
|
||||
}, $conditions);
|
||||
}
|
||||
|
||||
public function eval($env=null){
|
||||
|
||||
+207
-3
@@ -50,6 +50,20 @@ class General implements iAction{
|
||||
'occupied'=>1,
|
||||
];
|
||||
|
||||
const INHERITANCE_KEY = [
|
||||
'previous'=>[true, 1, '기존 포인트'],
|
||||
'lived_month'=>[true, 1, '생존'],
|
||||
'max_belong'=>[false, 10, '최대 임관년 수'],
|
||||
'max_domestic_critical'=>[true, 1, '최대 연속 내정 성공'],
|
||||
'snipe_combat'=>[true, 10, '병종 상성 우위 횟수'],
|
||||
'combat'=>[['rank', 'warnum'], 5, '전투 횟수'],
|
||||
'sabotage'=>[['rank', 'firenum'], 20, '계략 성공 횟수'],
|
||||
'unifier'=>[true, 1, '천통 기여'],
|
||||
'dex'=>[false, 0.001, '숙련도'],
|
||||
'tournament'=>[true, 1, '토너먼트'],
|
||||
'betting'=>[false, 10, '베팅 당첨'],
|
||||
];
|
||||
|
||||
const TURNTIME_FULL_MS = -1;
|
||||
const TURNTIME_FULL = 0;
|
||||
const TURNTIME_HMS = 1;
|
||||
@@ -539,6 +553,8 @@ class General implements iAction{
|
||||
|
||||
$generalName = $this->getName();
|
||||
|
||||
$this->mergeTotalInheritancePoint();
|
||||
|
||||
// 군주였으면 유지 이음
|
||||
$officerLevel = $this->getVar('officer_level');
|
||||
if($officerLevel == 12) {
|
||||
@@ -592,6 +608,12 @@ class General implements iAction{
|
||||
|
||||
$generalName = $this->getName();
|
||||
|
||||
$ownerID = $this->getVar('owner');
|
||||
if($ownerID){
|
||||
$this->mergeTotalInheritancePoint();
|
||||
resetInheritanceUser($ownerID);
|
||||
}
|
||||
|
||||
$this->multiplyVarWithLimit('leadership', 0.85, 10);
|
||||
$this->multiplyVarWithLimit('strength', 0.85, 10);
|
||||
$this->multiplyVarWithLimit('intel', 0.85, 10);
|
||||
@@ -919,19 +941,19 @@ class General implements iAction{
|
||||
static public function mergeQueryColumn(?array $reqColumns=null, int $constructMode=2):array{
|
||||
$minimumColumn = ['no', 'name', 'city', 'nation', 'officer_level', 'officer_city'];
|
||||
$defaultEventColumn = [
|
||||
'no', 'name', 'city', 'nation', 'officer_level', 'officer_city',
|
||||
'no', 'name', 'owner', 'city', 'nation', 'officer_level', 'officer_city',
|
||||
'special', 'special2', 'personal',
|
||||
'horse', 'weapon', 'book', 'item', 'last_turn'
|
||||
];
|
||||
$fullColumn = [
|
||||
'no', 'name', 'owner_name', 'picture', 'imgsvr', 'nation', 'city', 'troop', 'injury', 'affinity',
|
||||
'no', 'name', 'owner', 'owner_name', 'picture', 'imgsvr', 'nation', 'city', 'troop', 'injury', 'affinity',
|
||||
'leadership', 'leadership_exp', 'strength', 'strength_exp', 'intel', 'intel_exp', 'weapon', 'book', 'horse', 'item',
|
||||
'experience', 'dedication', 'officer_level', 'officer_city', 'gold', 'rice', 'crew', 'crewtype', 'train', 'atmos', 'turntime',
|
||||
'makelimit', 'killturn', 'block', 'dedlevel', 'explevel', 'age', 'startage', 'belong',
|
||||
'personal', 'special', 'special2', 'defence_train', 'tnmt', 'npc', 'npc_org', 'deadyear', 'npcmsg',
|
||||
'dex1', 'dex2', 'dex3', 'dex4', 'dex5', 'betray',
|
||||
'recent_war', 'last_turn', 'myset',
|
||||
'specage', 'specage2', 'con', 'connect', 'owner', 'aux', 'lastrefresh',
|
||||
'specage', 'specage2', 'con', 'connect', 'aux', 'lastrefresh',
|
||||
];
|
||||
|
||||
if($reqColumns === null){
|
||||
@@ -1141,4 +1163,186 @@ class General implements iAction{
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int|float
|
||||
*/
|
||||
public function getInheritancePoint(string $key, &$aux=null, bool $forceCalc=false){
|
||||
$inheritType = static::INHERITANCE_KEY[$key]??null;
|
||||
if($inheritType === null){
|
||||
throw new \OutOfRangeException("{$key}는 유산 타입이 아님");
|
||||
}
|
||||
|
||||
$ownerID = $this->getVar('owner');
|
||||
if(!$ownerID){
|
||||
return 0;
|
||||
}
|
||||
|
||||
if($this->getVar('npc') != 0){
|
||||
return 0;
|
||||
}
|
||||
|
||||
[$storeType, $multiplier, ] = $inheritType;
|
||||
|
||||
$gameStor = KVStorage::getStorage(DB::db(), 'game_env');
|
||||
if($storeType === true || ($gameStor->isunited != 0 && !$forceCalc)){
|
||||
$inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$ownerID}");
|
||||
[$value, $aux] = $inheritStor->getValue($key);
|
||||
return $value;
|
||||
}
|
||||
|
||||
if(is_array($storeType)){
|
||||
[$storSubType, $storSubKey] = $storeType;
|
||||
if($storSubType === 'rank'){
|
||||
return $this->getRankVar($storSubKey) * $multiplier;
|
||||
}
|
||||
if($storSubType === 'raw'){
|
||||
return $this->getVar($storSubKey) * $multiplier;
|
||||
}
|
||||
if($storSubType === 'aux'){
|
||||
return ($this->getAuxVar($storSubKey)??0) * $multiplier;
|
||||
}
|
||||
throw new \InvalidArgumentException("{$storSubType}은 참조 할 수 없는 유산 세부키임");
|
||||
}
|
||||
|
||||
if($storeType !== false){
|
||||
throw new \InvalidArgumentException("{$storeType}은 올바르지 않은 유산 키임");
|
||||
}
|
||||
|
||||
$extractFn = function(){ return [0, null];};
|
||||
switch($key){
|
||||
case 'dex':
|
||||
$extractFn = function() use ($multiplier){
|
||||
$totalDex = 0;
|
||||
foreach(array_keys(GameUnitConst::allType()) as $armType){
|
||||
$totalDex += $this->getVar("dex{$armType}");
|
||||
}
|
||||
return [$totalDex * $multiplier, null];
|
||||
};
|
||||
break;
|
||||
case 'betting':
|
||||
$extractFn = function() use ($multiplier){
|
||||
$betWin = $this->getRankVar('betwin');
|
||||
$betWinRate = $this->getRankVar('betwingold')/max(1, $this->getRankVar('betgold'));
|
||||
|
||||
return [$betWin * $multiplier * pow($betWinRate, 2), null];
|
||||
};
|
||||
break;
|
||||
case 'max_belong':
|
||||
$extractFn = function() use ($multiplier){
|
||||
$maxBelong = max($this->getVar('belong'), $this->getAuxVar('max_belong')??0);
|
||||
return [$maxBelong * $multiplier, null];
|
||||
};
|
||||
break;
|
||||
default:
|
||||
throw new \InvalidArgumentException("{$key}는 유산 추출기를 보유하고 있지 않음");
|
||||
}
|
||||
|
||||
[$value, $aux] = ($extractFn)();
|
||||
return $value;
|
||||
}
|
||||
|
||||
public function setInheritancePoint(string $key, $value, $aux=null){
|
||||
if(!is_int($value) && !is_float($value)){
|
||||
throw new \InvalidArgumentException("{$value}는 숫자가 아님");
|
||||
}
|
||||
$inheritType = static::INHERITANCE_KEY[$key]??null;
|
||||
if($inheritType === null){
|
||||
throw new \OutOfRangeException("{$key}는 유산 타입이 아님");
|
||||
}
|
||||
|
||||
[$storeType, $multiplier, ] = $inheritType;
|
||||
if($storeType !== true){
|
||||
throw new \InvalidArgumentException("{$key}는 직접 저장형 유산 포인트가 아님");
|
||||
}
|
||||
if($multiplier != 1 && $value != 0){
|
||||
throw new \InvalidArgumentException("{$key}는 1:1 유산 포인트가 아님");
|
||||
}
|
||||
|
||||
$ownerID = $this->getVar('owner');
|
||||
if(!$ownerID){
|
||||
return;
|
||||
}
|
||||
|
||||
if($this->getVar('npc') != 0){
|
||||
return;
|
||||
}
|
||||
|
||||
$gameStor = KVStorage::getStorage(DB::db(), 'game_env');
|
||||
if($gameStor->isunited != 0){
|
||||
return;
|
||||
}
|
||||
|
||||
$inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$ownerID}");
|
||||
$inheritStor->setValue($key, [$value, $aux]);
|
||||
}
|
||||
|
||||
public function increaseInheritancePoint(string $key, $value, $aux=null){
|
||||
if(!is_int($value) && !is_float($value)){
|
||||
throw new \InvalidArgumentException("{$value}는 숫자가 아님");
|
||||
}
|
||||
|
||||
$inheritType = static::INHERITANCE_KEY[$key]??null;
|
||||
if($inheritType === null){
|
||||
throw new \OutOfRangeException("{$key}는 유산 타입이 아님");
|
||||
}
|
||||
|
||||
[$storeType, $multiplier, ] = $inheritType;
|
||||
if($storeType !== true){
|
||||
throw new \InvalidArgumentException("{$key}는 직접 저장형 유산 포인트가 아님");
|
||||
}
|
||||
|
||||
$ownerID = $this->getVar('owner');
|
||||
if(!$ownerID){
|
||||
return;
|
||||
}
|
||||
|
||||
if($this->getVar('npc') != 0){
|
||||
return;
|
||||
}
|
||||
|
||||
$gameStor = KVStorage::getStorage(DB::db(), 'game_env');
|
||||
if($gameStor->isunited != 0){
|
||||
return;
|
||||
}
|
||||
|
||||
$inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$ownerID}");
|
||||
[$oldValue, $oldAux] = $inheritStor->getValue($key)??[0, null];
|
||||
|
||||
if($oldAux !== $aux){
|
||||
$oldValue = 0;
|
||||
}
|
||||
|
||||
$newValue = $oldValue + $value * $multiplier;
|
||||
$inheritStor->setValue($key, [$newValue, $aux]);
|
||||
}
|
||||
|
||||
public function mergeTotalInheritancePoint(){
|
||||
$ownerID = $this->getVar('owner');
|
||||
if(!$ownerID){
|
||||
return;
|
||||
}
|
||||
|
||||
if($this->getVar('npc') != 0){
|
||||
return;
|
||||
}
|
||||
|
||||
$inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$ownerID}");
|
||||
$inheritStor->cacheAll();
|
||||
foreach(static::INHERITANCE_KEY as $key=>[$storType, ,]){
|
||||
$aux = null;
|
||||
$point = $this->getInheritancePoint($key, $aux, true);
|
||||
if($storType === true){
|
||||
continue;
|
||||
}
|
||||
$inheritStor->setValue($key, [$point, $aux]);
|
||||
}
|
||||
|
||||
$oldInheritStor = KVStorage::getStorage(DB::db(), "inheritance_result");
|
||||
$gameStor = KVStorage::getStorage(DB::db(), 'game_env');
|
||||
$serverID = UniqueConst::$serverID;
|
||||
$year = $gameStor->year;
|
||||
$month = $gameStor->month;
|
||||
$oldInheritStor->setValue("{$serverID}_{$ownerID}_{$this->getID()}_{$year}_{$month}", $inheritStor->getAll(true));
|
||||
}
|
||||
}
|
||||
+86
-2
@@ -1712,6 +1712,88 @@ class GeneralAI
|
||||
return $cmd;
|
||||
}
|
||||
|
||||
// 군주 행동
|
||||
protected function do불가침제의(LastTurn $lastTurn): ?NationCommand
|
||||
{
|
||||
$general = $this->general;
|
||||
|
||||
if($general->getVar('officer_level') < 12){
|
||||
return null;
|
||||
}
|
||||
|
||||
$nation = $this->nation;
|
||||
$nationID = $nation['nation'];
|
||||
|
||||
$nationStor = KVStorage::getStorage(DB::db(), $nationID, 'nation_env');
|
||||
$recvAssist = $nationStor->getValue('recv_assist')??[];
|
||||
$respAssist = $nationStor->getValue('resp_assist')??[];
|
||||
$respAssistTry = $nationStor->getValue('resp_assist_try')??[];
|
||||
|
||||
$yearMonth = Util::joinYearMonth($this->env['year'], $this->env['month']);
|
||||
|
||||
$candidateList = [];
|
||||
foreach($recvAssist as [$candNationID, $amount]){
|
||||
$amount -= $respAssist["n{$candNationID}"][1]??0;
|
||||
if($amount <= 0){
|
||||
continue;
|
||||
}
|
||||
if(key_exists($candNationID, $this->warTargetNation)){
|
||||
continue;
|
||||
}
|
||||
if(($respAssistTry["n{$candNationID}"][1]??0) >= $yearMonth - 8){
|
||||
continue;
|
||||
}
|
||||
$candidateList[$candNationID] = $amount;
|
||||
}
|
||||
|
||||
if(!$candidateList){
|
||||
return null;
|
||||
}
|
||||
|
||||
$cityList = $this->supplyCities;
|
||||
|
||||
if (!$cityList) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$goldIncome = getGoldIncome($nation['nation'], $nation['level'], 15, $nation['capital'], $nation['type'], $cityList);
|
||||
$riceIncome = getRiceIncome($nation['nation'], $nation['level'], 15, $nation['capital'], $nation['type'], $cityList);
|
||||
$wallIncome = getWallIncome($nation['nation'], $nation['level'], 15, $nation['capital'], $nation['type'], $cityList);
|
||||
$income = $goldIncome + $riceIncome + $wallIncome;
|
||||
|
||||
arsort($candidateList);
|
||||
$destNationID = null;
|
||||
$diplomatMonth = 0;
|
||||
foreach($candidateList as $candNationID => $amount){
|
||||
if($amount * 4 < $income){
|
||||
break;
|
||||
}
|
||||
$destNationID = $candNationID;
|
||||
$diplomatMonth = 24 * $amount / $income;
|
||||
break;
|
||||
}
|
||||
|
||||
if($destNationID === null){
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
[$targetYear, $targetMonth] = Util::parseYearMonth($yearMonth + $diplomatMonth);
|
||||
|
||||
$cmd = buildNationCommandClass('che_불가침제의', $this->general, $this->env, $lastTurn, [
|
||||
'destNationID' => $destNationID,
|
||||
'year' => $targetYear,
|
||||
'month' => $targetMonth,
|
||||
]);
|
||||
if(!$cmd->hasFullConditionMet()){
|
||||
return null;
|
||||
}
|
||||
|
||||
$respAssistTry["n{$destNationID}"] = [$destNationID, $yearMonth];
|
||||
$nationStor->setValue('resp_assist_try', $respAssistTry);
|
||||
|
||||
return $cmd;
|
||||
}
|
||||
|
||||
// 군주 행동
|
||||
protected function do선전포고(LastTurn $lastTurn): ?NationCommand
|
||||
@@ -3067,6 +3149,9 @@ class GeneralAI
|
||||
if($general->getVar('makelimit')){
|
||||
return null;
|
||||
}
|
||||
if($general->getNPCType() > 2){
|
||||
return null;
|
||||
}
|
||||
if(!$this->generalPolicy->can건국){
|
||||
return null;
|
||||
}
|
||||
@@ -3167,8 +3252,7 @@ class GeneralAI
|
||||
return null;
|
||||
}
|
||||
|
||||
if (Util::randBool(pow(1 / $nationCnt / pow($notFullNationCnt, 3), 1 / 4))) {
|
||||
//국가가 1개일 경우에는 '임관하지 않음'
|
||||
if (Util::randBool(pow(1 / ($nationCnt + 1) / pow($notFullNationCnt, 3), 1 / 4))) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,7 +76,10 @@ class Nation{
|
||||
$capital = 0;
|
||||
}
|
||||
|
||||
if(strpos($this->type, '_') === FALSE){
|
||||
if($this->type === null){
|
||||
$type = Util::choiceRandom(GameConst::$availableNationType);
|
||||
}
|
||||
else if(strpos($this->type, '_') === FALSE){
|
||||
$type = 'che_'.$this->type;
|
||||
}
|
||||
else{
|
||||
|
||||
@@ -257,6 +257,8 @@ class TurnExecutionHelper
|
||||
$autorunMode = false;
|
||||
$ai = null;
|
||||
|
||||
$general->increaseInheritancePoint('lived_month', 1);
|
||||
|
||||
$turnObj->preprocessCommand($env);
|
||||
$generalCommandObj = $general->getReservedTurn(0, $env);
|
||||
|
||||
|
||||
@@ -5,5 +5,17 @@
|
||||
],
|
||||
"const": {
|
||||
"joinRuinedNPCProp":0
|
||||
}
|
||||
},
|
||||
"events":[
|
||||
[
|
||||
["or", ["Date", "==", null, 12], ["Date", "==", null, 6]],
|
||||
["CreateManyNPC", 30],
|
||||
["DeleteEvent"]
|
||||
],
|
||||
[
|
||||
["Date", "==", 181, 1],
|
||||
["RaiseNPCNation"],
|
||||
["DeleteEvent"]
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -8,5 +8,17 @@
|
||||
],
|
||||
"const": {
|
||||
"joinRuinedNPCProp":0
|
||||
}
|
||||
},
|
||||
"events":[
|
||||
[
|
||||
["or", ["Date", "==", null, 12], ["Date", "==", null, 6]],
|
||||
["CreateManyNPC", 30],
|
||||
["DeleteEvent"]
|
||||
],
|
||||
[
|
||||
["Date", "==", 181, 1],
|
||||
["RaiseNPCNation"],
|
||||
["DeleteEvent"]
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -15,9 +15,14 @@
|
||||
},
|
||||
"events":[
|
||||
[
|
||||
["Date", "==", null, 12],
|
||||
["or", ["Date", "==", null, 12], ["Date", "==", null, 6]],
|
||||
["CreateManyNPC", 30],
|
||||
["DeleteEvent"]
|
||||
],
|
||||
[
|
||||
["Date", "==", 181, 1],
|
||||
["RaiseNPCNation"],
|
||||
["DeleteEvent"]
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -16,7 +16,7 @@
|
||||
<a href='b_diplomacy.php'><button type="button" class='commandButton' style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>중원 정보</button></a>
|
||||
<a href='b_currentCity.php'><button type="button" class='commandButton' style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>현재 도시</button></a>
|
||||
<a href='b_battleCenter.php' target='_blank'><button type="button" class='commandButton' <?=$showSecret?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>감 찰 부</button></a>
|
||||
<button type="button" style="visibility:hidden;" class='commandButton'>빈칸</button>
|
||||
<a href='b_inheritPoint.php'><button type="button" class='commandButton' style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>유산 관리</button></a>
|
||||
<a href='b_myPage.php'><button type="button" class='commandButton' style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>내 정보&설정</button></a>
|
||||
<a href='b_auction.php' target='_blank'><button type="button" class='commandButton' style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>거 래 장</button></a>
|
||||
<a href='b_betting.php' target='_blank'><button type="button" class='commandButton' style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>베 팅 장</button></a>
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
import { sum } from "lodash";
|
||||
import { unwrap } from "./util";
|
||||
declare global {
|
||||
interface Window {
|
||||
formStart: ()=>void;
|
||||
items: {[name: string]:number};
|
||||
helpText: {[name: string]:string};
|
||||
}
|
||||
}
|
||||
|
||||
export {}
|
||||
|
||||
function formStart() {
|
||||
|
||||
const dSum = unwrap(document.querySelector('#inherit_sum_value')) as HTMLInputElement ;
|
||||
const dOld = unwrap(document.querySelector('#inherit_previous_value')) as HTMLInputElement;
|
||||
const dNew = unwrap(document.querySelector('#inherit_new_value')) as HTMLInputElement;
|
||||
|
||||
const sumPoint = Math.floor(sum(Object.values(window.items)));
|
||||
const oldPoint = Math.floor(window.items['previous']);
|
||||
const sumNewPoint = sumPoint - oldPoint;
|
||||
|
||||
dSum.value = sumPoint.toLocaleString();
|
||||
dOld.value = oldPoint.toLocaleString();
|
||||
dNew.value = sumNewPoint.toLocaleString();
|
||||
|
||||
for(const [key, val] of Object.entries(window.items)){
|
||||
const dItem = unwrap(document.querySelector(`#inherit_${key}_value`)) as HTMLInputElement ;
|
||||
dItem.value = Math.floor(val).toLocaleString();
|
||||
}
|
||||
|
||||
for(const [key, text] of Object.entries(window.helpText)){
|
||||
const dText = unwrap(document.querySelector(`#inherit_${key} small.form-text`)) as HTMLElement;
|
||||
dText.innerHTML = text;
|
||||
}
|
||||
}
|
||||
|
||||
window.formStart = formStart;
|
||||
@@ -0,0 +1,35 @@
|
||||
type ErrType<T> = { new(msg?: string): T }
|
||||
type Nullable<T> = T | null | undefined
|
||||
|
||||
export class RuntimeError extends Error {
|
||||
public name = 'RuntimeError';
|
||||
constructor(public message: string = '') {
|
||||
super(message);
|
||||
}
|
||||
toString(): string {
|
||||
if (this.message) {
|
||||
return this.name + ': ' + this.message;
|
||||
}
|
||||
else {
|
||||
return this.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class NotNullExpected extends RuntimeError {
|
||||
public name = 'NotNullExpected';
|
||||
}
|
||||
|
||||
export function unwrap<T>(result: Nullable<T>): T {
|
||||
if (result === null || result === undefined) {
|
||||
throw new NotNullExpected();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export function unwrap_err<T, ErrT extends Error>(result: Nullable<T>, errType: ErrType<ErrT>, errMsg?: string): T {
|
||||
if (result === null || result === undefined) {
|
||||
throw new errType(errMsg);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"name": "hidche_lib",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "js/index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"build": "webpack",
|
||||
"lint": "eslint hwe/ts ts"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "ssh://git@storage.hided.net:2525/devsam/core.git"
|
||||
},
|
||||
"author": "Hide_D",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/lodash": "^4.14.172",
|
||||
"lodash": "^4.17.21"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/cli": "^7.14.8",
|
||||
"@babel/core": "^7.15.0",
|
||||
"@babel/preset-env": "^7.15.0",
|
||||
"@babel/preset-typescript": "^7.15.0",
|
||||
"@typescript-eslint/eslint-plugin": "^4.29.1",
|
||||
"@typescript-eslint/parser": "^4.29.1",
|
||||
"babel-loader": "^8.2.2",
|
||||
"babel-plugin-lodash": "^3.3.4",
|
||||
"eslint": "^7.32.0",
|
||||
"pre-commit": "^1.2.2",
|
||||
"typescript": "^4.3.5",
|
||||
"webpack": "^5.49.0",
|
||||
"webpack-cli": "^4.7.2"
|
||||
},
|
||||
"pre-commit": [
|
||||
"lint"
|
||||
]
|
||||
}
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
interface Window {
|
||||
pathConfig: {
|
||||
root: string,
|
||||
sharedIcon: string,
|
||||
gameImage: string,
|
||||
}
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
type ErrType<T> = { new(msg?: string): T }
|
||||
type Nullable<T> = T | null | undefined
|
||||
|
||||
export class RuntimeError extends Error {
|
||||
public name = 'RuntimeError';
|
||||
constructor(public message: string = '') {
|
||||
super(message);
|
||||
}
|
||||
toString(): string {
|
||||
if (this.message) {
|
||||
return this.name + ': ' + this.message;
|
||||
}
|
||||
else {
|
||||
return this.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class NotNullExpected extends RuntimeError {
|
||||
public name = 'NotNullExpected';
|
||||
}
|
||||
|
||||
export function unwrap<T>(result: Nullable<T>): T {
|
||||
if (result === null || result === undefined) {
|
||||
throw new NotNullExpected();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export function unwrap_err<T, ErrT extends Error>(result: Nullable<T>, errType: ErrType<ErrT>, errMsg?: string): T {
|
||||
if (result === null || result === undefined) {
|
||||
throw new errType(errMsg);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
||||
|
||||
/* Basic Options */
|
||||
// "incremental": true, /* Enable incremental compilation */
|
||||
"target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'. */
|
||||
"module": "ESNext", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
|
||||
// "lib": [], /* Specify library files to be included in the compilation. */
|
||||
// "allowJs": true, /* Allow javascript files to be compiled. */
|
||||
// "checkJs": true, /* Report errors in .js files. */
|
||||
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */
|
||||
// "declaration": true, /* Generates corresponding '.d.ts' file. */
|
||||
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
|
||||
// "sourceMap": true, /* Generates corresponding '.map' file. */
|
||||
// "outFile": "./", /* Concatenate and emit output to single file. */
|
||||
// "outDir": "../js", /* Redirect output structure to the directory. */
|
||||
// "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
||||
// "composite": true, /* Enable project compilation */
|
||||
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
|
||||
// "removeComments": true, /* Do not emit comments to output. */
|
||||
"noEmit": true, /* Do not emit outputs. */
|
||||
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
|
||||
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
|
||||
"isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
|
||||
|
||||
/* Strict Type-Checking Options */
|
||||
"strict": true, /* Enable all strict type-checking options. */
|
||||
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
|
||||
// "strictNullChecks": true, /* Enable strict null checks. */
|
||||
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
|
||||
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
|
||||
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
|
||||
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
|
||||
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
|
||||
|
||||
/* Additional Checks */
|
||||
// "noUnusedLocals": true, /* Report errors on unused locals. */
|
||||
// "noUnusedParameters": true, /* Report errors on unused parameters. */
|
||||
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
|
||||
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
|
||||
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an 'override' modifier. */
|
||||
// "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */
|
||||
|
||||
/* Module Resolution Options */
|
||||
"moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
|
||||
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
|
||||
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
|
||||
"rootDirs": ["./ts", "./hwe/ts"], /* List of root folders whose combined content represents the structure of the project at runtime. */
|
||||
//"typeRoots": ["./typings"], /* List of folders to include type definitions from. */
|
||||
//"types": ["ts/common_path.d.ts"], /* Type declaration files to be included in compilation. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
|
||||
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
|
||||
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
|
||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||
|
||||
/* Source Map Options */
|
||||
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
|
||||
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
|
||||
|
||||
/* Experimental Options */
|
||||
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
|
||||
|
||||
/* Advanced Options */
|
||||
"skipLibCheck": true, /* Skip type checking of declaration files. */
|
||||
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
|
||||
}
|
||||
}
|
||||
Vendored
-14
@@ -1,14 +0,0 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../phan/phan" && pwd)
|
||||
|
||||
if [ -d /proc/cygdrive ]; then
|
||||
case $(which php) in
|
||||
$(readlink -n /proc/cygdrive)/*)
|
||||
# We are in Cygwin using Windows php, so the path must be translated
|
||||
dir=$(cygpath -m "$dir");
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
"${dir}/phan" "$@"
|
||||
+1
@@ -0,0 +1 @@
|
||||
../phan/phan/phan
|
||||
Vendored
-4
@@ -1,4 +0,0 @@
|
||||
@ECHO OFF
|
||||
setlocal DISABLEDELAYEDEXPANSION
|
||||
SET BIN_TARGET=%~dp0/../phan/phan/phan
|
||||
php "%BIN_TARGET%" %*
|
||||
Vendored
-14
@@ -1,14 +0,0 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../phan/phan" && pwd)
|
||||
|
||||
if [ -d /proc/cygdrive ]; then
|
||||
case $(which php) in
|
||||
$(readlink -n /proc/cygdrive)/*)
|
||||
# We are in Cygwin using Windows php, so the path must be translated
|
||||
dir=$(cygpath -m "$dir");
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
"${dir}/phan_client" "$@"
|
||||
+1
@@ -0,0 +1 @@
|
||||
../phan/phan/phan_client
|
||||
Vendored
-4
@@ -1,4 +0,0 @@
|
||||
@ECHO OFF
|
||||
setlocal DISABLEDELAYEDEXPANSION
|
||||
SET BIN_TARGET=%~dp0/../phan/phan/phan_client
|
||||
php "%BIN_TARGET%" %*
|
||||
Vendored
-14
@@ -1,14 +0,0 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../scssphp/scssphp/bin" && pwd)
|
||||
|
||||
if [ -d /proc/cygdrive ]; then
|
||||
case $(which php) in
|
||||
$(readlink -n /proc/cygdrive)/*)
|
||||
# We are in Cygwin using Windows php, so the path must be translated
|
||||
dir=$(cygpath -m "$dir");
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
"${dir}/pscss" "$@"
|
||||
+1
@@ -0,0 +1 @@
|
||||
../scssphp/scssphp/bin/pscss
|
||||
Vendored
-4
@@ -1,4 +0,0 @@
|
||||
@ECHO OFF
|
||||
setlocal DISABLEDELAYEDEXPANSION
|
||||
SET BIN_TARGET=%~dp0/../scssphp/scssphp/bin/pscss
|
||||
php "%BIN_TARGET%" %*
|
||||
Vendored
-14
@@ -1,14 +0,0 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../phan/phan" && pwd)
|
||||
|
||||
if [ -d /proc/cygdrive ]; then
|
||||
case $(which php) in
|
||||
$(readlink -n /proc/cygdrive)/*)
|
||||
# We are in Cygwin using Windows php, so the path must be translated
|
||||
dir=$(cygpath -m "$dir");
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
"${dir}/tocheckstyle" "$@"
|
||||
+1
@@ -0,0 +1 @@
|
||||
../phan/phan/tocheckstyle
|
||||
Vendored
-4
@@ -1,4 +0,0 @@
|
||||
@ECHO OFF
|
||||
setlocal DISABLEDELAYEDEXPANSION
|
||||
SET BIN_TARGET=%~dp0/../phan/phan/tocheckstyle
|
||||
php "%BIN_TARGET%" %*
|
||||
Vendored
+11
-6
@@ -2,9 +2,9 @@
|
||||
/*!
|
||||
* Medoo database framework
|
||||
* https://medoo.in
|
||||
* Version 1.7.8
|
||||
* Version 1.7.10
|
||||
*
|
||||
* Copyright 2019, Angel Lai
|
||||
* Copyright 2020, Angel Lai
|
||||
* Released under the MIT license
|
||||
*/
|
||||
|
||||
@@ -445,15 +445,20 @@ class Medoo
|
||||
}
|
||||
|
||||
$query = preg_replace_callback(
|
||||
'/((FROM|TABLE|INTO|UPDATE)\s*)?\<([a-zA-Z0-9_\.]+)\>/i',
|
||||
'/(([`\']).*?)?((FROM|TABLE|INTO|UPDATE|JOIN)\s*)?\<(([a-zA-Z0-9_]+)(\.[a-zA-Z0-9_]+)?)\>(.*?\2)?/i',
|
||||
function ($matches)
|
||||
{
|
||||
if (!empty($matches[ 2 ]))
|
||||
if (!empty($matches[ 2 ]) && isset($matches[ 8 ]))
|
||||
{
|
||||
return $matches[ 2 ] . ' ' . $this->tableQuote($matches[ 3 ]);
|
||||
return $matches[ 0 ];
|
||||
}
|
||||
|
||||
return $this->columnQuote($matches[ 3 ]);
|
||||
if (!empty($matches[ 4 ]))
|
||||
{
|
||||
return $matches[ 1 ] . $matches[ 4 ] . ' ' . $this->tableQuote($matches[ 5 ]);
|
||||
}
|
||||
|
||||
return $matches[ 1 ] . $this->columnQuote($matches[ 5 ]);
|
||||
},
|
||||
$raw->value);
|
||||
|
||||
|
||||
Vendored
+3
-3
@@ -37,8 +37,8 @@ namespace Composer\Autoload;
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @see http://www.php-fig.org/psr/psr-0/
|
||||
* @see http://www.php-fig.org/psr/psr-4/
|
||||
* @see https://www.php-fig.org/psr/psr-0/
|
||||
* @see https://www.php-fig.org/psr/psr-4/
|
||||
*/
|
||||
class ClassLoader
|
||||
{
|
||||
@@ -60,7 +60,7 @@ class ClassLoader
|
||||
public function getPrefixes()
|
||||
{
|
||||
if (!empty($this->prefixesPsr0)) {
|
||||
return call_user_func_array('array_merge', $this->prefixesPsr0);
|
||||
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
|
||||
}
|
||||
|
||||
return array();
|
||||
|
||||
+684
@@ -0,0 +1,684 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
namespace Composer;
|
||||
|
||||
use Composer\Semver\VersionParser;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class InstalledVersions
|
||||
{
|
||||
private static $installed = array (
|
||||
'root' =>
|
||||
array (
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5310c2e7f6f872cbb923ed71b72ef01b8df4aaaf',
|
||||
'name' => 'sammo-hid/sammo',
|
||||
),
|
||||
'versions' =>
|
||||
array (
|
||||
'brandonwamboldt/utilphp' =>
|
||||
array (
|
||||
'pretty_version' => '1.1.0',
|
||||
'version' => '1.1.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '36c32efc4f0679c05163464a550f45c8d83fe683',
|
||||
),
|
||||
'catfan/medoo' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.7.10',
|
||||
'version' => '1.7.10.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '2d675f73e23f63bbaeb9a8aa33318659a3d3c32f',
|
||||
),
|
||||
'composer/semver' =>
|
||||
array (
|
||||
'pretty_version' => '3.2.5',
|
||||
'version' => '3.2.5.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '31f3ea725711245195f62e54ffa402d8ef2fdba9',
|
||||
),
|
||||
'composer/xdebug-handler' =>
|
||||
array (
|
||||
'pretty_version' => '2.0.2',
|
||||
'version' => '2.0.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '84674dd3a7575ba617f5a76d7e9e29a7d3891339',
|
||||
),
|
||||
'erusev/parsedown' =>
|
||||
array (
|
||||
'pretty_version' => '1.7.4',
|
||||
'version' => '1.7.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'cb17b6477dfff935958ba01325f2e8a2bfa6dab3',
|
||||
),
|
||||
'erusev/parsedown-extra' =>
|
||||
array (
|
||||
'pretty_version' => '0.8.1',
|
||||
'version' => '0.8.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '91ac3ff98f0cea243bdccc688df43810f044dcef',
|
||||
),
|
||||
'ezyang/htmlpurifier' =>
|
||||
array (
|
||||
'pretty_version' => 'v4.13.0',
|
||||
'version' => '4.13.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '08e27c97e4c6ed02f37c5b2b20488046c8d90d75',
|
||||
),
|
||||
'felixfbecker/advanced-json-rpc' =>
|
||||
array (
|
||||
'pretty_version' => 'v3.2.1',
|
||||
'version' => '3.2.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'b5f37dbff9a8ad360ca341f3240dc1c168b45447',
|
||||
),
|
||||
'firephp/firephp-core' =>
|
||||
array (
|
||||
'pretty_version' => 'v0.4.0',
|
||||
'version' => '0.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'fabad0f2503f9577fe8dd2cb1d1c7cd73ed2aacf',
|
||||
),
|
||||
'guzzlehttp/guzzle' =>
|
||||
array (
|
||||
'pretty_version' => '6.5.5',
|
||||
'version' => '6.5.5.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '9d4290de1cfd701f38099ef7e183b64b4b7b0c5e',
|
||||
),
|
||||
'guzzlehttp/promises' =>
|
||||
array (
|
||||
'pretty_version' => '1.4.1',
|
||||
'version' => '1.4.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '8e7d04f1f6450fef59366c399cfad4b9383aa30d',
|
||||
),
|
||||
'guzzlehttp/psr7' =>
|
||||
array (
|
||||
'pretty_version' => '1.8.2',
|
||||
'version' => '1.8.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'dc960a912984efb74d0a90222870c72c87f10c91',
|
||||
),
|
||||
'league/plates' =>
|
||||
array (
|
||||
'pretty_version' => 'v3.4.0',
|
||||
'version' => '3.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '6d3ee31199b536a4e003b34a356ca20f6f75496a',
|
||||
),
|
||||
'microsoft/tolerant-php-parser' =>
|
||||
array (
|
||||
'pretty_version' => 'v0.1.1',
|
||||
'version' => '0.1.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '6a965617cf484355048ac6d2d3de7b6ec93abb16',
|
||||
),
|
||||
'monolog/monolog' =>
|
||||
array (
|
||||
'pretty_version' => '1.26.1',
|
||||
'version' => '1.26.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'c6b00f05152ae2c9b04a448f99c7590beb6042f5',
|
||||
),
|
||||
'netresearch/jsonmapper' =>
|
||||
array (
|
||||
'pretty_version' => 'v4.0.0',
|
||||
'version' => '4.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d',
|
||||
),
|
||||
'nette/caching' =>
|
||||
array (
|
||||
'pretty_version' => 'v3.1.1',
|
||||
'version' => '3.1.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '3e771c589dee414724be473c24ad16dae50c1960',
|
||||
),
|
||||
'nette/finder' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.5.2',
|
||||
'version' => '2.5.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '4ad2c298eb8c687dd0e74ae84206a4186eeaed50',
|
||||
),
|
||||
'nette/utils' =>
|
||||
array (
|
||||
'pretty_version' => 'v3.2.2',
|
||||
'version' => '3.2.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '967cfc4f9a1acd5f1058d76715a424c53343c20c',
|
||||
),
|
||||
'pguardiario/phpuri' =>
|
||||
array (
|
||||
'pretty_version' => '1.0',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'ad0a5ec033fe616cfef55578b9c7f2458be8fbfc',
|
||||
),
|
||||
'phan/phan' =>
|
||||
array (
|
||||
'pretty_version' => '5.0.0',
|
||||
'version' => '5.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'f36b6b9a2f4143a25f35ce94d712ceb0527e9d90',
|
||||
),
|
||||
'php-extended/php-system' =>
|
||||
array (
|
||||
'pretty_version' => '1.4.0',
|
||||
'version' => '1.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '9e6b3c2009ef56dc123efc43900e40cdf217ace0',
|
||||
),
|
||||
'php-extended/php-tail' =>
|
||||
array (
|
||||
'pretty_version' => '2.2.0',
|
||||
'version' => '2.2.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '19fbd3a79ccc071954f28296b2c44754335304a0',
|
||||
),
|
||||
'phpdocumentor/reflection-common' =>
|
||||
array (
|
||||
'pretty_version' => '2.2.0',
|
||||
'version' => '2.2.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b',
|
||||
),
|
||||
'phpdocumentor/reflection-docblock' =>
|
||||
array (
|
||||
'pretty_version' => '5.2.2',
|
||||
'version' => '5.2.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '069a785b2141f5bcf49f3e353548dc1cce6df556',
|
||||
),
|
||||
'phpdocumentor/type-resolver' =>
|
||||
array (
|
||||
'pretty_version' => '1.4.0',
|
||||
'version' => '1.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0',
|
||||
),
|
||||
'psr/container' =>
|
||||
array (
|
||||
'pretty_version' => '1.1.1',
|
||||
'version' => '1.1.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf',
|
||||
),
|
||||
'psr/http-message' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.1',
|
||||
'version' => '1.0.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',
|
||||
),
|
||||
'psr/http-message-implementation' =>
|
||||
array (
|
||||
'provided' =>
|
||||
array (
|
||||
0 => '1.0',
|
||||
),
|
||||
),
|
||||
'psr/log' =>
|
||||
array (
|
||||
'pretty_version' => '1.1.4',
|
||||
'version' => '1.1.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
|
||||
),
|
||||
'psr/log-implementation' =>
|
||||
array (
|
||||
'provided' =>
|
||||
array (
|
||||
0 => '1.0.0',
|
||||
1 => '1.0|2.0',
|
||||
),
|
||||
),
|
||||
'ralouphie/getallheaders' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.3',
|
||||
'version' => '3.0.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '120b605dfeb996808c31b6477290a714d356e822',
|
||||
),
|
||||
'sabre/event' =>
|
||||
array (
|
||||
'pretty_version' => '5.1.2',
|
||||
'version' => '5.1.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'c120bec57c17b6251a496efc82b732418b49d50a',
|
||||
),
|
||||
'sammo-hid/sammo' =>
|
||||
array (
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5310c2e7f6f872cbb923ed71b72ef01b8df4aaaf',
|
||||
),
|
||||
'scssphp/scssphp' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.6.0',
|
||||
'version' => '1.6.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'b83594e2323c5d6e80785df3f91b9d1d32aad530',
|
||||
),
|
||||
'sergeytsalkov/meekrodb' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.4',
|
||||
'version' => '2.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'e30c240d54bc81f58c58507a9ed768032eb494a5',
|
||||
),
|
||||
'symfony/console' =>
|
||||
array (
|
||||
'pretty_version' => 'v5.3.6',
|
||||
'version' => '5.3.6.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '51b71afd6d2dc8f5063199357b9880cea8d8bfe2',
|
||||
),
|
||||
'symfony/deprecation-contracts' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.4.0',
|
||||
'version' => '2.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5f38c8804a9e97d23e0c8d63341088cd8a22d627',
|
||||
),
|
||||
'symfony/lock' =>
|
||||
array (
|
||||
'pretty_version' => 'v4.4.27',
|
||||
'version' => '4.4.27.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '6ca476d4ac992802f2a4043929f68f1818449486',
|
||||
),
|
||||
'symfony/polyfill-ctype' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.0',
|
||||
'version' => '1.23.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '46cd95797e9df938fdd2b03693b5fca5e64b01ce',
|
||||
),
|
||||
'symfony/polyfill-intl-grapheme' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.1',
|
||||
'version' => '1.23.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '16880ba9c5ebe3642d1995ab866db29270b36535',
|
||||
),
|
||||
'symfony/polyfill-intl-idn' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.0',
|
||||
'version' => '1.23.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '65bd267525e82759e7d8c4e8ceea44f398838e65',
|
||||
),
|
||||
'symfony/polyfill-intl-normalizer' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.0',
|
||||
'version' => '1.23.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '8590a5f561694770bdcd3f9b5c69dde6945028e8',
|
||||
),
|
||||
'symfony/polyfill-mbstring' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.1',
|
||||
'version' => '1.23.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '9174a3d80210dca8daa7f31fec659150bbeabfc6',
|
||||
),
|
||||
'symfony/polyfill-php72' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.0',
|
||||
'version' => '1.23.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '9a142215a36a3888e30d0a9eeea9766764e96976',
|
||||
),
|
||||
'symfony/polyfill-php73' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.0',
|
||||
'version' => '1.23.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'fba8933c384d6476ab14fb7b8526e5287ca7e010',
|
||||
),
|
||||
'symfony/polyfill-php80' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.1',
|
||||
'version' => '1.23.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '1100343ed1a92e3a38f9ae122fc0eb21602547be',
|
||||
),
|
||||
'symfony/service-contracts' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.4.0',
|
||||
'version' => '2.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb',
|
||||
),
|
||||
'symfony/string' =>
|
||||
array (
|
||||
'pretty_version' => 'v5.3.3',
|
||||
'version' => '5.3.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1',
|
||||
),
|
||||
'tysonandre/var_representation_polyfill' =>
|
||||
array (
|
||||
'pretty_version' => '0.0.2',
|
||||
'version' => '0.0.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '3f17999ee1f257319ddc6721dd26ebbc5d175f33',
|
||||
),
|
||||
'vlucas/valitron' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.4.10',
|
||||
'version' => '1.4.10.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5ebd5d7af82cc0a9d798e816a2ecad63f1b59ceb',
|
||||
),
|
||||
'webmozart/assert' =>
|
||||
array (
|
||||
'pretty_version' => '1.10.0',
|
||||
'version' => '1.10.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '6964c76c7804814a842473e0c8fd15bab0f18e25',
|
||||
),
|
||||
'xemlock/htmlpurifier-html5' =>
|
||||
array (
|
||||
'pretty_version' => 'v0.1.11',
|
||||
'version' => '0.1.11.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'f0d563f9fd4a82a3d759043483f9a94c0d8c2255',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getInstalledPackages()
|
||||
{
|
||||
return array_keys(self::$installed['versions']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function isInstalled($packageName)
|
||||
{
|
||||
return isset(self::$installed['versions'][$packageName]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
||||
{
|
||||
$constraint = $parser->parseConstraints($constraint);
|
||||
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
||||
|
||||
return $provided->matches($constraint);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getVersionRanges($packageName)
|
||||
{
|
||||
if (!isset(self::$installed['versions'][$packageName])) {
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
$ranges = array();
|
||||
if (isset(self::$installed['versions'][$packageName]['pretty_version'])) {
|
||||
$ranges[] = self::$installed['versions'][$packageName]['pretty_version'];
|
||||
}
|
||||
if (array_key_exists('aliases', self::$installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']);
|
||||
}
|
||||
if (array_key_exists('replaced', self::$installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']);
|
||||
}
|
||||
if (array_key_exists('provided', self::$installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']);
|
||||
}
|
||||
|
||||
return implode(' || ', $ranges);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getVersion($packageName)
|
||||
{
|
||||
if (!isset(self::$installed['versions'][$packageName])) {
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
if (!isset(self::$installed['versions'][$packageName]['version'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return self::$installed['versions'][$packageName]['version'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getPrettyVersion($packageName)
|
||||
{
|
||||
if (!isset(self::$installed['versions'][$packageName])) {
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return self::$installed['versions'][$packageName]['pretty_version'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getReference($packageName)
|
||||
{
|
||||
if (!isset(self::$installed['versions'][$packageName])) {
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
if (!isset(self::$installed['versions'][$packageName]['reference'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return self::$installed['versions'][$packageName]['reference'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getRootPackage()
|
||||
{
|
||||
return self::$installed['root'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getRawData()
|
||||
{
|
||||
return self::$installed;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function reload($data)
|
||||
{
|
||||
self::$installed = $data;
|
||||
}
|
||||
}
|
||||
+32
-20
@@ -6,8 +6,9 @@ $vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
|
||||
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
||||
'DB' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'DBHelper' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'DBTransaction' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'FB' => $vendorDir . '/firephp/firephp-core/lib/FirePHPCore/fb.php',
|
||||
'FirePHP' => $vendorDir . '/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php',
|
||||
@@ -47,37 +48,43 @@ return array(
|
||||
'MeekroDB' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'MeekroDBEval' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'MeekroDBException' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'Nette\\ArgumentOutOfRangeException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'MeekroDBWalk' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'Nette\\ArgumentOutOfRangeException' => $vendorDir . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\Bridges\\CacheDI\\CacheExtension' => $vendorDir . '/nette/caching/src/Bridges/CacheDI/CacheExtension.php',
|
||||
'Nette\\Bridges\\CacheLatte\\CacheMacro' => $vendorDir . '/nette/caching/src/Bridges/CacheLatte/CacheMacro.php',
|
||||
'Nette\\Caching\\BulkReader' => $vendorDir . '/nette/caching/src/Caching/BulkReader.php',
|
||||
'Nette\\Caching\\Cache' => $vendorDir . '/nette/caching/src/Caching/Cache.php',
|
||||
'Nette\\Caching\\IBulkReader' => $vendorDir . '/nette/caching/src/Caching/IBulkReader.php',
|
||||
'Nette\\Caching\\IStorage' => $vendorDir . '/nette/caching/src/Caching/IStorage.php',
|
||||
'Nette\\Caching\\IBulkReader' => $vendorDir . '/nette/caching/src/compatibility.php',
|
||||
'Nette\\Caching\\IStorage' => $vendorDir . '/nette/caching/src/compatibility.php',
|
||||
'Nette\\Caching\\OutputHelper' => $vendorDir . '/nette/caching/src/Caching/OutputHelper.php',
|
||||
'Nette\\Caching\\Storage' => $vendorDir . '/nette/caching/src/Caching/Storage.php',
|
||||
'Nette\\Caching\\Storages\\DevNullStorage' => $vendorDir . '/nette/caching/src/Caching/Storages/DevNullStorage.php',
|
||||
'Nette\\Caching\\Storages\\FileStorage' => $vendorDir . '/nette/caching/src/Caching/Storages/FileStorage.php',
|
||||
'Nette\\Caching\\Storages\\IJournal' => $vendorDir . '/nette/caching/src/Caching/Storages/IJournal.php',
|
||||
'Nette\\Caching\\Storages\\IJournal' => $vendorDir . '/nette/caching/src/compatibility.php',
|
||||
'Nette\\Caching\\Storages\\Journal' => $vendorDir . '/nette/caching/src/Caching/Storages/Journal.php',
|
||||
'Nette\\Caching\\Storages\\MemcachedStorage' => $vendorDir . '/nette/caching/src/Caching/Storages/MemcachedStorage.php',
|
||||
'Nette\\Caching\\Storages\\MemoryStorage' => $vendorDir . '/nette/caching/src/Caching/Storages/MemoryStorage.php',
|
||||
'Nette\\Caching\\Storages\\NewMemcachedStorage' => $vendorDir . '/nette/caching/src/Caching/Storages/NewMemcachedStorage.php',
|
||||
'Nette\\Caching\\Storages\\SQLiteJournal' => $vendorDir . '/nette/caching/src/Caching/Storages/SQLiteJournal.php',
|
||||
'Nette\\Caching\\Storages\\SQLiteStorage' => $vendorDir . '/nette/caching/src/Caching/Storages/SQLiteStorage.php',
|
||||
'Nette\\DeprecatedException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\DirectoryNotFoundException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\FileNotFoundException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\IOException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\InvalidArgumentException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\InvalidStateException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\DeprecatedException' => $vendorDir . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\DirectoryNotFoundException' => $vendorDir . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\FileNotFoundException' => $vendorDir . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\HtmlStringable' => $vendorDir . '/nette/utils/src/HtmlStringable.php',
|
||||
'Nette\\IOException' => $vendorDir . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\InvalidArgumentException' => $vendorDir . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\InvalidStateException' => $vendorDir . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\Iterators\\CachingIterator' => $vendorDir . '/nette/utils/src/Iterators/CachingIterator.php',
|
||||
'Nette\\Iterators\\Mapper' => $vendorDir . '/nette/utils/src/Iterators/Mapper.php',
|
||||
'Nette\\Localization\\ITranslator' => $vendorDir . '/nette/utils/src/Utils/ITranslator.php',
|
||||
'Nette\\MemberAccessException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\NotImplementedException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\NotSupportedException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\OutOfRangeException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\SmartObject' => $vendorDir . '/nette/utils/src/Utils/SmartObject.php',
|
||||
'Nette\\StaticClass' => $vendorDir . '/nette/utils/src/Utils/StaticClass.php',
|
||||
'Nette\\UnexpectedValueException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\Localization\\ITranslator' => $vendorDir . '/nette/utils/src/compatibility.php',
|
||||
'Nette\\Localization\\Translator' => $vendorDir . '/nette/utils/src/Translator.php',
|
||||
'Nette\\MemberAccessException' => $vendorDir . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\NotImplementedException' => $vendorDir . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\NotSupportedException' => $vendorDir . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\OutOfRangeException' => $vendorDir . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\SmartObject' => $vendorDir . '/nette/utils/src/SmartObject.php',
|
||||
'Nette\\StaticClass' => $vendorDir . '/nette/utils/src/StaticClass.php',
|
||||
'Nette\\UnexpectedValueException' => $vendorDir . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\Utils\\ArrayHash' => $vendorDir . '/nette/utils/src/Utils/ArrayHash.php',
|
||||
'Nette\\Utils\\ArrayList' => $vendorDir . '/nette/utils/src/Utils/ArrayList.php',
|
||||
'Nette\\Utils\\Arrays' => $vendorDir . '/nette/utils/src/Utils/Arrays.php',
|
||||
@@ -86,9 +93,10 @@ return array(
|
||||
'Nette\\Utils\\DateTime' => $vendorDir . '/nette/utils/src/Utils/DateTime.php',
|
||||
'Nette\\Utils\\FileSystem' => $vendorDir . '/nette/utils/src/Utils/FileSystem.php',
|
||||
'Nette\\Utils\\Finder' => $vendorDir . '/nette/finder/src/Utils/Finder.php',
|
||||
'Nette\\Utils\\Floats' => $vendorDir . '/nette/utils/src/Utils/Floats.php',
|
||||
'Nette\\Utils\\Helpers' => $vendorDir . '/nette/utils/src/Utils/Helpers.php',
|
||||
'Nette\\Utils\\Html' => $vendorDir . '/nette/utils/src/Utils/Html.php',
|
||||
'Nette\\Utils\\IHtmlString' => $vendorDir . '/nette/utils/src/Utils/IHtmlString.php',
|
||||
'Nette\\Utils\\IHtmlString' => $vendorDir . '/nette/utils/src/compatibility.php',
|
||||
'Nette\\Utils\\Image' => $vendorDir . '/nette/utils/src/Utils/Image.php',
|
||||
'Nette\\Utils\\ImageException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\Utils\\Json' => $vendorDir . '/nette/utils/src/Utils/Json.php',
|
||||
@@ -102,6 +110,10 @@ return array(
|
||||
'Nette\\Utils\\Strings' => $vendorDir . '/nette/utils/src/Utils/Strings.php',
|
||||
'Nette\\Utils\\UnknownImageFileException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\Utils\\Validators' => $vendorDir . '/nette/utils/src/Utils/Validators.php',
|
||||
'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php',
|
||||
'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
|
||||
'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
|
||||
'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
|
||||
'WhereClause' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'kakao\\KakaoKey' => $baseDir . '/d_setting/KakaoKey.php',
|
||||
'sammo\\RootDB' => $baseDir . '/d_setting/RootDB.php',
|
||||
|
||||
Vendored
+12
-5
@@ -6,17 +6,24 @@ $vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
|
||||
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
|
||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||
'7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
|
||||
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
|
||||
'8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php',
|
||||
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
|
||||
'0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php',
|
||||
'2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
|
||||
'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
|
||||
'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php',
|
||||
'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php',
|
||||
'2b9d0f43f9552984cfa82fee95491826' => $vendorDir . '/sabre/event/lib/coroutine.php',
|
||||
'd81bab31d3feb45bfe2f283ea3c8fdf7' => $vendorDir . '/sabre/event/lib/Loop/functions.php',
|
||||
'a1cce3d26cc15c00fcd0b3354bd72c88' => $vendorDir . '/sabre/event/lib/Promise/functions.php',
|
||||
'7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
|
||||
'25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php',
|
||||
'2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
|
||||
'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
|
||||
'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php',
|
||||
'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php',
|
||||
'6714be961f4a45ae8b9a99d5d55c5d07' => $vendorDir . '/tysonandre/var_representation_polyfill/src/var_representation.php',
|
||||
'37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
|
||||
'5b154887902198b16314243c6e0e3e19' => $vendorDir . '/pguardiario/phpuri/phpuri.php',
|
||||
'870dc64919afa8b0f700701bb2c6a783' => $baseDir . '/f_config/config.php',
|
||||
|
||||
Vendored
+6
@@ -10,12 +10,18 @@ return array(
|
||||
'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/type-resolver/src'),
|
||||
'kakao\\' => array($baseDir . '/src/kakao'),
|
||||
'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'),
|
||||
'VarRepresentation\\' => array($vendorDir . '/tysonandre/var_representation_polyfill/src/VarRepresentation'),
|
||||
'Valitron\\' => array($vendorDir . '/vlucas/valitron/src/Valitron'),
|
||||
'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
|
||||
'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'),
|
||||
'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'),
|
||||
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
|
||||
'Symfony\\Polyfill\\Intl\\Normalizer\\' => array($vendorDir . '/symfony/polyfill-intl-normalizer'),
|
||||
'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'),
|
||||
'Symfony\\Polyfill\\Intl\\Grapheme\\' => array($vendorDir . '/symfony/polyfill-intl-grapheme'),
|
||||
'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
|
||||
'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'),
|
||||
'Symfony\\Component\\String\\' => array($vendorDir . '/symfony/string'),
|
||||
'Symfony\\Component\\Lock\\' => array($vendorDir . '/symfony/lock'),
|
||||
'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'),
|
||||
'ScssPhp\\ScssPhp\\' => array($vendorDir . '/scssphp/scssphp/src'),
|
||||
|
||||
Vendored
+6
-1
@@ -13,19 +13,24 @@ class ComposerAutoloaderInit67b09c83b85c3bc0027caefe5bba171a
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Composer\Autoload\ClassLoader
|
||||
*/
|
||||
public static function getLoader()
|
||||
{
|
||||
if (null !== self::$loader) {
|
||||
return self::$loader;
|
||||
}
|
||||
|
||||
require __DIR__ . '/platform_check.php';
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInit67b09c83b85c3bc0027caefe5bba171a', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit67b09c83b85c3bc0027caefe5bba171a', 'loadClassLoader'));
|
||||
|
||||
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
||||
if ($useStaticLoader) {
|
||||
require_once __DIR__ . '/autoload_static.php';
|
||||
require __DIR__ . '/autoload_static.php';
|
||||
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a::getInitializer($loader));
|
||||
} else {
|
||||
|
||||
Vendored
+74
-25
@@ -7,17 +7,24 @@ namespace Composer\Autoload;
|
||||
class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||
{
|
||||
public static $files = array (
|
||||
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
|
||||
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
|
||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||
'7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
|
||||
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
|
||||
'8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php',
|
||||
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
|
||||
'0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php',
|
||||
'2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
|
||||
'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
|
||||
'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php',
|
||||
'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php',
|
||||
'2b9d0f43f9552984cfa82fee95491826' => __DIR__ . '/..' . '/sabre/event/lib/coroutine.php',
|
||||
'd81bab31d3feb45bfe2f283ea3c8fdf7' => __DIR__ . '/..' . '/sabre/event/lib/Loop/functions.php',
|
||||
'a1cce3d26cc15c00fcd0b3354bd72c88' => __DIR__ . '/..' . '/sabre/event/lib/Promise/functions.php',
|
||||
'7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
|
||||
'25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php',
|
||||
'2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
|
||||
'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
|
||||
'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php',
|
||||
'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php',
|
||||
'6714be961f4a45ae8b9a99d5d55c5d07' => __DIR__ . '/..' . '/tysonandre/var_representation_polyfill/src/var_representation.php',
|
||||
'37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
|
||||
'5b154887902198b16314243c6e0e3e19' => __DIR__ . '/..' . '/pguardiario/phpuri/phpuri.php',
|
||||
'870dc64919afa8b0f700701bb2c6a783' => __DIR__ . '/../..' . '/f_config/config.php',
|
||||
@@ -42,15 +49,21 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||
),
|
||||
'V' =>
|
||||
array (
|
||||
'VarRepresentation\\' => 18,
|
||||
'Valitron\\' => 9,
|
||||
),
|
||||
'S' =>
|
||||
array (
|
||||
'Symfony\\Polyfill\\Php80\\' => 23,
|
||||
'Symfony\\Polyfill\\Php73\\' => 23,
|
||||
'Symfony\\Polyfill\\Php72\\' => 23,
|
||||
'Symfony\\Polyfill\\Mbstring\\' => 26,
|
||||
'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33,
|
||||
'Symfony\\Polyfill\\Intl\\Idn\\' => 26,
|
||||
'Symfony\\Polyfill\\Intl\\Grapheme\\' => 31,
|
||||
'Symfony\\Polyfill\\Ctype\\' => 23,
|
||||
'Symfony\\Contracts\\Service\\' => 26,
|
||||
'Symfony\\Component\\String\\' => 25,
|
||||
'Symfony\\Component\\Lock\\' => 23,
|
||||
'Symfony\\Component\\Console\\' => 26,
|
||||
'ScssPhp\\ScssPhp\\' => 16,
|
||||
@@ -111,10 +124,18 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/webmozart/assert/src',
|
||||
),
|
||||
'VarRepresentation\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/tysonandre/var_representation_polyfill/src/VarRepresentation',
|
||||
),
|
||||
'Valitron\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/vlucas/valitron/src/Valitron',
|
||||
),
|
||||
'Symfony\\Polyfill\\Php80\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-php80',
|
||||
),
|
||||
'Symfony\\Polyfill\\Php73\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-php73',
|
||||
@@ -127,6 +148,18 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
|
||||
),
|
||||
'Symfony\\Polyfill\\Intl\\Normalizer\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer',
|
||||
),
|
||||
'Symfony\\Polyfill\\Intl\\Idn\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-intl-idn',
|
||||
),
|
||||
'Symfony\\Polyfill\\Intl\\Grapheme\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme',
|
||||
),
|
||||
'Symfony\\Polyfill\\Ctype\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
|
||||
@@ -135,6 +168,10 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/service-contracts',
|
||||
),
|
||||
'Symfony\\Component\\String\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/string',
|
||||
),
|
||||
'Symfony\\Component\\Lock\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/lock',
|
||||
@@ -253,8 +290,9 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||
);
|
||||
|
||||
public static $classMap = array (
|
||||
'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
|
||||
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
|
||||
'DB' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'DBHelper' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'DBTransaction' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'FB' => __DIR__ . '/..' . '/firephp/firephp-core/lib/FirePHPCore/fb.php',
|
||||
'FirePHP' => __DIR__ . '/..' . '/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php',
|
||||
@@ -294,37 +332,43 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||
'MeekroDB' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'MeekroDBEval' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'MeekroDBException' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'Nette\\ArgumentOutOfRangeException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'MeekroDBWalk' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'Nette\\ArgumentOutOfRangeException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\Bridges\\CacheDI\\CacheExtension' => __DIR__ . '/..' . '/nette/caching/src/Bridges/CacheDI/CacheExtension.php',
|
||||
'Nette\\Bridges\\CacheLatte\\CacheMacro' => __DIR__ . '/..' . '/nette/caching/src/Bridges/CacheLatte/CacheMacro.php',
|
||||
'Nette\\Caching\\BulkReader' => __DIR__ . '/..' . '/nette/caching/src/Caching/BulkReader.php',
|
||||
'Nette\\Caching\\Cache' => __DIR__ . '/..' . '/nette/caching/src/Caching/Cache.php',
|
||||
'Nette\\Caching\\IBulkReader' => __DIR__ . '/..' . '/nette/caching/src/Caching/IBulkReader.php',
|
||||
'Nette\\Caching\\IStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/IStorage.php',
|
||||
'Nette\\Caching\\IBulkReader' => __DIR__ . '/..' . '/nette/caching/src/compatibility.php',
|
||||
'Nette\\Caching\\IStorage' => __DIR__ . '/..' . '/nette/caching/src/compatibility.php',
|
||||
'Nette\\Caching\\OutputHelper' => __DIR__ . '/..' . '/nette/caching/src/Caching/OutputHelper.php',
|
||||
'Nette\\Caching\\Storage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storage.php',
|
||||
'Nette\\Caching\\Storages\\DevNullStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/DevNullStorage.php',
|
||||
'Nette\\Caching\\Storages\\FileStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/FileStorage.php',
|
||||
'Nette\\Caching\\Storages\\IJournal' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/IJournal.php',
|
||||
'Nette\\Caching\\Storages\\IJournal' => __DIR__ . '/..' . '/nette/caching/src/compatibility.php',
|
||||
'Nette\\Caching\\Storages\\Journal' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/Journal.php',
|
||||
'Nette\\Caching\\Storages\\MemcachedStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/MemcachedStorage.php',
|
||||
'Nette\\Caching\\Storages\\MemoryStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/MemoryStorage.php',
|
||||
'Nette\\Caching\\Storages\\NewMemcachedStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/NewMemcachedStorage.php',
|
||||
'Nette\\Caching\\Storages\\SQLiteJournal' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/SQLiteJournal.php',
|
||||
'Nette\\Caching\\Storages\\SQLiteStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/SQLiteStorage.php',
|
||||
'Nette\\DeprecatedException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\DirectoryNotFoundException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\FileNotFoundException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\IOException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\InvalidArgumentException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\InvalidStateException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\DeprecatedException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\DirectoryNotFoundException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\FileNotFoundException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\HtmlStringable' => __DIR__ . '/..' . '/nette/utils/src/HtmlStringable.php',
|
||||
'Nette\\IOException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\InvalidArgumentException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\InvalidStateException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\Iterators\\CachingIterator' => __DIR__ . '/..' . '/nette/utils/src/Iterators/CachingIterator.php',
|
||||
'Nette\\Iterators\\Mapper' => __DIR__ . '/..' . '/nette/utils/src/Iterators/Mapper.php',
|
||||
'Nette\\Localization\\ITranslator' => __DIR__ . '/..' . '/nette/utils/src/Utils/ITranslator.php',
|
||||
'Nette\\MemberAccessException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\NotImplementedException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\NotSupportedException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\OutOfRangeException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\SmartObject' => __DIR__ . '/..' . '/nette/utils/src/Utils/SmartObject.php',
|
||||
'Nette\\StaticClass' => __DIR__ . '/..' . '/nette/utils/src/Utils/StaticClass.php',
|
||||
'Nette\\UnexpectedValueException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\Localization\\ITranslator' => __DIR__ . '/..' . '/nette/utils/src/compatibility.php',
|
||||
'Nette\\Localization\\Translator' => __DIR__ . '/..' . '/nette/utils/src/Translator.php',
|
||||
'Nette\\MemberAccessException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\NotImplementedException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\NotSupportedException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\OutOfRangeException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\SmartObject' => __DIR__ . '/..' . '/nette/utils/src/SmartObject.php',
|
||||
'Nette\\StaticClass' => __DIR__ . '/..' . '/nette/utils/src/StaticClass.php',
|
||||
'Nette\\UnexpectedValueException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php',
|
||||
'Nette\\Utils\\ArrayHash' => __DIR__ . '/..' . '/nette/utils/src/Utils/ArrayHash.php',
|
||||
'Nette\\Utils\\ArrayList' => __DIR__ . '/..' . '/nette/utils/src/Utils/ArrayList.php',
|
||||
'Nette\\Utils\\Arrays' => __DIR__ . '/..' . '/nette/utils/src/Utils/Arrays.php',
|
||||
@@ -333,9 +377,10 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||
'Nette\\Utils\\DateTime' => __DIR__ . '/..' . '/nette/utils/src/Utils/DateTime.php',
|
||||
'Nette\\Utils\\FileSystem' => __DIR__ . '/..' . '/nette/utils/src/Utils/FileSystem.php',
|
||||
'Nette\\Utils\\Finder' => __DIR__ . '/..' . '/nette/finder/src/Utils/Finder.php',
|
||||
'Nette\\Utils\\Floats' => __DIR__ . '/..' . '/nette/utils/src/Utils/Floats.php',
|
||||
'Nette\\Utils\\Helpers' => __DIR__ . '/..' . '/nette/utils/src/Utils/Helpers.php',
|
||||
'Nette\\Utils\\Html' => __DIR__ . '/..' . '/nette/utils/src/Utils/Html.php',
|
||||
'Nette\\Utils\\IHtmlString' => __DIR__ . '/..' . '/nette/utils/src/Utils/IHtmlString.php',
|
||||
'Nette\\Utils\\IHtmlString' => __DIR__ . '/..' . '/nette/utils/src/compatibility.php',
|
||||
'Nette\\Utils\\Image' => __DIR__ . '/..' . '/nette/utils/src/Utils/Image.php',
|
||||
'Nette\\Utils\\ImageException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\Utils\\Json' => __DIR__ . '/..' . '/nette/utils/src/Utils/Json.php',
|
||||
@@ -349,6 +394,10 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||
'Nette\\Utils\\Strings' => __DIR__ . '/..' . '/nette/utils/src/Utils/Strings.php',
|
||||
'Nette\\Utils\\UnknownImageFileException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php',
|
||||
'Nette\\Utils\\Validators' => __DIR__ . '/..' . '/nette/utils/src/Utils/Validators.php',
|
||||
'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php',
|
||||
'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
|
||||
'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
|
||||
'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
|
||||
'WhereClause' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'kakao\\KakaoKey' => __DIR__ . '/../..' . '/d_setting/KakaoKey.php',
|
||||
'sammo\\RootDB' => __DIR__ . '/../..' . '/d_setting/RootDB.php',
|
||||
|
||||
Vendored
+3257
-2348
File diff suppressed because it is too large
Load Diff
Vendored
+489
@@ -0,0 +1,489 @@
|
||||
<?php return array (
|
||||
'root' =>
|
||||
array (
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5310c2e7f6f872cbb923ed71b72ef01b8df4aaaf',
|
||||
'name' => 'sammo-hid/sammo',
|
||||
),
|
||||
'versions' =>
|
||||
array (
|
||||
'brandonwamboldt/utilphp' =>
|
||||
array (
|
||||
'pretty_version' => '1.1.0',
|
||||
'version' => '1.1.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '36c32efc4f0679c05163464a550f45c8d83fe683',
|
||||
),
|
||||
'catfan/medoo' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.7.10',
|
||||
'version' => '1.7.10.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '2d675f73e23f63bbaeb9a8aa33318659a3d3c32f',
|
||||
),
|
||||
'composer/semver' =>
|
||||
array (
|
||||
'pretty_version' => '3.2.5',
|
||||
'version' => '3.2.5.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '31f3ea725711245195f62e54ffa402d8ef2fdba9',
|
||||
),
|
||||
'composer/xdebug-handler' =>
|
||||
array (
|
||||
'pretty_version' => '2.0.2',
|
||||
'version' => '2.0.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '84674dd3a7575ba617f5a76d7e9e29a7d3891339',
|
||||
),
|
||||
'erusev/parsedown' =>
|
||||
array (
|
||||
'pretty_version' => '1.7.4',
|
||||
'version' => '1.7.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'cb17b6477dfff935958ba01325f2e8a2bfa6dab3',
|
||||
),
|
||||
'erusev/parsedown-extra' =>
|
||||
array (
|
||||
'pretty_version' => '0.8.1',
|
||||
'version' => '0.8.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '91ac3ff98f0cea243bdccc688df43810f044dcef',
|
||||
),
|
||||
'ezyang/htmlpurifier' =>
|
||||
array (
|
||||
'pretty_version' => 'v4.13.0',
|
||||
'version' => '4.13.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '08e27c97e4c6ed02f37c5b2b20488046c8d90d75',
|
||||
),
|
||||
'felixfbecker/advanced-json-rpc' =>
|
||||
array (
|
||||
'pretty_version' => 'v3.2.1',
|
||||
'version' => '3.2.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'b5f37dbff9a8ad360ca341f3240dc1c168b45447',
|
||||
),
|
||||
'firephp/firephp-core' =>
|
||||
array (
|
||||
'pretty_version' => 'v0.4.0',
|
||||
'version' => '0.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'fabad0f2503f9577fe8dd2cb1d1c7cd73ed2aacf',
|
||||
),
|
||||
'guzzlehttp/guzzle' =>
|
||||
array (
|
||||
'pretty_version' => '6.5.5',
|
||||
'version' => '6.5.5.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '9d4290de1cfd701f38099ef7e183b64b4b7b0c5e',
|
||||
),
|
||||
'guzzlehttp/promises' =>
|
||||
array (
|
||||
'pretty_version' => '1.4.1',
|
||||
'version' => '1.4.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '8e7d04f1f6450fef59366c399cfad4b9383aa30d',
|
||||
),
|
||||
'guzzlehttp/psr7' =>
|
||||
array (
|
||||
'pretty_version' => '1.8.2',
|
||||
'version' => '1.8.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'dc960a912984efb74d0a90222870c72c87f10c91',
|
||||
),
|
||||
'league/plates' =>
|
||||
array (
|
||||
'pretty_version' => 'v3.4.0',
|
||||
'version' => '3.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '6d3ee31199b536a4e003b34a356ca20f6f75496a',
|
||||
),
|
||||
'microsoft/tolerant-php-parser' =>
|
||||
array (
|
||||
'pretty_version' => 'v0.1.1',
|
||||
'version' => '0.1.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '6a965617cf484355048ac6d2d3de7b6ec93abb16',
|
||||
),
|
||||
'monolog/monolog' =>
|
||||
array (
|
||||
'pretty_version' => '1.26.1',
|
||||
'version' => '1.26.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'c6b00f05152ae2c9b04a448f99c7590beb6042f5',
|
||||
),
|
||||
'netresearch/jsonmapper' =>
|
||||
array (
|
||||
'pretty_version' => 'v4.0.0',
|
||||
'version' => '4.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d',
|
||||
),
|
||||
'nette/caching' =>
|
||||
array (
|
||||
'pretty_version' => 'v3.1.1',
|
||||
'version' => '3.1.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '3e771c589dee414724be473c24ad16dae50c1960',
|
||||
),
|
||||
'nette/finder' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.5.2',
|
||||
'version' => '2.5.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '4ad2c298eb8c687dd0e74ae84206a4186eeaed50',
|
||||
),
|
||||
'nette/utils' =>
|
||||
array (
|
||||
'pretty_version' => 'v3.2.2',
|
||||
'version' => '3.2.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '967cfc4f9a1acd5f1058d76715a424c53343c20c',
|
||||
),
|
||||
'pguardiario/phpuri' =>
|
||||
array (
|
||||
'pretty_version' => '1.0',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'ad0a5ec033fe616cfef55578b9c7f2458be8fbfc',
|
||||
),
|
||||
'phan/phan' =>
|
||||
array (
|
||||
'pretty_version' => '5.0.0',
|
||||
'version' => '5.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'f36b6b9a2f4143a25f35ce94d712ceb0527e9d90',
|
||||
),
|
||||
'php-extended/php-system' =>
|
||||
array (
|
||||
'pretty_version' => '1.4.0',
|
||||
'version' => '1.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '9e6b3c2009ef56dc123efc43900e40cdf217ace0',
|
||||
),
|
||||
'php-extended/php-tail' =>
|
||||
array (
|
||||
'pretty_version' => '2.2.0',
|
||||
'version' => '2.2.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '19fbd3a79ccc071954f28296b2c44754335304a0',
|
||||
),
|
||||
'phpdocumentor/reflection-common' =>
|
||||
array (
|
||||
'pretty_version' => '2.2.0',
|
||||
'version' => '2.2.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b',
|
||||
),
|
||||
'phpdocumentor/reflection-docblock' =>
|
||||
array (
|
||||
'pretty_version' => '5.2.2',
|
||||
'version' => '5.2.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '069a785b2141f5bcf49f3e353548dc1cce6df556',
|
||||
),
|
||||
'phpdocumentor/type-resolver' =>
|
||||
array (
|
||||
'pretty_version' => '1.4.0',
|
||||
'version' => '1.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0',
|
||||
),
|
||||
'psr/container' =>
|
||||
array (
|
||||
'pretty_version' => '1.1.1',
|
||||
'version' => '1.1.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf',
|
||||
),
|
||||
'psr/http-message' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.1',
|
||||
'version' => '1.0.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',
|
||||
),
|
||||
'psr/http-message-implementation' =>
|
||||
array (
|
||||
'provided' =>
|
||||
array (
|
||||
0 => '1.0',
|
||||
),
|
||||
),
|
||||
'psr/log' =>
|
||||
array (
|
||||
'pretty_version' => '1.1.4',
|
||||
'version' => '1.1.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
|
||||
),
|
||||
'psr/log-implementation' =>
|
||||
array (
|
||||
'provided' =>
|
||||
array (
|
||||
0 => '1.0.0',
|
||||
1 => '1.0|2.0',
|
||||
),
|
||||
),
|
||||
'ralouphie/getallheaders' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.3',
|
||||
'version' => '3.0.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '120b605dfeb996808c31b6477290a714d356e822',
|
||||
),
|
||||
'sabre/event' =>
|
||||
array (
|
||||
'pretty_version' => '5.1.2',
|
||||
'version' => '5.1.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'c120bec57c17b6251a496efc82b732418b49d50a',
|
||||
),
|
||||
'sammo-hid/sammo' =>
|
||||
array (
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5310c2e7f6f872cbb923ed71b72ef01b8df4aaaf',
|
||||
),
|
||||
'scssphp/scssphp' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.6.0',
|
||||
'version' => '1.6.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'b83594e2323c5d6e80785df3f91b9d1d32aad530',
|
||||
),
|
||||
'sergeytsalkov/meekrodb' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.4',
|
||||
'version' => '2.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'e30c240d54bc81f58c58507a9ed768032eb494a5',
|
||||
),
|
||||
'symfony/console' =>
|
||||
array (
|
||||
'pretty_version' => 'v5.3.6',
|
||||
'version' => '5.3.6.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '51b71afd6d2dc8f5063199357b9880cea8d8bfe2',
|
||||
),
|
||||
'symfony/deprecation-contracts' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.4.0',
|
||||
'version' => '2.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5f38c8804a9e97d23e0c8d63341088cd8a22d627',
|
||||
),
|
||||
'symfony/lock' =>
|
||||
array (
|
||||
'pretty_version' => 'v4.4.27',
|
||||
'version' => '4.4.27.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '6ca476d4ac992802f2a4043929f68f1818449486',
|
||||
),
|
||||
'symfony/polyfill-ctype' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.0',
|
||||
'version' => '1.23.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '46cd95797e9df938fdd2b03693b5fca5e64b01ce',
|
||||
),
|
||||
'symfony/polyfill-intl-grapheme' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.1',
|
||||
'version' => '1.23.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '16880ba9c5ebe3642d1995ab866db29270b36535',
|
||||
),
|
||||
'symfony/polyfill-intl-idn' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.0',
|
||||
'version' => '1.23.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '65bd267525e82759e7d8c4e8ceea44f398838e65',
|
||||
),
|
||||
'symfony/polyfill-intl-normalizer' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.0',
|
||||
'version' => '1.23.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '8590a5f561694770bdcd3f9b5c69dde6945028e8',
|
||||
),
|
||||
'symfony/polyfill-mbstring' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.1',
|
||||
'version' => '1.23.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '9174a3d80210dca8daa7f31fec659150bbeabfc6',
|
||||
),
|
||||
'symfony/polyfill-php72' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.0',
|
||||
'version' => '1.23.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '9a142215a36a3888e30d0a9eeea9766764e96976',
|
||||
),
|
||||
'symfony/polyfill-php73' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.0',
|
||||
'version' => '1.23.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'fba8933c384d6476ab14fb7b8526e5287ca7e010',
|
||||
),
|
||||
'symfony/polyfill-php80' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.23.1',
|
||||
'version' => '1.23.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '1100343ed1a92e3a38f9ae122fc0eb21602547be',
|
||||
),
|
||||
'symfony/service-contracts' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.4.0',
|
||||
'version' => '2.4.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb',
|
||||
),
|
||||
'symfony/string' =>
|
||||
array (
|
||||
'pretty_version' => 'v5.3.3',
|
||||
'version' => '5.3.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1',
|
||||
),
|
||||
'tysonandre/var_representation_polyfill' =>
|
||||
array (
|
||||
'pretty_version' => '0.0.2',
|
||||
'version' => '0.0.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '3f17999ee1f257319ddc6721dd26ebbc5d175f33',
|
||||
),
|
||||
'vlucas/valitron' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.4.10',
|
||||
'version' => '1.4.10.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5ebd5d7af82cc0a9d798e816a2ecad63f1b59ceb',
|
||||
),
|
||||
'webmozart/assert' =>
|
||||
array (
|
||||
'pretty_version' => '1.10.0',
|
||||
'version' => '1.10.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '6964c76c7804814a842473e0c8fd15bab0f18e25',
|
||||
),
|
||||
'xemlock/htmlpurifier-html5' =>
|
||||
array (
|
||||
'pretty_version' => 'v0.1.11',
|
||||
'version' => '0.1.11.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'f0d563f9fd4a82a3d759043483f9a94c0d8c2255',
|
||||
),
|
||||
),
|
||||
);
|
||||
Vendored
+26
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
// platform_check.php @generated by Composer
|
||||
|
||||
$issues = array();
|
||||
|
||||
if (!(PHP_VERSION_ID >= 70205)) {
|
||||
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.';
|
||||
}
|
||||
|
||||
if ($issues) {
|
||||
if (!headers_sent()) {
|
||||
header('HTTP/1.1 500 Internal Server Error');
|
||||
}
|
||||
if (!ini_get('display_errors')) {
|
||||
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
||||
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
|
||||
} elseif (!headers_sent()) {
|
||||
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
|
||||
}
|
||||
}
|
||||
trigger_error(
|
||||
'Composer detected issues in your platform: ' . implode(' ', $issues),
|
||||
E_USER_ERROR
|
||||
);
|
||||
}
|
||||
Vendored
+94
@@ -3,6 +3,85 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
### [3.2.5] 2021-05-24
|
||||
|
||||
* Fixed: issue comparing disjunctive MultiConstraints to conjunctive ones (#127)
|
||||
* Fixed: added complete type information using phpstan annotations
|
||||
|
||||
### [3.2.4] 2020-11-13
|
||||
|
||||
* Fixed: code clean-up
|
||||
|
||||
### [3.2.3] 2020-11-12
|
||||
|
||||
* Fixed: constraints in the form of `X || Y, >=Y.1` and other such complex constructs were in some cases being optimized into a more restrictive constraint
|
||||
|
||||
### [3.2.2] 2020-10-14
|
||||
|
||||
* Fixed: internal code cleanups
|
||||
|
||||
### [3.2.1] 2020-09-27
|
||||
|
||||
* Fixed: accidental validation of broken constraints combining ^/~ and wildcards, and -dev suffix allowing weird cases
|
||||
* Fixed: normalization of beta0 and such which was dropping the 0
|
||||
|
||||
### [3.2.0] 2020-09-09
|
||||
|
||||
* Added: support for `x || @dev`, not very useful but seen in the wild and failed to validate with 1.5.2/1.6.0
|
||||
* Added: support for `foobar-dev` being equal to `dev-foobar`, dev-foobar is the official way to write it but we need to support the other for BC and convenience
|
||||
|
||||
### [3.1.0] 2020-09-08
|
||||
|
||||
* Added: support for constraints like `^2.x-dev` and `~2.x-dev`, not very useful but seen in the wild and failed to validate with 3.0.1
|
||||
* Fixed: invalid aliases will no longer throw, unless explicitly validated by Composer in the root package
|
||||
|
||||
### [3.0.1] 2020-09-08
|
||||
|
||||
* Fixed: handling of some invalid -dev versions which were seen as valid
|
||||
|
||||
### [3.0.0] 2020-05-26
|
||||
|
||||
* Break: Renamed `EmptyConstraint`, replace it with `MatchAllConstraint`
|
||||
* Break: Unlikely to affect anyone but strictly speaking a breaking change, `*.*` and such variants will not match all `dev-*` versions anymore, only `*` does
|
||||
* Break: ConstraintInterface is now considered internal/private and not meant to be implemented by third parties anymore
|
||||
* Added `Intervals` class to check if a constraint is a subsets of another one, and allow compacting complex MultiConstraints into simpler ones
|
||||
* Added `CompilingMatcher` class to speed up constraint matching against simple Constraint instances
|
||||
* Added `MatchAllConstraint` and `MatchNoneConstraint` which match everything and nothing
|
||||
* Added more advanced optimization of contiguous constraints inside MultiConstraint
|
||||
* Added tentative support for PHP 8
|
||||
* Fixed ConstraintInterface::matches to be commutative in all cases
|
||||
|
||||
### [2.0.0] 2020-04-21
|
||||
|
||||
* Break: `dev-master`, `dev-trunk` and `dev-default` now normalize to `dev-master`, `dev-trunk` and `dev-default` instead of `9999999-dev` in 1.x
|
||||
* Break: Removed the deprecated `AbstractConstraint`
|
||||
* Added `getUpperBound` and `getLowerBound` to ConstraintInterface. They return `Composer\Semver\Constraint\Bound` instances
|
||||
* Added `MultiConstraint::create` to create the most-optimal form of ConstraintInterface from an array of constraint strings
|
||||
|
||||
### [1.7.2] 2020-12-03
|
||||
|
||||
* Fixed: Allow installing on php 8
|
||||
|
||||
### [1.7.1] 2020-09-27
|
||||
|
||||
* Fixed: accidental validation of broken constraints combining ^/~ and wildcards, and -dev suffix allowing weird cases
|
||||
* Fixed: normalization of beta0 and such which was dropping the 0
|
||||
|
||||
### [1.7.0] 2020-09-09
|
||||
|
||||
* Added: support for `x || @dev`, not very useful but seen in the wild and failed to validate with 1.5.2/1.6.0
|
||||
* Added: support for `foobar-dev` being equal to `dev-foobar`, dev-foobar is the official way to write it but we need to support the other for BC and convenience
|
||||
|
||||
### [1.6.0] 2020-09-08
|
||||
|
||||
* Added: support for constraints like `^2.x-dev` and `~2.x-dev`, not very useful but seen in the wild and failed to validate with 1.5.2
|
||||
* Fixed: invalid aliases will no longer throw, unless explicitly validated by Composer in the root package
|
||||
|
||||
### [1.5.2] 2020-09-08
|
||||
|
||||
* Fixed: handling of some invalid -dev versions which were seen as valid
|
||||
* Fixed: some doctypes
|
||||
|
||||
### [1.5.1] 2020-01-13
|
||||
|
||||
* Fixed: Parsing of aliased version was not validating the alias to be a valid version
|
||||
@@ -66,6 +145,21 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
- Namespace: `Composer\Test\Package\LinkConstraint` -> `Composer\Test\Semver\Constraint`
|
||||
* Changed: code style using php-cs-fixer.
|
||||
|
||||
[3.2.5]: https://github.com/composer/semver/compare/3.2.4...3.2.5
|
||||
[3.2.4]: https://github.com/composer/semver/compare/3.2.3...3.2.4
|
||||
[3.2.3]: https://github.com/composer/semver/compare/3.2.2...3.2.3
|
||||
[3.2.2]: https://github.com/composer/semver/compare/3.2.1...3.2.2
|
||||
[3.2.1]: https://github.com/composer/semver/compare/3.2.0...3.2.1
|
||||
[3.2.0]: https://github.com/composer/semver/compare/3.1.0...3.2.0
|
||||
[3.1.0]: https://github.com/composer/semver/compare/3.0.1...3.1.0
|
||||
[3.0.1]: https://github.com/composer/semver/compare/3.0.0...3.0.1
|
||||
[3.0.0]: https://github.com/composer/semver/compare/2.0.0...3.0.0
|
||||
[2.0.0]: https://github.com/composer/semver/compare/1.5.1...2.0.0
|
||||
[1.7.2]: https://github.com/composer/semver/compare/1.7.1...1.7.2
|
||||
[1.7.1]: https://github.com/composer/semver/compare/1.7.0...1.7.1
|
||||
[1.7.0]: https://github.com/composer/semver/compare/1.6.0...1.7.0
|
||||
[1.6.0]: https://github.com/composer/semver/compare/1.5.2...1.6.0
|
||||
[1.5.2]: https://github.com/composer/semver/compare/1.5.1...1.5.2
|
||||
[1.5.1]: https://github.com/composer/semver/compare/1.5.0...1.5.1
|
||||
[1.5.0]: https://github.com/composer/semver/compare/1.4.2...1.5.0
|
||||
[1.4.2]: https://github.com/composer/semver/compare/1.4.1...1.4.2
|
||||
|
||||
Vendored
+32
-4
@@ -6,7 +6,7 @@ Semver library that offers utilities, version constraint parsing and validation.
|
||||
Originally written as part of [composer/composer](https://github.com/composer/composer),
|
||||
now extracted and made available as a stand-alone library.
|
||||
|
||||
[](https://travis-ci.org/composer/semver)
|
||||
[](https://github.com/composer/semver/actions)
|
||||
|
||||
|
||||
Installation
|
||||
@@ -37,7 +37,7 @@ Basic usage
|
||||
|
||||
### Comparator
|
||||
|
||||
The `Composer\Semver\Comparator` class provides the following methods for comparing versions:
|
||||
The [`Composer\Semver\Comparator`](https://github.com/composer/semver/blob/main/src/Comparator.php) class provides the following methods for comparing versions:
|
||||
|
||||
* greaterThan($v1, $v2)
|
||||
* greaterThanOrEqualTo($v1, $v2)
|
||||
@@ -46,7 +46,7 @@ The `Composer\Semver\Comparator` class provides the following methods for compar
|
||||
* equalTo($v1, $v2)
|
||||
* notEqualTo($v1, $v2)
|
||||
|
||||
Each function takes two version strings as arguments. For example:
|
||||
Each function takes two version strings as arguments and returns a boolean. For example:
|
||||
|
||||
```php
|
||||
use Composer\Semver\Comparator;
|
||||
@@ -56,13 +56,41 @@ Comparator::greaterThan('1.25.0', '1.24.0'); // 1.25.0 > 1.24.0
|
||||
|
||||
### Semver
|
||||
|
||||
The `Composer\Semver\Semver` class provides the following methods:
|
||||
The [`Composer\Semver\Semver`](https://github.com/composer/semver/blob/main/src/Semver.php) class provides the following methods:
|
||||
|
||||
* satisfies($version, $constraints)
|
||||
* satisfiedBy(array $versions, $constraint)
|
||||
* sort($versions)
|
||||
* rsort($versions)
|
||||
|
||||
### Intervals
|
||||
|
||||
The [`Composer\Semver\Intervals`](https://github.com/composer/semver/blob/main/src/Intervals.php) static class provides
|
||||
a few utilities to work with complex constraints or read version intervals from a constraint:
|
||||
|
||||
```php
|
||||
use Composer\Semver\Intervals;
|
||||
|
||||
// Checks whether $candidate is a subset of $constraint
|
||||
Intervals::isSubsetOf(ConstraintInterface $candidate, ConstraintInterface $constraint);
|
||||
|
||||
// Checks whether $a and $b have any intersection, equivalent to $a->matches($b)
|
||||
Intervals::haveIntersections(ConstraintInterface $a, ConstraintInterface $b);
|
||||
|
||||
// Optimizes a complex multi constraint by merging all intervals down to the smallest
|
||||
// possible multi constraint. The drawbacks are this is not very fast, and the resulting
|
||||
// multi constraint will have no human readable prettyConstraint configured on it
|
||||
Intervals::compactConstraint(ConstraintInterface $constraint);
|
||||
|
||||
// Creates an array of numeric intervals and branch constraints representing a given constraint
|
||||
Intervals::get(ConstraintInterface $constraint);
|
||||
|
||||
// Clears the memoization cache when you are done processing constraints
|
||||
Intervals::clear()
|
||||
```
|
||||
|
||||
See the class docblocks for more details.
|
||||
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
Vendored
+6
-4
@@ -31,10 +31,11 @@
|
||||
"issues": "https://github.com/composer/semver/issues"
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.3.2 || ^7.0"
|
||||
"php": "^5.3.2 || ^7.0 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.5 || ^5.0.5"
|
||||
"symfony/phpunit-bridge": "^4.2 || ^5",
|
||||
"phpstan/phpstan": "^0.12.54"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
@@ -48,10 +49,11 @@
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.x-dev"
|
||||
"dev-main": "3.x-dev"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"test": "phpunit"
|
||||
"test": "SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT=1 vendor/bin/simple-phpunit",
|
||||
"phpstan": "phpstan analyse"
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -101,11 +101,13 @@ class Comparator
|
||||
* @param string $version2
|
||||
*
|
||||
* @return bool
|
||||
*
|
||||
* @phpstan-param Constraint::STR_OP_* $operator
|
||||
*/
|
||||
public static function compare($version1, $operator, $version2)
|
||||
{
|
||||
$constraint = new Constraint($operator, $version2);
|
||||
|
||||
return $constraint->matches(new Constraint('==', $version1));
|
||||
return $constraint->matchSpecific(new Constraint('==', $version1), true);
|
||||
}
|
||||
}
|
||||
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of composer/semver.
|
||||
*
|
||||
* (c) Composer <https://github.com/composer>
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Semver;
|
||||
|
||||
use Composer\Semver\Constraint\Constraint;
|
||||
use Composer\Semver\Constraint\ConstraintInterface;
|
||||
|
||||
/**
|
||||
* Helper class to evaluate constraint by compiling and reusing the code to evaluate
|
||||
*/
|
||||
class CompilingMatcher
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
* @phpstan-var array<string, callable>
|
||||
*/
|
||||
private static $compiledCheckerCache = array();
|
||||
/** @var bool */
|
||||
private static $enabled;
|
||||
|
||||
/**
|
||||
* @phpstan-var array<Constraint::OP_*, Constraint::STR_OP_*>
|
||||
*/
|
||||
private static $transOpInt = array(
|
||||
Constraint::OP_EQ => Constraint::STR_OP_EQ,
|
||||
Constraint::OP_LT => Constraint::STR_OP_LT,
|
||||
Constraint::OP_LE => Constraint::STR_OP_LE,
|
||||
Constraint::OP_GT => Constraint::STR_OP_GT,
|
||||
Constraint::OP_GE => Constraint::STR_OP_GE,
|
||||
Constraint::OP_NE => Constraint::STR_OP_NE,
|
||||
);
|
||||
|
||||
/**
|
||||
* Evaluates the expression: $constraint match $operator $version
|
||||
*
|
||||
* @param ConstraintInterface $constraint
|
||||
* @param int $operator
|
||||
* @phpstan-param Constraint::OP_* $operator
|
||||
* @param string $version
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public static function match(ConstraintInterface $constraint, $operator, $version)
|
||||
{
|
||||
if (self::$enabled === null) {
|
||||
self::$enabled = !\in_array('eval', explode(',', (string) ini_get('disable_functions')), true);
|
||||
}
|
||||
if (!self::$enabled) {
|
||||
return $constraint->matches(new Constraint(self::$transOpInt[$operator], $version));
|
||||
}
|
||||
|
||||
$cacheKey = $operator.$constraint;
|
||||
if (!isset(self::$compiledCheckerCache[$cacheKey])) {
|
||||
$code = $constraint->compile($operator);
|
||||
self::$compiledCheckerCache[$cacheKey] = $function = eval('return function($v, $b){return '.$code.';};');
|
||||
} else {
|
||||
$function = self::$compiledCheckerCache[$cacheKey];
|
||||
}
|
||||
|
||||
return $function($version, strpos($version, 'dev-') === 0);
|
||||
}
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of composer/semver.
|
||||
*
|
||||
* (c) Composer <https://github.com/composer>
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Semver\Constraint;
|
||||
|
||||
trigger_error('The ' . __NAMESPACE__ . '\AbstractConstraint abstract class is deprecated, there is no replacement for it, it will be removed in the next major version.', E_USER_DEPRECATED);
|
||||
|
||||
/**
|
||||
* Base constraint class.
|
||||
*/
|
||||
abstract class AbstractConstraint implements ConstraintInterface
|
||||
{
|
||||
/** @var string */
|
||||
protected $prettyString;
|
||||
|
||||
/**
|
||||
* @param ConstraintInterface $provider
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function matches(ConstraintInterface $provider)
|
||||
{
|
||||
if ($provider instanceof $this) {
|
||||
// see note at bottom of this class declaration
|
||||
return $this->matchSpecific($provider);
|
||||
}
|
||||
|
||||
// turn matching around to find a match
|
||||
return $provider->matches($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $prettyString
|
||||
*/
|
||||
public function setPrettyString($prettyString)
|
||||
{
|
||||
$this->prettyString = $prettyString;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPrettyString()
|
||||
{
|
||||
if ($this->prettyString) {
|
||||
return $this->prettyString;
|
||||
}
|
||||
|
||||
return $this->__toString();
|
||||
}
|
||||
|
||||
// implementations must implement a method of this format:
|
||||
// not declared abstract here because type hinting violates parameter coherence (TODO right word?)
|
||||
// public function matchSpecific(<SpecificConstraintType> $provider);
|
||||
}
|
||||
+122
@@ -0,0 +1,122 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of composer/semver.
|
||||
*
|
||||
* (c) Composer <https://github.com/composer>
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Semver\Constraint;
|
||||
|
||||
class Bound
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $version;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private $isInclusive;
|
||||
|
||||
/**
|
||||
* @param string $version
|
||||
* @param bool $isInclusive
|
||||
*/
|
||||
public function __construct($version, $isInclusive)
|
||||
{
|
||||
$this->version = $version;
|
||||
$this->isInclusive = $isInclusive;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getVersion()
|
||||
{
|
||||
return $this->version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isInclusive()
|
||||
{
|
||||
return $this->isInclusive;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isZero()
|
||||
{
|
||||
return $this->getVersion() === '0.0.0.0-dev' && $this->isInclusive();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isPositiveInfinity()
|
||||
{
|
||||
return $this->getVersion() === PHP_INT_MAX.'.0.0.0' && !$this->isInclusive();
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares a bound to another with a given operator.
|
||||
*
|
||||
* @param Bound $other
|
||||
* @param string $operator
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function compareTo(Bound $other, $operator)
|
||||
{
|
||||
if (!\in_array($operator, array('<', '>'), true)) {
|
||||
throw new \InvalidArgumentException('Does not support any other operator other than > or <.');
|
||||
}
|
||||
|
||||
// If they are the same it doesn't matter
|
||||
if ($this == $other) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$compareResult = version_compare($this->getVersion(), $other->getVersion());
|
||||
|
||||
// Not the same version means we don't need to check if the bounds are inclusive or not
|
||||
if (0 !== $compareResult) {
|
||||
return (('>' === $operator) ? 1 : -1) === $compareResult;
|
||||
}
|
||||
|
||||
// Question we're answering here is "am I higher than $other?"
|
||||
return '>' === $operator ? $other->isInclusive() : !$other->isInclusive();
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return sprintf(
|
||||
'%s [%s]',
|
||||
$this->getVersion(),
|
||||
$this->isInclusive() ? 'inclusive' : 'exclusive'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return self
|
||||
*/
|
||||
public static function zero()
|
||||
{
|
||||
return new Bound('0.0.0.0-dev', true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return self
|
||||
*/
|
||||
public static function positiveInfinity()
|
||||
{
|
||||
return new Bound(PHP_INT_MAX.'.0.0.0', false);
|
||||
}
|
||||
}
|
||||
+277
-57
@@ -24,10 +24,21 @@ class Constraint implements ConstraintInterface
|
||||
const OP_GE = 4;
|
||||
const OP_NE = 5;
|
||||
|
||||
/* operator string values */
|
||||
const STR_OP_EQ = '==';
|
||||
const STR_OP_EQ_ALT = '=';
|
||||
const STR_OP_LT = '<';
|
||||
const STR_OP_LE = '<=';
|
||||
const STR_OP_GT = '>';
|
||||
const STR_OP_GE = '>=';
|
||||
const STR_OP_NE = '!=';
|
||||
const STR_OP_NE_ALT = '<>';
|
||||
|
||||
/**
|
||||
* Operator to integer translation table.
|
||||
*
|
||||
* @var array
|
||||
* @phpstan-var array<self::STR_OP_*, self::OP_*>
|
||||
*/
|
||||
private static $transOpStr = array(
|
||||
'=' => self::OP_EQ,
|
||||
@@ -44,6 +55,7 @@ class Constraint implements ConstraintInterface
|
||||
* Integer to operator translation table.
|
||||
*
|
||||
* @var array
|
||||
* @phpstan-var array<self::OP_*, self::STR_OP_*>
|
||||
*/
|
||||
private static $transOpInt = array(
|
||||
self::OP_EQ => '==',
|
||||
@@ -54,59 +66,23 @@ class Constraint implements ConstraintInterface
|
||||
self::OP_NE => '!=',
|
||||
);
|
||||
|
||||
/** @var string */
|
||||
/**
|
||||
* @var int
|
||||
* @phpstan-var self::OP_*
|
||||
*/
|
||||
protected $operator;
|
||||
|
||||
/** @var string */
|
||||
protected $version;
|
||||
|
||||
/** @var string */
|
||||
/** @var string|null */
|
||||
protected $prettyString;
|
||||
|
||||
/**
|
||||
* @param ConstraintInterface $provider
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function matches(ConstraintInterface $provider)
|
||||
{
|
||||
if ($provider instanceof $this) {
|
||||
return $this->matchSpecific($provider);
|
||||
}
|
||||
/** @var Bound */
|
||||
protected $lowerBound;
|
||||
|
||||
// turn matching around to find a match
|
||||
return $provider->matches($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $prettyString
|
||||
*/
|
||||
public function setPrettyString($prettyString)
|
||||
{
|
||||
$this->prettyString = $prettyString;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPrettyString()
|
||||
{
|
||||
if ($this->prettyString) {
|
||||
return $this->prettyString;
|
||||
}
|
||||
|
||||
return $this->__toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all supported comparison operators.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getSupportedOperators()
|
||||
{
|
||||
return array_keys(self::$transOpStr);
|
||||
}
|
||||
/** @var Bound */
|
||||
protected $upperBound;
|
||||
|
||||
/**
|
||||
* Sets operator and version to compare with.
|
||||
@@ -115,6 +91,8 @@ class Constraint implements ConstraintInterface
|
||||
* @param string $version
|
||||
*
|
||||
* @throws \InvalidArgumentException if invalid operator is given.
|
||||
*
|
||||
* @phpstan-param self::STR_OP_* $operator
|
||||
*/
|
||||
public function __construct($operator, $version)
|
||||
{
|
||||
@@ -130,15 +108,94 @@ class Constraint implements ConstraintInterface
|
||||
$this->version = $version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getVersion()
|
||||
{
|
||||
return $this->version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*
|
||||
* @phpstan-return self::STR_OP_*
|
||||
*/
|
||||
public function getOperator()
|
||||
{
|
||||
return self::$transOpInt[$this->operator];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ConstraintInterface $provider
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function matches(ConstraintInterface $provider)
|
||||
{
|
||||
if ($provider instanceof self) {
|
||||
return $this->matchSpecific($provider);
|
||||
}
|
||||
|
||||
// turn matching around to find a match
|
||||
return $provider->matches($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function setPrettyString($prettyString)
|
||||
{
|
||||
$this->prettyString = $prettyString;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getPrettyString()
|
||||
{
|
||||
if ($this->prettyString) {
|
||||
return $this->prettyString;
|
||||
}
|
||||
|
||||
return $this->__toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all supported comparison operators.
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @phpstan-return list<self::STR_OP_*>
|
||||
*/
|
||||
public static function getSupportedOperators()
|
||||
{
|
||||
return array_keys(self::$transOpStr);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $operator
|
||||
* @return int
|
||||
*
|
||||
* @phpstan-param self::STR_OP_* $operator
|
||||
* @phpstan-return self::OP_*
|
||||
*/
|
||||
public static function getOperatorConstant($operator)
|
||||
{
|
||||
return self::$transOpStr[$operator];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $a
|
||||
* @param string $b
|
||||
* @param string $operator
|
||||
* @param bool $compareBranches
|
||||
* @param bool $compareBranches
|
||||
*
|
||||
* @throws \InvalidArgumentException if invalid operator is given.
|
||||
*
|
||||
* @return bool
|
||||
*
|
||||
* @phpstan-param self::STR_OP_* $operator
|
||||
*/
|
||||
public function versionCompare($a, $b, $operator, $compareBranches = false)
|
||||
{
|
||||
@@ -150,8 +207,12 @@ class Constraint implements ConstraintInterface
|
||||
));
|
||||
}
|
||||
|
||||
$aIsBranch = 'dev-' === substr($a, 0, 4);
|
||||
$bIsBranch = 'dev-' === substr($b, 0, 4);
|
||||
$aIsBranch = strpos($a, 'dev-') === 0;
|
||||
$bIsBranch = strpos($b, 'dev-') === 0;
|
||||
|
||||
if ($operator === '!=' && ($aIsBranch || $bIsBranch)) {
|
||||
return $a !== $b;
|
||||
}
|
||||
|
||||
if ($aIsBranch && $bIsBranch) {
|
||||
return $operator === '==' && $a === $b;
|
||||
@@ -162,12 +223,91 @@ class Constraint implements ConstraintInterface
|
||||
return false;
|
||||
}
|
||||
|
||||
return version_compare($a, $b, $operator);
|
||||
return \version_compare($a, $b, $operator);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function compile($otherOperator)
|
||||
{
|
||||
if (strpos($this->version, 'dev-') === 0) {
|
||||
if (self::OP_EQ === $this->operator) {
|
||||
if (self::OP_EQ === $otherOperator) {
|
||||
return sprintf('$b && $v === %s', \var_export($this->version, true));
|
||||
}
|
||||
if (self::OP_NE === $otherOperator) {
|
||||
return sprintf('!$b || $v !== %s', \var_export($this->version, true));
|
||||
}
|
||||
return 'false';
|
||||
}
|
||||
|
||||
if (self::OP_NE === $this->operator) {
|
||||
if (self::OP_EQ === $otherOperator) {
|
||||
return sprintf('!$b || $v !== %s', \var_export($this->version, true));
|
||||
}
|
||||
if (self::OP_NE === $otherOperator) {
|
||||
return 'true';
|
||||
}
|
||||
return '!$b';
|
||||
}
|
||||
|
||||
return 'false';
|
||||
}
|
||||
|
||||
if (self::OP_EQ === $this->operator) {
|
||||
if (self::OP_EQ === $otherOperator) {
|
||||
return sprintf('\version_compare($v, %s, \'==\')', \var_export($this->version, true));
|
||||
}
|
||||
if (self::OP_NE === $otherOperator) {
|
||||
return sprintf('$b || \version_compare($v, %s, \'!=\')', \var_export($this->version, true));
|
||||
}
|
||||
|
||||
return sprintf('!$b && \version_compare(%s, $v, \'%s\')', \var_export($this->version, true), self::$transOpInt[$otherOperator]);
|
||||
}
|
||||
|
||||
if (self::OP_NE === $this->operator) {
|
||||
if (self::OP_EQ === $otherOperator) {
|
||||
return sprintf('$b || (!$b && \version_compare($v, %s, \'!=\'))', \var_export($this->version, true));
|
||||
}
|
||||
|
||||
if (self::OP_NE === $otherOperator) {
|
||||
return 'true';
|
||||
}
|
||||
return '!$b';
|
||||
}
|
||||
|
||||
if (self::OP_LT === $this->operator || self::OP_LE === $this->operator) {
|
||||
if (self::OP_LT === $otherOperator || self::OP_LE === $otherOperator) {
|
||||
return '!$b';
|
||||
}
|
||||
} else { // $this->operator must be self::OP_GT || self::OP_GE here
|
||||
if (self::OP_GT === $otherOperator || self::OP_GE === $otherOperator) {
|
||||
return '!$b';
|
||||
}
|
||||
}
|
||||
|
||||
if (self::OP_NE === $otherOperator) {
|
||||
return 'true';
|
||||
}
|
||||
|
||||
$codeComparison = sprintf('\version_compare($v, %s, \'%s\')', \var_export($this->version, true), self::$transOpInt[$this->operator]);
|
||||
if ($this->operator === self::OP_LE) {
|
||||
if ($otherOperator === self::OP_GT) {
|
||||
return sprintf('!$b && \version_compare($v, %s, \'!=\') && ', \var_export($this->version, true)) . $codeComparison;
|
||||
}
|
||||
} elseif ($this->operator === self::OP_GE) {
|
||||
if ($otherOperator === self::OP_LT) {
|
||||
return sprintf('!$b && \version_compare($v, %s, \'!=\') && ', \var_export($this->version, true)) . $codeComparison;
|
||||
}
|
||||
}
|
||||
|
||||
return sprintf('!$b && %s', $codeComparison);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Constraint $provider
|
||||
* @param bool $compareBranches
|
||||
* @param bool $compareBranches
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
@@ -184,22 +324,37 @@ class Constraint implements ConstraintInterface
|
||||
// '!=' operator is match when other operator is not '==' operator or version is not match
|
||||
// these kinds of comparisons always have a solution
|
||||
if ($isNonEqualOp || $isProviderNonEqualOp) {
|
||||
return (!$isEqualOp && !$isProviderEqualOp)
|
||||
|| $this->versionCompare($provider->version, $this->version, '!=', $compareBranches);
|
||||
if ($isNonEqualOp && !$isProviderNonEqualOp && !$isProviderEqualOp && strpos($provider->version, 'dev-') === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($isProviderNonEqualOp && !$isNonEqualOp && !$isEqualOp && strpos($this->version, 'dev-') === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$isEqualOp && !$isProviderEqualOp) {
|
||||
return true;
|
||||
}
|
||||
return $this->versionCompare($provider->version, $this->version, '!=', $compareBranches);
|
||||
}
|
||||
|
||||
// an example for the condition is <= 2.0 & < 1.0
|
||||
// these kinds of comparisons always have a solution
|
||||
if ($this->operator !== self::OP_EQ && $noEqualOp === $providerNoEqualOp) {
|
||||
return true;
|
||||
return !(strpos($this->version, 'dev-') === 0 || strpos($provider->version, 'dev-') === 0);
|
||||
}
|
||||
|
||||
if ($this->versionCompare($provider->version, $this->version, self::$transOpInt[$this->operator], $compareBranches)) {
|
||||
$version1 = $isEqualOp ? $this->version : $provider->version;
|
||||
$version2 = $isEqualOp ? $provider->version : $this->version;
|
||||
$operator = $isEqualOp ? $provider->operator : $this->operator;
|
||||
|
||||
if ($this->versionCompare($version1, $version2, self::$transOpInt[$operator], $compareBranches)) {
|
||||
// special case, e.g. require >= 1.0 and provide < 1.0
|
||||
// 1.0 >= 1.0 but 1.0 is outside of the provided interval
|
||||
return !($provider->version === $this->version
|
||||
&& self::$transOpInt[$provider->operator] === $providerNoEqualOp
|
||||
&& self::$transOpInt[$this->operator] !== $noEqualOp);
|
||||
|
||||
return !(self::$transOpInt[$provider->operator] === $providerNoEqualOp
|
||||
&& self::$transOpInt[$this->operator] !== $noEqualOp
|
||||
&& \version_compare($provider->version, $this->version, '=='));
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -212,4 +367,69 @@ class Constraint implements ConstraintInterface
|
||||
{
|
||||
return self::$transOpInt[$this->operator] . ' ' . $this->version;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getLowerBound()
|
||||
{
|
||||
$this->extractBounds();
|
||||
|
||||
return $this->lowerBound;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getUpperBound()
|
||||
{
|
||||
$this->extractBounds();
|
||||
|
||||
return $this->upperBound;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
private function extractBounds()
|
||||
{
|
||||
if (null !== $this->lowerBound) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Branches
|
||||
if (strpos($this->version, 'dev-') === 0) {
|
||||
$this->lowerBound = Bound::zero();
|
||||
$this->upperBound = Bound::positiveInfinity();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
switch ($this->operator) {
|
||||
case self::OP_EQ:
|
||||
$this->lowerBound = new Bound($this->version, true);
|
||||
$this->upperBound = new Bound($this->version, true);
|
||||
break;
|
||||
case self::OP_LT:
|
||||
$this->lowerBound = Bound::zero();
|
||||
$this->upperBound = new Bound($this->version, false);
|
||||
break;
|
||||
case self::OP_LE:
|
||||
$this->lowerBound = Bound::zero();
|
||||
$this->upperBound = new Bound($this->version, true);
|
||||
break;
|
||||
case self::OP_GT:
|
||||
$this->lowerBound = new Bound($this->version, false);
|
||||
$this->upperBound = Bound::positiveInfinity();
|
||||
break;
|
||||
case self::OP_GE:
|
||||
$this->lowerBound = new Bound($this->version, true);
|
||||
$this->upperBound = Bound::positiveInfinity();
|
||||
break;
|
||||
case self::OP_NE:
|
||||
$this->lowerBound = Bound::zero();
|
||||
$this->upperBound = Bound::positiveInfinity();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,20 +11,63 @@
|
||||
|
||||
namespace Composer\Semver\Constraint;
|
||||
|
||||
/**
|
||||
* DO NOT IMPLEMENT this interface. It is only meant for usage as a type hint
|
||||
* in libraries relying on composer/semver but creating your own constraint class
|
||||
* that implements this interface is not a supported use case and will cause the
|
||||
* composer/semver components to return unexpected results.
|
||||
*/
|
||||
interface ConstraintInterface
|
||||
{
|
||||
/**
|
||||
* Checks whether the given constraint intersects in any way with this constraint
|
||||
*
|
||||
* @param ConstraintInterface $provider
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function matches(ConstraintInterface $provider);
|
||||
|
||||
/**
|
||||
* Provides a compiled version of the constraint for the given operator
|
||||
* The compiled version must be a PHP expression.
|
||||
* Executor of compile version must provide 2 variables:
|
||||
* - $v = the string version to compare with
|
||||
* - $b = whether or not the version is a non-comparable branch (starts with "dev-")
|
||||
*
|
||||
* @see Constraint::OP_* for the list of available operators.
|
||||
* @example return '!$b && version_compare($v, '1.0', '>')';
|
||||
*
|
||||
* @param int $otherOperator one Constraint::OP_*
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @phpstan-param Constraint::OP_* $otherOperator
|
||||
*/
|
||||
public function compile($otherOperator);
|
||||
|
||||
/**
|
||||
* @return Bound
|
||||
*/
|
||||
public function getUpperBound();
|
||||
|
||||
/**
|
||||
* @return Bound
|
||||
*/
|
||||
public function getLowerBound();
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPrettyString();
|
||||
|
||||
/**
|
||||
* @param string|null $prettyString
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setPrettyString($prettyString);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
|
||||
+32
-6
@@ -13,10 +13,12 @@ namespace Composer\Semver\Constraint;
|
||||
|
||||
/**
|
||||
* Defines the absence of a constraint.
|
||||
*
|
||||
* This constraint matches everything.
|
||||
*/
|
||||
class EmptyConstraint implements ConstraintInterface
|
||||
class MatchAllConstraint implements ConstraintInterface
|
||||
{
|
||||
/** @var string */
|
||||
/** @var string|null */
|
||||
protected $prettyString;
|
||||
|
||||
/**
|
||||
@@ -30,7 +32,15 @@ class EmptyConstraint implements ConstraintInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $prettyString
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function compile($otherOperator)
|
||||
{
|
||||
return 'true';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function setPrettyString($prettyString)
|
||||
{
|
||||
@@ -38,7 +48,7 @@ class EmptyConstraint implements ConstraintInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getPrettyString()
|
||||
{
|
||||
@@ -50,10 +60,26 @@ class EmptyConstraint implements ConstraintInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return '[]';
|
||||
return '*';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getUpperBound()
|
||||
{
|
||||
return Bound::positiveInfinity();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getLowerBound()
|
||||
{
|
||||
return Bound::zero();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of composer/semver.
|
||||
*
|
||||
* (c) Composer <https://github.com/composer>
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Semver\Constraint;
|
||||
|
||||
/**
|
||||
* Blackhole of constraints, nothing escapes it
|
||||
*/
|
||||
class MatchNoneConstraint implements ConstraintInterface
|
||||
{
|
||||
/** @var string|null */
|
||||
protected $prettyString;
|
||||
|
||||
/**
|
||||
* @param ConstraintInterface $provider
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function matches(ConstraintInterface $provider)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function compile($otherOperator)
|
||||
{
|
||||
return 'false';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function setPrettyString($prettyString)
|
||||
{
|
||||
$this->prettyString = $prettyString;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getPrettyString()
|
||||
{
|
||||
if ($this->prettyString) {
|
||||
return $this->prettyString;
|
||||
}
|
||||
|
||||
return (string) $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return '[]';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getUpperBound()
|
||||
{
|
||||
return new Bound('0.0.0.0-dev', false);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getLowerBound()
|
||||
{
|
||||
return new Bound('0.0.0.0-dev', false);
|
||||
}
|
||||
}
|
||||
+214
-9
@@ -16,21 +16,43 @@ namespace Composer\Semver\Constraint;
|
||||
*/
|
||||
class MultiConstraint implements ConstraintInterface
|
||||
{
|
||||
/** @var ConstraintInterface[] */
|
||||
/**
|
||||
* @var ConstraintInterface[]
|
||||
* @phpstan-var non-empty-array<ConstraintInterface>
|
||||
*/
|
||||
protected $constraints;
|
||||
|
||||
/** @var string */
|
||||
/** @var string|null */
|
||||
protected $prettyString;
|
||||
|
||||
/** @var string|null */
|
||||
protected $string;
|
||||
|
||||
/** @var bool */
|
||||
protected $conjunctive;
|
||||
|
||||
/** @var Bound|null */
|
||||
protected $lowerBound;
|
||||
|
||||
/** @var Bound|null */
|
||||
protected $upperBound;
|
||||
|
||||
/**
|
||||
* @param ConstraintInterface[] $constraints A set of constraints
|
||||
* @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive
|
||||
* @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive
|
||||
*
|
||||
* @throws \InvalidArgumentException If less than 2 constraints are passed
|
||||
*/
|
||||
public function __construct(array $constraints, $conjunctive = true)
|
||||
{
|
||||
if (\count($constraints) < 2) {
|
||||
throw new \InvalidArgumentException(
|
||||
'Must provide at least two constraints for a MultiConstraint. Use '.
|
||||
'the regular Constraint class for one constraint only or MatchAllConstraint for none. You may use '.
|
||||
'MultiConstraint::create() which optimizes and handles those cases automatically.'
|
||||
);
|
||||
}
|
||||
|
||||
$this->constraints = $constraints;
|
||||
$this->conjunctive = $conjunctive;
|
||||
}
|
||||
@@ -59,6 +81,34 @@ class MultiConstraint implements ConstraintInterface
|
||||
return !$this->conjunctive;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function compile($otherOperator)
|
||||
{
|
||||
$parts = array();
|
||||
foreach ($this->constraints as $constraint) {
|
||||
$code = $constraint->compile($otherOperator);
|
||||
if ($code === 'true') {
|
||||
if (!$this->conjunctive) {
|
||||
return 'true';
|
||||
}
|
||||
} elseif ($code === 'false') {
|
||||
if ($this->conjunctive) {
|
||||
return 'false';
|
||||
}
|
||||
} else {
|
||||
$parts[] = '('.$code.')';
|
||||
}
|
||||
}
|
||||
|
||||
if (!$parts) {
|
||||
return $this->conjunctive ? 'true' : 'false';
|
||||
}
|
||||
|
||||
return $this->conjunctive ? implode('&&', $parts) : implode('||', $parts);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ConstraintInterface $provider
|
||||
*
|
||||
@@ -68,7 +118,7 @@ class MultiConstraint implements ConstraintInterface
|
||||
{
|
||||
if (false === $this->conjunctive) {
|
||||
foreach ($this->constraints as $constraint) {
|
||||
if ($constraint->matches($provider)) {
|
||||
if ($provider->matches($constraint)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -76,8 +126,15 @@ class MultiConstraint implements ConstraintInterface
|
||||
return false;
|
||||
}
|
||||
|
||||
// when matching a conjunctive and a disjunctive multi constraint we have to iterate over the disjunctive one
|
||||
// otherwise we'd return true if different parts of the disjunctive constraint match the conjunctive one
|
||||
// which would lead to incorrect results, e.g. [>1 and <2] would match [<1 or >2] although they do not intersect
|
||||
if ($provider instanceof MultiConstraint && $provider->isDisjunctive()) {
|
||||
return $provider->matches($this);
|
||||
}
|
||||
|
||||
foreach ($this->constraints as $constraint) {
|
||||
if (!$constraint->matches($provider)) {
|
||||
if (!$provider->matches($constraint)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -86,7 +143,7 @@ class MultiConstraint implements ConstraintInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $prettyString
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function setPrettyString($prettyString)
|
||||
{
|
||||
@@ -94,7 +151,7 @@ class MultiConstraint implements ConstraintInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getPrettyString()
|
||||
{
|
||||
@@ -106,15 +163,163 @@ class MultiConstraint implements ConstraintInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
if ($this->string !== null) {
|
||||
return $this->string;
|
||||
}
|
||||
|
||||
$constraints = array();
|
||||
foreach ($this->constraints as $constraint) {
|
||||
$constraints[] = (string) $constraint;
|
||||
}
|
||||
|
||||
return '[' . implode($this->conjunctive ? ' ' : ' || ', $constraints) . ']';
|
||||
return $this->string = '[' . implode($this->conjunctive ? ' ' : ' || ', $constraints) . ']';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getLowerBound()
|
||||
{
|
||||
$this->extractBounds();
|
||||
|
||||
if (null === $this->lowerBound) {
|
||||
throw new \LogicException('extractBounds should have populated the lowerBound property');
|
||||
}
|
||||
|
||||
return $this->lowerBound;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getUpperBound()
|
||||
{
|
||||
$this->extractBounds();
|
||||
|
||||
if (null === $this->upperBound) {
|
||||
throw new \LogicException('extractBounds should have populated the upperBound property');
|
||||
}
|
||||
|
||||
return $this->upperBound;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to optimize the constraints as much as possible, meaning
|
||||
* reducing/collapsing congruent constraints etc.
|
||||
* Does not necessarily return a MultiConstraint instance if
|
||||
* things can be reduced to a simple constraint
|
||||
*
|
||||
* @param ConstraintInterface[] $constraints A set of constraints
|
||||
* @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive
|
||||
*
|
||||
* @return ConstraintInterface
|
||||
*/
|
||||
public static function create(array $constraints, $conjunctive = true)
|
||||
{
|
||||
if (0 === \count($constraints)) {
|
||||
return new MatchAllConstraint();
|
||||
}
|
||||
|
||||
if (1 === \count($constraints)) {
|
||||
return $constraints[0];
|
||||
}
|
||||
|
||||
$optimized = self::optimizeConstraints($constraints, $conjunctive);
|
||||
if ($optimized !== null) {
|
||||
list($constraints, $conjunctive) = $optimized;
|
||||
if (\count($constraints) === 1) {
|
||||
return $constraints[0];
|
||||
}
|
||||
}
|
||||
|
||||
return new self($constraints, $conjunctive);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ConstraintInterface[] $constraints
|
||||
* @param bool $conjunctive
|
||||
* @return ?array
|
||||
*
|
||||
* @phpstan-return array{0: list<ConstraintInterface>, 1: bool}|null
|
||||
*/
|
||||
private static function optimizeConstraints(array $constraints, $conjunctive)
|
||||
{
|
||||
// parse the two OR groups and if they are contiguous we collapse
|
||||
// them into one constraint
|
||||
// [>= 1 < 2] || [>= 2 < 3] || [>= 3 < 4] => [>= 1 < 4]
|
||||
if (!$conjunctive) {
|
||||
$left = $constraints[0];
|
||||
$mergedConstraints = array();
|
||||
$optimized = false;
|
||||
for ($i = 1, $l = \count($constraints); $i < $l; $i++) {
|
||||
$right = $constraints[$i];
|
||||
if (
|
||||
$left instanceof self
|
||||
&& $left->conjunctive
|
||||
&& $right instanceof self
|
||||
&& $right->conjunctive
|
||||
&& \count($left->constraints) === 2
|
||||
&& \count($right->constraints) === 2
|
||||
&& ($left0 = (string) $left->constraints[0])
|
||||
&& $left0[0] === '>' && $left0[1] === '='
|
||||
&& ($left1 = (string) $left->constraints[1])
|
||||
&& $left1[0] === '<'
|
||||
&& ($right0 = (string) $right->constraints[0])
|
||||
&& $right0[0] === '>' && $right0[1] === '='
|
||||
&& ($right1 = (string) $right->constraints[1])
|
||||
&& $right1[0] === '<'
|
||||
&& substr($left1, 2) === substr($right0, 3)
|
||||
) {
|
||||
$optimized = true;
|
||||
$left = new MultiConstraint(
|
||||
array(
|
||||
$left->constraints[0],
|
||||
$right->constraints[1],
|
||||
),
|
||||
true);
|
||||
} else {
|
||||
$mergedConstraints[] = $left;
|
||||
$left = $right;
|
||||
}
|
||||
}
|
||||
if ($optimized) {
|
||||
$mergedConstraints[] = $left;
|
||||
return array($mergedConstraints, false);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Here's the place to put more optimizations
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
private function extractBounds()
|
||||
{
|
||||
if (null !== $this->lowerBound) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($this->constraints as $constraint) {
|
||||
if (null === $this->lowerBound || null === $this->upperBound) {
|
||||
$this->lowerBound = $constraint->getLowerBound();
|
||||
$this->upperBound = $constraint->getUpperBound();
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($constraint->getLowerBound()->compareTo($this->lowerBound, $this->isConjunctive() ? '>' : '<')) {
|
||||
$this->lowerBound = $constraint->getLowerBound();
|
||||
}
|
||||
|
||||
if ($constraint->getUpperBound()->compareTo($this->upperBound, $this->isConjunctive() ? '<' : '>')) {
|
||||
$this->upperBound = $constraint->getUpperBound();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+98
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of composer/semver.
|
||||
*
|
||||
* (c) Composer <https://github.com/composer>
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Semver;
|
||||
|
||||
use Composer\Semver\Constraint\Constraint;
|
||||
|
||||
class Interval
|
||||
{
|
||||
/** @var Constraint */
|
||||
private $start;
|
||||
/** @var Constraint */
|
||||
private $end;
|
||||
|
||||
public function __construct(Constraint $start, Constraint $end)
|
||||
{
|
||||
$this->start = $start;
|
||||
$this->end = $end;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Constraint
|
||||
*/
|
||||
public function getStart()
|
||||
{
|
||||
return $this->start;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Constraint
|
||||
*/
|
||||
public function getEnd()
|
||||
{
|
||||
return $this->end;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Constraint
|
||||
*/
|
||||
public static function fromZero()
|
||||
{
|
||||
static $zero;
|
||||
|
||||
if (null === $zero) {
|
||||
$zero = new Constraint('>=', '0.0.0.0-dev');
|
||||
}
|
||||
|
||||
return $zero;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Constraint
|
||||
*/
|
||||
public static function untilPositiveInfinity()
|
||||
{
|
||||
static $positiveInfinity;
|
||||
|
||||
if (null === $positiveInfinity) {
|
||||
$positiveInfinity = new Constraint('<', PHP_INT_MAX.'.0.0.0');
|
||||
}
|
||||
|
||||
return $positiveInfinity;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return self
|
||||
*/
|
||||
public static function any()
|
||||
{
|
||||
return new self(self::fromZero(), self::untilPositiveInfinity());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{'names': string[], 'exclude': bool}
|
||||
*/
|
||||
public static function anyDev()
|
||||
{
|
||||
// any == exclude nothing
|
||||
return array('names' => array(), 'exclude' => true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{'names': string[], 'exclude': bool}
|
||||
*/
|
||||
public static function noDev()
|
||||
{
|
||||
// nothing == no names included
|
||||
return array('names' => array(), 'exclude' => false);
|
||||
}
|
||||
}
|
||||
+478
@@ -0,0 +1,478 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of composer/semver.
|
||||
*
|
||||
* (c) Composer <https://github.com/composer>
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Semver;
|
||||
|
||||
use Composer\Semver\Constraint\Constraint;
|
||||
use Composer\Semver\Constraint\ConstraintInterface;
|
||||
use Composer\Semver\Constraint\MatchAllConstraint;
|
||||
use Composer\Semver\Constraint\MatchNoneConstraint;
|
||||
use Composer\Semver\Constraint\MultiConstraint;
|
||||
|
||||
/**
|
||||
* Helper class generating intervals from constraints
|
||||
*
|
||||
* This contains utilities for:
|
||||
*
|
||||
* - compacting an existing constraint which can be used to combine several into one
|
||||
* by creating a MultiConstraint out of the many constraints you have.
|
||||
*
|
||||
* - checking whether one subset is a subset of another.
|
||||
*
|
||||
* Note: You should call clear to free memoization memory usage when you are done using this class
|
||||
*/
|
||||
class Intervals
|
||||
{
|
||||
/**
|
||||
* @phpstan-var array<string, array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}}>
|
||||
*/
|
||||
private static $intervalsCache = array();
|
||||
|
||||
/**
|
||||
* @phpstan-var array<string, int>
|
||||
*/
|
||||
private static $opSortOrder = array(
|
||||
'>=' => -3,
|
||||
'<' => -2,
|
||||
'>' => 2,
|
||||
'<=' => 3,
|
||||
);
|
||||
|
||||
/**
|
||||
* Clears the memoization cache once you are done
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function clear()
|
||||
{
|
||||
self::$intervalsCache = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether $candidate is a subset of $constraint
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function isSubsetOf(ConstraintInterface $candidate, ConstraintInterface $constraint)
|
||||
{
|
||||
if ($constraint instanceof MatchAllConstraint) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($candidate instanceof MatchNoneConstraint || $constraint instanceof MatchNoneConstraint) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$intersectionIntervals = self::get(new MultiConstraint(array($candidate, $constraint), true));
|
||||
$candidateIntervals = self::get($candidate);
|
||||
if (\count($intersectionIntervals['numeric']) !== \count($candidateIntervals['numeric'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ($intersectionIntervals['numeric'] as $index => $interval) {
|
||||
if (!isset($candidateIntervals['numeric'][$index])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((string) $candidateIntervals['numeric'][$index]->getStart() !== (string) $interval->getStart()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((string) $candidateIntervals['numeric'][$index]->getEnd() !== (string) $interval->getEnd()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($intersectionIntervals['branches']['exclude'] !== $candidateIntervals['branches']['exclude']) {
|
||||
return false;
|
||||
}
|
||||
if (\count($intersectionIntervals['branches']['names']) !== \count($candidateIntervals['branches']['names'])) {
|
||||
return false;
|
||||
}
|
||||
foreach ($intersectionIntervals['branches']['names'] as $index => $name) {
|
||||
if ($name !== $candidateIntervals['branches']['names'][$index]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether $a and $b have any intersection, equivalent to $a->matches($b)
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function haveIntersections(ConstraintInterface $a, ConstraintInterface $b)
|
||||
{
|
||||
if ($a instanceof MatchAllConstraint || $b instanceof MatchAllConstraint) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($a instanceof MatchNoneConstraint || $b instanceof MatchNoneConstraint) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$intersectionIntervals = self::generateIntervals(new MultiConstraint(array($a, $b), true), true);
|
||||
|
||||
return \count($intersectionIntervals['numeric']) > 0 || $intersectionIntervals['branches']['exclude'] || \count($intersectionIntervals['branches']['names']) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempts to optimize a MultiConstraint
|
||||
*
|
||||
* When merging MultiConstraints together they can get very large, this will
|
||||
* compact it by looking at the real intervals covered by all the constraints
|
||||
* and then creates a new constraint containing only the smallest amount of rules
|
||||
* to match the same intervals.
|
||||
*
|
||||
* @return ConstraintInterface
|
||||
*/
|
||||
public static function compactConstraint(ConstraintInterface $constraint)
|
||||
{
|
||||
if (!$constraint instanceof MultiConstraint) {
|
||||
return $constraint;
|
||||
}
|
||||
|
||||
$intervals = self::generateIntervals($constraint);
|
||||
$constraints = array();
|
||||
$hasNumericMatchAll = false;
|
||||
|
||||
if (\count($intervals['numeric']) === 1 && (string) $intervals['numeric'][0]->getStart() === (string) Interval::fromZero() && (string) $intervals['numeric'][0]->getEnd() === (string) Interval::untilPositiveInfinity()) {
|
||||
$constraints[] = $intervals['numeric'][0]->getStart();
|
||||
$hasNumericMatchAll = true;
|
||||
} else {
|
||||
$unEqualConstraints = array();
|
||||
for ($i = 0, $count = \count($intervals['numeric']); $i < $count; $i++) {
|
||||
$interval = $intervals['numeric'][$i];
|
||||
|
||||
// if current interval ends with < N and next interval begins with > N we can swap this out for != N
|
||||
// but this needs to happen as a conjunctive expression together with the start of the current interval
|
||||
// and end of next interval, so [>=M, <N] || [>N, <P] => [>=M, !=N, <P] but M/P can be skipped if
|
||||
// they are zero/+inf
|
||||
if ($interval->getEnd()->getOperator() === '<' && $i+1 < $count) {
|
||||
$nextInterval = $intervals['numeric'][$i+1];
|
||||
if ($interval->getEnd()->getVersion() === $nextInterval->getStart()->getVersion() && $nextInterval->getStart()->getOperator() === '>') {
|
||||
// only add a start if we didn't already do so, can be skipped if we're looking at second
|
||||
// interval in [>=M, <N] || [>N, <P] || [>P, <Q] where unEqualConstraints currently contains
|
||||
// [>=M, !=N] already and we only want to add !=P right now
|
||||
if (\count($unEqualConstraints) === 0 && (string) $interval->getStart() !== (string) Interval::fromZero()) {
|
||||
$unEqualConstraints[] = $interval->getStart();
|
||||
}
|
||||
$unEqualConstraints[] = new Constraint('!=', $interval->getEnd()->getVersion());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (\count($unEqualConstraints) > 0) {
|
||||
// this is where the end of the following interval of a != constraint is added as explained above
|
||||
if ((string) $interval->getEnd() !== (string) Interval::untilPositiveInfinity()) {
|
||||
$unEqualConstraints[] = $interval->getEnd();
|
||||
}
|
||||
|
||||
// count is 1 if entire constraint is just one != expression
|
||||
if (\count($unEqualConstraints) > 1) {
|
||||
$constraints[] = new MultiConstraint($unEqualConstraints, true);
|
||||
} else {
|
||||
$constraints[] = $unEqualConstraints[0];
|
||||
}
|
||||
|
||||
$unEqualConstraints = array();
|
||||
continue;
|
||||
}
|
||||
|
||||
// convert back >= x - <= x intervals to == x
|
||||
if ($interval->getStart()->getVersion() === $interval->getEnd()->getVersion() && $interval->getStart()->getOperator() === '>=' && $interval->getEnd()->getOperator() === '<=') {
|
||||
$constraints[] = new Constraint('==', $interval->getStart()->getVersion());
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((string) $interval->getStart() === (string) Interval::fromZero()) {
|
||||
$constraints[] = $interval->getEnd();
|
||||
} elseif ((string) $interval->getEnd() === (string) Interval::untilPositiveInfinity()) {
|
||||
$constraints[] = $interval->getStart();
|
||||
} else {
|
||||
$constraints[] = new MultiConstraint(array($interval->getStart(), $interval->getEnd()), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$devConstraints = array();
|
||||
|
||||
if (0 === \count($intervals['branches']['names'])) {
|
||||
if ($intervals['branches']['exclude']) {
|
||||
if ($hasNumericMatchAll) {
|
||||
return new MatchAllConstraint;
|
||||
}
|
||||
// otherwise constraint should contain a != operator and already cover this
|
||||
}
|
||||
} else {
|
||||
foreach ($intervals['branches']['names'] as $branchName) {
|
||||
if ($intervals['branches']['exclude']) {
|
||||
$devConstraints[] = new Constraint('!=', $branchName);
|
||||
} else {
|
||||
$devConstraints[] = new Constraint('==', $branchName);
|
||||
}
|
||||
}
|
||||
|
||||
// excluded branches, e.g. != dev-foo are conjunctive with the interval, so
|
||||
// > 2.0 != dev-foo must return a conjunctive constraint
|
||||
if ($intervals['branches']['exclude']) {
|
||||
if (\count($constraints) > 1) {
|
||||
return new MultiConstraint(array_merge(
|
||||
array(new MultiConstraint($constraints, false)),
|
||||
$devConstraints
|
||||
), true);
|
||||
}
|
||||
|
||||
if (\count($constraints) === 1 && (string)$constraints[0] === (string)Interval::fromZero()) {
|
||||
if (\count($devConstraints) > 1) {
|
||||
return new MultiConstraint($devConstraints, true);
|
||||
}
|
||||
return $devConstraints[0];
|
||||
}
|
||||
|
||||
return new MultiConstraint(array_merge($constraints, $devConstraints), true);
|
||||
}
|
||||
|
||||
// otherwise devConstraints contains a list of == operators for branches which are disjunctive with the
|
||||
// rest of the constraint
|
||||
$constraints = array_merge($constraints, $devConstraints);
|
||||
}
|
||||
|
||||
if (\count($constraints) > 1) {
|
||||
return new MultiConstraint($constraints, false);
|
||||
}
|
||||
|
||||
if (\count($constraints) === 1) {
|
||||
return $constraints[0];
|
||||
}
|
||||
|
||||
return new MatchNoneConstraint;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an array of numeric intervals and branch constraints representing a given constraint
|
||||
*
|
||||
* if the returned numeric array is empty it means the constraint matches nothing in the numeric range (0 - +inf)
|
||||
* if the returned branches array is empty it means no dev-* versions are matched
|
||||
* if a constraint matches all possible dev-* versions, branches will contain Interval::anyDev()
|
||||
*
|
||||
* @return array
|
||||
* @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}}
|
||||
*/
|
||||
public static function get(ConstraintInterface $constraint)
|
||||
{
|
||||
$key = (string) $constraint;
|
||||
|
||||
if (!isset(self::$intervalsCache[$key])) {
|
||||
self::$intervalsCache[$key] = self::generateIntervals($constraint);
|
||||
}
|
||||
|
||||
return self::$intervalsCache[$key];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $stopOnFirstValidInterval
|
||||
*
|
||||
* @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}}
|
||||
*/
|
||||
private static function generateIntervals(ConstraintInterface $constraint, $stopOnFirstValidInterval = false)
|
||||
{
|
||||
if ($constraint instanceof MatchAllConstraint) {
|
||||
return array('numeric' => array(new Interval(Interval::fromZero(), Interval::untilPositiveInfinity())), 'branches' => Interval::anyDev());
|
||||
}
|
||||
|
||||
if ($constraint instanceof MatchNoneConstraint) {
|
||||
return array('numeric' => array(), 'branches' => array('names' => array(), 'exclude' => false));
|
||||
}
|
||||
|
||||
if ($constraint instanceof Constraint) {
|
||||
return self::generateSingleConstraintIntervals($constraint);
|
||||
}
|
||||
|
||||
if (!$constraint instanceof MultiConstraint) {
|
||||
throw new \UnexpectedValueException('The constraint passed in should be an MatchAllConstraint, Constraint or MultiConstraint instance, got '.\get_class($constraint).'.');
|
||||
}
|
||||
|
||||
$constraints = $constraint->getConstraints();
|
||||
|
||||
$numericGroups = array();
|
||||
$constraintBranches = array();
|
||||
foreach ($constraints as $c) {
|
||||
$res = self::get($c);
|
||||
$numericGroups[] = $res['numeric'];
|
||||
$constraintBranches[] = $res['branches'];
|
||||
}
|
||||
|
||||
if ($constraint->isDisjunctive()) {
|
||||
$branches = Interval::noDev();
|
||||
foreach ($constraintBranches as $b) {
|
||||
if ($b['exclude']) {
|
||||
if ($branches['exclude']) {
|
||||
// disjunctive constraint, so only exclude what's excluded in all constraints
|
||||
// !=a,!=b || !=b,!=c => !=b
|
||||
$branches['names'] = array_intersect($branches['names'], $b['names']);
|
||||
} else {
|
||||
// disjunctive constraint so exclude all names which are not explicitly included in the alternative
|
||||
// (==b || ==c) || !=a,!=b => !=a
|
||||
$branches['exclude'] = true;
|
||||
$branches['names'] = array_diff($b['names'], $branches['names']);
|
||||
}
|
||||
} else {
|
||||
if ($branches['exclude']) {
|
||||
// disjunctive constraint so exclude all names which are not explicitly included in the alternative
|
||||
// !=a,!=b || (==b || ==c) => !=a
|
||||
$branches['names'] = array_diff($branches['names'], $b['names']);
|
||||
} else {
|
||||
// disjunctive constraint, so just add all the other branches
|
||||
// (==a || ==b) || ==c => ==a || ==b || ==c
|
||||
$branches['names'] = array_merge($branches['names'], $b['names']);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$branches = Interval::anyDev();
|
||||
foreach ($constraintBranches as $b) {
|
||||
if ($b['exclude']) {
|
||||
if ($branches['exclude']) {
|
||||
// conjunctive, so just add all branch names to be excluded
|
||||
// !=a && !=b => !=a,!=b
|
||||
$branches['names'] = array_merge($branches['names'], $b['names']);
|
||||
} else {
|
||||
// conjunctive, so only keep included names which are not excluded
|
||||
// (==a||==c) && !=a,!=b => ==c
|
||||
$branches['names'] = array_diff($branches['names'], $b['names']);
|
||||
}
|
||||
} else {
|
||||
if ($branches['exclude']) {
|
||||
// conjunctive, so only keep included names which are not excluded
|
||||
// !=a,!=b && (==a||==c) => ==c
|
||||
$branches['names'] = array_diff($b['names'], $branches['names']);
|
||||
$branches['exclude'] = false;
|
||||
} else {
|
||||
// conjunctive, so only keep names that are included in both
|
||||
// (==a||==b) && (==a||==c) => ==a
|
||||
$branches['names'] = array_intersect($branches['names'], $b['names']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$branches['names'] = array_unique($branches['names']);
|
||||
|
||||
if (\count($numericGroups) === 1) {
|
||||
return array('numeric' => $numericGroups[0], 'branches' => $branches);
|
||||
}
|
||||
|
||||
$borders = array();
|
||||
foreach ($numericGroups as $group) {
|
||||
foreach ($group as $interval) {
|
||||
$borders[] = array('version' => $interval->getStart()->getVersion(), 'operator' => $interval->getStart()->getOperator(), 'side' => 'start');
|
||||
$borders[] = array('version' => $interval->getEnd()->getVersion(), 'operator' => $interval->getEnd()->getOperator(), 'side' => 'end');
|
||||
}
|
||||
}
|
||||
|
||||
$opSortOrder = self::$opSortOrder;
|
||||
usort($borders, function ($a, $b) use ($opSortOrder) {
|
||||
$order = version_compare($a['version'], $b['version']);
|
||||
if ($order === 0) {
|
||||
return $opSortOrder[$a['operator']] - $opSortOrder[$b['operator']];
|
||||
}
|
||||
|
||||
return $order;
|
||||
});
|
||||
|
||||
$activeIntervals = 0;
|
||||
$intervals = array();
|
||||
$index = 0;
|
||||
$activationThreshold = $constraint->isConjunctive() ? \count($numericGroups) : 1;
|
||||
$start = null;
|
||||
foreach ($borders as $border) {
|
||||
if ($border['side'] === 'start') {
|
||||
$activeIntervals++;
|
||||
} else {
|
||||
$activeIntervals--;
|
||||
}
|
||||
if (!$start && $activeIntervals >= $activationThreshold) {
|
||||
$start = new Constraint($border['operator'], $border['version']);
|
||||
} elseif ($start && $activeIntervals < $activationThreshold) {
|
||||
// filter out invalid intervals like > x - <= x, or >= x - < x
|
||||
if (
|
||||
version_compare($start->getVersion(), $border['version'], '=')
|
||||
&& (
|
||||
($start->getOperator() === '>' && $border['operator'] === '<=')
|
||||
|| ($start->getOperator() === '>=' && $border['operator'] === '<')
|
||||
)
|
||||
) {
|
||||
unset($intervals[$index]);
|
||||
} else {
|
||||
$intervals[$index] = new Interval($start, new Constraint($border['operator'], $border['version']));
|
||||
$index++;
|
||||
|
||||
if ($stopOnFirstValidInterval) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$start = null;
|
||||
}
|
||||
}
|
||||
|
||||
return array('numeric' => $intervals, 'branches' => $branches);
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}}}
|
||||
*/
|
||||
private static function generateSingleConstraintIntervals(Constraint $constraint)
|
||||
{
|
||||
$op = $constraint->getOperator();
|
||||
|
||||
// handle branch constraints first
|
||||
if (strpos($constraint->getVersion(), 'dev-') === 0) {
|
||||
$intervals = array();
|
||||
$branches = array('names' => array(), 'exclude' => false);
|
||||
|
||||
// != dev-foo means any numeric version may match, we treat >/< like != they are not really defined for branches
|
||||
if ($op === '!=') {
|
||||
$intervals[] = new Interval(Interval::fromZero(), Interval::untilPositiveInfinity());
|
||||
$branches = array('names' => array($constraint->getVersion()), 'exclude' => true);
|
||||
} elseif ($op === '==') {
|
||||
$branches['names'][] = $constraint->getVersion();
|
||||
}
|
||||
|
||||
return array(
|
||||
'numeric' => $intervals,
|
||||
'branches' => $branches,
|
||||
);
|
||||
}
|
||||
|
||||
if ($op[0] === '>') { // > & >=
|
||||
return array('numeric' => array(new Interval($constraint, Interval::untilPositiveInfinity())), 'branches' => Interval::noDev());
|
||||
}
|
||||
if ($op[0] === '<') { // < & <=
|
||||
return array('numeric' => array(new Interval(Interval::fromZero(), $constraint)), 'branches' => Interval::noDev());
|
||||
}
|
||||
if ($op === '!=') {
|
||||
// convert !=x to intervals of 0 - <x && >x - +inf + dev*
|
||||
return array('numeric' => array(
|
||||
new Interval(Interval::fromZero(), new Constraint('<', $constraint->getVersion())),
|
||||
new Interval(new Constraint('>', $constraint->getVersion()), Interval::untilPositiveInfinity()),
|
||||
), 'branches' => Interval::anyDev());
|
||||
}
|
||||
|
||||
// convert ==x to an interval of >=x - <=x
|
||||
return array('numeric' => array(
|
||||
new Interval(new Constraint('>=', $constraint->getVersion()), new Constraint('<=', $constraint->getVersion())),
|
||||
), 'branches' => Interval::noDev());
|
||||
}
|
||||
}
|
||||
+13
-11
@@ -45,10 +45,10 @@ class Semver
|
||||
/**
|
||||
* Return all versions that satisfy given constraints.
|
||||
*
|
||||
* @param array $versions
|
||||
* @param string $constraints
|
||||
* @param string[] $versions
|
||||
* @param string $constraints
|
||||
*
|
||||
* @return array
|
||||
* @return string[]
|
||||
*/
|
||||
public static function satisfiedBy(array $versions, $constraints)
|
||||
{
|
||||
@@ -62,9 +62,9 @@ class Semver
|
||||
/**
|
||||
* Sort given array of versions.
|
||||
*
|
||||
* @param array $versions
|
||||
* @param string[] $versions
|
||||
*
|
||||
* @return array
|
||||
* @return string[]
|
||||
*/
|
||||
public static function sort(array $versions)
|
||||
{
|
||||
@@ -74,9 +74,9 @@ class Semver
|
||||
/**
|
||||
* Sort given array of versions in reverse.
|
||||
*
|
||||
* @param array $versions
|
||||
* @param string[] $versions
|
||||
*
|
||||
* @return array
|
||||
* @return string[]
|
||||
*/
|
||||
public static function rsort(array $versions)
|
||||
{
|
||||
@@ -84,10 +84,10 @@ class Semver
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $versions
|
||||
* @param int $direction
|
||||
* @param string[] $versions
|
||||
* @param int $direction
|
||||
*
|
||||
* @return array
|
||||
* @return string[]
|
||||
*/
|
||||
private static function usort(array $versions, $direction)
|
||||
{
|
||||
@@ -101,7 +101,9 @@ class Semver
|
||||
// Normalize outside of usort() scope for minor performance increase.
|
||||
// Creates an array of arrays: [[normalized, key], ...]
|
||||
foreach ($versions as $key => $version) {
|
||||
$normalized[] = array($versionParser->normalize($version), $key);
|
||||
$normalizedVersion = $versionParser->normalize($version);
|
||||
$normalizedVersion = $versionParser->normalizeDefaultBranch($normalizedVersion);
|
||||
$normalized[] = array($normalizedVersion, $key);
|
||||
}
|
||||
|
||||
usort($normalized, function (array $left, array $right) use ($direction) {
|
||||
|
||||
+108
-70
@@ -12,7 +12,7 @@
|
||||
namespace Composer\Semver;
|
||||
|
||||
use Composer\Semver\Constraint\ConstraintInterface;
|
||||
use Composer\Semver\Constraint\EmptyConstraint;
|
||||
use Composer\Semver\Constraint\MatchAllConstraint;
|
||||
use Composer\Semver\Constraint\MultiConstraint;
|
||||
use Composer\Semver\Constraint\Constraint;
|
||||
|
||||
@@ -38,8 +38,8 @@ class VersionParser
|
||||
*/
|
||||
private static $modifierRegex = '[._-]?(?:(stable|beta|b|RC|alpha|a|patch|pl|p)((?:[.-]?\d+)*+)?)?([.-]?dev)?';
|
||||
|
||||
/** @var array */
|
||||
private static $stabilities = array('stable', 'RC', 'beta', 'alpha', 'dev');
|
||||
/** @var string */
|
||||
private static $stabilitiesRegex = 'stable|RC|beta|alpha|dev';
|
||||
|
||||
/**
|
||||
* Returns the stability of a version.
|
||||
@@ -50,7 +50,7 @@ class VersionParser
|
||||
*/
|
||||
public static function parseStability($version)
|
||||
{
|
||||
$version = preg_replace('{#.+$}i', '', $version);
|
||||
$version = (string) preg_replace('{#.+$}', '', $version);
|
||||
|
||||
if (strpos($version, 'dev-') === 0 || '-dev' === substr($version, -4)) {
|
||||
return 'dev';
|
||||
@@ -102,21 +102,24 @@ class VersionParser
|
||||
public function normalize($version, $fullVersion = null)
|
||||
{
|
||||
$version = trim($version);
|
||||
$origVersion = $version;
|
||||
if (null === $fullVersion) {
|
||||
$fullVersion = $version;
|
||||
}
|
||||
|
||||
// strip off aliasing
|
||||
if (preg_match('{^([^,\s]++) ++as ++([^,\s]++)$}', $version, $match)) {
|
||||
// verify that the alias is a version without constraint
|
||||
$this->normalize($match[2]);
|
||||
|
||||
$version = $match[1];
|
||||
}
|
||||
|
||||
// match master-like branches
|
||||
if (preg_match('{^(?:dev-)?(?:master|trunk|default)$}i', $version)) {
|
||||
return '9999999-dev';
|
||||
// strip off stability flag
|
||||
if (preg_match('{@(?:' . self::$stabilitiesRegex . ')$}i', $version, $match)) {
|
||||
$version = substr($version, 0, strlen($version) - strlen($match[0]));
|
||||
}
|
||||
|
||||
// normalize master/trunk/default branches to dev-name for BC with 1.x as these used to be valid constraints
|
||||
if (\in_array($version, array('master', 'trunk', 'default'), true)) {
|
||||
$version = 'dev-' . $version;
|
||||
}
|
||||
|
||||
// if requirement is branch-like, use full name
|
||||
@@ -148,7 +151,7 @@ class VersionParser
|
||||
if ('stable' === $matches[$index]) {
|
||||
return $version;
|
||||
}
|
||||
$version .= '-' . $this->expandStability($matches[$index]) . (!empty($matches[$index + 1]) ? ltrim($matches[$index + 1], '.-') : '');
|
||||
$version .= '-' . $this->expandStability($matches[$index]) . (isset($matches[$index + 1]) && '' !== $matches[$index + 1] ? ltrim($matches[$index + 1], '.-') : '');
|
||||
}
|
||||
|
||||
if (!empty($matches[$index + 2])) {
|
||||
@@ -161,19 +164,25 @@ class VersionParser
|
||||
// match dev branches
|
||||
if (preg_match('{(.*?)[.-]?dev$}i', $version, $match)) {
|
||||
try {
|
||||
return $this->normalizeBranch($match[1]);
|
||||
$normalized = $this->normalizeBranch($match[1]);
|
||||
// a branch ending with -dev is only valid if it is numeric
|
||||
// if it gets prefixed with dev- it means the branch name should
|
||||
// have had a dev- prefix already when passed to normalize
|
||||
if (strpos($normalized, 'dev-') === false) {
|
||||
return $normalized;
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
}
|
||||
|
||||
$extraMessage = '';
|
||||
if (preg_match('{ +as +' . preg_quote($version) . '$}', $fullVersion)) {
|
||||
if (preg_match('{ +as +' . preg_quote($version) . '(?:@(?:'.self::$stabilitiesRegex.'))?$}', $fullVersion)) {
|
||||
$extraMessage = ' in "' . $fullVersion . '", the alias must be an exact version';
|
||||
} elseif (preg_match('{^' . preg_quote($version) . ' +as +}', $fullVersion)) {
|
||||
} elseif (preg_match('{^' . preg_quote($version) . '(?:@(?:'.self::$stabilitiesRegex.'))? +as +}', $fullVersion)) {
|
||||
$extraMessage = ' in "' . $fullVersion . '", the alias source must be an exact version, if it is a branch name you should prefix it with dev-';
|
||||
}
|
||||
|
||||
throw new \UnexpectedValueException('Invalid version string "' . $version . '"' . $extraMessage);
|
||||
throw new \UnexpectedValueException('Invalid version string "' . $origVersion . '"' . $extraMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -203,10 +212,6 @@ class VersionParser
|
||||
{
|
||||
$name = trim($name);
|
||||
|
||||
if (in_array($name, array('master', 'trunk', 'default'))) {
|
||||
return $this->normalize($name);
|
||||
}
|
||||
|
||||
if (preg_match('{^v?(\d++)(\.(?:\d++|[xX*]))?(\.(?:\d++|[xX*]))?(\.(?:\d++|[xX*]))?$}i', $name, $matches)) {
|
||||
$version = '';
|
||||
for ($i = 1; $i < 5; ++$i) {
|
||||
@@ -219,6 +224,22 @@ class VersionParser
|
||||
return 'dev-' . $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes a default branch name (i.e. master on git) to 9999999-dev.
|
||||
*
|
||||
* @param string $name
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function normalizeDefaultBranch($name)
|
||||
{
|
||||
if ($name === 'dev-master' || $name === 'dev-default' || $name === 'dev-trunk') {
|
||||
return '9999999-dev';
|
||||
}
|
||||
|
||||
return $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a constraint string into MultiConstraint and/or Constraint objects.
|
||||
*
|
||||
@@ -230,20 +251,18 @@ class VersionParser
|
||||
{
|
||||
$prettyConstraint = $constraints;
|
||||
|
||||
if (preg_match('{^([^,\s]*?)@(' . implode('|', self::$stabilities) . ')$}i', $constraints, $match)) {
|
||||
$constraints = empty($match[1]) ? '*' : $match[1];
|
||||
}
|
||||
|
||||
if (preg_match('{^(dev-[^,\s@]+?|[^,\s@]+?\.x-dev)#.+$}i', $constraints, $match)) {
|
||||
$constraints = $match[1];
|
||||
}
|
||||
|
||||
$orConstraints = preg_split('{\s*\|\|?\s*}', trim($constraints));
|
||||
if (false === $orConstraints) {
|
||||
throw new \RuntimeException('Failed to preg_split string: '.$constraints);
|
||||
}
|
||||
$orGroups = array();
|
||||
|
||||
foreach ($orConstraints as $constraints) {
|
||||
$andConstraints = preg_split('{(?<!^|as|[=>< ,]) *(?<!-)[, ](?!-) *(?!,|as|$)}', $constraints);
|
||||
if (count($andConstraints) > 1) {
|
||||
if (false === $andConstraints) {
|
||||
throw new \RuntimeException('Failed to preg_split string: '.$constraints);
|
||||
}
|
||||
if (\count($andConstraints) > 1) {
|
||||
$constraintObjects = array();
|
||||
foreach ($andConstraints as $constraint) {
|
||||
foreach ($this->parseConstraint($constraint) as $parsedConstraint) {
|
||||
@@ -254,7 +273,7 @@ class VersionParser
|
||||
$constraintObjects = $this->parseConstraint($andConstraints[0]);
|
||||
}
|
||||
|
||||
if (1 === count($constraintObjects)) {
|
||||
if (1 === \count($constraintObjects)) {
|
||||
$constraint = $constraintObjects[0];
|
||||
} else {
|
||||
$constraint = new MultiConstraint($constraintObjects);
|
||||
@@ -263,28 +282,7 @@ class VersionParser
|
||||
$orGroups[] = $constraint;
|
||||
}
|
||||
|
||||
if (1 === count($orGroups)) {
|
||||
$constraint = $orGroups[0];
|
||||
} elseif (2 === count($orGroups)
|
||||
// parse the two OR groups and if they are contiguous we collapse
|
||||
// them into one constraint
|
||||
&& $orGroups[0] instanceof MultiConstraint
|
||||
&& $orGroups[1] instanceof MultiConstraint
|
||||
&& 2 === count($orGroups[0]->getConstraints())
|
||||
&& 2 === count($orGroups[1]->getConstraints())
|
||||
&& ($a = (string) $orGroups[0])
|
||||
&& strpos($a, '[>=') === 0 && (false !== ($posA = strpos($a, '<', 4)))
|
||||
&& ($b = (string) $orGroups[1])
|
||||
&& strpos($b, '[>=') === 0 && (false !== ($posB = strpos($b, '<', 4)))
|
||||
&& substr($a, $posA + 2, -1) === substr($b, 4, $posB - 5)
|
||||
) {
|
||||
$constraint = new MultiConstraint(array(
|
||||
new Constraint('>=', substr($a, 4, $posA - 5)),
|
||||
new Constraint('<', substr($b, $posB + 2, -1)),
|
||||
));
|
||||
} else {
|
||||
$constraint = new MultiConstraint($orGroups, false);
|
||||
}
|
||||
$constraint = MultiConstraint::create($orGroups, false);
|
||||
|
||||
$constraint->setPrettyString($prettyConstraint);
|
||||
|
||||
@@ -297,21 +295,38 @@ class VersionParser
|
||||
* @throws \UnexpectedValueException
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @phpstan-return non-empty-array<ConstraintInterface>
|
||||
*/
|
||||
private function parseConstraint($constraint)
|
||||
{
|
||||
if (preg_match('{^([^,\s]+?)@(' . implode('|', self::$stabilities) . ')$}i', $constraint, $match)) {
|
||||
// strip off aliasing
|
||||
if (preg_match('{^([^,\s]++) ++as ++([^,\s]++)$}', $constraint, $match)) {
|
||||
$constraint = $match[1];
|
||||
}
|
||||
|
||||
// strip @stability flags, and keep it for later use
|
||||
if (preg_match('{^([^,\s]*?)@(' . self::$stabilitiesRegex . ')$}i', $constraint, $match)) {
|
||||
$constraint = '' !== $match[1] ? $match[1] : '*';
|
||||
if ($match[2] !== 'stable') {
|
||||
$stabilityModifier = $match[2];
|
||||
}
|
||||
}
|
||||
|
||||
if (preg_match('{^v?[xX*](\.[xX*])*$}i', $constraint)) {
|
||||
return array(new EmptyConstraint());
|
||||
// get rid of #refs as those are used by composer only
|
||||
if (preg_match('{^(dev-[^,\s@]+?|[^,\s@]+?\.x-dev)#.+$}i', $constraint, $match)) {
|
||||
$constraint = $match[1];
|
||||
}
|
||||
|
||||
$versionRegex = 'v?(\d++)(?:\.(\d++))?(?:\.(\d++))?(?:\.(\d++))?' . self::$modifierRegex . '(?:\+[^\s]+)?';
|
||||
if (preg_match('{^(v)?[xX*](\.[xX*])*$}i', $constraint, $match)) {
|
||||
if (!empty($match[1]) || !empty($match[2])) {
|
||||
return array(new Constraint('>=', '0.0.0.0-dev'));
|
||||
}
|
||||
|
||||
return array(new MatchAllConstraint());
|
||||
}
|
||||
|
||||
$versionRegex = 'v?(\d++)(?:\.(\d++))?(?:\.(\d++))?(?:\.(\d++))?(?:' . self::$modifierRegex . '|\.([xX*][.-]?dev))(?:\+[^\s]+)?';
|
||||
|
||||
// Tilde Range
|
||||
//
|
||||
@@ -337,9 +352,14 @@ class VersionParser
|
||||
$position = 1;
|
||||
}
|
||||
|
||||
// when matching 2.x-dev or 3.0.x-dev we have to shift the second or third number, despite no second/third number matching above
|
||||
if (!empty($matches[8])) {
|
||||
$position++;
|
||||
}
|
||||
|
||||
// Calculate the stability suffix
|
||||
$stabilitySuffix = '';
|
||||
if (empty($matches[5]) && empty($matches[7])) {
|
||||
if (empty($matches[5]) && empty($matches[7]) && empty($matches[8])) {
|
||||
$stabilitySuffix .= '-dev';
|
||||
}
|
||||
|
||||
@@ -375,7 +395,7 @@ class VersionParser
|
||||
|
||||
// Calculate the stability suffix
|
||||
$stabilitySuffix = '';
|
||||
if (empty($matches[5]) && empty($matches[7])) {
|
||||
if (empty($matches[5]) && empty($matches[7]) && empty($matches[8])) {
|
||||
$stabilitySuffix .= '-dev';
|
||||
}
|
||||
|
||||
@@ -428,7 +448,7 @@ class VersionParser
|
||||
if (preg_match('{^(?P<from>' . $versionRegex . ') +- +(?P<to>' . $versionRegex . ')($)}i', $constraint, $matches)) {
|
||||
// Calculate the stability suffix
|
||||
$lowStabilitySuffix = '';
|
||||
if (empty($matches[6]) && empty($matches[8])) {
|
||||
if (empty($matches[6]) && empty($matches[8]) && empty($matches[9])) {
|
||||
$lowStabilitySuffix = '-dev';
|
||||
}
|
||||
|
||||
@@ -439,12 +459,16 @@ class VersionParser
|
||||
return ($x === 0 || $x === '0') ? false : empty($x);
|
||||
};
|
||||
|
||||
if ((!$empty($matches[11]) && !$empty($matches[12])) || !empty($matches[14]) || !empty($matches[16])) {
|
||||
if ((!$empty($matches[12]) && !$empty($matches[13])) || !empty($matches[15]) || !empty($matches[17]) || !empty($matches[18])) {
|
||||
$highVersion = $this->normalize($matches['to']);
|
||||
$upperBound = new Constraint('<=', $highVersion);
|
||||
} else {
|
||||
$highMatch = array('', $matches[10], $matches[11], $matches[12], $matches[13]);
|
||||
$highVersion = $this->manipulateVersionString($highMatch, $empty($matches[11]) ? 1 : 2, 1) . '-dev';
|
||||
$highMatch = array('', $matches[11], $matches[12], $matches[13], $matches[14]);
|
||||
|
||||
// validate to version
|
||||
$this->normalize($matches['to']);
|
||||
|
||||
$highVersion = $this->manipulateVersionString($highMatch, $empty($matches[12]) ? 1 : 2, 1) . '-dev';
|
||||
$upperBound = new Constraint('<', $highVersion);
|
||||
}
|
||||
|
||||
@@ -457,11 +481,23 @@ class VersionParser
|
||||
// Basic Comparators
|
||||
if (preg_match('{^(<>|!=|>=?|<=?|==?)?\s*(.*)}', $constraint, $matches)) {
|
||||
try {
|
||||
$version = $this->normalize($matches[2]);
|
||||
try {
|
||||
$version = $this->normalize($matches[2]);
|
||||
} catch (\UnexpectedValueException $e) {
|
||||
// recover from an invalid constraint like foobar-dev which should be dev-foobar
|
||||
// except if the constraint uses a known operator, in which case it must be a parse error
|
||||
if (substr($matches[2], -4) === '-dev' && preg_match('{^[0-9a-zA-Z-./]+$}', $matches[2])) {
|
||||
$version = $this->normalize('dev-'.substr($matches[2], 0, -4));
|
||||
} else {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($stabilityModifier) && self::parseStability($version) === 'stable') {
|
||||
$op = $matches[1] ?: '=';
|
||||
|
||||
if ($op !== '==' && $op !== '=' && !empty($stabilityModifier) && self::parseStability($version) === 'stable') {
|
||||
$version .= '-' . $stabilityModifier;
|
||||
} elseif ('<' === $matches[1] || '>=' === $matches[1]) {
|
||||
} elseif ('<' === $op || '>=' === $op) {
|
||||
if (!preg_match('/-' . self::$modifierRegex . '$/', strtolower($matches[2]))) {
|
||||
if (strpos($matches[2], 'dev-') !== 0) {
|
||||
$version .= '-dev';
|
||||
@@ -487,14 +523,16 @@ class VersionParser
|
||||
*
|
||||
* Support function for {@link parseConstraint()}
|
||||
*
|
||||
* @param array $matches Array with version parts in array indexes 1,2,3,4
|
||||
* @param int $position 1,2,3,4 - which segment of the version to increment/decrement
|
||||
* @param int $increment
|
||||
* @param string $pad The string to pad version parts after $position
|
||||
* @param array $matches Array with version parts in array indexes 1,2,3,4
|
||||
* @param int $position 1,2,3,4 - which segment of the version to increment/decrement
|
||||
* @param int $increment
|
||||
* @param string $pad The string to pad version parts after $position
|
||||
*
|
||||
* @return string The new version
|
||||
* @return string|null The new version
|
||||
*
|
||||
* @phpstan-param string[] $matches
|
||||
*/
|
||||
private function manipulateVersionString($matches, $position, $increment = 0, $pad = '0')
|
||||
private function manipulateVersionString(array $matches, $position, $increment = 0, $pad = '0')
|
||||
{
|
||||
for ($i = 4; $i > 0; --$i) {
|
||||
if ($i > $position) {
|
||||
|
||||
+43
-1
@@ -1,5 +1,39 @@
|
||||
## [Unreleased]
|
||||
|
||||
## [2.0.2] - 2021-07-31
|
||||
* Added: support for `xdebug_info('mode')` in Xdebug 3.1.
|
||||
* Added: support for Psr\Log versions 2 and 3.
|
||||
* Fixed: remove ini directives from non-cli HOST/PATH sections.
|
||||
|
||||
## [2.0.1] - 2021-05-05
|
||||
* Fixed: don't restart if the cwd is a UNC path and cmd.exe will be invoked.
|
||||
|
||||
## [2.0.0] - 2021-04-09
|
||||
* Break: this is a major release, see [UPGRADE.md](UPGRADE.md) for more information.
|
||||
* Break: removed optional `$colorOption` constructor param and passthru fallback.
|
||||
* Break: renamed `requiresRestart` param from `$isLoaded` to `$default`.
|
||||
* Break: changed `restart` param `$command` from a string to an array.
|
||||
* Added: support for Xdebug3 to only restart if Xdebug is not running with `xdebug.mode=off`.
|
||||
* Added: `isXdebugActive()` method to determine if Xdebug is still running in the restart.
|
||||
* Added: feature to bypass the shell in PHP-7.4+ by giving `proc_open` an array of arguments.
|
||||
* Added: Process utility class to the API.
|
||||
|
||||
## [1.4.6] - 2021-03-25
|
||||
* Fixed: fail restart if `proc_open` has been disabled in `disable_functions`.
|
||||
* Fixed: enable Windows CTRL event handling in the restarted process.
|
||||
|
||||
## [1.4.5] - 2020-11-13
|
||||
* Fixed: use `proc_open` when available for correct FD forwarding to the restarted process.
|
||||
|
||||
## [1.4.4] - 2020-10-24
|
||||
* Fixed: exception if 'pcntl_signal' is disabled.
|
||||
|
||||
## [1.4.3] - 2020-08-19
|
||||
* Fixed: restore SIGINT to default handler in restarted process if no other handler exists.
|
||||
|
||||
## [1.4.2] - 2020-06-04
|
||||
* Fixed: ignore SIGINTs to let the restarted process handle them.
|
||||
|
||||
## [1.4.1] - 2020-03-01
|
||||
* Fixed: restart fails if an ini file is empty.
|
||||
|
||||
@@ -57,7 +91,15 @@
|
||||
* Break: the following class was renamed:
|
||||
- `Composer\XdebugHandler` -> `Composer\XdebugHandler\XdebugHandler`
|
||||
|
||||
[Unreleased]: https://github.com/composer/xdebug-handler/compare/1.4.1...HEAD
|
||||
[Unreleased]: https://github.com/composer/xdebug-handler/compare/2.0.2...HEAD
|
||||
[2.0.2]: https://github.com/composer/xdebug-handler/compare/2.0.1...2.0.2
|
||||
[2.0.1]: https://github.com/composer/xdebug-handler/compare/2.0.0...2.0.1
|
||||
[2.0.0]: https://github.com/composer/xdebug-handler/compare/1.4.6...2.0.0
|
||||
[1.4.6]: https://github.com/composer/xdebug-handler/compare/1.4.5...1.4.6
|
||||
[1.4.5]: https://github.com/composer/xdebug-handler/compare/1.4.4...1.4.5
|
||||
[1.4.4]: https://github.com/composer/xdebug-handler/compare/1.4.3...1.4.4
|
||||
[1.4.3]: https://github.com/composer/xdebug-handler/compare/1.4.2...1.4.3
|
||||
[1.4.2]: https://github.com/composer/xdebug-handler/compare/1.4.1...1.4.2
|
||||
[1.4.1]: https://github.com/composer/xdebug-handler/compare/1.4.0...1.4.1
|
||||
[1.4.0]: https://github.com/composer/xdebug-handler/compare/1.3.3...1.4.0
|
||||
[1.3.3]: https://github.com/composer/xdebug-handler/compare/1.3.2...1.3.3
|
||||
|
||||
+23
-20
@@ -1,16 +1,19 @@
|
||||
# composer/xdebug-handler
|
||||
|
||||
[](https://packagist.org/packages/composer/xdebug-handler)
|
||||
[](https://travis-ci.org/composer/xdebug-handler)
|
||||
[](https://ci.appveyor.com/project/Seldaek/xdebug-handler)
|
||||
[](https://github.com/composer/xdebug-handler/actions)
|
||||

|
||||

|
||||
|
||||
Restart a CLI process without loading the Xdebug extension.
|
||||
Restart a CLI process without loading the Xdebug extension, unless `xdebug.mode=off`.
|
||||
|
||||
Originally written as part of [composer/composer](https://github.com/composer/composer),
|
||||
now extracted and made available as a stand-alone library.
|
||||
|
||||
### Version 2
|
||||
|
||||
Support added for Xdebug3. See [UPGRADE](UPGRADE.md) for more information.
|
||||
|
||||
## Installation
|
||||
|
||||
Install the latest version with:
|
||||
@@ -32,21 +35,11 @@ $xdebug->check();
|
||||
unset($xdebug);
|
||||
```
|
||||
|
||||
The constructor takes two parameters:
|
||||
|
||||
#### _$envPrefix_
|
||||
This is used to create distinct environment variables and is upper-cased and prepended to default base values. The above example enables the use of:
|
||||
The constructor takes a single parameter, `$envPrefix`, which is upper-cased and prepended to default base values to create two distinct environment variables. The above example enables the use of:
|
||||
|
||||
- `MYAPP_ALLOW_XDEBUG=1` to override automatic restart and allow Xdebug
|
||||
- `MYAPP_ORIGINAL_INIS` to obtain ini file locations in a restarted process
|
||||
|
||||
#### _$colorOption_
|
||||
This optional value is added to the restart command-line and is needed to force color output in a piped child process. Only long-options are supported, for example `--ansi` or `--colors=always` etc.
|
||||
|
||||
If the original command-line contains an argument that pattern matches this value (for example `--no-ansi`, `--colors=never`) then _$colorOption_ is ignored.
|
||||
|
||||
If the pattern match ends with `=auto` (for example `--colors=auto`), the argument is replaced by _$colorOption_. Otherwise it is added at either the end of the command-line, or preceding the first double-dash `--` delimiter.
|
||||
|
||||
## Advanced Usage
|
||||
|
||||
* [How it works](#how-it-works)
|
||||
@@ -63,12 +56,18 @@ A temporary ini file is created from the loaded (and scanned) ini files, with an
|
||||
|
||||
* `MYAPP_ALLOW_XDEBUG` is set with internal data to flag and use in the restart.
|
||||
* The command-line and environment are [configured](#process-configuration) for the restart.
|
||||
* The application is restarted in a new process using `passthru`.
|
||||
* The application is restarted in a new process.
|
||||
* The restart settings are stored in the environment.
|
||||
* `MYAPP_ALLOW_XDEBUG` is unset.
|
||||
* The application runs and exits.
|
||||
* The main process exits with the exit code from the restarted process.
|
||||
|
||||
#### Signal handling
|
||||
From PHP 7.1 with the pcntl extension loaded, asynchronous signal handling is automatically enabled. `SIGINT` is set to `SIG_IGN` in the parent
|
||||
process and restored to `SIG_DFL` in the restarted process (if no other handler has been set).
|
||||
|
||||
From PHP 7.4 on Windows, `CTRL+C` and `CTRL+BREAK` handling is ignored in the parent process and automatically enabled in the restarted process.
|
||||
|
||||
### Limitations
|
||||
There are a few things to be aware of when running inside a restarted process.
|
||||
|
||||
@@ -124,6 +123,9 @@ $version = XdebugHandler::getSkippedVersion();
|
||||
# $version: '2.6.0' (for example), or an empty string
|
||||
```
|
||||
|
||||
#### _isXdebugActive()_
|
||||
Returns true if Xdebug is loaded and is running in an active mode (if it supports modes). Returns false if Xdebug is not loaded, or it is running with `xdebug.mode=off`.
|
||||
|
||||
### Setter methods
|
||||
These methods implement a fluent interface and must be called before the main `check()` method.
|
||||
|
||||
@@ -232,15 +234,16 @@ The following environment settings can be used to troubleshoot unexpected behavi
|
||||
### Extending the library
|
||||
The API is defined by classes and their accessible elements that are not annotated as @internal. The main class has two protected methods that can be overridden to provide additional functionality:
|
||||
|
||||
#### _requiresRestart($isLoaded)_
|
||||
By default the process will restart if Xdebug is loaded. Extending this method allows an application to decide, by returning a boolean (or equivalent) value. It is only called if `MYAPP_ALLOW_XDEBUG` is empty, so it will not be called in the restarted process (where this variable contains internal data), or if the restart has been overridden.
|
||||
#### _requiresRestart($default)_
|
||||
By default the process will restart if Xdebug is loaded and not running with `xdebug.mode=off`. Extending this method allows an application to decide, by returning a boolean (or equivalent) value.
|
||||
It is only called if `MYAPP_ALLOW_XDEBUG` is empty, so it will not be called in the restarted process (where this variable contains internal data), or if the restart has been overridden.
|
||||
|
||||
Note that the [setMainScript()](#setmainscriptscript) and [setPersistent()](#setpersistent) setters can be used here, if required.
|
||||
|
||||
#### _restart($command)_
|
||||
An application can extend this to modify the temporary ini file, its location given in the `tmpIni` property. New settings can be safely appended to the end of the data, which is `PHP_EOL` terminated.
|
||||
|
||||
Note that the `$command` parameter is the escaped command-line string that will be used for the new process and must be treated accordingly.
|
||||
The `$command` parameter is an array of unescaped command-line arguments that will be used for the new process.
|
||||
|
||||
Remember to finish with `parent::restart($command)`.
|
||||
|
||||
@@ -259,7 +262,7 @@ class MyRestarter extends XdebugHandler
|
||||
{
|
||||
private $required;
|
||||
|
||||
protected function requiresRestart($isLoaded)
|
||||
protected function requiresRestart($default)
|
||||
{
|
||||
if (Command::isHelp()) {
|
||||
# No need to disable Xdebug for this
|
||||
@@ -267,7 +270,7 @@ class MyRestarter extends XdebugHandler
|
||||
}
|
||||
|
||||
$this->required = (bool) ini_get('phar.readonly');
|
||||
return $isLoaded || $this->required;
|
||||
return $this->required || $default;
|
||||
}
|
||||
|
||||
protected function restart($command)
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
## Upgrading from 1.x
|
||||
|
||||
The default behaviour has changed from always restarting if Xdebug is loaded, to only restarting if
|
||||
Xdebug is _active_. This has been introduced to support Xdebug3
|
||||
[modes](https://xdebug.org/docs/all_settings#mode). Xdebug is considered active if it is loaded, and
|
||||
for Xdebug3, if it is running in a mode other than `xdebug.mode=off`.
|
||||
|
||||
* Break: removed optional `$colorOption` constructor param and passthru fallback.
|
||||
|
||||
Just use `new XdebugHandler('myapp')` to instantiate the class and color support will be
|
||||
detectable in the restarted process.
|
||||
|
||||
* Added: `isXdebugActive()` method to determine if Xdebug is still running in the restart.
|
||||
|
||||
Returns true if Xdebug is loaded and is running in an active mode (if it supports modes).
|
||||
Returns false if Xdebug is not loaded, or it is running with `xdebug.mode=off`.
|
||||
|
||||
### Extending classes
|
||||
|
||||
* Break: renamed `requiresRestart` param from `$isLoaded` to `$default`.
|
||||
|
||||
This reflects the new default behaviour which is to restart only if Xdebug is active.
|
||||
|
||||
* Break: changed `restart` param `$command` from a string to an array.
|
||||
|
||||
Only important if you modified the string. `$command` is now an array of unescaped arguments.
|
||||
|
||||
* Added: Process utility class to the API.
|
||||
|
||||
This class was previously annotated as @internal and has been refactored due to recent changes.
|
||||
+5
-3
@@ -19,10 +19,11 @@
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.3.2 || ^7.0 || ^8.0",
|
||||
"psr/log": "^1.0"
|
||||
"psr/log": "^1 || ^2 || ^3"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
|
||||
"symfony/phpunit-bridge": "^4.2 || ^5",
|
||||
"phpstan/phpstan": "^0.12.55"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
@@ -35,6 +36,7 @@
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"test": "phpunit"
|
||||
"test": "vendor/bin/simple-phpunit",
|
||||
"phpstan": "vendor/bin/phpstan analyse"
|
||||
}
|
||||
}
|
||||
|
||||
+15
-4
@@ -49,8 +49,8 @@ class PhpConfig
|
||||
public function usePersistent()
|
||||
{
|
||||
if ($data = $this->getDataAndReset()) {
|
||||
Process::setEnv('PHPRC', $data['tmpIni']);
|
||||
Process::setEnv('PHP_INI_SCAN_DIR', '');
|
||||
$this->updateEnv('PHPRC', $data['tmpIni']);
|
||||
$this->updateEnv('PHP_INI_SCAN_DIR', '');
|
||||
}
|
||||
|
||||
return array();
|
||||
@@ -64,10 +64,21 @@ class PhpConfig
|
||||
private function getDataAndReset()
|
||||
{
|
||||
if ($data = XdebugHandler::getRestartSettings()) {
|
||||
Process::setEnv('PHPRC', $data['phprc']);
|
||||
Process::setEnv('PHP_INI_SCAN_DIR', $data['scanDir']);
|
||||
$this->updateEnv('PHPRC', $data['phprc']);
|
||||
$this->updateEnv('PHP_INI_SCAN_DIR', $data['scanDir']);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a restart settings value in the environment
|
||||
*
|
||||
* @param string $name
|
||||
* @param string|false $value
|
||||
*/
|
||||
private function updateEnv($name, $value)
|
||||
{
|
||||
Process::setEnv($name, false !== $value ? $value : null);
|
||||
}
|
||||
}
|
||||
|
||||
+12
-79
@@ -12,59 +12,12 @@
|
||||
namespace Composer\XdebugHandler;
|
||||
|
||||
/**
|
||||
* Provides utility functions to prepare a child process command-line and set
|
||||
* environment variables in that process.
|
||||
* Process utility functions
|
||||
*
|
||||
* @author John Stevenson <john-stevenson@blueyonder.co.uk>
|
||||
* @internal
|
||||
*/
|
||||
class Process
|
||||
{
|
||||
/**
|
||||
* Returns an array of parameters, including a color option if required
|
||||
*
|
||||
* A color option is needed because child process output is piped.
|
||||
*
|
||||
* @param array $args The script parameters
|
||||
* @param string $colorOption The long option to force color output
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function addColorOption(array $args, $colorOption)
|
||||
{
|
||||
if (!$colorOption
|
||||
|| in_array($colorOption, $args)
|
||||
|| !preg_match('/^--([a-z]+$)|(^--[a-z]+=)/', $colorOption, $matches)) {
|
||||
return $args;
|
||||
}
|
||||
|
||||
if (isset($matches[2])) {
|
||||
// Handle --color(s)= options
|
||||
if (false !== ($index = array_search($matches[2].'auto', $args))) {
|
||||
$args[$index] = $colorOption;
|
||||
return $args;
|
||||
} elseif (preg_grep('/^'.$matches[2].'/', $args)) {
|
||||
return $args;
|
||||
}
|
||||
} elseif (in_array('--no-'.$matches[1], $args)) {
|
||||
return $args;
|
||||
}
|
||||
|
||||
// Check for NO_COLOR variable (https://no-color.org/)
|
||||
if (false !== getenv('NO_COLOR')) {
|
||||
return $args;
|
||||
}
|
||||
|
||||
if (false !== ($index = array_search('--', $args))) {
|
||||
// Position option before double-dash delimiter
|
||||
array_splice($args, $index, 0, $colorOption);
|
||||
} else {
|
||||
$args[] = $colorOption;
|
||||
}
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes a string to be used as a shell argument.
|
||||
*
|
||||
@@ -109,53 +62,33 @@ class Process
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the output stream supports colors
|
||||
* Escapes an array of arguments that make up a shell command
|
||||
*
|
||||
* This is tricky on Windows, because Cygwin, Msys2 etc emulate pseudo
|
||||
* terminals via named pipes, so we can only check the environment.
|
||||
* @param array $args Argument list, with the module name first
|
||||
*
|
||||
* @param mixed $output A valid CLI output stream
|
||||
*
|
||||
* @return bool
|
||||
* @return string The escaped command line
|
||||
*/
|
||||
public static function supportsColor($output)
|
||||
public static function escapeShellCommand(array $args)
|
||||
{
|
||||
if ('Hyper' === getenv('TERM_PROGRAM')) {
|
||||
return true;
|
||||
$cmd = self::escape(array_shift($args), true, true);
|
||||
foreach ($args as $arg) {
|
||||
$cmd .= ' '.self::escape($arg);
|
||||
}
|
||||
|
||||
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
|
||||
return (function_exists('sapi_windows_vt100_support')
|
||||
&& sapi_windows_vt100_support($output))
|
||||
|| false !== getenv('ANSICON')
|
||||
|| 'ON' === getenv('ConEmuANSI')
|
||||
|| 'xterm' === getenv('TERM');
|
||||
}
|
||||
|
||||
if (function_exists('stream_isatty')) {
|
||||
return stream_isatty($output);
|
||||
}
|
||||
|
||||
if (function_exists('posix_isatty')) {
|
||||
return posix_isatty($output);
|
||||
}
|
||||
|
||||
$stat = fstat($output);
|
||||
// Check if formatted mode is S_IFCHR
|
||||
return $stat ? 0020000 === ($stat['mode'] & 0170000) : false;
|
||||
return $cmd;
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes putenv environment changes available in $_SERVER and $_ENV
|
||||
*
|
||||
* @param string $name
|
||||
* @param string|false $value A false value unsets the variable
|
||||
* @param string|null $value A null value unsets the variable
|
||||
*
|
||||
* @return bool Whether the environment variable was set
|
||||
*/
|
||||
public static function setEnv($name, $value = false)
|
||||
public static function setEnv($name, $value = null)
|
||||
{
|
||||
$unset = false === $value;
|
||||
$unset = null === $value;
|
||||
|
||||
if (!putenv($unset ? $name : $name.'='.$value)) {
|
||||
return false;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user