diff --git a/.editorconfig b/.editorconfig
index 443ddc17..a5dc6db4 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -12,11 +12,8 @@ insert_final_newline = true
indent_style = space
indent_size = 2
-[*.php]
+[*.{php,xml}]
indent_size = 4
-[*.{diff,md}]
+[*.md]
trim_trailing_whitespace = false
-
-[Jenkinsfile]
-indent_size = 4
diff --git a/.github/workflows/pull-requests.yml b/.github/workflows/pull-requests.yml
index 185f6dc7..c685838d 100644
--- a/.github/workflows/pull-requests.yml
+++ b/.github/workflows/pull-requests.yml
@@ -3,7 +3,7 @@ name: Pull Requests
on:
pull_request:
branches:
- - main
+ - master
jobs:
runner:
@@ -13,15 +13,30 @@ jobs:
- name: Check out repository code
uses: actions/checkout@v4
+ # Can maybe be replaced with pnpm/action-setup@v4 in the future
+ - name: Setup pnpm/corepack
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: 'package.json'
+ - run: npm i -g --force corepack && corepack enable
+
+ - name: Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: 'package.json'
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
- name: Setup PHP with tools
uses: silverorange/actions-setup-php@v2
with:
- php-version: "8.2"
- extensions: gd
+ php-version: '8.2'
- name: Get composer cache directory
id: composer-cache
- run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
+ run: echo "dir=$(composer config cache-files-dir)" >> "$GITHUB_OUTPUT"
- name: Cache dependencies
uses: actions/cache@v4
@@ -31,7 +46,7 @@ jobs:
restore-keys: ${{ runner.os }}-composer-
- name: Install PHP dependencies
- run: "composer install"
+ run: 'composer install'
- name: Run tests
timeout-minutes: 5
diff --git a/.gitignore b/.gitignore
index 57157767..87df4963 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,22 +1,24 @@
# See https://help.github.com/ignore-files/ for more about ignoring files.
# dependencies
-vendor/
-node_modules/
+/vendor/
+/node_modules/
# misc
.DS_Store
.env
-.idea/
-.php-cs-fixer.cache
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
+/.idea/
+pnpm-debug.log*
+pnpm-error.log*
*.swp
-# dependency lock file
-composer.lock
+# testing/tooling output
+.php-cs-fixer.cache
+.phpunit.cache
+.phpunit.result.cache
+/build/
# overrides for local tooling
-/phpstan.neon
-/phpstan-baseline.neon
+phpstan.neon
+phpstan-baseline.neon
+phpunit.xml
diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php
index 3793481e..5178c485 100644
--- a/.php-cs-fixer.php
+++ b/.php-cs-fixer.php
@@ -6,7 +6,7 @@
$finder = (new Finder())
->in(__DIR__)
- ->name(['*.php', '*.inc']);
+ ->append([__FILE__]);
return (new Config())
->setParallelConfig(ParallelConfigFactory::detect(null, null, 2 ** 18 - 1))
diff --git a/.prettierignore b/.prettierignore
index b54b3b09..ab84bc8a 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,2 +1,5 @@
/composer.lock
/pnpm-lock.yaml
+
+# SVG files will be optimized/prettified with other tools
+**/*.svg
diff --git a/Admin/AdminSearchClause.php b/Admin/AdminSearchClause.php
index b3307cbd..3534fa7c 100644
--- a/Admin/AdminSearchClause.php
+++ b/Admin/AdminSearchClause.php
@@ -142,33 +142,16 @@ private static function getOperatorString($operator)
{
$operator = intval($operator);
- switch ($operator) {
- case self::OP_EQUALS:
- return '=';
-
- case self::OP_GT:
- return '>';
-
- case self::OP_GTE:
- return '>=';
-
- case self::OP_LT:
- return '<';
-
- case self::OP_LTE:
- return '<=';
-
- case self::OP_CONTAINS:
- return 'like';
-
- case self::OP_STARTS_WITH:
- return 'like';
-
- case self::OP_ENDS_WITH:
- return 'like';
-
- default:
- throw new AdminException('Unknown operator in clause: ' . $operator);
- }
+ return match ($operator) {
+ self::OP_EQUALS => '=',
+ self::OP_GT => '>',
+ self::OP_GTE => '>=',
+ self::OP_LT => '<',
+ self::OP_LTE => '<=',
+ self::OP_CONTAINS => 'like',
+ self::OP_STARTS_WITH => 'like',
+ self::OP_ENDS_WITH => 'like',
+ default => throw new AdminException('Unknown operator in clause: ' . $operator),
+ };
}
}
diff --git a/Admin/AdminSearchOperatorFlydown.php b/Admin/AdminSearchOperatorFlydown.php
index d3dbdc7a..25aeaeaf 100644
--- a/Admin/AdminSearchOperatorFlydown.php
+++ b/Admin/AdminSearchOperatorFlydown.php
@@ -41,33 +41,16 @@ public function display()
private static function getOperatorTitle($id)
{
- switch ($id) {
- case AdminSearchClause::OP_EQUALS:
- return Admin::_('is');
-
- case AdminSearchClause::OP_GT:
- return '>';
-
- case AdminSearchClause::OP_GTE:
- return '>=';
-
- case AdminSearchClause::OP_LT:
- return '<';
-
- case AdminSearchClause::OP_LTE:
- return '<=';
-
- case AdminSearchClause::OP_CONTAINS:
- return Admin::_('contains');
-
- case AdminSearchClause::OP_STARTS_WITH:
- return Admin::_('starts with');
-
- case AdminSearchClause::OP_ENDS_WITH:
- return Admin::_('ends with');
-
- default:
- throw new Exception('AdminSearchOperatorFlydown: unknown operator');
- }
+ return match ($id) {
+ AdminSearchClause::OP_EQUALS => Admin::_('is'),
+ AdminSearchClause::OP_GT => '>',
+ AdminSearchClause::OP_GTE => '>=',
+ AdminSearchClause::OP_LT => '<',
+ AdminSearchClause::OP_LTE => '<=',
+ AdminSearchClause::OP_CONTAINS => Admin::_('contains'),
+ AdminSearchClause::OP_STARTS_WITH => Admin::_('starts with'),
+ AdminSearchClause::OP_ENDS_WITH => Admin::_('ends with'),
+ default => throw new Exception('AdminSearchOperatorFlydown: unknown operator'),
+ };
}
}
diff --git a/Admin/AdminTitleLinkCellRenderer.php b/Admin/AdminTitleLinkCellRenderer.php
index b49b4dc1..170b3670 100644
--- a/Admin/AdminTitleLinkCellRenderer.php
+++ b/Admin/AdminTitleLinkCellRenderer.php
@@ -77,50 +77,22 @@ public function setFromStock($stock_id, $overwrite_properties = true)
$class = null;
- switch ($stock_id) {
- case 'document':
- $class = 'admin-title-link-cell-renderer-document';
- break;
-
- case 'document-with-contents':
- $class = 'admin-title-link-cell-renderer-document-with-contents';
- break;
-
- case 'edit':
- $class = 'admin-title-link-cell-renderer-edit';
- break;
-
- case 'file-save-as':
- $class = 'admin-title-link-cell-renderer-file-save-as';
- break;
-
- case 'folder-with-contents':
- $class = 'admin-title-link-cell-renderer-folder-with-contents';
- break;
-
- case 'folder':
- $class = 'admin-title-link-cell-renderer-folder';
- break;
-
- case 'person':
- $class = 'admin-title-link-cell-renderer-person';
- break;
-
- case 'product':
- $class = 'admin-title-link-cell-renderer-product';
- break;
-
- case 'download':
- $class = 'admin-title-link-cell-renderer-download';
- break;
-
- default:
- throw new SwatUndefinedStockTypeException(
- "Stock type with id of '{$stock_id}' not found.",
- 0,
- $stock_id
- );
- }
+ $class = match ($stock_id) {
+ 'document' => 'admin-title-link-cell-renderer-document',
+ 'document-with-contents' => 'admin-title-link-cell-renderer-document-with-contents',
+ 'edit' => 'admin-title-link-cell-renderer-edit',
+ 'file-save-as' => 'admin-title-link-cell-renderer-file-save-as',
+ 'folder-with-contents' => 'admin-title-link-cell-renderer-folder-with-contents',
+ 'folder' => 'admin-title-link-cell-renderer-folder',
+ 'person' => 'admin-title-link-cell-renderer-person',
+ 'product' => 'admin-title-link-cell-renderer-product',
+ 'download' => 'admin-title-link-cell-renderer-download',
+ default => throw new SwatUndefinedStockTypeException(
+ "Stock type with id of '{$stock_id}' not found.",
+ 0,
+ $stock_id
+ ),
+ };
$this->stock_class = $class;
$this->last_stock_id = $stock_id;
diff --git a/Admin/components/AdminComponent/details.xml b/Admin/components/AdminComponent/details.xml
index 58cb41c3..20343178 100644
--- a/Admin/components/AdminComponent/details.xml
+++ b/Admin/components/AdminComponent/details.xml
@@ -1,118 +1,117 @@
-
+
-
-
+
+
+
+
+ Edit Component
+ AdminComponent/Edit?id=%s
+ edit
+
+
+ Delete Component
+ AdminComponent/Delete?id=%s
+ delete
+
+
+
+
+
+ Short Name
+
+ shortname
+
+
+
+ Section
+
+ section.title
+
+
+
+ Show in Menu?
+
+ visible
+
+
+
+ Enabled?
+
+ enabled
+
+
+
+ Groups
+
+ groups_summary
+ text/xml
+
+
+
-
-
- Edit Component
- AdminComponent/Edit?id=%s
- edit
-
-
- Delete Component
- AdminComponent/Delete?id=%s
- delete
-
-
-
-
- Description
-
- description
-
-
-
- Short Name
-
- shortname
-
-
-
- Section
-
- section.title
-
-
-
- Show in Menu?
-
- visible
-
-
-
- Enabled?
-
- enabled
-
-
-
- Groups
-
- groups_summary
- text/xml
-
-
-
+
-
-
-
- Sub-Components
-
-
- Create a New Sub-Component
- AdminSubComponent/Edit?parent=%s
- create
-
-
- Change Sub-Component Order
- AdminSubComponent/Order?parent=%s
- change-order
-
-
-
-
-
-
- id
-
-
-
- Title
-
- title
- AdminSubComponent/Edit?id=%s
- id
- edit
-
-
-
- Short Name
-
- shortname
-
-
-
- Show in Menu
-
- visible
-
-
-
-
-
- delete…
-
-
- show
-
-
- hide
-
-
-
-
-
+
+ Sub-Components
+
+
+ Create a New Sub-Component
+ AdminSubComponent/Edit?parent=%s
+ create
+
+
+ Change Sub-Component Order
+ AdminSubComponent/Order?parent=%s
+ change-order
+
+
+
+
+
+
+ id
+
+
+
+ Title
+
+ title
+ AdminSubComponent/Edit?id=%s
+ id
+ edit
+
+
+
+ Short Name
+
+ shortname
+
+
+
+ Show in Menu
+
+ visible
+
+
+
+
+
+ delete…
+
+
+ show
+
+
+ hide
+
+
+
+
+
diff --git a/Admin/components/AdminComponent/edit.xml b/Admin/components/AdminComponent/edit.xml
index d90126b5..c5f1190f 100644
--- a/Admin/components/AdminComponent/edit.xml
+++ b/Admin/components/AdminComponent/edit.xml
@@ -1,53 +1,53 @@
-
+
-
-
- Component
-
-
- Title
-
- true
- 255
-
-
-
- Short Name
-
- true
- 255
-
-
-
- Section
-
- true
-
-
-
- Show in Menu?
-
- true
-
-
-
- Enabled?
-
- true
-
-
-
- Description
-
-
-
- Groups
-
-
-
-
-
+
+
+ Component
+
+
+ Title
+
+ true
+ 255
+
+
+
+ Short Name
+
+ true
+ 255
+
+
+
+ Section
+
+ true
+
+
+
+ Show in Menu?
+
+ true
+
+
+
+ Enabled?
+
+ true
+
+
+
+ Description
+
+
+
+ Groups
+
+
+
+
+
diff --git a/Admin/components/AdminComponent/index.xml b/Admin/components/AdminComponent/index.xml
index fc6716dc..b6ee6568 100644
--- a/Admin/components/AdminComponent/index.xml
+++ b/Admin/components/AdminComponent/index.xml
@@ -1,86 +1,86 @@
-
+
-
-
- Components
-
-
- New Component
- AdminComponent/Edit
- create
-
-
-
-
-
- section
- section
-
- section_title
-
-
- Change Order
- AdminComponent/Order?parent=%s
- section
- section_order_sensitive
-
-
-
-
- id
-
-
-
- Title
-
- title
- AdminComponent/Details?id=%s
- id
-
-
-
- Short Name
-
- shortname
-
-
-
- Show in Menu
-
- visible
-
-
-
- Enabled
-
- enabled
-
-
-
-
-
- delete…
-
-
- show
-
-
- hide
-
-
- enable
-
-
- disable
-
-
- change section…
-
- false
-
-
-
-
-
+
+
+ Components
+
+
+ New Component
+ AdminComponent/Edit
+ create
+
+
+
+
+
+ section
+ section
+
+ section_title
+
+
+ Change Order
+ AdminComponent/Order?parent=%s
+ section
+ section_order_sensitive
+
+
+
+
+ id
+
+
+
+ Title
+
+ title
+ AdminComponent/Details?id=%s
+ id
+
+
+
+ Short Name
+
+ shortname
+
+
+
+ Show in Menu
+
+ visible
+
+
+
+ Enabled
+
+ enabled
+
+
+
+
+
+ delete…
+
+
+ show
+
+
+ hide
+
+
+ enable
+
+
+ disable
+
+
+ change section…
+
+ false
+
+
+
+
+
diff --git a/Admin/components/AdminGroup/edit.xml b/Admin/components/AdminGroup/edit.xml
index ff45f051..46b27bdb 100644
--- a/Admin/components/AdminGroup/edit.xml
+++ b/Admin/components/AdminGroup/edit.xml
@@ -1,30 +1,30 @@
-
+
-
-
- Group
-
-
- Title
-
- true
- 255
-
-
-
- Component Access
- false
-
-
-
- Users in Group
- false
-
-
-
-
-
+
+
+ Group
+
+
+ Title
+
+ true
+ 255
+
+
+
+ Component Access
+ false
+
+
+
+ Users in Group
+ false
+
+
+
+
+
diff --git a/Admin/components/AdminGroup/index.xml b/Admin/components/AdminGroup/index.xml
index 42bc9166..d60ed4aa 100644
--- a/Admin/components/AdminGroup/index.xml
+++ b/Admin/components/AdminGroup/index.xml
@@ -1,38 +1,38 @@
-
+
-
-
- Groups
-
-
- New Group
- AdminGroup/Edit
- create
-
-
-
-
-
-
- id
-
-
-
- Title
-
- title
- AdminGroup/Edit?id=%s
- id
- edit
-
-
-
-
-
- delete…
-
-
-
-
+
+
+ Groups
+
+
+ New Group
+ AdminGroup/Edit
+ create
+
+
+
+
+
+
+ id
+
+
+
+ Title
+
+ title
+ AdminGroup/Edit?id=%s
+ id
+ edit
+
+
+
+
+
+ delete…
+
+
+
+
diff --git a/Admin/components/AdminSection/edit.xml b/Admin/components/AdminSection/edit.xml
index 3d8095e1..076e9d46 100644
--- a/Admin/components/AdminSection/edit.xml
+++ b/Admin/components/AdminSection/edit.xml
@@ -1,31 +1,31 @@
-
+
-
- Section
-
-
- Title
-
- true
- 255
-
-
-
- Show in Menu?
-
- true
-
-
-
- Description
-
- 255
-
-
-
-
-
+
+ Section
+
+
+ Title
+
+ true
+ 255
+
+
+
+ Show in Menu?
+
+ true
+
+
+
+ Description
+
+ 255
+
+
+
+
+
diff --git a/Admin/components/AdminSection/index.xml b/Admin/components/AdminSection/index.xml
index 60912223..7cb7bd01 100644
--- a/Admin/components/AdminSection/index.xml
+++ b/Admin/components/AdminSection/index.xml
@@ -1,55 +1,55 @@
-
+
-
-
- Sections
-
-
- New Section
- AdminSection/Edit
- create
-
-
- Change Order
- AdminSection/Order
- change-order
-
-
-
-
-
-
- id
-
-
-
- Title
-
- title
- AdminSection/Edit?id=%s
- id
- edit
-
-
-
- Show in Menu
-
- visible
-
-
-
-
-
- delete…
-
-
- show
-
-
- hide
-
-
-
-
+
+
+ Sections
+
+
+ New Section
+ AdminSection/Edit
+ create
+
+
+ Change Order
+ AdminSection/Order
+ change-order
+
+
+
+
+
+
+ id
+
+
+
+ Title
+
+ title
+ AdminSection/Edit?id=%s
+ id
+ edit
+
+
+
+ Show in Menu
+
+ visible
+
+
+
+
+
+ delete…
+
+
+ show
+
+
+ hide
+
+
+
+
diff --git a/Admin/components/AdminSite/Login.php b/Admin/components/AdminSite/Login.php
index 00c492b5..a3b56d43 100644
--- a/Admin/components/AdminSite/Login.php
+++ b/Admin/components/AdminSite/Login.php
@@ -121,8 +121,7 @@ protected function display()
private function displayJavaScript()
{
try {
- $email = (isset($this->app->cookie->email))
- ? $this->app->cookie->email : '';
+ $email = $this->app->cookie->email ?? '';
} catch (SiteCookieException $e) {
$this->app->cookie->removeCookie('email', '/');
$email = '';
diff --git a/Admin/components/AdminSite/Logout.php b/Admin/components/AdminSite/Logout.php
index cc8607e5..86274383 100644
--- a/Admin/components/AdminSite/Logout.php
+++ b/Admin/components/AdminSite/Logout.php
@@ -32,8 +32,7 @@ protected function processInternal()
$this->app->messages->add($message);
// go back where we came from
- $url = (isset($_SERVER['HTTP_REFERER']))
- ? $_SERVER['HTTP_REFERER'] : 'Front';
+ $url = $_SERVER['HTTP_REFERER'] ?? 'Front';
$this->app->relocate($url);
}
diff --git a/Admin/components/AdminSite/change-password.xml b/Admin/components/AdminSite/change-password.xml
index 493ffbc2..7af1ccd9 100644
--- a/Admin/components/AdminSite/change-password.xml
+++ b/Admin/components/AdminSite/change-password.xml
@@ -1,40 +1,43 @@
-
+
-
-
- Change Password
-
- The password provided to you was automatically generated. For your security, please choose a new password for your account.
-
-
-
- Old Password
-
- false
- 4
- true
-
-
-
- New Password
-
- false
- 4
- true
-
-
-
- Confirm New Password
-
- true
-
-
-
-
-
+
+
+ Change Password
+
+
+ The password provided to you was automatically generated.
+ For your security, please choose a new password for your account.
+
+
+
+
+ Old Password
+
+ false
+ 4
+ true
+
+
+
+ New Password
+
+ false
+ 4
+ true
+
+
+
+ Confirm New Password
+
+ true
+
+
+
+
+
diff --git a/Admin/components/AdminSite/forgot-password.xml b/Admin/components/AdminSite/forgot-password.xml
index 095d3bf2..6e5a3bf2 100644
--- a/Admin/components/AdminSite/forgot-password.xml
+++ b/Admin/components/AdminSite/forgot-password.xml
@@ -1,27 +1,30 @@
-
+
-
- Reset Forgotten Password
-
-
-
-
- Forgot your password? No problem. Simply enter your email address and a link to create a new password will be sent to you.
-
-
- Email
-
- true
- 25
-
-
-
-
-
-
+
+ Reset Forgotten Password
+
+
+
+
+
+ Forgot your password? No problem. Simply enter your email address,
+ and a link to create a new password will be sent to you.
+
+
+
+ Email
+
+ true
+ 25
+
+
+
+
+
+
diff --git a/Admin/components/AdminSite/front.xml b/Admin/components/AdminSite/front.xml
index f614e5a4..7b9f1059 100644
--- a/Admin/components/AdminSite/front.xml
+++ b/Admin/components/AdminSite/front.xml
@@ -1,8 +1,8 @@
-
+
-
-
- To get started, choose an item from the menu to the left.
-
+
+
+ To get started, choose an item from the menu to the left.
+
diff --git a/Admin/components/AdminSite/login.xml b/Admin/components/AdminSite/login.xml
index e97e6a10..42f34d05 100644
--- a/Admin/components/AdminSite/login.xml
+++ b/Admin/components/AdminSite/login.xml
@@ -1,41 +1,40 @@
-
+
-
- Login
-
-
- Email
- SHOW_OPTIONAL
-
- true
- 25
- 1
-
-
-
- Password
- SHOW_OPTIONAL
-
- true
- 18
- 2
-
-
-
-
- Forgot your password?
- AdminSite/ForgotPassword
-
-
-
-
-
-
-
+
+ Login
+
+
+ Email
+ SHOW_OPTIONAL
+
+ true
+ 25
+ 1
+
+
+
+ Password
+ SHOW_OPTIONAL
+
+ true
+ 18
+ 2
+
+
+
+
+ Forgot your password?
+ AdminSite/ForgotPassword
+
+
+
+
+
+
diff --git a/Admin/components/AdminSite/profile.xml b/Admin/components/AdminSite/profile.xml
index 2016c9d3..8e610603 100644
--- a/Admin/components/AdminSite/profile.xml
+++ b/Admin/components/AdminSite/profile.xml
@@ -1,82 +1,90 @@
-
+
-
-
- Login Settings
-
-
- Name
-
- true
-
-
-
- Email
-
- 50
- true
-
-
-
- false
- 2FA Enabled
-
- Yes, two factor authentication is enabled for this account.
-
-
-
- Change Password
- false
-
- Old Password
-
- false
- 4
-
-
-
- New Password
-
- false
- 4
-
-
-
- Confirm New Password
-
-
-
-
- Two Factor Authentication
- false
- false
-
- Step 1: Scan the QR code below using an authenticator app like 1Password, LastPass, Google Authenticator, or Authy.
-
- Scan QR Code
-
- text/xml
-
-
-
-
- Step 2: After scanning the QR code, your app will display a verification code which you will enter below
-
- Verification code
-
- false
- 6
- 7
-
-
-
-
-
-
-
+
+
+ Login Settings
+
+
+ Name
+
+ true
+
+
+
+ Email
+
+ 50
+ true
+
+
+
+ false
+ 2FA Enabled
+
+
+ Yes, two factor authentication is enabled for this account.
+
+
+
+
+ Change Password
+ false
+
+ Old Password
+
+ false
+ 4
+
+
+
+ New Password
+
+ false
+ 4
+
+
+
+ Confirm New Password
+
+
+
+
+ Two Factor Authentication
+ false
+ false
+
+
+ Step 1: Scan the QR code below using an authenticator app like 1Password, LastPass, Google
+ Authenticator, or Authy.
+
+
+ Scan QR Code
+
+ text/xml
+
+
+
+
+
+ Step 2: After scanning the QR code, your app will display a verification code which you will
+ enter below
+
+
+ Verification code
+
+ false
+ 6
+ 7
+
+
+
+
+
+
+
diff --git a/Admin/components/AdminSite/reset-password.xml b/Admin/components/AdminSite/reset-password.xml
index fca62fc2..e4610aff 100644
--- a/Admin/components/AdminSite/reset-password.xml
+++ b/Admin/components/AdminSite/reset-password.xml
@@ -1,29 +1,29 @@
-
+
-
- Update Password
-
-
-
-
- New Password
- Password is case-sensitive.
-
- 4
- true
-
-
-
- Confirm New Password
-
-
-
-
-
-
+
+ Update Password
+
+
+
+
+ New Password
+ Password is case-sensitive.
+
+ 4
+ true
+
+
+
+ Confirm New Password
+
+
+
+
+
+
diff --git a/Admin/components/AdminSite/two_factor_authentication.xml b/Admin/components/AdminSite/two_factor_authentication.xml
index f381e2f2..2c7aa2ef 100644
--- a/Admin/components/AdminSite/two_factor_authentication.xml
+++ b/Admin/components/AdminSite/two_factor_authentication.xml
@@ -1,27 +1,29 @@
-
+
-
-
- Two Factor Authentication
-
- You’ll need the six-digit code from your authenticator to continue.
-
-
-
- Verification code
-
- false
- 6
- 7
- true
-
-
-
-
-
+
+
+ Two Factor Authentication
+
+
+ You’ll need the six-digit code from your authenticator to continue.
+
+
+
+
+ Verification code
+
+ false
+ 6
+ 7
+ true
+
+
+
+
+
diff --git a/Admin/components/AdminSubComponent/edit.xml b/Admin/components/AdminSubComponent/edit.xml
index 6c8520f4..94884bae 100644
--- a/Admin/components/AdminSubComponent/edit.xml
+++ b/Admin/components/AdminSubComponent/edit.xml
@@ -1,33 +1,33 @@
-
+
-
-
- Sub-Component
-
-
- Title
-
- true
- 255
-
-
-
- Short Name
-
- true
- 50
-
-
-
- Show in menu?
-
- true
-
-
-
-
-
+
+
+ Sub-Component
+
+
+ Title
+
+ true
+ 255
+
+
+
+ Short Name
+
+ true
+ 50
+
+
+
+ Show in menu?
+
+ true
+
+
+
+
+
diff --git a/Admin/components/AdminUser/details.xml b/Admin/components/AdminUser/details.xml
index 26e5fdc9..95342dec 100644
--- a/Admin/components/AdminUser/details.xml
+++ b/Admin/components/AdminUser/details.xml
@@ -1,29 +1,29 @@
-
+
-
- Login History
-
-
-
- Login Time
-
- login_date
-
-
-
- Agent
-
- login_agent
-
-
-
- Remote IP
-
- remote_ip
-
-
-
-
-
+
+ Login History
+
+
+
+ Login Time
+
+ login_date
+
+
+
+ Agent
+
+ login_agent
+
+
+
+ Remote IP
+
+ remote_ip
+
+
+
+
+
diff --git a/Admin/components/AdminUser/edit.xml b/Admin/components/AdminUser/edit.xml
index 8c754b06..4b702b9d 100644
--- a/Admin/components/AdminUser/edit.xml
+++ b/Admin/components/AdminUser/edit.xml
@@ -1,70 +1,70 @@
-
+
-
-
- User
-
-
- Name
-
- true
- 100
-
-
-
- Email
-
- true
- 50
-
-
-
- Enabled
-
- true
-
-
-
- 2FA Enabled
-
- false
-
-
-
- Belongs to Groups
-
-
-
- Belongs to Sites
- false
-
-
-
- Change Password
- false
-
- New Password
-
- false
- 4
-
-
-
- Confirm New Password
- Leave Password fields blank for them to remain the same.
-
-
-
- Force User to Change Password on Login
-
- true
-
-
-
-
-
-
+
+
+ User
+
+
+ Name
+
+ true
+ 100
+
+
+
+ Email
+
+ true
+ 50
+
+
+
+ Enabled
+
+ true
+
+
+
+ 2FA Enabled
+
+ false
+
+
+
+ Belongs to Groups
+
+
+
+ Belongs to Sites
+ false
+
+
+
+ Change Password
+ false
+
+ New Password
+
+ false
+ 4
+
+
+
+ Confirm New Password
+ Leave Password fields blank for them to remain the same.
+
+
+
+ Force User to Change Password on Login
+
+ true
+
+
+
+
+
+
diff --git a/Admin/components/AdminUser/index.xml b/Admin/components/AdminUser/index.xml
index 873931a3..29cc88d3 100644
--- a/Admin/components/AdminUser/index.xml
+++ b/Admin/components/AdminUser/index.xml
@@ -1,85 +1,85 @@
-
+
-
-
- Admin Users
-
-
- New User
- AdminUser/Edit
- create
-
-
-
- false
-
-
-
-
-
- id
-
-
-
- is_active
-
- active_title
-
-
-
- Email
-
- email
- AdminUser/Edit?id=%s
- id
- person
-
-
-
- Name
-
- name
-
-
-
- Enabled
-
- enabled
-
-
-
- 2FA Enabled
-
- two_fa_enabled
-
-
-
- Last Login
-
- last_login
-
-
- history
- id
- last_login
-
-
-
-
-
- reactivate…
-
-
- delete…
-
-
- enable
-
-
- disable
-
-
-
-
+
+
+ Admin Users
+
+
+ New User
+ AdminUser/Edit
+ create
+
+
+
+ false
+
+
+
+
+
+ id
+
+
+
+ is_active
+
+ active_title
+
+
+
+ Email
+
+ email
+ AdminUser/Edit?id=%s
+ id
+ person
+
+
+
+ Name
+
+ name
+
+
+
+ Enabled
+
+ enabled
+
+
+
+ 2FA Enabled
+
+ two_fa_enabled
+
+
+
+ Last Login
+
+ last_login
+
+
+ history
+ id
+ last_login
+
+
+
+
+
+ reactivate…
+
+
+ delete…
+
+
+ enable
+
+
+ disable
+
+
+
+
diff --git a/Admin/components/AdminUser/login-history.xml b/Admin/components/AdminUser/login-history.xml
index 188e11d9..c7a5a38d 100644
--- a/Admin/components/AdminUser/login-history.xml
+++ b/Admin/components/AdminUser/login-history.xml
@@ -1,38 +1,38 @@
-
+
-
- Admin User Login History
-
-
-
- Email
-
- email
- AdminUser/Details?id=%s
- usernum
-
-
-
- Login Time
-
- login_date
-
-
-
- Agent
-
- login_agent
-
-
-
- Remote IP
-
- remote_ip
-
-
-
-
-
-
+
+ Admin User Login History
+
+
+
+ Email
+
+ email
+ AdminUser/Details?id=%s
+ usernum
+
+
+
+ Login Time
+
+ login_date
+
+
+
+ Agent
+
+ login_agent
+
+
+
+ Remote IP
+
+ remote_ip
+
+
+
+
+
+
diff --git a/Admin/dataobjects/AdminUser.php b/Admin/dataobjects/AdminUser.php
index 3bf32bbe..a0e3b054 100644
--- a/Admin/dataobjects/AdminUser.php
+++ b/Admin/dataobjects/AdminUser.php
@@ -315,7 +315,7 @@ public function resetPassword()
{
$this->checkDB();
- $password_tag = SwatString::hash(uniqid(rand(), true));
+ $password_tag = SwatString::hash(uniqid(random_int(0, mt_getrandmax()), true));
$now = new SwatDate();
$now->toUTC();
diff --git a/Admin/pages/AdminDBDelete.php b/Admin/pages/AdminDBDelete.php
index 5b2430a9..2cc11466 100644
--- a/Admin/pages/AdminDBDelete.php
+++ b/Admin/pages/AdminDBDelete.php
@@ -79,7 +79,7 @@ protected function relocate()
// if the component name is in the relocate url, relocate to the
// the component index page to prevent relocating to a details page that
// will no longer exist.
- if (mb_strpos($url, $component) === false
+ if (!str_contains($url, $component)
|| $form->button->id == 'no_button') {
parent::relocate();
} else {
diff --git a/Admin/pages/AdminObjectEdit.php b/Admin/pages/AdminObjectEdit.php
index fc62bcd4..544d80fc 100644
--- a/Admin/pages/AdminObjectEdit.php
+++ b/Admin/pages/AdminObjectEdit.php
@@ -151,7 +151,7 @@ protected function initObject()
throw new AdminNotFoundException(
sprintf(
'A %s with the id of ‘%s’ does not exist',
- get_class($this->data_object),
+ $this->data_object::class,
$this->id
)
);
@@ -417,7 +417,7 @@ protected function assignUiValueToObject(
throw new SwatInvalidPropertyException(
sprintf(
'Specified “%s” object does not have a property “%s”.',
- get_class($object),
+ $object::class,
$name
)
);
@@ -460,7 +460,7 @@ protected function assignObjectValueToUi(SwatDBDataObject $object, $name)
throw new SwatInvalidPropertyException(
sprintf(
'Specified “%s” record does not have a property “%s”.',
- get_class($object),
+ $object::class,
$name
)
);
diff --git a/Admin/pages/approval.xml b/Admin/pages/approval.xml
index 1dffa281..9f516f0e 100644
--- a/Admin/pages/approval.xml
+++ b/Admin/pages/approval.xml
@@ -1,28 +1,28 @@
-
+
-
-
-
-
- Approve
-
-
- Delete
- Are you sure you want to delete?
-
-
- Skip
-
-
- text/xml
-
-
-
-
- text/xml
-
-
-
-
+
+
+
+
+ Approve
+
+
+ Delete
+ Are you sure you want to delete?
+
+
+ Skip
+
+
+ text/xml
+
+
+
+
+ text/xml
+
+
+
+
diff --git a/Admin/pages/confirmation.xml b/Admin/pages/confirmation.xml
index 07c44fd9..1cfc9b73 100644
--- a/Admin/pages/confirmation.xml
+++ b/Admin/pages/confirmation.xml
@@ -1,23 +1,23 @@
-
+
-
-
-
-
-
-
-
- false
-
-
-
-
+
+
+
+
+
+
+
+ false
+
+
+
+
diff --git a/Admin/pages/order.xml b/Admin/pages/order.xml
index 0199d6c4..a9991af2 100644
--- a/Admin/pages/order.xml
+++ b/Admin/pages/order.xml
@@ -1,19 +1,19 @@
-
+
-
-
-
- Order Options
-
-
-
- Custom Order
-
-
-
-
-
+
+
+
+ Order Options
+
+
+
+ Custom Order
+
+
+
+
+
diff --git a/Jenkinsfile b/Jenkinsfile
deleted file mode 100644
index 29f2b653..00000000
--- a/Jenkinsfile
+++ /dev/null
@@ -1,40 +0,0 @@
-pipeline {
- agent any
- stages {
- stage('Install Composer Dependencies') {
- steps {
- sh 'rm -rf composer.lock vendor/'
- sh 'composer install'
- }
- }
-
- stage('Install NPM Dependencies') {
- environment {
- PNPM_CACHE_FOLDER = "${env.WORKSPACE}/pnpm-cache/${env.BUILD_NUMBER}"
- }
- steps {
- sh 'n -d exec engine corepack enable pnpm'
- sh 'n -d exec engine pnpm install'
- }
- }
-
- stage('Check PHP Coding Style') {
- steps {
- sh 'composer run phpcs:ci'
- }
- }
-
- stage('Check Formating') {
- steps {
- sh 'n -d exec engine pnpm format'
- }
- }
-
- stage('Check PHP Static Analysis') {
- steps {
- sh 'composer run phpstan:ci'
- }
- }
-
- }
-}
diff --git a/composer.json b/composer.json
index 02e9f130..fdd7c250 100644
--- a/composer.json
+++ b/composer.json
@@ -1,14 +1,13 @@
{
"name": "silverorange/admin",
"description": "Framework for backend admin website.",
+ "license": "LGPL-2.1",
"type": "library",
"keywords": [
"framework",
"admin",
"management"
],
- "homepage": "https://github.com/silverorange/admin",
- "license": "LGPL-2.1",
"authors": [
{
"name": "Charles Waddell",
@@ -35,11 +34,12 @@
"email": "steven@silverorange.com"
}
],
+ "homepage": "https://github.com/silverorange/admin",
"require": {
"php": ">=8.2.0",
"ext-mbstring": "*",
- "silverorange/site": "^15.3.2 || ^16.0.0",
- "silverorange/swat": "^7.9.2"
+ "silverorange/site": "^15.3.2 || ^16.1.0",
+ "silverorange/swat": "^7.10.0"
},
"require-dev": {
"bacon/bacon-qr-code": "^3.0",
@@ -49,28 +49,28 @@
"robthree/twofactorauth": "^3.0"
},
"suggest": {
- "robthree/twofactorauth": "required for the use of two factor authentication",
- "bacon/bacon-qr-code": "required to show QR codes for two factor auth"
+ "bacon/bacon-qr-code": "required to show QR codes for two factor auth",
+ "robthree/twofactorauth": "required for the use of two factor authentication"
},
"autoload": {
"classmap": [
"Admin/"
]
},
+ "config": {
+ "allow-plugins": {
+ "php-http/discovery": true
+ },
+ "sort-packages": true
+ },
"scripts": {
"phpcs": "./vendor/bin/php-cs-fixer check -v",
"phpcs:ci": "./vendor/bin/php-cs-fixer check --config=.php-cs-fixer.php --no-interaction --show-progress=none --diff --using-cache=no -vvv",
"phpcs:fix": "./vendor/bin/php-cs-fixer fix -v",
"phpstan": "./vendor/bin/phpstan analyze",
- "phpstan:ci": "./vendor/bin/phpstan analyze -vvv --no-progress --memory-limit 2G",
"phpstan:baseline": "./vendor/bin/phpstan analyze --generate-baseline",
+ "phpstan:ci": "./vendor/bin/phpstan analyze -vvv --no-progress --memory-limit 2G",
"rector": "./vendor/bin/rector --dry-run",
"rector:fix": "./vendor/bin/rector"
- },
- "config": {
- "sort-packages": true,
- "allow-plugins": {
- "php-http/discovery": true
- }
}
}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 00000000..ff17926a
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,5442 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "0032d225ae06cc143001d4e78a07e419",
+ "packages": [
+ {
+ "name": "aws/aws-crt-php",
+ "version": "v1.2.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/awslabs/aws-crt-php.git",
+ "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e",
+ "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5",
+ "yoast/phpunit-polyfills": "^1.0"
+ },
+ "suggest": {
+ "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality."
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "AWS SDK Common Runtime Team",
+ "email": "aws-sdk-common-runtime@amazon.com"
+ }
+ ],
+ "description": "AWS Common Runtime for PHP",
+ "homepage": "https://github.com/awslabs/aws-crt-php",
+ "keywords": [
+ "amazon",
+ "aws",
+ "crt",
+ "sdk"
+ ],
+ "support": {
+ "issues": "https://github.com/awslabs/aws-crt-php/issues",
+ "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7"
+ },
+ "time": "2024-10-18T22:15:13+00:00"
+ },
+ {
+ "name": "aws/aws-sdk-php",
+ "version": "3.388.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/aws/aws-sdk-php.git",
+ "reference": "ff7499bfa2b987c8fbae495fe0e851cfdde6172f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ff7499bfa2b987c8fbae495fe0e851cfdde6172f",
+ "reference": "ff7499bfa2b987c8fbae495fe0e851cfdde6172f",
+ "shasum": ""
+ },
+ "require": {
+ "aws/aws-crt-php": "^1.2.3",
+ "ext-json": "*",
+ "ext-pcre": "*",
+ "ext-simplexml": "*",
+ "guzzlehttp/guzzle": "^7.4.5",
+ "guzzlehttp/promises": "^2.0",
+ "guzzlehttp/psr7": "^2.4.5",
+ "mtdowling/jmespath.php": "^2.9.1",
+ "php": ">=8.1",
+ "psr/http-message": "^1.0 || ^2.0",
+ "symfony/filesystem": "^v5.4.45 || ^v6.4.3 || ^v7.1.0 || ^v8.0.0"
+ },
+ "require-dev": {
+ "andrewsville/php-token-reflection": "^1.4",
+ "aws/aws-php-sns-message-validator": "~1.0",
+ "behat/behat": "~3.0",
+ "composer/composer": "^2.7.8",
+ "dms/phpunit-arraysubset-asserts": "^v0.5.0",
+ "doctrine/cache": "~1.4",
+ "ext-dom": "*",
+ "ext-openssl": "*",
+ "ext-sockets": "*",
+ "phpunit/phpunit": "^10.0",
+ "psr/cache": "^2.0 || ^3.0",
+ "psr/simple-cache": "^2.0 || ^3.0",
+ "sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0",
+ "yoast/phpunit-polyfills": "^2.0"
+ },
+ "suggest": {
+ "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
+ "doctrine/cache": "To use the DoctrineCacheAdapter",
+ "ext-curl": "To send requests using cURL",
+ "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
+ "ext-pcntl": "To use client-side monitoring",
+ "ext-sockets": "To use client-side monitoring"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Aws\\": "src/"
+ },
+ "exclude-from-classmap": [
+ "src/data/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Amazon Web Services",
+ "homepage": "https://aws.amazon.com"
+ }
+ ],
+ "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
+ "homepage": "https://aws.amazon.com/sdk-for-php",
+ "keywords": [
+ "amazon",
+ "aws",
+ "cloud",
+ "dynamodb",
+ "ec2",
+ "glacier",
+ "s3",
+ "sdk"
+ ],
+ "support": {
+ "forum": "https://github.com/aws/aws-sdk-php/discussions",
+ "issues": "https://github.com/aws/aws-sdk-php/issues",
+ "source": "https://github.com/aws/aws-sdk-php/tree/3.388.8"
+ },
+ "time": "2026-07-16T18:07:15+00:00"
+ },
+ {
+ "name": "codescale/ffmpeg-php",
+ "version": "3.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/char0n/ffmpeg-php.git",
+ "reference": "9a38fdc2a3b2bf2d5df9d28a571f05a1e71c0cf8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/char0n/ffmpeg-php/zipball/9a38fdc2a3b2bf2d5df9d28a571f05a1e71c0cf8",
+ "reference": "9a38fdc2a3b2bf2d5df9d28a571f05a1e71c0cf8",
+ "shasum": ""
+ },
+ "require": {
+ "ext-gd": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "php": ">=7"
+ },
+ "require-dev": {
+ "iautomation/filesystem-helper": "1.0.0",
+ "phpdocumentor/phpdocumentor": "3.1.2",
+ "phpunit/phpunit": "8.5.21",
+ "squizlabs/php_codesniffer": "3.6.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Char0n\\FFMpegPHP\\": "src",
+ "Char0n\\FFMpegPHP\\Tests\\": "tests"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "char0n (Vladimír Gorej)",
+ "email": "vladimir.gorej@gmail.com",
+ "homepage": "https://www.linkedin.com/in/vladimirgorej/",
+ "role": "Software engineer"
+ }
+ ],
+ "description": "PHP wrapper for FFmpeg application",
+ "homepage": "https://github.com/char0n/ffmpeg-php",
+ "keywords": [
+ "audio",
+ "ffmpeg",
+ "video"
+ ],
+ "support": {
+ "issues": "https://github.com/char0n/ffmpeg-php/issues",
+ "source": "https://github.com/char0n/ffmpeg-php/tree/3.2.2"
+ },
+ "time": "2022-08-31T10:47:02+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^12",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^10.5",
+ "psalm/plugin-phpunit": "^0.18.3",
+ "vimeo/psalm": "^5.21"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/3.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-02-05T11:56:58+00:00"
+ },
+ {
+ "name": "egulias/email-validator",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/egulias/EmailValidator.git",
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "^2.0 || ^3.0",
+ "php": ">=8.1",
+ "symfony/polyfill-intl-idn": "^1.26"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.2",
+ "vimeo/psalm": "^5.12"
+ },
+ "suggest": {
+ "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Egulias\\EmailValidator\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eduardo Gulias Davis"
+ }
+ ],
+ "description": "A library for validating emails against several RFCs",
+ "homepage": "https://github.com/egulias/EmailValidator",
+ "keywords": [
+ "email",
+ "emailvalidation",
+ "emailvalidator",
+ "validation",
+ "validator"
+ ],
+ "support": {
+ "issues": "https://github.com/egulias/EmailValidator/issues",
+ "source": "https://github.com/egulias/EmailValidator/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/egulias",
+ "type": "github"
+ }
+ ],
+ "time": "2025-03-06T22:45:56+00:00"
+ },
+ {
+ "name": "guzzlehttp/guzzle",
+ "version": "7.14.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "fa88c57803501ad0770f5cddb1e60525d49da9a1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fa88c57803501ad0770f5cddb1e60525d49da9a1",
+ "reference": "fa88c57803501ad0770f5cddb1e60525d49da9a1",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/promises": "^2.5.1",
+ "guzzlehttp/psr7": "^2.12.5",
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-client": "^1.0",
+ "symfony/deprecation-contracts": "^2.5 || ^3.0",
+ "symfony/polyfill-php80": "^1.25"
+ },
+ "provide": {
+ "psr/http-client-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "ext-curl": "*",
+ "guzzle/client-integration-tests": "3.0.3",
+ "guzzlehttp/test-server": "^0.6",
+ "php-http/message-factory": "^1.1",
+ "phpunit/phpunit": "^8.5.52 || ^9.6.34",
+ "psr/log": "^1.1 || ^2.0 || ^3.0"
+ },
+ "suggest": {
+ "ext-curl": "Required for CURL handler support",
+ "ext-intl": "Required for Internationalized Domain Name (IDN) support",
+ "psr/log": "Required for using the Log middleware"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Jeremy Lindblom",
+ "email": "jeremeamia@gmail.com",
+ "homepage": "https://github.com/jeremeamia"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle is a PHP HTTP client library",
+ "keywords": [
+ "client",
+ "curl",
+ "framework",
+ "http",
+ "http client",
+ "psr-18",
+ "psr-7",
+ "rest",
+ "web service"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/guzzle/issues",
+ "source": "https://github.com/guzzle/guzzle/tree/7.14.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-07-14T18:15:01+00:00"
+ },
+ {
+ "name": "guzzlehttp/promises",
+ "version": "2.5.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/9ad1e4fc607446a055b95870c7f668e93b5cff29",
+ "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "symfony/deprecation-contracts": "^2.5 || ^3.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.52 || ^9.6.34"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle promises library",
+ "keywords": [
+ "promise"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/promises/issues",
+ "source": "https://github.com/guzzle/promises/tree/2.5.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-07-08T15:48:39+00:00"
+ },
+ {
+ "name": "guzzlehttp/psr7",
+ "version": "2.12.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "9365d578a9fd1552ad6ca9c3cb530708526feb09"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/9365d578a9fd1552ad6ca9c3cb530708526feb09",
+ "reference": "9365d578a9fd1552ad6ca9c3cb530708526feb09",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.1 || ^2.0",
+ "ralouphie/getallheaders": "^3.0",
+ "symfony/deprecation-contracts": "^2.5 || ^3.0",
+ "symfony/polyfill-php80": "^1.25"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "http-interop/http-factory-tests": "1.1.0",
+ "jshttp/mime-db": "1.54.0.1",
+ "phpunit/phpunit": "^8.5.52 || ^9.6.34"
+ },
+ "suggest": {
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Psr7\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
+ }
+ ],
+ "description": "PSR-7 message implementation that also provides common utility methods",
+ "keywords": [
+ "http",
+ "message",
+ "psr-7",
+ "request",
+ "response",
+ "stream",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/2.12.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-07-13T01:27:20+00:00"
+ },
+ {
+ "name": "jean85/pretty-package-versions",
+ "version": "2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Jean85/pretty-package-versions.git",
+ "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a",
+ "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a",
+ "shasum": ""
+ },
+ "require": {
+ "composer-runtime-api": "^2.1.0",
+ "php": "^7.4|^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.2",
+ "jean85/composer-provided-replaced-stub-package": "^1.0",
+ "phpstan/phpstan": "^2.0",
+ "phpunit/phpunit": "^7.5|^8.5|^9.6",
+ "rector/rector": "^2.0",
+ "vimeo/psalm": "^4.3 || ^5.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Jean85\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Alessandro Lai",
+ "email": "alessandro.lai85@gmail.com"
+ }
+ ],
+ "description": "A library to get pretty versions strings of installed dependencies",
+ "keywords": [
+ "composer",
+ "package",
+ "release",
+ "versions"
+ ],
+ "support": {
+ "issues": "https://github.com/Jean85/pretty-package-versions/issues",
+ "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1"
+ },
+ "time": "2025-03-19T14:43:43+00:00"
+ },
+ {
+ "name": "league/climate",
+ "version": "3.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/climate.git",
+ "reference": "66f14fb99570673597856575dfd9a48984fe49b0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/climate/zipball/66f14fb99570673597856575dfd9a48984fe49b0",
+ "reference": "66f14fb99570673597856575dfd9a48984fe49b0",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3 || ^8.0",
+ "psr/log": "^1.0 || ^2.0 || ^3.0",
+ "seld/cli-prompt": "^1.0"
+ },
+ "require-dev": {
+ "mikey179/vfsstream": "^1.6.12",
+ "mockery/mockery": "^1.6.12",
+ "phpunit/phpunit": "^9.6.21",
+ "squizlabs/php_codesniffer": "^3.10"
+ },
+ "suggest": {
+ "ext-mbstring": "If ext-mbstring is not available you MUST install symfony/polyfill-mbstring"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "League\\CLImate\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Joe Tannenbaum",
+ "email": "hey@joe.codes",
+ "homepage": "http://joe.codes/",
+ "role": "Developer"
+ },
+ {
+ "name": "Craig Duncan",
+ "email": "git@duncanc.co.uk",
+ "homepage": "https://github.com/duncan3dc",
+ "role": "Developer"
+ }
+ ],
+ "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.",
+ "keywords": [
+ "cli",
+ "colors",
+ "command",
+ "php",
+ "terminal"
+ ],
+ "support": {
+ "issues": "https://github.com/thephpleague/climate/issues",
+ "source": "https://github.com/thephpleague/climate/tree/3.11.0"
+ },
+ "time": "2026-06-09T11:34:50+00:00"
+ },
+ {
+ "name": "mtdowling/jmespath.php",
+ "version": "2.9.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jmespath/jmespath.php.git",
+ "reference": "2157c5e50e813ec6a96c1eed3be7f64a20fb32a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/2157c5e50e813ec6a96c1eed3be7f64a20fb32a8",
+ "reference": "2157c5e50e813ec6a96c1eed3be7f64a20fb32a8",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.17"
+ },
+ "require-dev": {
+ "composer/xdebug-handler": "^3.0.3",
+ "phpunit/phpunit": "^8.5.52"
+ },
+ "bin": [
+ "bin/jp.php"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.9-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/JmesPath.php"
+ ],
+ "psr-4": {
+ "JmesPath\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "description": "Declaratively specify how to extract elements from a JSON document",
+ "keywords": [
+ "json",
+ "jsonpath"
+ ],
+ "support": {
+ "issues": "https://github.com/jmespath/jmespath.php/issues",
+ "source": "https://github.com/jmespath/jmespath.php/tree/2.9.2"
+ },
+ "time": "2026-07-06T18:56:19+00:00"
+ },
+ {
+ "name": "pear/console_commandline",
+ "version": "v1.2.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pear/Console_CommandLine.git",
+ "reference": "611c5bff2e47ec5a184748cb5fedc2869098ff28"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pear/Console_CommandLine/zipball/611c5bff2e47ec5a184748cb5fedc2869098ff28",
+ "reference": "611c5bff2e47ec5a184748cb5fedc2869098ff28",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-xml": "*",
+ "pear/pear_exception": "^1.0.0",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Console": "./"
+ },
+ "exclude-from-classmap": [
+ "tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Richard Quadling",
+ "email": "rquadling@gmail.com"
+ },
+ {
+ "name": "David Jean Louis",
+ "email": "izimobil@gmail.com"
+ }
+ ],
+ "description": "A full featured command line options and arguments parser.",
+ "homepage": "https://github.com/pear/Console_CommandLine",
+ "keywords": [
+ "console"
+ ],
+ "support": {
+ "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_CommandLine",
+ "source": "https://github.com/pear/Console_CommandLine"
+ },
+ "abandoned": true,
+ "time": "2023-04-02T18:49:53+00:00"
+ },
+ {
+ "name": "pear/console_getopt",
+ "version": "v1.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pear/Console_Getopt.git",
+ "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+ "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+ "shasum": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Console": "./"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ "./"
+ ],
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Andrei Zmievski",
+ "email": "andrei@php.net",
+ "role": "Lead"
+ },
+ {
+ "name": "Stig Bakken",
+ "email": "stig@php.net",
+ "role": "Developer"
+ },
+ {
+ "name": "Greg Beaver",
+ "email": "cellog@php.net",
+ "role": "Helper"
+ }
+ ],
+ "description": "More info available on: http://pear.php.net/package/Console_Getopt",
+ "support": {
+ "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Getopt",
+ "source": "https://github.com/pear/Console_Getopt"
+ },
+ "time": "2019-11-20T18:27:48+00:00"
+ },
+ {
+ "name": "pear/http_request2",
+ "version": "v2.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pear/HTTP_Request2.git",
+ "reference": "b1c61b71128045734d757c4d3d436457ace80ea7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pear/HTTP_Request2/zipball/b1c61b71128045734d757c4d3d436457ace80ea7",
+ "reference": "b1c61b71128045734d757c4d3d436457ace80ea7",
+ "shasum": ""
+ },
+ "require": {
+ "pear/net_url2": "^2.2.0",
+ "pear/pear_exception": "^1.0.0",
+ "php": ">=5.6.0"
+ },
+ "require-dev": {
+ "pear/log": "^1",
+ "yoast/phpunit-polyfills": "^1.0.0"
+ },
+ "suggest": {
+ "ext-curl": "Allows using cURL as a request backend.",
+ "ext-fileinfo": "Adds support for looking up mime-types using finfo.",
+ "ext-openssl": "Allows handling SSL requests when not using cURL.",
+ "ext-zlib": "Allows handling gzip compressed responses."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "HTTP_Request2": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Alexey Borzov",
+ "email": "avb@php.net"
+ }
+ ],
+ "description": "Provides an easy way to perform HTTP requests.",
+ "homepage": "https://pear.php.net/package/HTTP_Request2",
+ "keywords": [
+ "PEAR",
+ "curl",
+ "http",
+ "request"
+ ],
+ "support": {
+ "docs": "https://pear.php.net/manual/en/package.http.http-request2.php",
+ "issues": "https://github.com/pear/HTTP_Request2/issues",
+ "source": "https://github.com/pear/HTTP_Request2"
+ },
+ "time": "2025-04-06T13:48:50+00:00"
+ },
+ {
+ "name": "pear/net_url2",
+ "version": "v2.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pear/Net_URL2.git",
+ "reference": "c1f2b316ed9b05e881cdb494f7550ddf817c76c8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pear/Net_URL2/zipball/c1f2b316ed9b05e881cdb494f7550ddf817c76c8",
+ "reference": "c1f2b316ed9b05e881cdb494f7550ddf817c76c8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.1.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">=3.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "Net/URL2.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ "./"
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Tom Klingenberg",
+ "email": "tkli@php.net"
+ },
+ {
+ "name": "David Coallier",
+ "email": "davidc@php.net"
+ },
+ {
+ "name": "Christian Schmidt",
+ "email": "chmidt@php.net"
+ }
+ ],
+ "description": "Class for parsing and handling URL. Provides parsing of URLs into their constituent parts (scheme, host, path etc.), URL generation, and resolving of relative URLs.",
+ "homepage": "https://github.com/pear/Net_URL2",
+ "keywords": [
+ "PEAR",
+ "net",
+ "networking",
+ "rfc3986",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "issues": "https://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_URL2",
+ "source": "https://github.com/pear/Net_URL2"
+ },
+ "time": "2025-03-24T08:03:00+00:00"
+ },
+ {
+ "name": "pear/pear-core-minimal",
+ "version": "v1.10.18",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pear/pear-core-minimal.git",
+ "reference": "c7b55789d01de0ce090d289b73f1bbd6a2f113b1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/c7b55789d01de0ce090d289b73f1bbd6a2f113b1",
+ "reference": "c7b55789d01de0ce090d289b73f1bbd6a2f113b1",
+ "shasum": ""
+ },
+ "require": {
+ "pear/console_getopt": "~1.4",
+ "pear/pear_exception": "~1.0",
+ "php": ">=5.4"
+ },
+ "replace": {
+ "rsky/pear-core-min": "self.version"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ "src/"
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Christian Weiske",
+ "email": "cweiske@php.net",
+ "role": "Lead"
+ }
+ ],
+ "description": "Minimal set of PEAR core files to be used as composer dependency",
+ "support": {
+ "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR",
+ "source": "https://github.com/pear/pear-core-minimal"
+ },
+ "time": "2025-12-14T20:37:07+00:00"
+ },
+ {
+ "name": "pear/pear_exception",
+ "version": "v1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pear/PEAR_Exception.git",
+ "reference": "b14fbe2ddb0b9f94f5b24cf08783d599f776fff0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/b14fbe2ddb0b9f94f5b24cf08783d599f776fff0",
+ "reference": "b14fbe2ddb0b9f94f5b24cf08783d599f776fff0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "<9"
+ },
+ "type": "class",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "PEAR/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ "."
+ ],
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Helgi Thormar",
+ "email": "dufuz@php.net"
+ },
+ {
+ "name": "Greg Beaver",
+ "email": "cellog@php.net"
+ }
+ ],
+ "description": "The PEAR Exception base class.",
+ "homepage": "https://github.com/pear/PEAR_Exception",
+ "keywords": [
+ "exception"
+ ],
+ "support": {
+ "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR_Exception",
+ "source": "https://github.com/pear/PEAR_Exception"
+ },
+ "time": "2021-03-21T15:43:46+00:00"
+ },
+ {
+ "name": "pear/text_password",
+ "version": "1.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pear/Text_Password.git",
+ "reference": "946b3c0c3d50baed08bed9535c0457342f08297e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pear/Text_Password/zipball/946b3c0c3d50baed08bed9535c0457342f08297e",
+ "reference": "946b3c0c3d50baed08bed9535c0457342f08297e",
+ "shasum": ""
+ },
+ "require": {
+ "pear/pear_exception": "*",
+ "php": ">=5.2.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Text": "./"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ "./"
+ ],
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Martin Jansen",
+ "email": "mj@php.net",
+ "role": "Lead"
+ },
+ {
+ "name": "Olivier Vanhoucke",
+ "email": "olivier@php.net",
+ "role": "Lead"
+ }
+ ],
+ "description": "More info available on: http://pear.php.net/package/Text_Password",
+ "support": {
+ "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Text_Password",
+ "source": "https://github.com/pear/Text_Password"
+ },
+ "abandoned": true,
+ "time": "2022-08-10T16:04:44+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/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": "seld/cli-prompt",
+ "version": "1.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/cli-prompt.git",
+ "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/b8dfcf02094b8c03b40322c229493bb2884423c5",
+ "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.63"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Seld\\CliPrompt\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be"
+ }
+ ],
+ "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type",
+ "keywords": [
+ "cli",
+ "console",
+ "hidden",
+ "input",
+ "prompt"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/cli-prompt/issues",
+ "source": "https://github.com/Seldaek/cli-prompt/tree/1.0.4"
+ },
+ "time": "2020-12-15T21:32:01+00:00"
+ },
+ {
+ "name": "sentry/sentry",
+ "version": "4.29.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/getsentry/sentry-php.git",
+ "reference": "d732a4da195f231cedb2a2a78ae16dd73082afa3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/d732a4da195f231cedb2a2a78ae16dd73082afa3",
+ "reference": "d732a4da195f231cedb2a2a78ae16dd73082afa3",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "guzzlehttp/psr7": "^1.8.4|^2.1.1",
+ "jean85/pretty-package-versions": "^1.5|^2.0.4",
+ "php": "^7.2|^8.0",
+ "psr/log": "^1.0|^2.0|^3.0",
+ "symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0|^8.0"
+ },
+ "conflict": {
+ "raven/raven": "*"
+ },
+ "require-dev": {
+ "carthage-software/mago": "1.30.0",
+ "friendsofphp/php-cs-fixer": "^3.4",
+ "guzzlehttp/promises": "^2.0.3",
+ "monolog/monolog": "^1.6|^2.0|^3.0",
+ "nyholm/psr7": "^1.8",
+ "open-telemetry/api": "^1.0",
+ "open-telemetry/exporter-otlp": "^1.0",
+ "open-telemetry/sdk": "^1.0",
+ "open-telemetry/sem-conv": "^1.27",
+ "phpstan/phpstan": "^1.3",
+ "phpunit/phpunit": "^8.5.52|^9.6.34",
+ "spiral/roadrunner-http": "^3.6",
+ "spiral/roadrunner-worker": "^3.6"
+ },
+ "suggest": {
+ "ext-excimer": "Enable Sentry profiling with the Excimer PHP extension.",
+ "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler."
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Sentry\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Sentry",
+ "email": "accounts@sentry.io"
+ }
+ ],
+ "description": "PHP SDK for Sentry (http://sentry.io)",
+ "homepage": "http://sentry.io",
+ "keywords": [
+ "crash-reporting",
+ "crash-reports",
+ "error-handler",
+ "error-monitoring",
+ "log",
+ "logging",
+ "profiling",
+ "sentry",
+ "tracing"
+ ],
+ "support": {
+ "issues": "https://github.com/getsentry/sentry-php/issues",
+ "source": "https://github.com/getsentry/sentry-php/tree/4.29.0"
+ },
+ "funding": [
+ {
+ "url": "https://sentry.io/",
+ "type": "custom"
+ },
+ {
+ "url": "https://sentry.io/pricing/",
+ "type": "custom"
+ }
+ ],
+ "time": "2026-06-29T14:47:44+00:00"
+ },
+ {
+ "name": "silverorange/concentrate",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/silverorange/Concentrate.git",
+ "reference": "b519b88829f863575a8efda4ff40435a67829f59"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/silverorange/Concentrate/zipball/b519b88829f863575a8efda4ff40435a67829f59",
+ "reference": "b519b88829f863575a8efda4ff40435a67829f59",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "league/climate": "^3.8",
+ "pear/console_commandline": "^1.1.10",
+ "pear/pear-core-minimal": "^1.9.0",
+ "php": ">=8.2",
+ "symfony/yaml": "^7.1"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "3.88.2",
+ "phpstan/phpstan": "^2.2",
+ "rector/rector": "^2.4"
+ },
+ "suggest": {
+ "ext-apcu": "Allows caching resource definition YAML files between requests using APC.",
+ "ext-memcached": "Allows caching resource definition YAML files between requests using memcached.",
+ "packagelist/yuicompressor-bin": "Use YUI Compressor for minification of assets."
+ },
+ "bin": [
+ "scripts/concentrate"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Concentrate": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1"
+ ],
+ "authors": [
+ {
+ "name": "Michael Gauthier",
+ "email": "mike@silverorange.com"
+ }
+ ],
+ "description": "This package provides a command-line tool to glob and minify static resources for a website using silverorange's Site package. Files are combined according to a configuration file passed on the command-line.",
+ "homepage": "https://github.com/silverorange/Concentrate",
+ "keywords": [
+ "bundle",
+ "css",
+ "javascript",
+ "less",
+ "minification"
+ ],
+ "support": {
+ "issues": "https://github.com/silverorange/Concentrate/issues",
+ "source": "https://github.com/silverorange/Concentrate/tree/3.1.0"
+ },
+ "time": "2026-07-09T16:23:19+00:00"
+ },
+ {
+ "name": "silverorange/mdb2",
+ "version": "3.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/silverorange/MDB2.git",
+ "reference": "a832e074375fca330074949339645a8dab21242b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/silverorange/MDB2/zipball/a832e074375fca330074949339645a8dab21242b",
+ "reference": "a832e074375fca330074949339645a8dab21242b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "pear/pear-core-minimal": "^1.9.0",
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.88",
+ "phpstan/phpstan": "^2.2",
+ "rector/rector": "^2.4"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "MDB2.php"
+ ],
+ "psr-0": {
+ "MDB2": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Michael Gauthier",
+ "email": "mike@silverorange.com"
+ }
+ ],
+ "description": "PEAR MDB2 is a merge of the PEAR DB and Metabase php database abstraction layers.",
+ "homepage": "https://github.com/silverorange/MDB2",
+ "keywords": [
+ "database",
+ "dbal",
+ "metabase",
+ "orm"
+ ],
+ "support": {
+ "source": "https://github.com/silverorange/MDB2/tree/3.2.0"
+ },
+ "time": "2026-07-09T16:46:39+00:00"
+ },
+ {
+ "name": "silverorange/site",
+ "version": "16.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/silverorange/site.git",
+ "reference": "e68346766d992880bfb2e3f58ed3f56c0020a250"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/silverorange/site/zipball/e68346766d992880bfb2e3f58ed3f56c0020a250",
+ "reference": "e68346766d992880bfb2e3f58ed3f56c0020a250",
+ "shasum": ""
+ },
+ "require": {
+ "aws/aws-sdk-php": "^3.0.0",
+ "codescale/ffmpeg-php": "^3.2.0",
+ "ext-curl": "*",
+ "ext-gd": "*",
+ "ext-iconv": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
+ "ext-pcre": "*",
+ "pear/text_password": "^1.1.1",
+ "php": ">=8.2.0",
+ "sentry/sentry": "^4.9",
+ "silverorange/concentrate": "^3.1.0",
+ "silverorange/mdb2": "^3.2.0",
+ "silverorange/swat": "^7.10.0",
+ "silverorange/xml_rpc2": "^2.1.0",
+ "silverorange/xml_rpc_ajax": "^3.2.0",
+ "symfony/mailer": "^5.4"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "3.88.2",
+ "mockery/mockery": "^1.6",
+ "phpstan/phpstan": "^2.2",
+ "phpstan/phpstan-mockery": "^2.0",
+ "phpunit/phpunit": "^11.5",
+ "rector/rector": "^2.4"
+ },
+ "suggest": {
+ "ext-amqp": "Allows some operations to use a message queue system.",
+ "ext-imagick": "Enables SiteImage processing abilities.",
+ "ext-memcached": "Allows caching various resources.",
+ "ext-pnctl": "Process control management for command-line applications.",
+ "ext-redis": "Allow connecting applications to a Redis data store.",
+ "pelago/emogrifier": "Inlines CSS in multipart mail messages.",
+ "psr/log": "Enables logging using the PSR logging interface.",
+ "silverorange/admin": "Enables admin components",
+ "silverorange/jwplayer": "Enables video player support."
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "Site/",
+ "tests/Site/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1"
+ ],
+ "authors": [
+ {
+ "name": "Charles Waddell",
+ "email": "charles@silverorange.com"
+ },
+ {
+ "name": "Isaac Grant",
+ "email": "isaac@silverorange.com"
+ },
+ {
+ "name": "Michael Gauthier",
+ "email": "mike@silverorange.com"
+ },
+ {
+ "name": "Nathan Frederikson",
+ "email": "nathan@silverorange.com"
+ },
+ {
+ "name": "Nick Burka",
+ "email": "nick@silverorange.com"
+ },
+ {
+ "name": "Steven Garrity",
+ "email": "steven@silverorange.com"
+ }
+ ],
+ "description": "Framework for building a website.",
+ "homepage": "https://github.com/silverorange/site",
+ "keywords": [
+ "framework"
+ ],
+ "support": {
+ "issues": "https://github.com/silverorange/site/issues",
+ "source": "https://github.com/silverorange/site/tree/16.1.0"
+ },
+ "time": "2026-07-16T18:30:33+00:00"
+ },
+ {
+ "name": "silverorange/swat",
+ "version": "7.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/silverorange/swat.git",
+ "reference": "b179d8d308793e6f39bc7a87720168e39454758e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/silverorange/swat/zipball/b179d8d308793e6f39bc7a87720168e39454758e",
+ "reference": "b179d8d308793e6f39bc7a87720168e39454758e",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-iconv": "*",
+ "ext-intl": "*",
+ "ext-mbstring": "*",
+ "ext-pcre": "*",
+ "pear/pear_exception": "^1.0.2",
+ "php": ">=8.2",
+ "silverorange/concentrate": "^3.1.0",
+ "silverorange/mdb2": "^3.2.0",
+ "silverorange/yui": "^1.0.13"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "3.88.2",
+ "phpstan/phpstan": "^2.2",
+ "phpunit/phpunit": "^11.5",
+ "rector/rector": "^2.4"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "Swat/",
+ "SwatDB/",
+ "SwatI18N/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1"
+ ],
+ "authors": [
+ {
+ "name": "Charles Waddell",
+ "email": "charles@silverorange.com"
+ },
+ {
+ "name": "Isaac Grant",
+ "email": "isaac@silverorange.com"
+ },
+ {
+ "name": "Michael Gauthier",
+ "email": "mike@silverorange.com"
+ },
+ {
+ "name": "Nathan Frederikson",
+ "email": "nathan@silverorange.com"
+ },
+ {
+ "name": "Nick Burka",
+ "email": "nick@silverorange.com"
+ },
+ {
+ "name": "Steven Garrity",
+ "email": "steven@silverorange.com"
+ },
+ {
+ "name": "Colin Viebrock",
+ "email": "colin@silverorange.com"
+ }
+ ],
+ "description": "Web application toolkit.",
+ "homepage": "https://github.com/silverorange.com/swat",
+ "keywords": [
+ "swat",
+ "toolkit",
+ "widget"
+ ],
+ "support": {
+ "issues": "https://github.com/silverorange/swat/issues",
+ "source": "https://github.com/silverorange/swat/tree/7.10.0"
+ },
+ "time": "2026-07-15T18:13:34+00:00"
+ },
+ {
+ "name": "silverorange/xml_rpc2",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/silverorange/XML_RPC2.git",
+ "reference": "fc8ac5901a1dabd063715cae74a237b271a5674f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/silverorange/XML_RPC2/zipball/fc8ac5901a1dabd063715cae74a237b271a5674f",
+ "reference": "fc8ac5901a1dabd063715cae74a237b271a5674f",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "pear/http_request2": "^2.3.0",
+ "pear/pear-core-minimal": "^1.10",
+ "pear/pear_exception": "^1.0.0",
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.88.2",
+ "pear/cache_lite": "^1.8.0",
+ "phpstan/phpstan": "^2.2",
+ "phpunit/phpunit": "^11.5.50",
+ "rector/rector": "^2.4"
+ },
+ "suggest": {
+ "pear/cache_lite": "Adds caching layer to client and server"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "XML_RPC2": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1"
+ ],
+ "authors": [
+ {
+ "name": "Sergio Carvalho",
+ "email": "sergiosgc@php.net",
+ "role": "Lead"
+ },
+ {
+ "name": "Fabien MARTY",
+ "email": "fab@php.net",
+ "role": "Developer"
+ },
+ {
+ "name": "Alan Langford",
+ "email": "jal@ambitonline.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "Fork of PEAR's XML_RPC2 package. Packaged for composer and working in PHP 7.",
+ "support": {
+ "docs": "http://pear.php.net/package/XML_RPC2",
+ "issues": "https://github.com/silverorange/XML_RPC2/issues",
+ "source": "https://github.com/silverorange/XML_RPC2"
+ },
+ "time": "2026-07-15T18:56:05+00:00"
+ },
+ {
+ "name": "silverorange/xml_rpc_ajax",
+ "version": "3.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/silverorange/xml-rpc-ajax.git",
+ "reference": "98414509beef1c5ff54bd4a426fe639b2d6db629"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/silverorange/xml-rpc-ajax/zipball/98414509beef1c5ff54bd4a426fe639b2d6db629",
+ "reference": "98414509beef1c5ff54bd4a426fe639b2d6db629",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "silverorange/swat": "^7.0.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "3.88.2",
+ "phpstan/phpstan": "^2.2",
+ "rector/rector": "^2.4",
+ "silverorange/xml_rpc2": "^2.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "XML_RPCAjax": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1"
+ ],
+ "authors": [
+ {
+ "name": "Michael Gauthier",
+ "email": "mike@silverorange.com"
+ },
+ {
+ "name": "Nathan Fredrickson",
+ "email": "nathan@silverorange.com"
+ },
+ {
+ "name": "Nick Burka",
+ "email": "nick@silverorange.com"
+ }
+ ],
+ "description": "Client-side XML-RPC framework.",
+ "homepage": "https://github.com/silverorange/xml-rpc-ajax",
+ "keywords": [
+ "ajax",
+ "xmlrpc"
+ ],
+ "support": {
+ "issues": "https://github.com/silverorange/xml-rpc-ajax/issues",
+ "source": "https://github.com/silverorange/xml-rpc-ajax/tree/3.2.0"
+ },
+ "time": "2026-07-16T16:57:04+00:00"
+ },
+ {
+ "name": "silverorange/yui",
+ "version": "1.0.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/silverorange/yui.git",
+ "reference": "c3c9755d9a07570d40955be4bd21703140a322fa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/silverorange/yui/zipball/c3c9755d9a07570d40955be4bd21703140a322fa",
+ "reference": "c3c9755d9a07570d40955be4bd21703140a322fa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.1"
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Michael Gauthier",
+ "email": "mike@silverorange.com"
+ }
+ ],
+ "description": "Custom packaged version of YUI2.",
+ "homepage": "https://github.com/silverorange/yui",
+ "keywords": [
+ "yui"
+ ],
+ "support": {
+ "issues": "https://github.com/silverorange/yui/issues",
+ "source": "https://github.com/silverorange/yui/tree/1.0.13"
+ },
+ "time": "2026-07-09T16:04:31+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/event-dispatcher",
+ "version": "v6.4.37",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "2e3bf817ba9347341ab15926700fb6320367c0e1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2e3bf817ba9347341ab15926700fb6320367c0e1",
+ "reference": "2e3bf817ba9347341ab15926700fb6320367c0e1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "symfony/event-dispatcher-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<5.4",
+ "symfony/service-contracts": "<2.5"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "2.0|3.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^5.4|^6.0|^7.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/error-handler": "^5.4|^6.0|^7.0",
+ "symfony/expression-language": "^5.4|^6.0|^7.0",
+ "symfony/http-foundation": "^5.4|^6.0|^7.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/stopwatch": "^5.4|^6.0|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "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": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.37"
+ },
+ "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-13T14:11:12+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v3.7.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c7de7a00ffb67842132da02ea92988a39ccd9f4e",
+ "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/event-dispatcher": "^1"
+ },
+ "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\\EventDispatcher\\": ""
+ }
+ },
+ "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 dispatching event",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher-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/filesystem",
+ "version": "v7.4.11",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "d721ea61b4a5fba8c5b6e7c1feda19efea144b50"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/d721ea61b4a5fba8c5b6e7c1feda19efea144b50",
+ "reference": "d721ea61b4a5fba8c5b6e7c1feda19efea144b50",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-mbstring": "~1.8"
+ },
+ "require-dev": {
+ "symfony/process": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Filesystem\\": ""
+ },
+ "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": "Provides basic utilities for the filesystem",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/filesystem/tree/v7.4.11"
+ },
+ "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-11T16:38:44+00:00"
+ },
+ {
+ "name": "symfony/mailer",
+ "version": "v5.4.52",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/mailer.git",
+ "reference": "5b5385bc21c3549a80abc1353ccf8eb0b6861c61"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/5b5385bc21c3549a80abc1353ccf8eb0b6861c61",
+ "reference": "5b5385bc21c3549a80abc1353ccf8eb0b6861c61",
+ "shasum": ""
+ },
+ "require": {
+ "egulias/email-validator": "^2.1.10|^3|^4",
+ "php": ">=7.2.5",
+ "psr/event-dispatcher": "^1",
+ "psr/log": "^1|^2|^3",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
+ "symfony/mime": "^5.2.6|^6.0",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/service-contracts": "^1.1|^2|^3"
+ },
+ "conflict": {
+ "symfony/http-kernel": "<4.4"
+ },
+ "require-dev": {
+ "symfony/http-client": "^4.4|^5.0|^6.0",
+ "symfony/messenger": "^4.4|^5.0|^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Mailer\\": ""
+ },
+ "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": "Helps sending emails",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/mailer/tree/v5.4.52"
+ },
+ "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-11T06:39:31+00:00"
+ },
+ {
+ "name": "symfony/mime",
+ "version": "v6.4.41",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/mime.git",
+ "reference": "5575d37f8841e4e31d5df79ab3db078ae557ff8e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/5575d37f8841e4e31d5df79ab3db078ae557ff8e",
+ "reference": "5575d37f8841e4e31d5df79ab3db078ae557ff8e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-intl-idn": "^1.10",
+ "symfony/polyfill-mbstring": "^1.0"
+ },
+ "conflict": {
+ "egulias/email-validator": "~3.0.0",
+ "phpdocumentor/reflection-docblock": "<3.2.2",
+ "phpdocumentor/type-resolver": "<1.4.0",
+ "symfony/mailer": "<5.4",
+ "symfony/serializer": "<6.4.3|>7.0,<7.0.3"
+ },
+ "require-dev": {
+ "egulias/email-validator": "^2.1.10|^3.1|^4",
+ "league/html-to-markdown": "^5.0",
+ "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/process": "^5.4|^6.4|^7.0",
+ "symfony/property-access": "^5.4|^6.0|^7.0",
+ "symfony/property-info": "^5.4|^6.0|^7.0",
+ "symfony/serializer": "^6.4.3|^7.0.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Mime\\": ""
+ },
+ "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": "Allows manipulating MIME messages",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "mime",
+ "mime-type"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/mime/tree/v6.4.41"
+ },
+ "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-23T14:40:34+00:00"
+ },
+ {
+ "name": "symfony/options-resolver",
+ "version": "v7.4.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/options-resolver.git",
+ "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2888fcdc4dc2fd5f7c7397be78631e8af12e02b4",
+ "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\OptionsResolver\\": ""
+ },
+ "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": "Provides an improved replacement for the array_replace PHP function",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "config",
+ "configuration",
+ "options"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/options-resolver/tree/v7.4.8"
+ },
+ "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-03-24T13:12:05+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-idn",
+ "version": "v1.38.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-idn.git",
+ "reference": "dc21118016c039a66235cf93d96b435ffb282412"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/dc21118016c039a66235cf93d96b435ffb282412",
+ "reference": "dc21118016c039a66235cf93d96b435ffb282412",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2",
+ "symfony/polyfill-intl-normalizer": "^1.10"
+ },
+ "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\\Idn\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Laurent Bassin",
+ "email": "laurent@bassin.info"
+ },
+ {
+ "name": "Trevor Rowbotham",
+ "email": "trevor.rowbotham@pm.me"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "idn",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.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-25T15:22:23+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/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/yaml",
+ "version": "v7.4.14",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/yaml.git",
+ "reference": "f8f328665ace2370d1e10645b807ba1646dc7dcc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/f8f328665ace2370d1e10645b807ba1646dc7dcc",
+ "reference": "f8f328665ace2370d1e10645b807ba1646dc7dcc",
+ "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.14"
+ },
+ "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-08T20:24:16+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "bacon/bacon-qr-code",
+ "version": "v3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Bacon/BaconQrCode.git",
+ "reference": "4da2233e72eeecd9be3b62e0dc2cc9ed8e2e31c2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/4da2233e72eeecd9be3b62e0dc2cc9ed8e2e31c2",
+ "reference": "4da2233e72eeecd9be3b62e0dc2cc9ed8e2e31c2",
+ "shasum": ""
+ },
+ "require": {
+ "dasprid/enum": "^1.0.3",
+ "ext-iconv": "*",
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "phly/keep-a-changelog": "^2.12",
+ "phpunit/phpunit": "^10.5.11 || ^11.0.4",
+ "spatie/phpunit-snapshot-assertions": "^5.1.5",
+ "spatie/pixelmatch-php": "^1.2.0",
+ "squizlabs/php_codesniffer": "^3.9"
+ },
+ "suggest": {
+ "ext-imagick": "to generate QR code images"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "BaconQrCode\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Ben Scholzen 'DASPRiD'",
+ "email": "mail@dasprids.de",
+ "homepage": "https://dasprids.de/",
+ "role": "Developer"
+ }
+ ],
+ "description": "BaconQrCode is a QR code generator for PHP.",
+ "homepage": "https://github.com/Bacon/BaconQrCode",
+ "support": {
+ "issues": "https://github.com/Bacon/BaconQrCode/issues",
+ "source": "https://github.com/Bacon/BaconQrCode/tree/v3.1.1"
+ },
+ "time": "2026-04-05T21:06:35+00:00"
+ },
+ {
+ "name": "clue/ndjson-react",
+ "version": "v1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/clue/reactphp-ndjson.git",
+ "reference": "392dc165fce93b5bb5c637b67e59619223c931b0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0",
+ "reference": "392dc165fce93b5bb5c637b67e59619223c931b0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3",
+ "react/stream": "^1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35",
+ "react/event-loop": "^1.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Clue\\React\\NDJson\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering"
+ }
+ ],
+ "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.",
+ "homepage": "https://github.com/clue/reactphp-ndjson",
+ "keywords": [
+ "NDJSON",
+ "json",
+ "jsonlines",
+ "newline",
+ "reactphp",
+ "streaming"
+ ],
+ "support": {
+ "issues": "https://github.com/clue/reactphp-ndjson/issues",
+ "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://clue.engineering/support",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/clue",
+ "type": "github"
+ }
+ ],
+ "time": "2022-12-23T10:58:28+00:00"
+ },
+ {
+ "name": "composer/pcre",
+ "version": "3.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/pcre.git",
+ "reference": "d5a341b3fb61f3001970940afb1d332968a183ed"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed",
+ "reference": "d5a341b3fb61f3001970940afb1d332968a183ed",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<2.2.2"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^2",
+ "phpstan/phpstan-deprecation-rules": "^2",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpunit/phpunit": "^9"
+ },
+ "type": "library",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ },
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Pcre\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
+ "keywords": [
+ "PCRE",
+ "preg",
+ "regex",
+ "regular expression"
+ ],
+ "support": {
+ "issues": "https://github.com/composer/pcre/issues",
+ "source": "https://github.com/composer/pcre/tree/3.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ }
+ ],
+ "time": "2026-06-07T11:47:49+00:00"
+ },
+ {
+ "name": "composer/semver",
+ "version": "3.4.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/semver.git",
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95",
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.11",
+ "symfony/phpunit-bridge": "^3 || ^7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Semver\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
+ }
+ ],
+ "description": "Semver library that offers utilities, version constraint parsing and validation.",
+ "keywords": [
+ "semantic",
+ "semver",
+ "validation",
+ "versioning"
+ ],
+ "support": {
+ "irc": "ircs://irc.libera.chat:6697/composer",
+ "issues": "https://github.com/composer/semver/issues",
+ "source": "https://github.com/composer/semver/tree/3.4.4"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ }
+ ],
+ "time": "2025-08-20T19:15:30+00:00"
+ },
+ {
+ "name": "composer/xdebug-handler",
+ "version": "3.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/xdebug-handler.git",
+ "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef",
+ "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef",
+ "shasum": ""
+ },
+ "require": {
+ "composer/pcre": "^1 || ^2 || ^3",
+ "php": "^7.2.5 || ^8.0",
+ "psr/log": "^1 || ^2 || ^3"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-strict-rules": "^1.1",
+ "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Composer\\XdebugHandler\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "John Stevenson",
+ "email": "john-stevenson@blueyonder.co.uk"
+ }
+ ],
+ "description": "Restarts a process without Xdebug.",
+ "keywords": [
+ "Xdebug",
+ "performance"
+ ],
+ "support": {
+ "irc": "ircs://irc.libera.chat:6697/composer",
+ "issues": "https://github.com/composer/xdebug-handler/issues",
+ "source": "https://github.com/composer/xdebug-handler/tree/3.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-06T16:37:16+00:00"
+ },
+ {
+ "name": "dasprid/enum",
+ "version": "1.0.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/DASPRiD/Enum.git",
+ "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce",
+ "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1 <9.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11",
+ "squizlabs/php_codesniffer": "*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DASPRiD\\Enum\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Ben Scholzen 'DASPRiD'",
+ "email": "mail@dasprids.de",
+ "homepage": "https://dasprids.de/",
+ "role": "Developer"
+ }
+ ],
+ "description": "PHP 7.1 enum implementation",
+ "keywords": [
+ "enum",
+ "map"
+ ],
+ "support": {
+ "issues": "https://github.com/DASPRiD/Enum/issues",
+ "source": "https://github.com/DASPRiD/Enum/tree/1.0.7"
+ },
+ "time": "2025-09-16T12:23:56+00:00"
+ },
+ {
+ "name": "evenement/evenement",
+ "version": "v3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/igorw/evenement.git",
+ "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc",
+ "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9 || ^6"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Evenement\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Igor Wiedler",
+ "email": "igor@wiedler.ch"
+ }
+ ],
+ "description": "Événement is a very simple event dispatching library for PHP",
+ "keywords": [
+ "event-dispatcher",
+ "event-emitter"
+ ],
+ "support": {
+ "issues": "https://github.com/igorw/evenement/issues",
+ "source": "https://github.com/igorw/evenement/tree/v3.0.2"
+ },
+ "time": "2023-08-08T05:53:35+00:00"
+ },
+ {
+ "name": "fidry/cpu-core-counter",
+ "version": "1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theofidry/cpu-core-counter.git",
+ "reference": "db9508f7b1474469d9d3c53b86f817e344732678"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678",
+ "reference": "db9508f7b1474469d9d3c53b86f817e344732678",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "fidry/makefile": "^0.2.0",
+ "fidry/php-cs-fixer-config": "^1.1.2",
+ "phpstan/extension-installer": "^1.2.0",
+ "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan-deprecation-rules": "^2.0.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
+ "phpunit/phpunit": "^8.5.31 || ^9.5.26",
+ "webmozarts/strict-phpunit": "^7.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Fidry\\CpuCoreCounter\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Théo FIDRY",
+ "email": "theo.fidry@gmail.com"
+ }
+ ],
+ "description": "Tiny utility to get the number of CPU cores.",
+ "keywords": [
+ "CPU",
+ "core"
+ ],
+ "support": {
+ "issues": "https://github.com/theofidry/cpu-core-counter/issues",
+ "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theofidry",
+ "type": "github"
+ }
+ ],
+ "time": "2025-08-14T07:29:31+00:00"
+ },
+ {
+ "name": "friendsofphp/php-cs-fixer",
+ "version": "v3.88.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
+ "reference": "a8d15584bafb0f0d9d938827840060fd4a3ebc99"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/a8d15584bafb0f0d9d938827840060fd4a3ebc99",
+ "reference": "a8d15584bafb0f0d9d938827840060fd4a3ebc99",
+ "shasum": ""
+ },
+ "require": {
+ "clue/ndjson-react": "^1.3",
+ "composer/semver": "^3.4",
+ "composer/xdebug-handler": "^3.0.5",
+ "ext-filter": "*",
+ "ext-hash": "*",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "fidry/cpu-core-counter": "^1.3",
+ "php": "^7.4 || ^8.0",
+ "react/child-process": "^0.6.6",
+ "react/event-loop": "^1.5",
+ "react/promise": "^3.3",
+ "react/socket": "^1.16",
+ "react/stream": "^1.4",
+ "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0",
+ "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0",
+ "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0",
+ "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0",
+ "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0",
+ "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0",
+ "symfony/polyfill-mbstring": "^1.33",
+ "symfony/polyfill-php80": "^1.33",
+ "symfony/polyfill-php81": "^1.33",
+ "symfony/polyfill-php84": "^1.33",
+ "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2",
+ "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0"
+ },
+ "require-dev": {
+ "facile-it/paraunit": "^1.3.1 || ^2.7",
+ "infection/infection": "^0.31.0",
+ "justinrainbow/json-schema": "^6.5",
+ "keradus/cli-executor": "^2.2",
+ "mikey179/vfsstream": "^1.6.12",
+ "php-coveralls/php-coveralls": "^2.8",
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
+ "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34",
+ "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2",
+ "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2"
+ },
+ "suggest": {
+ "ext-dom": "For handling output formats in XML",
+ "ext-mbstring": "For handling non-UTF8 characters."
+ },
+ "bin": [
+ "php-cs-fixer"
+ ],
+ "type": "application",
+ "autoload": {
+ "psr-4": {
+ "PhpCsFixer\\": "src/"
+ },
+ "exclude-from-classmap": [
+ "src/Fixer/Internal/*"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Dariusz Rumiński",
+ "email": "dariusz.ruminski@gmail.com"
+ }
+ ],
+ "description": "A tool to automatically fix PHP code style",
+ "keywords": [
+ "Static code analysis",
+ "fixer",
+ "standards",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
+ "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.88.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/keradus",
+ "type": "github"
+ }
+ ],
+ "time": "2025-09-27T00:24:15+00:00"
+ },
+ {
+ "name": "phpstan/phpstan",
+ "version": "2.2.5",
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/909c1e5fef7989ac0d0c1c5c42e32a5c4f6198a0",
+ "reference": "909c1e5fef7989ac0d0c1c5c42e32a5c4f6198a0",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4|^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan-shim": "*"
+ },
+ "bin": [
+ "phpstan",
+ "phpstan.phar"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ondřej Mirtes"
+ },
+ {
+ "name": "Markus Staab"
+ },
+ {
+ "name": "Vincent Langlet"
+ }
+ ],
+ "description": "PHPStan - PHP Static Analysis Tool",
+ "keywords": [
+ "dev",
+ "static analysis"
+ ],
+ "support": {
+ "docs": "https://phpstan.org/user-guide/getting-started",
+ "forum": "https://github.com/phpstan/phpstan/discussions",
+ "issues": "https://github.com/phpstan/phpstan/issues",
+ "security": "https://github.com/phpstan/phpstan/security/policy",
+ "source": "https://github.com/phpstan/phpstan-src"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ondrejmirtes",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/phpstan",
+ "type": "github"
+ }
+ ],
+ "time": "2026-07-05T06:31:06+00:00"
+ },
+ {
+ "name": "react/cache",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/cache.git",
+ "reference": "d47c472b64aa5608225f47965a484b75c7817d5b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b",
+ "reference": "d47c472b64aa5608225f47965a484b75c7817d5b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "react/promise": "^3.0 || ^2.0 || ^1.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Cache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Async, Promise-based cache interface for ReactPHP",
+ "keywords": [
+ "cache",
+ "caching",
+ "promise",
+ "reactphp"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/cache/issues",
+ "source": "https://github.com/reactphp/cache/tree/v1.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2022-11-30T15:59:55+00:00"
+ },
+ {
+ "name": "react/child-process",
+ "version": "v0.6.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/child-process.git",
+ "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/child-process/zipball/970f0e71945556422ee4570ccbabaedc3cf04ad3",
+ "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3",
+ "shasum": ""
+ },
+ "require": {
+ "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
+ "php": ">=5.3.0",
+ "react/event-loop": "^1.2",
+ "react/stream": "^1.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
+ "react/socket": "^1.16",
+ "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\ChildProcess\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Event-driven library for executing child processes with ReactPHP.",
+ "keywords": [
+ "event-driven",
+ "process",
+ "reactphp"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/child-process/issues",
+ "source": "https://github.com/reactphp/child-process/tree/v0.6.7"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2025-12-23T15:25:20+00:00"
+ },
+ {
+ "name": "react/dns",
+ "version": "v1.14.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/dns.git",
+ "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3",
+ "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "react/cache": "^1.0 || ^0.6 || ^0.5",
+ "react/event-loop": "^1.2",
+ "react/promise": "^3.2 || ^2.7 || ^1.2.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
+ "react/async": "^4.3 || ^3 || ^2",
+ "react/promise-timer": "^1.11"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Dns\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Async DNS resolver for ReactPHP",
+ "keywords": [
+ "async",
+ "dns",
+ "dns-resolver",
+ "reactphp"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/dns/issues",
+ "source": "https://github.com/reactphp/dns/tree/v1.14.0"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2025-11-18T19:34:28+00:00"
+ },
+ {
+ "name": "react/event-loop",
+ "version": "v1.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/event-loop.git",
+ "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a",
+ "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
+ },
+ "suggest": {
+ "ext-pcntl": "For signal handling support when using the StreamSelectLoop"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\EventLoop\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.",
+ "keywords": [
+ "asynchronous",
+ "event-loop"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/event-loop/issues",
+ "source": "https://github.com/reactphp/event-loop/tree/v1.6.0"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2025-11-17T20:46:25+00:00"
+ },
+ {
+ "name": "react/promise",
+ "version": "v3.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/promise.git",
+ "reference": "23444f53a813a3296c1368bb104793ce8d88f04a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a",
+ "reference": "23444f53a813a3296c1368bb104793ce8d88f04a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "1.12.28 || 1.4.10",
+ "phpunit/phpunit": "^9.6 || ^7.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "React\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+ "keywords": [
+ "promise",
+ "promises"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/promise/issues",
+ "source": "https://github.com/reactphp/promise/tree/v3.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2025-08-19T18:57:03+00:00"
+ },
+ {
+ "name": "react/socket",
+ "version": "v1.17.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/socket.git",
+ "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08",
+ "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08",
+ "shasum": ""
+ },
+ "require": {
+ "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
+ "php": ">=5.3.0",
+ "react/dns": "^1.13",
+ "react/event-loop": "^1.2",
+ "react/promise": "^3.2 || ^2.6 || ^1.2.1",
+ "react/stream": "^1.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
+ "react/async": "^4.3 || ^3.3 || ^2",
+ "react/promise-stream": "^1.4",
+ "react/promise-timer": "^1.11"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Socket\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
+ "keywords": [
+ "Connection",
+ "Socket",
+ "async",
+ "reactphp",
+ "stream"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/socket/issues",
+ "source": "https://github.com/reactphp/socket/tree/v1.17.0"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2025-11-19T20:47:34+00:00"
+ },
+ {
+ "name": "react/stream",
+ "version": "v1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/stream.git",
+ "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d",
+ "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d",
+ "shasum": ""
+ },
+ "require": {
+ "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
+ "php": ">=5.3.8",
+ "react/event-loop": "^1.2"
+ },
+ "require-dev": {
+ "clue/stream-filter": "~1.2",
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Stream\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
+ "keywords": [
+ "event-driven",
+ "io",
+ "non-blocking",
+ "pipe",
+ "reactphp",
+ "readable",
+ "stream",
+ "writable"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/stream/issues",
+ "source": "https://github.com/reactphp/stream/tree/v1.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2024-06-11T12:45:25+00:00"
+ },
+ {
+ "name": "rector/rector",
+ "version": "2.5.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/rectorphp/rector.git",
+ "reference": "ba22f8c087848278fed6b4910d4cf1108096d8d3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/ba22f8c087848278fed6b4910d4cf1108096d8d3",
+ "reference": "ba22f8c087848278fed6b4910d4cf1108096d8d3",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4|^8.0",
+ "phpstan/phpstan": "^2.2.2"
+ },
+ "conflict": {
+ "rector/rector-doctrine": "*",
+ "rector/rector-downgrade-php": "*",
+ "rector/rector-phpunit": "*",
+ "rector/rector-symfony": "*"
+ },
+ "suggest": {
+ "ext-dom": "To manipulate phpunit.xml via the custom-rule command"
+ },
+ "bin": [
+ "bin/rector"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Instant Upgrade and Automated Refactoring of any PHP code",
+ "homepage": "https://getrector.com/",
+ "keywords": [
+ "automation",
+ "dev",
+ "migration",
+ "refactoring"
+ ],
+ "support": {
+ "issues": "https://github.com/rectorphp/rector/issues",
+ "source": "https://github.com/rectorphp/rector/tree/2.5.7"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/tomasvotruba",
+ "type": "github"
+ }
+ ],
+ "time": "2026-07-13T15:24:18+00:00"
+ },
+ {
+ "name": "robthree/twofactorauth",
+ "version": "v3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/RobThree/TwoFactorAuth.git",
+ "reference": "85408c4e775dba7c0802f2d928efd921d530bc5b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/RobThree/TwoFactorAuth/zipball/85408c4e775dba7c0802f2d928efd921d530bc5b",
+ "reference": "85408c4e775dba7c0802f2d928efd921d530bc5b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.13",
+ "phpstan/phpstan": "^1.9",
+ "phpunit/phpunit": "^9"
+ },
+ "suggest": {
+ "bacon/bacon-qr-code": "Needed for BaconQrCodeProvider provider",
+ "endroid/qr-code": "Needed for EndroidQrCodeProvider"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "RobThree\\Auth\\": "lib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Rob Janssen",
+ "homepage": "http://robiii.me",
+ "role": "Developer"
+ },
+ {
+ "name": "Nicolas CARPi",
+ "homepage": "https://github.com/NicolasCARPi",
+ "role": "Developer"
+ },
+ {
+ "name": "Will Power",
+ "homepage": "https://github.com/willpower232",
+ "role": "Developer"
+ }
+ ],
+ "description": "Two Factor Authentication",
+ "homepage": "https://github.com/RobThree/TwoFactorAuth",
+ "keywords": [
+ "Authentication",
+ "MFA",
+ "Multi Factor Authentication",
+ "Two Factor Authentication",
+ "authenticator",
+ "authy",
+ "php",
+ "tfa"
+ ],
+ "support": {
+ "issues": "https://github.com/RobThree/TwoFactorAuth/issues",
+ "source": "https://github.com/RobThree/TwoFactorAuth"
+ },
+ "funding": [
+ {
+ "url": "https://paypal.me/robiii",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/RobThree",
+ "type": "github"
+ }
+ ],
+ "time": "2026-01-05T13:17:41+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "6.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544",
+ "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "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"
+ },
+ {
+ "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/6.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:53:05+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v7.4.14",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "92f58bc4bf97a92ed1b9f367f0cd44f20bde0e87"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/92f58bc4bf97a92ed1b9f367f0cd44f20bde0e87",
+ "reference": "92f58bc4bf97a92ed1b9f367f0cd44f20bde0e87",
+ "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.14"
+ },
+ "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-16T11:50:14+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v7.4.14",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "13b38720174286f55d1761152b575a8d1436fc25"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/13b38720174286f55d1761152b575a8d1436fc25",
+ "reference": "13b38720174286f55d1761152b575a8d1436fc25",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "symfony/filesystem": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "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": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v7.4.14"
+ },
+ "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-27T08:31:18+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.38.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "e9247d281d694a5120554d9afaf54e070e88a603"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603",
+ "reference": "e9247d281d694a5120554d9afaf54e070e88a603",
+ "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.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-26T05:58:03+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/polyfill-php84",
+ "version": "v1.38.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php84.git",
+ "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa",
+ "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa",
+ "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\\Php84\\": ""
+ },
+ "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.4+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php84/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:51:13+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/stopwatch",
+ "version": "v7.4.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/stopwatch.git",
+ "reference": "70a852d72fec4d51efb1f48dcd968efcaf5ccb89"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/70a852d72fec4d51efb1f48dcd968efcaf5ccb89",
+ "reference": "70a852d72fec4d51efb1f48dcd968efcaf5ccb89",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/service-contracts": "^2.5|^3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Stopwatch\\": ""
+ },
+ "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": "Provides a way to profile code",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/stopwatch/tree/v7.4.8"
+ },
+ "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-03-24T13:12:05+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "v7.4.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "961683010db3b27ec6ebcd7308e6e1ee8fa7ffde"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/961683010db3b27ec6ebcd7308e6e1ee8fa7ffde",
+ "reference": "961683010db3b27ec6ebcd7308e6e1ee8fa7ffde",
+ "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.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-23T15:23:29+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": {},
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=8.2.0",
+ "ext-mbstring": "*"
+ },
+ "platform-dev": {},
+ "plugin-api-version": "2.9.0"
+}
diff --git a/package.json b/package.json
index 1ca1bd2c..dfdb043f 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,8 @@
"format:fix": "prettier --write ."
},
"devDependencies": {
+ "@prettier/plugin-xml": "^3.4.2",
"prettier": "^3.8.4"
},
- "packageManager": "pnpm@11.8.0+sha512.c1f5e7c4cb241c8f174b743851d82f42b802324afc8b0f116b96adb15aa06664948dde36960a3ba1079ba5b4b29dd0140135b94b5b5f5263592249d68e555f26"
+ "packageManager": "pnpm@11.9.0+sha512.bd682d5d03fe525ef7c9fd6780c6884d1e756ac4c9c9fe00c538782824310dcf90e3ddc4f53835f06dfaebd5085e41855e0bcbb3b60de2ac5bbab89e5036f03b"
}
diff --git a/phpstan.dist.neon b/phpstan.dist.neon
index ec215d85..b5b2f8f8 100644
--- a/phpstan.dist.neon
+++ b/phpstan.dist.neon
@@ -4,6 +4,6 @@ parameters:
paths:
- Admin
- po
- editorUrl: '%%file%%:%%line%%'
- editorUrlTitle: '%%file%%:%%line%%'
+ editorUrl: '%%relfile%%:%%line%%'
+ editorUrlTitle: '%%relfile%%:%%line%%'
errorFormat: table
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 79b18823..fd11254b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,17 +8,49 @@ importers:
.:
devDependencies:
+ '@prettier/plugin-xml':
+ specifier: ^3.4.2
+ version: 3.4.2(prettier@3.9.5)
prettier:
specifier: ^3.8.4
- version: 3.8.4
+ version: 3.9.5
packages:
- prettier@3.8.4:
- resolution: {integrity: sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==}
+ '@prettier/plugin-xml@3.4.2':
+ resolution: {integrity: sha512-/UyNlHfkuLXG6Ed85KB0WBF283xn2yavR+UtRibBRUcvEJId2DSLdGXwJ/cDa1X++SWDPzq3+GSFniHjkNy7yg==}
+ peerDependencies:
+ prettier: ^3.0.0
+
+ '@xml-tools/parser@1.0.11':
+ resolution: {integrity: sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==}
+
+ chevrotain@7.1.1:
+ resolution: {integrity: sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==}
+
+ prettier@3.9.5:
+ resolution: {integrity: sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==}
engines: {node: '>=14'}
hasBin: true
+ regexp-to-ast@0.5.0:
+ resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==}
+
snapshots:
- prettier@3.8.4: {}
+ '@prettier/plugin-xml@3.4.2(prettier@3.9.5)':
+ dependencies:
+ '@xml-tools/parser': 1.0.11
+ prettier: 3.9.5
+
+ '@xml-tools/parser@1.0.11':
+ dependencies:
+ chevrotain: 7.1.1
+
+ chevrotain@7.1.1:
+ dependencies:
+ regexp-to-ast: 0.5.0
+
+ prettier@3.9.5: {}
+
+ regexp-to-ast@0.5.0: {}
diff --git a/po/preprocess.php b/po/preprocess.php
index 8da517cc..1eb13798 100644
--- a/po/preprocess.php
+++ b/po/preprocess.php
@@ -64,7 +64,7 @@
// most whitespace in gettext is from concatenation, ignore it
case T_WHITESPACE:
if ($in_gettext) {
- if (strpos($text, "\n") !== false) {
+ if (str_contains($text, "\n")) {
$gettext_blank_lines++;
}
} else {
diff --git a/prettier.config.js b/prettier.config.js
new file mode 100644
index 00000000..cfdd1694
--- /dev/null
+++ b/prettier.config.js
@@ -0,0 +1,23 @@
+/**
+ * @see https://prettier.io/docs/en/configuration.html
+ * @type {import("prettier").Config}
+ */
+const config = {
+ singleQuote: true,
+ tabWidth: 2,
+ trailingComma: 'none',
+ plugins: ['@prettier/plugin-xml'],
+ overrides: [
+ {
+ files: '*.xml',
+ options: {
+ printWidth: 120,
+ tabWidth: 4,
+ xmlQuoteAttributes: 'double',
+ xmlWhitespaceSensitivity: 'ignore'
+ }
+ }
+ ]
+};
+
+export default config;
diff --git a/rector.php b/rector.php
index 199afad7..3a6d1afa 100644
--- a/rector.php
+++ b/rector.php
@@ -16,14 +16,10 @@
])
// uncomment to reach your current PHP version
->withPhpSets(php82: true)
- ->withRules([
- ])
->withSkip([
ClassPropertyAssignToConstructorPromotionRector::class,
NullToStrictStringFuncCallArgRector::class,
RemoveUnusedVariableInCatchRector::class,
ReadOnlyPropertyRector::class,
ReadOnlyClassRector::class,
- ])
- ->withTypeCoverageLevel(1)
- ->withDeadCodeLevel(1);
+ ]);
diff --git a/resources/mockups/Swat-Admin-Colors.svg b/resources/mockups/Swat-Admin-Colors.svg
index 05476a5d..eafb27cf 100644
--- a/resources/mockups/Swat-Admin-Colors.svg
+++ b/resources/mockups/Swat-Admin-Colors.svg
@@ -1,259 +1,19 @@
-
-
-