diff --git a/.env-dev b/.env-dev
index 31ca32b6..386c19ea 100644
--- a/.env-dev
+++ b/.env-dev
@@ -8,3 +8,9 @@ DOCS_DIRECTORY="/var/www/html/docs/"
TEMPLATE_DIRECTORY="/var/www/html/templates/"
CACHE_DIRECTORY="/var/www/html/cache"
UPDATE_SECRET="Generate secret: openssl rand -hex 38"
+
+DB_HOST="mysql"
+DB_PORT="3306"
+DB_NAME="modxdocs"
+DB_USER="modxdocs"
+DB_PASSWORD="secret"
diff --git a/.github/workflows/build-assets.yml b/.github/workflows/build-assets.yml
index 8c0a1afe..0618f6b4 100644
--- a/.github/workflows/build-assets.yml
+++ b/.github/workflows/build-assets.yml
@@ -7,17 +7,17 @@ jobs:
strategy:
matrix:
- node-version: [15.x]
+ node-version: [20.x]
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v4
- name: Setting up node ${{ matrix.node-version }}
- uses: actions/setup-node@v1
+ uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Cache npm modules
- uses: actions/cache@v2
+ uses: actions/cache@v4
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: ~/.npm
diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml
index 0039d63b..8b8a045d 100644
--- a/.github/workflows/validate.yml
+++ b/.github/workflows/validate.yml
@@ -4,9 +4,10 @@ on: [push, pull_request]
jobs:
validate-json:
+ name: 'validate json'
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v4
- name: Validate language file
uses: docker://orrosenblatt/validate-json-action:latest
env:
@@ -17,3 +18,26 @@ jobs:
env:
INPUT_SCHEMA: ./sources.schema.json
INPUT_JSONS: ./sources.dist.json
+ phpcs:
+ name: 'phpcs + compat checker'
+ runs-on: ubuntu-latest
+ continue-on-error: true
+
+ strategy:
+ matrix:
+ php-version: ['8.3', '8.4']
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Install PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ matrix.php-version }}
+ extensions: pdo, pdo_mysql, zip, mysqli, gd
+
+ - name: Install dependencies
+ run: composer install --no-progress --prefer-dist --optimize-autoloader
+
+ - name: phpcs
+ run: composer run phpcs -- --runtime-set testVersion ${{ matrix.php-version }}
diff --git a/.gitignore b/.gitignore
index c1834f67..7218f5a7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,7 +5,10 @@
.DS_Store
cache/*
!cache/.gitkeep
+.phpunit.cache/
public/.htaccess
+public/sitemap.xml
+public/sitemaps/
node_modules/
.env
sources.json
diff --git a/Dockerfile b/Dockerfile
index f0e5fac8..b6b6c734 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
FROM node:16 AS node
-FROM php:7.4-rc-apache
+FROM php:8.3-apache
ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
@@ -25,14 +25,17 @@ RUN a2enmod rewrite \
&& a2dissite 000-default \
&& a2ensite docs
-# Install Git
-RUN apt-get update && apt-get install -y --force-yes git zlib1g-dev libicu-dev g++ \
+# Install Git and PHP extensions
+RUN apt-get update && apt-get install -y --no-install-recommends git zlib1g-dev libicu-dev g++ \
libzip-dev \
+ libpng-dev \
+ libjpeg62-turbo-dev \
+ libfreetype6-dev \
zip \
&& docker-php-ext-configure intl \
- && docker-php-ext-install intl \
- && docker-php-ext-configure zip --with-libzip \
- && docker-php-ext-install zip
+ && docker-php-ext-configure gd --with-freetype --with-jpeg \
+ && docker-php-ext-install intl pdo_mysql zip gd \
+ && rm -rf /var/lib/apt/lists/*
#Set final permissions
RUN mkdir /var/www/.npm && chown -R www-data:www-data /var/www/.npm
@@ -47,4 +50,3 @@ USER www-data
ENTRYPOINT ["/entrypoint.sh"]
CMD ["apache2-foreground"]
-
diff --git a/README.md b/README.md
index 390281e4..43b29c50 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# DocsApp for MODX
-The DocsApp is a Slim application that serves up the [MODX documentation](https://github.com/modxorg/Docs) from markdown format into a fully functional site.
+The DocsApp is a Slim application that serves up the [MODX documentation](https://github.com/modxorg/Docs) from markdown format into a fully functional site. It uses a light MySQL Database for indexing purposes.
Version-specific copies [of the markdown documentation](https://github.com/modxorg/Docs) go into the `/docs` directory. Then point a webserver at the `/public` directory to browse the documentation.
@@ -13,9 +13,9 @@ Version-specific copies [of the markdown documentation](https://github.com/modxo
1. Run a [composer install](https://getcomposer.org) in the root: `composer install`
2. Copy the default settings: `cp .env-dev .env`
-3. Edit `.env` in your favorite file editor to fix the paths.
+3. Edit `.env` in your favorite file editor to fix the paths and configure your MySQL database.
4. To run the latest version of the documentation (i.e. the version published on the modxorg/Docs repository), initialise the default documentation sources with `php docs.php sources:init`. To run a local clone of the documentation source, allowing you to immediately see your local changes inside the app, see custom sources below.
-5. Point a webserver, running at least PHP 7.1, to the `/public` directory.
+5. Point a webserver, running at least PHP 8.3, to the `/public` directory.
6. If you use apache, `cp public/ht.access public/.htaccess` and tweak (RewriteBase) as required. For nginx, set up the equivalent rewrites in your configuration.
### Custom Sources
@@ -39,7 +39,7 @@ For example, create it like this to have a local source for `2.x` and a separate
}
```
-(Note that app treats "2.x" the same as "current", so to allow easy switching between versions in a local mirror, you'll want to call it something different. That's why in this example we called it "upstream")
+(Note that the app treats "3.x" the same as "current", so to allow easy switching between versions in a local mirror, you'll want to call it something different. That's why in this example we called it "upstream")
Once you've done that, run `php docs.php sources:init` from the root of the project. (If you've run this previously, deleted the directories in the `/docs/` directory first.) You should see output like this:
@@ -118,12 +118,29 @@ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
### Searching / Indexing
-To run the **search** locally, you'll first need to create the search index. Run `php docs.php index:init` to create the empty SQLite database, and then `php docs.php index:all` to populate the index. This may take a while (for 2.x + 3.x official documentation, 20-40 minutes depending on computer speed) as that will scan all files in the documentation to index possible search terms, as well as historic contributors (if the source is a git repo) for each file.
+To run the **search** locally, you'll first need a MySQL database and the search index. Configure the `DB_*` environment variables in your `.env` file (see `.env-dev` for defaults), then run `php docs.php index:init` to create the database tables, and `php docs.php index:all` to populate the index. This may take a while (for 2.x + 3.x official documentation, 20-40 minutes depending on computer speed) as that will scan all files in the documentation to index possible search terms, as well as historic contributors (if the source is a git repo) for each file.
For the language switch to work, you also need to index the translations with `php docs.php index:translations`.
**These index actions are done automatically for changed files only (much faster!) as part of `php docs.php sources:update`.** Typically you'd only need to run the full indexing the first time setting up a mirror or clone.
+When migrating from the previous SQLite setup, create a fresh MySQL database, run `index:init`, then rebuild the index with `index:all` and `index:translations`. Search analytics (`Searches`, `PageNotFound`) will start fresh.
+
+### Analytics cleanup
+
+Search queries and 404 hits are logged in the `Searches` and `PageNotFound` tables. To keep those tables from growing indefinitely, run `php docs.php stats:cleanup` on a schedule (for example daily via cron). By default this deletes records whose `last_seen` is older than 90 days; override with `--days`:
+
+```bash
+php docs.php stats:cleanup
+php docs.php stats:cleanup --days=30
+```
+
+Example crontab entry (daily at 03:00):
+
+```cron
+0 3 * * * cd /path/to/app && php docs.php stats:cleanup
+```
+
## Building assets
From the `public/template/` directory, first load the dependencies with `npm install`.
@@ -136,4 +153,4 @@ When preparing a patch for production, use `npm run release` which will build st
## Running in a Docker Container
-Run `make` and `make install` or use the provided Dockerfile/docker-compose.yml. (see #3)
+Run `make` and `make install` or use the provided Dockerfile/docker-compose.yml. Docker Compose includes a MySQL 8 service; the `docs` container waits for MySQL to be healthy before starting. (see #3)
diff --git a/composer.json b/composer.json
index df397fe5..e8e7598f 100644
--- a/composer.json
+++ b/composer.json
@@ -12,40 +12,55 @@
}
],
"require": {
- "php": ">=7.4.0",
+ "php": ">=8.3.0",
"ext-json": "*",
"ext-pdo": "*",
- "ext-sqlite3": "*",
+ "ext-pdo_mysql": "*",
"ext-fileinfo": "*",
"ext-mbstring": "*",
- "slim/slim": "^3.1",
- "slim/php-view": "^2.0",
- "slim/twig-view": "^2.3",
+ "slim/slim": "^4.0",
+ "slim/psr7": "^1.6",
+ "php-di/php-di": "^7.0",
+ "monolog/monolog": "^3.0",
+ "slim/php-view": "^3.0",
+ "slim/twig-view": "^3.0",
"spatie/yaml-front-matter": "^2.0",
- "league/commonmark": "^1.5",
+ "league/commonmark": "^2.6",
"caseyamcl/toc": "^3.0",
- "vlucas/phpdotenv": "^3.3",
- "symfony/console": "^5.2",
- "symfony/process": "^5.2",
- "voku/stop-words": "^2.0"
+ "vlucas/phpdotenv": "^5.6",
+ "symfony/console": "^7.0",
+ "symfony/process": "^7.0",
+ "voku/stop-words": "^2.0",
+ "embed/embed": "^4.4",
+ "ext-dom": "*",
+ "ext-gd": "*"
},
"require-dev": {
- "ext-intl": "*"
+ "ext-intl": "*",
+ "squizlabs/php_codesniffer": "3.*",
+ "phpcompatibility/php-compatibility": "^9.3",
+ "yoast/phpunit-polyfills": "^4.0"
},
"autoload": {
"psr-4": {
- "Tests\\": "tests/",
"MODXDocs\\": "src/"
}
},
+ "autoload-dev": {
+ "psr-4": {
+ "Tests\\": "tests/"
+ }
+ },
"config": {
"process-timeout" : 0,
"platform": {
- "php": "7.4.0"
+ "php": "8.3.0"
}
},
"scripts": {
"start": "php -S localhost:8080 -t public index.php",
- "test": "phpunit"
+ "test": "@php vendor/bin/phpunit",
+ "phpcs": "vendor/bin/phpcs --standard=phpcs.xml",
+ "phpcbf": "vendor/bin/phpcbf --standard=phpcs.xml"
}
}
diff --git a/composer.lock b/composer.lock
index 5d0a67fd..3f436c00 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,24 +4,24 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "309a5cc08a51d2a8c2e9b29f9e585805",
+ "content-hash": "220ded7bba9e59c0fe5ac74b73daf95f",
"packages": [
{
"name": "caseyamcl/toc",
- "version": "v3.1",
+ "version": "v3.2.0",
"source": {
"type": "git",
"url": "https://github.com/caseyamcl/toc.git",
- "reference": "1aa7d6b446e151b4c11d18b11c199e61d00c5182"
+ "reference": "5ecaad1e1c36bab5caa278e2b9dfc8bc420e6d51"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/caseyamcl/toc/zipball/1aa7d6b446e151b4c11d18b11c199e61d00c5182",
- "reference": "1aa7d6b446e151b4c11d18b11c199e61d00c5182",
+ "url": "https://api.github.com/repos/caseyamcl/toc/zipball/5ecaad1e1c36bab5caa278e2b9dfc8bc420e6d51",
+ "reference": "5ecaad1e1c36bab5caa278e2b9dfc8bc420e6d51",
"shasum": ""
},
"require": {
- "cocur/slugify": "^3.0|^4.0",
+ "cocur/slugify": "^3.0|~4.4.0|^4.6",
"ext-dom": "*",
"knplabs/knp-menu": "^3.2",
"masterminds/html5": "^2.1",
@@ -63,27 +63,27 @@
],
"support": {
"issues": "https://github.com/caseyamcl/toc/issues",
- "source": "https://github.com/caseyamcl/toc/tree/v3.1"
+ "source": "https://github.com/caseyamcl/toc/tree/v3.2.0"
},
- "time": "2022-03-16T15:46:12+00:00"
+ "time": "2024-12-08T16:12:05+00:00"
},
{
"name": "cocur/slugify",
- "version": "v4.3.0",
+ "version": "v4.7.1",
"source": {
"type": "git",
"url": "https://github.com/cocur/slugify.git",
- "reference": "652234ef5f1be844a2ae1c36ad1b4c88b05160f9"
+ "reference": "a860dab2b9f5f37775fc6414d4f049434848165f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cocur/slugify/zipball/652234ef5f1be844a2ae1c36ad1b4c88b05160f9",
- "reference": "652234ef5f1be844a2ae1c36ad1b4c88b05160f9",
+ "url": "https://api.github.com/repos/cocur/slugify/zipball/a860dab2b9f5f37775fc6414d4f049434848165f",
+ "reference": "a860dab2b9f5f37775fc6414d4f049434848165f",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
- "php": "^7.1 || ~8.0.0 || ~8.1.0 || ~8.2.0"
+ "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"conflict": {
"symfony/config": "<3.4 || >=4,<4.3",
@@ -137,50 +137,44 @@
],
"support": {
"issues": "https://github.com/cocur/slugify/issues",
- "source": "https://github.com/cocur/slugify/tree/v4.3.0"
+ "source": "https://github.com/cocur/slugify/tree/v4.7.1"
},
- "time": "2022-12-07T19:48:48+00:00"
+ "time": "2025-11-27T18:57:36+00:00"
},
{
- "name": "knplabs/knp-menu",
- "version": "v3.3.0",
+ "name": "composer/ca-bundle",
+ "version": "1.5.13",
"source": {
"type": "git",
- "url": "https://github.com/KnpLabs/KnpMenu.git",
- "reference": "8bd3dc2afa22c65617c563c5e25e62d6e23e98c7"
+ "url": "https://github.com/composer/ca-bundle.git",
+ "reference": "c008272789979f709f7fcb32c2ecf1d2db5e84e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/KnpLabs/KnpMenu/zipball/8bd3dc2afa22c65617c563c5e25e62d6e23e98c7",
- "reference": "8bd3dc2afa22c65617c563c5e25e62d6e23e98c7",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/c008272789979f709f7fcb32c2ecf1d2db5e84e5",
+ "reference": "c008272789979f709f7fcb32c2ecf1d2db5e84e5",
"shasum": ""
},
"require": {
- "php": "^7.3 || ^8.0"
- },
- "conflict": {
- "twig/twig": "<1.40 || >=2,<2.9"
+ "ext-openssl": "*",
+ "ext-pcre": "*",
+ "php": "^7.2 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.5",
- "psr/container": "^1.0",
- "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0",
- "symfony/phpunit-bridge": "^5.3",
- "symfony/routing": "^4.4 || ^5.0 || ^6.0",
- "twig/twig": "^1.40 || ^2.9 || ^3.0"
- },
- "suggest": {
- "twig/twig": "for the TwigRenderer and the integration with your templates"
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^8 || ^9",
+ "psr/log": "^1.0 || ^2.0 || ^3.0",
+ "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.3-dev"
+ "dev-main": "1.x-dev"
}
},
"autoload": {
"psr-4": {
- "Knp\\Menu\\": "src/Knp/Menu"
+ "Composer\\CaBundle\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -189,155 +183,158 @@
],
"authors": [
{
- "name": "KnpLabs",
- "homepage": "https://knplabs.com"
- },
- {
- "name": "Christophe Coevoet",
- "email": "stof@notk.org"
- },
- {
- "name": "The Community",
- "homepage": "https://github.com/KnpLabs/KnpMenu/contributors"
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
}
],
- "description": "An object oriented menu library",
- "homepage": "https://knplabs.com",
+ "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
"keywords": [
- "menu",
- "tree"
+ "cabundle",
+ "cacert",
+ "certificate",
+ "ssl",
+ "tls"
],
"support": {
- "issues": "https://github.com/KnpLabs/KnpMenu/issues",
- "source": "https://github.com/KnpLabs/KnpMenu/tree/v3.3.0"
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/ca-bundle/issues",
+ "source": "https://github.com/composer/ca-bundle/tree/1.5.13"
},
- "time": "2021-10-23T15:01:04+00:00"
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ }
+ ],
+ "time": "2026-07-18T12:35:13+00:00"
},
{
- "name": "league/commonmark",
- "version": "1.6.7",
+ "name": "dflydev/dot-access-data",
+ "version": "v3.0.3",
"source": {
"type": "git",
- "url": "https://github.com/thephpleague/commonmark.git",
- "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b"
+ "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+ "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2b8185c13bc9578367a5bf901881d1c1b5bbd09b",
- "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b",
+ "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f",
+ "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f",
"shasum": ""
},
"require": {
- "ext-mbstring": "*",
"php": "^7.1 || ^8.0"
},
- "conflict": {
- "scrutinizer/ocular": "1.7.*"
- },
"require-dev": {
- "cebe/markdown": "~1.0",
- "commonmark/commonmark.js": "0.29.2",
- "erusev/parsedown": "~1.0",
- "ext-json": "*",
- "github/gfm": "0.29.0",
- "michelf/php-markdown": "~1.4",
- "mikehaertl/php-shellcommand": "^1.4",
- "phpstan/phpstan": "^0.12.90",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2",
- "scrutinizer/ocular": "^1.5",
- "symfony/finder": "^4.2"
+ "phpstan/phpstan": "^0.12.42",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3",
+ "scrutinizer/ocular": "1.6.0",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^4.0.0"
},
- "bin": [
- "bin/commonmark"
- ],
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "League\\CommonMark\\": "src"
+ "Dflydev\\DotAccessData\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Colin O'Dell",
- "email": "colinodell@gmail.com",
- "homepage": "https://www.colinodell.com",
- "role": "Lead Developer"
- }
- ],
- "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)",
- "homepage": "https://commonmark.thephpleague.com",
- "keywords": [
- "commonmark",
- "flavored",
- "gfm",
- "github",
- "github-flavored",
- "markdown",
- "md",
- "parser"
- ],
- "support": {
- "docs": "https://commonmark.thephpleague.com/",
- "issues": "https://github.com/thephpleague/commonmark/issues",
- "rss": "https://github.com/thephpleague/commonmark/releases.atom",
- "source": "https://github.com/thephpleague/commonmark"
- },
- "funding": [
- {
- "url": "https://www.colinodell.com/sponsor",
- "type": "custom"
+ "name": "Dragonfly Development Inc.",
+ "email": "info@dflydev.com",
+ "homepage": "http://dflydev.com"
},
{
- "url": "https://www.paypal.me/colinpodell/10.00",
- "type": "custom"
+ "name": "Beau Simensen",
+ "email": "beau@dflydev.com",
+ "homepage": "http://beausimensen.com"
},
{
- "url": "https://github.com/colinodell",
- "type": "github"
+ "name": "Carlos Frutos",
+ "email": "carlos@kiwing.it",
+ "homepage": "https://github.com/cfrutos"
},
{
- "url": "https://tidelift.com/funding/github/packagist/league/commonmark",
- "type": "tidelift"
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com"
}
],
- "time": "2022-01-13T17:18:13+00:00"
+ "description": "Given a deep data structure, access data by dot notation.",
+ "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
+ "keywords": [
+ "access",
+ "data",
+ "dot",
+ "notation"
+ ],
+ "support": {
+ "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
+ "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3"
+ },
+ "time": "2024-07-08T12:26:09+00:00"
},
{
- "name": "masterminds/html5",
- "version": "2.7.6",
+ "name": "embed/embed",
+ "version": "v4.4.19",
"source": {
"type": "git",
- "url": "https://github.com/Masterminds/html5-php.git",
- "reference": "897eb517a343a2281f11bc5556d6548db7d93947"
+ "url": "https://github.com/php-embed/Embed.git",
+ "reference": "c45a9007285524350499f3fa70e7e2f0967af470"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/897eb517a343a2281f11bc5556d6548db7d93947",
- "reference": "897eb517a343a2281f11bc5556d6548db7d93947",
+ "url": "https://api.github.com/repos/php-embed/Embed/zipball/c45a9007285524350499f3fa70e7e2f0967af470",
+ "reference": "c45a9007285524350499f3fa70e7e2f0967af470",
"shasum": ""
},
"require": {
- "ext-ctype": "*",
+ "composer/ca-bundle": "^1.0",
+ "ext-curl": "*",
"ext-dom": "*",
- "ext-libxml": "*",
- "php": ">=5.3.0"
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ml/json-ld": "^1.1",
+ "oscarotero/html-parser": "^0.1.4",
+ "php": "^7.4|^8",
+ "psr/http-client": "^1.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.0|^2.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7"
+ "brick/varexporter": "^0.3.1",
+ "friendsofphp/php-cs-fixer": "^2.0",
+ "nyholm/psr7": "^1.2",
+ "oscarotero/php-cs-fixer-config": "^1.0",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-strict-rules": "^2.0",
+ "phpunit/phpunit": "^9.0",
+ "symfony/css-selector": "^5.0"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.7-dev"
- }
+ "suggest": {
+ "symfony/css-selector": "If you want to get elements using css selectors"
},
+ "type": "library",
"autoload": {
+ "files": [
+ "src/functions.php"
+ ],
"psr-4": {
- "Masterminds\\": "src"
+ "Embed\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -346,147 +343,147 @@
],
"authors": [
{
- "name": "Matt Butcher",
- "email": "technosophos@gmail.com"
- },
- {
- "name": "Matt Farina",
- "email": "matt@mattfarina.com"
- },
- {
- "name": "Asmir Mustafic",
- "email": "goetas@gmail.com"
+ "name": "Oscar Otero",
+ "email": "oom@oscarotero.com",
+ "homepage": "http://oscarotero.com",
+ "role": "Developer"
}
],
- "description": "An HTML5 parser and serializer.",
- "homepage": "http://masterminds.github.io/html5-php",
+ "description": "PHP library to retrieve page info using oembed, opengraph, etc",
+ "homepage": "https://github.com/oscarotero/Embed",
"keywords": [
- "HTML5",
- "dom",
- "html",
- "parser",
- "querypath",
- "serializer",
- "xml"
+ "embed",
+ "embedly",
+ "oembed",
+ "opengraph",
+ "twitter cards"
],
"support": {
- "issues": "https://github.com/Masterminds/html5-php/issues",
- "source": "https://github.com/Masterminds/html5-php/tree/2.7.6"
+ "email": "oom@oscarotero.com",
+ "issues": "https://github.com/oscarotero/Embed/issues",
+ "source": "https://github.com/php-embed/Embed/tree/v4.4.19"
},
- "time": "2022-08-18T16:18:26+00:00"
+ "funding": [
+ {
+ "url": "https://paypal.me/oscarotero",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/oscarotero",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/misteroom",
+ "type": "patreon"
+ }
+ ],
+ "time": "2026-07-08T19:24:10+00:00"
},
{
- "name": "nikic/fast-route",
- "version": "v1.3.0",
+ "name": "fig/http-message-util",
+ "version": "1.1.5",
"source": {
"type": "git",
- "url": "https://github.com/nikic/FastRoute.git",
- "reference": "181d480e08d9476e61381e04a71b34dc0432e812"
+ "url": "https://github.com/php-fig/http-message-util.git",
+ "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812",
- "reference": "181d480e08d9476e61381e04a71b34dc0432e812",
+ "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765",
+ "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765",
"shasum": ""
},
"require": {
- "php": ">=5.4.0"
+ "php": "^5.3 || ^7.0 || ^8.0"
},
- "require-dev": {
- "phpunit/phpunit": "^4.8.35|~5.7"
+ "suggest": {
+ "psr/http-message": "The package containing the PSR-7 interfaces"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
"autoload": {
- "files": [
- "src/functions.php"
- ],
"psr-4": {
- "FastRoute\\": "src/"
+ "Fig\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Nikita Popov",
- "email": "nikic@php.net"
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
}
],
- "description": "Fast request router for PHP",
+ "description": "Utility classes and constants for use with PSR-7 (psr/http-message)",
"keywords": [
- "router",
- "routing"
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
],
"support": {
- "issues": "https://github.com/nikic/FastRoute/issues",
- "source": "https://github.com/nikic/FastRoute/tree/master"
+ "issues": "https://github.com/php-fig/http-message-util/issues",
+ "source": "https://github.com/php-fig/http-message-util/tree/1.1.5"
},
- "time": "2018-02-13T20:26:39+00:00"
+ "time": "2020-11-24T22:02:12+00:00"
},
{
- "name": "phpoption/phpoption",
- "version": "1.9.0",
+ "name": "graham-campbell/result-type",
+ "version": "v1.1.4",
"source": {
"type": "git",
- "url": "https://github.com/schmittjoh/php-option.git",
- "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab"
+ "url": "https://github.com/GrahamCampbell/Result-Type.git",
+ "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dc5ff11e274a90cc1c743f66c9ad700ce50db9ab",
- "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab",
+ "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b",
+ "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b",
"shasum": ""
},
"require": {
- "php": "^7.2.5 || ^8.0"
+ "php": "^7.2.5 || ^8.0",
+ "phpoption/phpoption": "^1.9.5"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.8",
- "phpunit/phpunit": "^8.5.28 || ^9.5.21"
+ "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7"
},
"type": "library",
- "extra": {
- "bamarni-bin": {
- "bin-links": true,
- "forward-command": true
- },
- "branch-alias": {
- "dev-master": "1.9-dev"
- }
- },
"autoload": {
"psr-4": {
- "PhpOption\\": "src/PhpOption/"
+ "GrahamCampbell\\ResultType\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "Apache-2.0"
+ "MIT"
],
"authors": [
- {
- "name": "Johannes M. Schmitt",
- "email": "schmittjoh@gmail.com",
- "homepage": "https://github.com/schmittjoh"
- },
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
}
],
- "description": "Option Type for PHP",
+ "description": "An Implementation Of The Result Type",
"keywords": [
- "language",
- "option",
- "php",
- "type"
+ "Graham Campbell",
+ "GrahamCampbell",
+ "Result Type",
+ "Result-Type",
+ "result"
],
"support": {
- "issues": "https://github.com/schmittjoh/php-option/issues",
- "source": "https://github.com/schmittjoh/php-option/tree/1.9.0"
+ "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
+ "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4"
},
"funding": [
{
@@ -494,42 +491,54 @@
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
"type": "tidelift"
}
],
- "time": "2022-07-30T15:51:26+00:00"
+ "time": "2025-12-27T19:43:20+00:00"
},
{
- "name": "pimple/pimple",
- "version": "v3.5.0",
+ "name": "knplabs/knp-menu",
+ "version": "v3.8.0",
"source": {
"type": "git",
- "url": "https://github.com/silexphp/Pimple.git",
- "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed"
+ "url": "https://github.com/KnpLabs/KnpMenu.git",
+ "reference": "79d325909a1d428a93f1a0f55e90177830e283bb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed",
- "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed",
+ "url": "https://api.github.com/repos/KnpLabs/KnpMenu/zipball/79d325909a1d428a93f1a0f55e90177830e283bb",
+ "reference": "79d325909a1d428a93f1a0f55e90177830e283bb",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "psr/container": "^1.1 || ^2.0"
+ "php": "^8.1"
+ },
+ "conflict": {
+ "symfony/http-foundation": "<5.4",
+ "twig/twig": "<2.16"
},
"require-dev": {
- "symfony/phpunit-bridge": "^5.4@dev"
+ "phpstan/phpstan": "^2.1",
+ "phpunit/phpunit": "^9.6",
+ "psr/container": "^1.0 || ^2.0",
+ "symfony/http-foundation": "^5.4 || ^6.0 || ^7.0",
+ "symfony/phpunit-bridge": "^7.0",
+ "symfony/routing": "^5.4 || ^6.0 || ^7.0",
+ "twig/twig": "^2.16 || ^3.0"
+ },
+ "suggest": {
+ "twig/twig": "for the TwigRenderer and the integration with your templates"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.4.x-dev"
+ "dev-master": "3.x-dev"
}
},
"autoload": {
- "psr-0": {
- "Pimple": "src/"
+ "psr-4": {
+ "Knp\\Menu\\": "src/Knp/Menu"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -538,42 +547,63 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "KnpLabs",
+ "homepage": "https://knplabs.com"
+ },
+ {
+ "name": "Christophe Coevoet",
+ "email": "stof@notk.org"
+ },
+ {
+ "name": "The Community",
+ "homepage": "https://github.com/KnpLabs/KnpMenu/contributors"
}
],
- "description": "Pimple, a simple Dependency Injection Container",
- "homepage": "https://pimple.symfony.com",
+ "description": "An object oriented menu library",
+ "homepage": "https://knplabs.com",
"keywords": [
- "container",
- "dependency injection"
+ "menu",
+ "tree"
],
"support": {
- "source": "https://github.com/silexphp/Pimple/tree/v3.5.0"
+ "issues": "https://github.com/KnpLabs/KnpMenu/issues",
+ "source": "https://github.com/KnpLabs/KnpMenu/tree/v3.8.0"
},
- "time": "2021-10-28T11:13:42+00:00"
+ "time": "2025-06-13T15:03:33+00:00"
},
{
- "name": "psr/container",
- "version": "1.1.2",
+ "name": "laravel/serializable-closure",
+ "version": "v2.0.15",
"source": {
"type": "git",
- "url": "https://github.com/php-fig/container.git",
- "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
+ "url": "https://github.com/laravel/serializable-closure.git",
+ "reference": "dccd8bcb851bb03fcc005df650b708b57cc52661"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
- "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/dccd8bcb851bb03fcc005df650b708b57cc52661",
+ "reference": "dccd8bcb851bb03fcc005df650b708b57cc52661",
"shasum": ""
},
"require": {
- "php": ">=7.4.0"
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "illuminate/support": "^10.0|^11.0|^12.0|^13.0",
+ "nesbot/carbon": "^2.67|^3.0",
+ "pestphp/pest": "^2.36|^3.0|^4.0",
+ "phpstan/phpstan": "^2.0",
+ "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Psr\\Container\\": "src/"
+ "Laravel\\SerializableClosure\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -582,166 +612,245 @@
],
"authors": [
{
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ },
+ {
+ "name": "Nuno Maduro",
+ "email": "nuno@laravel.com"
}
],
- "description": "Common Container Interface (PHP FIG PSR-11)",
- "homepage": "https://github.com/php-fig/container",
+ "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
"keywords": [
- "PSR-11",
- "container",
- "container-interface",
- "container-interop",
- "psr"
+ "closure",
+ "laravel",
+ "serializable"
],
"support": {
- "issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/1.1.2"
+ "issues": "https://github.com/laravel/serializable-closure/issues",
+ "source": "https://github.com/laravel/serializable-closure"
},
- "time": "2021-11-05T16:50:12+00:00"
+ "time": "2026-07-21T16:49:22+00:00"
},
{
- "name": "psr/http-message",
- "version": "1.0.1",
+ "name": "league/commonmark",
+ "version": "2.8.3",
"source": {
"type": "git",
- "url": "https://github.com/php-fig/http-message.git",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+ "url": "https://github.com/thephpleague/commonmark.git",
+ "reference": "1902f60f984235023acbe03db6ad614a37b3c3e7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/1902f60f984235023acbe03db6ad614a37b3c3e7",
+ "reference": "1902f60f984235023acbe03db6ad614a37b3c3e7",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "ext-mbstring": "*",
+ "league/config": "^1.1.1",
+ "php": "^7.4 || ^8.0",
+ "psr/event-dispatcher": "^1.0",
+ "symfony/deprecation-contracts": "^2.1 || ^3.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "require-dev": {
+ "cebe/markdown": "^1.0",
+ "commonmark/cmark": "0.31.1",
+ "commonmark/commonmark.js": "0.31.1",
+ "composer/package-versions-deprecated": "^1.8",
+ "embed/embed": "^4.4",
+ "erusev/parsedown": "^1.0",
+ "ext-json": "*",
+ "github/gfm": "0.29.0",
+ "michelf/php-markdown": "^1.4 || ^2.0",
+ "nyholm/psr7": "^1.5",
+ "phpstan/phpstan": "^2.0.0",
+ "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0 || ^12.0.0 || ^13.0.0",
+ "scrutinizer/ocular": "^1.8.1",
+ "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0",
+ "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0",
+ "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0",
+ "unleashedtech/php-coding-standard": "^3.1.1",
+ "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0"
+ },
+ "suggest": {
+ "symfony/yaml": "v2.3+ required if using the Front Matter extension"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-main": "2.9-dev"
}
},
"autoload": {
"psr-4": {
- "Psr\\Http\\Message\\": "src/"
+ "League\\CommonMark\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com",
+ "role": "Lead Developer"
}
],
- "description": "Common interface for HTTP messages",
- "homepage": "https://github.com/php-fig/http-message",
+ "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)",
+ "homepage": "https://commonmark.thephpleague.com",
"keywords": [
- "http",
- "http-message",
- "psr",
- "psr-7",
- "request",
- "response"
+ "commonmark",
+ "flavored",
+ "gfm",
+ "github",
+ "github-flavored",
+ "markdown",
+ "md",
+ "parser"
],
"support": {
- "source": "https://github.com/php-fig/http-message/tree/master"
+ "docs": "https://commonmark.thephpleague.com/",
+ "forum": "https://github.com/thephpleague/commonmark/discussions",
+ "issues": "https://github.com/thephpleague/commonmark/issues",
+ "rss": "https://github.com/thephpleague/commonmark/releases.atom",
+ "source": "https://github.com/thephpleague/commonmark"
},
- "time": "2016-08-06T14:39:51+00:00"
+ "funding": [
+ {
+ "url": "https://www.colinodell.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.paypal.me/colinpodell/10.00",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/colinodell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/league/commonmark",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-07-12T15:29:16+00:00"
},
{
- "name": "slim/php-view",
- "version": "2.2.1",
+ "name": "league/config",
+ "version": "v1.2.0",
"source": {
"type": "git",
- "url": "https://github.com/slimphp/PHP-View.git",
- "reference": "a13ada9d7962ca1b48799c0d9ffbca4c33245aed"
+ "url": "https://github.com/thephpleague/config.git",
+ "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slimphp/PHP-View/zipball/a13ada9d7962ca1b48799c0d9ffbca4c33245aed",
- "reference": "a13ada9d7962ca1b48799c0d9ffbca4c33245aed",
+ "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3",
+ "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3",
"shasum": ""
},
"require": {
- "psr/http-message": "^1.0"
+ "dflydev/dot-access-data": "^3.0.1",
+ "nette/schema": "^1.2",
+ "php": "^7.4 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.8",
- "slim/slim": "^3.0"
+ "phpstan/phpstan": "^1.8.2",
+ "phpunit/phpunit": "^9.5.5",
+ "scrutinizer/ocular": "^1.8.1",
+ "unleashedtech/php-coding-standard": "^3.1",
+ "vimeo/psalm": "^4.7.3"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.2-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Slim\\Views\\": "src"
+ "League\\Config\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Glenn Eggleton",
- "email": "geggleto@gmail.com"
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com",
+ "role": "Lead Developer"
}
],
- "description": "Render PHP view scripts into a PSR-7 Response object.",
+ "description": "Define configuration arrays with strict schemas and access values with dot notation",
+ "homepage": "https://config.thephpleague.com",
"keywords": [
- "framework",
- "php",
- "phtml",
- "renderer",
- "slim",
- "template",
- "view"
+ "array",
+ "config",
+ "configuration",
+ "dot",
+ "dot-access",
+ "nested",
+ "schema"
],
"support": {
- "issues": "https://github.com/slimphp/PHP-View/issues",
- "source": "https://github.com/slimphp/PHP-View/tree/2.2.1"
+ "docs": "https://config.thephpleague.com/",
+ "issues": "https://github.com/thephpleague/config/issues",
+ "rss": "https://github.com/thephpleague/config/releases.atom",
+ "source": "https://github.com/thephpleague/config"
},
- "time": "2019-04-15T20:43:28+00:00"
+ "funding": [
+ {
+ "url": "https://www.colinodell.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.paypal.me/colinpodell/10.00",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/colinodell",
+ "type": "github"
+ }
+ ],
+ "time": "2022-12-11T20:36:23+00:00"
},
{
- "name": "slim/slim",
- "version": "3.12.4",
+ "name": "masterminds/html5",
+ "version": "2.10.1",
"source": {
"type": "git",
- "url": "https://github.com/slimphp/Slim.git",
- "reference": "ce3cb65a06325fc9fe3d0223f2ae23113a767304"
+ "url": "https://github.com/Masterminds/html5-php.git",
+ "reference": "fd5018f6815fff903946d0564977b44ce8010e29"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slimphp/Slim/zipball/ce3cb65a06325fc9fe3d0223f2ae23113a767304",
- "reference": "ce3cb65a06325fc9fe3d0223f2ae23113a767304",
+ "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fd5018f6815fff903946d0564977b44ce8010e29",
+ "reference": "fd5018f6815fff903946d0564977b44ce8010e29",
"shasum": ""
},
"require": {
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-simplexml": "*",
- "nikic/fast-route": "^1.0",
- "php": ">=5.5.0",
- "pimple/pimple": "^3.0",
- "psr/container": "^1.0",
- "psr/http-message": "^1.0"
- },
- "provide": {
- "psr/http-message-implementation": "1.0"
+ "ext-dom": "*",
+ "php": ">=5.3.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.0",
- "squizlabs/php_codesniffer": "^3.6.0"
+ "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9 || ^10"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Slim\\": "Slim"
+ "Masterminds\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -750,77 +859,58 @@
],
"authors": [
{
- "name": "Josh Lockhart",
- "email": "hello@joshlockhart.com",
- "homepage": "https://joshlockhart.com"
- },
- {
- "name": "Andrew Smith",
- "email": "a.smith@silentworks.co.uk",
- "homepage": "http://silentworks.co.uk"
+ "name": "Matt Butcher",
+ "email": "technosophos@gmail.com"
},
{
- "name": "Rob Allen",
- "email": "rob@akrabat.com",
- "homepage": "http://akrabat.com"
+ "name": "Matt Farina",
+ "email": "matt@mattfarina.com"
},
{
- "name": "Gabriel Manricks",
- "email": "gmanricks@me.com",
- "homepage": "http://gabrielmanricks.com"
+ "name": "Asmir Mustafic",
+ "email": "goetas@gmail.com"
}
],
- "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
- "homepage": "https://slimframework.com",
+ "description": "An HTML5 parser and serializer.",
+ "homepage": "http://masterminds.github.io/html5-php",
"keywords": [
- "api",
- "framework",
- "micro",
- "router"
+ "HTML5",
+ "dom",
+ "html",
+ "parser",
+ "querypath",
+ "serializer",
+ "xml"
],
"support": {
- "issues": "https://github.com/slimphp/Slim/issues",
- "source": "https://github.com/slimphp/Slim/tree/3.12.4"
+ "issues": "https://github.com/Masterminds/html5-php/issues",
+ "source": "https://github.com/Masterminds/html5-php/tree/2.10.1"
},
- "funding": [
- {
- "url": "https://opencollective.com/slimphp",
- "type": "open_collective"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/slim/slim",
- "type": "tidelift"
- }
- ],
- "time": "2021-10-02T19:38:22+00:00"
+ "time": "2026-06-23T18:43:15+00:00"
},
{
- "name": "slim/twig-view",
- "version": "2.5.1",
+ "name": "ml/iri",
+ "version": "1.1.4",
+ "target-dir": "ML/IRI",
"source": {
"type": "git",
- "url": "https://github.com/slimphp/Twig-View.git",
- "reference": "47bd5cc1cbbdf5196d0873ece0ee97c6c7b352e9"
+ "url": "https://github.com/lanthaler/IRI.git",
+ "reference": "cbd44fa913e00ea624241b38cefaa99da8d71341"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slimphp/Twig-View/zipball/47bd5cc1cbbdf5196d0873ece0ee97c6c7b352e9",
- "reference": "47bd5cc1cbbdf5196d0873ece0ee97c6c7b352e9",
+ "url": "https://api.github.com/repos/lanthaler/IRI/zipball/cbd44fa913e00ea624241b38cefaa99da8d71341",
+ "reference": "cbd44fa913e00ea624241b38cefaa99da8d71341",
"shasum": ""
},
"require": {
- "php": ">=5.5.0",
- "psr/http-message": "^1.0",
- "twig/twig": "^1.38|^2.7|^3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8|^5.7",
- "slim/slim": "^3.10"
+ "lib-pcre": ">=4.0",
+ "php": ">=5.3.0"
},
"type": "library",
"autoload": {
- "psr-4": {
- "Slim\\Views\\": "src"
+ "psr-0": {
+ "ML\\IRI": ""
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -829,51 +919,53 @@
],
"authors": [
{
- "name": "Josh Lockhart",
- "email": "hello@joshlockhart.com",
- "homepage": "http://joshlockhart.com"
+ "name": "Markus Lanthaler",
+ "email": "mail@markus-lanthaler.com",
+ "homepage": "http://www.markus-lanthaler.com",
+ "role": "Developer"
}
],
- "description": "Slim Framework 3 view helper built on top of the Twig 2 templating component",
- "homepage": "http://slimframework.com",
+ "description": "IRI handling for PHP",
+ "homepage": "http://www.markus-lanthaler.com",
"keywords": [
- "framework",
- "slim",
- "template",
- "twig",
- "view"
+ "URN",
+ "iri",
+ "uri",
+ "url"
],
"support": {
- "issues": "https://github.com/slimphp/Twig-View/issues",
- "source": "https://github.com/slimphp/Twig-View/tree/master"
+ "issues": "https://github.com/lanthaler/IRI/issues",
+ "source": "https://github.com/lanthaler/IRI/tree/master"
},
- "time": "2019-11-28T18:03:50+00:00"
+ "time": "2014-01-21T13:43:39+00:00"
},
{
- "name": "spatie/yaml-front-matter",
- "version": "2.0.7",
+ "name": "ml/json-ld",
+ "version": "1.2.1",
"source": {
"type": "git",
- "url": "https://github.com/spatie/yaml-front-matter.git",
- "reference": "f49f228994de70827ca857efffdd3bd7703aea34"
+ "url": "https://github.com/lanthaler/JsonLD.git",
+ "reference": "537e68e87a6bce23e57c575cd5dcac1f67ce25d8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/yaml-front-matter/zipball/f49f228994de70827ca857efffdd3bd7703aea34",
- "reference": "f49f228994de70827ca857efffdd3bd7703aea34",
+ "url": "https://api.github.com/repos/lanthaler/JsonLD/zipball/537e68e87a6bce23e57c575cd5dcac1f67ce25d8",
+ "reference": "537e68e87a6bce23e57c575cd5dcac1f67ce25d8",
"shasum": ""
},
"require": {
- "php": "^7.0|^8.0",
- "symfony/yaml": "^3.0|^4.0|^5.0|^6.0"
+ "ext-json": "*",
+ "ml/iri": "^1.1.1",
+ "php": ">=5.3.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.0"
+ "json-ld/tests": "1.0",
+ "phpunit/phpunit": "^4"
},
"type": "library",
"autoload": {
"psr-4": {
- "Spatie\\YamlFrontMatter\\": "src"
+ "ML\\JsonLD\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -882,92 +974,92 @@
],
"authors": [
{
- "name": "Sebastian De Deyne",
- "email": "sebastian@spatie.be",
- "homepage": "https://spatie.be",
+ "name": "Markus Lanthaler",
+ "email": "mail@markus-lanthaler.com",
+ "homepage": "http://www.markus-lanthaler.com",
"role": "Developer"
}
],
- "description": "A to the point yaml front matter parser",
- "homepage": "https://github.com/sebastiandedeyne/yaml-front-matter",
+ "description": "JSON-LD Processor for PHP",
+ "homepage": "http://www.markus-lanthaler.com",
"keywords": [
- "front matter",
- "jekyll",
- "spatie",
- "yaml"
+ "JSON-LD",
+ "jsonld"
],
"support": {
- "source": "https://github.com/spatie/yaml-front-matter/tree/2.0.7"
+ "issues": "https://github.com/lanthaler/JsonLD/issues",
+ "source": "https://github.com/lanthaler/JsonLD/tree/1.2.1"
},
- "funding": [
- {
- "url": "https://spatie.be/open-source/support-us",
- "type": "custom"
- },
- {
- "url": "https://github.com/spatie",
- "type": "github"
- }
- ],
- "time": "2022-04-06T12:03:55+00:00"
+ "time": "2022-09-29T08:45:17+00:00"
},
{
- "name": "symfony/console",
- "version": "v5.4.19",
+ "name": "monolog/monolog",
+ "version": "3.10.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/console.git",
- "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740"
+ "url": "https://github.com/Seldaek/monolog.git",
+ "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/dccb8d251a9017d5994c988b034d3e18aaabf740",
- "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0",
+ "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php73": "^1.9",
- "symfony/polyfill-php80": "^1.16",
- "symfony/service-contracts": "^1.1|^2|^3",
- "symfony/string": "^5.1|^6.0"
- },
- "conflict": {
- "psr/log": ">=3",
- "symfony/dependency-injection": "<4.4",
- "symfony/dotenv": "<5.1",
- "symfony/event-dispatcher": "<4.4",
- "symfony/lock": "<4.4",
- "symfony/process": "<4.4"
+ "php": ">=8.1",
+ "psr/log": "^2.0 || ^3.0"
},
"provide": {
- "psr/log-implementation": "1.0|2.0"
+ "psr/log-implementation": "3.0.0"
},
"require-dev": {
- "psr/log": "^1|^2",
- "symfony/config": "^4.4|^5.0|^6.0",
- "symfony/dependency-injection": "^4.4|^5.0|^6.0",
- "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
- "symfony/lock": "^4.4|^5.0|^6.0",
- "symfony/process": "^4.4|^5.0|^6.0",
- "symfony/var-dumper": "^4.4|^5.0|^6.0"
+ "aws/aws-sdk-php": "^3.0",
+ "doctrine/couchdb": "~1.0@dev",
+ "elasticsearch/elasticsearch": "^7 || ^8",
+ "ext-json": "*",
+ "graylog2/gelf-php": "^1.4.2 || ^2.0",
+ "guzzlehttp/guzzle": "^7.4.5",
+ "guzzlehttp/psr7": "^2.2",
+ "mongodb/mongodb": "^1.8 || ^2.0",
+ "php-amqplib/php-amqplib": "~2.4 || ^3",
+ "php-console/php-console": "^3.1.8",
+ "phpstan/phpstan": "^2",
+ "phpstan/phpstan-deprecation-rules": "^2",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpunit/phpunit": "^10.5.17 || ^11.0.7",
+ "predis/predis": "^1.1 || ^2",
+ "rollbar/rollbar": "^4.0",
+ "ruflin/elastica": "^7 || ^8",
+ "symfony/mailer": "^5.4 || ^6",
+ "symfony/mime": "^5.4 || ^6"
},
"suggest": {
- "psr/log": "For using the console logger",
- "symfony/event-dispatcher": "",
- "symfony/lock": "",
- "symfony/process": ""
+ "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+ "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+ "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
+ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+ "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
+ "ext-mbstring": "Allow to work properly with unicode symbols",
+ "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
+ "ext-openssl": "Required to send log messages using SSL",
+ "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
+ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+ "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
+ "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
+ "rollbar/rollbar": "Allow sending log messages to Rollbar",
+ "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Symfony\\Component\\Console\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
+ "Monolog\\": "src/Monolog"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -975,1020 +1067,4343 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
}
],
- "description": "Eases the creation of beautiful and testable command line interfaces",
- "homepage": "https://symfony.com",
+ "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+ "homepage": "https://github.com/Seldaek/monolog",
"keywords": [
- "cli",
- "command line",
- "console",
- "terminal"
+ "log",
+ "logging",
+ "psr-3"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v5.4.19"
+ "issues": "https://github.com/Seldaek/monolog/issues",
+ "source": "https://github.com/Seldaek/monolog/tree/3.10.0"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/Seldaek",
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
"type": "tidelift"
}
],
- "time": "2023-01-01T08:32:19+00:00"
+ "time": "2026-01-02T08:56:05+00:00"
},
{
- "name": "symfony/deprecation-contracts",
- "version": "v2.5.2",
+ "name": "nette/schema",
+ "version": "v1.3.5",
"source": {
"type": "git",
- "url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
+ "url": "https://github.com/nette/schema.git",
+ "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
- "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
+ "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002",
+ "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "nette/utils": "^4.0",
+ "php": "8.1 - 8.5"
+ },
+ "require-dev": {
+ "nette/phpstan-rules": "^1.0",
+ "nette/tester": "^2.6",
+ "phpstan/extension-installer": "^1.4@stable",
+ "phpstan/phpstan": "^2.1.39@stable",
+ "tracy/tracy": "^2.8"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "dev-master": "1.3-dev"
}
},
"autoload": {
- "files": [
- "function.php"
+ "psr-4": {
+ "Nette\\": "src"
+ },
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
}
],
- "description": "A generic function and convention to trigger deprecation notices",
- "homepage": "https://symfony.com",
+ "description": "📐 Nette Schema: validating data structures against a given Schema.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "config",
+ "nette"
+ ],
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2"
+ "issues": "https://github.com/nette/schema/issues",
+ "source": "https://github.com/nette/schema/tree/v1.3.5"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
+ "time": "2026-02-23T03:47:12+00:00"
+ },
+ {
+ "name": "nette/utils",
+ "version": "v4.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/utils.git",
+ "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/utils/zipball/b043439dbdf954e6c28b5ea7e34b0100f83165e0",
+ "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0",
+ "shasum": ""
+ },
+ "require": {
+ "php": "8.2 - 8.5"
+ },
+ "conflict": {
+ "nette/finder": "<3",
+ "nette/schema": "<1.2.2"
+ },
+ "require-dev": {
+ "jetbrains/phpstorm-attributes": "^1.2",
+ "nette/phpstan-rules": "^1.0",
+ "nette/tester": "^2.5",
+ "phpstan/extension-installer": "^1.4@stable",
+ "phpstan/phpstan": "^2.1@stable",
+ "tracy/tracy": "^2.9"
+ },
+ "suggest": {
+ "ext-gd": "to use Image",
+ "ext-iconv": "to use Strings::chr(), ord() and reverse()",
+ "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
+ "ext-json": "to use Nette\\Utils\\Json",
+ "ext-mbstring": "to use Strings::lower() etc...",
+ "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Nette\\": "src"
+ },
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "array",
+ "core",
+ "datetime",
+ "images",
+ "json",
+ "nette",
+ "paginator",
+ "password",
+ "slugify",
+ "string",
+ "unicode",
+ "utf-8",
+ "utility",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/utils/issues",
+ "source": "https://github.com/nette/utils/tree/v4.1.5"
+ },
+ "time": "2026-07-17T23:02:45+00:00"
+ },
+ {
+ "name": "nikic/fast-route",
+ "version": "1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/FastRoute.git",
+ "reference": "7476684f39bb9124b3be69ed3d84b66723920298"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/FastRoute/zipball/7476684f39bb9124b3be69ed3d84b66723920298",
+ "reference": "7476684f39bb9124b3be69ed3d84b66723920298",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35|~5.7"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "FastRoute\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov",
+ "email": "nikic@php.net"
+ }
+ ],
+ "description": "Fast request router for PHP",
+ "keywords": [
+ "router",
+ "routing"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/FastRoute/issues",
+ "source": "https://github.com/nikic/FastRoute/tree/1.3.1"
+ },
+ "time": "2026-07-09T19:38:47+00:00"
+ },
+ {
+ "name": "oscarotero/html-parser",
+ "version": "v0.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/oscarotero/html-parser.git",
+ "reference": "10f3219267a365d9433f2f7d1694209c9d436c8d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/oscarotero/html-parser/zipball/10f3219267a365d9433f2f7d1694209c9d436c8d",
+ "reference": "10f3219267a365d9433f2f7d1694209c9d436c8d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.11",
+ "phpunit/phpunit": "^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "HtmlParser\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Oscar Otero",
+ "email": "oom@oscarotero.com",
+ "homepage": "http://oscarotero.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "Parse html strings to DOMDocument",
+ "homepage": "https://github.com/oscarotero/html-parser",
+ "keywords": [
+ "dom",
+ "html",
+ "parser"
+ ],
+ "support": {
+ "email": "oom@oscarotero.com",
+ "issues": "https://github.com/oscarotero/html-parser/issues",
+ "source": "https://github.com/oscarotero/html-parser/tree/v0.1.8"
+ },
+ "time": "2023-11-29T20:28:41+00:00"
+ },
+ {
+ "name": "php-di/invoker",
+ "version": "2.3.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHP-DI/Invoker.git",
+ "reference": "3c1ddfdef181431fbc4be83378f6d036d59e81e1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/3c1ddfdef181431fbc4be83378f6d036d59e81e1",
+ "reference": "3c1ddfdef181431fbc4be83378f6d036d59e81e1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "psr/container": "^1.0|^2.0"
+ },
+ "require-dev": {
+ "athletic/athletic": "~0.1.8",
+ "mnapoli/hard-mode": "~0.3.0",
+ "phpunit/phpunit": "^9.0 || ^10 || ^11 || ^12"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Invoker\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Generic and extensible callable invoker",
+ "homepage": "https://github.com/PHP-DI/Invoker",
+ "keywords": [
+ "callable",
+ "dependency",
+ "dependency-injection",
+ "injection",
+ "invoke",
+ "invoker"
+ ],
+ "support": {
+ "issues": "https://github.com/PHP-DI/Invoker/issues",
+ "source": "https://github.com/PHP-DI/Invoker/tree/2.3.7"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/mnapoli",
+ "type": "github"
+ }
+ ],
+ "time": "2025-08-30T10:22:22+00:00"
+ },
+ {
+ "name": "php-di/php-di",
+ "version": "7.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHP-DI/PHP-DI.git",
+ "reference": "f88054cc052e40dbe7b383c8817c19442d480352"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/f88054cc052e40dbe7b383c8817c19442d480352",
+ "reference": "f88054cc052e40dbe7b383c8817c19442d480352",
+ "shasum": ""
+ },
+ "require": {
+ "laravel/serializable-closure": "^1.0 || ^2.0",
+ "php": ">=8.0",
+ "php-di/invoker": "^2.0",
+ "psr/container": "^1.1 || ^2.0"
+ },
+ "provide": {
+ "psr/container-implementation": "^1.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3",
+ "friendsofphp/proxy-manager-lts": "^1",
+ "mnapoli/phpunit-easymock": "^1.3",
+ "phpunit/phpunit": "^9.6 || ^10 || ^11",
+ "vimeo/psalm": "^5|^6"
+ },
+ "suggest": {
+ "friendsofphp/proxy-manager-lts": "Install it if you want to use lazy injection (version ^1)"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "DI\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "The dependency injection container for humans",
+ "homepage": "https://php-di.org/",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interop",
+ "dependency injection",
+ "di",
+ "ioc",
+ "psr11"
+ ],
+ "support": {
+ "issues": "https://github.com/PHP-DI/PHP-DI/issues",
+ "source": "https://github.com/PHP-DI/PHP-DI/tree/7.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/mnapoli",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/php-di/php-di",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-16T11:10:48+00:00"
+ },
+ {
+ "name": "phpoption/phpoption",
+ "version": "1.9.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/php-option.git",
+ "reference": "75365b91986c2405cf5e1e012c5595cd487a98be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be",
+ "reference": "75365b91986c2405cf5e1e012c5595cd487a98be",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ },
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpOption\\": "src/PhpOption/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "https://github.com/schmittjoh"
+ },
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "Option Type for PHP",
+ "keywords": [
+ "language",
+ "option",
+ "php",
+ "type"
+ ],
+ "support": {
+ "issues": "https://github.com/schmittjoh/php-option/issues",
+ "source": "https://github.com/schmittjoh/php-option/tree/1.9.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-12-27T19:41:33+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/2.0.2"
+ },
+ "time": "2021-11-05T16:47:00+00:00"
+ },
+ {
+ "name": "psr/event-dispatcher",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/event-dispatcher.git",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\EventDispatcher\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Standard interfaces for event handling.",
+ "keywords": [
+ "events",
+ "psr",
+ "psr-14"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/event-dispatcher/issues",
+ "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
+ },
+ "time": "2019-01-08T18:20:26+00:00"
+ },
+ {
+ "name": "psr/http-client",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client"
+ },
+ "time": "2023-09-23T14:17:50+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory"
+ },
+ "time": "2024-04-15T12:06:14+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/2.0"
+ },
+ "time": "2023-04-04T09:54:51+00:00"
+ },
+ {
+ "name": "psr/http-server-handler",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-server-handler.git",
+ "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4",
+ "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Server\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP server-side request handler",
+ "keywords": [
+ "handler",
+ "http",
+ "http-interop",
+ "psr",
+ "psr-15",
+ "psr-7",
+ "request",
+ "response",
+ "server"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-server-handler/tree/1.0.2"
+ },
+ "time": "2023-04-10T20:06:20+00:00"
+ },
+ {
+ "name": "psr/http-server-middleware",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-server-middleware.git",
+ "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
+ "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "psr/http-message": "^1.0 || ^2.0",
+ "psr/http-server-handler": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Server\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP server-side middleware",
+ "keywords": [
+ "http",
+ "http-interop",
+ "middleware",
+ "psr",
+ "psr-15",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/http-server-middleware/issues",
+ "source": "https://github.com/php-fig/http-server-middleware/tree/1.0.2"
+ },
+ "time": "2023-04-11T06:14:47+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/3.0.2"
+ },
+ "time": "2024-09-11T13:17:53+00:00"
+ },
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5 || ^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/getallheaders.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ralph Khattar",
+ "email": "ralph.khattar@gmail.com"
+ }
+ ],
+ "description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
+ "time": "2019-03-08T08:55:37+00:00"
+ },
+ {
+ "name": "slim/php-view",
+ "version": "3.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/slimphp/PHP-View.git",
+ "reference": "ef1821663a6a028b9e446e8c6818fd257bf70313"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/slimphp/PHP-View/zipball/ef1821663a6a028b9e446e8c6818fd257bf70313",
+ "reference": "ef1821663a6a028b9e446e8c6818fd257bf70313",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "psr/http-message": "^1.1 || ^2.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1",
+ "phpunit/phpunit": "^9 || ^10",
+ "slim/psr7": "^1.6",
+ "squizlabs/php_codesniffer": "^3.10"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Slim\\Views\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Glenn Eggleton",
+ "email": "geggleto@gmail.com"
+ }
+ ],
+ "description": "Render PHP view scripts into a PSR-7 Response object.",
+ "keywords": [
+ "framework",
+ "php",
+ "phtml",
+ "renderer",
+ "slim",
+ "template",
+ "view"
+ ],
+ "support": {
+ "issues": "https://github.com/slimphp/PHP-View/issues",
+ "source": "https://github.com/slimphp/PHP-View/tree/3.4.0"
+ },
+ "time": "2024-07-19T18:54:54+00:00"
+ },
+ {
+ "name": "slim/psr7",
+ "version": "1.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/slimphp/Slim-Psr7.git",
+ "reference": "76e7e3b1cdfd583e9035c4c966c08e01e45ce959"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/slimphp/Slim-Psr7/zipball/76e7e3b1cdfd583e9035c4c966c08e01e45ce959",
+ "reference": "76e7e3b1cdfd583e9035c4c966c08e01e45ce959",
+ "shasum": ""
+ },
+ "require": {
+ "fig/http-message-util": "^1.1.5",
+ "php": "^8.0",
+ "psr/http-factory": "^1.1",
+ "psr/http-message": "^1.0 || ^2.0",
+ "ralouphie/getallheaders": "^3.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "^1.0",
+ "psr/http-message-implementation": "^1.0 || ^2.0"
+ },
+ "require-dev": {
+ "adriansuter/php-autoload-override": "^1.5|| ^2.0",
+ "ext-json": "*",
+ "http-interop/http-factory-tests": "^1.0 || ^2.0",
+ "php-http/psr7-integration-tests": "^1.5",
+ "phpstan/phpstan": "^2.1",
+ "phpunit/phpunit": "^9.6 || ^10",
+ "squizlabs/php_codesniffer": "^3.13"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Slim\\Psr7\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Josh Lockhart",
+ "email": "hello@joshlockhart.com",
+ "homepage": "https://joshlockhart.com"
+ },
+ {
+ "name": "Andrew Smith",
+ "email": "a.smith@silentworks.co.uk",
+ "homepage": "https://silentworks.co.uk"
+ },
+ {
+ "name": "Rob Allen",
+ "email": "rob@akrabat.com",
+ "homepage": "https://akrabat.com"
+ },
+ {
+ "name": "Pierre Berube",
+ "email": "pierre@lgse.com",
+ "homepage": "https://www.lgse.com"
+ }
+ ],
+ "description": "Strict PSR-7 implementation",
+ "homepage": "https://www.slimframework.com",
+ "keywords": [
+ "http",
+ "psr-7",
+ "psr7"
+ ],
+ "support": {
+ "issues": "https://github.com/slimphp/Slim-Psr7/issues",
+ "source": "https://github.com/slimphp/Slim-Psr7/tree/1.8.0"
+ },
+ "time": "2025-11-02T17:51:19+00:00"
+ },
+ {
+ "name": "slim/slim",
+ "version": "4.15.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/slimphp/Slim.git",
+ "reference": "e12cb05ca2a14e8f459d019e87a31dc915b80470"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/slimphp/Slim/zipball/e12cb05ca2a14e8f459d019e87a31dc915b80470",
+ "reference": "e12cb05ca2a14e8f459d019e87a31dc915b80470",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "nikic/fast-route": "^1.3",
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
+ "psr/container": "^1.0 || ^2.0",
+ "psr/http-factory": "^1.1",
+ "psr/http-message": "^1.1 || ^2.0",
+ "psr/http-server-handler": "^1.0",
+ "psr/http-server-middleware": "^1.0",
+ "psr/log": "^1.1 || ^2.0 || ^3.0"
+ },
+ "require-dev": {
+ "adriansuter/php-autoload-override": "^1.4 || ^2",
+ "ext-simplexml": "*",
+ "guzzlehttp/psr7": "^2.6",
+ "httpsoft/http-message": "^1.1",
+ "httpsoft/http-server-request": "^1.1",
+ "laminas/laminas-diactoros": "^2.17 || ^3",
+ "nyholm/psr7": "^1.8",
+ "nyholm/psr7-server": "^1.1",
+ "phpspec/prophecy": "^1.19",
+ "phpspec/prophecy-phpunit": "^2.1",
+ "phpstan/phpstan": "^1 || ^2",
+ "phpunit/phpunit": "^9.6 || ^10 || ^11 || ^12",
+ "slim/http": "^1.3",
+ "slim/psr7": "^1.6",
+ "squizlabs/php_codesniffer": "^3.10",
+ "vimeo/psalm": "^5 || ^6"
+ },
+ "suggest": {
+ "ext-simplexml": "Needed to support XML format in BodyParsingMiddleware",
+ "ext-xml": "Needed to support XML format in BodyParsingMiddleware",
+ "php-di/php-di": "PHP-DI is the recommended container library to be used with Slim",
+ "slim/psr7": "Slim PSR-7 implementation. See https://www.slimframework.com/docs/v4/start/installation.html for more information."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Slim\\": "Slim"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Josh Lockhart",
+ "email": "hello@joshlockhart.com",
+ "homepage": "https://joshlockhart.com"
+ },
+ {
+ "name": "Andrew Smith",
+ "email": "a.smith@silentworks.co.uk",
+ "homepage": "https://silentworks.co.uk"
+ },
+ {
+ "name": "Rob Allen",
+ "email": "rob@akrabat.com",
+ "homepage": "https://akrabat.com"
+ },
+ {
+ "name": "Pierre Berube",
+ "email": "pierre@lgse.com",
+ "homepage": "https://www.lgse.com"
+ },
+ {
+ "name": "Gabriel Manricks",
+ "email": "gmanricks@me.com",
+ "homepage": "http://gabrielmanricks.com"
+ }
+ ],
+ "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
+ "homepage": "https://www.slimframework.com",
+ "keywords": [
+ "api",
+ "framework",
+ "micro",
+ "router"
+ ],
+ "support": {
+ "docs": "https://www.slimframework.com/docs/v4/",
+ "forum": "https://discourse.slimframework.com/",
+ "irc": "irc://irc.freenode.net:6667/slimphp",
+ "issues": "https://github.com/slimphp/Slim/issues",
+ "rss": "https://www.slimframework.com/blog/feed.rss",
+ "slack": "https://slimphp.slack.com/",
+ "source": "https://github.com/slimphp/Slim",
+ "wiki": "https://github.com/slimphp/Slim/wiki"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/slimphp",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/slim/slim",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-05-22T08:00:12+00:00"
+ },
+ {
+ "name": "slim/twig-view",
+ "version": "3.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/slimphp/Twig-View.git",
+ "reference": "b4268d87d0e327feba5f88d32031e9123655b909"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/slimphp/Twig-View/zipball/b4268d87d0e327feba5f88d32031e9123655b909",
+ "reference": "b4268d87d0e327feba5f88d32031e9123655b909",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "psr/http-message": "^1.1 || ^2.0",
+ "slim/slim": "^4.12",
+ "symfony/polyfill-php81": "^1.29",
+ "twig/twig": "^3.11"
+ },
+ "require-dev": {
+ "phpspec/prophecy-phpunit": "^2.0",
+ "phpstan/phpstan": "^1.10.59",
+ "phpunit/phpunit": "^9.6 || ^10",
+ "psr/http-factory": "^1.0",
+ "squizlabs/php_codesniffer": "^3.9"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Slim\\Views\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Josh Lockhart",
+ "email": "hello@joshlockhart.com",
+ "homepage": "http://joshlockhart.com"
+ },
+ {
+ "name": "Pierre Berube",
+ "email": "pierre@lgse.com",
+ "homepage": "http://www.lgse.com"
+ }
+ ],
+ "description": "Slim Framework 4 view helper built on top of the Twig 3 templating component",
+ "homepage": "https://www.slimframework.com",
+ "keywords": [
+ "framework",
+ "slim",
+ "template",
+ "twig",
+ "view"
+ ],
+ "support": {
+ "issues": "https://github.com/slimphp/Twig-View/issues",
+ "source": "https://github.com/slimphp/Twig-View/tree/3.4.1"
+ },
+ "time": "2024-09-26T05:42:02+00:00"
+ },
+ {
+ "name": "spatie/yaml-front-matter",
+ "version": "2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/yaml-front-matter.git",
+ "reference": "3066996d0e4ed74bcc22c261084a9df727bf7e36"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/yaml-front-matter/zipball/3066996d0e4ed74bcc22c261084a9df727bf7e36",
+ "reference": "3066996d0e4ed74bcc22c261084a9df727bf7e36",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.0",
+ "symfony/yaml": "^6.0|^7.0|^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Spatie\\YamlFrontMatter\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian De Deyne",
+ "email": "sebastian@spatie.be",
+ "homepage": "https://spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "A to the point yaml front matter parser",
+ "homepage": "https://github.com/sebastiandedeyne/yaml-front-matter",
+ "keywords": [
+ "front matter",
+ "jekyll",
+ "spatie",
+ "yaml"
+ ],
+ "support": {
+ "source": "https://github.com/spatie/yaml-front-matter/tree/2.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://spatie.be/open-source/support-us",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2025-11-24T16:17:28+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v7.4.15",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "088ec6fe0ef6819cbc301174093b6bfa4ad26930"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/088ec6fe0ef6819cbc301174093b6bfa4ad26930",
+ "reference": "088ec6fe0ef6819cbc301174093b6bfa4ad26930",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/string": "^7.2|^8.0"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<6.4",
+ "symfony/dotenv": "<6.4",
+ "symfony/event-dispatcher": "<6.4",
+ "symfony/lock": "<6.4",
+ "symfony/process": "<6.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0|3.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/lock": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command-line",
+ "console",
+ "terminal"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v7.4.15"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-07-27T13:51:00+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.7.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d",
+ "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.7-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-06-05T06:23:12+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.37.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "141046a8f9477948ff284fa65be2095baafb94f2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2",
+ "reference": "141046a8f9477948ff284fa65be2095baafb94f2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-04-10T16:19:22+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.41.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/bb899c1db0aa8127dc3afe8cda4a67eb24915f8d",
+ "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.41.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-07-28T08:25:59+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.38.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b",
+ "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-05-25T13:48:31+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.38.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
+ "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
+ "shasum": ""
+ },
+ "require": {
+ "ext-iconv": "*",
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-05-27T06:59:30+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.37.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
+ "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-04-10T16:19:22+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php81",
+ "version": "v1.38.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php81.git",
+ "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/6bfb9c766cacffbc8e118cb87217d08ed84e5cd7",
+ "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php81\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.38.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-05-26T12:45:58+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v7.4.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "f5804be144caceb570f6747519999636b664f24c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/f5804be144caceb570f6747519999636b664f24c",
+ "reference": "f5804be144caceb570f6747519999636b664f24c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Executes commands in sub-processes",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v7.4.13"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-05-23T16:05:06+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v3.7.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/c0a284bab1ed8aa0417e3d69250ab437739563a0",
+ "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v3.7.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-06-16T09:55:08+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "v7.4.15",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "e394af32256bf9e7bf80849d95e589167c10097b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/e394af32256bf9e7bf80849d95e589167c10097b",
+ "reference": "e394af32256bf9e7bf80849d95e589167c10097b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3.0",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.33",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "conflict": {
+ "symfony/translation-contracts": "<2.5"
+ },
+ "require-dev": {
+ "symfony/emoji": "^7.1|^8.0",
+ "symfony/http-client": "^6.4|^7.0|^8.0",
+ "symfony/intl": "^6.4|^7.0|^8.0",
+ "symfony/translation-contracts": "^2.5|^3.0",
+ "symfony/var-exporter": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/string/tree/v7.4.15"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-07-28T07:33:02+00:00"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "v7.4.15",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/yaml.git",
+ "reference": "e101850ded5d2c0d44bf32abb8996404afec2dec"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/e101850ded5d2c0d44bf32abb8996404afec2dec",
+ "reference": "e101850ded5d2c0d44bf32abb8996404afec2dec",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "symfony/console": "<6.4"
+ },
+ "require-dev": {
+ "symfony/console": "^6.4|^7.0|^8.0"
+ },
+ "bin": [
+ "Resources/bin/yaml-lint"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Yaml\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Loads and dumps YAML files",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/yaml/tree/v7.4.15"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2022-01-02T09:53:40+00:00"
+ "time": "2026-07-21T15:13:06+00:00"
+ },
+ {
+ "name": "twig/twig",
+ "version": "v3.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/twigphp/Twig.git",
+ "reference": "597c12ed286fb9d1701a36684ce6e0cbe28ebc8b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/597c12ed286fb9d1701a36684ce6e0cbe28ebc8b",
+ "reference": "597c12ed286fb9d1701a36684ce6e0cbe28ebc8b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1.0",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-mbstring": "^1.3"
+ },
+ "require-dev": {
+ "php-cs-fixer/shim": "^3.0@stable",
+ "phpstan/phpstan": "^2.0@stable",
+ "psr/container": "^1.0|^2.0",
+ "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/Resources/core.php",
+ "src/Resources/debug.php",
+ "src/Resources/escaper.php",
+ "src/Resources/string_loader.php"
+ ],
+ "psr-4": {
+ "Twig\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Twig Team",
+ "role": "Contributors"
+ },
+ {
+ "name": "Armin Ronacher",
+ "email": "armin.ronacher@active-4.com",
+ "role": "Project Founder"
+ }
+ ],
+ "description": "Twig, the flexible, fast, and secure template language for PHP",
+ "homepage": "https://twig.symfony.com",
+ "keywords": [
+ "templating"
+ ],
+ "support": {
+ "issues": "https://github.com/twigphp/Twig/issues",
+ "source": "https://github.com/twigphp/Twig/tree/v3.28.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/twig/twig",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-07-03T20:44:34+00:00"
+ },
+ {
+ "name": "vlucas/phpdotenv",
+ "version": "v5.6.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vlucas/phpdotenv.git",
+ "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/416df702837983f8d5ff48c9c3fee4f5f57b980b",
+ "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "graham-campbell/result-type": "^1.1.4",
+ "php": "^7.2.5 || ^8.0",
+ "phpoption/phpoption": "^1.9.5",
+ "symfony/polyfill-ctype": "^1.26",
+ "symfony/polyfill-mbstring": "^1.26",
+ "symfony/polyfill-php80": "^1.26"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "ext-filter": "*",
+ "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
+ },
+ "suggest": {
+ "ext-filter": "Required to use the boolean validator."
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ },
+ "branch-alias": {
+ "dev-master": "5.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dotenv\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Vance Lucas",
+ "email": "vance@vancelucas.com",
+ "homepage": "https://github.com/vlucas"
+ }
+ ],
+ "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
+ "keywords": [
+ "dotenv",
+ "env",
+ "environment"
+ ],
+ "support": {
+ "issues": "https://github.com/vlucas/phpdotenv/issues",
+ "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-07-06T19:11:50+00:00"
+ },
+ {
+ "name": "voku/stop-words",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/voku/stop-words.git",
+ "reference": "8e63c0af20f800b1600783764e0ce19e53969f71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/voku/stop-words/zipball/8e63c0af20f800b1600783764e0ce19e53969f71",
+ "reference": "8e63c0af20f800b1600783764e0ce19e53969f71",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "voku\\": "src/voku/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Lars Moelleken",
+ "homepage": "http://www.moelleken.org/"
+ }
+ ],
+ "description": "Stop-Words via PHP",
+ "keywords": [
+ "stop words",
+ "stop-words"
+ ],
+ "support": {
+ "issues": "https://github.com/voku/stop-words/issues",
+ "source": "https://github.com/voku/stop-words/tree/master"
+ },
+ "time": "2018-11-23T01:37:27+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.13.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpspec/prophecy": "^1.10",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-01T08:46:24+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v5.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f",
+ "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0"
+ },
+ "time": "2026-07-04T14:30:18+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+00:00"
+ },
+ {
+ "name": "phpcompatibility/php-compatibility",
+ "version": "9.3.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCompatibility/PHPCompatibility.git",
+ "reference": "9fb324479acf6f39452e0655d2429cc0d3914243"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243",
+ "reference": "9fb324479acf6f39452e0655d2429cc0d3914243",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3",
+ "squizlabs/php_codesniffer": "^2.3 || ^3.0.2"
+ },
+ "conflict": {
+ "squizlabs/php_codesniffer": "2.6.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0"
+ },
+ "suggest": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.",
+ "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+ },
+ "type": "phpcodesniffer-standard",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Wim Godden",
+ "homepage": "https://github.com/wimg",
+ "role": "lead"
+ },
+ {
+ "name": "Juliette Reinders Folmer",
+ "homepage": "https://github.com/jrfnl",
+ "role": "lead"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors"
+ }
+ ],
+ "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.",
+ "homepage": "http://techblog.wimgodden.be/tag/codesniffer/",
+ "keywords": [
+ "compatibility",
+ "phpcs",
+ "standards"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues",
+ "source": "https://github.com/PHPCompatibility/PHPCompatibility"
+ },
+ "time": "2019-12-27T09:44:58+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "12.5.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "186dab580576598076de6818596d12b61801880e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/186dab580576598076de6818596d12b61801880e",
+ "reference": "186dab580576598076de6818596d12b61801880e",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^5.7.0",
+ "php": ">=8.3",
+ "phpunit/php-text-template": "^5.0",
+ "sebastian/complexity": "^5.0",
+ "sebastian/environment": "^8.1.2",
+ "sebastian/lines-of-code": "^4.0.1",
+ "sebastian/version": "^6.0",
+ "theseer/tokenizer": "^2.0.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.5.28"
+ },
+ "suggest": {
+ "ext-pcov": "PHP extension that provides line coverage",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "12.5.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.7"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-06-01T13:24:19+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "6.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5",
+ "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-02T14:04:18+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "6.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406",
+ "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^12.0"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "security": "https://github.com/sebastianbergmann/php-invoker/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-02-07T04:58:58+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "5.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53",
+ "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-02-07T04:59:16+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "8.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc",
+ "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "8.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "security": "https://github.com/sebastianbergmann/php-timer/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-02-07T04:59:38+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "12.5.33",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "b98e028a26c5c5ba7e4a54be96ccf35f2914d184"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b98e028a26c5c5ba7e4a54be96ccf35f2914d184",
+ "reference": "b98e028a26c5c5ba7e4a54be96ccf35f2914d184",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-filter": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.13.4",
+ "phar-io/manifest": "^2.0.4",
+ "phar-io/version": "^3.2.1",
+ "php": ">=8.3",
+ "phpunit/php-code-coverage": "^12.5.7",
+ "phpunit/php-file-iterator": "^6.0.1",
+ "phpunit/php-invoker": "^6.0.0",
+ "phpunit/php-text-template": "^5.0.0",
+ "phpunit/php-timer": "^8.0.0",
+ "sebastian/cli-parser": "^4.2.1",
+ "sebastian/comparator": "^7.1.8",
+ "sebastian/diff": "^7.0.0",
+ "sebastian/environment": "^8.1.2",
+ "sebastian/exporter": "^7.0.3",
+ "sebastian/global-state": "^8.0.3",
+ "sebastian/object-enumerator": "^7.0.0",
+ "sebastian/recursion-context": "^7.0.1",
+ "sebastian/type": "^6.0.4",
+ "sebastian/version": "^6.0.0",
+ "staabm/side-effects-detector": "^1.0.5"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "12.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.33"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsoring.html",
+ "type": "other"
+ }
+ ],
+ "time": "2026-07-28T13:58:09+00:00"
+ },
+ {
+ "name": "sebastian/cli-parser",
+ "version": "4.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "7d05781b13f7dec9043a629a21d086ed74582a15"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/7d05781b13f7dec9043a629a21d086ed74582a15",
+ "reference": "7d05781b13f7dec9043a629a21d086ed74582a15",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.5.25"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-05-17T05:29:34+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "7.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "7c65c1e79836812819705b473a90c12399542485"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/7c65c1e79836812819705b473a90c12399542485",
+ "reference": "7c65c1e79836812819705b473a90c12399542485",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "php": ">=8.3",
+ "sebastian/diff": "^7.0",
+ "sebastian/exporter": "^7.0.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.5.25"
+ },
+ "suggest": {
+ "ext-bcmath": "For comparing BcMath\\Number objects"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "security": "https://github.com/sebastianbergmann/comparator/security/policy",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-05-21T04:45:25+00:00"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "5.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb",
+ "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "security": "https://github.com/sebastianbergmann/complexity/security/policy",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-02-07T04:55:25+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "7.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "7ab1ea946c012266ca32390913653d844ecd085f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f",
+ "reference": "7ab1ea946c012266ca32390913653d844ecd085f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0",
+ "symfony/process": "^7.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "security": "https://github.com/sebastianbergmann/diff/security/policy",
+ "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-02-07T04:55:46+00:00"
},
{
- "name": "symfony/polyfill-ctype",
- "version": "v1.27.0",
+ "name": "sebastian/environment",
+ "version": "8.1.2",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "5bbc823adecdae860bb64756d639ecfec17b050a"
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a",
- "reference": "5bbc823adecdae860bb64756d639ecfec17b050a",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/9d32c685773823b1983e256ae4ecd48a10d6e439",
+ "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=8.3"
},
- "provide": {
- "ext-ctype": "*"
+ "require-dev": {
+ "phpunit/phpunit": "^12.5.26"
},
"suggest": {
- "ext-ctype": "For best performance"
+ "ext-posix": "*"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-main": "8.1-dev"
}
},
"autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Ctype\\": ""
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Gert de Pagter",
- "email": "BackEndTea@gmail.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
- "description": "Symfony polyfill for ctype functions",
- "homepage": "https://symfony.com",
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "https://github.com/sebastianbergmann/environment",
"keywords": [
- "compatibility",
- "ctype",
- "polyfill",
- "portable"
+ "Xdebug",
+ "environment",
+ "hhvm"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0"
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "security": "https://github.com/sebastianbergmann/environment/security/policy",
+ "source": "https://github.com/sebastianbergmann/environment/tree/8.1.2"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
},
{
- "url": "https://github.com/fabpot",
- "type": "github"
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
},
{
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/environment",
"type": "tidelift"
}
],
- "time": "2022-11-03T14:55:06+00:00"
+ "time": "2026-05-25T13:40:20+00:00"
},
{
- "name": "symfony/polyfill-intl-grapheme",
- "version": "v1.27.0",
+ "name": "sebastian/exporter",
+ "version": "7.0.3",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "511a08c03c1960e08a883f4cffcacd219b758354"
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354",
- "reference": "511a08c03c1960e08a883f4cffcacd219b758354",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23",
+ "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "ext-mbstring": "*",
+ "php": ">=8.3",
+ "sebastian/recursion-context": "^7.0.1"
},
- "suggest": {
- "ext-intl": "For best performance"
+ "require-dev": {
+ "phpunit/phpunit": "^12.5.25"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
}
],
- "description": "Symfony polyfill for intl's grapheme_* functions",
- "homepage": "https://symfony.com",
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
"keywords": [
- "compatibility",
- "grapheme",
- "intl",
- "polyfill",
- "portable",
- "shim"
+ "export",
+ "exporter"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0"
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "security": "https://github.com/sebastianbergmann/exporter/security/policy",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.3"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
},
{
- "url": "https://github.com/fabpot",
- "type": "github"
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
},
{
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter",
"type": "tidelift"
}
],
- "time": "2022-11-03T14:55:06+00:00"
+ "time": "2026-05-20T04:37:17+00:00"
},
{
- "name": "symfony/polyfill-intl-normalizer",
- "version": "v1.27.0",
+ "name": "sebastian/global-state",
+ "version": "8.0.3",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6"
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6",
- "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b164d3274d6537ab462591c5755f76a8f5b1aae9",
+ "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=8.3",
+ "sebastian/object-reflector": "^5.0",
+ "sebastian/recursion-context": "^7.0.1"
},
- "suggest": {
- "ext-intl": "For best performance"
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^12.5.28"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
- },
"classmap": [
- "Resources/stubs"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
- "description": "Symfony polyfill for intl's Normalizer class and related functions",
- "homepage": "https://symfony.com",
+ "description": "Snapshotting of global state",
+ "homepage": "https://www.github.com/sebastianbergmann/global-state",
"keywords": [
- "compatibility",
- "intl",
- "normalizer",
- "polyfill",
- "portable",
- "shim"
+ "global state"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "security": "https://github.com/sebastianbergmann/global-state/security/policy",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.3"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
},
{
- "url": "https://github.com/fabpot",
- "type": "github"
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
},
{
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state",
"type": "tidelift"
}
],
- "time": "2022-11-03T14:55:06+00:00"
+ "time": "2026-06-01T15:10:33+00:00"
},
{
- "name": "symfony/polyfill-mbstring",
- "version": "v1.27.0",
+ "name": "sebastian/lines-of-code",
+ "version": "4.0.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
- "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d543b8ef219dcd8da262cbb958639a96bedba10e",
+ "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e",
"shasum": ""
},
"require": {
- "php": ">=7.1"
- },
- "provide": {
- "ext-mbstring": "*"
+ "nikic/php-parser": "^5.7.0",
+ "php": ">=8.3"
},
- "suggest": {
- "ext-mbstring": "For best performance"
+ "require-dev": {
+ "phpunit/phpunit": "^12.5.25"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Symfony polyfill for the Mbstring extension",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
- ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.1"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
},
{
- "url": "https://github.com/fabpot",
- "type": "github"
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
},
{
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/lines-of-code",
"type": "tidelift"
}
],
- "time": "2022-11-03T14:55:06+00:00"
+ "time": "2026-05-19T16:22:07+00:00"
},
{
- "name": "symfony/polyfill-php73",
- "version": "v1.27.0",
+ "name": "sebastian/object-enumerator",
+ "version": "7.0.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9"
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
- "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894",
+ "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=8.3",
+ "sebastian/object-reflector": "^5.0",
+ "sebastian/recursion-context": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php73\\": ""
- },
"classmap": [
- "Resources/stubs"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
- "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
"support": {
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0"
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2022-11-03T14:55:06+00:00"
+ "time": "2025-02-07T04:57:48+00:00"
},
{
- "name": "symfony/polyfill-php80",
- "version": "v1.27.0",
+ "name": "sebastian/object-reflector",
+ "version": "5.0.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "4bfa827c969c98be1e527abd576533293c634f6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
- "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a",
+ "reference": "4bfa827c969c98be1e527abd576533293c634f6a",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
- },
"classmap": [
- "Resources/stubs"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
- "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "security": "https://github.com/sebastianbergmann/object-reflector/security/policy",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2022-11-03T14:55:06+00:00"
+ "time": "2025-02-07T04:58:17+00:00"
},
{
- "name": "symfony/process",
- "version": "v5.4.19",
+ "name": "sebastian/recursion-context",
+ "version": "7.0.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/process.git",
- "reference": "c5ba874c9b636dbccf761e22ce750e88ec3f55e1"
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/c5ba874c9b636dbccf761e22ce750e88ec3f55e1",
- "reference": "c5ba874c9b636dbccf761e22ce750e88ec3f55e1",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c",
+ "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
"autoload": {
- "psr-4": {
- "Symfony\\Component\\Process\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
}
],
- "description": "Executes commands in sub-processes",
- "homepage": "https://symfony.com",
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
"support": {
- "source": "https://github.com/symfony/process/tree/v5.4.19"
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
},
{
- "url": "https://github.com/fabpot",
- "type": "github"
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
},
{
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
"type": "tidelift"
}
],
- "time": "2023-01-01T08:32:19+00:00"
+ "time": "2025-08-13T04:44:59+00:00"
},
{
- "name": "symfony/service-contracts",
- "version": "v2.5.2",
+ "name": "sebastian/type",
+ "version": "6.0.4",
"source": {
"type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c"
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "82ff822c2edc46724be9f7411d3163021f602773"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
- "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/82ff822c2edc46724be9f7411d3163021f602773",
+ "reference": "82ff822c2edc46724be9f7411d3163021f602773",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "psr/container": "^1.1",
- "symfony/deprecation-contracts": "^2.1|^3"
- },
- "conflict": {
- "ext-psr": "<1.1|>=2"
+ "php": ">=8.3"
},
- "suggest": {
- "symfony/service-implementation": ""
+ "require-dev": {
+ "phpunit/phpunit": "^12.5.25"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Service\\": ""
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Generic abstractions related to writing services",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v2.5.2"
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "security": "https://github.com/sebastianbergmann/type/security/policy",
+ "source": "https://github.com/sebastianbergmann/type/tree/6.0.4"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
},
{
- "url": "https://github.com/fabpot",
- "type": "github"
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
},
{
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/type",
"type": "tidelift"
}
],
- "time": "2022-05-30T19:17:29+00:00"
+ "time": "2026-05-20T06:45:45+00:00"
},
{
- "name": "symfony/string",
- "version": "v5.4.19",
+ "name": "sebastian/version",
+ "version": "6.0.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/string.git",
- "reference": "0a01071610fd861cc160dfb7e2682ceec66064cb"
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/0a01071610fd861cc160dfb7e2682ceec66064cb",
- "reference": "0a01071610fd861cc160dfb7e2682ceec66064cb",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c",
+ "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.0",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "~1.15"
- },
- "conflict": {
- "symfony/translation-contracts": ">=3.0"
- },
- "require-dev": {
- "symfony/error-handler": "^4.4|^5.0|^6.0",
- "symfony/http-client": "^4.4|^5.0|^6.0",
- "symfony/translation-contracts": "^1.1|^2",
- "symfony/var-exporter": "^4.4|^5.0|^6.0"
+ "php": ">=8.3"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
"autoload": {
- "files": [
- "Resources/functions.php"
- ],
- "psr-4": {
- "Symfony\\Component\\String\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
- "homepage": "https://symfony.com",
- "keywords": [
- "grapheme",
- "i18n",
- "string",
- "unicode",
- "utf-8",
- "utf8"
- ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
"support": {
- "source": "https://github.com/symfony/string/tree/v5.4.19"
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "security": "https://github.com/sebastianbergmann/version/security/policy",
+ "source": "https://github.com/sebastianbergmann/version/tree/6.0.0"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2023-01-01T08:32:19+00:00"
+ "time": "2025-02-07T05:00:38+00:00"
},
{
- "name": "symfony/yaml",
- "version": "v5.4.19",
+ "name": "squizlabs/php_codesniffer",
+ "version": "3.13.5",
"source": {
"type": "git",
- "url": "https://github.com/symfony/yaml.git",
- "reference": "71c05db20cb9b54d381a28255f17580e2b7e36a5"
+ "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
+ "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/71c05db20cb9b54d381a28255f17580e2b7e36a5",
- "reference": "71c05db20cb9b54d381a28255f17580e2b7e36a5",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4",
+ "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-ctype": "^1.8"
- },
- "conflict": {
- "symfony/console": "<5.3"
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": ">=5.4.0"
},
"require-dev": {
- "symfony/console": "^5.3|^6.0"
- },
- "suggest": {
- "symfony/console": "For validating YAML files using the lint command"
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4"
},
"bin": [
- "Resources/bin/yaml-lint"
+ "bin/phpcbf",
+ "bin/phpcs"
],
"type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Yaml\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Greg Sherwood",
+ "role": "Former lead"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Juliette Reinders Folmer",
+ "role": "Current lead"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors"
}
],
- "description": "Loads and dumps YAML files",
- "homepage": "https://symfony.com",
+ "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
+ "keywords": [
+ "phpcs",
+ "standards",
+ "static analysis"
+ ],
"support": {
- "source": "https://github.com/symfony/yaml/tree/v5.4.19"
+ "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues",
+ "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy",
+ "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
+ "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
+ "url": "https://github.com/PHPCSStandards",
+ "type": "github"
},
{
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/jrfnl",
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/phpcsstandards",
+ "type": "thanks_dev"
}
],
- "time": "2023-01-10T18:51:14+00:00"
+ "time": "2025-11-04T16:30:35+00:00"
},
{
- "name": "twig/twig",
- "version": "v3.5.1",
+ "name": "staabm/side-effects-detector",
+ "version": "1.0.5",
"source": {
"type": "git",
- "url": "https://github.com/twigphp/Twig.git",
- "reference": "a6e0510cc793912b451fd40ab983a1d28f611c15"
+ "url": "https://github.com/staabm/side-effects-detector.git",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/a6e0510cc793912b451fd40ab983a1d28f611c15",
- "reference": "a6e0510cc793912b451fd40ab983a1d28f611c15",
+ "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "^1.8",
- "symfony/polyfill-mbstring": "^1.3"
+ "ext-tokenizer": "*",
+ "php": "^7.4 || ^8.0"
},
"require-dev": {
- "psr/container": "^1.0",
- "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.6",
+ "phpunit/phpunit": "^9.6.21",
+ "symfony/var-dumper": "^5.4.43",
+ "tomasvotruba/type-coverage": "1.0.0",
+ "tomasvotruba/unused-public": "1.0.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.5-dev"
- }
- },
"autoload": {
- "psr-4": {
- "Twig\\": "src/"
- }
+ "classmap": [
+ "lib/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com",
- "homepage": "http://fabien.potencier.org",
- "role": "Lead Developer"
- },
- {
- "name": "Twig Team",
- "role": "Contributors"
- },
- {
- "name": "Armin Ronacher",
- "email": "armin.ronacher@active-4.com",
- "role": "Project Founder"
- }
+ "MIT"
],
- "description": "Twig, the flexible, fast, and secure template language for PHP",
- "homepage": "https://twig.symfony.com",
+ "description": "A static analysis tool to detect side effects in PHP code",
"keywords": [
- "templating"
+ "static analysis"
],
"support": {
- "issues": "https://github.com/twigphp/Twig/issues",
- "source": "https://github.com/twigphp/Twig/tree/v3.5.1"
+ "issues": "https://github.com/staabm/side-effects-detector/issues",
+ "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5"
},
"funding": [
{
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/staabm",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/twig/twig",
- "type": "tidelift"
}
],
- "time": "2023-02-08T07:49:20+00:00"
+ "time": "2024-10-20T05:08:20+00:00"
},
{
- "name": "vlucas/phpdotenv",
- "version": "v3.6.10",
+ "name": "theseer/tokenizer",
+ "version": "2.0.1",
"source": {
"type": "git",
- "url": "https://github.com/vlucas/phpdotenv.git",
- "reference": "5b547cdb25825f10251370f57ba5d9d924e6f68e"
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/5b547cdb25825f10251370f57ba5d9d924e6f68e",
- "reference": "5b547cdb25825f10251370f57ba5d9d924e6f68e",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4",
+ "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4",
"shasum": ""
},
"require": {
- "php": "^5.4 || ^7.0 || ^8.0",
- "phpoption/phpoption": "^1.5.2",
- "symfony/polyfill-ctype": "^1.17"
- },
- "require-dev": {
- "ext-filter": "*",
- "ext-pcre": "*",
- "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.21"
- },
- "suggest": {
- "ext-filter": "Required to use the boolean validator.",
- "ext-pcre": "Required to use most of the library."
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^8.1"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.6-dev"
- }
- },
"autoload": {
- "psr-4": {
- "Dotenv\\": "src/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -1996,105 +5411,108 @@
],
"authors": [
{
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- },
- {
- "name": "Vance Lucas",
- "email": "vance@vancelucas.com",
- "homepage": "https://github.com/vlucas"
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
}
],
- "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
- "keywords": [
- "dotenv",
- "env",
- "environment"
- ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
- "issues": "https://github.com/vlucas/phpdotenv/issues",
- "source": "https://github.com/vlucas/phpdotenv/tree/v3.6.10"
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/2.0.1"
},
"funding": [
{
- "url": "https://github.com/GrahamCampbell",
+ "url": "https://github.com/theseer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
- "type": "tidelift"
}
],
- "time": "2021-12-12T23:02:06+00:00"
+ "time": "2025-12-08T11:19:18+00:00"
},
{
- "name": "voku/stop-words",
- "version": "2.0.1",
+ "name": "yoast/phpunit-polyfills",
+ "version": "4.0.0",
"source": {
"type": "git",
- "url": "https://github.com/voku/stop-words.git",
- "reference": "8e63c0af20f800b1600783764e0ce19e53969f71"
+ "url": "https://github.com/Yoast/PHPUnit-Polyfills.git",
+ "reference": "134921bfca9b02d8f374c48381451da1d98402f9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/voku/stop-words/zipball/8e63c0af20f800b1600783764e0ce19e53969f71",
- "reference": "8e63c0af20f800b1600783764e0ce19e53969f71",
+ "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/134921bfca9b02d8f374c48381451da1d98402f9",
+ "reference": "134921bfca9b02d8f374c48381451da1d98402f9",
"shasum": ""
},
"require": {
- "php": ">=7.0.0"
+ "php": ">=7.1",
+ "phpunit/phpunit": "^7.5 || ^8.0 || ^9.0 || ^11.0 || ^12.0"
},
"require-dev": {
- "phpunit/phpunit": "~6.0"
+ "php-parallel-lint/php-console-highlighter": "^1.0.0",
+ "php-parallel-lint/php-parallel-lint": "^1.4.0",
+ "yoast/yoastcs": "^3.1.0"
},
"type": "library",
- "autoload": {
- "psr-4": {
- "voku\\": "src/voku/"
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.x-dev"
}
},
+ "autoload": {
+ "files": [
+ "phpunitpolyfills-autoload.php"
+ ]
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Lars Moelleken",
- "homepage": "http://www.moelleken.org/"
+ "name": "Team Yoast",
+ "email": "support@yoast.com",
+ "homepage": "https://yoast.com"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/Yoast/PHPUnit-Polyfills/graphs/contributors"
}
],
- "description": "Stop-Words via PHP",
+ "description": "Set of polyfills for changed PHPUnit functionality to allow for creating PHPUnit cross-version compatible tests",
+ "homepage": "https://github.com/Yoast/PHPUnit-Polyfills",
"keywords": [
- "stop words",
- "stop-words"
+ "phpunit",
+ "polyfill",
+ "testing"
],
"support": {
- "issues": "https://github.com/voku/stop-words/issues",
- "source": "https://github.com/voku/stop-words/tree/master"
+ "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues",
+ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy",
+ "source": "https://github.com/Yoast/PHPUnit-Polyfills"
},
- "time": "2018-11-23T01:37:27+00:00"
+ "time": "2025-02-09T18:58:54+00:00"
}
],
- "packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
- "php": ">=7.4.0",
+ "php": ">=8.3.0",
"ext-json": "*",
"ext-pdo": "*",
- "ext-sqlite3": "*",
+ "ext-pdo_mysql": "*",
"ext-fileinfo": "*",
- "ext-mbstring": "*"
+ "ext-mbstring": "*",
+ "ext-dom": "*",
+ "ext-gd": "*"
},
"platform-dev": {
"ext-intl": "*"
},
"platform-overrides": {
- "php": "7.4.0"
+ "php": "8.3.0"
},
- "plugin-api-version": "2.3.0"
+ "plugin-api-version": "2.6.0"
}
diff --git a/docker-compose.yml b/docker-compose.yml
index 7a35c85c..5d2c3ac4 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,14 +1,40 @@
version: '3'
services:
+ mysql:
+ image: mysql:8.0
+ environment:
+ MYSQL_DATABASE: modxdocs
+ MYSQL_USER: modxdocs
+ MYSQL_PASSWORD: secret
+ MYSQL_ROOT_PASSWORD: rootsecret
+ volumes:
+ - modxdocs_db:/var/lib/mysql
+ healthcheck:
+ test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
+ interval: 5s
+ timeout: 5s
+ retries: 10
+
docs:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:80"
+ depends_on:
+ mysql:
+ condition: service_healthy
environment:
- docker=1
- COMPOSER_ALLOW_SUPERUSER=1
+ - DB_HOST=mysql
+ - DB_PORT=3306
+ - DB_NAME=modxdocs
+ - DB_USER=modxdocs
+ - DB_PASSWORD=secret
volumes:
- .:/var/www/html
+
+volumes:
+ modxdocs_db:
diff --git a/lang.json b/lang.json
index 16ed5fa2..d2a56869 100644
--- a/lang.json
+++ b/lang.json
@@ -13,7 +13,14 @@
"note": "Note:",
"community_forum": "Community Forums",
"slack": "Slack",
- "credit": "Designed, built and written with all the love in the world by the MODX Community."
+ "credit": "Designed, built and written with all the love in the world by the MODX Community.",
+ "not_found_title": "Oops, page not found.",
+ "not_found_heading": "Page not found",
+ "not_found_intro": "Uh oh, you've reached a page that does not exist.",
+ "not_found_body": "It may have gotten lost on the new documentation platform or it was removed because it was no longer relevant. It could also be a really old link from two (or more) documentation systems ago, which is not part of the 2000+ automatic redirects currently in place.",
+ "not_found_suggestions": "Based on your request, this may be what you're looking for:",
+ "not_found_more_results": "More results for \"%s\"",
+ "not_found_use_search": "Please use the search at the top to find what you're looking for."
},
"ru": {
"title": "MODX документация",
@@ -29,7 +36,14 @@
"note": "Заметка:",
"community_forum": "Community Forums",
"slack": "Slack",
- "credit": "Разработано, построено и написано со всей любовью в мире от сообщества MODX."
+ "credit": "Разработано, построено и написано со всей любовью в мире от сообщества MODX.",
+ "not_found_title": "Упс, страница не найдена.",
+ "not_found_heading": "Страница не найдена",
+ "not_found_intro": "К сожалению, вы попали на страницу, которой не существует.",
+ "not_found_body": "Возможно, она потерялась на новой платформе документации или была удалена, так как больше не актуальна. Это также может быть очень старая ссылка из двух (или более) предыдущих систем документации, которая не входит в число 2000+ автоматических перенаправлений.",
+ "not_found_suggestions": "Исходя из вашего запроса, возможно, вы ищете следующее:",
+ "not_found_more_results": "Больше результатов по запросу «%s»",
+ "not_found_use_search": "Воспользуйтесь поиском вверху страницы, чтобы найти нужную информацию."
},
"nl": {
"title": "MODX Documentatie",
@@ -45,7 +59,14 @@
"note": "Opmerking:",
"community_forum": "Community Forums",
"slack": "Slack",
- "credit": "Ontworpen, gebouwd en geschreven met alle liefde in de wereld door de MODX Community."
+ "credit": "Ontworpen, gebouwd en geschreven met alle liefde in de wereld door de MODX Community.",
+ "not_found_title": "Oeps, pagina niet gevonden.",
+ "not_found_heading": "Pagina niet gevonden",
+ "not_found_intro": "Helaas, je hebt een pagina bereikt die niet bestaat.",
+ "not_found_body": "Hij is mogelijk zoekgeraakt op het nieuwe documentatieplatform of verwijderd omdat hij niet langer relevant was. Het kan ook een heel oude link zijn van twee (of meer) documentatiesystemen geleden, die niet tot de 2000+ automatische redirects behoort die momenteel actief zijn.",
+ "not_found_suggestions": "Op basis van je verzoek zou dit kunnen zijn wat je zoekt:",
+ "not_found_more_results": "Meer resultaten voor \"%s\"",
+ "not_found_use_search": "Gebruik de zoekfunctie bovenaan om te vinden wat je zoekt."
},
"es": {
"title": "MODX Documentation",
@@ -61,6 +82,13 @@
"note": "Nota:",
"community_forum": "Community Forums",
"slack": "Slack",
- "credit": "Designed, built and written with all the love in the world by the MODX Community."
+ "credit": "Designed, built and written with all the love in the world by the MODX Community.",
+ "not_found_title": "Vaya, página no encontrada.",
+ "not_found_heading": "Página no encontrada",
+ "not_found_intro": "Oh no, has llegado a una página que no existe.",
+ "not_found_body": "Puede que se haya perdido en la nueva plataforma de documentación o que se haya eliminado porque ya no era relevante. También podría ser un enlace muy antiguo de hace dos (o más) sistemas de documentación, que no forma parte de las más de 2000 redirecciones automáticas actuales.",
+ "not_found_suggestions": "Según tu solicitud, esto podría ser lo que buscas:",
+ "not_found_more_results": "Más resultados para \"%s\"",
+ "not_found_use_search": "Usa la búsqueda de arriba para encontrar lo que buscas."
}
}
diff --git a/phpcs.xml b/phpcs.xml
new file mode 100644
index 00000000..4290af21
--- /dev/null
+++ b/phpcs.xml
@@ -0,0 +1,41 @@
+
+
+ docs.modx.com ruleset
+
+
+
+
+
+
+
+
+ src
+
+
+ */vendor/*
+
+
+
+
+
+
+
+
+
+ public/index.php
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/phpunit.xml b/phpunit.xml
index ec1fd4f3..d5ddbaad 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -1,7 +1,19 @@
-
+
+
tests
+
+
+ src
+
+
diff --git a/public/.well-known/traffic-advice b/public/.well-known/traffic-advice
new file mode 100644
index 00000000..d616d010
--- /dev/null
+++ b/public/.well-known/traffic-advice
@@ -0,0 +1,6 @@
+[
+ {
+ "user_agent": "prefetch-proxy",
+ "fraction": 1.0
+ }
+]
diff --git a/public/ads.txt b/public/ads.txt
new file mode 100644
index 00000000..3cec0626
--- /dev/null
+++ b/public/ads.txt
@@ -0,0 +1 @@
+# This site does not sell advertising inventory.
diff --git a/public/apple-touch-icon-precomposed.png b/public/apple-touch-icon-precomposed.png
new file mode 100644
index 00000000..dd7fca58
Binary files /dev/null and b/public/apple-touch-icon-precomposed.png differ
diff --git a/public/fonts/Inter_24pt-Bold.ttf b/public/fonts/Inter_24pt-Bold.ttf
new file mode 100644
index 00000000..46b3583c
Binary files /dev/null and b/public/fonts/Inter_24pt-Bold.ttf differ
diff --git a/public/fonts/Inter_24pt-Regular.ttf b/public/fonts/Inter_24pt-Regular.ttf
new file mode 100644
index 00000000..6b088a71
Binary files /dev/null and b/public/fonts/Inter_24pt-Regular.ttf differ
diff --git a/public/ht.access b/public/ht.access
index f5d19695..7732f427 100644
--- a/public/ht.access
+++ b/public/ht.access
@@ -1,3 +1,16 @@
+# Chrome Private Prefetch Proxy requires this exact media type.
+
+
+ ForceType application/trafficadvice+json
+
+
+
+
+
+ Header set Cache-Control "public, max-age=86400"
+
+
+
RewriteEngine On
diff --git a/public/images/logo-dark.svg b/public/images/logo-dark.svg
new file mode 100644
index 00000000..2536ce3a
--- /dev/null
+++ b/public/images/logo-dark.svg
@@ -0,0 +1,56 @@
+
+
+
diff --git a/public/images/social/.background.png b/public/images/social/.background.png
new file mode 100644
index 00000000..8fd79683
Binary files /dev/null and b/public/images/social/.background.png differ
diff --git a/public/index.php b/public/index.php
index 342030de..2a64340e 100644
--- a/public/index.php
+++ b/public/index.php
@@ -1,4 +1,5 @@
code{padding:0}code[class*=language-],pre[class*=language-]{border-radius:.5rem;font-size:.775rem !important;line-height:1.5 !important}blockquote{display:block;margin:0 0 .9375rem;padding:.9375rem 1.25rem;background-color:#f9fbfe;border-left:.1875rem solid #5b99ea;color:#4a5568}blockquote a{color:#1c6fdc}blockquote>:last-child{margin-bottom:0}iframe,object,video{max-width:100%}html,body{height:100%;width:100%;background:#fff;scroll-behavior:smooth}.l-app{display:flex;min-height:100vh;flex-direction:column;padding-top:3.75rem;background:#fff}@media print,screen and (min-width: 62.5em){.l-app--has-sidebar{padding-left:20rem}}.l-header{z-index:2;position:fixed;top:0;right:0;left:0;display:flex;align-items:center;justify-content:space-between;height:3.75rem;background:#fff;border-bottom:1px solid #c5d3df;box-shadow:0 1px 4px 0 rgba(0,0,0,.1)}.l-header__logo{flex:auto 0 0;position:relative}@media screen and (min-width: 76.25em){.l-header__logo{flex:20rem 0 0;flex:calc(20rem - 1.875rem) 0 0}}.l-header__search{flex-basis:50%;flex-grow:0;flex-shrink:1;position:relative}@media screen and (min-width: 76.25em){.l-header__search{margin:0 3.125rem 0 4.6875rem}}@media screen and (max-width: 43.74875em){.l-header__search{position:fixed;width:100%;margin:0 !important;top:3.75rem;background:#fff;height:calc(100vh - 2.25rem);padding:0 1rem 1rem 1rem;transform:translateY(100%);transition:transform .4s ease-in-out}}.l-header__versionswitch{margin:0 .9375rem}@media screen and (max-width: 43.74875em){#searchform:target{transform:translateY(0)}}.l-sidebar{outline:none;display:block;position:fixed;top:3.75rem;bottom:0;left:0;width:100%;transform:translateX(-100%);z-index:1;padding:1.875rem 1.25rem .9375rem;background:#f5f7f9;border-right:1px solid #e6ecf1;overflow-y:scroll;-webkit-overflow-scrolling:touch;overflow-x:auto;transition:transform .4s ease-in-out}@media print,screen and (min-width: 62.5em){.l-sidebar{display:block;position:fixed;top:3.75rem;bottom:0;left:0;width:20rem;transform:translateX(0);transition:none}}#nav:target{transform:translateX(0)}.l-main{position:relative;margin:1.875rem 1.25rem .9375rem;flex:1}@media print,screen and (min-width: 43.75em){.l-main{margin:1.875rem 3.125rem .9375rem 4.6875rem}}.l-main__title{max-width:62.5rem}@media screen and (min-width: 76.25em){.l-main__contentwrapper{display:flex;justify-content:flex-start;flex-direction:row}}@media print,screen and (min-width: 43.75em){.l-main__content{padding-right:1.5625rem}}@media screen and (min-width: 76.25em){.l-main__content{flex-basis:80%;flex-grow:0;flex-shrink:1;order:1;min-width:0}}.l-main__content>:first-child{margin-top:0}@media screen and (min-width: 76.25em){.l-main__toc{flex-basis:20%;flex-grow:1;flex-shrink:0;align-self:flex-start;order:2;padding:0 0 0 1.5625rem;top:4.6875rem;position:sticky}}.l-footer{flex-basis:100%;flex-shrink:0;order:3;padding:1.875rem .9375rem .9375rem;margin:2.8125rem 0 0;border-top:1px solid #e6ecf1}@media print,screen and (min-width: 43.75em){.l-footer{padding:1.875rem 4.6875rem .9375rem}}@media(max-width: 768px){.o-openmenu{order:4;padding:0 .9375rem 0 .9375rem !important}.o-search,.l-header__search{order:3;margin:0 .475rem 0 auto}.l-header__versionswitch{order:2}.l-header__logo{order:1;max-width:25%}}@media(max-width: 425px){.l-footer{font-size:14px;line-height:1;padding:.9375rem .9375rem}.l-footer .c-footer__nav{display:flex;justify-content:center}.l-footer .c-footer__navlink{padding:.425rem}.l-footer .c-footer__copyright{font-size:14px;line-height:1;padding:.3rem .9375rem 0;text-align:center}}.o-logo{margin:0 .9375rem;padding:0}.o-logo__image{display:block;width:10.625rem;max-width:100%;height:3.75rem;fill:#4a5568}@media print,screen and (min-width: 43.75em){.o-logo__image{width:12.5rem}}.o-docmeta{margin:-0.9375rem 0 1.875rem}.o-sidebar-heading{display:block;margin:0 0 .9375rem;font-size:1.25rem;font-weight:700}.o-openmenu,.o-search{display:block;margin:0;padding:0 .9375rem 0 1.875rem}.o-openmenu__icon,.o-search__icon{display:block;width:1.8125rem;height:3.75rem;fill:#4a5568}@media print,screen and (min-width: 62.5em){.o-openmenu{display:none}}@media print,screen and (min-width: 43.75em){.o-search{display:none}}@media screen and (max-width: 43.74875em){.o-logo{margin:0 .4375rem}.o-search{padding:0 .4375rem}}.o-closemenu{z-index:1;position:absolute;top:.625rem;right:.625rem;display:block;padding:.9375rem .9375rem}@media print,screen and (min-width: 62.5em){.o-closemenu{display:none}}.o-closemenu__icon{display:block;width:1.875rem;height:1.875rem;fill:#3b68af}.c-breadcrumb{margin:0 0 .9375rem}.c-breadcrumb__list{display:flex;flex-direction:row;flex-wrap:wrap;margin:0 -0.3125rem;padding:0;list-style:none}.c-breadcrumb__item{display:block;flex:auto 0 0}.c-breadcrumb__link{display:inline-block;padding:.25rem .3125rem;line-height:1.4;font-size:.875rem;color:#4a5568}.c-breadcrumb__item+.c-breadcrumb__item:before{content:"";display:inline-block;width:.625rem;height:.6875rem;margin-left:.3125rem;margin-right:-0.0625rem;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 62'%3E%3Cpath fill='%234a5568' fill-rule='nonzero' d='M7.5938.39064L.6562 7.60939l24.25 23.40623-24.25 23.375 6.9376 7.2187 28-26.9999 3.75-3.5938-3.75-3.62498z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:100% 100%;background-position:center center;opacity:.25}.c-callout{color:#4a5568;display:block;margin:0 0 .9375rem;padding:.9375rem 1.25rem;background-color:#f9fbfe;border-left:.1875rem solid #5b99ea}.c-callout a{color:#1c6fdc}.c-callout__title{display:block;margin:0 0 .3125rem;text-transform:uppercase;letter-spacing:1.1}.c-callout a:hover{color:#5a99ea}.c-callout--info{background-color:#f9fbfe;border-color:#5b99ea}.c-callout--info a{color:#1c6fdc}.c-callout--warning{background-color:#fdf6e5;border-color:#eebf41}.c-callout--warning a{color:#d09c13}.c-callout--alert{background-color:#f5f5f5;border-color:#d26d69}.c-callout--alert a{color:#d26d69}.c-callout--success{background-color:#e7f4eb;border-color:#5cb377}.c-callout--success a{color:#3e8554}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,"Andale Mono","Ubuntu Mono",monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:bold}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.command-line-prompt{border-right:1px solid #999;display:block;float:left;font-size:100%;letter-spacing:-1px;margin-right:1em;pointer-events:none;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none}.command-line-prompt>span:before{opacity:.7;content:" ";display:block;padding-right:.8em}.command-line-prompt>span[data-user]:before{content:"[" attr(data-user) "@" attr(data-host) "] $"}.command-line-prompt>span[data-user=root]:before{content:"[" attr(data-user) "@" attr(data-host) "] #"}.command-line-prompt>span[data-prompt]:before{content:attr(data-prompt)}.command-line-prompt>span[data-continuation-prompt]:before{content:attr(data-continuation-prompt)}.command-line span.token.output{opacity:.7}pre[data-line]{position:relative;padding:1em 0 1em 3em}.line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:hsla(24, 20%, 50%, 0.08);background:linear-gradient(to right, hsla(24, 20%, 50%, 0.1) 70%, hsla(24, 20%, 50%, 0));pointer-events:none;line-height:inherit;white-space:pre}@media print{.line-highlight{-webkit-print-color-adjust:exact;color-adjust:exact}}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:hsla(24, 20%, 50%, 0.4);color:hsl(24, 20%, 95%);font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:before,.line-numbers .line-highlight:after{content:none}pre[id].linkable-line-numbers span.line-numbers-rows{pointer-events:all}pre[id].linkable-line-numbers span.line-numbers-rows>span:before{cursor:pointer}pre[id].linkable-line-numbers span.line-numbers-rows>span:hover:before{background-color:rgba(128, 128, 128, 0.2)}pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;z-index:10;top:.3em;right:.2em;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar:focus-within>.toolbar{opacity:1}div.code-toolbar>.toolbar>.toolbar-item{display:inline-block}div.code-toolbar>.toolbar>.toolbar-item>a{cursor:pointer}div.code-toolbar>.toolbar>.toolbar-item>button{background:none;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span{color:#bbb;font-size:.8em;padding:0 .5em;background:#f5f2f0;background:rgba(224, 224, 224, 0.2);box-shadow:0 2px 0 0 rgba(0, 0, 0, 0.2);border-radius:.5em}div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar>.toolbar-item>span:hover,div.code-toolbar>.toolbar>.toolbar-item>span:focus{color:inherit;text-decoration:none}.token.operator{background:none}.c-history{display:flex;align-items:center;margin:-0.9375rem 0 1.875rem}.c-contributors{display:flex}.c-contributor{width:30px;height:30px;margin-left:-10px;border:2px solid #fff;border-radius:15px}.c-contributor:first-child{margin-left:0}.c-last-edit{max-width:100%;margin-bottom:0;padding-left:.5em;font-size:.9em;font-weight:500;color:#555;flex:1}.c-footer__grid{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start}.c-footer__cell{width:100%}@media print,screen and (min-width: 62.5em){.c-footer__cell{width:auto}}.c-footer__copyright{color:#4a5568}.c-footer__nav{margin:0 -0.625rem;padding:0;list-style:none}.c-footer__navitem{display:inline-block}.c-footer__navlink{display:block;font-weight:700;padding:.625rem;color:#4a5568}.c-footer__navlink:hover{color:#3b68af}.heading-link{display:inline-block;margin-left:.67em;transition:opacity .25s ease-in-out;opacity:0;font-size:.8em;bottom:.2em}h1:hover .heading-link,h2:hover .heading-link,h3:hover .heading-link,h4:hover .heading-link,h5:hover .heading-link,h6:hover .heading-link{opacity:1}@media screen and (min-width: 43.75em){h1,h2,h3,h4,h5,h6{position:relative;margin-left:-3rem;padding-left:3rem}h1:target .heading-link,h2:target .heading-link,h3:target .heading-link,h4:target .heading-link,h5:target .heading-link,h6:target .heading-link{opacity:1}.heading-link{left:0;position:absolute}}.c-nav{margin:0 0 0 -1.25rem;padding:0;list-style:none}.c-nav__item{margin:0;padding:0;list-style:none;font-size:.9375rem;line-height:1.4}.c-nav__item a{position:relative;display:block;margin-bottom:.625rem;padding:0 0 0 1.25rem;text-decoration:none;font-weight:500;color:#475365;transition:all .2s ease}.c-nav__item a:hover{color:#5a99ea;transform:translateX(2px)}.c-nav__item--activepage .c-nav__chevron{top:.35rem}.c-nav__item--activepage>a{position:relative;color:#247978;padding:.35rem 0 .35rem 3.5rem;transition:all .2s ease}.c-nav__item--activepage>a:after,.c-nav__item--activepage>a:before{border:0 solid #e2e8f0}.c-nav__item--activepage>a:hover{transform:translateX(0)}.c-nav__item--activepage>a .inset{top:0;right:0;bottom:0;left:0;position:absolute;border-radius:.25rem;opacity:.25;background-color:#b2f5ea}.c-nav__item--level1>a{font-size:1rem;font-weight:700;padding-left:1.875rem}.c-nav__item--level2>a{padding-left:3.125rem}.c-nav__item--level3>a{padding-left:3.75rem}.c-nav__item--level4>a{padding-left:5rem}.c-nav__item--level5>a{padding-left:6.25rem}.c-nav__item--level6>a{padding-left:7.5rem}.c-nav__item--level7>a{padding-left:8.75rem}.c-nav__item--collapsed>ul{display:none}.c-nav__item--collapsed>a>.c-nav__chevron{top:.0625rem;transform:rotate(90deg)}.c-nav__chevron{display:inline-block;position:absolute;top:0;height:1.3125rem;width:1.3125rem;padding:.3125rem;margin:0 0 0 -1.4375rem;fill:rgba(74,85,104,.6);transform:rotate(-90deg);vertical-align:middle}.c-nav__sublist{margin:0 0 1.875rem;padding:0}::-webkit-scrollbar,::-webkit-scrollbar-thumb{width:1rem;height:1rem;border:.25rem solid rgba(0,0,0,0);border-radius:.5rem;background-color:rgba(0,0,0,0)}::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(85,108,136,.1)}::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 1rem rgba(85,108,136,.2)}::-webkit-resizer,::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.l-main__oc,.c-oc__more{display:none}@media screen and (min-width: 76.25em){.l-main__oc,.c-oc__more{display:block}}.l-main__oc--below,.c-oc__more--below{display:block}@media screen and (min-width: 76.25em){.l-main__oc--below,.c-oc__more--below{display:none}}.l-main__oc{margin-top:5em;background:#f5f7f9;color:#303942;padding:1em;border-radius:1em;border:1px solid rgba(0,0,0,0);transition:background-color .5s ease-in-out;text-decoration:none !important;max-width:25rem}@media screen and (min-width: 76.25em){.l-main__oc{margin-left:-1.5625rem}}.l-main__oc .c-oc__member_image{transition:border .5s ease-in-out}.l-main__oc:hover{color:#303942;background:#e3efff}.l-main__oc:hover .c-oc__member_image{border-color:#e3efff}.c-oc__logo{max-width:100%;max-height:60px}.c-oc__text{font-size:.8125rem;font-weight:500}.c-oc__subtitle{font-size:.8125rem;font-weight:700;text-transform:uppercase}.c-oc__members{padding-left:0;list-style:none;margin-bottom:25px;padding-right:25px;margin-left:-28px;margin-right:-35px;text-align:center}.c-oc__member{display:inline-block;margin-right:-20px;margin-bottom:-15px}.c-oc__member_image{width:60px;height:60px;border-radius:50%;border:5px solid #f5f7f9;background:#00b5de}.c-oc__total span{height:60px;background:#00b5de;border-radius:30px;border:5px solid #f5f7f9;color:#fff;padding:.7em 1em;font-weight:600;display:block}.c-oc__more{text-align:center;font-size:.8125rem;font-weight:500;text-decoration:underline;margin-top:1em;margin-left:-1em;max-width:25rem}.c-optionswitch__current{display:block;padding:.4375rem .625rem;color:#4a5568;white-space:nowrap;background:#fff;transition:background-color .2s ease-in-out;border-radius:.1875rem}.c-optionswitch__current:hover{color:#4a5568;background:#fff}.c-optionswitch__currentchevron{display:inline-block;width:.625rem;height:.625rem;fill:#4a5568;vertical-align:middle;margin:-0.0625rem 0 0 .1875rem;transform:rotate(90deg)}.c-optionswitch__listwrapper{position:absolute;top:3.6875rem;display:none;background:#edf2f7;box-shadow:0 .1875rem .5rem 0 rgba(116,129,141,.1)}@media screen and (min-width: 81.25em){.c-optionswitch__listwrapper{right:0}}@media screen and (max-width: 90em){.c-optionswitch__listwrapper{right:0}}@media screen and (max-width: 48em){.c-optionswitch__listwrapper{right:0}}.c-optionswitch__listwrapper:target{display:block}@media screen and (min-width: 43.75em){.c-optionswitch__listwrapper:target{display:flex}}.c-optionswitch__listwrapper:target:before{content:none}.c-optionswitch__list{margin:0;padding:0;list-style:none}.c-optionswitch__item{position:relative;display:block}.c-optionswitch__link{display:block;padding:.25rem .625rem;color:#4a5568;transition-duration:.2s;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-property:background-color,border-color,color}.c-optionswitch__link:hover{color:#4a5568;background:#fff}.c-optionswitch__item--active .c-optionswitch__link{background:#fff}.c-optionswitch__translation{color:#2a303b}.c-optionswitch__translation:before{content:"("}.c-optionswitch__translation:after{content:")"}.c-optionswitch__note{padding:0 .625rem .625rem;color:#2a303b}.l-main-search__container{list-style:none;padding:0;margin-bottom:2rem}.l-main-search__result,.l-live-search__result{border-top:1px solid #fff;padding-top:1rem;margin-top:1rem}.l-main-search__result .c-breadcrumb,.l-live-search__result .c-breadcrumb{margin-bottom:0}.l-main-search__result h4,.l-live-search__result h4{margin-top:0;margin-bottom:0}@media screen and (max-width: 43.74875em){.l-main-search__result:first-child,.l-live-search__result:first-child{border-top:none}}.l-main-search__match summary,.l-live-search__match summary{float:right;color:#777}.l-search__pagination-holder{list-style:none;padding:0;text-align:center}.l-search-page{display:inline-block}.l-search-page__link{display:block;cursor:pointer;padding:.5rem 1rem;line-height:initial;background:#e2e8f0;color:#1a202c;border-radius:.25rem;border:1px solid #e2e8f0}.l-search-page__link:hover,.l-search-page__link:focus{background:#475365;border:1px solid #475365;color:#ededed}.l-search-page__link--active{background:#314a97;border:1px solid #314a97;color:#ededed}.c-searchform--resultspage{margin-bottom:1rem}.c-searchform--resultspage .c-searchform__input{border:1px solid #fff}.l-search__meta{color:#4a5568}.l-search__ignored{border-left:.5rem solid #eebf41;padding:.9375rem 1.25rem;background-color:rgba(238,191,65,.3);color:#2c2104}.l-search__tip{border-left:.5rem solid #3b68af;padding:.9375rem 1.25rem;background-color:rgba(59,104,175,.3);color:#000}.l-search__no_results{border-left:.25rem solid #d26d69;padding:.9375rem 1.25rem;background-color:rgba(210,109,105,.3);color:#2e0f0e;max-width:100%}.l-search__no_results--live{margin:0}.c-searchform--header{z-index:5}.l-live-search__container{position:absolute;background:#fff;width:100%;display:none;border-radius:0 0 5px 5px;margin-top:-3px;z-index:4;box-shadow:0 2px 7px 2px rgba(0,0,0,.5)}.l-live-search__container--visible{display:block}.l-live-search__container--loading::before{content:"Loading...";width:100%;display:block;padding:.5em .5em .5em 1em;border-radius:5px 5px 0 0;color:#4a5568;background:#fff}.l-live-search__container--loading:empty::before{border-radius:5px}@media screen and (max-width: 43.74875em){.l-live-search__container{position:initial;margin-top:1em;border-radius:7px;box-shadow:none;border:1px solid #3b68af}}.l-live-search__results{list-style:none;padding:0;margin:0;max-height:70vh;overflow-y:scroll}@media screen and (max-width: 43.74875em){.l-live-search__results{max-height:calc(100vh - 15rem)}}.l-live-search__result,.l-main-search__result{padding:0;margin:0;position:relative}.c-live-search__result-crumbs,.l-main-search__crumbs{position:absolute;top:.7rem;white-space:nowrap;text-overflow:ellipsis;padding:0 1rem;height:1.6em;overflow:hidden;font-weight:500}.c-live-search__result-link,.l-main-search__link{color:#314a97;display:block;padding:2.2rem 1rem .7rem;font-weight:500}.c-live-search__result-link:hover,.c-live-search__result-link:focus,.l-live-search__result--selected .c-live-search__result-link,.l-main-search__link:hover,.l-main-search__link:focus,.l-live-search__result--selected .l-main-search__link{background:#f0f6ff}.l-live-search__search{margin:0}.l-live-search__search a{font-weight:500;display:block;padding:.7rem 1rem;width:100%;color:#4a5568;background:#fff;border-radius:0 0 5px 5px}.l-main-search__result{max-width:80ch}.l-main-search__title{color:#314a97}.l-main-search__link{text-decoration:none !important}.l-main-search__link:hover .l-main-search__title,.l-main-search__link:focus .l-main-search__title{color:#5a99ea}.l-main-search__snippet{color:#4a5568}.size_code{font-size:1em}.c-searchform{position:relative;width:100%}@media screen and (max-width: 43.74875em){.c-searchform{margin-top:1rem}}.c-searchform__input{display:block;width:100%;border:none;border-radius:.5rem;padding:.625rem 2.1875rem .625rem 1.25rem;line-height:1.5 !important;font-family:inherit;font-size:100%;transition:all .1s ease-in;background-color:#edf2f7}.c-searchform__input:focus{border-color:#e2e8f0;background-color:#fff}@media screen and (max-width: 43.74875em){.c-searchform__input{border:1px solid #fff}}.c-searchform__button{position:absolute;top:0;right:.625rem;bottom:0;margin:0;padding:0;background:rgba(0,0,0,0);border:none}.c-searchform__icon{width:1.5rem;height:1.25rem;fill:#717171;vertical-align:middle}#searchform:target:before{content:"";height:0;margin:0}table{display:block;width:-moz-fit-content;width:fit-content;max-width:100%;max-width:calc(100% + 1.25rem);margin:1.875rem 0;border-collapse:collapse;overflow-x:auto}@media print,screen and (min-width: 43.75em){table{display:table;table-layout:fixed;width:100%;max-width:100%}table td{word-wrap:break-word}}table tr:nth-child(2n){background:#f5f7f9}table td,table th{border:1px solid #c5d3df;padding:.5625rem 1rem}table th{font-weight:700;text-align:center}table td{min-width:10.625rem}@media print,screen and (min-width: 43.75em){table td{min-width:0}}table::-webkit-scrollbar,table::-webkit-scrollbar-thumb{width:1rem;height:1rem;border:.25rem solid rgba(0,0,0,0);border-radius:.5rem;background-color:rgba(0,0,0,0)}table::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(85,108,136,.1)}table::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 1rem rgba(85,108,136,.2)}table::-webkit-resizer,table::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.c-toc{position:relative;margin:0 0 1.875rem}.c-toc__title{display:block;margin:0 0 .3125rem;font-size:.75rem;font-weight:700;color:#a0aec0;text-transform:uppercase}.c-toc ul{margin:0;padding:0;list-style:none}.c-toc__wrapper>ul>li{margin:0 0 .4375rem}.c-toc__wrapper>ul>li:last-child{margin-bottom:0}.c-toc__wrapper>ul>li>a{font-weight:700}.c-toc a{display:block;margin:0 0 .1875rem;font-size:.8125rem;font-weight:500;color:#475365;line-height:1.4;transition:all .2s ease}.c-toc a:hover{color:#1a202c;transform:translateX(2px)}.c-toc li li{padding-left:.9375rem}.u-show-for-sr,html.js .u-hide-with-js-sr,.u-show-on-focus{position:absolute !important;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}:target:before{content:"";display:block;height:5.625rem;margin:-5.625rem 0 0}.is-brokenlink{color:#d26d69;text-decoration:line-through}.is-brokenlink:after{content:" (link broken)";text-decoration:none}.is-externallink:after{content:"";display:inline-block;width:.625rem;height:.625rem;margin:-0.0625rem .125rem 0 .25rem;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 76 76'%3E%3Cg fill='%234a5568' fill-rule='nonzero'%3E%3Cpath d='M27.37215 46.13316994L72.34371002 1.16160993l2.61627 2.61627L29.98842 48.74943995z'/%3E%3Cpath d='M75.6 28.7h-3.8V4.4H47.4V.6h28.2zM68.1 75.6H.6V8.1h33.7v3.8h-30v60h60v-30h3.8z'/%3E%3C/g%3E%3C/svg%3E");background-size:100% 100%;background-repeat:no-repeat;background-position:center center}.u-no-margin{margin:0 !important}.u-no-margin--top{margin-top:0 !important}.u-no-margin--bottom{margin-bottom:0 !important}.u-no-padding{padding:0 !important}.u-no-padding--top{padding-top:0 !important}.u-no-padding--bottom{padding-bottom:0 !important}html.no-js .u-show-with-js{display:none !important}html.js .u-hide-with-js{display:none !important}@media print{.l-app>*{display:none}.l-app .l-main{display:block}}
+/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */*,::before,::after{box-sizing:border-box}html{-moz-tab-size:4;-o-tab-size:4;tab-size:4}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}body{font-family:system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}:root,[data-theme=light]{color-scheme:light;--color-cadetBlue: #a0aec0;--color-primary: #3b68af;--color-sapphire: #314a97;--color-perano: #b2c9f5;--color-light: #ededed;--color-gray: #4a5568;--color-slateGray: #475365;--color-mirage: #1a202c;--color-alert: #d26d69;--color-success: #2d8b01;--color-warning: #EEBF41;--color-dark: #252930;--color-callout-info-border: #5b99ea;--color-callout-alert-border: #d26d69;--color-callout-success-border: #5cb377;--color-callout-warning-border: #EEBF41;--color-callout-info-bg: #f9fbfe;--color-callout-alert-bg: #f5f5f5;--color-callout-success-bg: #e7f4eb;--color-callout-warning-bg: #fdf6e5;--color-callout-warning-link: #d09c13;--color-callout-alert-link: #d26d69;--color-callout-success-link: #3e8554;--color-header-bg: #fff;--color-header-text: #4a5568;--color-header-hover-bg: #f7fafc;--color-header-active-bg: #edf2f7;--color-header-text-muted: #718096;--color-sidebar-bg: #F5F7F9;--color-sidebar-text: #303942;--color-nav-active: #247978;--color-nav-active-bg: #b2f5ea;--color-nav-active-border: #e2e8f0;--color-body-bg: #fff;--color-body-text: #4a5568;--color-body-text-muted: #718096;--color-border: #E6ECF1;--color-border-strong: #d3dce4;--color-link-broken: #d26d69;--color-link-color: #1c6fdc;--color-link-hover: #1557b0;--color-inline-code: #ebf1ff;--color-inline-code-text: #314a97;--color-optionswitch-bg: #edf2f7;--color-search-input-bg: #edf2f7;--color-search-input-focus-bg: #fff;--color-search-icon: #717171;--color-search-result-hover: #f0f6ff;--color-live-search-bg: #fff;--color-live-search-border: #3b68af;--color-pagination-bg: #e2e8f0;--color-video-embed-bg: #f5f5f5;--color-code-block-bg: #2d2d2d;--color-code-block-text: #ccc;--color-theme-color: #102c53;--color-scrollbar: rgba(85, 108, 136, 0.1);--color-scrollbar-hover: rgba(85, 108, 136, 0.2)}[data-theme=dark]{color-scheme:dark;--color-cadetBlue: #718096;--color-primary: #68a2ff;--color-sapphire: #a5b4fc;--color-perano: #4c6cb3;--color-light: #2d3748;--color-gray: #a0aec0;--color-slateGray: #cbd5e1;--color-mirage: #f1f5f9;--color-alert: #fc8181;--color-success: #68d391;--color-warning: #f6e05e;--color-dark: #f1f5f9;--color-callout-info-border: #63b3ed;--color-callout-alert-border: #fc8181;--color-callout-success-border: #68d391;--color-callout-warning-border: #f6e05e;--color-callout-info-bg: #1a2332;--color-callout-alert-bg: #2d1f1f;--color-callout-success-bg: #1a2e22;--color-callout-warning-bg: #2d2a1a;--color-callout-warning-link: #f6e05e;--color-callout-alert-link: #fc8181;--color-callout-success-link: #68d391;--color-header-bg: #0f172a;--color-header-text: #e2e8f0;--color-header-hover-bg: #1e293b;--color-header-active-bg: #243447;--color-header-text-muted: #94a3b8;--color-sidebar-bg: #141b24;--color-sidebar-text: #e2e8f0;--color-nav-active: #5eead4;--color-nav-active-bg: #134e4a;--color-nav-active-border: #2d3748;--color-body-bg: #0b1120;--color-body-text: #cbd5e1;--color-body-text-muted: #94a3b8;--color-border: #2d3748;--color-border-strong: #3d4a5c;--color-link-broken: #fc8181;--color-link-color: #68a2ff;--color-link-hover: #93c5fd;--color-inline-code: #1e293b;--color-inline-code-text: #a5b4fc;--color-optionswitch-bg: #1e293b;--color-search-input-bg: #1e293b;--color-search-input-focus-bg: #0f172a;--color-search-icon: #94a3b8;--color-search-result-hover: #1e293b;--color-live-search-bg: #0f172a;--color-live-search-border: #68a2ff;--color-pagination-bg: #1e293b;--color-video-embed-bg: #1e293b;--color-code-block-bg: #1a1a1a;--color-code-block-text: #ccc;--color-theme-color: #0f172a;--color-scrollbar: rgba(148, 163, 184, 0.15);--color-scrollbar-hover: rgba(148, 163, 184, 0.3)}body{background:var(--color-body-bg);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-weight:400;line-height:1.6;color:var(--color-body-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{color:var(--color-dark);line-height:1.3;margin-bottom:2rem}h1{margin-top:1.875rem}h1{font-size:1.875rem}@media screen and (min-width: 32.5625rem){h1{font-size:calc(1.875rem + 1.25*(100vw - 32.5625rem)/73.6875)}}@media screen and (min-width: 106.25rem){h1{font-size:3.125rem}}h2{font-size:1.375rem}@media screen and (min-width: 32.5625rem){h2{font-size:calc(1.375rem + 0.8125*(100vw - 32.5625rem)/73.6875)}}@media screen and (min-width: 106.25rem){h2{font-size:2.1875rem}}h3{font-size:1.25rem}@media screen and (min-width: 32.5625rem){h3{font-size:calc(1.25rem + 0.6875*(100vw - 32.5625rem)/73.6875)}}@media screen and (min-width: 106.25rem){h3{font-size:1.9375rem}}h4{font-size:1.125rem}@media screen and (min-width: 32.5625rem){h4{font-size:calc(1.125rem + 0.5625*(100vw - 32.5625rem)/73.6875)}}@media screen and (min-width: 106.25rem){h4{font-size:1.6875rem}}h5{font-size:1rem}@media screen and (min-width: 32.5625rem){h5{font-size:calc(1rem + 0.5625*(100vw - 32.5625rem)/73.6875)}}@media screen and (min-width: 106.25rem){h5{font-size:1.5625rem}}h6{font-size:1rem}@media screen and (min-width: 32.5625rem){h6{font-size:calc(1rem + 0.4375*(100vw - 32.5625rem)/73.6875)}}@media screen and (min-width: 106.25rem){h6{font-size:1.4375rem}}a{text-decoration:none;color:var(--color-link-color);transition:color .2s ease-in-out}a:hover{color:var(--color-link-hover)}.l-main__content a,.c-callout a{text-decoration:underline}img{display:inline-block;vertical-align:middle;max-width:100%;height:auto;-ms-interpolation-mode:bicubic}p{margin:0 0 .9375rem;line-height:1.6;max-width:80ch}li{max-width:80ch}code,kbd,samp{background-color:var(--color-inline-code);padding:.1rem .25rem;font-size:.775rem;border-radius:.125rem;padding-left:.25rem;padding-right:.25rem;color:var(--color-inline-code-text);font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace !important}pre{background-color:var(--color-code-block-bg);color:var(--color-code-block-text);padding:.1rem .25rem;font-size:.775rem;border-radius:.5rem;padding-left:.25rem;padding-right:.25rem;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace !important}pre>code{padding:0;background:rgba(0,0,0,0);color:inherit}code[class*=language-],pre[class*=language-]{border-radius:.5rem;font-size:.775rem !important;line-height:1.5 !important}blockquote{display:block;margin:0 0 .9375rem;padding:.9375rem 1.25rem;background-color:var(--color-callout-info-bg);border-left:.1875rem solid var(--color-callout-info-border);color:var(--color-gray)}blockquote a{color:var(--color-link-color)}blockquote>:last-child{margin-bottom:0}iframe,object,video{max-width:100%}.video-embed{position:relative;width:100%;padding-bottom:56.25%;margin:2rem 0;background:var(--color-video-embed-bg);border-radius:4px;overflow:hidden}.video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.video-embed--local{padding-bottom:0}.video-embed--local video{display:block;width:100%;height:auto;vertical-align:top}html,body{height:100%;width:100%;background:var(--color-body-bg);scroll-behavior:smooth}.l-app{display:flex;min-height:100vh;flex-direction:column;padding-top:3.75rem;background:var(--color-body-bg)}@media print,screen and (min-width: 62.5em){.l-app--has-sidebar{padding-left:20rem}}.l-header{z-index:2;position:fixed;top:0;right:0;left:0;display:flex;align-items:center;justify-content:space-between;height:3.75rem;background:var(--color-header-bg);border-bottom:1px solid var(--color-border-strong);box-shadow:0 1px 4px 0 rgba(0,0,0,.1)}.l-header__logo{flex:auto 0 0;position:relative}@media screen and (min-width: 76.25em){.l-header__logo{flex:20rem 0 0;flex:calc(20rem - 1.875rem) 0 0}}.l-header__search{flex-basis:50%;flex-grow:0;flex-shrink:1;position:relative}@media screen and (min-width: 76.25em){.l-header__search{margin:0 3.125rem 0 4.6875rem}}@media screen and (max-width: 43.74875em){.l-header__search{position:fixed;width:100%;margin:0 !important;top:3.75rem;background:var(--color-body-bg);height:calc(100vh - 2.25rem);padding:0 1rem 1rem 1rem;transform:translateY(100%);transition:transform .4s ease-in-out}}.l-header__versionswitch{display:flex;align-items:center;gap:.25rem;margin:0 .9375rem}@media screen and (max-width: 43.74875em){#searchform:target{transform:translateY(0)}}.l-sidebar{outline:none;display:block;position:fixed;top:3.75rem;bottom:0;left:0;width:100%;transform:translateX(-100%);z-index:1;padding:1.875rem 1.25rem .9375rem;background:var(--color-sidebar-bg);border-right:1px solid var(--color-border);overflow-y:scroll;-webkit-overflow-scrolling:touch;overflow-x:auto;transition:transform .4s ease-in-out}@media print,screen and (min-width: 62.5em){.l-sidebar{display:block;position:fixed;top:3.75rem;bottom:0;left:0;width:20rem;transform:translateX(0);transition:none}}#nav:target{transform:translateX(0)}.l-main{position:relative;margin:1.875rem 1.25rem .9375rem;flex:1}@media print,screen and (min-width: 43.75em){.l-main{margin:1.875rem 3.125rem .9375rem 4.6875rem}}.l-main__title{max-width:62.5rem}@media screen and (min-width: 76.25em){.l-main__contentwrapper{display:flex;justify-content:flex-start;flex-direction:row}}@media print,screen and (min-width: 43.75em){.l-main__content{padding-right:1.5625rem}}@media screen and (min-width: 76.25em){.l-main__content{flex-basis:80%;flex-grow:0;flex-shrink:1;order:1;min-width:0}}.l-main__content>:first-child{margin-top:0}@media screen and (min-width: 76.25em){.l-main__toc{flex-basis:20%;flex-grow:1;flex-shrink:0;align-self:flex-start;order:2;padding:0 0 0 1.5625rem;top:4.6875rem;position:sticky}}.l-footer{flex-basis:100%;flex-shrink:0;order:3;padding:1.875rem .9375rem .9375rem;margin:2.8125rem 0 0;border-top:1px solid var(--color-border)}@media print,screen and (min-width: 43.75em){.l-footer{padding:1.875rem 4.6875rem .9375rem}}@media(max-width: 768px){.o-openmenu{order:4;padding:0 .9375rem 0 .9375rem !important}.o-search,.l-header__search{order:3;margin:0 .475rem 0 auto}.l-header__versionswitch{order:2}.l-header__logo{order:1;max-width:25%}}@media(max-width: 425px){.l-footer{font-size:14px;line-height:1;padding:.9375rem .9375rem}.l-footer .c-footer__nav{display:flex;justify-content:center}.l-footer .c-footer__navlink{padding:.425rem}.l-footer .c-footer__copyright{font-size:14px;line-height:1;padding:.3rem .9375rem 0;text-align:center}}.o-logo{margin:0 .9375rem;padding:0}.o-logo__image{display:block;width:10.625rem;max-width:100%;height:3.75rem;fill:var(--color-header-text)}@media print,screen and (min-width: 43.75em){.o-logo__image{width:12.5rem}}.o-logo__image--dark{display:none}[data-theme=dark] .o-logo__image--light{display:none}[data-theme=dark] .o-logo__image--dark{display:block}.o-docmeta{margin:-0.9375rem 0 1.875rem}.o-sidebar-heading{display:block;margin:0 0 .9375rem;font-size:1.25rem;font-weight:700}.o-openmenu,.o-search{display:block;margin:0;padding:0 .9375rem 0 1.875rem}.o-openmenu__icon,.o-search__icon{display:block;width:1.8125rem;height:3.75rem;fill:var(--color-header-text)}@media print,screen and (min-width: 62.5em){.o-openmenu{display:none}}@media print,screen and (min-width: 43.75em){.o-search{display:none}}@media screen and (max-width: 43.74875em){.o-logo{margin:0 .4375rem}.o-search{padding:0 .4375rem}}.o-closemenu{z-index:1;position:absolute;top:.625rem;right:.625rem;display:block;padding:.9375rem .9375rem}@media print,screen and (min-width: 62.5em){.o-closemenu{display:none}}.o-closemenu__icon{display:block;width:1.875rem;height:1.875rem;fill:var(--color-primary)}.c-breadcrumb{margin:0 0 .9375rem}.c-breadcrumb__list{display:flex;flex-direction:row;flex-wrap:wrap;margin:0 -0.3125rem;padding:0;list-style:none}.c-breadcrumb__item{display:block;flex:auto 0 0}.c-breadcrumb__link{display:inline-block;padding:.25rem .3125rem;line-height:1.4;font-size:.875rem;color:var(--color-gray)}.c-breadcrumb__item+.c-breadcrumb__item:before{content:"";display:inline-block;width:.625rem;height:.6875rem;margin-left:.3125rem;margin-right:-0.0625rem;background-color:var(--color-body-text);opacity:.25;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 62'%3E%3Cpath fill='%23000' fill-rule='nonzero' d='M7.5938.39064L.6562 7.60939l24.25 23.40623-24.25 23.375 6.9376 7.2187 28-26.9999 3.75-3.5938-3.75-3.62498z'/%3E%3C/svg%3E") center/100% 100% no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 62'%3E%3Cpath fill='%23000' fill-rule='nonzero' d='M7.5938.39064L.6562 7.60939l24.25 23.40623-24.25 23.375 6.9376 7.2187 28-26.9999 3.75-3.5938-3.75-3.62498z'/%3E%3C/svg%3E") center/100% 100% no-repeat}.c-callout{color:var(--color-gray);display:block;margin:0 0 .9375rem;padding:.9375rem 1.25rem;background-color:var(--color-callout-info-bg);border-left:.1875rem solid var(--color-callout-info-border)}.c-callout a{color:var(--color-link-color)}.c-callout__title{display:block;margin:0 0 .3125rem;text-transform:uppercase;letter-spacing:1.1}.c-callout a:hover{color:var(--color-link-hover)}.c-callout--info{background-color:var(--color-callout-info-bg);border-color:var(--color-callout-info-border)}.c-callout--info a{color:var(--color-link-color)}.c-callout--warning{background-color:var(--color-callout-warning-bg);border-color:var(--color-callout-warning-border)}.c-callout--warning a{color:var(--color-callout-warning-link)}.c-callout--alert{background-color:var(--color-callout-alert-bg);border-color:var(--color-callout-alert-border)}.c-callout--alert a{color:var(--color-callout-alert-link)}.c-callout--success{background-color:var(--color-callout-success-bg);border-color:var(--color-callout-success-border)}.c-callout--success a{color:var(--color-callout-success-link)}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,"Andale Mono","Ubuntu Mono",monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:bold}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.command-line-prompt{border-right:1px solid #999;display:block;float:left;font-size:100%;letter-spacing:-1px;margin-right:1em;pointer-events:none;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none}.command-line-prompt>span:before{opacity:.7;content:" ";display:block;padding-right:.8em}.command-line-prompt>span[data-user]:before{content:"[" attr(data-user) "@" attr(data-host) "] $"}.command-line-prompt>span[data-user=root]:before{content:"[" attr(data-user) "@" attr(data-host) "] #"}.command-line-prompt>span[data-prompt]:before{content:attr(data-prompt)}.command-line-prompt>span[data-continuation-prompt]:before{content:attr(data-continuation-prompt)}.command-line span.token.output{opacity:.7}pre[data-line]{position:relative;padding:1em 0 1em 3em}.line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:hsla(24, 20%, 50%, 0.08);background:linear-gradient(to right, hsla(24, 20%, 50%, 0.1) 70%, hsla(24, 20%, 50%, 0));pointer-events:none;line-height:inherit;white-space:pre}@media print{.line-highlight{-webkit-print-color-adjust:exact;color-adjust:exact}}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:hsla(24, 20%, 50%, 0.4);color:hsl(24, 20%, 95%);font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:before,.line-numbers .line-highlight:after{content:none}pre[id].linkable-line-numbers span.line-numbers-rows{pointer-events:all}pre[id].linkable-line-numbers span.line-numbers-rows>span:before{cursor:pointer}pre[id].linkable-line-numbers span.line-numbers-rows>span:hover:before{background-color:rgba(128, 128, 128, 0.2)}pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;z-index:10;top:.3em;right:.2em;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar:focus-within>.toolbar{opacity:1}div.code-toolbar>.toolbar>.toolbar-item{display:inline-block}div.code-toolbar>.toolbar>.toolbar-item>a{cursor:pointer}div.code-toolbar>.toolbar>.toolbar-item>button{background:none;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span{color:#bbb;font-size:.8em;padding:0 .5em;background:#f5f2f0;background:rgba(224, 224, 224, 0.2);box-shadow:0 2px 0 0 rgba(0, 0, 0, 0.2);border-radius:.5em}div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar>.toolbar-item>span:hover,div.code-toolbar>.toolbar>.toolbar-item>span:focus{color:inherit;text-decoration:none}.token.operator{background:none}:not(pre)>code[class*=language-],pre[class*=language-]{background:var(--color-code-block-bg);color:var(--color-code-block-text)}[data-theme=light] :not(pre)>code[class*=language-],[data-theme=light] pre[class*=language-]{background:#2d2d2d;color:#ccc}div.code-toolbar>.toolbar{opacity:1}div.code-toolbar>.toolbar .toolbar-item>button,div.code-toolbar>.toolbar .toolbar-item>a,div.code-toolbar>.toolbar .toolbar-item>span{background:var(--color-optionswitch-bg);color:var(--color-body-text);border:1px solid var(--color-border);box-shadow:none;transition:background-color .15s ease,color .15s ease}div.code-toolbar>.toolbar .toolbar-item>button:hover,div.code-toolbar>.toolbar .toolbar-item>a:hover,div.code-toolbar>.toolbar .toolbar-item>span:hover{background:var(--color-header-hover-bg);color:var(--color-dark)}.line-numbers .line-numbers-rows{border-right-color:var(--color-border-strong)}.line-numbers-rows>span:before{color:var(--color-body-text-muted)}.c-history{display:flex;align-items:center;margin:-0.9375rem 0 1.875rem}.c-contributors{display:flex}.c-contributor{width:30px;height:30px;margin-left:-10px;border:2px solid var(--color-body-bg);border-radius:15px}.c-contributor:first-child{margin-left:0}.c-last-edit{max-width:100%;margin-bottom:0;padding-left:.5em;font-size:.9em;font-weight:500;color:var(--color-body-text-muted);flex:1}.c-footer__grid{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start}.c-footer__cell{width:100%}@media print,screen and (min-width: 62.5em){.c-footer__cell{width:auto}}.c-footer__copyright{color:var(--color-gray)}.c-footer__nav{margin:0 -0.625rem;padding:0;list-style:none}.c-footer__navitem{display:inline-block}.c-footer__navlink{display:block;font-weight:700;padding:.625rem;color:var(--color-gray)}.c-footer__navlink:hover{color:var(--color-primary)}.heading-link{display:inline-block;margin-left:.67em;transition:opacity .25s ease-in-out;opacity:0;font-size:.8em;bottom:.2em}h1:hover .heading-link,h2:hover .heading-link,h3:hover .heading-link,h4:hover .heading-link,h5:hover .heading-link,h6:hover .heading-link{opacity:1}@media screen and (min-width: 43.75em){h1,h2,h3,h4,h5,h6{position:relative;margin-left:-3rem;padding-left:3rem}h1:target .heading-link,h2:target .heading-link,h3:target .heading-link,h4:target .heading-link,h5:target .heading-link,h6:target .heading-link{opacity:1}.heading-link{left:0;position:absolute}}.c-nav{margin:0 0 0 -1.25rem;padding:0;list-style:none}.c-nav__item{margin:0;padding:0;list-style:none;font-size:.9375rem;line-height:1.4}.c-nav__item a{position:relative;display:block;margin-bottom:.625rem;padding:0 0 0 1.25rem;text-decoration:none;font-weight:500;color:var(--color-slateGray);transition:all .2s ease}.c-nav__item a:hover{color:var(--color-link-hover);transform:translateX(2px)}.c-nav__item--activepage .c-nav__chevron{top:.35rem}.c-nav__item--activepage>a{position:relative;color:var(--color-nav-active);padding:.35rem 0 .35rem 3.5rem;transition:all .2s ease}.c-nav__item--activepage>a:after,.c-nav__item--activepage>a:before{border:0 solid var(--color-nav-active-border)}.c-nav__item--activepage>a:hover{transform:translateX(0)}.c-nav__item--activepage>a .inset{top:0;right:0;bottom:0;left:0;position:absolute;border-radius:.25rem;opacity:.25;background-color:var(--color-nav-active-bg)}.c-nav__item--level1>a{font-size:1rem;font-weight:700;padding-left:1.875rem}.c-nav__item--level2>a{padding-left:3.125rem}.c-nav__item--level3>a{padding-left:3.75rem}.c-nav__item--level4>a{padding-left:5rem}.c-nav__item--level5>a{padding-left:6.25rem}.c-nav__item--level6>a{padding-left:7.5rem}.c-nav__item--level7>a{padding-left:8.75rem}.c-nav__item--collapsed>ul{display:none}.c-nav__item--collapsed>a>.c-nav__chevron{top:.0625rem;transform:rotate(90deg)}.c-nav__chevron{display:inline-block;position:absolute;top:0;height:1.3125rem;width:1.3125rem;padding:.3125rem;margin:0 0 0 -1.4375rem;fill:var(--color-body-text-muted);transform:rotate(-90deg);vertical-align:middle}.c-nav__sublist{margin:0 0 1.875rem;padding:0}::-webkit-scrollbar,::-webkit-scrollbar-thumb{width:1rem;height:1rem;border:.25rem solid rgba(0,0,0,0);border-radius:.5rem;background-color:rgba(0,0,0,0)}::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem var(--color-scrollbar)}::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 1rem var(--color-scrollbar-hover)}::-webkit-resizer,::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.l-main__oc,.c-oc__more{display:none}@media screen and (min-width: 76.25em){.l-main__oc,.c-oc__more{display:block}}.l-main__oc--below,.c-oc__more--below{display:block}@media screen and (min-width: 76.25em){.l-main__oc--below,.c-oc__more--below{display:none}}.l-main__oc{margin-top:5em;background:var(--color-sidebar-bg);color:var(--color-sidebar-text);padding:1em;border-radius:1em;border:1px solid var(--color-border);transition:background-color .5s ease-in-out;text-decoration:none !important;max-width:25rem}@media screen and (min-width: 76.25em){.l-main__oc{margin-left:-1.5625rem}}.l-main__oc .c-oc__member_image{transition:border .5s ease-in-out}.l-main__oc:hover{color:var(--color-sidebar-text);background:var(--color-search-result-hover)}.l-main__oc:hover .c-oc__member_image{border-color:var(--color-search-result-hover)}.c-oc__logo{max-width:100%;max-height:60px}.c-oc__text{font-size:.8125rem;font-weight:500}.c-oc__subtitle{font-size:.8125rem;font-weight:700;text-transform:uppercase}.c-oc__members{padding-left:0;list-style:none;margin-bottom:25px;padding-right:25px;margin-left:-28px;margin-right:-35px;text-align:center}.c-oc__member{display:inline-block;margin-right:-20px;margin-bottom:-15px}.c-oc__member_image{width:60px;height:60px;border-radius:50%;border:5px solid var(--color-sidebar-bg);background:#00b5de}.c-oc__total span{height:60px;background:#00b5de;border-radius:30px;border:5px solid var(--color-sidebar-bg);color:#fff;padding:.7em 1em;font-weight:600;display:block}.c-oc__more{text-align:center;font-size:.8125rem;font-weight:500;text-decoration:underline;margin-top:1em;margin-left:-1em;max-width:25rem}.c-optionswitch__current{display:block;padding:.4375rem .625rem;color:var(--color-header-text);white-space:nowrap;background:var(--color-header-bg);transition:background-color .2s ease-in-out;border-radius:.1875rem}.c-optionswitch__current:hover{color:var(--color-header-text);background:var(--color-header-hover-bg)}.c-optionswitch__currentchevron{display:inline-block;width:.625rem;height:.625rem;fill:var(--color-header-text);vertical-align:middle;margin:-0.0625rem 0 0 .1875rem;transform:rotate(90deg)}.c-optionswitch__listwrapper{position:absolute;top:3.6875rem;display:none;background:var(--color-optionswitch-bg);box-shadow:0 .1875rem .5rem 0 rgba(116,129,141,.1)}@media screen and (min-width: 81.25em){.c-optionswitch__listwrapper{right:0}}@media screen and (max-width: 90em){.c-optionswitch__listwrapper{right:0}}@media screen and (max-width: 48em){.c-optionswitch__listwrapper{right:0}}.c-optionswitch__listwrapper:target{display:block}@media screen and (min-width: 43.75em){.c-optionswitch__listwrapper:target{display:flex}}.c-optionswitch__listwrapper:target:before{content:none}.c-optionswitch__list{margin:0;padding:0;list-style:none}.c-optionswitch__item{position:relative;display:block}.c-optionswitch__link{display:block;padding:.25rem .625rem;color:var(--color-header-text);transition-duration:.2s;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-property:background-color,border-color,color}.c-optionswitch__link:hover{color:var(--color-header-text);background:var(--color-header-hover-bg)}.c-optionswitch__item--active .c-optionswitch__link{background:var(--color-header-active-bg)}.c-optionswitch__translation{color:var(--color-header-text-muted)}.c-optionswitch__translation:before{content:"("}.c-optionswitch__translation:after{content:")"}.c-optionswitch__note{padding:0 .625rem .625rem;color:var(--color-header-text-muted)}.l-main-search__container{list-style:none;padding:0;margin-bottom:2rem}.l-main-search__result,.l-live-search__result{border-top:1px solid var(--color-border);padding-top:1rem;margin-top:1rem}.l-main-search__result .c-breadcrumb,.l-live-search__result .c-breadcrumb{margin-bottom:0}.l-main-search__result h4,.l-live-search__result h4{margin-top:0;margin-bottom:0}@media screen and (max-width: 43.74875em){.l-main-search__result:first-child,.l-live-search__result:first-child{border-top:none}}.l-main-search__match summary,.l-live-search__match summary{float:right;color:var(--color-body-text-muted)}.l-search__pagination-holder{list-style:none;padding:0;text-align:center}.l-search-page{display:inline-block}.l-search-page__link{display:block;cursor:pointer;padding:.5rem 1rem;line-height:initial;background:var(--color-pagination-bg);color:var(--color-mirage);border-radius:.25rem;border:1px solid var(--color-pagination-bg)}.l-search-page__link:hover,.l-search-page__link:focus{background:var(--color-slateGray);border:1px solid var(--color-slateGray);color:var(--color-light)}.l-search-page__link--active{background:var(--color-sapphire);border:1px solid var(--color-sapphire);color:var(--color-light)}.c-searchform--resultspage{margin-bottom:1rem}.c-searchform--resultspage .c-searchform__input{border:1px solid var(--color-border)}.l-search__meta{color:var(--color-gray)}.l-search__ignored{border-left:.5rem solid var(--color-warning);padding:.9375rem 1.25rem;background-color:var(--color-callout-warning-bg);color:var(--color-callout-warning-link)}.l-search__tip{border-left:.5rem solid var(--color-primary);padding:.9375rem 1.25rem;background-color:var(--color-callout-info-bg);color:var(--color-link-color)}.l-search__no_results{border-left:.25rem solid var(--color-alert);padding:.9375rem 1.25rem;background-color:var(--color-callout-alert-bg);color:var(--color-callout-alert-link);max-width:100%}.l-search__no_results--live{margin:0}.c-searchform--header{z-index:5}.l-live-search__container{position:absolute;background:var(--color-live-search-bg);width:100%;display:none;border-radius:0 0 5px 5px;margin-top:-3px;z-index:4;box-shadow:0 2px 7px 2px rgba(0,0,0,.5);border:1px solid var(--color-border);border-top:none}.l-live-search__container--visible{display:block}.l-live-search__container--loading::before{content:"Loading...";width:100%;display:block;padding:.5em .5em .5em 1em;border-radius:5px 5px 0 0;color:var(--color-header-text);background:var(--color-header-bg)}.l-live-search__container--loading:empty::before{border-radius:5px}@media screen and (max-width: 43.74875em){.l-live-search__container{position:initial;margin-top:1em;border-radius:7px;box-shadow:none;border:1px solid var(--color-live-search-border)}}.l-live-search__results{list-style:none;padding:0;margin:0;max-height:70vh;overflow-y:scroll}@media screen and (max-width: 43.74875em){.l-live-search__results{max-height:calc(100vh - 15rem)}}.l-live-search__result,.l-main-search__result{padding:0;margin:0;position:relative}.c-live-search__result-crumbs,.l-main-search__crumbs{position:absolute;top:.7rem;white-space:nowrap;text-overflow:ellipsis;padding:0 1rem;height:1.6em;overflow:hidden;font-weight:500;color:var(--color-body-text-muted)}.c-live-search__result-link,.l-main-search__link{color:var(--color-sapphire);display:block;padding:2.2rem 1rem .7rem;font-weight:500}.c-live-search__result-link:hover,.c-live-search__result-link:focus,.l-live-search__result--selected .c-live-search__result-link,.l-main-search__link:hover,.l-main-search__link:focus,.l-live-search__result--selected .l-main-search__link{background:var(--color-search-result-hover)}.l-live-search__search{margin:0}.l-live-search__search a{font-weight:500;display:block;padding:.7rem 1rem;width:100%;color:var(--color-header-text);background:var(--color-header-bg);border-radius:0 0 5px 5px}.l-main-search__result{max-width:80ch}.l-main-search__title{color:var(--color-sapphire)}.l-main-search__link{text-decoration:none !important}.l-main-search__link:hover .l-main-search__title,.l-main-search__link:focus .l-main-search__title{color:var(--color-link-hover)}.l-main-search__snippet{color:var(--color-body-text)}.size_code{font-size:1em}.c-searchform{position:relative;width:100%}@media screen and (max-width: 43.74875em){.c-searchform{margin-top:1rem}}.c-searchform__input{display:block;width:100%;border:none;border-radius:.5rem;padding:.625rem 2.1875rem .625rem 1.25rem;line-height:1.5 !important;font-family:inherit;font-size:100%;color:var(--color-body-text);transition:all .1s ease-in;background-color:var(--color-search-input-bg)}.c-searchform__input::-moz-placeholder{color:var(--color-body-text-muted)}.c-searchform__input::placeholder{color:var(--color-body-text-muted)}.c-searchform__input:focus{border-color:var(--color-border);background-color:var(--color-search-input-focus-bg);outline:2px solid var(--color-link-color);outline-offset:1px}@media screen and (max-width: 43.74875em){.c-searchform__input{border:1px solid var(--color-header-bg)}}.c-searchform__button{position:absolute;top:0;right:.625rem;bottom:0;margin:0;padding:0;background:rgba(0,0,0,0);border:none}.c-searchform__icon{width:1.5rem;height:1.25rem;fill:var(--color-search-icon);vertical-align:middle}#searchform:target:before{content:"";height:0;margin:0}table{display:block;width:-moz-fit-content;width:fit-content;max-width:100%;max-width:calc(100% + 1.25rem);margin:1.875rem 0;border-collapse:collapse;overflow-x:auto}@media print,screen and (min-width: 43.75em){table{display:table;table-layout:fixed;width:100%;max-width:100%}table td{word-wrap:break-word}}table tr:nth-child(2n){background:var(--color-sidebar-bg)}table td,table th{border:1px solid var(--color-border-strong);padding:.5625rem 1rem}table th{font-weight:700;text-align:center}table td{min-width:10.625rem}@media print,screen and (min-width: 43.75em){table td{min-width:0}}table::-webkit-scrollbar,table::-webkit-scrollbar-thumb{width:1rem;height:1rem;border:.25rem solid rgba(0,0,0,0);border-radius:.5rem;background-color:rgba(0,0,0,0)}table::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem var(--color-scrollbar)}table::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 1rem var(--color-scrollbar-hover)}table::-webkit-resizer,table::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.c-themetoggle{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;margin:0;padding:0;border:none;border-radius:.1875rem;background:rgba(0,0,0,0);color:var(--color-header-text);cursor:pointer;transition:background-color .2s ease-in-out}.c-themetoggle:hover,.c-themetoggle:focus{background:var(--color-header-hover-bg);outline:none}.c-themetoggle:focus-visible{outline:2px solid var(--color-link-color);outline-offset:2px}.c-themetoggle__icon{display:none;width:1.25rem;height:1.25rem;fill:currentColor}[data-theme-preference=system] .c-themetoggle__icon--system,[data-theme-preference=light] .c-themetoggle__icon--light,[data-theme-preference=dark] .c-themetoggle__icon--dark{display:block}.c-toc{position:relative;margin:0 0 1.875rem}.c-toc__title{display:block;margin:0 0 .3125rem;font-size:.75rem;font-weight:700;color:var(--color-cadetBlue);text-transform:uppercase}.c-toc ul{margin:0;padding:0;list-style:none}.c-toc__wrapper>ul>li{margin:0 0 .4375rem}.c-toc__wrapper>ul>li:last-child{margin-bottom:0}.c-toc__wrapper>ul>li>a{font-weight:700}.c-toc a{display:block;margin:0 0 .1875rem;font-size:.8125rem;font-weight:500;color:var(--color-slateGray);line-height:1.4;transition:all .2s ease}.c-toc a:hover{color:var(--color-mirage);transform:translateX(2px)}.c-toc li li{padding-left:.9375rem}.u-show-for-sr,html.js .u-hide-with-js-sr,.u-show-on-focus{position:absolute !important;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}:target:before{content:"";display:block;height:5.625rem;margin:-5.625rem 0 0}.is-brokenlink{color:var(--color-link-broken);text-decoration:line-through}.is-brokenlink:after{content:" (link broken)";text-decoration:none}.is-externallink:after{content:"";display:inline-block;width:.625rem;height:.625rem;margin:-0.0625rem .125rem 0 .25rem;background-color:var(--color-body-text);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 76 76'%3E%3Cg fill='%23000' fill-rule='nonzero'%3E%3Cpath d='M27.37215 46.13316994L72.34371002 1.16160993l2.61627 2.61627L29.98842 48.74943995z'/%3E%3Cpath d='M75.6 28.7h-3.8V4.4H47.4V.6h28.2zM68.1 75.6H.6V8.1h33.7v3.8h-30v60h60v-30h3.8z'/%3E%3C/g%3E%3C/svg%3E") center/100% 100% no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 76 76'%3E%3Cg fill='%23000' fill-rule='nonzero'%3E%3Cpath d='M27.37215 46.13316994L72.34371002 1.16160993l2.61627 2.61627L29.98842 48.74943995z'/%3E%3Cpath d='M75.6 28.7h-3.8V4.4H47.4V.6h28.2zM68.1 75.6H.6V8.1h33.7v3.8h-30v60h60v-30h3.8z'/%3E%3C/g%3E%3C/svg%3E") center/100% 100% no-repeat}.u-no-margin{margin:0 !important}.u-no-margin--top{margin-top:0 !important}.u-no-margin--bottom{margin-bottom:0 !important}.u-no-padding{padding:0 !important}.u-no-padding--top{padding-top:0 !important}.u-no-padding--bottom{padding-bottom:0 !important}html.no-js .u-show-with-js{display:none !important}html.js .u-hide-with-js{display:none !important}@media print{:root,[data-theme=dark],[data-theme=light]{color-scheme:light;--color-cadetBlue: #a0aec0;--color-primary: #3b68af;--color-sapphire: #314a97;--color-perano: #b2c9f5;--color-light: #ededed;--color-gray: #4a5568;--color-slateGray: #475365;--color-mirage: #1a202c;--color-alert: #d26d69;--color-success: #2d8b01;--color-warning: #EEBF41;--color-dark: #252930;--color-callout-info-border: #5b99ea;--color-callout-alert-border: #d26d69;--color-callout-success-border: #5cb377;--color-callout-warning-border: #EEBF41;--color-callout-info-bg: #f9fbfe;--color-callout-alert-bg: #f5f5f5;--color-callout-success-bg: #e7f4eb;--color-callout-warning-bg: #fdf6e5;--color-callout-warning-link: #d09c13;--color-callout-alert-link: #d26d69;--color-callout-success-link: #3e8554;--color-header-bg: #fff;--color-header-text: #4a5568;--color-header-hover-bg: #f7fafc;--color-header-active-bg: #edf2f7;--color-header-text-muted: #718096;--color-sidebar-bg: #F5F7F9;--color-sidebar-text: #303942;--color-nav-active: #247978;--color-nav-active-bg: #b2f5ea;--color-nav-active-border: #e2e8f0;--color-body-bg: #fff;--color-body-text: #4a5568;--color-body-text-muted: #718096;--color-border: #E6ECF1;--color-border-strong: #d3dce4;--color-link-broken: #d26d69;--color-link-color: #1c6fdc;--color-link-hover: #1557b0;--color-inline-code: #ebf1ff;--color-inline-code-text: #314a97;--color-optionswitch-bg: #edf2f7;--color-search-input-bg: #edf2f7;--color-search-input-focus-bg: #fff;--color-search-icon: #717171;--color-search-result-hover: #f0f6ff;--color-live-search-bg: #fff;--color-live-search-border: #3b68af;--color-pagination-bg: #e2e8f0;--color-video-embed-bg: #f5f5f5;--color-code-block-bg: #2d2d2d;--color-code-block-text: #ccc;--color-theme-color: #102c53;--color-scrollbar: rgba(85, 108, 136, 0.1);--color-scrollbar-hover: rgba(85, 108, 136, 0.2)}.l-app>*{display:none}.l-app .l-main{display:block}}
/*# sourceMappingURL=app.css.map */
\ No newline at end of file
diff --git a/public/template/dist/app.css.map b/public/template/dist/app.css.map
index 162beaa6..a9614b06 100644
--- a/public/template/dist/app.css.map
+++ b/public/template/dist/app.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../node_modules/modern-normalize/modern-normalize.css","../src/scss/_typography.scss","../src/scss/_settings.scss","../src/scss/_functions.scss","../src/scss/_layout.scss","../src/scss/_breakpoints.scss","../src/scss/_objects.scss","../src/scss/components/_breadcrumb.scss","../src/scss/components/_callout.scss","../node_modules/prismjs/themes/prism-tomorrow.css","../node_modules/prismjs/plugins/command-line/prism-command-line.css","../node_modules/prismjs/plugins/line-highlight/prism-line-highlight.css","../node_modules/prismjs/plugins/line-numbers/prism-line-numbers.css","../node_modules/prismjs/plugins/toolbar/prism-toolbar.css","../src/scss/components/_code.scss","../src/scss/components/_contributors.scss","../src/scss/components/_footer.scss","../src/scss/components/_heading_links.scss","../src/scss/components/_nav.scss","../src/scss/components/_opencollective.scss","../src/scss/components/_optionswitch.scss","../src/scss/components/_search.scss","../src/scss/components/_searchform.scss","../src/scss/components/_table.scss","../src/scss/components/_toc.scss","../src/scss/_helpers.scss","../src/scss/_print.scss"],"names":[],"mappings":"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","file":"app.css","sourcesContent":["/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\n\n/*\nDocument\n========\n*/\n\n/**\nUse a better box model (opinionated).\n*/\n\n*,\n::before,\n::after {\n\tbox-sizing: border-box;\n}\n\n/**\nUse a more readable tab size (opinionated).\n*/\n\nhtml {\n\t-moz-tab-size: 4;\n\ttab-size: 4;\n}\n\n/**\n1. Correct the line height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n*/\n\nhtml {\n\tline-height: 1.15; /* 1 */\n\t-webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/*\nSections\n========\n*/\n\n/**\nRemove the margin in all browsers.\n*/\n\nbody {\n\tmargin: 0;\n}\n\n/**\nImprove consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n*/\n\nbody {\n\tfont-family:\n\t\tsystem-ui,\n\t\t-apple-system, /* Firefox supports this but not yet `system-ui` */\n\t\t'Segoe UI',\n\t\tRoboto,\n\t\tHelvetica,\n\t\tArial,\n\t\tsans-serif,\n\t\t'Apple Color Emoji',\n\t\t'Segoe UI Emoji';\n}\n\n/*\nGrouping content\n================\n*/\n\n/**\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n*/\n\nhr {\n\theight: 0; /* 1 */\n\tcolor: inherit; /* 2 */\n}\n\n/*\nText-level semantics\n====================\n*/\n\n/**\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr[title] {\n\ttext-decoration: underline dotted;\n}\n\n/**\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n\tfont-weight: bolder;\n}\n\n/**\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n2. Correct the odd 'em' font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n\tfont-family:\n\t\tui-monospace,\n\t\tSFMono-Regular,\n\t\tConsolas,\n\t\t'Liberation Mono',\n\t\tMenlo,\n\t\tmonospace; /* 1 */\n\tfont-size: 1em; /* 2 */\n}\n\n/**\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n\tfont-size: 80%;\n}\n\n/**\nPrevent 'sub' and 'sup' elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n\tfont-size: 75%;\n\tline-height: 0;\n\tposition: relative;\n\tvertical-align: baseline;\n}\n\nsub {\n\tbottom: -0.25em;\n}\n\nsup {\n\ttop: -0.5em;\n}\n\n/*\nTabular data\n============\n*/\n\n/**\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n*/\n\ntable {\n\ttext-indent: 0; /* 1 */\n\tborder-color: inherit; /* 2 */\n}\n\n/*\nForms\n=====\n*/\n\n/**\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n\tfont-family: inherit; /* 1 */\n\tfont-size: 100%; /* 1 */\n\tline-height: 1.15; /* 1 */\n\tmargin: 0; /* 2 */\n}\n\n/**\nRemove the inheritance of text transform in Edge and Firefox.\n1. Remove the inheritance of text transform in Firefox.\n*/\n\nbutton,\nselect { /* 1 */\n\ttext-transform: none;\n}\n\n/**\nCorrect the inability to style clickable types in iOS and Safari.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n\t-webkit-appearance: button;\n}\n\n/**\nRemove the inner border and padding in Firefox.\n*/\n\n::-moz-focus-inner {\n\tborder-style: none;\n\tpadding: 0;\n}\n\n/**\nRestore the focus styles unset by the previous rule.\n*/\n\n:-moz-focusring {\n\toutline: 1px dotted ButtonText;\n}\n\n/**\nRemove the additional ':invalid' styles in Firefox.\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\n*/\n\n:-moz-ui-invalid {\n\tbox-shadow: none;\n}\n\n/**\nRemove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\n*/\n\nlegend {\n\tpadding: 0;\n}\n\n/**\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n\tvertical-align: baseline;\n}\n\n/**\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n\theight: auto;\n}\n\n/**\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n\t-webkit-appearance: textfield; /* 1 */\n\toutline-offset: -2px; /* 2 */\n}\n\n/**\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n\t-webkit-appearance: none;\n}\n\n/**\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to 'inherit' in Safari.\n*/\n\n::-webkit-file-upload-button {\n\t-webkit-appearance: button; /* 1 */\n\tfont: inherit; /* 2 */\n}\n\n/*\nInteractive\n===========\n*/\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n\tdisplay: list-item;\n}\n","body {\n background:map-get($colors, 'body-bg');\n color: map-get($colors, 'gray');\n font-family: $body-font-family;\n font-weight: 400;\n line-height: $global-line-height;\n color: map-get($colors, 'body-text');\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nh1, h2, h3, h4, h5, h6 {\n color: map-get($colors, dark);\n line-height: 1.3;\n margin-bottom: 2rem;\n}\n\n$min_width: rem(521);\n$max_width: rem(1700);\n\nh1 {\n margin-top: rem(30);\n //font-size: rem(45);\n @include fluid-type($min_width, $max_width, rem(30), rem(50));\n}\n\nh2 {\n //font-size: rem(30);\n @include fluid-type($min_width, $max_width, rem(22), rem(35));\n}\n\nh3 {\n //font-size: rem(26);\n @include fluid-type($min_width, $max_width, rem(20), rem(31));\n}\n\nh4 {\n //font-size: rem(22);\n @include fluid-type($min_width, $max_width, rem(18), rem(27));\n}\n\nh5 {\n //font-size: rem(20);\n @include fluid-type($min_width, $max_width, rem(16), rem(25));\n}\n\nh6 {\n //font-size: rem(18);\n @include fluid-type($min_width, $max_width, rem(16), rem(23));\n}\n\n\na {\n text-decoration: none;\n color: map-get($colors, 'link-color');\n transition: color .2s ease-in-out;\n\n &:hover {\n color: lightendarken(map-get($colors, 'link-color'), 15%);\n }\n\n // Links should look like links\n .l-main__content &, .c-callout & {\n text-decoration: underline;\n }\n}\n\nimg {\n // Get rid of gap under images by making them display: inline-block; by default\n display: inline-block;\n vertical-align: middle;\n\n // Grid defaults to get images and embeds to work properly\n max-width: 100%;\n height: auto;\n -ms-interpolation-mode: bicubic;\n}\n\np {\n margin: 0 0 $global-margin;\n line-height: $global-line-height;\n max-width: $paragraph-max-width;\n}\n\nli {\n max-width: $paragraph-max-width;\n}\n\ncode, kbd, samp, pre {\n background-color: map-get($colors, 'inline-code');\n padding: 0.1rem 0.25rem;\n font-size: .775rem;\n border-radius: .125rem;\n padding-left: .25rem;\n padding-right: .25rem;\n color: map-get($colors, sapphire);\n font-family: SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace !important;\n}\npre > code {\n padding: 0;\n}\n\ncode[class*=\"language-\"], pre[class*=\"language-\"] {\n border-radius: .5rem;\n font-size: .775rem !important;\n line-height: 1.5 !important;\n}\n\nblockquote {\n display: block;\n margin: 0 0 $global-margin;\n padding: rem(15 20);\n background-color: map-get($colors, 'callout-info-bg');\n border-left: rem(3) solid map-get($colors, 'callout-info-border');\n color: map-get($colors, gray);\n a{\n color: map-get($colors, 'link-color');\n }\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\niframe, object, video {\n max-width: 100%;\n}\n","$colors: (\n cadetBlue: #a0aec0,\n primary: #3b68af, // AA compatible\n sapphire: #314a97,\n perano: #b2c9f5,\n light: #ededed,\n gray:#4a5568, // AA compatible\n slateGray: #475365, // AAA compatible\n mirage: #1a202c,\n alert: #d26d69,\n success: #2d8b01,\n warning: #EEBF41,\n dark: #252930,\n 'callout-info-border': #5b99ea,\n 'callout-alert-border': #d26d69,\n 'callout-success-border': #5cb377,\n 'callout-warning-border': #EEBF41,\n 'callout-info-bg':#f9fbfe,\n 'callout-alert-bg': #f5f5f5,\n 'callout-success-bg': #e7f4eb,\n 'callout-warning-bg': #fdf6e5,\n 'header-bg': #fff,\n 'header-text': #4a5568, //#4a4a4a,\n 'sidebar-bg': #F5F7F9,\n 'sidebar-text': #303942,\n 'nav-active': #247978,\n 'nav-active-bg': #b2f5ea,\n 'body-bg': #fff,\n 'body-text': #4a5568,\n 'border': #E6ECF1,\n 'link-broken': #d26d69,\n 'link-color': #1c6fdc,\n 'inline-code': #ebf1ff,\n 'optionswitch-bg': #edf2f7,\n);\n\n/*\n$dark-colors: (\n primary: #68a2ff, // AA compatible\n light: #ededed,\n gray: #757575, // AA compatible\n alert: #c70000,\n success: #2d8b01,\n warning: #ffae00,\n 'header-bg': #052a67,\n 'header-text': #fff, //#4a4a4a,\n 'sidebar-bg': #141f31,\n 'body-bg': #111,\n 'body-text': #fff,\n border: #E6ECF1,\n);\n*/\n\n$breakpoints: (\n small: 0,\n medium: 700px,\n large: 1000px,\n xlarge: 1220px,\n xxlarge: 1300px\n);\n\n$global-font-size: 100%;\n$global-line-height: 1.6;\n$global-width: rem(1200);\n$global-margin: rem(15);\n$global-radius: rem(3);\n$paragraph-max-width: 80ch; // approx 60 actual flex-width font characters\n\n$body-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n\n$header-height: rem(60);\n\n$main-margin-top: rem(30);\n\n$sidebar-width: rem(320);\n$sidebar-breakpoint: 'large';\n","@use \"sass:math\";\n\n/// Removes the unit (e.g. px, em, rem) from a value, returning the number only.\n///\n/// @param {Number} $num - Number to strip unit from.\n///\n/// @returns {Number} The same number, sans unit.\n@function strip-unit($num) {\n @return math.div($num, $num * 0 + 1);\n}\n\n/// Converts one or more pixel values into matching rem values.\n///\n/// @param {Number|List} $values - One or more values to convert. Be sure to separate them with spaces and not commas. If you need to convert a comma-separated list, wrap the list in parentheses.\n/// @param {Number} $base [null] - The base value to use when calculating the `rem`. If you're using Foundation out of the box, this is 16px. If this parameter is `null`, the function will reference the `$global-font-size` variable as the base.\n///\n/// @returns {List} A list of converted values.\n@function rem($values, $base: null) {\n $rem-values: ();\n $count: length($values);\n\n // If no base is defined, defer to the global font size\n @if $base == null {\n $base: $global-font-size;\n }\n\n // If the base font size is a %, then multiply it by 16px\n // This is because 100% font size = 16px in most all browsers\n @if unit($base) == '%' {\n $base: math.div($base, 100%) * 16px;\n }\n\n // Using rem as base allows correct scaling\n @if unit($base) == 'rem' {\n $base: strip-unit($base) * 16px;\n }\n\n @if $count == 1 {\n @return -zf-to-rem($values, $base);\n }\n\n @for $i from 1 through $count {\n $rem-values: append($rem-values, -zf-to-rem(nth($values, $i), $base));\n }\n\n @return $rem-values;\n}\n@function rem-calc($values, $base: null) {\n @return rem($values, $base);\n}\n\n// Converts a unitless, pixel, or rem value to em, for use in breakpoints.\n@function -zf-bp-to-em($value) {\n // Pixel and unitless values are converted to rems\n @if unit($value) == 'px' or unitless($value) {\n $value: rem-calc($value, $base: 16px);\n }\n\n // Then the value is converted to ems\n @return strip-unit($value) * 1em;\n}\n\n/// Converts a pixel value to matching rem value. *Any* value passed, regardless of unit, is assumed to be a pixel value. By default, the base pixel value used to calculate the rem value is taken from the `$global-font-size` variable.\n/// @access private\n///\n/// @param {Number} $value - Pixel value to convert.\n/// @param {Number} $base [null] - Base for pixel conversion.\n///\n/// @returns {Number} A number in rems, calculated based on the given value and the base pixel value. rem values are passed through as is.\n@function -zf-to-rem($value, $base: null) {\n // Check if the value is a number\n @if type-of($value) != 'number' {\n @warn inspect($value) + ' was passed to rem-calc(), which is not a number.';\n @return $value;\n }\n\n // Transform em into rem if someone hands over 'em's\n @if unit($value) == 'em' {\n $value: strip-unit($value) * 1rem;\n }\n\n // Calculate rem if units for $value is not rem or em\n @if unit($value) != 'rem' {\n $value: math.div(strip-unit($value), strip-unit($base)) * 1rem;\n }\n\n // Turn 0rem into 0\n @if $value == 0rem {\n $value: 0;\n }\n\n @return $value;\n}\n\n//\n// Function to create an optimized svg url https://codepen.io/jakob-e/pen/doMoML\n//\n@function svg-url($svg){\n //\n // Add missing namespace\n //\n @if not str-index($svg,xmlns) {\n $svg: str-replace($svg, '