diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 135bd52b3fe9..975c611a61c3 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -13,7 +13,8 @@ body:
whether still open or closed, related to your report**.
If there is, your report will be closed promptly.
- And if you are not using the [latest version](https://github.com/codeigniter4/CodeIgniter4/releases) of CodeIgniter, please update.
+ For example, if you get the error "*Undefined property: Config\\Exceptions::$sensitiveDataInTrace*",
+ you can search the GitHub repository with the keyword "[$sensitiveDataInTrace](https://github.com/codeigniter4/CodeIgniter4/search?q=%24sensitiveDataInTrace&type=issues)".
---
@@ -35,6 +36,23 @@ body:
id: codeigniter-version
attributes:
label: CodeIgniter4 Version
+ description: |
+ e.g. 4.1.5
+ If you are not using the [latest version](https://github.com/codeigniter4/CodeIgniter4/releases), please
+ check to see if the problem occurs with the latest version.
+ validations:
+ required: true
+
+ - type: dropdown
+ id: codeigniter-installation
+ attributes:
+ label: CodeIgniter4 Installation Method
+ multiple: false
+ options:
+ - Composer (using `codeigniter4/appstarter`)
+ - Composer (as dependency to an existing project)
+ - Manual (zip or tar.gz)
+ - Git
validations:
required: true
@@ -69,6 +87,7 @@ body:
id: database
attributes:
label: Database
+ description: e.g. MySQL 5.6, MariaDB 10.2, PostgreSQL 9.6
validations:
required: false
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index 69bb11b44fe8..9bec3b2d3431 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1,7 +1,7 @@
blank_issues_enabled: false
contact_links:
- name: CodeIgniter Forum
- url: https://forum.codeigniter.com
+ url: https://forum.codeigniter.com/forum-30.html
about: Please ask your support questions in the forums. Thanks!
- name: CodeIgniter Slack channel
diff --git a/.github/release.yml b/.github/release.yml
new file mode 100644
index 000000000000..de6e982d91a6
--- /dev/null
+++ b/.github/release.yml
@@ -0,0 +1,23 @@
+changelog:
+ exclude:
+ authors:
+ - dependabot
+ categories:
+ - title: Breaking Changes
+ labels:
+ - 'breaking change'
+ - title: Fixed Bugs
+ labels:
+ - bug
+ - title: New Features
+ labels:
+ - 'new feature'
+ - title: Enhancements
+ labels:
+ - enhancement
+ - title: Refactoring
+ labels:
+ - refactor
+ - title: Others (Only for checking. Remove this category)
+ labels:
+ - "*"
diff --git a/.github/scripts/deploy-framework b/.github/scripts/deploy-framework
index c3f7e39fa1b7..9396ed88aa04 100644
--- a/.github/scripts/deploy-framework
+++ b/.github/scripts/deploy-framework
@@ -28,6 +28,8 @@ done
# Copy repo-specific files
cp -Rf ${SOURCE}/admin/framework/. ./
+# Copy tests files
+cp -Rf ${SOURCE}/admin/starter/tests/. ./tests/
# Commit the changes
git add .
diff --git a/.github/workflows/deploy-framework.yml b/.github/workflows/deploy-framework.yml
index 5a65f3bd1cfc..cdd23f3c7242 100644
--- a/.github/workflows/deploy-framework.yml
+++ b/.github/workflows/deploy-framework.yml
@@ -40,11 +40,11 @@ jobs:
with:
github-token: ${{secrets.ACCESS_TOKEN}}
script: |
- const release = await github.repos.getLatestRelease({
+ const release = await github.rest.repos.getLatestRelease({
owner: context.repo.owner,
repo: context.repo.repo
})
- github.repos.createRelease({
+ github.rest.repos.createRelease({
owner: context.repo.owner,
repo: 'framework',
tag_name: release.data.tag_name,
@@ -85,11 +85,11 @@ jobs:
with:
github-token: ${{secrets.ACCESS_TOKEN}}
script: |
- const release = await github.repos.getLatestRelease({
+ const release = await github.rest.repos.getLatestRelease({
owner: context.repo.owner,
repo: context.repo.repo
})
- github.repos.createRelease({
+ github.rest.repos.createRelease({
owner: context.repo.owner,
repo: 'appstarter',
tag_name: release.data.tag_name,
diff --git a/.github/workflows/test-phpstan.yml b/.github/workflows/test-phpstan.yml
index 0e59e3bf4e3a..eceb97524605 100644
--- a/.github/workflows/test-phpstan.yml
+++ b/.github/workflows/test-phpstan.yml
@@ -29,7 +29,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- php-versions: ['7.4', '8.0']
+ php-versions: ['8.0', '8.1']
steps:
- name: Checkout
uses: actions/checkout@v2
diff --git a/.github/workflows/test-phpunit.yml b/.github/workflows/test-phpunit.yml
index aa7d584991a6..61133437d3e8 100644
--- a/.github/workflows/test-phpunit.yml
+++ b/.github/workflows/test-phpunit.yml
@@ -4,12 +4,7 @@ on:
push:
branches:
- develop
- - '4.*'
paths:
- - 'app/**'
- - 'public/**'
- - 'system/**'
- - 'tests/**'
- composer.json
- spark
- phpunit.xml.dist
@@ -18,12 +13,7 @@ on:
pull_request:
branches:
- develop
- - '4.*'
paths:
- - 'app/**'
- - 'public/**'
- - 'system/**'
- - 'tests/**'
- composer.json
- spark
- phpunit.xml.dist
@@ -31,22 +21,24 @@ on:
- .github/workflows/test-phpunit.yml
jobs:
-
tests:
+ name: PHP ${{ matrix.php-versions }} - ${{ matrix.db-platforms }}
runs-on: ubuntu-20.04
if: "!contains(github.event.head_commit.message, '[ci skip]')"
- name: PHP ${{ matrix.php-versions }} - ${{ matrix.db-platforms }}
strategy:
fail-fast: false
matrix:
- php-versions: ['7.3', '7.4', '8.0']
+ php-versions: ['7.3', '7.4', '8.0', '8.1']
db-platforms: ['MySQLi', 'Postgre', 'SQLite3', 'SQLSRV']
mysql-versions: ['5.7']
include:
- php-versions: '7.4'
db-platforms: MySQLi
mysql-versions: '8.0'
+ # @todo remove once 8.1 is stable enough
+ - php-versions: '8.1'
+ composer-flag: '--ignore-platform-req=php'
services:
mysql:
@@ -57,6 +49,7 @@ jobs:
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
+
postgres:
image: postgres
env:
@@ -66,6 +59,7 @@ jobs:
ports:
- 5432:5432
options: --health-cmd=pg_isready --health-interval=10s --health-timeout=5s --health-retries=3
+
mssql:
image: mcr.microsoft.com/mssql/server:2019-CU10-ubuntu-20.04
env:
@@ -75,11 +69,13 @@ jobs:
ports:
- 1433:1433
options: --health-cmd="/opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U sa -P 1Secure*Password1 -Q 'SELECT @@VERSION'" --health-interval=10s --health-timeout=5s --health-retries=3
+
redis:
image: redis
ports:
- 6379:6379
options: --health-cmd "redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
+
memcached:
image: memcached:1.6-alpine
ports:
@@ -105,6 +101,7 @@ jobs:
- name: Install latest ImageMagick
run: |
+ sudo apt-get update
sudo apt-get install --reinstall libgs9-common fonts-noto-mono libgs9:amd64 libijs-0.35:amd64 fonts-urw-base35 ghostscript poppler-data libjbig2dec0:amd64 gsfonts libopenjp2-7:amd64 fonts-droid-fallback ttf-dejavu-core
sudo apt-get install -y imagemagick
sudo apt-get install --fix-broken
@@ -122,13 +119,13 @@ jobs:
- name: Install dependencies
run: |
- composer update --ansi --no-interaction
- composer remove --ansi --dev --unused -W rector/rector phpstan/phpstan friendsofphp/php-cs-fixer nexusphp/cs-config codeigniter/coding-standard
+ composer update --ansi --no-interaction ${{ matrix.composer-flag }}
+ composer remove --ansi --dev --unused -W ${{ matrix.composer-flag }} -- rector/rector phpstan/phpstan friendsofphp/php-cs-fixer nexusphp/cs-config codeigniter/coding-standard
env:
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
- - name: Profile slow tests in PHP 7.4 MySQLi for now
- if: matrix.php-versions == '7.4' && matrix.db-platforms == 'MySQLi'
+ - name: Profile slow tests in PHP 8.0
+ if: matrix.php-versions == '8.0'
run: echo "TACHYCARDIA_MONITOR_GA=enabled" >> $GITHUB_ENV
- name: Test with PHPUnit
@@ -137,10 +134,10 @@ jobs:
DB: ${{ matrix.db-platforms }}
TERM: xterm-256color
- - if: github.repository_owner == 'codeigniter4' && matrix.php-versions == '7.4'
- name: Run Coveralls
+ - name: Run Coveralls
+ if: github.repository_owner == 'codeigniter4' && matrix.php-versions == '8.0'
run: |
- composer global require --ansi php-coveralls/php-coveralls:^2.4
+ composer global require --ansi php-coveralls/php-coveralls:^2.4 symfony/console:^5
php-coveralls --coverage_clover=build/logs/clover.xml -v
env:
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -151,6 +148,7 @@ jobs:
if: github.repository_owner == 'codeigniter4'
needs: [tests]
runs-on: ubuntu-20.04
+
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@master
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 74513d243589..c2ea5e536da0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,11 +1,183 @@
# Changelog
+## [v4.1.6](https://github.com/codeigniter4/CodeIgniter4/tree/v4.1.6) (2022-01-03)
+
+[Full Changelog](https://github.com/codeigniter4/CodeIgniter4/compare/v4.1.5...v4.1.6)
+
+**Breaking Changes**
+
+* fix: Incorrect type `BaseBuilder::$tableName` by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5378
+* fix: Validation cannot handle array item by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5405
+
+**Fixed Bugs**
+
+* fix: FileLocator cannot find files in sub-namespaces of the same vendor by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5292
+* fix: add a workaround for upgraded users who do not update Config\Exceptions by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5314
+* Fix db escape negative integers by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5277
+* Fix: remove incorrect processing of CLI params by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5274
+* fix: table alias is prefixed when LIKE clause by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5361
+* fix: `dot_array_search()` unexpected array structure causes Type Error by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5372
+* fix: UploadedFile::move() may return incorrect value by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5302
+* fix: BaseModel::insert() may not pass all the values from Entity by @katie1348 in https://github.com/codeigniter4/CodeIgniter4/pull/4980
+* fix: `IncomingRequest::getJsonVar()` may cause TypeError by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5392
+* chore: fix example test code for appstarter and module by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5421
+* fix: Model::save() may call unneeded countAllResults() by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5439
+* fix: errors when MariaDB/MySQL has `ANSI_QUOTES` enabled by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5425
+* fix: Security class sends cookies immediately by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5429
+* fix: `is_cli()` returns `true` when `$_SERVER['HTTP_USER_AGENT']` is missing by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5393
+* fix: `MySQLi\Connection::_foreignKeyData()` may return duplicated rows by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5416
+* fix: `number_to_currency()` error on PHP 8.1 by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5454
+* fix: VENDORPATH definition by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5453
+* fix: Throttler does not show correct token time by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5470
+* fix: directory_mirror() throws an error if destination directory exists by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5493
+* fix: KINT visual error when activating CSP by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5501
+
+**New Features**
+
+* feat: add filter to check invalid chars in user input by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5227
+
+**Enhancements**
+
+* Add support for PHP 8.1 by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/4883
+* Toolbar - Make it possible to turn off var data collection by @najdanovicivan in https://github.com/codeigniter4/CodeIgniter4/pull/5295
+* feat: add CSRF token randomization by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5283
+* Display file:line and trace information to database queries in debug toolbar by @lonnieezell in https://github.com/codeigniter4/CodeIgniter4/pull/5334
+* feat: add SecureHeaders filter by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5419
+* Feature: BaseBuilder instance as subquery. by @iRedds in https://github.com/codeigniter4/CodeIgniter4/pull/5488
+
+**Refactoring**
+
+* Do not inappropriately register bind when the value is a closure by @vlakoff in https://github.com/codeigniter4/CodeIgniter4/pull/5247
+* refactor: replace $request->uri with $request->getUri() by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5346
+* Determine if binds are simple or named by looking at the $binds array by @vlakoff in https://github.com/codeigniter4/CodeIgniter4/pull/5138
+* Remove unneeded cast to array by @vlakoff in https://github.com/codeigniter4/CodeIgniter4/pull/5379
+* Additional fix for deprecated `null` usage by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5388
+* refactor: dot_array_search() regex by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5443
+* refactor: Time::getDst() by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5415
+* The View class. Optimizing duplicate code. by @iRedds in https://github.com/codeigniter4/CodeIgniter4/pull/5455
+* refactor: fix `ThrottleTest::testFlooding` by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5463
+* refactor: update deprecated method in DatetimeCast by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5474
+* Remove semicolons from SQL statements. by @ytetsuro in https://github.com/codeigniter4/CodeIgniter4/pull/5513
+
+**New Contributors**
+
+* @katie1348 made their first contribution in https://github.com/codeigniter4/CodeIgniter4/pull/4980
+
+## [v4.1.5](https://github.com/codeigniter4/CodeIgniter4/tree/v4.1.5) (2021-11-08)
+
+[Full Changelog](https://github.com/codeigniter4/CodeIgniter4/compare/v4.1.4...v4.1.5)
+
+**Fixed bugs:**
+
+* Fix entity name generation when bundled in model by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5055
+* Fix `Model::__call` throwing `BadMethodCallException` on empty results by @ytetsuro in https://github.com/codeigniter4/CodeIgniter4/pull/5139
+* Fixed an issue where the dropForeginKey method would execute an empty query when the dropConstraintStr property was empty. by @ytetsuro in https://github.com/codeigniter4/CodeIgniter4/pull/5173
+* Update 'updated_at' when enabled in replace() by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/4684
+* Fix query binding with two colons in query by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5117
+* Fixed the problem that _createTable does not take into account that it returns true. by @ytetsuro in https://github.com/codeigniter4/CodeIgniter4/pull/5133
+* Fixed a problem with not run escape for identities in like when `insensitiveSearch` is true. by @ytetsuro in https://github.com/codeigniter4/CodeIgniter4/pull/5170
+* Fixed an issue where an unnecessary prefix was given when the random number was a column. by @ytetsuro in https://github.com/codeigniter4/CodeIgniter4/pull/5179
+* Always escape identifiers in the set(), setUpdateBatch(), and insertBatch() by @ytetsuro in https://github.com/codeigniter4/CodeIgniter4/pull/5132
+* Error when value is an object - validating api data by @daycry in https://github.com/codeigniter4/CodeIgniter4/pull/5142
+* Fix color not updated in several places of the precompiled CSS by @vlakoff in https://github.com/codeigniter4/CodeIgniter4/pull/5155
+* Fix debugbar styles printing by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5100
+* Fix highlighting in database debug toolbar by @vlakoff in https://github.com/codeigniter4/CodeIgniter4/pull/5129
+* Fix debug toolbar db connection count by @danielTiringer in https://github.com/codeigniter4/CodeIgniter4/pull/5172
+* Fix CSRF filter does not work when set it to only post by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5194
+* Add CSRF Protection for PUT/PATCH/DELETE by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5228
+* Fix GC issue when session lifetime is set to 0 by @lf-uraku-yuki in https://github.com/codeigniter4/CodeIgniter4/pull/4744
+* Fix wrong helper path resolution by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5246
+* Fix: remove CURLRequest headers sharing from $_SERVER by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5249
+* Fix Localization not working/being ignored for 404 page by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5267
+* fix: module filters are not discovered when using route filters by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5280
+* IncomingRequest - Trim trailing slash by @najdanovicivan in https://github.com/codeigniter4/CodeIgniter4/pull/4974
+* Previous Responses by @MGatner in https://github.com/codeigniter4/CodeIgniter4/pull/5034
+* (Paging) Ensure page validity by @puschie286 in https://github.com/codeigniter4/CodeIgniter4/pull/5125
+* Fix variable variable `$$id` in RedisHandler by @Terrorboy in https://github.com/codeigniter4/CodeIgniter4/pull/5062
+* Fixes and enhancements to Exceptions by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5052
+
+**Implemented enhancements:**
+
+* feat: `_` can be used as separators in environment variable names by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5156
+* Multiple filters for a route and classname filter by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5128
+* Feature - Mark duplicate queries by @danielTiringer in https://github.com/codeigniter4/CodeIgniter4/pull/5185
+* [Debug] Add formatted query string to timeline. by @sfadschm in https://github.com/codeigniter4/CodeIgniter4/pull/5196
+* [Debug] Improve keyword highlighting and escaping of query strings. by @sfadschm in https://github.com/codeigniter4/CodeIgniter4/pull/5200
+* Add `dropKey` method to `Forge` by @ytetsuro in https://github.com/codeigniter4/CodeIgniter4/pull/5171
+* Reduce memory usage of insertBatch(), updateBatch() by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5202
+* Add Session based CSRF Protection by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5201
+* feat: add valid_url_strict rule by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5268
+
+**Merged pull requests:**
+
+* Merge branch '4.2' by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5060
+* Update to latest laminas-escaper 2.9.0 by @samsonasik in https://github.com/codeigniter4/CodeIgniter4/pull/5065
+* Remove unintended dead code in pre-commit by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5116
+* Adjust orange color in debug toolbar by @vlakoff in https://github.com/codeigniter4/CodeIgniter4/pull/5136
+* Extract method to get prefix for DB access function by @ytetsuro in https://github.com/codeigniter4/CodeIgniter4/pull/5178
+* Improve `model()` auto-completion by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5186
+* Rename toolbar loader to be a regular JS file by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5224
+* [HTTP] Update Http Status Description based on latest iana.org by @samsonasik in https://github.com/codeigniter4/CodeIgniter4/pull/5235
+* Remove CSRF properties by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5231
+* Remove static variables for PHP 8.1 by @kenjis in https://github.com/codeigniter4/CodeIgniter4/pull/5262
+* Replace usage of `FILTER_SANITIZE_STRING` by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5263
+* Simplify logic of `number_to_roman` function by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5270
+* Fix compatibility of `PgSql\Result` on closing the result instance by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5279
+* Fix compatibility of Postgres result for PHP 8.1 by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5278
+
+**New Contributors**
+
+* @Terrorboy made their first contribution in https://github.com/codeigniter4/CodeIgniter4/pull/5062
+* @vlakoff made their first contribution in https://github.com/codeigniter4/CodeIgniter4/pull/5136
+* @Felipebros made their first contribution in https://github.com/codeigniter4/CodeIgniter4/pull/5152
+* @daycry made their first contribution in https://github.com/codeigniter4/CodeIgniter4/pull/5142
+* @danielTiringer made their first contribution in https://github.com/codeigniter4/CodeIgniter4/pull/5172
+
## [v4.1.4](https://github.com/codeigniter4/CodeIgniter4/tree/v4.1.4) (2021-09-06)
+[Full Changelog](https://github.com/codeigniter4/CodeIgniter4/compare/v4.1.3...v4.1.4)
+
This release focuses on code style. All changes (except those noted below) are cosmetic to bring the code in line with the new
[CodeIgniter Coding Standard](https://github.com/CodeIgniter/coding-standard) (based on PSR-12).
-*Note: Full changelog forthcoming.*
+**What's Changed**
+
+* Use php-cs-fixer as coding style tool by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/4770
+* Remove unused local variables by @jeromegamez in https://github.com/codeigniter4/CodeIgniter4/pull/4783
+* Use static lambda if a binding to `$this` is not required. by @jeromegamez in https://github.com/codeigniter4/CodeIgniter4/pull/4784
+* Use/Fix `preg_quote()` delimiters by @jeromegamez in https://github.com/codeigniter4/CodeIgniter4/pull/4789
+* Don't override `$path` parameter by @jeromegamez in https://github.com/codeigniter4/CodeIgniter4/pull/4787
+* Don't override `$value` parameter by @jeromegamez in https://github.com/codeigniter4/CodeIgniter4/pull/4788
+* Add brackets to clarify intent and avoid unwanted side-effects by @jeromegamez in https://github.com/codeigniter4/CodeIgniter4/pull/4791
+* Remove removed `safe_mode` ini Option by @jeromegamez in https://github.com/codeigniter4/CodeIgniter4/pull/4795
+* It will fix undefined index cid error when sending emails with embedded images by @mmfarhan in https://github.com/codeigniter4/CodeIgniter4/pull/4798
+* Revert Model coalesce by @MGatner in https://github.com/codeigniter4/CodeIgniter4/pull/4819
+* Master language constructs shall be used instead of aliases. by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/4847
+* [Commands] Remove unused $minPHPVersion property at Serve command by @samsonasik in https://github.com/codeigniter4/CodeIgniter4/pull/4852
+* Update to latest laminas-escaper ^2.8 by @samsonasik in https://github.com/codeigniter4/CodeIgniter4/pull/4878
+* Remove 'memory_usage' from 'displayPerformanceMetrics()' comment by @Mauricevb in https://github.com/codeigniter4/CodeIgniter4/pull/4939
+* Remove useless code separator comments by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/4946
+* Optimize Filters by @mostafakhudair in https://github.com/codeigniter4/CodeIgniter4/pull/4965
+* Fix properly the phpstan error in 0.12.93 by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/4970
+* Manual cleanup of docblocks and comments by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/4964
+* Make Cookie compatible with ArrayAccess by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5004
+* Replace deprecated FILTER_SANITIZE_STRING by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5005
+* Make CookieStore compatible with IteratorAggregate::getIterator by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5010
+* Make the session handlers all compatible with SessionHandlerInterface by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5012
+* Make CITestStreamFilter compatible with php_user_filter by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5014
+* Make Time compatible with DateTime by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5022
+* Add `ReturnTypeWillChange` attribute to Entity by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5028
+* Replace unused Entity private method by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5029
+* Make File compatible with SplFileInfo by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5040
+* Update documentation code samples by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5039
+* PHP Copy-Paste Detector by @MGatner in https://github.com/codeigniter4/CodeIgniter4/pull/5031
+* Fix key casting in form_dropdown helper. by @sfadschm in https://github.com/codeigniter4/CodeIgniter4/pull/5035
+* Switch to official coding standard by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/5038
+
+**New Contributors**
+
+* @mmfarhan made their first contribution in https://github.com/codeigniter4/CodeIgniter4/pull/4798
+* @Mauricevb made their first contribution in https://github.com/codeigniter4/CodeIgniter4/pull/4939
## [v4.1.3](https://github.com/codeigniter4/CodeIgniter4/tree/v4.1.3) (2021-06-06)
diff --git a/LICENSE b/LICENSE
index daac9e5bb4f5..31425034e8e9 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,7 +1,7 @@
The MIT License (MIT)
Copyright (c) 2014-2019 British Columbia Institute of Technology
-Copyright (c) 2019-2021 CodeIgniter Foundation
+Copyright (c) 2019-2022 CodeIgniter Foundation
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/SECURITY.md b/SECURITY.md
index 7879188492b5..87b894ee713c 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -20,6 +20,7 @@ This person will coordinate the fix and release process, involving the following
- Confirm the problem and determine the affected versions.
- Audit code to find any potential similar problems.
- Prepare fixes for all releases still under maintenance. These fixes will be released as fast as possible.
+- Publish security advisories at https://github.com/codeigniter4/CodeIgniter4/security/advisories
## Comments on this Policy
diff --git a/admin/RELEASE.md b/admin/RELEASE.md
index 822bd1f5f154..eb4e621e1e40 100644
--- a/admin/RELEASE.md
+++ b/admin/RELEASE.md
@@ -1,20 +1,30 @@
# Release Process
> Documentation guide based on the releases of `4.0.5` and `4.1.0` on January 31, 2021.
-> Updated for `4.1.2` on May 17, 2021.
+>
+> Updated for `4.1.6` on December 24, 2021.
+>
> -MGatner
+## Changelog
+
+When generating the changelog each Pull Request to be included must have one of the following [labels](https://github.com/codeigniter4/CodeIgniter4/labels):
+- **bug** ... PRs that fix bugs
+- **enhancement** ... PRs to improve existing functionalities
+- **new feature** ... PRs for new features
+- **refactor** ... PRs to refactor
+
+PRs with breaking changes must have the following additional label:
+- **breaking change** ... PRs that may break existing functionalities
+
+To auto-generate, start drafting a new Release and use the "Auto-generate release notes" button.
+Copy the resulting content into **CHANGELOG.md** and adjust the format to match the existing content.
+
## Preparation
* Work off direct clones of the repos so the release branches persist for a time
* Clone both **codeigniter4/CodeIgniter4** and **codeigniter4/userguide** and resolve any necessary PRs
* Vet the **admin/** folders for any removed hidden files (Action deploy scripts *do not remove these*)
-* Generate a new **CHANGELOG.md** ahead of time using [GitHub Changelog Generator](https://github.com/github-changelog-generator/github-changelog-generator):
-```
-github_changelog_generator --user codeigniter4 --project codeigniter4 --since-tag v4.0.4 --future-release v4.0.5 --token {your_github_token}
-...or
-github_changelog_generator --user codeigniter4 --project codeigniter4 --since-commit "2021-02-01 13:26:28" --future-release v4.0.5 --token {your_github_token}
-```
## CodeIgniter4
diff --git a/admin/module/tests/database/ExampleDatabaseTest.php b/admin/module/tests/database/ExampleDatabaseTest.php
index 203b1261c7e0..f9edc4d235d8 100644
--- a/admin/module/tests/database/ExampleDatabaseTest.php
+++ b/admin/module/tests/database/ExampleDatabaseTest.php
@@ -1,18 +1,18 @@
session->set('logged_in', 123);
-
- $value = $this->session->get('logged_in');
+ $session = Services::session();
- $this->assertSame(123, $value);
+ $session->set('logged_in', 123);
+ $this->assertSame(123, $session->get('logged_in'));
}
}
diff --git a/admin/starter/tests/database/ExampleDatabaseTest.php b/admin/starter/tests/database/ExampleDatabaseTest.php
index 5d13836f9dc6..f9edc4d235d8 100644
--- a/admin/starter/tests/database/ExampleDatabaseTest.php
+++ b/admin/starter/tests/database/ExampleDatabaseTest.php
@@ -2,6 +2,7 @@
use CodeIgniter\Test\CIUnitTestCase;
use CodeIgniter\Test\DatabaseTestTrait;
+use Tests\Support\Database\Seeds\ExampleSeeder;
use Tests\Support\Models\ExampleModel;
/**
@@ -11,6 +12,8 @@ final class ExampleDatabaseTest extends CIUnitTestCase
{
use DatabaseTestTrait;
+ protected $seed = ExampleSeeder::class;
+
public function testModelFindAll()
{
$model = new ExampleModel();
diff --git a/admin/starter/tests/session/ExampleSessionTest.php b/admin/starter/tests/session/ExampleSessionTest.php
index 151036412146..98fe7afa0d77 100644
--- a/admin/starter/tests/session/ExampleSessionTest.php
+++ b/admin/starter/tests/session/ExampleSessionTest.php
@@ -1,6 +1,7 @@
session->set('logged_in', 123);
- $this->assertSame(123, $this->session->get('logged_in'));
+ $session = Services::session();
+
+ $session->set('logged_in', 123);
+ $this->assertSame(123, $session->get('logged_in'));
}
}
diff --git a/app/Config/Filters.php b/app/Config/Filters.php
index df90270a6480..14685207f71b 100644
--- a/app/Config/Filters.php
+++ b/app/Config/Filters.php
@@ -6,6 +6,8 @@
use CodeIgniter\Filters\CSRF;
use CodeIgniter\Filters\DebugToolbar;
use CodeIgniter\Filters\Honeypot;
+use CodeIgniter\Filters\InvalidChars;
+use CodeIgniter\Filters\SecureHeaders;
class Filters extends BaseConfig
{
@@ -16,9 +18,11 @@ class Filters extends BaseConfig
* @var array
*/
public $aliases = [
- 'csrf' => CSRF::class,
- 'toolbar' => DebugToolbar::class,
- 'honeypot' => Honeypot::class,
+ 'csrf' => CSRF::class,
+ 'toolbar' => DebugToolbar::class,
+ 'honeypot' => Honeypot::class,
+ 'invalidchars' => InvalidChars::class,
+ 'secureheaders' => SecureHeaders::class,
];
/**
@@ -31,10 +35,12 @@ class Filters extends BaseConfig
'before' => [
// 'honeypot',
// 'csrf',
+ // 'invalidchars',
],
'after' => [
'toolbar',
// 'honeypot',
+ // 'secureheaders',
],
];
diff --git a/app/Config/Mimes.php b/app/Config/Mimes.php
index 973fb3984901..786bc6a1e5c7 100644
--- a/app/Config/Mimes.php
+++ b/app/Config/Mimes.php
@@ -509,7 +509,7 @@ public static function guessExtensionFromType(string $type, ?string $proposedExt
{
$type = trim(strtolower($type), '. ');
- $proposedExtension = trim(strtolower($proposedExtension));
+ $proposedExtension = trim(strtolower($proposedExtension ?? ''));
if ($proposedExtension !== '') {
if (array_key_exists($proposedExtension, static::$mimes) && in_array($type, is_string(static::$mimes[$proposedExtension]) ? [static::$mimes[$proposedExtension]] : static::$mimes[$proposedExtension], true)) {
diff --git a/app/Config/Security.php b/app/Config/Security.php
index 563cf2f3a86e..05083f8b1db1 100644
--- a/app/Config/Security.php
+++ b/app/Config/Security.php
@@ -17,6 +17,17 @@ class Security extends BaseConfig
*/
public $csrfProtection = 'cookie';
+ /**
+ * --------------------------------------------------------------------------
+ * CSRF Token Randomization
+ * --------------------------------------------------------------------------
+ *
+ * Randomize the CSRF Token for added security.
+ *
+ * @var bool
+ */
+ public $tokenRandomize = false;
+
/**
* --------------------------------------------------------------------------
* CSRF Token Name
diff --git a/app/Config/Toolbar.php b/app/Config/Toolbar.php
index 16a37e83c2b8..7183e1336a28 100644
--- a/app/Config/Toolbar.php
+++ b/app/Config/Toolbar.php
@@ -44,6 +44,18 @@ class Toolbar extends BaseConfig
Events::class,
];
+ /**
+ * --------------------------------------------------------------------------
+ * Collect Var Data
+ * --------------------------------------------------------------------------
+ *
+ * If set to false var data from the views will not be colleted. Usefull to
+ * avoid high memory usage when there are lots of data passed to the view.
+ *
+ * @var bool
+ */
+ public $collectVarData = true;
+
/**
* --------------------------------------------------------------------------
* Max History
diff --git a/app/Views/errors/html/error_exception.php b/app/Views/errors/html/error_exception.php
index 4477ee08ff8b..693afed491f5 100644
--- a/app/Views/errors/html/error_exception.php
+++ b/app/Views/errors/html/error_exception.php
@@ -195,7 +195,7 @@
';
diff --git a/system/ThirdParty/Kint/Renderer/Rich/DepthLimitPlugin.php b/system/ThirdParty/Kint/Renderer/Rich/DepthLimitPlugin.php
index cd92b417985c..69808c7c3e1d 100644
--- a/system/ThirdParty/Kint/Renderer/Rich/DepthLimitPlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Rich/DepthLimitPlugin.php
@@ -25,11 +25,11 @@
namespace Kint\Renderer\Rich;
-use Kint\Object\BasicObject;
+use Kint\Zval\Value;
-class DepthLimitPlugin extends Plugin implements ObjectPluginInterface
+class DepthLimitPlugin extends Plugin implements ValuePluginInterface
{
- public function renderObject(BasicObject $o)
+ public function renderValue(Value $o)
{
return '
'.$this->renderLockedHeader($o, 'Depth Limit').'
';
}
diff --git a/system/ThirdParty/Kint/Renderer/Rich/DocstringPlugin.php b/system/ThirdParty/Kint/Renderer/Rich/DocstringPlugin.php
index 19c530951c4d..cb53a74fb182 100644
--- a/system/ThirdParty/Kint/Renderer/Rich/DocstringPlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Rich/DocstringPlugin.php
@@ -26,25 +26,25 @@
namespace Kint\Renderer\Rich;
use Kint\Kint;
-use Kint\Object\Representation\DocstringRepresentation;
-use Kint\Object\Representation\Representation;
+use Kint\Zval\Representation\DocstringRepresentation;
+use Kint\Zval\Representation\Representation;
class DocstringPlugin extends Plugin implements TabPluginInterface
{
public function renderTab(Representation $r)
{
if (!($r instanceof DocstringRepresentation)) {
- return false;
+ return;
}
- $docstring = array();
+ $docstring = [];
foreach (\explode("\n", $r->contents) as $line) {
$docstring[] = \trim($line);
}
$docstring = \implode("\n", $docstring);
- $location = array();
+ $location = [];
if ($r->class) {
$location[] = 'Inherited from '.$this->renderer->escape($r->class);
diff --git a/system/ThirdParty/Kint/Renderer/Rich/MicrotimePlugin.php b/system/ThirdParty/Kint/Renderer/Rich/MicrotimePlugin.php
index a56bb23ef53a..3d06b529252b 100644
--- a/system/ThirdParty/Kint/Renderer/Rich/MicrotimePlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Rich/MicrotimePlugin.php
@@ -25,16 +25,16 @@
namespace Kint\Renderer\Rich;
-use Kint\Object\Representation\MicrotimeRepresentation;
-use Kint\Object\Representation\Representation;
use Kint\Utils;
+use Kint\Zval\Representation\MicrotimeRepresentation;
+use Kint\Zval\Representation\Representation;
class MicrotimePlugin extends Plugin implements TabPluginInterface
{
public function renderTab(Representation $r)
{
if (!($r instanceof MicrotimeRepresentation)) {
- return false;
+ return;
}
$out = $r->getDateTime()->format('Y-m-d H:i:s.u');
diff --git a/system/ThirdParty/Kint/Renderer/Rich/Plugin.php b/system/ThirdParty/Kint/Renderer/Rich/Plugin.php
index 06710bcc45c2..58e22cb276f4 100644
--- a/system/ThirdParty/Kint/Renderer/Rich/Plugin.php
+++ b/system/ThirdParty/Kint/Renderer/Rich/Plugin.php
@@ -25,8 +25,8 @@
namespace Kint\Renderer\Rich;
-use Kint\Object\BasicObject;
use Kint\Renderer\RichRenderer;
+use Kint\Zval\Value;
abstract class Plugin implements PluginInterface
{
@@ -40,10 +40,9 @@ public function __construct(RichRenderer $r)
/**
* Renders a locked header.
*
- * @param BasicObject $o
- * @param string $content
+ * @param string $content
*/
- public function renderLockedHeader(BasicObject $o, $content)
+ public function renderLockedHeader(Value $o, $content)
{
$header = '
';
diff --git a/system/ThirdParty/Kint/Renderer/Rich/RecursionPlugin.php b/system/ThirdParty/Kint/Renderer/Rich/RecursionPlugin.php
index 618d2176d917..baad2ecb57b8 100644
--- a/system/ThirdParty/Kint/Renderer/Rich/RecursionPlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Rich/RecursionPlugin.php
@@ -25,11 +25,11 @@
namespace Kint\Renderer\Rich;
-use Kint\Object\BasicObject;
+use Kint\Zval\Value;
-class RecursionPlugin extends Plugin implements ObjectPluginInterface
+class RecursionPlugin extends Plugin implements ValuePluginInterface
{
- public function renderObject(BasicObject $o)
+ public function renderValue(Value $o)
{
return '
'.$this->renderLockedHeader($o, 'Recursion').'
';
}
diff --git a/system/ThirdParty/Kint/Renderer/Rich/SimpleXMLElementPlugin.php b/system/ThirdParty/Kint/Renderer/Rich/SimpleXMLElementPlugin.php
index 6c18931ee7af..718cd67aace3 100644
--- a/system/ThirdParty/Kint/Renderer/Rich/SimpleXMLElementPlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Rich/SimpleXMLElementPlugin.php
@@ -25,13 +25,13 @@
namespace Kint\Renderer\Rich;
-use Kint\Object\BasicObject;
-use Kint\Object\BlobObject;
use Kint\Renderer\RichRenderer;
+use Kint\Utils;
+use Kint\Zval\Value;
-class SimpleXMLElementPlugin extends Plugin implements ObjectPluginInterface
+class SimpleXMLElementPlugin extends Plugin implements ValuePluginInterface
{
- public function renderObject(BasicObject $o)
+ public function renderValue(Value $o)
{
$children = $this->renderer->renderChildren($o);
@@ -63,15 +63,11 @@ public function renderObject(BasicObject $o)
$header .= '('.$this->renderer->escape($s).') ';
}
- if (null === $s && $c = $o->getRepresentation('contents')) {
- $c = \reset($c->contents);
-
- if ($c && null !== ($s = $c->getValueShort())) {
- if (RichRenderer::$strlen_max && BlobObject::strlen($s) > RichRenderer::$strlen_max) {
- $s = \substr($s, 0, RichRenderer::$strlen_max).'...';
- }
- $header .= $this->renderer->escape($s);
+ if (null !== ($s = $o->getValueShort())) {
+ if (RichRenderer::$strlen_max) {
+ $s = Utils::truncateString($s, RichRenderer::$strlen_max);
}
+ $header .= $this->renderer->escape($s);
}
$header = $this->renderer->renderHeaderWrapper($o, (bool) \strlen($children), $header);
diff --git a/system/ThirdParty/Kint/Renderer/Rich/SourcePlugin.php b/system/ThirdParty/Kint/Renderer/Rich/SourcePlugin.php
index 5443dbfd9a8e..4be024b627b2 100644
--- a/system/ThirdParty/Kint/Renderer/Rich/SourcePlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Rich/SourcePlugin.php
@@ -25,15 +25,15 @@
namespace Kint\Renderer\Rich;
-use Kint\Object\Representation\Representation;
-use Kint\Object\Representation\SourceRepresentation;
+use Kint\Zval\Representation\Representation;
+use Kint\Zval\Representation\SourceRepresentation;
class SourcePlugin extends Plugin implements TabPluginInterface
{
public function renderTab(Representation $r)
{
if (!($r instanceof SourceRepresentation) || empty($r->source)) {
- return false;
+ return;
}
$source = $r->source;
diff --git a/system/ThirdParty/Kint/Renderer/Rich/TabPluginInterface.php b/system/ThirdParty/Kint/Renderer/Rich/TabPluginInterface.php
index 7cdbde72d2ad..779e13acd3a9 100644
--- a/system/ThirdParty/Kint/Renderer/Rich/TabPluginInterface.php
+++ b/system/ThirdParty/Kint/Renderer/Rich/TabPluginInterface.php
@@ -25,9 +25,12 @@
namespace Kint\Renderer\Rich;
-use Kint\Object\Representation\Representation;
+use Kint\Zval\Representation\Representation;
interface TabPluginInterface extends PluginInterface
{
- public function renderTab(Representation $o);
+ /**
+ * @return null|string
+ */
+ public function renderTab(Representation $r);
}
diff --git a/system/ThirdParty/Kint/Renderer/Rich/TablePlugin.php b/system/ThirdParty/Kint/Renderer/Rich/TablePlugin.php
index cc3ee0f05da7..ac345a167f9d 100644
--- a/system/ThirdParty/Kint/Renderer/Rich/TablePlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Rich/TablePlugin.php
@@ -25,9 +25,9 @@
namespace Kint\Renderer\Rich;
-use Kint\Object\BlobObject;
-use Kint\Object\Representation\Representation;
use Kint\Renderer\RichRenderer;
+use Kint\Utils;
+use Kint\Zval\Representation\Representation;
class TablePlugin extends Plugin implements TabPluginInterface
{
@@ -89,8 +89,8 @@ public function renderTab(Representation $r)
case 'string':
if ($field->encoding) {
$val = $field->value->contents;
- if (RichRenderer::$strlen_max && self::$respect_str_length && BlobObject::strlen($val) > RichRenderer::$strlen_max) {
- $val = \substr($val, 0, RichRenderer::$strlen_max).'...';
+ if (RichRenderer::$strlen_max && self::$respect_str_length) {
+ $val = Utils::truncateString($val, RichRenderer::$strlen_max);
}
$out .= $this->renderer->escape($val);
diff --git a/system/ThirdParty/Kint/Renderer/Rich/TimestampPlugin.php b/system/ThirdParty/Kint/Renderer/Rich/TimestampPlugin.php
index 6e3a2f8c5c83..f0c58e67a3cc 100644
--- a/system/ThirdParty/Kint/Renderer/Rich/TimestampPlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Rich/TimestampPlugin.php
@@ -27,7 +27,7 @@
use DateTime;
use DateTimeZone;
-use Kint\Object\Representation\Representation;
+use Kint\Zval\Representation\Representation;
class TimestampPlugin extends Plugin implements TabPluginInterface
{
diff --git a/system/ThirdParty/Kint/Renderer/Rich/TraceFramePlugin.php b/system/ThirdParty/Kint/Renderer/Rich/TraceFramePlugin.php
index 6ca19bb67157..ea7048bcdd09 100644
--- a/system/ThirdParty/Kint/Renderer/Rich/TraceFramePlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Rich/TraceFramePlugin.php
@@ -25,14 +25,14 @@
namespace Kint\Renderer\Rich;
-use Kint\Object\BasicObject;
-use Kint\Object\TraceFrameObject;
+use Kint\Zval\TraceFrameValue;
+use Kint\Zval\Value;
-class TraceFramePlugin extends Plugin implements ObjectPluginInterface
+class TraceFramePlugin extends Plugin implements ValuePluginInterface
{
- public function renderObject(BasicObject $o)
+ public function renderValue(Value $o)
{
- if (!$o instanceof TraceFrameObject) {
+ if (!$o instanceof TraceFrameValue) {
return;
}
diff --git a/system/ThirdParty/Kint/Renderer/Rich/ObjectPluginInterface.php b/system/ThirdParty/Kint/Renderer/Rich/ValuePluginInterface.php
similarity index 88%
rename from system/ThirdParty/Kint/Renderer/Rich/ObjectPluginInterface.php
rename to system/ThirdParty/Kint/Renderer/Rich/ValuePluginInterface.php
index f46aa2946ea3..8f750eda6bad 100644
--- a/system/ThirdParty/Kint/Renderer/Rich/ObjectPluginInterface.php
+++ b/system/ThirdParty/Kint/Renderer/Rich/ValuePluginInterface.php
@@ -25,9 +25,12 @@
namespace Kint\Renderer\Rich;
-use Kint\Object\BasicObject;
+use Kint\Zval\Value;
-interface ObjectPluginInterface extends PluginInterface
+interface ValuePluginInterface extends PluginInterface
{
- public function renderObject(BasicObject $o);
+ /**
+ * @return null|string
+ */
+ public function renderValue(Value $o);
}
diff --git a/system/ThirdParty/Kint/Renderer/RichRenderer.php b/system/ThirdParty/Kint/Renderer/RichRenderer.php
index dcd39eec8c53..94b7f98ab71f 100644
--- a/system/ThirdParty/Kint/Renderer/RichRenderer.php
+++ b/system/ThirdParty/Kint/Renderer/RichRenderer.php
@@ -26,18 +26,19 @@
namespace Kint\Renderer;
use Kint\Kint;
-use Kint\Object\BasicObject;
-use Kint\Object\BlobObject;
-use Kint\Object\InstanceObject;
-use Kint\Object\Representation\Representation;
use Kint\Utils;
+use Kint\Zval\BlobValue;
+use Kint\Zval\InstanceValue;
+use Kint\Zval\Representation\Representation;
+use Kint\Zval\Value;
class RichRenderer extends Renderer
{
/**
- * RichRenderer object plugins should implement Kint\Renderer\Rich\ObjectPluginInterface.
+ * RichRenderer value plugins should implement Kint\Renderer\Rich\ValuePluginInterface.
*/
- public static $object_plugins = array(
+ public static $value_plugins = [
+ 'array_limit' => 'Kint\\Renderer\\Rich\\ArrayLimitPlugin',
'blacklist' => 'Kint\\Renderer\\Rich\\BlacklistPlugin',
'callable' => 'Kint\\Renderer\\Rich\\CallablePlugin',
'closure' => 'Kint\\Renderer\\Rich\\ClosurePlugin',
@@ -46,12 +47,12 @@ class RichRenderer extends Renderer
'recursion' => 'Kint\\Renderer\\Rich\\RecursionPlugin',
'simplexml_element' => 'Kint\\Renderer\\Rich\\SimpleXMLElementPlugin',
'trace_frame' => 'Kint\\Renderer\\Rich\\TraceFramePlugin',
- );
+ ];
/**
* RichRenderer tab plugins should implement Kint\Renderer\Rich\TabPluginInterface.
*/
- public static $tab_plugins = array(
+ public static $tab_plugins = [
'binary' => 'Kint\\Renderer\\Rich\\BinaryPlugin',
'color' => 'Kint\\Renderer\\Rich\\ColorPlugin',
'docstring' => 'Kint\\Renderer\\Rich\\DocstringPlugin',
@@ -59,18 +60,18 @@ class RichRenderer extends Renderer
'source' => 'Kint\\Renderer\\Rich\\SourcePlugin',
'table' => 'Kint\\Renderer\\Rich\\TablePlugin',
'timestamp' => 'Kint\\Renderer\\Rich\\TimestampPlugin',
- );
-
- public static $pre_render_sources = array(
- 'script' => array(
- array('Kint\\Renderer\\RichRenderer', 'renderJs'),
- array('Kint\\Renderer\\Rich\\MicrotimePlugin', 'renderJs'),
- ),
- 'style' => array(
- array('Kint\\Renderer\\RichRenderer', 'renderCss'),
- ),
- 'raw' => array(),
- );
+ ];
+
+ public static $pre_render_sources = [
+ 'script' => [
+ ['Kint\\Renderer\\RichRenderer', 'renderJs'],
+ ['Kint\\Renderer\\Rich\\MicrotimePlugin', 'renderJs'],
+ ],
+ 'style' => [
+ ['Kint\\Renderer\\RichRenderer', 'renderCss'],
+ ],
+ 'raw' => [],
+ ];
/**
* Whether or not to render access paths.
@@ -118,7 +119,7 @@ class RichRenderer extends Renderer
*
* @var bool
*/
- public static $folder = true;
+ public static $folder = false;
/**
* Sort mode for object properties.
@@ -132,7 +133,7 @@ class RichRenderer extends Renderer
public static $always_pre_render = false;
- protected $plugin_objs = array();
+ protected $plugin_objs = [];
protected $expand = false;
protected $force_pre_render = false;
protected $pre_render;
@@ -193,7 +194,6 @@ public function setForcePreRender()
public function setPreRender($pre_render)
{
- $this->setForcePreRender(); // TODO: Remove line in next major version
$this->pre_render = $pre_render;
}
@@ -212,10 +212,11 @@ public function getUseFolder()
return $this->use_folder;
}
- public function render(BasicObject $o)
+ public function render(Value $o)
{
- if ($plugin = $this->getPlugin(self::$object_plugins, $o->hints)) {
- if (\strlen($output = $plugin->renderObject($o))) {
+ if ($plugin = $this->getPlugin(self::$value_plugins, $o->hints)) {
+ $output = $plugin->renderValue($o);
+ if (null !== $output && \strlen($output)) {
return $output;
}
}
@@ -231,7 +232,7 @@ public function renderNothing()
return '
No argument
';
}
- public function renderHeaderWrapper(BasicObject $o, $has_children, $contents)
+ public function renderHeaderWrapper(Value $o, $has_children, $contents)
{
$out = '
';
}
- public function renderHeader(BasicObject $o)
+ public function renderHeader(Value $o)
{
$output = '';
@@ -319,10 +320,10 @@ public function renderHeader(BasicObject $o)
return \trim($output);
}
- public function renderChildren(BasicObject $o)
+ public function renderChildren(Value $o)
{
- $contents = array();
- $tabs = array();
+ $contents = [];
+ $tabs = [];
foreach ($o->getRepresentations() as $rep) {
$result = $this->renderTab($o, $rep);
@@ -353,10 +354,16 @@ public function renderChildren(BasicObject $o)
$output .= $this->escape($tab->getLabel()).'';
}
- $output .= '
';
+ $output .= '
';
- foreach ($contents as $tab) {
- $output .= '
'.$tab.'
';
+ foreach ($contents as $i => $tab) {
+ if (0 === $i) {
+ $output .= '
';
+ } else {
+ $output .= '
';
+ }
+
+ $output .= $tab.'
';
}
$output .= '
';
@@ -441,7 +448,7 @@ public function postRender()
!empty($this->call_info['callee']['class']) ||
!\in_array(
$this->call_info['callee']['function'],
- array('include', 'include_once', 'require', 'require_once'),
+ ['include', 'include_once', 'require', 'require_once'],
true
)
)
@@ -465,7 +472,7 @@ public function postRender()
$output .= '
'.$this->ideLink($step['file'], $step['line']); // closing tag not required
if (isset($step['function'])
- && !\in_array($step['function'], array('include', 'include_once', 'require', 'require_once'), true)
+ && !\in_array($step['function'], ['include', 'include_once', 'require', 'require_once'], true)
) {
$output .= ' [';
if (isset($step['class'])) {
@@ -488,7 +495,7 @@ public function postRender()
public function escape($string, $encoding = false)
{
if (false === $encoding) {
- $encoding = BlobObject::detectEncoding($string);
+ $encoding = BlobValue::detectEncoding($string);
}
$original_encoding = $encoding;
@@ -501,7 +508,7 @@ public function escape($string, $encoding = false)
// this call converts all non-ASCII characters into numeirc htmlentities
if (\function_exists('mb_encode_numericentity') && 'ASCII' !== $original_encoding) {
- $string = \mb_encode_numericentity($string, array(0x80, 0xffff, 0, 0xffff), $encoding);
+ $string = \mb_encode_numericentity($string, [0x80, 0xFFFF, 0, 0xFFFF], $encoding);
}
return $string;
@@ -525,10 +532,11 @@ public function ideLink($file, $line)
return 'escape($ideLink).'">'.$path.'';
}
- protected function renderTab(BasicObject $o, Representation $rep)
+ protected function renderTab(Value $o, Representation $rep)
{
if ($plugin = $this->getPlugin(self::$tab_plugins, $rep->hints)) {
- if (\strlen($output = $plugin->renderTab($rep))) {
+ $output = $plugin->renderTab($rep);
+ if (null !== $output && \strlen($output)) {
return $output;
}
}
@@ -536,7 +544,7 @@ protected function renderTab(BasicObject $o, Representation $rep)
if (\is_array($rep->contents)) {
$output = '';
- if ($o instanceof InstanceObject && 'properties' === $rep->getName()) {
+ if ($o instanceof InstanceValue && 'properties' === $rep->getName()) {
foreach (self::sortProperties($rep->contents, self::$sort) as $obj) {
$output .= $this->render($obj);
}
@@ -559,7 +567,7 @@ protected function renderTab(BasicObject $o, Representation $rep)
} else {
if (\preg_match('/(:?[\\r\\n\\t\\f\\v]| {2})/', $rep->contents)) {
$show_contents = true;
- } elseif (self::$strlen_max && BlobObject::strlen($o->getValueShort()) > self::$strlen_max) {
+ } elseif (self::$strlen_max && null !== $o->getValueShort() && BlobValue::strlen($o->getValueShort()) > self::$strlen_max) {
$show_contents = true;
}
@@ -573,9 +581,11 @@ protected function renderTab(BasicObject $o, Representation $rep)
}
}
- if ($rep->contents instanceof BasicObject) {
+ if ($rep->contents instanceof Value) {
return $this->render($rep->contents);
}
+
+ return '';
}
protected function getPlugin(array $plugins, array $hints)
@@ -607,6 +617,6 @@ protected static function renderCss()
protected static function renderFolder()
{
- return '
Kint
';
+ return '
Kint
';
}
}
diff --git a/system/ThirdParty/Kint/Renderer/Text/ArrayLimitPlugin.php b/system/ThirdParty/Kint/Renderer/Text/ArrayLimitPlugin.php
new file mode 100644
index 000000000000..12c16f397b1b
--- /dev/null
+++ b/system/ThirdParty/Kint/Renderer/Text/ArrayLimitPlugin.php
@@ -0,0 +1,44 @@
+depth) {
+ $out .= $this->renderer->colorTitle($this->renderer->renderTitle($o)).PHP_EOL;
+ }
+
+ $out .= $this->renderer->renderHeader($o).' '.$this->renderer->colorValue('ARRAY LIMIT').PHP_EOL;
+
+ return $out;
+ }
+}
diff --git a/system/ThirdParty/Kint/Renderer/Text/BlacklistPlugin.php b/system/ThirdParty/Kint/Renderer/Text/BlacklistPlugin.php
index 127d32a197f9..441368b10720 100644
--- a/system/ThirdParty/Kint/Renderer/Text/BlacklistPlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Text/BlacklistPlugin.php
@@ -25,11 +25,11 @@
namespace Kint\Renderer\Text;
-use Kint\Object\BasicObject;
+use Kint\Zval\Value;
class BlacklistPlugin extends Plugin
{
- public function render(BasicObject $o)
+ public function render(Value $o)
{
$out = '';
diff --git a/system/ThirdParty/Kint/Renderer/Text/DepthLimitPlugin.php b/system/ThirdParty/Kint/Renderer/Text/DepthLimitPlugin.php
index 310b87e417b0..cea6cdf89a50 100644
--- a/system/ThirdParty/Kint/Renderer/Text/DepthLimitPlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Text/DepthLimitPlugin.php
@@ -25,11 +25,11 @@
namespace Kint\Renderer\Text;
-use Kint\Object\BasicObject;
+use Kint\Zval\Value;
class DepthLimitPlugin extends Plugin
{
- public function render(BasicObject $o)
+ public function render(Value $o)
{
$out = '';
diff --git a/system/ThirdParty/Kint/Renderer/Text/MicrotimePlugin.php b/system/ThirdParty/Kint/Renderer/Text/MicrotimePlugin.php
index 9128032c4ae0..ce63a5447d87 100644
--- a/system/ThirdParty/Kint/Renderer/Text/MicrotimePlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Text/MicrotimePlugin.php
@@ -25,12 +25,12 @@
namespace Kint\Renderer\Text;
-use Kint\Object\BasicObject;
-use Kint\Object\Representation\MicrotimeRepresentation;
use Kint\Renderer\PlainRenderer;
use Kint\Renderer\Rich\MicrotimePlugin as RichPlugin;
use Kint\Renderer\TextRenderer;
use Kint\Utils;
+use Kint\Zval\Representation\MicrotimeRepresentation;
+use Kint\Zval\Value;
class MicrotimePlugin extends Plugin
{
@@ -45,12 +45,12 @@ public function __construct(TextRenderer $r)
}
}
- public function render(BasicObject $o)
+ public function render(Value $o)
{
$r = $o->getRepresentation('microtime');
if (!$r instanceof MicrotimeRepresentation) {
- return false;
+ return;
}
$out = '';
diff --git a/system/ThirdParty/Kint/Renderer/Text/Plugin.php b/system/ThirdParty/Kint/Renderer/Text/Plugin.php
index 9de25c1a1147..61a1820f48c8 100644
--- a/system/ThirdParty/Kint/Renderer/Text/Plugin.php
+++ b/system/ThirdParty/Kint/Renderer/Text/Plugin.php
@@ -25,8 +25,8 @@
namespace Kint\Renderer\Text;
-use Kint\Object\BasicObject;
use Kint\Renderer\TextRenderer;
+use Kint\Zval\Value;
abstract class Plugin
{
@@ -37,5 +37,8 @@ public function __construct(TextRenderer $r)
$this->renderer = $r;
}
- abstract public function render(BasicObject $o);
+ /**
+ * @return null|string
+ */
+ abstract public function render(Value $o);
}
diff --git a/system/ThirdParty/Kint/Renderer/Text/RecursionPlugin.php b/system/ThirdParty/Kint/Renderer/Text/RecursionPlugin.php
index 72c2257ca8fc..21956b6ec221 100644
--- a/system/ThirdParty/Kint/Renderer/Text/RecursionPlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Text/RecursionPlugin.php
@@ -25,11 +25,11 @@
namespace Kint\Renderer\Text;
-use Kint\Object\BasicObject;
+use Kint\Zval\Value;
class RecursionPlugin extends Plugin
{
- public function render(BasicObject $o)
+ public function render(Value $o)
{
$out = '';
diff --git a/system/ThirdParty/Kint/Renderer/Text/TracePlugin.php b/system/ThirdParty/Kint/Renderer/Text/TracePlugin.php
index 5833840cdf8f..b25f113e040b 100644
--- a/system/ThirdParty/Kint/Renderer/Text/TracePlugin.php
+++ b/system/ThirdParty/Kint/Renderer/Text/TracePlugin.php
@@ -25,12 +25,12 @@
namespace Kint\Renderer\Text;
-use Kint\Object\BasicObject;
-use Kint\Object\MethodObject;
+use Kint\Zval\MethodValue;
+use Kint\Zval\Value;
class TracePlugin extends Plugin
{
- public function render(BasicObject $o)
+ public function render(Value $o)
{
$out = '';
@@ -66,7 +66,7 @@ public function render(BasicObject $o)
if (\is_string($frame->trace['function'])) {
$framedesc .= $this->renderer->escape($frame->trace['function']).'(...)';
- } elseif ($frame->trace['function'] instanceof MethodObject) {
+ } elseif ($frame->trace['function'] instanceof MethodValue) {
$framedesc .= $this->renderer->escape($frame->trace['function']->getName());
$framedesc .= '('.$this->renderer->escape($frame->trace['function']->getParams()).')';
}
diff --git a/system/ThirdParty/Kint/Renderer/TextRenderer.php b/system/ThirdParty/Kint/Renderer/TextRenderer.php
index 43b6c40d63b8..0cfba527c78b 100644
--- a/system/ThirdParty/Kint/Renderer/TextRenderer.php
+++ b/system/ThirdParty/Kint/Renderer/TextRenderer.php
@@ -26,33 +26,36 @@
namespace Kint\Renderer;
use Kint\Kint;
-use Kint\Object\BasicObject;
-use Kint\Object\InstanceObject;
use Kint\Utils;
+use Kint\Zval\InstanceValue;
+use Kint\Zval\Value;
class TextRenderer extends Renderer
{
/**
* TextRenderer plugins should be instances of Kint\Renderer\Text\Plugin.
*/
- public static $plugins = array(
+ public static $plugins = [
+ 'array_limit' => 'Kint\\Renderer\\Text\\ArrayLimitPlugin',
'blacklist' => 'Kint\\Renderer\\Text\\BlacklistPlugin',
'depth_limit' => 'Kint\\Renderer\\Text\\DepthLimitPlugin',
'microtime' => 'Kint\\Renderer\\Text\\MicrotimePlugin',
'recursion' => 'Kint\\Renderer\\Text\\RecursionPlugin',
'trace' => 'Kint\\Renderer\\Text\\TracePlugin',
- );
+ ];
/**
* Parser plugins must be instanceof one of these or
* it will be removed for performance reasons.
*/
- public static $parser_plugin_whitelist = array(
+ public static $parser_plugin_whitelist = [
+ 'Kint\\Parser\\ArrayLimitPlugin',
+ 'Kint\\Parser\\ArrayObjectPlugin',
'Kint\\Parser\\BlacklistPlugin',
'Kint\\Parser\\MicrotimePlugin',
'Kint\\Parser\\StreamPlugin',
'Kint\\Parser\\TracePlugin',
- );
+ ];
/**
* The maximum length of a string before it is truncated.
@@ -94,7 +97,7 @@ class TextRenderer extends Renderer
public $header_width = 80;
public $indent_width = 4;
- protected $plugin_objs = array();
+ protected $plugin_objs = [];
public function __construct()
{
@@ -102,10 +105,11 @@ public function __construct()
$this->indent_width = self::$default_indent;
}
- public function render(BasicObject $o)
+ public function render(Value $o)
{
if ($plugin = $this->getPlugin(self::$plugins, $o->hints)) {
- if (\strlen($output = $plugin->render($o))) {
+ $output = $plugin->render($o);
+ if (null !== $output && \strlen($output)) {
return $output;
}
}
@@ -149,7 +153,7 @@ public function boxText($text, $width)
return $out;
}
- public function renderTitle(BasicObject $o)
+ public function renderTitle(Value $o)
{
$name = (string) $o->getName();
@@ -160,9 +164,9 @@ public function renderTitle(BasicObject $o)
return Utils::truncateString($name, $this->header_width);
}
- public function renderHeader(BasicObject $o)
+ public function renderHeader(Value $o)
{
- $output = array();
+ $output = [];
if ($o->depth) {
if (null !== ($s = $o->getModifiers())) {
@@ -200,7 +204,7 @@ public function renderHeader(BasicObject $o)
return \str_repeat(' ', $o->depth * $this->indent_width).\implode(' ', $output);
}
- public function renderChildren(BasicObject $o)
+ public function renderChildren(Value $o)
{
if ('array' === $o->type) {
$output = ' [';
@@ -213,7 +217,7 @@ public function renderChildren(BasicObject $o)
$children = '';
if ($o->value && \is_array($o->value->contents)) {
- if ($o instanceof InstanceObject && 'properties' === $o->value->getName()) {
+ if ($o instanceof InstanceValue && 'properties' === $o->value->getName()) {
foreach (self::sortProperties($o->value->contents, self::$sort) as $obj) {
$children .= $this->render($obj);
}
@@ -274,7 +278,7 @@ public function postRender()
public function filterParserPlugins(array $plugins)
{
- $return = array();
+ $return = [];
foreach ($plugins as $index => $plugin) {
foreach (self::$parser_plugin_whitelist as $whitelist) {
@@ -313,7 +317,7 @@ protected function calledFrom()
!empty($this->call_info['callee']['class']) ||
!\in_array(
$this->call_info['callee']['function'],
- array('include', 'include_once', 'require', 'require_once'),
+ ['include', 'include_once', 'require', 'require_once'],
true
)
)
diff --git a/system/ThirdParty/Kint/Utils.php b/system/ThirdParty/Kint/Utils.php
index 27a24913fdb1..5143731c75c4 100644
--- a/system/ThirdParty/Kint/Utils.php
+++ b/system/ThirdParty/Kint/Utils.php
@@ -25,8 +25,7 @@
namespace Kint;
-use InvalidArgumentException;
-use Kint\Object\BlobObject;
+use Kint\Zval\BlobValue;
use ReflectionNamedType;
use ReflectionType;
@@ -51,15 +50,36 @@ private function __construct()
*/
public static function getHumanReadableBytes($value)
{
- static $unit = array('B', 'KB', 'MB', 'GB', 'TB');
+ static $unit = ['B', 'KB', 'MB', 'GB', 'TB'];
+
+ $negative = $value < 0;
+ $value = \abs($value);
+
+ if ($value < 1024) {
+ $i = 0;
+ $value = \floor($value);
+ } elseif ($value < 0xFFFCCCCCCCCCCCC >> 40) {
+ $i = 1;
+ } elseif ($value < 0xFFFCCCCCCCCCCCC >> 30) {
+ $i = 2;
+ } elseif ($value < 0xFFFCCCCCCCCCCCC >> 20) {
+ $i = 3;
+ } else {
+ $i = 4;
+ }
- $i = \floor(\log($value, 1024));
- $i = \min($i, 4); // Only go up to TB
+ if ($i) {
+ $value = $value / \pow(1024, $i);
+ }
+
+ if ($negative) {
+ $value *= -1;
+ }
- return array(
- 'value' => (float) ($value / \pow(1024, $i)),
+ return [
+ 'value' => \round($value, 1),
'unit' => $unit[$i],
- );
+ ];
}
public static function isSequential(array $array)
@@ -67,9 +87,14 @@ public static function isSequential(array $array)
return \array_keys($array) === \range(0, \count($array) - 1);
}
+ public static function isAssoc(array $array)
+ {
+ return (bool) \count(\array_filter(\array_keys($array), 'is_string'));
+ }
+
public static function composerGetExtras($key = 'kint')
{
- $extras = array();
+ $extras = [];
if (0 === \strpos(KINT_DIR, 'phar://')) {
// Only run inside phar file, so skip for code coverage
@@ -131,7 +156,7 @@ public static function isTrace(array $trace)
return false;
}
- static $bt_structure = array(
+ static $bt_structure = [
'function' => 'string',
'line' => 'integer',
'file' => 'string',
@@ -139,7 +164,7 @@ public static function isTrace(array $trace)
'object' => 'object',
'type' => 'string',
'args' => 'array',
- );
+ ];
$file_found = false;
@@ -169,7 +194,7 @@ public static function isTrace(array $trace)
public static function traceFrameIsListed(array $frame, array $matches)
{
if (isset($frame['class'])) {
- $called = array(\strtolower($frame['class']), \strtolower($frame['function']));
+ $called = [\strtolower($frame['class']), \strtolower($frame['function'])];
} else {
$called = \strtolower($frame['function']);
}
@@ -189,10 +214,10 @@ public static function normalizeAliases(array &$aliases)
\preg_match('/^'.$name_regex.'$/', $alias[1]) &&
\preg_match('/^\\\\?('.$name_regex.'\\\\)*'.$name_regex.'$/', $alias[0])
) {
- $alias = array(
+ $alias = [
\strtolower(\ltrim($alias[0], '\\')),
\strtolower($alias[1]),
- );
+ ];
} else {
unset($aliases[$index]);
continue;
@@ -216,14 +241,15 @@ public static function normalizeAliases(array &$aliases)
public static function truncateString($input, $length = PHP_INT_MAX, $end = '...', $encoding = false)
{
$length = (int) $length;
- $endlength = BlobObject::strlen($end);
+ $endlength = BlobValue::strlen($end);
if ($endlength >= $length) {
- throw new InvalidArgumentException('Can\'t truncate a string to '.$length.' characters if ending with string '.$endlength.' characters long');
+ $endlength = 0;
+ $end = '';
}
- if (BlobObject::strlen($input, $encoding) > $length) {
- return BlobObject::substr($input, 0, $length - $endlength, $encoding).$end;
+ if (BlobValue::strlen($input, $encoding) > $length) {
+ return BlobValue::substr($input, 0, $length - $endlength, $encoding).$end;
}
return $input;
@@ -232,7 +258,12 @@ public static function truncateString($input, $length = PHP_INT_MAX, $end = '...
public static function getTypeString(ReflectionType $type)
{
if ($type instanceof ReflectionNamedType) {
- return $type->getName();
+ $name = $type->getName();
+ if ($type->allowsNull() && false === \strpos($name, '|')) {
+ $name = '?'.$name;
+ }
+
+ return $name;
}
return (string) $type; // @codeCoverageIgnore
diff --git a/system/ThirdParty/Kint/Object/BlobObject.php b/system/ThirdParty/Kint/Zval/BlobValue.php
similarity index 95%
rename from system/ThirdParty/Kint/Object/BlobObject.php
rename to system/ThirdParty/Kint/Zval/BlobValue.php
index 66d508ff70db..c5ac53acb096 100644
--- a/system/ThirdParty/Kint/Object/BlobObject.php
+++ b/system/ThirdParty/Kint/Zval/BlobValue.php
@@ -23,9 +23,9 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object;
+namespace Kint\Zval;
-class BlobObject extends BasicObject
+class BlobValue extends Value
{
/**
* @var array Character encodings to detect
@@ -51,10 +51,10 @@ class BlobObject extends BasicObject
*
* This depends on the mbstring extension
*/
- public static $char_encodings = array(
+ public static $char_encodings = [
'ASCII',
'UTF-8',
- );
+ ];
/**
* @var array Legacy character encodings to detect
@@ -74,11 +74,11 @@ class BlobObject extends BasicObject
*
* This depends on the iconv extension
*/
- public static $legacy_encodings = array();
+ public static $legacy_encodings = [];
public $type = 'string';
public $encoding = false;
- public $hints = array('string');
+ public $hints = ['string'];
public function getType()
{
@@ -100,7 +100,7 @@ public function getValueShort()
}
}
- public function transplant(BasicObject $old)
+ public function transplant(Value $old)
{
parent::transplant($old);
diff --git a/system/ThirdParty/Kint/Object/ClosureObject.php b/system/ThirdParty/Kint/Zval/ClosureValue.php
similarity index 91%
rename from system/ThirdParty/Kint/Object/ClosureObject.php
rename to system/ThirdParty/Kint/Zval/ClosureValue.php
index 344eceb21e77..95dd3fea9e39 100644
--- a/system/ThirdParty/Kint/Object/ClosureObject.php
+++ b/system/ThirdParty/Kint/Zval/ClosureValue.php
@@ -23,12 +23,12 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object;
+namespace Kint\Zval;
-class ClosureObject extends InstanceObject
+class ClosureValue extends InstanceValue
{
- public $parameters = array();
- public $hints = array('object', 'callable', 'closure');
+ public $parameters = [];
+ public $hints = ['object', 'callable', 'closure'];
private $paramcache;
@@ -49,7 +49,7 @@ public function getParams()
return $this->paramcache;
}
- $out = array();
+ $out = [];
foreach ($this->parameters as $p) {
$type = $p->getType();
diff --git a/system/ThirdParty/Kint/Object/DateTimeObject.php b/system/ThirdParty/Kint/Zval/DateTimeValue.php
similarity index 93%
rename from system/ThirdParty/Kint/Object/DateTimeObject.php
rename to system/ThirdParty/Kint/Zval/DateTimeValue.php
index f8b1b3fd164f..1a8084ec3b9f 100644
--- a/system/ThirdParty/Kint/Object/DateTimeObject.php
+++ b/system/ThirdParty/Kint/Zval/DateTimeValue.php
@@ -23,15 +23,15 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object;
+namespace Kint\Zval;
use DateTime;
-class DateTimeObject extends InstanceObject
+class DateTimeValue extends InstanceValue
{
public $dt;
- public $hints = array('object', 'datetime');
+ public $hints = ['object', 'datetime'];
public function __construct(DateTime $dt)
{
diff --git a/system/ThirdParty/Kint/Object/InstanceObject.php b/system/ThirdParty/Kint/Zval/InstanceValue.php
similarity index 88%
rename from system/ThirdParty/Kint/Object/InstanceObject.php
rename to system/ThirdParty/Kint/Zval/InstanceValue.php
index 943b33d8eabb..1c26600ca47e 100644
--- a/system/ThirdParty/Kint/Object/InstanceObject.php
+++ b/system/ThirdParty/Kint/Zval/InstanceValue.php
@@ -23,29 +23,29 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object;
+namespace Kint\Zval;
-class InstanceObject extends BasicObject
+class InstanceValue extends Value
{
public $type = 'object';
public $classname;
- public $hash;
+ public $spl_object_hash;
public $filename;
public $startline;
- public $hints = array('object');
+ public $hints = ['object'];
public function getType()
{
return $this->classname;
}
- public function transplant(BasicObject $old)
+ public function transplant(Value $old)
{
parent::transplant($old);
if ($old instanceof self) {
$this->classname = $old->classname;
- $this->hash = $old->hash;
+ $this->spl_object_hash = $old->spl_object_hash;
$this->filename = $old->filename;
$this->startline = $old->startline;
}
@@ -56,7 +56,7 @@ public static function sortByHierarchy($a, $b)
if (\is_string($a) && \is_string($b)) {
$aclass = $a;
$bclass = $b;
- } elseif (!($a instanceof BasicObject) || !($b instanceof BasicObject)) {
+ } elseif (!($a instanceof Value) || !($b instanceof Value)) {
return 0;
} elseif ($a instanceof self && $b instanceof self) {
$aclass = $a->classname;
diff --git a/system/ThirdParty/Kint/Object/MethodObject.php b/system/ThirdParty/Kint/Zval/MethodValue.php
similarity index 90%
rename from system/ThirdParty/Kint/Object/MethodObject.php
rename to system/ThirdParty/Kint/Zval/MethodValue.php
index 78d49de22264..5d59a50765f2 100644
--- a/system/ThirdParty/Kint/Object/MethodObject.php
+++ b/system/ThirdParty/Kint/Zval/MethodValue.php
@@ -23,27 +23,27 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object;
+namespace Kint\Zval;
-use Kint\Object\Representation\DocstringRepresentation;
use Kint\Utils;
+use Kint\Zval\Representation\DocstringRepresentation;
use ReflectionFunctionAbstract;
use ReflectionMethod;
-class MethodObject extends BasicObject
+class MethodValue extends Value
{
public $type = 'method';
public $filename;
public $startline;
public $endline;
- public $parameters = array();
+ public $parameters = [];
public $abstract;
public $final;
public $internal;
public $docstring;
public $returntype;
public $return_reference = false;
- public $hints = array('callable', 'method');
+ public $hints = ['callable', 'method'];
public $showparams = true;
private $paramcache;
@@ -61,7 +61,7 @@ public function __construct(ReflectionFunctionAbstract $method)
$this->return_reference = $method->returnsReference();
foreach ($method->getParameters() as $param) {
- $this->parameters[] = new ParameterObject($param);
+ $this->parameters[] = new ParameterValue($param);
}
if (KINT_PHP70) {
@@ -73,15 +73,15 @@ public function __construct(ReflectionFunctionAbstract $method)
if ($method instanceof ReflectionMethod) {
$this->static = $method->isStatic();
- $this->operator = $this->static ? BasicObject::OPERATOR_STATIC : BasicObject::OPERATOR_OBJECT;
+ $this->operator = $this->static ? Value::OPERATOR_STATIC : Value::OPERATOR_OBJECT;
$this->abstract = $method->isAbstract();
$this->final = $method->isFinal();
$this->owner_class = $method->getDeclaringClass()->name;
- $this->access = BasicObject::ACCESS_PUBLIC;
+ $this->access = Value::ACCESS_PUBLIC;
if ($method->isProtected()) {
- $this->access = BasicObject::ACCESS_PROTECTED;
+ $this->access = Value::ACCESS_PROTECTED;
} elseif ($method->isPrivate()) {
- $this->access = BasicObject::ACCESS_PRIVATE;
+ $this->access = Value::ACCESS_PRIVATE;
}
}
@@ -100,9 +100,9 @@ public function __construct(ReflectionFunctionAbstract $method)
$this->value = $docstring;
}
- public function setAccessPathFrom(InstanceObject $parent)
+ public function setAccessPathFrom(InstanceValue $parent)
{
- static $magic = array(
+ static $magic = [
'__call' => true,
'__callstatic' => true,
'__clone' => true,
@@ -118,7 +118,7 @@ public function setAccessPathFrom(InstanceObject $parent)
'__tostring' => true,
'__unset' => true,
'__wakeup' => true,
- );
+ ];
$name = \strtolower($this->name);
@@ -172,12 +172,12 @@ public function getValueShort()
public function getModifiers()
{
- $mods = array(
+ $mods = [
$this->abstract ? 'abstract' : null,
$this->final ? 'final' : null,
$this->getAccess(),
$this->static ? 'static' : null,
- );
+ ];
$out = '';
@@ -209,7 +209,7 @@ public function getParams()
return $this->paramcache;
}
- $out = array();
+ $out = [];
foreach ($this->parameters as $p) {
$type = $p->getType();
diff --git a/system/ThirdParty/Kint/Object/ParameterObject.php b/system/ThirdParty/Kint/Zval/ParameterValue.php
similarity index 95%
rename from system/ThirdParty/Kint/Object/ParameterObject.php
rename to system/ThirdParty/Kint/Zval/ParameterValue.php
index 4bed551f548b..29bcbe72bb2b 100644
--- a/system/ThirdParty/Kint/Object/ParameterObject.php
+++ b/system/ThirdParty/Kint/Zval/ParameterValue.php
@@ -23,18 +23,18 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object;
+namespace Kint\Zval;
use Kint\Utils;
use ReflectionException;
use ReflectionParameter;
-class ParameterObject extends BasicObject
+class ParameterValue extends Value
{
public $type_hint;
public $default;
public $position;
- public $hints = array('parameter');
+ public $hints = ['parameter'];
public function __construct(ReflectionParameter $param)
{
@@ -64,7 +64,6 @@ public function __construct(ReflectionParameter $param)
$this->position = $param->getPosition();
if ($param->isDefaultValueAvailable()) {
- /** @var mixed Psalm bug workaround */
$default = $param->getDefaultValue();
switch (\gettype($default)) {
case 'NULL':
diff --git a/system/ThirdParty/Kint/Object/Representation/ColorRepresentation.php b/system/ThirdParty/Kint/Zval/Representation/ColorRepresentation.php
similarity index 96%
rename from system/ThirdParty/Kint/Object/Representation/ColorRepresentation.php
rename to system/ThirdParty/Kint/Zval/Representation/ColorRepresentation.php
index d6a072f50891..533ccb35d940 100644
--- a/system/ThirdParty/Kint/Object/Representation/ColorRepresentation.php
+++ b/system/ThirdParty/Kint/Zval/Representation/ColorRepresentation.php
@@ -23,7 +23,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object\Representation;
+namespace Kint\Zval\Representation;
use InvalidArgumentException;
@@ -39,7 +39,7 @@ class ColorRepresentation extends Representation
const COLOR_HEX_4 = 8;
const COLOR_HEX_8 = 9;
- public static $color_map = array(
+ public static $color_map = [
'aliceblue' => 'f0f8ff',
'antiquewhite' => 'faebd7',
'aqua' => '00ffff',
@@ -191,7 +191,7 @@ class ColorRepresentation extends Representation
'whitesmoke' => 'f5f5f5',
'yellow' => 'ffff00',
'yellowgreen' => '9acd32',
- );
+ ];
public $r = 0;
public $g = 0;
@@ -199,7 +199,7 @@ class ColorRepresentation extends Representation
public $a = 1.0;
public $variant;
public $implicit_label = true;
- public $hints = array('color');
+ public $hints = ['color'];
public function __construct($value)
{
@@ -254,7 +254,7 @@ public function getColor($variant = null)
return \sprintf('hsla(%d, %d%%, %d%%, %s)', $val[0], $val[1], $val[2], \round($this->a, 4));
case self::COLOR_HEX_4:
- if (0 === $this->r % 0x11 && 0 === $this->g % 0x11 && 0 === $this->b % 0x11 && 0 === ($this->a * 255) % 0x11) {
+ if (0 === $this->r % 0x11 && 0 === $this->g % 0x11 && 0 === $this->b % 0x11 && 0 === ((int) ($this->a * 255)) % 0x11) {
return \sprintf(
'#%1X%1X%1X%1X',
\round($this->r / 0x11),
@@ -413,21 +413,19 @@ protected function setValuesFromFunction($value)
if (3 === $i) {
$color = $color / 100;
- } elseif (\in_array($variant, array(self::COLOR_RGB, self::COLOR_RGBA), true)) {
+ } elseif (\in_array($variant, [self::COLOR_RGB, self::COLOR_RGBA], true)) {
$color = \round($color / 100 * 0xFF);
}
}
$color = (float) $color;
- if (0 === $i && \in_array($variant, array(self::COLOR_HSL, self::COLOR_HSLA), true)) {
- $color = ($color % 360 + 360) % 360;
+ if (0 === $i && \in_array($variant, [self::COLOR_HSL, self::COLOR_HSLA], true)) {
+ $color = \fmod(\fmod($color, 360) + 360, 360);
}
}
- /** @var float[] Psalm bug workaround */
- $params = \array_map('floatval', $params);
-
+ /** @var non-empty-array $params Psalm bug workaround */
switch ($variant) {
case self::COLOR_RGBA:
case self::COLOR_RGB:
@@ -486,11 +484,11 @@ public static function hslToRgb($h, $s, $l)
$m2 = ($l <= 0.5) ? $l * ($s + 1) : $l + $s - $l * $s;
$m1 = $l * 2 - $m2;
- return array(
+ return [
(int) \round(self::hueToRgb($m1, $m2, $h + 1 / 3) * 0xFF),
(int) \round(self::hueToRgb($m1, $m2, $h) * 0xFF),
(int) \round(self::hueToRgb($m1, $m2, $h - 1 / 3) * 0xFF),
- );
+ ];
}
/**
@@ -541,17 +539,16 @@ public static function rgbToHsl($red, $green, $blue)
}
}
- return array(
- (float) ($H * 360 % 360),
+ return [
+ \fmod($H * 360, 360),
(float) ($S * 100),
(float) ($L * 100),
- );
+ ];
}
/**
* Helper function for hslToRgb. Even blacker magic.
*
- *
* @param float $m1
* @param float $m2
* @param float $hue
diff --git a/system/ThirdParty/Kint/Object/Representation/DocstringRepresentation.php b/system/ThirdParty/Kint/Zval/Representation/DocstringRepresentation.php
similarity index 97%
rename from system/ThirdParty/Kint/Object/Representation/DocstringRepresentation.php
rename to system/ThirdParty/Kint/Zval/Representation/DocstringRepresentation.php
index 488d8d6e0748..8acdcc1e8583 100644
--- a/system/ThirdParty/Kint/Object/Representation/DocstringRepresentation.php
+++ b/system/ThirdParty/Kint/Zval/Representation/DocstringRepresentation.php
@@ -23,14 +23,14 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object\Representation;
+namespace Kint\Zval\Representation;
class DocstringRepresentation extends Representation
{
public $file;
public $line;
public $class;
- public $hints = array('docstring');
+ public $hints = ['docstring'];
public function __construct($docstring, $file, $line, $class = null)
{
diff --git a/system/ThirdParty/Kint/Object/Representation/MicrotimeRepresentation.php b/system/ThirdParty/Kint/Zval/Representation/MicrotimeRepresentation.php
similarity index 96%
rename from system/ThirdParty/Kint/Object/Representation/MicrotimeRepresentation.php
rename to system/ThirdParty/Kint/Zval/Representation/MicrotimeRepresentation.php
index b9f4dacb314b..aedc2edffb6e 100644
--- a/system/ThirdParty/Kint/Object/Representation/MicrotimeRepresentation.php
+++ b/system/ThirdParty/Kint/Zval/Representation/MicrotimeRepresentation.php
@@ -23,7 +23,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object\Representation;
+namespace Kint\Zval\Representation;
use DateTime;
@@ -40,7 +40,7 @@ class MicrotimeRepresentation extends Representation
public $mem_real = 0;
public $mem_peak = 0;
public $mem_peak_real = 0;
- public $hints = array('microtime');
+ public $hints = ['microtime'];
public function __construct($seconds, $microseconds, $group, $lap = null, $total = null, $i = 0)
{
diff --git a/system/ThirdParty/Kint/Object/Representation/Representation.php b/system/ThirdParty/Kint/Zval/Representation/Representation.php
similarity index 95%
rename from system/ThirdParty/Kint/Object/Representation/Representation.php
rename to system/ThirdParty/Kint/Zval/Representation/Representation.php
index 0c911a4eaa98..2d649d077c13 100644
--- a/system/ThirdParty/Kint/Object/Representation/Representation.php
+++ b/system/ThirdParty/Kint/Zval/Representation/Representation.php
@@ -23,14 +23,14 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object\Representation;
+namespace Kint\Zval\Representation;
class Representation
{
public $label;
public $implicit_label = false;
- public $hints = array();
- public $contents = array();
+ public $hints = [];
+ public $contents = [];
protected $name;
diff --git a/system/ThirdParty/Kint/Object/Representation/SourceRepresentation.php b/system/ThirdParty/Kint/Zval/Representation/SourceRepresentation.php
similarity index 96%
rename from system/ThirdParty/Kint/Object/Representation/SourceRepresentation.php
rename to system/ThirdParty/Kint/Zval/Representation/SourceRepresentation.php
index c2cf1204f1a9..65077d6218c6 100644
--- a/system/ThirdParty/Kint/Object/Representation/SourceRepresentation.php
+++ b/system/ThirdParty/Kint/Zval/Representation/SourceRepresentation.php
@@ -23,12 +23,12 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object\Representation;
+namespace Kint\Zval\Representation;
class SourceRepresentation extends Representation
{
- public $hints = array('source');
- public $source = array();
+ public $hints = ['source'];
+ public $source = [];
public $filename;
public $line = 0;
public $showfilename = false;
diff --git a/system/ThirdParty/Kint/Object/Representation/SplFileInfoRepresentation.php b/system/ThirdParty/Kint/Zval/Representation/SplFileInfoRepresentation.php
similarity index 95%
rename from system/ThirdParty/Kint/Object/Representation/SplFileInfoRepresentation.php
rename to system/ThirdParty/Kint/Zval/Representation/SplFileInfoRepresentation.php
index 3df50e6a1284..6208451b41ed 100644
--- a/system/ThirdParty/Kint/Object/Representation/SplFileInfoRepresentation.php
+++ b/system/ThirdParty/Kint/Zval/Representation/SplFileInfoRepresentation.php
@@ -23,29 +23,29 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object\Representation;
+namespace Kint\Zval\Representation;
use Kint\Utils;
use SplFileInfo;
class SplFileInfoRepresentation extends Representation
{
- public $perms;
+ public $perms = null;
public $flags;
public $path;
- public $realpath;
- public $linktarget;
+ public $realpath = null;
+ public $linktarget = null;
public $size;
public $is_dir = false;
public $is_file = false;
public $is_link = false;
- public $owner;
- public $group;
+ public $owner = null;
+ public $group = null;
public $ctime;
public $mtime;
public $typename = 'Unknown file';
public $typeflag = '-';
- public $hints = array('fspath');
+ public $hints = ['fspath'];
public function __construct(SplFileInfo $fileInfo)
{
@@ -109,7 +109,7 @@ public function __construct(SplFileInfo $fileInfo)
break;
}
- $this->flags = array($this->typeflag);
+ $this->flags = [$this->typeflag];
// User
$this->flags[] = (($this->perms & 0400) ? 'r' : '-');
diff --git a/system/ThirdParty/Kint/Object/ResourceObject.php b/system/ThirdParty/Kint/Zval/ResourceValue.php
similarity index 93%
rename from system/ThirdParty/Kint/Object/ResourceObject.php
rename to system/ThirdParty/Kint/Zval/ResourceValue.php
index a43f85d900ee..ef1c5541e476 100644
--- a/system/ThirdParty/Kint/Object/ResourceObject.php
+++ b/system/ThirdParty/Kint/Zval/ResourceValue.php
@@ -23,9 +23,9 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object;
+namespace Kint\Zval;
-class ResourceObject extends BasicObject
+class ResourceValue extends Value
{
public $resource_type;
@@ -38,7 +38,7 @@ public function getType()
return 'resource';
}
- public function transplant(BasicObject $old)
+ public function transplant(Value $old)
{
parent::transplant($old);
diff --git a/system/ThirdParty/Kint/Zval/SimpleXMLElementValue.php b/system/ThirdParty/Kint/Zval/SimpleXMLElementValue.php
new file mode 100644
index 000000000000..b385bc6daa2e
--- /dev/null
+++ b/system/ThirdParty/Kint/Zval/SimpleXMLElementValue.php
@@ -0,0 +1,48 @@
+is_string_value = $is_string_value;
+ }
+
+ public function getValueShort()
+ {
+ if ($this->is_string_value && ($rep = $this->value) && 'contents' === $rep->getName() && 'string' === \gettype($rep->contents)) {
+ return '"'.$rep->contents.'"';
+ }
+ }
+}
diff --git a/system/ThirdParty/Kint/Object/StreamObject.php b/system/ThirdParty/Kint/Zval/StreamValue.php
similarity index 96%
rename from system/ThirdParty/Kint/Object/StreamObject.php
rename to system/ThirdParty/Kint/Zval/StreamValue.php
index 358f2743e94f..af909c84f39a 100644
--- a/system/ThirdParty/Kint/Object/StreamObject.php
+++ b/system/ThirdParty/Kint/Zval/StreamValue.php
@@ -23,11 +23,11 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object;
+namespace Kint\Zval;
use Kint\Kint;
-class StreamObject extends ResourceObject
+class StreamValue extends ResourceValue
{
public $stream_meta;
diff --git a/system/ThirdParty/Kint/Object/ThrowableObject.php b/system/ThirdParty/Kint/Zval/ThrowableValue.php
similarity index 88%
rename from system/ThirdParty/Kint/Object/ThrowableObject.php
rename to system/ThirdParty/Kint/Zval/ThrowableValue.php
index 2a86d57538df..26676481c26d 100644
--- a/system/ThirdParty/Kint/Object/ThrowableObject.php
+++ b/system/ThirdParty/Kint/Zval/ThrowableValue.php
@@ -23,21 +23,21 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object;
+namespace Kint\Zval;
use Exception;
use InvalidArgumentException;
use Throwable;
-class ThrowableObject extends InstanceObject
+class ThrowableValue extends InstanceValue
{
public $message;
- public $hints = array('object', 'throwable');
+ public $hints = ['object', 'throwable'];
public function __construct($throw)
{
if (!$throw instanceof Exception && (!KINT_PHP70 || !$throw instanceof Throwable)) {
- throw new InvalidArgumentException('ThrowableObject must be constructed with a Throwable');
+ throw new InvalidArgumentException('ThrowableValue must be constructed with a Throwable');
}
parent::__construct();
diff --git a/system/ThirdParty/Kint/Object/TraceFrameObject.php b/system/ThirdParty/Kint/Zval/TraceFrameValue.php
similarity index 81%
rename from system/ThirdParty/Kint/Object/TraceFrameObject.php
rename to system/ThirdParty/Kint/Zval/TraceFrameValue.php
index 4259aeeec1aa..62f7829192d2 100644
--- a/system/ThirdParty/Kint/Object/TraceFrameObject.php
+++ b/system/ThirdParty/Kint/Zval/TraceFrameValue.php
@@ -23,52 +23,57 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object;
+namespace Kint\Zval;
-use Kint\Object\Representation\Representation;
-use Kint\Object\Representation\SourceRepresentation;
+use InvalidArgumentException;
+use Kint\Zval\Representation\Representation;
+use Kint\Zval\Representation\SourceRepresentation;
use ReflectionFunction;
use ReflectionMethod;
-class TraceFrameObject extends BasicObject
+class TraceFrameValue extends Value
{
public $trace;
- public $hints = array('trace_frame');
+ public $hints = ['trace_frame'];
- public function __construct(BasicObject $base, array $raw_frame)
+ public function __construct(Value $base, array $raw_frame)
{
parent::__construct();
$this->transplant($base);
- $this->trace = array(
- 'function' => isset($raw_frame['function']) ? $raw_frame['function'] : null,
+ if (!isset($this->value)) {
+ throw new InvalidArgumentException('Tried to create TraceFrameValue from Value with no value representation');
+ }
+
+ $this->trace = [
+ 'function' => $raw_frame['function'],
'line' => isset($raw_frame['line']) ? $raw_frame['line'] : null,
'file' => isset($raw_frame['file']) ? $raw_frame['file'] : null,
'class' => isset($raw_frame['class']) ? $raw_frame['class'] : null,
'type' => isset($raw_frame['type']) ? $raw_frame['type'] : null,
'object' => null,
'args' => null,
- );
+ ];
if ($this->trace['class'] && \method_exists($this->trace['class'], $this->trace['function'])) {
$func = new ReflectionMethod($this->trace['class'], $this->trace['function']);
- $this->trace['function'] = new MethodObject($func);
+ $this->trace['function'] = new MethodValue($func);
} elseif (!$this->trace['class'] && \function_exists($this->trace['function'])) {
$func = new ReflectionFunction($this->trace['function']);
- $this->trace['function'] = new MethodObject($func);
+ $this->trace['function'] = new MethodValue($func);
}
foreach ($this->value->contents as $frame_prop) {
if ('object' === $frame_prop->name) {
$this->trace['object'] = $frame_prop;
$this->trace['object']->name = null;
- $this->trace['object']->operator = BasicObject::OPERATOR_NONE;
+ $this->trace['object']->operator = Value::OPERATOR_NONE;
}
if ('args' === $frame_prop->name) {
$this->trace['args'] = $frame_prop->value->contents;
- if ($this->trace['function'] instanceof MethodObject) {
+ if ($this->trace['function'] instanceof MethodValue) {
foreach (\array_values($this->trace['function']->parameters) as $param) {
if (isset($this->trace['args'][$param->position])) {
$this->trace['args'][$param->position]->name = $param->getName();
diff --git a/system/ThirdParty/Kint/Object/TraceObject.php b/system/ThirdParty/Kint/Zval/TraceValue.php
similarity index 93%
rename from system/ThirdParty/Kint/Object/TraceObject.php
rename to system/ThirdParty/Kint/Zval/TraceValue.php
index a780b082bf9c..4d0edc42219a 100644
--- a/system/ThirdParty/Kint/Object/TraceObject.php
+++ b/system/ThirdParty/Kint/Zval/TraceValue.php
@@ -23,11 +23,11 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object;
+namespace Kint\Zval;
-class TraceObject extends BasicObject
+class TraceValue extends Value
{
- public $hints = array('trace');
+ public $hints = ['trace'];
public function getType()
{
diff --git a/system/ThirdParty/Kint/Object/BasicObject.php b/system/ThirdParty/Kint/Zval/Value.php
similarity index 91%
rename from system/ThirdParty/Kint/Object/BasicObject.php
rename to system/ThirdParty/Kint/Zval/Value.php
index d69347eb8dfc..747efb5f718f 100644
--- a/system/ThirdParty/Kint/Object/BasicObject.php
+++ b/system/ThirdParty/Kint/Zval/Value.php
@@ -23,11 +23,11 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-namespace Kint\Object;
+namespace Kint\Zval;
-use Kint\Object\Representation\Representation;
+use Kint\Zval\Representation\Representation;
-class BasicObject
+class Value
{
const ACCESS_NONE = null;
const ACCESS_PUBLIC = 1;
@@ -51,9 +51,9 @@ class BasicObject
public $depth = 0;
public $size;
public $value;
- public $hints = array();
+ public $hints = [];
- protected $representations = array();
+ protected $representations = [];
public function __construct()
{
@@ -70,7 +70,7 @@ public function addRepresentation(Representation $rep, $pos = null)
} else {
$this->representations = \array_merge(
\array_slice($this->representations, 0, $pos),
- array($rep->getName() => $rep),
+ [$rep->getName() => $rep],
\array_slice($this->representations, $pos)
);
}
@@ -111,7 +111,7 @@ public function getRepresentations()
public function clearRepresentations()
{
- $this->representations = array();
+ $this->representations = [];
}
public function getType()
@@ -131,7 +131,7 @@ public function getModifiers()
$out .= ' static';
}
- if (\strlen($out)) {
+ if (null !== $out && \strlen($out)) {
return \ltrim($out);
}
}
@@ -188,7 +188,7 @@ public function getAccessPath()
return $this->access_path;
}
- public function transplant(BasicObject $old)
+ public function transplant(Value $old)
{
$this->name = $old->name;
$this->size = $old->size;
@@ -212,7 +212,7 @@ public function transplant(BasicObject $old)
* @param null|string $name
* @param null|string $access_path
*
- * @return \Kint\Object\BasicObject
+ * @return \Kint\Zval\Value
*/
public static function blank($name = null, $access_path = null)
{
@@ -223,19 +223,19 @@ public static function blank($name = null, $access_path = null)
return $o;
}
- public static function sortByAccess(BasicObject $a, BasicObject $b)
+ public static function sortByAccess(Value $a, Value $b)
{
- static $sorts = array(
+ static $sorts = [
self::ACCESS_PUBLIC => 1,
self::ACCESS_PROTECTED => 2,
self::ACCESS_PRIVATE => 3,
self::ACCESS_NONE => 4,
- );
+ ];
return $sorts[$a->access] - $sorts[$b->access];
}
- public static function sortByName(BasicObject $a, BasicObject $b)
+ public static function sortByName(Value $a, Value $b)
{
$ret = \strnatcasecmp($a->name, $b->name);
diff --git a/system/ThirdParty/Kint/init.php b/system/ThirdParty/Kint/init.php
index 952e041400ff..2e7c62b4b1c9 100644
--- a/system/ThirdParty/Kint/init.php
+++ b/system/ThirdParty/Kint/init.php
@@ -30,31 +30,33 @@
return;
}
-if (\version_compare(PHP_VERSION, '5.3') < 0) {
- throw new Exception('Kint 3.0 requires PHP 5.3 or higher');
+if (\version_compare(PHP_VERSION, '5.6') < 0) {
+ throw new Exception('Kint 4.0 requires PHP 5.6 or higher');
}
\define('KINT_DIR', __DIR__);
\define('KINT_WIN', DIRECTORY_SEPARATOR !== '/');
-\define('KINT_PHP56', (\version_compare(PHP_VERSION, '5.6') >= 0));
\define('KINT_PHP70', (\version_compare(PHP_VERSION, '7.0') >= 0));
+\define('KINT_PHP71', (\version_compare(PHP_VERSION, '7.1') >= 0));
\define('KINT_PHP72', (\version_compare(PHP_VERSION, '7.2') >= 0));
\define('KINT_PHP73', (\version_compare(PHP_VERSION, '7.3') >= 0));
\define('KINT_PHP74', (\version_compare(PHP_VERSION, '7.4') >= 0));
+\define('KINT_PHP80', (\version_compare(PHP_VERSION, '8.0') >= 0));
+\define('KINT_PHP81', (\version_compare(PHP_VERSION, '8.1') >= 0));
// Dynamic default settings
Kint::$file_link_format = \ini_get('xdebug.file_link_format');
if (isset($_SERVER['DOCUMENT_ROOT'])) {
- Kint::$app_root_dirs = array(
+ Kint::$app_root_dirs = [
$_SERVER['DOCUMENT_ROOT'] => '',
\realpath($_SERVER['DOCUMENT_ROOT']) => '',
- );
+ ];
}
Utils::composerSkipFlags();
if ((!\defined('KINT_SKIP_FACADE') || !KINT_SKIP_FACADE) && !\class_exists('Kint')) {
- \class_alias('Kint\\Kint', 'Kint');
+ \class_alias(Kint::class, 'Kint');
}
if (!\defined('KINT_SKIP_HELPERS') || !KINT_SKIP_HELPERS) {
diff --git a/system/ThirdParty/Kint/init_helpers.php b/system/ThirdParty/Kint/init_helpers.php
index b961d67f1af5..3dca84c35f08 100644
--- a/system/ThirdParty/Kint/init_helpers.php
+++ b/system/ThirdParty/Kint/init_helpers.php
@@ -24,6 +24,7 @@
*/
use Kint\Kint;
+use Kint\Renderer\CliRenderer;
if (!\function_exists('d')) {
/**
@@ -35,7 +36,7 @@ function d()
{
$args = \func_get_args();
- return \call_user_func_array(array('Kint', 'dump'), $args);
+ return \call_user_func_array(['Kint', 'dump'], $args);
}
Kint::$aliases[] = 'd';
@@ -59,23 +60,28 @@ function d()
*/
function s()
{
- if (!Kint::$enabled_mode) {
+ if (false === Kint::$enabled_mode) {
return 0;
}
- $stash = Kint::$enabled_mode;
+ $kstash = Kint::$enabled_mode;
+ $cstash = CliRenderer::$cli_colors;
if (Kint::MODE_TEXT !== Kint::$enabled_mode) {
Kint::$enabled_mode = Kint::MODE_PLAIN;
+
if (PHP_SAPI === 'cli' && true === Kint::$cli_detection) {
Kint::$enabled_mode = Kint::$mode_default_cli;
}
}
+ CliRenderer::$cli_colors = false;
+
$args = \func_get_args();
- $out = \call_user_func_array(array('Kint', 'dump'), $args);
+ $out = \call_user_func_array(['Kint', 'dump'], $args);
- Kint::$enabled_mode = $stash;
+ Kint::$enabled_mode = $kstash;
+ CliRenderer::$cli_colors = $cstash;
return $out;
}
diff --git a/system/ThirdParty/Kint/resources/compiled/aante-light.css b/system/ThirdParty/Kint/resources/compiled/aante-light.css
index 2de17accf9a9..dc7a40a73489 100644
--- a/system/ThirdParty/Kint/resources/compiled/aante-light.css
+++ b/system/ThirdParty/Kint/resources/compiled/aante-light.css
@@ -1 +1 @@
-.kint-rich{font-size:13px;overflow-x:auto;white-space:nowrap;background:rgba(255,255,255,0.9)}.kint-rich.kint-folder{position:fixed;bottom:0;left:0;right:0;z-index:999999;width:100%;margin:0;display:none}.kint-rich.kint-folder.kint-show{display:block}.kint-rich.kint-folder dd.kint-folder{max-height:calc(100vh - 100px);padding-right:8px;overflow-y:scroll}.kint-rich::selection,.kint-rich::-moz-selection,.kint-rich::-webkit-selection{background:#aaa;color:#1d1e1e}.kint-rich .kint-focused{box-shadow:0 0 3px 2px red}.kint-rich,.kint-rich::before,.kint-rich::after,.kint-rich *,.kint-rich *::before,.kint-rich *::after{box-sizing:border-box;border-radius:0;color:#1d1e1e;float:none !important;font-family:Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;line-height:15px;margin:0;padding:0;text-align:left}.kint-rich{margin:8px 0}.kint-rich dt,.kint-rich dl{width:auto}.kint-rich dt,.kint-rich div.access-path{background:#f8f8f8;border:1px solid #d7d7d7;color:#1d1e1e;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:4px}.kint-rich dt:hover,.kint-rich div.access-path:hover{border-color:#aaa}.kint-rich>dl dl{padding:0 0 0 12px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxNTAiPjxwYXRoIGQ9Ik02IDdoMThsLTkgMTV6bTAgMzBoMThsLTkgMTV6bTAgNDVoMThsLTktMTV6bTAgMzBoMThsLTktMTV6bTAgMTJsMTggMThtLTE4IDBsMTgtMTgiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNNiAxMjZsMTggMThtLTE4IDBsMTgtMTgiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSIjNTU1Ii8+PC9zdmc+") no-repeat scroll 0 0/15px 75px transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #d7d7d7}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#06f;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:red}.kint-rich dfn{font-style:normal;font-family:monospace;color:#1d1e1e}.kint-rich pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #d7d7d7;background:#f8f8f8;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger,.kint-rich .kint-search-trigger{background:rgba(29,30,30,0.8);border-radius:3px;height:16px;font-size:16px;margin-left:5px;font-weight:bold;width:16px;text-align:center;float:right !important;cursor:pointer;color:#f8f8f8;position:relative;overflow:hidden;line-height:17.6px}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover,.kint-rich .kint-search-trigger:hover{color:#1d1e1e;background:#f8f8f8}.kint-rich dt.kint-parent>.kint-popup-trigger{line-height:19.2px}.kint-rich .kint-search-trigger{font-size:20px}.kint-rich input.kint-search{display:none;border:1px solid #d7d7d7;border-top-width:0;border-bottom-width:0;padding:4px;float:right !important;margin:-4px 0;color:#1d1e1e;background:#f8f8f8;height:24px;width:160px;position:relative;z-index:100}.kint-rich input.kint-search.kint-show{display:block}.kint-rich .kint-search-root ul.kint-tabs>li:not(.kint-search-match){background:#f8f8f8;opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match){opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match)>dt{background:#f8f8f8}.kint-rich .kint-search-root dl:not(.kint-search-match) dl,.kint-rich .kint-search-root dl:not(.kint-search-match) ul.kint-tabs>li:not(.kint-search-match){opacity:1}.kint-rich div.access-path{background:#f8f8f8;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px;background:transparent}.kint-rich footer>.kint-popup-trigger{background:transparent;color:#1d1e1e}.kint-rich footer nav{height:10px;width:10px;background-size:10px 50px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#1d1e1e;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}.kint-rich ul{list-style:none;padding-left:12px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #d7d7d7}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 12px;padding-left:0;background:#f8f8f8;border:1px solid #d7d7d7;border-top:0}.kint-rich ul.kint-tabs>li{background:#f8f8f8;border:1px solid #d7d7d7;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#aaa;color:red}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#f8f8f8;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:20px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#aaa;color:red}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #d7d7d7;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#aaa}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #d7d7d7;padding:2px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#f8f8f8;color:#1d1e1e}.kint-rich table td{background:#f8f8f8;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #aaa inset}.kint-rich table tr:hover var{color:red}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source[data-kint-filename]:before{display:block;content:attr(data-kint-filename);margin-bottom:4px;padding-bottom:4px;border-bottom:1px solid #f8f8f8}.kint-rich pre.kint-source>div:before{display:inline-block;content:counter(kint-l);counter-increment:kint-l;border-right:1px solid #aaa;padding-right:8px;margin-right:8px}.kint-rich pre.kint-source>div.kint-highlight{background:#f8f8f8}.kint-rich .kint-microtime-lap{text-shadow:-1px 0 #aaa,0 1px #aaa,1px 0 #aaa,0 -1px #aaa;color:#f8f8f8;font-weight:bold}.kint-rich .kint-focused{box-shadow:0 0 3px 2px red}.kint-rich dt{font-weight:normal}.kint-rich dt.kint-parent{margin-top:4px}.kint-rich dl dl{margin-top:4px;padding-left:25px;border-left:none}.kint-rich>dl>dt{background:#f8f8f8}.kint-rich ul{margin:0;padding-left:0}.kint-rich ul:not(.kint-tabs)>li{border-left:0}.kint-rich ul.kint-tabs{background:#f8f8f8;border:1px solid #d7d7d7;border-width:0 1px 1px 1px;padding:4px 0 0 12px;margin-left:-1px;margin-top:-1px}.kint-rich ul.kint-tabs li,.kint-rich ul.kint-tabs li+li{margin:0 0 0 4px}.kint-rich ul.kint-tabs li{border-bottom-width:0;height:25px}.kint-rich ul.kint-tabs li:first-child{margin-left:0}.kint-rich ul.kint-tabs li.kint-active-tab{border-top:1px solid #d7d7d7;background:#fff;font-weight:bold;padding-top:0;border-bottom:1px solid #fff !important;margin-bottom:-1px}.kint-rich ul.kint-tabs li.kint-active-tab:hover{border-bottom:1px solid #fff}.kint-rich ul>li>pre{border:1px solid #d7d7d7}.kint-rich dt:hover+dd>ul{border-color:#aaa}.kint-rich pre{background:#fff;margin-top:4px;margin-left:25px}.kint-rich .kint-source{margin-left:-1px}.kint-rich .kint-source .kint-highlight{background:#cfc}.kint-rich .kint-parent.kint-show>.kint-search{border-bottom-width:1px}.kint-rich table td{background:#fff}.kint-rich table td>dl{padding:0;margin:0}.kint-rich table td>dl>dt.kint-parent{margin:0}.kint-rich table td:first-child,.kint-rich table td,.kint-rich table th{padding:2px 4px}.kint-rich table dd,.kint-rich table dt{background:#fff}.kint-rich table tr:hover>td{box-shadow:none;background:#cfc}
+.kint-rich{font-size:13px;overflow-x:auto;white-space:nowrap;background:rgba(255,255,255,0.9)}.kint-rich.kint-folder{position:fixed;bottom:0;left:0;right:0;z-index:999999;width:100%;margin:0;display:block}.kint-rich.kint-folder dd.kint-foldout{max-height:calc(100vh - 100px);padding-right:8px;overflow-y:scroll;display:none}.kint-rich.kint-folder dd.kint-foldout.kint-show{display:block}.kint-rich::selection,.kint-rich::-moz-selection,.kint-rich::-webkit-selection{background:#aaa;color:#1d1e1e}.kint-rich .kint-focused{box-shadow:0 0 3px 2px red}.kint-rich,.kint-rich::before,.kint-rich::after,.kint-rich *,.kint-rich *::before,.kint-rich *::after{box-sizing:border-box;border-radius:0;color:#1d1e1e;float:none !important;font-family:Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;line-height:15px;margin:0;padding:0;text-align:left}.kint-rich{margin:8px 0}.kint-rich dt,.kint-rich dl{width:auto}.kint-rich dt,.kint-rich div.access-path{background:#f8f8f8;border:1px solid #d7d7d7;color:#1d1e1e;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:4px}.kint-rich dt:hover,.kint-rich div.access-path:hover{border-color:#aaa}.kint-rich>dl dl{padding:0 0 0 12px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxNTAiPjxwYXRoIGQ9Ik02IDdoMThsLTkgMTV6bTAgMzBoMThsLTkgMTV6bTAgNDVoMThsLTktMTV6bTAgMzBoMThsLTktMTV6bTAgMTJsMTggMThtLTE4IDBsMTgtMTgiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNNiAxMjZsMTggMThtLTE4IDBsMTgtMTgiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSIjNTU1Ii8+PC9zdmc+") no-repeat scroll 0 0/15px 75px transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #d7d7d7}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#06f;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:red}.kint-rich dfn{font-style:normal;font-family:monospace;color:#1d1e1e}.kint-rich pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #d7d7d7;background:#f8f8f8;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger,.kint-rich .kint-search-trigger{background:rgba(29,30,30,0.8);border-radius:3px;height:16px;font-size:16px;margin-left:5px;font-weight:bold;width:16px;text-align:center;float:right !important;cursor:pointer;color:#f8f8f8;position:relative;overflow:hidden;line-height:17.6px}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover,.kint-rich .kint-search-trigger:hover{color:#1d1e1e;background:#f8f8f8}.kint-rich dt.kint-parent>.kint-popup-trigger{line-height:19.2px}.kint-rich .kint-search-trigger{font-size:20px}.kint-rich input.kint-search{display:none;border:1px solid #d7d7d7;border-top-width:0;border-bottom-width:0;padding:4px;float:right !important;margin:-4px 0;color:#1d1e1e;background:#f8f8f8;height:24px;width:160px;position:relative;z-index:100}.kint-rich input.kint-search.kint-show{display:block}.kint-rich .kint-search-root ul.kint-tabs>li:not(.kint-search-match){background:#f8f8f8;opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match){opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match)>dt{background:#f8f8f8}.kint-rich .kint-search-root dl:not(.kint-search-match) dl,.kint-rich .kint-search-root dl:not(.kint-search-match) ul.kint-tabs>li:not(.kint-search-match){opacity:1}.kint-rich div.access-path{background:#f8f8f8;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px;background:transparent}.kint-rich footer>.kint-popup-trigger{background:transparent;color:#1d1e1e}.kint-rich footer nav{height:10px;width:10px;background-size:10px 50px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#1d1e1e;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}.kint-rich ul{list-style:none;padding-left:12px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #d7d7d7}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 12px;padding-left:0;background:#f8f8f8;border:1px solid #d7d7d7;border-top:0}.kint-rich ul.kint-tabs>li{background:#f8f8f8;border:1px solid #d7d7d7;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#aaa;color:red}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#f8f8f8;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:20px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul.kint-tab-contents>li{display:none}.kint-rich ul.kint-tab-contents>li.kint-show{display:block}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#aaa;color:red}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #d7d7d7;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#aaa}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #d7d7d7;padding:2px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#f8f8f8;color:#1d1e1e}.kint-rich table td{background:#f8f8f8;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #aaa inset}.kint-rich table tr:hover var{color:red}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source[data-kint-filename]:before{display:block;content:attr(data-kint-filename);margin-bottom:4px;padding-bottom:4px;border-bottom:1px solid #f8f8f8}.kint-rich pre.kint-source>div:before{display:inline-block;content:counter(kint-l);counter-increment:kint-l;border-right:1px solid #aaa;padding-right:8px;margin-right:8px}.kint-rich pre.kint-source>div.kint-highlight{background:#f8f8f8}.kint-rich .kint-microtime-lap{text-shadow:-1px 0 #aaa,0 1px #aaa,1px 0 #aaa,0 -1px #aaa;color:#f8f8f8;font-weight:bold}.kint-rich .kint-focused{box-shadow:0 0 3px 2px red}.kint-rich dt{font-weight:normal}.kint-rich dt.kint-parent{margin-top:4px}.kint-rich dl dl{margin-top:4px;padding-left:25px;border-left:none}.kint-rich>dl>dt{background:#f8f8f8}.kint-rich ul{margin:0;padding-left:0}.kint-rich ul:not(.kint-tabs)>li{border-left:0}.kint-rich ul.kint-tabs{background:#f8f8f8;border:1px solid #d7d7d7;border-width:0 1px 1px 1px;padding:4px 0 0 12px;margin-left:-1px;margin-top:-1px}.kint-rich ul.kint-tabs li,.kint-rich ul.kint-tabs li+li{margin:0 0 0 4px}.kint-rich ul.kint-tabs li{border-bottom-width:0;height:25px}.kint-rich ul.kint-tabs li:first-child{margin-left:0}.kint-rich ul.kint-tabs li.kint-active-tab{border-top:1px solid #d7d7d7;background:#fff;font-weight:bold;padding-top:0;border-bottom:1px solid #fff !important;margin-bottom:-1px}.kint-rich ul.kint-tabs li.kint-active-tab:hover{border-bottom:1px solid #fff}.kint-rich ul>li>pre{border:1px solid #d7d7d7}.kint-rich dt:hover+dd>ul{border-color:#aaa}.kint-rich pre{background:#fff;margin-top:4px;margin-left:25px}.kint-rich .kint-source{margin-left:-1px}.kint-rich .kint-source .kint-highlight{background:#cfc}.kint-rich .kint-parent.kint-show>.kint-search{border-bottom-width:1px}.kint-rich table td{background:#fff}.kint-rich table td>dl{padding:0;margin:0}.kint-rich table td>dl>dt.kint-parent{margin:0}.kint-rich table td:first-child,.kint-rich table td,.kint-rich table th{padding:2px 4px}.kint-rich table dd,.kint-rich table dt{background:#fff}.kint-rich table tr:hover>td{box-shadow:none;background:#cfc}
diff --git a/system/ThirdParty/Kint/resources/compiled/microtime.js b/system/ThirdParty/Kint/resources/compiled/microtime.js
index 20e3445b2b05..c9b8f00a58d7 100644
--- a/system/ThirdParty/Kint/resources/compiled/microtime.js
+++ b/system/ThirdParty/Kint/resources/compiled/microtime.js
@@ -1 +1 @@
-void 0===window.kintMicrotimeInitialized&&(window.kintMicrotimeInitialized=1,window.addEventListener("load",function(){"use strict";var c={},i=Array.prototype.slice.call(document.querySelectorAll("[data-kint-microtime-group]"),0);i.forEach(function(i){if(i.querySelector(".kint-microtime-lap")){var t=i.getAttribute("data-kint-microtime-group"),e=parseFloat(i.querySelector(".kint-microtime-lap").innerHTML),r=parseFloat(i.querySelector(".kint-microtime-avg").innerHTML);void 0===c[t]&&(c[t]={}),(void 0===c[t].min||c[t].min>e)&&(c[t].min=e),(void 0===c[t].max||c[t].maxe)&&(a[i].min=e),(void 0===a[i].max||a[i].maxdl dl{padding:0 0 0 12px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxNTAiPjxnIHN0cm9rZS13aWR0aD0iMiIgZmlsbD0iI0ZGRiI+PHBhdGggZD0iTTEgMWgyOHYyOEgxem01IDE0aDE4bS05IDlWNk0xIDYxaDI4djI4SDF6bTUgMTRoMTgiIHN0cm9rZT0iIzM3OSIvPjxwYXRoIGQ9Ik0xIDMxaDI4djI4SDF6bTUgMTRoMThtLTkgOVYzNk0xIDkxaDI4djI4SDF6bTUgMTRoMTgiIHN0cm9rZT0iIzVBMyIvPjxwYXRoIGQ9Ik0xIDEyMWgyOHYyOEgxem01IDVsMTggMThtLTE4IDBsMTgtMTgiIHN0cm9rZT0iI0NDQyIvPjwvZz48L3N2Zz4=") no-repeat scroll 0 0/15px 75px transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #b6cedb}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#0092db;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:#5cb730}.kint-rich dfn{font-style:normal;font-family:monospace;color:#1d1e1e}.kint-rich pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #b6cedb;background:#e0eaef;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger,.kint-rich .kint-search-trigger{background:rgba(29,30,30,0.8);border-radius:3px;height:16px;font-size:16px;margin-left:5px;font-weight:bold;width:16px;text-align:center;float:right !important;cursor:pointer;color:#e0eaef;position:relative;overflow:hidden;line-height:17.6px}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover,.kint-rich .kint-search-trigger:hover{color:#1d1e1e;background:#e0eaef}.kint-rich dt.kint-parent>.kint-popup-trigger{line-height:19.2px}.kint-rich .kint-search-trigger{font-size:20px}.kint-rich input.kint-search{display:none;border:1px solid #b6cedb;border-top-width:0;border-bottom-width:0;padding:4px;float:right !important;margin:-4px 0;color:#1d1e1e;background:#c1d4df;height:24px;width:160px;position:relative;z-index:100}.kint-rich input.kint-search.kint-show{display:block}.kint-rich .kint-search-root ul.kint-tabs>li:not(.kint-search-match){background:#d0d0d0;opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match){opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match)>dt{background:#e8e8e8}.kint-rich .kint-search-root dl:not(.kint-search-match) dl,.kint-rich .kint-search-root dl:not(.kint-search-match) ul.kint-tabs>li:not(.kint-search-match){opacity:1}.kint-rich div.access-path{background:#c1d4df;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px;background:transparent}.kint-rich footer>.kint-popup-trigger{background:transparent;color:#1d1e1e}.kint-rich footer nav{height:10px;width:10px;background-size:10px 50px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#1d1e1e;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}.kint-rich ul{list-style:none;padding-left:12px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #b6cedb}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 12px;padding-left:0;background:#e0eaef;border:1px solid #b6cedb;border-top:0}.kint-rich ul.kint-tabs>li{background:#c1d4df;border:1px solid #b6cedb;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#0092db;color:#5cb730}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#e0eaef;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:20px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#0092db;color:#5cb730}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #b6cedb;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#0092db}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #b6cedb;padding:2px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#c1d4df;color:#1d1e1e}.kint-rich table td{background:#e0eaef;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #0092db inset}.kint-rich table tr:hover var{color:#5cb730}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source[data-kint-filename]:before{display:block;content:attr(data-kint-filename);margin-bottom:4px;padding-bottom:4px;border-bottom:1px solid #c1d4df}.kint-rich pre.kint-source>div:before{display:inline-block;content:counter(kint-l);counter-increment:kint-l;border-right:1px solid #0092db;padding-right:8px;margin-right:8px}.kint-rich pre.kint-source>div.kint-highlight{background:#c1d4df}.kint-rich .kint-microtime-lap{text-shadow:-1px 0 #0092db,0 1px #0092db,1px 0 #0092db,0 -1px #0092db;color:#e0eaef;font-weight:bold}.kint-rich>dl>dt{background:linear-gradient(to bottom, #e3ecf0 0, #c0d4df 100%)}.kint-rich ul.kint-tabs{background:linear-gradient(to bottom, #9dbed0 0px, #b2ccda 100%)}.kint-rich>dl:not(.kint-trace)>dd>ul.kint-tabs li{background:#e0eaef}.kint-rich>dl:not(.kint-trace)>dd>ul.kint-tabs li.kint-active-tab{background:#c1d4df}.kint-rich>dl.kint-trace>dt{background:linear-gradient(to bottom, #c0d4df 0px, #e3ecf0 100%)}.kint-rich .kint-source .kint-highlight{background:#f0eb96}
+.kint-rich{font-size:13px;overflow-x:auto;white-space:nowrap;background:rgba(255,255,255,0.9)}.kint-rich.kint-folder{position:fixed;bottom:0;left:0;right:0;z-index:999999;width:100%;margin:0;display:block}.kint-rich.kint-folder dd.kint-foldout{max-height:calc(100vh - 100px);padding-right:8px;overflow-y:scroll;display:none}.kint-rich.kint-folder dd.kint-foldout.kint-show{display:block}.kint-rich::selection,.kint-rich::-moz-selection,.kint-rich::-webkit-selection{background:#0092db;color:#1d1e1e}.kint-rich .kint-focused{box-shadow:0 0 3px 2px #5cb730}.kint-rich,.kint-rich::before,.kint-rich::after,.kint-rich *,.kint-rich *::before,.kint-rich *::after{box-sizing:border-box;border-radius:0;color:#1d1e1e;float:none !important;font-family:Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;line-height:15px;margin:0;padding:0;text-align:left}.kint-rich{margin:8px 0}.kint-rich dt,.kint-rich dl{width:auto}.kint-rich dt,.kint-rich div.access-path{background:#e0eaef;border:1px solid #b6cedb;color:#1d1e1e;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:4px}.kint-rich dt:hover,.kint-rich div.access-path:hover{border-color:#0092db}.kint-rich>dl dl{padding:0 0 0 12px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxNTAiPjxnIHN0cm9rZS13aWR0aD0iMiIgZmlsbD0iI0ZGRiI+PHBhdGggZD0iTTEgMWgyOHYyOEgxem01IDE0aDE4bS05IDlWNk0xIDYxaDI4djI4SDF6bTUgMTRoMTgiIHN0cm9rZT0iIzM3OSIvPjxwYXRoIGQ9Ik0xIDMxaDI4djI4SDF6bTUgMTRoMThtLTkgOVYzNk0xIDkxaDI4djI4SDF6bTUgMTRoMTgiIHN0cm9rZT0iIzVBMyIvPjxwYXRoIGQ9Ik0xIDEyMWgyOHYyOEgxem01IDVsMTggMThtLTE4IDBsMTgtMTgiIHN0cm9rZT0iI0NDQyIvPjwvZz48L3N2Zz4=") no-repeat scroll 0 0/15px 75px transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #b6cedb}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#0092db;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:#5cb730}.kint-rich dfn{font-style:normal;font-family:monospace;color:#1d1e1e}.kint-rich pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #b6cedb;background:#e0eaef;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger,.kint-rich .kint-search-trigger{background:rgba(29,30,30,0.8);border-radius:3px;height:16px;font-size:16px;margin-left:5px;font-weight:bold;width:16px;text-align:center;float:right !important;cursor:pointer;color:#e0eaef;position:relative;overflow:hidden;line-height:17.6px}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover,.kint-rich .kint-search-trigger:hover{color:#1d1e1e;background:#e0eaef}.kint-rich dt.kint-parent>.kint-popup-trigger{line-height:19.2px}.kint-rich .kint-search-trigger{font-size:20px}.kint-rich input.kint-search{display:none;border:1px solid #b6cedb;border-top-width:0;border-bottom-width:0;padding:4px;float:right !important;margin:-4px 0;color:#1d1e1e;background:#c1d4df;height:24px;width:160px;position:relative;z-index:100}.kint-rich input.kint-search.kint-show{display:block}.kint-rich .kint-search-root ul.kint-tabs>li:not(.kint-search-match){background:#d0d0d0;opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match){opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match)>dt{background:#e8e8e8}.kint-rich .kint-search-root dl:not(.kint-search-match) dl,.kint-rich .kint-search-root dl:not(.kint-search-match) ul.kint-tabs>li:not(.kint-search-match){opacity:1}.kint-rich div.access-path{background:#c1d4df;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px;background:transparent}.kint-rich footer>.kint-popup-trigger{background:transparent;color:#1d1e1e}.kint-rich footer nav{height:10px;width:10px;background-size:10px 50px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#1d1e1e;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}.kint-rich ul{list-style:none;padding-left:12px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #b6cedb}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 12px;padding-left:0;background:#e0eaef;border:1px solid #b6cedb;border-top:0}.kint-rich ul.kint-tabs>li{background:#c1d4df;border:1px solid #b6cedb;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#0092db;color:#5cb730}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#e0eaef;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:20px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul.kint-tab-contents>li{display:none}.kint-rich ul.kint-tab-contents>li.kint-show{display:block}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#0092db;color:#5cb730}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #b6cedb;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#0092db}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #b6cedb;padding:2px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#c1d4df;color:#1d1e1e}.kint-rich table td{background:#e0eaef;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #0092db inset}.kint-rich table tr:hover var{color:#5cb730}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source[data-kint-filename]:before{display:block;content:attr(data-kint-filename);margin-bottom:4px;padding-bottom:4px;border-bottom:1px solid #c1d4df}.kint-rich pre.kint-source>div:before{display:inline-block;content:counter(kint-l);counter-increment:kint-l;border-right:1px solid #0092db;padding-right:8px;margin-right:8px}.kint-rich pre.kint-source>div.kint-highlight{background:#c1d4df}.kint-rich .kint-microtime-lap{text-shadow:-1px 0 #0092db,0 1px #0092db,1px 0 #0092db,0 -1px #0092db;color:#e0eaef;font-weight:bold}.kint-rich>dl>dt{background:linear-gradient(to bottom, #e3ecf0 0, #c0d4df 100%)}.kint-rich ul.kint-tabs{background:linear-gradient(to bottom, #9dbed0 0px, #b2ccda 100%)}.kint-rich>dl:not(.kint-trace)>dd>ul.kint-tabs li{background:#e0eaef}.kint-rich>dl:not(.kint-trace)>dd>ul.kint-tabs li.kint-active-tab{background:#c1d4df}.kint-rich>dl.kint-trace>dt{background:linear-gradient(to bottom, #c0d4df 0px, #e3ecf0 100%)}.kint-rich .kint-source .kint-highlight{background:#f0eb96}
diff --git a/system/ThirdParty/Kint/resources/compiled/rich.js b/system/ThirdParty/Kint/resources/compiled/rich.js
index 18fb072ead95..5648cda6de9e 100644
--- a/system/ThirdParty/Kint/resources/compiled/rich.js
+++ b/system/ThirdParty/Kint/resources/compiled/rich.js
@@ -1 +1 @@
-void 0===window.kintRich&&(window.kintRich=function(){"use strict";var n={selectText:function(e){var t=window.getSelection(),a=document.createRange();a.selectNodeContents(e),t.removeAllRanges(),t.addRange(a)},each:function(e,t){Array.prototype.slice.call(document.querySelectorAll(e),0).forEach(t)},hasClass:function(e,t){return!!e.classList&&(void 0===t&&(t="kint-show"),e.classList.contains(t))},addClass:function(e,t){void 0===t&&(t="kint-show"),e.classList.add(t)},removeClass:function(e,t){return void 0===t&&(t="kint-show"),e.classList.remove(t),e},toggle:function(e,t){var a=n.getChildren(e);a&&(void 0===t&&(t=n.hasClass(e)),t?n.removeClass(e):n.addClass(e),1===a.childNodes.length&&(a=a.childNodes[0].childNodes[0])&&n.hasClass(a,"kint-parent")&&n.toggle(a,t))},toggleChildren:function(e,t){var a=n.getChildren(e);if(a){var r=a.getElementsByClassName("kint-parent"),o=r.length;for(void 0===t&&(t=!n.hasClass(e));o--;)n.toggle(r[o],t)}},toggleAll:function(e){for(var t=document.getElementsByClassName("kint-parent"),a=t.length,r=!n.hasClass(e.parentNode);a--;)n.toggle(t[a],r)},switchTab:function(e){var t,a=e.previousSibling,r=0;for(n.removeClass(e.parentNode.getElementsByClassName("kint-active-tab")[0],"kint-active-tab"),n.addClass(e,"kint-active-tab");a;)1===a.nodeType&&r++,a=a.previousSibling;t=e.parentNode.nextSibling.childNodes;for(var o=0;o"},openInNewWindow:function(e){var t=window.open();t&&(t.document.open(),t.document.write(n.mktag("html")+n.mktag("head")+n.mktag("title")+"Kint ("+(new Date).toISOString()+")"+n.mktag("/title")+n.mktag('meta charset="utf-8"')+document.getElementsByClassName("kint-rich-script")[0].outerHTML+document.getElementsByClassName("kint-rich-style")[0].outerHTML+n.mktag("/head")+n.mktag("body")+'