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 + + + + + Description + + description + + + + 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 - - - - - Update Password - - - - + + + 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 + + + + + Update Password + + + + 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 - - - - - Send Email - - - - - + + 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 + + + + + Send Email + + + + + 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 - 3 - - - - + + Login + + + Email + SHOW_OPTIONAL + + true + 25 + 1 + + + + Password + SHOW_OPTIONAL + + true + 18 + 2 + + + + + Forgot your password? + AdminSite/ForgotPassword + + + + + + Login + 3 + + + + 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 - - - - - - - Update Profile - - - - + + + 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 + + + + + + + Update Profile + + + + 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 and Log In - - - - - + + Update Password + + + + + New Password + Password is case-sensitive. + + 4 + true + + + + Confirm New Password + + + + + Update Password and Log In + + + + + 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 - - - - - Authenticate - - - - + + + Two Factor Authentication + + + You’ll need the six-digit code from your authenticator to continue. + + + + + Verification code + + false + 6 + 7 + true + + + + + Authenticate + + + + 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 - - - - apply - - - cancel - - - - + + + + + + + + false + + + + apply + + + cancel + + + + 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 @@ - - - - - - - - - image/svg+xml - - - - - - - - - #3F5ACE - #E2E6F8Default links and other primary design elementsShould not be used for non-linked text - Swat/Admin Color Palette - #34A039 - D4FFD6Links to tools that create new items/elementsShould not be used for non-linked text - - #444444 - #CCCCCCNon-linked text color and disabled elements - - #990000 - #FFDEDEWarnings and critical notices - - #FFF36A - #FFFDE3Non-critical notices - - - - - - + + + + + #3F5ACE - #E2E6F8Default links and other primary design elementsShould not be used for non-linked text + Swat/Admin Color Palette + #34A039 - D4FFD6Links to tools that create new items/elementsShould not be used for non-linked text + + #444444 - #CCCCCCNon-linked text color and disabled elements + + #990000 - #FFDEDEWarnings and critical notices + + #FFF36A - #FFFDE3Non-critical notices + + + + + diff --git a/resources/mockups/Swat-Admin-Example.svg b/resources/mockups/Swat-Admin-Example.svg index 9e14ae93..c29a0200 100644 --- a/resources/mockups/Swat-Admin-Example.svg +++ b/resources/mockups/Swat-Admin-Example.svg @@ -1,801 +1,59 @@ - - - - - - - - - image/svg+xml - - - - - - - - - #3F5ACE - #E2E6F8Default links and other primary design elementsShould not be used for non-linked text - Swat/Admin Color Palette - #34A039 - D4FFD6Links to tools that create new items/elementsShould not be used for non-linked text - - #444444 - #CCCCCCNon-linked text color and disabled elements - - #990000 - #FFDEDEWarnings and critical notices - - #FFF36A - #FFFDE3Non-critical notices - - - - - - - - Admin Title - - - Site Content - - Articles - Search- Products- Help Files- Other Stuff - Welcome James Preferences Logout - - - Settings - - Catalogues- Class Codes- Credit Card Types- Icons- Provinces & States- Products- Help Files- Other Stuff - - - Advanced - - Admin Components- Admin Sections- Admin Users- Admin Groups - - - - Test Article summary - - Home » Articles - Change Sub-Article Order - - Sub-Articles - + Add a New Sub-Article - Title:Shortname:Hidden:Date Created:Last Modified:Description: - Test ArticletestarticleNo6:32PM August 17, 20059:02AM August 23, 2005Lorem ipsum dolor sit amet, consectetuer adipiscingpraesent nunc purus, pretium vitae, imperdiet vel lo,nibh. Ut dignissim placerat arcu... - - - Something good has happened. - - - Something normal has happened. - - - Something bad has happened. - - - - + + + + + #3F5ACE - #E2E6F8Default links and other primary design elementsShould not be used for non-linked text + Swat/Admin Color Palette + #34A039 - D4FFD6Links to tools that create new items/elementsShould not be used for non-linked text + + #444444 - #CCCCCCNon-linked text color and disabled elements + + #990000 - #FFDEDEWarnings and critical notices + + #FFF36A - #FFFDE3Non-critical notices + + + + + + + + Admin Title + + + Site Content + - Articles - Search- Products- Help Files- Other Stuff + Welcome James Preferences Logout + + + Settings + - Catalogues- Class Codes- Credit Card Types- Icons- Provinces & States- Products- Help Files- Other Stuff + + + Advanced + - Admin Components- Admin Sections- Admin Users- Admin Groups + + + + Test Article summary + + Home » Articles + Change Sub-Article Order + + Sub-Articles + + Add a New Sub-Article + Title:Shortname:Hidden:Date Created:Last Modified:Description: + Test ArticletestarticleNo6:32PM August 17, 20059:02AM August 23, 2005Lorem ipsum dolor sit amet, consectetuer adipiscingpraesent nunc purus, pretium vitae, imperdiet vel lo,nibh. Ut dignissim placerat arcu... + + + Something good has happened. + + + Something normal has happened. + + + Something bad has happened. + + + diff --git a/resources/mockups/swat-icons.svg b/resources/mockups/swat-icons.svg index e0fe869f..b786d6f3 100644 --- a/resources/mockups/swat-icons.svg +++ b/resources/mockups/swat-icons.svg @@ -1,836 +1,81 @@ - - - - - - - + + + + + - - - - - - - - - - - - - - - - - + - - - - - image/svg+xml - - - - - - - - - - - - Swat - - - - Swat - - - - Swat - - - - Swat - - - Swat - - - Swat - - - - Swat - - - - - Swat - - - - - Swat - - - - Swat - - - - - - - - - - - Swat - - - - Swat - - - - - Swat - - - Swat - - - - ! - ? - - - - + + + + + + + Swat + + + + Swat + + + + Swat + + + + Swat + + + Swat + + + Swat + + + + Swat + + + + + Swat + + + + + Swat + + + + Swat + + + + + + + + + Swat + + + + Swat + + + + Swat + + + Swat + + + ! + ? + + + + diff --git a/resources/mockups/swat.svg b/resources/mockups/swat.svg index 816a1f68..060866f8 100644 --- a/resources/mockups/swat.svg +++ b/resources/mockups/swat.svg @@ -1,780 +1,75 @@ - - - - - - - + + + + + - - - - - - - - - - - - - - - - - + - - - - - image/svg+xml - - - - - - - - - - - - Swat - - - - Swat - - - - Swat - - - - Swat - - - Swat - - - Swat - - - - Swat - - - - - Swat - - - - - Swat - - - - Swat - - - - - - - - - - - Swat - - - - Swat - - - - - Swat - - - Swat - - - + + + + + + + Swat + + + + Swat + + + + Swat + + + + Swat + + + Swat + + + Swat + + + + Swat + + + + + Swat + + + + + Swat + + + + Swat + + + + + + + + + Swat + + + + Swat + + + + Swat + + + Swat + + diff --git a/www/javascript/admin-login.js b/www/javascript/admin-login.js index 377d0e44..f3cd3376 100644 --- a/www/javascript/admin-login.js +++ b/www/javascript/admin-login.js @@ -8,7 +8,7 @@ function AdminLogin( password_id, submit_name, user_email, - login_error, + login_error ) { setTimeout( "email = document.getElementById('" + @@ -20,25 +20,25 @@ function AdminLogin( "submit = document.getElementById('" + submit_name + "');" + - "if (" + + 'if (' + login_error + - ") {" + + ') {' + " if (email.value.length && email.value == '" + user_email + "') {" + - " password.focus();" + - " } else {" + - " email.focus();" + - " }" + - "} else {" + - " if (email.value.length > 0 && password.value.length > 0) {" + - " submit.focus();" + - " } else if (email.value.length > 0 && password.value.length == 0) {" + - " password.focus();" + - " } else {" + - " email.focus();" + - " }" + - "}", - 100, + ' password.focus();' + + ' } else {' + + ' email.focus();' + + ' }' + + '} else {' + + ' if (email.value.length > 0 && password.value.length > 0) {' + + ' submit.focus();' + + ' } else if (email.value.length > 0 && password.value.length == 0) {' + + ' password.focus();' + + ' } else {' + + ' email.focus();' + + ' }' + + '}', + 100 ); } diff --git a/www/javascript/admin-menu.js b/www/javascript/admin-menu.js index e7b66aae..76d60026 100644 --- a/www/javascript/admin-menu.js +++ b/www/javascript/admin-menu.js @@ -41,37 +41,37 @@ AdminMenu.FADE_OUT_PERIOD = 200; AdminMenu.prototype.preloadImages = function () { var arrow = new Image(); - arrow.src = "packages/admin/images/admin-menu-help-arrow.png"; + arrow.src = 'packages/admin/images/admin-menu-help-arrow.png'; }; AdminMenu.prototype.init = function () { this.el = document.getElementById(this.id); this.components = YAHOO.util.Dom.getElementsByClassName( - "admin-menu-component", - "li", + 'admin-menu-component', + 'li', this.el, function (n) { YAHOO.util.Event.on( n, - "mouseover", + 'mouseover', function (e) { this.componentMouseOver(e, n); }, this, - true, + true ); YAHOO.util.Event.on( n, - "mouseout", + 'mouseout', function (e) { this.componentMouseOut(e, n); }, this, - true, + true ); }, this, - true, + true ); }; @@ -82,9 +82,9 @@ AdminMenu.prototype.showHelp = function (li) { if (help._animation && help._animation.isAnimated()) { help._animation.stop(false); } - help.style.right = "-186px"; - YAHOO.util.Dom.setStyle(help, "opacity", 1); - help.style.display = "block"; + help.style.right = '-186px'; + YAHOO.util.Dom.setStyle(help, 'opacity', 1); + help.style.display = 'block'; } }; @@ -100,11 +100,11 @@ AdminMenu.prototype.hideHelp = function (li) { help, { opacity: { to: 0 }, right: { to: -201 } }, AdminMenu.FADE_OUT_PERIOD / 1000, - YAHOO.util.Easing.easeOut, + YAHOO.util.Easing.easeOut ); help._animation.onComplete.subscribe(function () { - help.style.display = "none"; + help.style.display = 'none'; }); help._animation.animate(); @@ -115,8 +115,8 @@ AdminMenu.prototype.getHelp = function (li) { return YAHOO.util.Dom.getNextSiblingBy( YAHOO.util.Dom.getFirstChild(li), function (n) { - return YAHOO.util.Dom.hasClass(n, "admin-menu-help"); - }, + return YAHOO.util.Dom.hasClass(n, 'admin-menu-help'); + } ); }; @@ -175,12 +175,12 @@ AdminMenu.prototype.componentMouseOut = function (e, li) { } } - if (YAHOO.util.Dom.hasClass(all_target, "admin-menu-component")) { + if (YAHOO.util.Dom.hasClass(all_target, 'admin-menu-component')) { all_out = false; } else if (all_target !== null) { while (all_target.parentNode) { all_target = all_target.parentNode; - if (YAHOO.util.Dom.hasClass(all_target, "admin-menu-component")) { + if (YAHOO.util.Dom.hasClass(all_target, 'admin-menu-component')) { all_out = false; break; } diff --git a/www/javascript/admin-order.js b/www/javascript/admin-order.js index f1409e40..f4c27e25 100644 --- a/www/javascript/admin-order.js +++ b/www/javascript/admin-order.js @@ -12,7 +12,7 @@ function AdminOrder(radio_button_id, change_order) { change_order.orderChangeEvent.subscribe( this.orderChangeHandler, this, - true, + true ); } diff --git a/www/styles/admin-group-link-cell-renderer.css b/www/styles/admin-group-link-cell-renderer.css index 95711a1c..15306d15 100644 --- a/www/styles/admin-group-link-cell-renderer.css +++ b/www/styles/admin-group-link-cell-renderer.css @@ -10,7 +10,7 @@ color: #fff; background: #009688; font-weight: 800; - font-family: "Open Sans", sans-serif; + font-family: 'Open Sans', sans-serif; font-size: 11px; text-transform: uppercase; border-radius: 2px; diff --git a/www/styles/admin-layout.css b/www/styles/admin-layout.css index 320f493e..65edb03c 100644 --- a/www/styles/admin-layout.css +++ b/www/styles/admin-layout.css @@ -3,7 +3,7 @@ body { color: #333; margin: 0; padding: 0; - font-family: "Open Sans", sans-serif; + font-family: 'Open Sans', sans-serif; } /* turn off 10px left/right margins from default YUI grid */ @@ -209,7 +209,7 @@ address { } .clearfix:after { - content: "."; + content: '.'; display: block; height: 0; clear: both; diff --git a/www/styles/admin-swat-local.css b/www/styles/admin-swat-local.css index bf3d0cf5..04489696 100644 --- a/www/styles/admin-swat-local.css +++ b/www/styles/admin-swat-local.css @@ -345,7 +345,7 @@ input:focus + span.swat-checkbox-shim::before { display: block; border-radius: 50%; background: rgba(0, 0, 0, 0.1); - content: "."; + content: '.'; text-indent: -100%; overflow: hidden; width: 28px; @@ -450,7 +450,7 @@ input:focus + span.swat-radio-shim::before { display: block; border-radius: 50%; background: rgba(0, 0, 0, 0.1); - content: "."; + content: '.'; text-indent: -100%; overflow: hidden; width: 28px; @@ -520,7 +520,7 @@ span.swat-radio-wrapper input { } .swat-frame .swat-actions:before { - content: "."; + content: '.'; overflow: hidden; text-indent: 100%; width: 16px; @@ -583,7 +583,7 @@ span.swat-radio-wrapper input { margin: -2px -8px -2px 0; } -.swat-change-order-buttons input[type="button"], +.swat-change-order-buttons input[type='button'], .swat-change-order-buttons input.swat-change-order-top, .swat-change-order-buttons input.swat-change-order-bottom { font-size: 13px; @@ -851,14 +851,14 @@ input.swat-entry.swat-insensitive { /* SwatButton, SwatToolLink */ -input[type="button"], +input[type='button'], a.swat-tool-link, span.swat-tool-link, input.swat-button { color: #fff; background: #009688; font-weight: 700; - font-family: "Open Sans", sans-serif; + font-family: 'Open Sans', sans-serif; font-size: 13px; padding: 6px 12px; text-transform: uppercase; @@ -870,14 +870,14 @@ input.swat-button { transition: box-shadow 0.2s ease; } -input[type="button"]::-moz-focus-inner, +input[type='button']::-moz-focus-inner, input.swat-button::-moz-focus-inner { outline: none; padding: 0; border: 0; } -input[type="button"]:hover, +input[type='button']:hover, a.swat-tool-link:hover, input.swat-button:hover { background: #00897b; @@ -899,7 +899,7 @@ a.swat-tool-link:hover .swat-tool-link-title { line-height: 1; } -input[type="button"]:focus, +input[type='button']:focus, a.swat-tool-link:focus, input.swat-button:focus { outline: none; @@ -909,7 +909,7 @@ input.swat-button:focus { 0 4px 4px rgba(0, 0, 0, 0.24); } -input[type="button"]:active, +input[type='button']:active, a.swat-tool-link:active, input.swat-button:active { background: #26a69a;