From cce530260ff0c04657a4cb66b66f92ea8c27ae25 Mon Sep 17 00:00:00 2001 From: KnpUDinoBot Date: Fri, 28 Feb 2025 20:11:49 +0000 Subject: [PATCH 001/181] Planting the seed for a brand new tutorial - may it grow up to be big --- .env | 32 + .gitignore | 20 + .php-cs-fixer.dist.php | 13 + .symfony.local.yaml | 4 + LICENSE | 98 + README.md | 16 + assets/app.js | 10 + assets/bootstrap.js | 5 + assets/controllers.json | 15 + assets/controllers/closeable_controller.js | 16 + assets/controllers/hello_controller.js | 16 + assets/images/purple-rocket.png | Bin 0 -> 250523 bytes assets/images/starshop-logo.png | Bin 0 -> 10433 bytes assets/images/statis-complete.png | Bin 0 -> 4118 bytes assets/images/status-complete.png | Bin 0 -> 4118 bytes assets/images/status-in-progress.png | Bin 0 -> 3517 bytes assets/images/status-waiting.png | Bin 0 -> 2959 bytes assets/styles/app.css | 3 + bin/console | 21 + compose.override.yaml | 7 + compose.yaml | 25 + composer.json | 103 + composer.lock | 7307 +++++++++++++++++ config/bundles.php | 21 + config/packages/asset_mapper.yaml | 5 + config/packages/cache.yaml | 27 + config/packages/debug.yaml | 5 + config/packages/doctrine.yaml | 54 + config/packages/doctrine_migrations.yaml | 6 + config/packages/framework.yaml | 16 + config/packages/monolog.yaml | 62 + config/packages/routing.yaml | 10 + config/packages/stof_doctrine_extensions.yaml | 8 + config/packages/translation.yaml | 7 + config/packages/twig.yaml | 6 + config/packages/web_profiler.yaml | 17 + config/packages/zenstruck_foundry.yaml | 5 + config/preload.php | 5 + config/routes.yaml | 5 + config/routes/framework.yaml | 4 + config/routes/web_profiler.yaml | 8 + config/services.yaml | 25 + importmap.php | 28 + migrations/.gitignore | 0 migrations/Version20241111171351.php | 33 + migrations/Version20241201203154.php | 38 + migrations/Version20241201203519.php | 40 + public/index.php | 9 + sfcasts/metadata.yml | 1 + src/Command/ShipCheckInCommand.php | 56 + src/Command/ShipRemoveCommand.php | 55 + src/Command/ShipReportCommand.php | 56 + src/Controller/.gitignore | 0 src/Controller/MainController.php | 29 + src/Controller/StarshipApiController.php | 32 + src/Controller/StarshipController.php | 22 + src/DataFixtures/AppFixtures.php | 40 + src/Entity/.gitignore | 0 src/Entity/Starship.php | 167 + src/Entity/StarshipStatusEnum.php | 10 + src/Factory/StarshipFactory.php | 132 + src/Kernel.php | 11 + src/Repository/.gitignore | 0 src/Repository/StarshipRepository.php | 66 + src/Twig/Extension/AppExtension.php | 18 + src/Twig/Runtime/AppExtensionRuntime.php | 25 + symfony.lock | 249 + tailwind.config.js | 11 + templates/base.html.twig | 43 + templates/main/_shipStatusAside.html.twig | 36 + templates/main/homepage.html.twig | 71 + templates/starship/show.html.twig | 42 + translations/.gitignore | 0 73 files changed, 9327 insertions(+) create mode 100644 .env create mode 100644 .gitignore create mode 100644 .php-cs-fixer.dist.php create mode 100644 .symfony.local.yaml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 assets/app.js create mode 100644 assets/bootstrap.js create mode 100644 assets/controllers.json create mode 100644 assets/controllers/closeable_controller.js create mode 100644 assets/controllers/hello_controller.js create mode 100644 assets/images/purple-rocket.png create mode 100644 assets/images/starshop-logo.png create mode 100755 assets/images/statis-complete.png create mode 100755 assets/images/status-complete.png create mode 100644 assets/images/status-in-progress.png create mode 100755 assets/images/status-waiting.png create mode 100644 assets/styles/app.css create mode 100755 bin/console create mode 100644 compose.override.yaml create mode 100644 compose.yaml create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/bundles.php create mode 100644 config/packages/asset_mapper.yaml create mode 100644 config/packages/cache.yaml create mode 100644 config/packages/debug.yaml create mode 100644 config/packages/doctrine.yaml create mode 100644 config/packages/doctrine_migrations.yaml create mode 100644 config/packages/framework.yaml create mode 100644 config/packages/monolog.yaml create mode 100644 config/packages/routing.yaml create mode 100644 config/packages/stof_doctrine_extensions.yaml create mode 100644 config/packages/translation.yaml create mode 100644 config/packages/twig.yaml create mode 100644 config/packages/web_profiler.yaml create mode 100644 config/packages/zenstruck_foundry.yaml create mode 100644 config/preload.php create mode 100644 config/routes.yaml create mode 100644 config/routes/framework.yaml create mode 100644 config/routes/web_profiler.yaml create mode 100644 config/services.yaml create mode 100644 importmap.php create mode 100644 migrations/.gitignore create mode 100644 migrations/Version20241111171351.php create mode 100644 migrations/Version20241201203154.php create mode 100644 migrations/Version20241201203519.php create mode 100644 public/index.php create mode 100644 sfcasts/metadata.yml create mode 100644 src/Command/ShipCheckInCommand.php create mode 100644 src/Command/ShipRemoveCommand.php create mode 100644 src/Command/ShipReportCommand.php create mode 100644 src/Controller/.gitignore create mode 100644 src/Controller/MainController.php create mode 100644 src/Controller/StarshipApiController.php create mode 100644 src/Controller/StarshipController.php create mode 100644 src/DataFixtures/AppFixtures.php create mode 100644 src/Entity/.gitignore create mode 100644 src/Entity/Starship.php create mode 100644 src/Entity/StarshipStatusEnum.php create mode 100644 src/Factory/StarshipFactory.php create mode 100644 src/Kernel.php create mode 100644 src/Repository/.gitignore create mode 100644 src/Repository/StarshipRepository.php create mode 100644 src/Twig/Extension/AppExtension.php create mode 100644 src/Twig/Runtime/AppExtensionRuntime.php create mode 100644 symfony.lock create mode 100644 tailwind.config.js create mode 100644 templates/base.html.twig create mode 100644 templates/main/_shipStatusAside.html.twig create mode 100644 templates/main/homepage.html.twig create mode 100644 templates/starship/show.html.twig create mode 100644 translations/.gitignore diff --git a/.env b/.env new file mode 100644 index 0000000..21fb614 --- /dev/null +++ b/.env @@ -0,0 +1,32 @@ +# In all environments, the following files are loaded if they exist, +# the latter taking precedence over the former: +# +# * .env contains default values for the environment variables needed by the app +# * .env.local uncommitted file with local overrides +# * .env.$APP_ENV committed environment-specific defaults +# * .env.$APP_ENV.local uncommitted environment-specific overrides +# +# Real environment variables win over .env files. +# +# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES. +# https://symfony.com/doc/current/configuration/secrets.html +# +# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). +# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration + +###> symfony/framework-bundle ### +APP_ENV=dev +APP_SECRET=67f556bf9f5069ec0467e65c0505002c +###< symfony/framework-bundle ### + +ISS_LOCATION_CACHE_TTL=5 + +###> doctrine/doctrine-bundle ### +# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url +# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml +# +# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" +# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8.0.32&charset=utf8mb4" +# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=10.11.2-MariaDB&charset=utf8mb4" +DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=16&charset=utf8" +###< doctrine/doctrine-bundle ### diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a19e3f1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ + +###> symfony/framework-bundle ### +/.env.local +/.env.local.php +/.env.*.local +/config/secrets/prod/prod.decrypt.private.php +/public/bundles/ +/var/ +/vendor/ +###< symfony/framework-bundle ### + +###> php-cs-fixer/shim ### +/.php-cs-fixer.php +/.php-cs-fixer.cache +###< php-cs-fixer/shim ### + +###> symfony/asset-mapper ### +/public/assets/ +/assets/vendor/ +###< symfony/asset-mapper ### diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php new file mode 100644 index 0000000..3788194 --- /dev/null +++ b/.php-cs-fixer.dist.php @@ -0,0 +1,13 @@ +in(__DIR__) + ->exclude('var') +; + +return (new PhpCsFixer\Config()) + ->setRules([ + '@Symfony' => true, + ]) + ->setFinder($finder) +; diff --git a/.symfony.local.yaml b/.symfony.local.yaml new file mode 100644 index 0000000..2d234f9 --- /dev/null +++ b/.symfony.local.yaml @@ -0,0 +1,4 @@ +workers: + # ... + tailwind: + cmd: ['symfony', 'console', 'tailwind:build', '--watch'] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0e8ae00 --- /dev/null +++ b/LICENSE @@ -0,0 +1,98 @@ +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License + +Summary: http://creativecommons.org/licenses/by-nc-sa/4.0/ + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 – Definitions. + +Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. +Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. +BY-NC-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. +Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. +Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. +Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. +License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution, NonCommercial, and ShareAlike. +Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. +Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. +Licensor means the individual(s) or entity(ies) granting rights under this Public License. +NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange. +Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. +Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. +You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. +Section 2 – Scope. + +License grant. +Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: +reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and +produce, reproduce, and Share Adapted Material for NonCommercial purposes only. +Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. +Term. The term of this Public License is specified in Section 6(a). +Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. +Downstream recipients. +Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. +Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply. +No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. +No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). +Other rights. + +Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. +Patent and trademark rights are not licensed under this Public License. +To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes. +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + +Attribution. + +If You Share the Licensed Material (including in modified form), You must: + +retain the following if it is supplied by the Licensor with the Licensed Material: +identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); +a copyright notice; +a notice that refers to this Public License; +a notice that refers to the disclaimer of warranties; +a URI or hyperlink to the Licensed Material to the extent reasonably practicable; +indicate if You modified the Licensed Material and retain an indication of any previous modifications; and +indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. +You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. +If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. +ShareAlike. +In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. + +The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-NC-SA Compatible License. +You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. +You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + +for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only; +if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and +You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. +Section 5 – Disclaimer of Warranties and Limitation of Liability. + +Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. +To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. +The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. +Section 6 – Term and Termination. + +This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. +Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + +automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or +upon express reinstatement by the Licensor. +For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. +For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. +Sections 1, 5, 6, 7, and 8 survive termination of this Public License. +Section 7 – Other Terms and Conditions. + +The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. +Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. +Section 8 – Interpretation. + +For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. +To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. +No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. +Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a8b57cf --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# Symfony, Doctrine Relations & Warp Drive Basics + +Well hi there! This repository holds the code and script for the +[Symfony, Doctrine Relations & Warp Drive Basics](https://symfonycasts.com/screencast/symfony7-doctrine-relations) +course on SymfonyCasts. + +## Have Ideas, Feedback or an Issue? + +If you have suggestions or questions, please feel free to open an issue +on this repository or comment on the course itself. We're watching both :). + +## Thanks! + +And as always, thanks so much for your support and letting us do what we love! + +<3 Your friends at SymfonyCasts diff --git a/assets/app.js b/assets/app.js new file mode 100644 index 0000000..8725cc5 --- /dev/null +++ b/assets/app.js @@ -0,0 +1,10 @@ +import './bootstrap.js'; +/* + * Welcome to your app's main JavaScript file! + * + * This file will be included onto the page via the importmap() Twig function, + * which should already be in your base.html.twig. + */ +import './styles/app.css'; + +console.log('This log comes from assets/app.js - welcome to AssetMapper! 🎉'); diff --git a/assets/bootstrap.js b/assets/bootstrap.js new file mode 100644 index 0000000..d4e50c9 --- /dev/null +++ b/assets/bootstrap.js @@ -0,0 +1,5 @@ +import { startStimulusApp } from '@symfony/stimulus-bundle'; + +const app = startStimulusApp(); +// register any custom, 3rd party controllers here +// app.register('some_controller_name', SomeImportedController); diff --git a/assets/controllers.json b/assets/controllers.json new file mode 100644 index 0000000..29ea244 --- /dev/null +++ b/assets/controllers.json @@ -0,0 +1,15 @@ +{ + "controllers": { + "@symfony/ux-turbo": { + "turbo-core": { + "enabled": true, + "fetch": "eager" + }, + "mercure-turbo-stream": { + "enabled": false, + "fetch": "eager" + } + } + }, + "entrypoints": [] +} diff --git a/assets/controllers/closeable_controller.js b/assets/controllers/closeable_controller.js new file mode 100644 index 0000000..6ae8138 --- /dev/null +++ b/assets/controllers/closeable_controller.js @@ -0,0 +1,16 @@ +import { Controller } from '@hotwired/stimulus'; + +export default class extends Controller { + async close() { + this.element.style.width = '0'; + + await this.#waitForAnimation(); + this.element.remove(); + } + + #waitForAnimation() { + return Promise.all( + this.element.getAnimations().map((animation) => animation.finished), + ); + } +} diff --git a/assets/controllers/hello_controller.js b/assets/controllers/hello_controller.js new file mode 100644 index 0000000..e847027 --- /dev/null +++ b/assets/controllers/hello_controller.js @@ -0,0 +1,16 @@ +import { Controller } from '@hotwired/stimulus'; + +/* + * This is an example Stimulus controller! + * + * Any element with a data-controller="hello" attribute will cause + * this controller to be executed. The name "hello" comes from the filename: + * hello_controller.js -> "hello" + * + * Delete this file or adapt it for your use! + */ +export default class extends Controller { + connect() { + this.element.textContent = 'Hello Stimulus! Edit me in assets/controllers/hello_controller.js'; + } +} diff --git a/assets/images/purple-rocket.png b/assets/images/purple-rocket.png new file mode 100644 index 0000000000000000000000000000000000000000..865da4b16e652baffe237d5a7420fad58ef0c816 GIT binary patch literal 250523 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%0DGm{IYBQ>ow8;pEg4pA8F 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

vZh3yVH7JWwosPz27p%^tc#8J~q= z<%<_x6u-oYY6jt=135lUM&+A4)IlRLBFjlp!-W@ycG#t@Dga9w>;z^W%+E ?6q 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 j7Zr#E;H{H7E;Q!~;%BE;hnxhn>&^Am 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

k3xPz#&mO@}fdk_!c4byu*;gKNU!( z=a%4(o+iGKgEt>^k7~<&nz;$GgW#nk*AT(;mV{C2{-c8Hjs>uU#kYUpDB(Q$D>-^H zIbDVaRUK$jjcmT`)eN^qNAZq3(l)!w`tZJmWjJtLPkd?kRvg>&r z@+HRRlzWHKkkLQWp_KHCncqRtmYZJu(8nmcf%m!n=KG|~~| z4GM+rmvA<<@Y$6&eUm~bUV2S6kAKZH{WDW}r*m*$Pu&!gX!d`0%YS^P$3uAbJF+OF zE+B>69@j_s?@sQA&mJ;cil4)?mAFOv5CX%B=2iiZocYF^4tV-HHXSAcHKiIMhQ!-GXaAn0zIluP+mT`pW2DjW$rLj#m;OyieK7V33xLuSL z2h+A->2MCH+1GAKMtEmB7?s@OlpLtF0tVxvhtkJbL`}5lm+HgOI2*sSk3Os}ov#!m zwjg;Pk($D~pX5@P$?4E!u4<8>aHDHn1t3FtV&Uv~X#Y9uDv43lQl>fM2{7}JrxTaP zHnL}P#-B2?*8%Q#T83-rb0-hfNue`Ey>~fqWwgI0uQlG;B}hIcu}ePUR6Sy)dbXAE z|D4h$H`0^+IW6=CS=-)Mfb0Tu2%e$}kD!@o-qc2>Q5cb@6 z9KOzusBfIG$QX0~LnhG-^g2u+HfA(f@@UoP}Hg1Drh0`y4!Ea6;yr$J$ zS=2R7sytBj72--E`j@tDs~J}ei{eZ&ctJMMg2Wx*xW8W($1o8Li(3d|{4AwPTUyiS zg+)uBd`o0ohp2g$kh=uMMuX>}daIaFez@%7u($SB{-&dR{Mm?GmlC92XmJm#+eHb_ z&uA*}Enn8`ibEuKSD)_d6La`y=$|je^PlZ^BebkkL1>3i#jUHk#WF^GF2-Tw_yeW> zF1@kq{(GM+rts{UvVsLOezOt&yi0VgW^P!tNm7B@S^6W)YD}vTfmKfYj70Q3j}`8S z+sfS>u|WQTl)N`_)_I|4J~xvF)||hkL7AXm?x`_ zOERUpSmisWFjl-U6O*zX(Ue_~CUgoJ4K1Ps3kq2$DIJyT=SfQnF_wK!W)YaQA^XUb zwf_CFF>=273Xea(MHZRcq8U>zT3OV>UWvR=-nAd=S7UF85HsQrCo32rs0HNoQnDh@Jh3pOO^KNEuv{Vz# zA(kw^^rD4{xnu7U*`GweiyEk;31)wE@-cT~V4_~EAh+F5<2Wl1WCpHPzSXCp_LrS& zblv@?f71AtbySLHG4NV5-H3(A&BYc|fM&X;7JsP~fRB37oAZtc`^Z2du(UDH$lwDS z9viJB6oBa#nlZQ+=I09j7e`OkN**emyg;OH;L%bTxIS%lZdM>kCBtIVOem<%XwZSc zGjS1n_iHdcc&$;;N%fWf8<7pe3LuZ>&yo6|W74_0(hh%qlP#!G8+NAv8esA2Os;dJRmwK2&0ucC3}tz4%#HM%cdaAGM0$X9UecP|cYSc7 zO`SaABpV3E46dZpt7nAemFjxsf~%snQhd3#mPQW>*q^r992`8${ND;kq=lSt5n

X*9=_Z-i{Tur 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
^u)MQT={#(RoNcVaBo{w@#;!; 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 UH%VOaKTneumlvxN(ewX*06(t6F8}}l literal 0 HcmV?d00001 diff --git a/assets/images/starshop-logo.png b/assets/images/starshop-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6a856ee0ec0970560b6c62394df31056cdaa1ba9 GIT binary patch literal 10433 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 i2Xp=Z1DE2 literal 0 HcmV?d00001 diff --git a/assets/images/statis-complete.png b/assets/images/statis-complete.png new file mode 100755 index 0000000000000000000000000000000000000000..d53997db3e0462923b22016b62a66ef9339b7597 GIT binary patch literal 4118 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 literal 0 HcmV?d00001 diff --git a/assets/images/status-waiting.png b/assets/images/status-waiting.png new file mode 100755 index 0000000000000000000000000000000000000000..646a0f25648b4498d5d290cb5c45ae73012c92cc GIT binary patch literal 2959 zcmV;A3vl#_P)DYg{GPGc!h8wzlMqCg>e%aEYV=58v`0?w4$QEq+@N~zY+8{f7iLqCL{|wG5k#O!P5XZCdQyQV5~g=*^iv2Dq`?U7 zn*Z#<^#s?)AYUjbZ{xq_@(BVUHM*kx-VfqfPcQ0%-05F@q`b`%LuQ#m6`4DY`@lU;r9rDqrtfJ)iJ78tNdi!m3z7Rrv$*!ktgru)#j6i z#e}s4GT6474U3uEC=vii&$iVJgsHT;LI4OrDf&(D6>c0z!?^R;J<8S5oB?E!J2B~z z)Ef%13sv18@XDm_Q~FCJ+gP2}A;6 z0+B$NKqL?*5DA0{MAAbbl6MEq!di~#>l#s|M&J-o>eQ$v(3W2g5M6j<=XvEvqC3xs zs+$D52wZst{rh&_7hWN{I?}MBpnE`=DLJ1fD!xXbOF)6q zjrU=JPM$(@aa^1fCW|CVxiJj3fMHf}e-j9QAkgp;jg!K(>B8APhtaA#iQgaP%W#|& zX3`pXD{7i(`f>PfNq(PJ9q{bh*~NqQI44ZDV4Yg4IHF|2!UcW}WzY6FcWdHwq=&)o z`_@u)m50S2W|>)(ahs4`#JNbP6Klyy&ga$W3J;5pH>pLv*RXlLLZB50!DGO#d&UTI zZZ-N^wt{g)$-tGj$2nov>dCHW*BvLGWRY=alC5PZ*KtmmO9^HU#T6yTl04risRdlx zAkYT)g!!`Jnxh68FrP2S%e=Xwlj{EhVYbD|D5o4FR%CdxTNrF9(~6RRHzvll$4Ozv zNn%(uVcB=H_MH|qbA;ohFj;hSFQ_9XUQNIB#GObGW;o6+Sa6NIlNc{;_RR^^on-5M}2;m?`1dvD%_j38J(Egqf1&I_Q3JBGIt} zgxLXX9eEvecX{#abpjT^S(27$_F}?f+5yW&mVhAb0#^=10$~D?h;`+^eccNl*n1t# zYQ6DTSl3iq)3jh#{~x~0cIqH9`T6r(Ir_tC81qgj8-aed><5o5B2JiWB|jeRa9jr1 zX31F2e?9c+%av>iRGe9YrL@a%pQ69LoukVmIXao4&$~DkoE=Ee>`!_uL_t_pA z>C49bg?Vxaww^b~a+wgPIAJbjJe!nG)3r-?>*9pDnsBxdNY2@QMVH=`txS0q6Jt{j z1&%q-osb*JiTj_ufWk{t z6um#x5ZT0uWEnUAjKu1Yz~l$QjG|c^-+A6BKVJT3(^Pqq#X>CPVS&p>;)FSm!$Kno z^D4KW`1Fql$;A2opgebu7&C)Bj5slattU5e#6@DYO=RQ?afZX~ZBa};if=W~37i`* zQkV;H=bF6XwSx+mngA6L2UAaW{%cGW#moHnf1xIE?QzyLu|1W?z}bS)p+;i;+gn? z#Da!cVe-x5hr|Yhqk`S@|9{;}Hj%pTT=ZtN5>5~6Dx8f&m?iV1mw z3HKLp_tC>+us1(5$Ei#|svBXtb@~feWVfo+#iWASoUfroFc%ohTNFPMW@D^s*P9zpB%!_Y&&Wo}Mhboc}jIxdB zzx2H!oWZ)A^Fq($=?0?zQf#N#%SazNgZS;cULnCvAJWyB~BYA>s{YJn+HAS)rK`CU6TZ6atYz zm_Q^DCJ+gP2}A;60+B$NKqL?*5Q#@xRS5uLc%*y?69_|Bj4-`20U!vi)S{=gUL*h{ zp>^3=0TU*F)b zjRkhU=LXg@fed;BBiRt9apzj;n*_iSqDf7&8|Q!TjJe<>NY(F|EIm&E908p4G=;gd zgQixk(W^rPMyW*t;E>To*J=6NJI&_@1_P;6qb2iYf&e%)R7F3#Keqcj2fB-lIsF|H zA#ix8s`hgq?Emh;&9JpmdAPS7m^Q9gTct=;R{e_<1pANl>;*c*C zlvn@4=)6Dxq^BGt*IR3qVZ@sR#0k;*%1yX-kPc%diT-I^_lJR&;`{_9#aK`B>em$M zj|hNJSdgaF&Ak}h#g^nJDJ?8e+9;Bzu9{ymP5^9SV#ryO-OQvBWD`3_LIfhMPmrgJ z<~NR$)? doctrine/doctrine-bundle ### + database: + ports: + - "5432" +###< doctrine/doctrine-bundle ### diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..89c74d1 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,25 @@ + +services: +###> doctrine/doctrine-bundle ### + database: + image: postgres:${POSTGRES_VERSION:-16}-alpine + environment: + POSTGRES_DB: ${POSTGRES_DB:-app} + # You should definitely change the password in production + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!} + POSTGRES_USER: ${POSTGRES_USER:-app} + healthcheck: + test: ["CMD", "pg_isready", "-d", "${POSTGRES_DB:-app}", "-U", "${POSTGRES_USER:-app}"] + timeout: 5s + retries: 5 + start_period: 60s + volumes: + - database_data:/var/lib/postgresql/data:rw + # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data! + # - ./docker/db/data:/var/lib/postgresql/data:rw +###< doctrine/doctrine-bundle ### + +volumes: +###> doctrine/doctrine-bundle ### + database_data: +###< doctrine/doctrine-bundle ### diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..3af514b --- /dev/null +++ b/composer.json @@ -0,0 +1,103 @@ +{ + "type": "project", + "license": "proprietary", + "minimum-stability": "stable", + "prefer-stable": true, + "require": { + "php": ">=8.2", + "ext-ctype": "*", + "ext-iconv": "*", + "babdev/pagerfanta-bundle": "^4.5", + "doctrine/dbal": "^3", + "doctrine/doctrine-bundle": "^2.13", + "doctrine/doctrine-migrations-bundle": "^3.3", + "doctrine/orm": "^3.3", + "knplabs/knp-time-bundle": "^2.2", + "pagerfanta/doctrine-orm-adapter": "^4.7", + "php-cs-fixer/shim": "^3.46", + "phpdocumentor/reflection-docblock": "^5.3", + "phpstan/phpdoc-parser": "^1.25", + "stof/doctrine-extensions-bundle": "^1.12", + "symfony/asset": "7.1.*", + "symfony/asset-mapper": "7.1.*", + "symfony/console": "7.1.*", + "symfony/dotenv": "7.1.*", + "symfony/flex": "^2", + "symfony/framework-bundle": "7.1.*", + "symfony/http-client": "7.1.*", + "symfony/monolog-bundle": "^3.0", + "symfony/property-access": "7.1.*", + "symfony/property-info": "7.1.*", + "symfony/runtime": "7.1.*", + "symfony/serializer": "7.1.*", + "symfony/stimulus-bundle": "^2.13", + "symfony/twig-bundle": "7.1.*", + "symfony/ux-turbo": "^2.13", + "symfony/yaml": "7.1.*", + "symfonycasts/tailwind-bundle": "^0.7.1", + "twig/extra-bundle": "^2.12|^3.0", + "twig/twig": "^2.12|^3.0" + }, + "config": { + "platform": { + "php": "8.3" + }, + "allow-plugins": { + "php-http/discovery": true, + "symfony/flex": true, + "symfony/runtime": true + }, + "sort-packages": true + }, + "autoload": { + "psr-4": { + "App\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests/" + } + }, + "replace": { + "symfony/polyfill-ctype": "*", + "symfony/polyfill-iconv": "*", + "symfony/polyfill-php72": "*", + "symfony/polyfill-php73": "*", + "symfony/polyfill-php74": "*", + "symfony/polyfill-php80": "*", + "symfony/polyfill-php81": "*", + "symfony/polyfill-php82": "*" + }, + "scripts": { + "auto-scripts": { + "cache:clear": "symfony-cmd", + "assets:install %PUBLIC_DIR%": "symfony-cmd", + "importmap:install": "symfony-cmd" + }, + "post-install-cmd": [ + "@auto-scripts" + ], + "post-update-cmd": [ + "@auto-scripts" + ] + }, + "conflict": { + "symfony/symfony": "*" + }, + "extra": { + "symfony": { + "allow-contrib": false, + "require": "7.1.*", + "docker": true + } + }, + "require-dev": { + "doctrine/doctrine-fixtures-bundle": "^3.6", + "symfony/debug-bundle": "7.1.*", + "symfony/maker-bundle": "^1.52", + "symfony/stopwatch": "7.1.*", + "symfony/web-profiler-bundle": "7.1.*", + "zenstruck/foundry": "^2.2" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..866dd04 --- /dev/null +++ b/composer.lock @@ -0,0 +1,7307 @@ +{ + "_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": "9b7555863b0e06c24d6018b892c505e1", + "packages": [ + { + "name": "babdev/pagerfanta-bundle", + "version": "v4.5.0", + "source": { + "type": "git", + "url": "https://github.com/BabDev/PagerfantaBundle.git", + "reference": "838e486e0aad9a4485eeb9d5ea854872ae23dadc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/BabDev/PagerfantaBundle/zipball/838e486e0aad9a4485eeb9d5ea854872ae23dadc", + "reference": "838e486e0aad9a4485eeb9d5ea854872ae23dadc", + "shasum": "" + }, + "require": { + "pagerfanta/core": "^3.7 || ^4.0", + "php": "^8.1", + "psr/container": "^1.0 || ^2.0", + "symfony/config": "^5.4 || ^6.4 || ^7.1", + "symfony/dependency-injection": "^5.4 || ^6.4 || ^7.1", + "symfony/http-foundation": "^5.4 || ^6.4 || ^7.1", + "symfony/http-kernel": "^5.4 || ^6.4 || ^7.1", + "symfony/property-access": "^5.4 || ^6.4 || ^7.1", + "symfony/routing": "^5.4 || ^6.4 || ^7.1" + }, + "conflict": { + "jms/serializer": "<3.18", + "jms/serializer-bundle": "<4.2", + "pagerfanta/twig": "<3.7", + "symfony/serializer": "<5.4 || >=6.0,<6.4 || >=7.0,<7.1", + "symfony/translation": "<5.4 || >=6.0,<6.4 || >=7.0,<7.1", + "symfony/twig-bridge": "<5.4 || >=6.0,<6.4 || >=7.0,<7.1", + "symfony/twig-bundle": "<5.4 || >=6.0,<6.4 || >=7.0,<7.1", + "twig/twig": "<2.13", + "white-october/pagerfanta-bundle": "*" + }, + "require-dev": { + "jms/serializer": "^3.18", + "jms/serializer-bundle": "^4.2 || ^5.0", + "matthiasnoback/symfony-dependency-injection-test": "^5.0", + "pagerfanta/twig": "^3.7 || ^4.0", + "phpstan/extension-installer": "^1.3", + "phpstan/phpstan": "1.12.7", + "phpstan/phpstan-phpunit": "1.4.0", + "phpstan/phpstan-symfony": "1.4.11", + "phpunit/phpunit": "9.6.21", + "symfony/phpunit-bridge": "^5.4 || ^6.4 || ^7.1", + "symfony/serializer": "^5.4 || ^6.4 || ^7.1", + "symfony/translation": "^5.4 || ^6.4 || ^7.1", + "symfony/twig-bridge": "^5.4 || ^6.4 || ^7.1", + "symfony/twig-bundle": "^5.4 || ^6.4 || ^7.1", + "twig/twig": "^2.13 || ^3.0" + }, + "suggest": { + "jms/serializer-bundle": "To use the Pagerfanta class with the JMS Serializer", + "symfony/serializer": "To use the Pagerfanta class with the Symfony Serializer", + "symfony/translation": "To use the Twig templates with translation support", + "twig/twig": "To integrate Pagerfanta with Twig through extensions" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "BabDev\\PagerfantaBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Bundle integrating Pagerfanta with Symfony", + "keywords": [ + "pagerfanta", + "pagination", + "symfony" + ], + "support": { + "issues": "https://github.com/BabDev/PagerfantaBundle/issues", + "source": "https://github.com/BabDev/PagerfantaBundle/tree/v4.5.0" + }, + "funding": [ + { + "url": "https://github.com/mbabker", + "type": "github" + } + ], + "time": "2024-11-03T20:23:50+00:00" + }, + { + "name": "behat/transliterator", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Transliterator.git", + "reference": "baac5873bac3749887d28ab68e2f74db3a4408af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Transliterator/zipball/baac5873bac3749887d28ab68e2f74db3a4408af", + "reference": "baac5873bac3749887d28ab68e2f74db3a4408af", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "chuyskywalker/rolling-curl": "^3.1", + "php-yaoi/php-yaoi": "^1.0", + "phpunit/phpunit": "^8.5.25 || ^9.5.19" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Behat\\Transliterator\\": "src/Behat/Transliterator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Artistic-1.0" + ], + "description": "String transliterator", + "keywords": [ + "i18n", + "slug", + "transliterator" + ], + "support": { + "issues": "https://github.com/Behat/Transliterator/issues", + "source": "https://github.com/Behat/Transliterator/tree/v1.5.0" + }, + "time": "2022-03-30T09:27:43+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.3", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "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.3" + }, + "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-09-19T14:15:21+00:00" + }, + { + "name": "doctrine/cache", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", + "shasum": "" + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "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": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/2.2.0" + }, + "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%2Fcache", + "type": "tidelift" + } + ], + "time": "2022-05-20T20:07:39+00:00" + }, + { + "name": "doctrine/collections", + "version": "2.2.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "d8af7f248c74f195f7347424600fd9e17b57af59" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/d8af7f248c74f195f7347424600fd9e17b57af59", + "reference": "d8af7f248c74f195f7347424600fd9e17b57af59", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1", + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ext-json": "*", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "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": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/2.2.2" + }, + "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%2Fcollections", + "type": "tidelift" + } + ], + "time": "2024-04-18T06:56:21+00:00" + }, + { + "name": "doctrine/common", + "version": "3.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/d9ea4a54ca2586db781f0265d36bea731ac66ec5", + "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5", + "shasum": "" + }, + "require": { + "doctrine/persistence": "^2.0 || ^3.0 || ^4.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0 || ^10.0", + "doctrine/collections": "^1", + "phpstan/phpstan": "^1.4.1", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.0", + "symfony/phpunit-bridge": "^6.1", + "vimeo/psalm": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "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": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", + "homepage": "https://www.doctrine-project.org/projects/common.html", + "keywords": [ + "common", + "doctrine", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/common/issues", + "source": "https://github.com/doctrine/common/tree/3.5.0" + }, + "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%2Fcommon", + "type": "tidelift" + } + ], + "time": "2025-01-01T22:12:03+00:00" + }, + { + "name": "doctrine/dbal", + "version": "3.9.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "ec16c82f20be1a7224e65ac67144a29199f87959" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/ec16c82f20be1a7224e65ac67144a29199f87959", + "reference": "ec16c82f20be1a7224e65ac67144a29199f87959", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/cache": "^1.11|^2.0", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "require-dev": { + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "9.6.22", + "slevomat/coding-standard": "8.13.1", + "squizlabs/php_codesniffer": "3.10.2", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "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": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.9.4" + }, + "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%2Fdbal", + "type": "tidelift" + } + ], + "time": "2025-01-16T08:28:55+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + }, + "time": "2024-01-30T19:34:25+00:00" + }, + { + "name": "doctrine/doctrine-bundle", + "version": "2.13.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "2363c43d9815a11657e452625cd64172d5587486" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/2363c43d9815a11657e452625cd64172d5587486", + "reference": "2363c43d9815a11657e452625cd64172d5587486", + "shasum": "" + }, + "require": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/dbal": "^3.7.0 || ^4.0", + "doctrine/persistence": "^2.2 || ^3", + "doctrine/sql-formatter": "^1.0.1", + "php": "^7.4 || ^8.0", + "symfony/cache": "^5.4 || ^6.0 || ^7.0", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/doctrine-bridge": "^5.4.46 || ~6.3.12 || ^6.4.3 || ^7.0.3", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" + }, + "conflict": { + "doctrine/annotations": ">=3.0", + "doctrine/orm": "<2.17 || >=4.0", + "twig/twig": "<1.34 || >=2.0 <2.4" + }, + "require-dev": { + "doctrine/annotations": "^1 || ^2", + "doctrine/coding-standard": "^12", + "doctrine/deprecations": "^1.0", + "doctrine/orm": "^2.17 || ^3.0", + "friendsofphp/proxy-manager-lts": "^1.0", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-phpunit": "2.0.3", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^9.5.26", + "psr/log": "^1.1.4 || ^2.0 || ^3.0", + "symfony/phpunit-bridge": "^6.1 || ^7.0", + "symfony/property-info": "^5.4 || ^6.0 || ^7.0", + "symfony/proxy-manager-bridge": "^5.4 || ^6.0", + "symfony/security-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", + "symfony/string": "^5.4 || ^6.0 || ^7.0", + "symfony/twig-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/validator": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^5.4 || ^6.2 || ^7.0", + "symfony/web-profiler-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0", + "twig/twig": "^1.34 || ^2.12 || ^3.0" + }, + "suggest": { + "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", + "ext-pdo": "*", + "symfony/web-profiler-bundle": "To use the data collector." + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\DoctrineBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org/" + } + ], + "description": "Symfony DoctrineBundle", + "homepage": "https://www.doctrine-project.org/", + "keywords": [ + "database", + "dbal", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineBundle/issues", + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.2" + }, + "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%2Fdoctrine-bundle", + "type": "tidelift" + } + ], + "time": "2025-01-15T11:12:38+00:00" + }, + { + "name": "doctrine/doctrine-migrations-bundle", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", + "reference": "a5c5fe0d2c6b911c03555046febb05a05a347078" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/a5c5fe0d2c6b911c03555046febb05a05a347078", + "reference": "a5c5fe0d2c6b911c03555046febb05a05a347078", + "shasum": "" + }, + "require": { + "doctrine/doctrine-bundle": "^2.4", + "doctrine/migrations": "^3.2", + "php": "^7.2 || ^8.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "composer/semver": "^3.0", + "doctrine/coding-standard": "^12", + "doctrine/orm": "^2.6 || ^3", + "doctrine/persistence": "^2.0 || ^3", + "phpstan/phpstan": "^1.4 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1.1 || ^2", + "phpstan/phpstan-symfony": "^1.3 || ^2", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/phpunit-bridge": "^6.3 || ^7", + "symfony/var-exporter": "^5.4 || ^6 || ^7" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\MigrationsBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org/" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineMigrationsBundle", + "homepage": "https://www.doctrine-project.org/", + "keywords": [ + "dbal", + "migrations", + "schema" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.0" + }, + "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%2Fdoctrine-migrations-bundle", + "type": "tidelift" + } + ], + "time": "2025-01-16T20:28:10+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.24" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "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": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/2.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%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2024-05-22T20:47:39+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "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": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.10" + }, + "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%2Finflector", + "type": "tidelift" + } + ], + "time": "2024-02-18T20:23:39+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + }, + "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%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+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": "doctrine/migrations", + "version": "3.8.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/migrations.git", + "reference": "5007eb1168691225ac305fe16856755c20860842" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/5007eb1168691225ac305fe16856755c20860842", + "reference": "5007eb1168691225ac305fe16856755c20860842", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/dbal": "^3.6 || ^4", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2.0", + "php": "^8.1", + "psr/log": "^1.1.3 || ^2 || ^3", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^6.2 || ^7.0" + }, + "conflict": { + "doctrine/orm": "<2.12 || >=4" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "doctrine/orm": "^2.13 || ^3", + "doctrine/persistence": "^2 || ^3", + "doctrine/sql-formatter": "^1.0", + "ext-pdo_sqlite": "*", + "fig/log-test": "^1", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-deprecation-rules": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpstan/phpstan-strict-rules": "^1.4", + "phpstan/phpstan-symfony": "^1.3", + "phpunit/phpunit": "^10.3", + "symfony/cache": "^5.4 || ^6.0 || ^7.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + }, + "suggest": { + "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", + "symfony/yaml": "Allows the use of yaml for migration configuration files." + }, + "bin": [ + "bin/doctrine-migrations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Migrations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Michael Simonson", + "email": "contact@mikesimonson.com" + } + ], + "description": "PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.", + "homepage": "https://www.doctrine-project.org/projects/migrations.html", + "keywords": [ + "database", + "dbal", + "migrations" + ], + "support": { + "issues": "https://github.com/doctrine/migrations/issues", + "source": "https://github.com/doctrine/migrations/tree/3.8.2" + }, + "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%2Fmigrations", + "type": "tidelift" + } + ], + "time": "2024-10-10T21:35:27+00:00" + }, + { + "name": "doctrine/orm", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/orm.git", + "reference": "b1f8253105aa5382c495e5f9f8ef34e297775428" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/orm/zipball/b1f8253105aa5382c495e5f9f8ef34e297775428", + "reference": "b1f8253105aa5382c495e5f9f8ef34e297775428", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/collections": "^2.2", + "doctrine/dbal": "^3.8.2 || ^4", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2", + "doctrine/inflector": "^1.4 || ^2.0", + "doctrine/instantiator": "^1.3 || ^2", + "doctrine/lexer": "^3", + "doctrine/persistence": "^3.3.1 || ^4", + "ext-ctype": "*", + "php": "^8.1", + "psr/cache": "^1 || ^2 || ^3", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^6.3.9 || ^7.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0", + "phpbench/phpbench": "^1.0", + "phpdocumentor/guides-cli": "^1.4", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "2.0.3", + "phpstan/phpstan-deprecation-rules": "^2", + "phpunit/phpunit": "^10.4.0", + "psr/log": "^1 || ^2 || ^3", + "squizlabs/php_codesniffer": "3.7.2", + "symfony/cache": "^5.4 || ^6.2 || ^7.0" + }, + "suggest": { + "ext-dom": "Provides support for XSD validation for XML mapping files", + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\ORM\\": "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": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Object-Relational-Mapper for PHP", + "homepage": "https://www.doctrine-project.org/projects/orm.html", + "keywords": [ + "database", + "orm" + ], + "support": { + "issues": "https://github.com/doctrine/orm/issues", + "source": "https://github.com/doctrine/orm/tree/3.3.1" + }, + "time": "2024-12-19T07:08:14+00:00" + }, + { + "name": "doctrine/persistence", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/0ea965320cec355dba75031c1b23d4c78362e3ff", + "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^1 || ^2", + "php": "^7.2 || ^8.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0" + }, + "conflict": { + "doctrine/common": "<2.10" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "doctrine/common": "^3.0", + "phpstan/phpstan": "1.12.7", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5.38 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Persistence\\": "src/Persistence" + } + }, + "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": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", + "homepage": "https://www.doctrine-project.org/projects/persistence.html", + "keywords": [ + "mapper", + "object", + "odm", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/3.4.0" + }, + "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%2Fpersistence", + "type": "tidelift" + } + ], + "time": "2024-10-30T19:48:12+00:00" + }, + { + "name": "doctrine/sql-formatter", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/sql-formatter.git", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ergebnis/phpunit-slow-test-detector": "^2.14", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5" + }, + "bin": [ + "bin/sql-formatter" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\SqlFormatter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "https://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/doctrine/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "support": { + "issues": "https://github.com/doctrine/sql-formatter/issues", + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2" + }, + "time": "2025-01-24T11:45:48+00:00" + }, + { + "name": "gedmo/doctrine-extensions", + "version": "v3.17.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine-extensions/DoctrineExtensions.git", + "reference": "eabb45018c5a4362b46c5beae3881261da89f900" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/eabb45018c5a4362b46c5beae3881261da89f900", + "reference": "eabb45018c5a4362b46c5beae3881261da89f900", + "shasum": "" + }, + "require": { + "behat/transliterator": "^1.2", + "doctrine/collections": "^1.2 || ^2.0", + "doctrine/common": "^2.13 || ^3.0", + "doctrine/deprecations": "^1.0", + "doctrine/event-manager": "^1.2 || ^2.0", + "doctrine/persistence": "^2.2 || ^3.0", + "php": "^7.4 || ^8.0", + "psr/cache": "^1 || ^2 || ^3", + "psr/clock": "^1", + "symfony/cache": "^5.4 || ^6.0 || ^7.0" + }, + "conflict": { + "doctrine/annotations": "<1.13 || >=3.0", + "doctrine/dbal": "<3.7 || >=5.0", + "doctrine/mongodb-odm": "<2.3 || >=3.0", + "doctrine/orm": "<2.14.0 || 2.16.0 || 2.16.1 || >=4.0" + }, + "require-dev": { + "doctrine/annotations": "^1.13 || ^2.0", + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/dbal": "^3.7 || ^4.0", + "doctrine/doctrine-bundle": "^2.3", + "doctrine/mongodb-odm": "^2.3", + "doctrine/orm": "^2.14.0 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.14.0", + "nesbot/carbon": "^2.71 || ^3.0", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-doctrine": "^1.4", + "phpstan/phpstan-phpunit": "^1.4", + "phpunit/phpunit": "^9.6", + "rector/rector": "^1.1", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/doctrine-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^6.0 || ^7.0", + "symfony/uid": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + }, + "suggest": { + "doctrine/mongodb-odm": "to use the extensions with the MongoDB ODM", + "doctrine/orm": "to use the extensions with the ORM" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Gedmo\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gediminas Morkevicius", + "email": "gediminas.morkevicius@gmail.com" + }, + { + "name": "Gustavo Falco", + "email": "comfortablynumb84@gmail.com" + }, + { + "name": "David Buchmann", + "email": "david@liip.ch" + } + ], + "description": "Doctrine behavioral extensions", + "homepage": "http://gediminasm.org/", + "keywords": [ + "Blameable", + "behaviors", + "doctrine", + "extensions", + "gedmo", + "loggable", + "nestedset", + "odm", + "orm", + "sluggable", + "sortable", + "timestampable", + "translatable", + "tree", + "uploadable" + ], + "support": { + "email": "gediminas.morkevicius@gmail.com", + "issues": "https://github.com/doctrine-extensions/DoctrineExtensions/issues", + "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.17.1", + "wiki": "https://github.com/Atlantic18/DoctrineExtensions/tree/main/doc" + }, + "funding": [ + { + "url": "https://github.com/l3pp4rd", + "type": "github" + }, + { + "url": "https://github.com/mbabker", + "type": "github" + }, + { + "url": "https://github.com/phansys", + "type": "github" + }, + { + "url": "https://github.com/stof", + "type": "github" + } + ], + "time": "2024-10-07T22:30:27+00:00" + }, + { + "name": "knplabs/knp-time-bundle", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/KnpTimeBundle.git", + "reference": "93e9528415b28a19872d74b28e816045c0fd217b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/KnpTimeBundle/zipball/93e9528415b28a19872d74b28e816045c0fd217b", + "reference": "93e9528415b28a19872d74b28e816045c0fd217b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "phpunit/phpunit": "^9.6", + "symfony/framework-bundle": "^5.4|^6.0|^7.0", + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", + "symfony/twig-bundle": "^5.4|^6.0|^7.0" + }, + "suggest": { + "symfony/twig-bundle": "to use the Twig `time_diff()` function and `|time_diff`/`|duration` filter" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Bundle\\TimeBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KnpLabs Team", + "homepage": "https://knplabs.com/" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/KnpLabs/KnpTimeBundle/contributors" + } + ], + "description": "Making your dates and durations look sensible and descriptive", + "homepage": "https://github.com/KnpLabs/KnpTimeBundle", + "keywords": [ + "bundle", + "date", + "descriptive time", + "duration", + "knp", + "knplabs", + "time" + ], + "support": { + "issues": "https://github.com/KnpLabs/KnpTimeBundle/issues", + "source": "https://github.com/KnpLabs/KnpTimeBundle/tree/v2.4.0" + }, + "time": "2024-06-11T09:38:28+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.8.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/32e515fdc02cdafbe4593e30a9350d486b125b67", + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be/" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.8.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2024-11-12T13:57:08+00:00" + }, + { + "name": "pagerfanta/core", + "version": "v4.7.1", + "source": { + "type": "git", + "url": "https://github.com/Pagerfanta/core.git", + "reference": "829eaa9737b3cfae1406f67a4e9ee36e0e37caf9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Pagerfanta/core/zipball/829eaa9737b3cfae1406f67a4e9ee36e0e37caf9", + "reference": "829eaa9737b3cfae1406f67a4e9ee36e0e37caf9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Pagerfanta\\": "./" + }, + "exclude-from-classmap": [ + "Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Core Pagerfanta API", + "keywords": [ + "pagerfanta" + ], + "support": { + "source": "https://github.com/Pagerfanta/core/tree/v4.7.1" + }, + "time": "2024-12-13T15:05:37+00:00" + }, + { + "name": "pagerfanta/doctrine-orm-adapter", + "version": "v4.7.1", + "source": { + "type": "git", + "url": "https://github.com/Pagerfanta/doctrine-orm-adapter.git", + "reference": "b3be49948e84b67c023c820abc54ea574a100d5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Pagerfanta/doctrine-orm-adapter/zipball/b3be49948e84b67c023c820abc54ea574a100d5d", + "reference": "b3be49948e84b67c023c820abc54ea574a100d5d", + "shasum": "" + }, + "require": { + "doctrine/orm": "^2.14 || ^3.0", + "pagerfanta/core": "^3.7 || ^4.0", + "php": "^8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.5", + "symfony/cache": "^5.4 || ^6.3 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Pagerfanta\\Doctrine\\ORM\\": "./" + }, + "exclude-from-classmap": [ + "Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Pagerfanta adapter for Doctrine ORM", + "keywords": [ + "doctrine", + "orm", + "pagerfanta" + ], + "support": { + "source": "https://github.com/Pagerfanta/doctrine-orm-adapter/tree/v4.7.1" + }, + "time": "2024-11-30T19:18:10+00:00" + }, + { + "name": "php-cs-fixer/shim", + "version": "v3.65.0", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/shim.git", + "reference": "4983ec79b9dee926695ac324ea6e8d291935525d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/4983ec79b9dee926695ac324ea6e8d291935525d", + "reference": "4983ec79b9dee926695ac324ea6e8d291935525d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "replace": { + "friendsofphp/php-cs-fixer": "self.version" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer", + "php-cs-fixer.phar" + ], + "type": "application", + "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", + "support": { + "issues": "https://github.com/PHP-CS-Fixer/shim/issues", + "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.65.0" + }, + "time": "2024-11-25T00:39:41+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org/", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.6.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f3558a4c23426d12bffeaab463f8a8d8b681193c", + "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.0" + }, + "time": "2024-11-12T11:25:25+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.18|^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + }, + "time": "2024-11-09T15:12:26+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.33.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0" + }, + "time": "2024-10-13T11:25:22+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+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/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": "stof/doctrine-extensions-bundle", + "version": "v1.13.0", + "source": { + "type": "git", + "url": "https://github.com/stof/StofDoctrineExtensionsBundle.git", + "reference": "bf00701bff3f2b7c4bf6d963101c9ea6968d694f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stof/StofDoctrineExtensionsBundle/zipball/bf00701bff3f2b7c4bf6d963101c9ea6968d694f", + "reference": "bf00701bff3f2b7c4bf6d963101c9ea6968d694f", + "shasum": "" + }, + "require": { + "gedmo/doctrine-extensions": "^3.15.0", + "php": "^7.4 || ^8.0", + "symfony/cache": "^5.4 || ^6.0 || ^7.0", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-deprecation-rules": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpstan/phpstan-strict-rules": "^1.5", + "phpstan/phpstan-symfony": "^1.3", + "symfony/mime": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^v6.4.1 || ^7.0.1", + "symfony/security-core": "^5.4 || ^6.0 || ^7.0" + }, + "suggest": { + "doctrine/doctrine-bundle": "to use the ORM extensions", + "doctrine/mongodb-odm-bundle": "to use the MongoDB ODM extensions", + "symfony/mime": "To use the Mime component integration for Uploadable" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Stof\\DoctrineExtensionsBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + } + ], + "description": "Integration of the gedmo/doctrine-extensions with Symfony", + "homepage": "https://github.com/stof/StofDoctrineExtensionsBundle", + "keywords": [ + "behaviors", + "doctrine2", + "extensions", + "gedmo", + "loggable", + "nestedset", + "sluggable", + "sortable", + "timestampable", + "translatable", + "tree" + ], + "support": { + "issues": "https://github.com/stof/StofDoctrineExtensionsBundle/issues", + "source": "https://github.com/stof/StofDoctrineExtensionsBundle/tree/v1.13.0" + }, + "time": "2025-01-07T08:10:54+00:00" + }, + { + "name": "symfony/asset", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "0dcd51490d7fc9fbf3c8f5aec6df182920fc0426" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/0dcd51490d7fc9fbf3c8f5aec6df182920fc0426", + "reference": "0dcd51490d7fc9fbf3c8f5aec6df182920fc0426", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "conflict": { + "symfony/http-foundation": "<6.4" + }, + "require-dev": { + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Asset\\": "" + }, + "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": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/asset/tree/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-25T15:11:02+00:00" + }, + { + "name": "symfony/asset-mapper", + "version": "v7.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset-mapper.git", + "reference": "bb1c2f5f394c84ce5b1ac8c94d0ac213ae3ce5f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset-mapper/zipball/bb1c2f5f394c84ce5b1ac8c94d0ac213ae3ce5f8", + "reference": "bb1c2f5f394c84ce5b1ac8c94d0ac213ae3ce5f8", + "shasum": "" + }, + "require": { + "composer/semver": "^3.0", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/filesystem": "^7.1", + "symfony/http-client": "^6.4|^7.0" + }, + "conflict": { + "symfony/framework-bundle": "<6.4" + }, + "require-dev": { + "symfony/asset": "^6.4|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/event-dispatcher-contracts": "^3.0", + "symfony/finder": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\AssetMapper\\": "" + }, + "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": "Maps directories of assets & makes them available in a public directory with versioned filenames.", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/asset-mapper/tree/v7.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-20T11:08:58+00:00" + }, + { + "name": "symfony/cache", + "version": "v7.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "18e0ba45a50032aa53dfebf830ec2980bb131591" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/18e0ba45a50032aa53dfebf830ec2980bb131591", + "reference": "18e0ba45a50032aa53dfebf830ec2980bb131591", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^2.5|^3", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.4|^7.0" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/dependency-injection": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/var-dumper": "<6.4" + }, + "provide": { + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "classmap": [ + "Traits/ValueWrapper.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com/", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v7.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-20T10:42:04+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "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 caching", + "homepage": "https://symfony.com/", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/config", + "version": "v7.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8", + "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/filesystem": "^7.1", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "require-dev": { + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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 you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/config/tree/v7.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-04T11:34:07+00:00" + }, + { + "name": "symfony/console", + "version": "v7.1.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/ff04e5b5ba043d2badfb308197b9e6b42883fcd5", + "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.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", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.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.1.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-06T14:23:19+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v7.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "900d2eac6e33aef743bdc10dd8c75d012215fd08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/900d2eac6e33aef743bdc10dd8c75d012215fd08", + "reference": "900d2eac6e33aef743bdc10dd8c75d012215fd08", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^3.5", + "symfony/var-exporter": "^6.4|^7.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<6.4", + "symfony/finder": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "symfony/config": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "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 you to standardize and centralize the way objects are constructed in your application", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v7.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-25T15:44:54+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/doctrine-bridge", + "version": "v7.1.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "e8bb28f54741c0eb91ff7bc07f3abf5ebd4a3609" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/e8bb28f54741c0eb91ff7bc07f3abf5ebd4a3609", + "reference": "e8bb28f54741c0eb91ff7bc07f3abf5ebd4a3609", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^2", + "doctrine/persistence": "^3.1", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "doctrine/lexer": "<1.1", + "doctrine/orm": "<2.15", + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/form": "<6.4.6|>=7,<7.0.6", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/lock": "<6.4", + "symfony/messenger": "<6.4", + "symfony/property-info": "<6.4", + "symfony/security-bundle": "<6.4", + "symfony/security-core": "<6.4", + "symfony/validator": "<6.4" + }, + "require-dev": { + "doctrine/collections": "^1.0|^2.0", + "doctrine/data-fixtures": "^1.1|^2", + "doctrine/dbal": "^3.6|^4", + "doctrine/orm": "^2.15|^3", + "psr/log": "^1|^2|^3", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/doctrine-messenger": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4.6|^7.0.6", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/type-info": "^7.1", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "" + }, + "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 integration for Doctrine with various Symfony components", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-19T14:23:39+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v7.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "245d1afe223664d2276afb75177d8988c328fb78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/245d1afe223664d2276afb75177d8988c328fb78", + "reference": "245d1afe223664d2276afb75177d8988c328fb78", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "conflict": { + "symfony/console": "<6.4", + "symfony/process": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Dotenv\\": "" + }, + "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": "Registers environment variables from a .env file", + "homepage": "https://symfony.com/", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "source": "https://github.com/symfony/dotenv/tree/v7.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-27T11:17:28+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "010e44661f4c6babaf8c4862fe68c24a53903342" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/010e44661f4c6babaf8c4862fe68c24a53903342", + "reference": "010e44661f4c6babaf8c4862fe68c24a53903342", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "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 to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v7.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-05T15:34:55+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "87254c78dd50721cfd015b62277a8281c5589702" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702", + "reference": "87254c78dd50721cfd015b62277a8281c5589702", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.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": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^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/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/c835867b3c62bb05c7fe3d637c871c7ae52024d4", + "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^6.4|^7.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.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-25T15:11:02+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/2cb89664897be33f78c65d3d2845954c8d7a43b8", + "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.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.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-01T08:31:23+00:00" + }, + { + "name": "symfony/flex", + "version": "v2.4.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/flex.git", + "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/flex/zipball/92f4fba342161ff36072bd3b8e0b3c6c23160402", + "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.1", + "php": ">=8.0" + }, + "conflict": { + "composer/semver": "<1.7.2" + }, + "require-dev": { + "composer/composer": "^2.1", + "symfony/dotenv": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/phpunit-bridge": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Flex\\Flex" + }, + "autoload": { + "psr-4": { + "Symfony\\Flex\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "description": "Composer plugin for Symfony", + "support": { + "issues": "https://github.com/symfony/flex/issues", + "source": "https://github.com/symfony/flex/tree/v2.4.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-07T08:51:54+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "1d616d762905091e798d64c53ffe3840ccfc3d89" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/1d616d762905091e798d64c53ffe3840ccfc3d89", + "reference": "1d616d762905091e798d64c53ffe3840ccfc3d89", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.2", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^7.1.5", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/filesystem": "^7.1", + "symfony/finder": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/routing": "^6.4|^7.0" + }, + "conflict": { + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/asset": "<6.4", + "symfony/asset-mapper": "<6.4", + "symfony/clock": "<6.4", + "symfony/console": "<6.4", + "symfony/dom-crawler": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/lock": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/runtime": "<6.4.13|>=7.0,<7.1.6", + "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", + "symfony/security-core": "<6.4", + "symfony/security-csrf": "<6.4", + "symfony/serializer": "<6.4", + "symfony/stopwatch": "<6.4", + "symfony/translation": "<6.4", + "symfony/twig-bridge": "<6.4", + "symfony/twig-bundle": "<6.4", + "symfony/validator": "<6.4", + "symfony/web-profiler-bundle": "<6.4", + "symfony/workflow": "<6.4" + }, + "require-dev": { + "doctrine/persistence": "^1.3|^2|^3", + "dragonmantank/cron-expression": "^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "seld/jsonlint": "^1.10", + "symfony/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/dotenv": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/mailer": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/notifier": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/scheduler": "^6.4.4|^7.0.4", + "symfony/security-bundle": "^6.4|^7.0", + "symfony/semaphore": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", + "symfony/type-info": "^7.1", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "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 tight integration between Symfony components and the Symfony full-stack framework", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/framework-bundle/tree/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-25T15:11:02+00:00" + }, + { + "name": "symfony/http-client", + "version": "v7.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "2ec49720a38a8041673ba4c42512bfd845218c56" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/2ec49720a38a8041673ba4c42512bfd845218c56", + "reference": "2ec49720a38a8041673ba4c42512bfd845218c56", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-client-contracts": "~3.4.3|^3.5.1", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "php-http/discovery": "<1.15", + "symfony/http-foundation": "<6.4" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "3.0" + }, + "require-dev": { + "amphp/amp": "^2.5", + "amphp/http-client": "^4.2.1", + "amphp/http-tunnel": "^1.0", + "amphp/socket": "^1.1", + "guzzlehttp/promises": "^1.4|^2.0", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "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 powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com/", + "keywords": [ + "http" + ], + "support": { + "source": "https://github.com/symfony/http-client/tree/v7.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-27T11:52:45+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/c2f3ad828596624ca39ea40f83617ef51ca8bbf9", + "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + }, + "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 HTTP clients", + "homepage": "https://symfony.com/", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-25T12:02:18+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "82765842fb599c7ed839b650214680c7ee5779be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/82765842fb599c7ed839b650214680c7ee5779be", + "reference": "82765842fb599c7ed839b650214680c7ee5779be", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "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": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-13T18:58:36+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "649d0e23c571344ef1153d4ffb2564f534b85a45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/649d0e23c571344ef1153d4ffb2564f534b85a45", + "reference": "649d0e23c571344ef1153d4ffb2564f534b85a45", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.0.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "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 structured process for converting a Request into a Response", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v7.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-27T12:55:11+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "e1da878cf5f701df5f5c1799bdbf827acee5a76e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/e1da878cf5f701df5f5c1799bdbf827acee5a76e", + "reference": "e1da878cf5f701df5f5c1799bdbf827acee5a76e", + "shasum": "" + }, + "require": { + "monolog/monolog": "^3", + "php": ">=8.2", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/security-core": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/mailer": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Monolog\\": "" + }, + "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 integration for Monolog with various Symfony components", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/monolog-bridge/tree/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-14T08:49:35+00:00" + }, + { + "name": "symfony/monolog-bundle", + "version": "v3.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", + "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", + "shasum": "" + }, + "require": { + "monolog/monolog": "^1.25.1 || ^2.0 || ^3.0", + "php": ">=7.2.5", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", + "symfony/monolog-bridge": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^6.3 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MonologBundle\\": "" + }, + "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": "Symfony MonologBundle", + "homepage": "https://symfony.com/", + "keywords": [ + "log", + "logging" + ], + "support": { + "issues": "https://github.com/symfony/monolog-bundle/issues", + "source": "https://github.com/symfony/monolog-bundle/tree/v3.10.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-11-06T17:08:13+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "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.3+ features to lower PHP versions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/process", + "version": "v7.1.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/42783370fda6e538771f7c7a36e9fa2ee3a84892", + "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892", + "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.1.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-06T14:23:19+00:00" + }, + { + "name": "symfony/property-access", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "975d7f7fd8fcb952364c6badc46d01a580532bf9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/975d7f7fd8fcb952364c6badc46d01a580532bf9", + "reference": "975d7f7fd8fcb952364c6badc46d01a580532bf9", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/property-info": "^6.4|^7.0" + }, + "require-dev": { + "symfony/cache": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "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 functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com/", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property-path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/property-info", + "version": "v7.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "e9a7b2a4984457c3849afd2b1a1ec7f2994cb1b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/e9a7b2a4984457c3849afd2b1a1ec7f2994cb1b5", + "reference": "e9a7b2a4984457c3849afd2b1a1ec7f2994cb1b5", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/string": "^6.4|^7.0", + "symfony/type-info": "^7.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<5.2", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/dependency-injection": "<6.4" + }, + "require-dev": { + "phpdocumentor/reflection-docblock": "^5.2", + "phpstan/phpdoc-parser": "^1.0|^2.0", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts information about PHP class' properties using metadata of popular sources", + "homepage": "https://symfony.com/", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v7.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-27T09:50:41+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "a27bb8e0cc3ca4baf17159d053910c9736c3aa4c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/a27bb8e0cc3ca4baf17159d053910c9736c3aa4c", + "reference": "a27bb8e0cc3ca4baf17159d053910c9736c3aa4c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "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": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com/", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-13T16:12:35+00:00" + }, + { + "name": "symfony/runtime", + "version": "v7.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/runtime.git", + "reference": "9889783c17e8a68fa5e88c8e8a1a85e802558dba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/runtime/zipball/9889783c17e8a68fa5e88c8e8a1a85e802558dba", + "reference": "9889783c17e8a68fa5e88c8e8a1a85e802558dba", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": ">=8.2" + }, + "conflict": { + "symfony/dotenv": "<6.4" + }, + "require-dev": { + "composer/composer": "^2.6", + "symfony/console": "^6.4|^7.0", + "symfony/dotenv": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Component\\Runtime\\Internal\\ComposerPlugin" + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Runtime\\": "", + "Symfony\\Runtime\\Symfony\\Component\\": "Internal/" + }, + "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": "Enables decoupling PHP applications from global state", + "homepage": "https://symfony.com/", + "keywords": [ + "runtime" + ], + "support": { + "source": "https://github.com/symfony/runtime/tree/v7.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-05T16:45:54+00:00" + }, + { + "name": "symfony/serializer", + "version": "v7.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "39ec8beb1b8149c96785abad0e9ee390375a3e58" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/39ec8beb1b8149c96785abad0e9ee390375a3e58", + "reference": "39ec8beb1b8149c96785abad0e9ee390375a3e58", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/dependency-injection": "<6.4", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/type-info": "<7.1.5", + "symfony/uid": "<6.4", + "symfony/validator": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", + "seld/jsonlint": "^1.10", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/type-info": "^7.1.5", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "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": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/serializer/tree/v7.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-14T21:24:44+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "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": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/stimulus-bundle", + "version": "v2.22.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stimulus-bundle.git", + "reference": "2e840a3b12f06b33441cc3eb8907f51b806a7e4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/2e840a3b12f06b33441cc3eb8907f51b806a7e4b", + "reference": "2e840a3b12f06b33441cc3eb8907f51b806a7e4b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/deprecation-contracts": "^2.0|^3.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "twig/twig": "^2.15.3|^3.8" + }, + "require-dev": { + "symfony/asset-mapper": "^6.3|^7.0", + "symfony/framework-bundle": "^5.4|^6.0|^7.0", + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", + "symfony/twig-bundle": "^5.4|^6.0|^7.0", + "zenstruck/browser": "^1.4" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\UX\\StimulusBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Integration with your Symfony app & Stimulus!", + "keywords": [ + "symfony-ux" + ], + "support": { + "source": "https://github.com/symfony/stimulus-bundle/tree/v2.22.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-20T07:57:38+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "8b4a434e6e7faf6adedffb48783a5c75409a1a05" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8b4a434e6e7faf6adedffb48783a5c75409a1a05", + "reference": "8b4a434e6e7faf6adedffb48783a5c75409a1a05", + "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.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/string", + "version": "v7.1.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/591ebd41565f356fcd8b090fe64dbb5878f50281", + "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.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.1.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-13T13:31:21+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f", + "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.18|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "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 to internationalize your application", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-28T12:35:13+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "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 translation", + "homepage": "https://symfony.com/", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v7.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "67ea8a59432307efb0fdcae0d8512e7c4a9e4c01" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/67ea8a59432307efb0fdcae0d8512e7c4a9e4c01", + "reference": "67ea8a59432307efb0fdcae0d8512e7c4a9e4c01", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/translation-contracts": "^2.5|^3", + "twig/twig": "^3.9" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/console": "<6.4", + "symfony/form": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/mime": "<6.4", + "symfony/serializer": "<6.4", + "symfony/translation": "<6.4", + "symfony/workflow": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/emoji": "^7.1", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/security-http": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/cssinliner-extra": "^2.12|^3", + "twig/inky-extra": "^2.12|^3", + "twig/markdown-extra": "^2.12|^3" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "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 integration for Twig with various Symfony components", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v7.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-25T12:02:18+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "af902314a71fb412ae412094f7e1d7e49594507b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/af902314a71fb412ae412094f7e1d7e49594507b", + "reference": "af902314a71fb412ae412094f7e1d7e49594507b", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "php": ">=8.2", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "conflict": { + "symfony/framework-bundle": "<6.4", + "symfony/translation": "<6.4" + }, + "require-dev": { + "symfony/asset": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "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 tight integration of Twig into the Symfony full-stack framework", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/twig-bundle/tree/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/type-info", + "version": "v7.1.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/type-info.git", + "reference": "51535dde21c7abf65c9d000a30bb15f6478195e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/type-info/zipball/51535dde21c7abf65c9d000a30bb15f6478195e6", + "reference": "51535dde21c7abf65c9d000a30bb15f6478195e6", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/container": "^1.1|^2.0" + }, + "conflict": { + "phpstan/phpdoc-parser": "<1.0", + "symfony/dependency-injection": "<6.4", + "symfony/property-info": "<6.4" + }, + "require-dev": { + "phpstan/phpdoc-parser": "^1.0|^2.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\TypeInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Arlaud", + "email": "mathias.arlaud@gmail.com" + }, + { + "name": "Baptiste LEDUC", + "email": "baptiste.leduc@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts PHP types information.", + "homepage": "https://symfony.com/", + "keywords": [ + "PHPStan", + "phpdoc", + "symfony", + "type" + ], + "support": { + "source": "https://github.com/symfony/type-info/tree/v7.1.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-07T15:49:33+00:00" + }, + { + "name": "symfony/ux-turbo", + "version": "v2.22.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/ux-turbo.git", + "reference": "f7af0aa09190354dd4630ea330d8a3fc3e8ef278" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/f7af0aa09190354dd4630ea330d8a3fc3e8ef278", + "reference": "f7af0aa09190354dd4630ea330d8a3fc3e8ef278", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/stimulus-bundle": "^2.9.1" + }, + "conflict": { + "symfony/flex": "<1.13" + }, + "require-dev": { + "dbrekelmans/bdi": "dev-main", + "doctrine/doctrine-bundle": "^2.4.3", + "doctrine/orm": "^2.8 | 3.0", + "phpstan/phpstan": "^1.10", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/debug-bundle": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/form": "^5.4|^6.0|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/mercure-bundle": "^0.3.7", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/panther": "^2.1", + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|6.3.*|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/security-core": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", + "symfony/ux-twig-component": "^2.21", + "symfony/web-profiler-bundle": "^5.4|^6.0|^7.0" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "url": "https://github.com/symfony/ux", + "name": "symfony/ux" + } + }, + "autoload": { + "psr-4": { + "Symfony\\UX\\Turbo\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "kevin@dunglas.fr" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Hotwire Turbo integration for Symfony", + "homepage": "https://symfony.com/", + "keywords": [ + "hotwire", + "javascript", + "mercure", + "symfony-ux", + "turbo", + "turbo-stream" + ], + "support": { + "source": "https://github.com/symfony/ux-turbo/tree/v2.22.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-29T15:25:16+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.1.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", + "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "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 mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com/", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.1.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-08T15:46:42+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "90173ef89c40e7c8c616653241048705f84130ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/90173ef89c40e7c8c616653241048705f84130ef", + "reference": "90173ef89c40e7c8c616653241048705f84130ef", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "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": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com/", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", + "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.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.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfonycasts/tailwind-bundle", + "version": "v0.7.1", + "source": { + "type": "git", + "url": "https://github.com/SymfonyCasts/tailwind-bundle.git", + "reference": "81c9e6ff2bb1a95e67fc6af04ca87fccdcf55aa4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SymfonyCasts/tailwind-bundle/zipball/81c9e6ff2bb1a95e67fc6af04ca87fccdcf55aa4", + "reference": "81c9e6ff2bb1a95e67fc6af04ca87fccdcf55aa4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/asset-mapper": "^6.3|^7.0", + "symfony/cache": "^6.3|^7.0", + "symfony/console": "^5.4|^6.3|^7.0", + "symfony/http-client": "^5.4|^6.3|^7.0", + "symfony/process": "^5.4|^6.3|^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6", + "symfony/filesystem": "^6.3|^7.0", + "symfony/framework-bundle": "^6.3|^7.0", + "symfony/phpunit-bridge": "^6.3.9|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfonycasts\\TailwindBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ryan Weaver", + "homepage": "https://symfonycasts.com/" + } + ], + "description": "Delightful Tailwind Support for Symfony + AssetMapper", + "keywords": [ + "asset-mapper", + "tailwind" + ], + "support": { + "issues": "https://github.com/SymfonyCasts/tailwind-bundle/issues", + "source": "https://github.com/SymfonyCasts/tailwind-bundle/tree/v0.7.1" + }, + "time": "2025-01-23T14:54:07+00:00" + }, + { + "name": "twig/extra-bundle", + "version": "v3.16.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/twig-extra-bundle.git", + "reference": "9746573ca4bc1cd03a767a183faadaf84e0c31fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/9746573ca4bc1cd03a767a183faadaf84e0c31fa", + "reference": "9746573ca4bc1cd03a767a183faadaf84e0c31fa", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/framework-bundle": "^5.4|^6.4|^7.0", + "symfony/twig-bundle": "^5.4|^6.4|^7.0", + "twig/twig": "^3.2|^4.0" + }, + "require-dev": { + "league/commonmark": "^1.0|^2.0", + "symfony/phpunit-bridge": "^6.4|^7.0", + "twig/cache-extra": "^3.0", + "twig/cssinliner-extra": "^3.0", + "twig/html-extra": "^3.0", + "twig/inky-extra": "^3.0", + "twig/intl-extra": "^3.0", + "twig/markdown-extra": "^3.0", + "twig/string-extra": "^3.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Twig\\Extra\\TwigExtraBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org/", + "role": "Lead Developer" + } + ], + "description": "A Symfony bundle for extra Twig extensions", + "homepage": "https://twig.symfony.com/", + "keywords": [ + "bundle", + "extra", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.16.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2024-09-26T19:22:23+00:00" + }, + { + "name": "twig/twig", + "version": "v3.16.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "475ad2dc97d65d8631393e721e7e44fb544f0561" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/475ad2dc97d65d8631393e721e7e44fb544f0561", + "reference": "475ad2dc97d65d8631393e721e7e44fb544f0561", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php81": "^1.29" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org/", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com/", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.16.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2024-11-29T08:27:05+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/data-fixtures", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/data-fixtures.git", + "reference": "f7f1e12d6bceb58c204b3e77210a103c1c57601e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/f7f1e12d6bceb58c204b3e77210a103c1c57601e", + "reference": "f7f1e12d6bceb58c204b3e77210a103c1c57601e", + "shasum": "" + }, + "require": { + "doctrine/persistence": "^3.1 || ^4.0", + "php": "^8.1", + "psr/log": "^1.1 || ^2 || ^3" + }, + "conflict": { + "doctrine/dbal": "<3.5 || >=5", + "doctrine/orm": "<2.14 || >=4", + "doctrine/phpcr-odm": "<1.3.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "doctrine/dbal": "^3.5 || ^4", + "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", + "doctrine/orm": "^2.14 || ^3", + "ext-sqlite3": "*", + "fig/log-test": "^1", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5.3", + "symfony/cache": "^6.4 || ^7", + "symfony/var-exporter": "^6.4 || ^7" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)", + "doctrine/mongodb-odm": "For loading MongoDB ODM fixtures", + "doctrine/orm": "For loading ORM fixtures", + "doctrine/phpcr-odm": "For loading PHPCR ODM fixtures" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\DataFixtures\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Data Fixtures for all Doctrine Object Managers", + "homepage": "https://www.doctrine-project.org/", + "keywords": [ + "database" + ], + "support": { + "issues": "https://github.com/doctrine/data-fixtures/issues", + "source": "https://github.com/doctrine/data-fixtures/tree/2.0.2" + }, + "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%2Fdata-fixtures", + "type": "tidelift" + } + ], + "time": "2025-01-21T13:21:31+00:00" + }, + { + "name": "doctrine/doctrine-fixtures-bundle", + "version": "3.7.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", + "reference": "bd59519a7532b9e1a41cef4049d5326dfac7def9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/bd59519a7532b9e1a41cef4049d5326dfac7def9", + "reference": "bd59519a7532b9e1a41cef4049d5326dfac7def9", + "shasum": "" + }, + "require": { + "doctrine/data-fixtures": "^1.5 || ^2.0", + "doctrine/doctrine-bundle": "^2.2", + "doctrine/orm": "^2.14.0 || ^3.0", + "doctrine/persistence": "^2.4 || ^3.0", + "php": "^7.4 || ^8.0", + "psr/log": "^1 || ^2 || ^3", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/doctrine-bridge": "^5.4.48 || ^6.4.16 || ^7.1.9", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0" + }, + "conflict": { + "doctrine/dbal": "< 3" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^9.6.13", + "symfony/phpunit-bridge": "^6.3.6" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\FixturesBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org/" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineFixturesBundle", + "homepage": "https://www.doctrine-project.org/", + "keywords": [ + "Fixture", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.7.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%2Fdoctrine-fixtures-bundle", + "type": "tidelift" + } + ], + "time": "2024-12-03T17:07:51+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.24.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" + }, + "time": "2024-11-21T13:46:39+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.3.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + }, + "time": "2024-10-08T18:51:32+00:00" + }, + { + "name": "symfony/debug-bundle", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug-bundle.git", + "reference": "c91a650aa390071d22dfaf32c2ff77fda27e9583" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/c91a650aa390071d22dfaf32c2ff77fda27e9583", + "reference": "c91a650aa390071d22dfaf32c2ff77fda27e9583", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=8.2", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4" + }, + "require-dev": { + "symfony/config": "^6.4|^7.0", + "symfony/web-profiler-bundle": "^6.4|^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\DebugBundle\\": "" + }, + "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 tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/debug-bundle/tree/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/maker-bundle", + "version": "v1.61.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/maker-bundle.git", + "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/a3b7f14d349f8f44ed752d4dde2263f77510cc18", + "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "nikic/php-parser": "^4.18|^5.0", + "php": ">=8.1", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.2|^3", + "symfony/filesystem": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0" + }, + "conflict": { + "doctrine/doctrine-bundle": "<2.10", + "doctrine/orm": "<2.15" + }, + "require-dev": { + "composer/semver": "^3.0", + "doctrine/doctrine-bundle": "^2.5.0", + "doctrine/orm": "^2.15|^3", + "symfony/http-client": "^6.4|^7.0", + "symfony/phpunit-bridge": "^6.4.1|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/twig": "^3.0|^4.x-dev" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MakerBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.", + "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html", + "keywords": [ + "code generator", + "dev", + "generator", + "scaffold", + "scaffolding" + ], + "support": { + "issues": "https://github.com/symfony/maker-bundle/issues", + "source": "https://github.com/symfony/maker-bundle/tree/v1.61.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-08-29T22:50:23+00:00" + }, + { + "name": "symfony/web-profiler-bundle", + "version": "v7.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "6f26474e0e8ff746cb0abaddf9ebe0b067172fb1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/6f26474e0e8ff746cb0abaddf9ebe0b067172fb1", + "reference": "6f26474e0e8ff746cb0abaddf9ebe0b067172fb1", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/config": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", + "twig/twig": "^3.10" + }, + "conflict": { + "symfony/form": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4" + }, + "require-dev": { + "symfony/browser-kit": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\WebProfilerBundle\\": "" + }, + "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 development tool that gives detailed information about the execution of any request", + "homepage": "https://symfony.com/", + "keywords": [ + "dev" + ], + "support": { + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-19T10:11:44+00:00" + }, + { + "name": "zenstruck/assert", + "version": "v1.5.1", + "source": { + "type": "git", + "url": "https://github.com/zenstruck/assert.git", + "reference": "39554ce3a275fbf8c870b251e620101f644e9277" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zenstruck/assert/zipball/39554ce3a275fbf8c870b251e620101f644e9277", + "reference": "39554ce3a275fbf8c870b251e620101f644e9277", + "shasum": "" + }, + "require": { + "php": ">=8.0", + "symfony/polyfill-php81": "^1.23", + "symfony/var-exporter": "^5.4|^6.0|^7.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9.5.21", + "symfony/phpunit-bridge": "^6.3|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Zenstruck\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Bond", + "email": "kevinbond@gmail.com" + } + ], + "description": "Standalone, lightweight, framework agnostic, test assertion library.", + "homepage": "https://github.com/zenstruck/assert", + "keywords": [ + "assertion", + "phpunit", + "test" + ], + "support": { + "issues": "https://github.com/zenstruck/assert/issues", + "source": "https://github.com/zenstruck/assert/tree/v1.5.1" + }, + "funding": [ + { + "url": "https://github.com/kbond", + "type": "github" + } + ], + "time": "2024-10-28T18:08:12+00:00" + }, + { + "name": "zenstruck/foundry", + "version": "v2.3.1", + "source": { + "type": "git", + "url": "https://github.com/zenstruck/foundry.git", + "reference": "6f744b05706c1780e61368f23bf77e18c83d8fcd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zenstruck/foundry/zipball/6f744b05706c1780e61368f23bf77e18c83d8fcd", + "reference": "6f744b05706c1780e61368f23bf77e18c83d8fcd", + "shasum": "" + }, + "require": { + "doctrine/persistence": "^2.0|^3.0", + "fakerphp/faker": "^1.23", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.2|^3.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/var-exporter": "^6.4.9|~7.0.9|^7.1.2", + "zenstruck/assert": "^1.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8", + "brianium/paratest": "^6|^7", + "dama/doctrine-test-bundle": "^7.0|^8.0", + "doctrine/collections": "^1.7|^2.0", + "doctrine/common": "^3.2", + "doctrine/doctrine-bundle": "^2.10", + "doctrine/doctrine-migrations-bundle": "^2.2|^3.0", + "doctrine/mongodb-odm-bundle": "^4.6|^5.0", + "doctrine/orm": "^2.16|^3.0", + "phpunit/phpunit": "^9.5.0 || ^10.0 || ^11.0", + "symfony/console": "^6.4|^7.0", + "symfony/dotenv": "^6.4|^7.0", + "symfony/maker-bundle": "^1.55", + "symfony/phpunit-bridge": "^6.4|^7.0", + "symfony/runtime": "^6.4|^7.0", + "symfony/translation-contracts": "^3.4", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "extra": { + "psalm": { + "pluginClass": "Zenstruck\\Foundry\\Psalm\\FoundryPlugin" + }, + "bamarni-bin": { + "bin-links": true, + "forward-command": false, + "target-directory": "bin/tools" + } + }, + "autoload": { + "files": [ + "src/functions.php", + "src/Persistence/functions.php", + "src/symfony_console.php" + ], + "psr-4": { + "Zenstruck\\Foundry\\": "src/", + "Zenstruck\\Foundry\\Psalm\\": "utils/psalm" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Bond", + "email": "kevinbond@gmail.com" + }, + { + "name": "Nicolas PHILIPPE", + "email": "nikophil@gmail.com" + } + ], + "description": "A model factory library for creating expressive, auto-completable, on-demand dev/test fixtures with Symfony and Doctrine.", + "homepage": "https://github.com/zenstruck/foundry", + "keywords": [ + "Fixture", + "dev", + "doctrine", + "factory", + "faker", + "symfony", + "test" + ], + "support": { + "issues": "https://github.com/zenstruck/foundry/issues", + "source": "https://github.com/zenstruck/foundry/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://github.com/kbond", + "type": "github" + } + ], + "time": "2024-12-12T09:03:06+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=8.2", + "ext-ctype": "*", + "ext-iconv": "*" + }, + "platform-dev": {}, + "platform-overrides": { + "php": "8.3" + }, + "plugin-api-version": "2.6.0" +} diff --git a/config/bundles.php b/config/bundles.php new file mode 100644 index 0000000..963dce8 --- /dev/null +++ b/config/bundles.php @@ -0,0 +1,21 @@ + ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], + Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], + Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true], + Symfonycasts\TailwindBundle\SymfonycastsTailwindBundle::class => ['all' => true], + Symfony\UX\StimulusBundle\StimulusBundle::class => ['all' => true], + Symfony\UX\Turbo\TurboBundle::class => ['all' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + Knp\Bundle\TimeBundle\KnpTimeBundle::class => ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], + Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], + Zenstruck\Foundry\ZenstruckFoundryBundle::class => ['dev' => true, 'test' => true], + BabDev\PagerfantaBundle\BabDevPagerfantaBundle::class => ['all' => true], + Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle::class => ['all' => true], +]; diff --git a/config/packages/asset_mapper.yaml b/config/packages/asset_mapper.yaml new file mode 100644 index 0000000..d1ac653 --- /dev/null +++ b/config/packages/asset_mapper.yaml @@ -0,0 +1,5 @@ +framework: + asset_mapper: + # The paths to make available to the asset mapper. + paths: + - assets/ diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml new file mode 100644 index 0000000..522a0bc --- /dev/null +++ b/config/packages/cache.yaml @@ -0,0 +1,27 @@ +framework: + cache: + # Unique name of your app: used to compute stable namespaces for cache keys. + #prefix_seed: your_vendor_name/app_name + + # The "app" cache stores to the filesystem by default. + # The data in this cache should persist between deploys. + # Other options include: + + # Redis + #app: cache.adapter.redis + #default_redis_provider: redis://localhost + + # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) + #app: cache.adapter.apcu + + app: cache.adapter.array + + # Namespaced pools use the above "app" backend by default + pools: + iss_location_pool: + default_lifetime: '%iss_location_cache_ttl%' + +when@prod: + framework: + cache: + app: cache.adapter.filesystem diff --git a/config/packages/debug.yaml b/config/packages/debug.yaml new file mode 100644 index 0000000..ad874af --- /dev/null +++ b/config/packages/debug.yaml @@ -0,0 +1,5 @@ +when@dev: + debug: + # Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser. + # See the "server:dump" command to start a new server. + dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%" diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml new file mode 100644 index 0000000..25138b9 --- /dev/null +++ b/config/packages/doctrine.yaml @@ -0,0 +1,54 @@ +doctrine: + dbal: + url: '%env(resolve:DATABASE_URL)%' + + # IMPORTANT: You MUST configure your server version, + # either here or in the DATABASE_URL env var (see .env file) + #server_version: '16' + + profiling_collect_backtrace: '%kernel.debug%' + use_savepoints: true + orm: + auto_generate_proxy_classes: true + enable_lazy_ghost_objects: true + report_fields_where_declared: true + validate_xml_mapping: true + naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware + identity_generation_preferences: + Doctrine\DBAL\Platforms\PostgreSQLPlatform: identity + auto_mapping: true + mappings: + App: + type: attribute + is_bundle: false + dir: '%kernel.project_dir%/src/Entity' + prefix: 'App\Entity' + alias: App + controller_resolver: + auto_mapping: false + +when@test: + doctrine: + dbal: + # "TEST_TOKEN" is typically set by ParaTest + dbname_suffix: '_test%env(default::TEST_TOKEN)%' + +when@prod: + doctrine: + orm: + auto_generate_proxy_classes: false + proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies' + query_cache_driver: + type: pool + pool: doctrine.system_cache_pool + result_cache_driver: + type: pool + pool: doctrine.result_cache_pool + + framework: + cache: + pools: + doctrine.result_cache_pool: + adapter: cache.app + doctrine.system_cache_pool: + adapter: cache.system diff --git a/config/packages/doctrine_migrations.yaml b/config/packages/doctrine_migrations.yaml new file mode 100644 index 0000000..29231d9 --- /dev/null +++ b/config/packages/doctrine_migrations.yaml @@ -0,0 +1,6 @@ +doctrine_migrations: + migrations_paths: + # namespace is arbitrary but should be different from App\Migrations + # as migrations classes should NOT be autoloaded + 'DoctrineMigrations': '%kernel.project_dir%/migrations' + enable_profiler: false diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml new file mode 100644 index 0000000..877eb25 --- /dev/null +++ b/config/packages/framework.yaml @@ -0,0 +1,16 @@ +# see https://symfony.com/doc/current/reference/configuration/framework.html +framework: + secret: '%env(APP_SECRET)%' + #csrf_protection: true + + # Note that the session will be started ONLY if you read or write from it. + session: true + + #esi: true + #fragments: true + +when@test: + framework: + test: true + session: + storage_factory_id: session.storage.factory.mock_file diff --git a/config/packages/monolog.yaml b/config/packages/monolog.yaml new file mode 100644 index 0000000..9db7d8a --- /dev/null +++ b/config/packages/monolog.yaml @@ -0,0 +1,62 @@ +monolog: + channels: + - deprecation # Deprecations are logged in the dedicated "deprecation" channel when it exists + +when@dev: + monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] + # uncomment to get logging in your browser + # you may have to allow bigger header sizes in your Web server configuration + #firephp: + # type: firephp + # level: info + #chromephp: + # type: chromephp + # level: info + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] + +when@test: + monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + channels: ["!event"] + nested: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + +when@prod: + monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + buffer_size: 50 # How many messages should be saved? Prevent memory leaks + nested: + type: stream + path: php://stderr + level: debug + formatter: monolog.formatter.json + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine"] + deprecation: + type: stream + channels: [deprecation] + path: php://stderr + formatter: monolog.formatter.json diff --git a/config/packages/routing.yaml b/config/packages/routing.yaml new file mode 100644 index 0000000..8166181 --- /dev/null +++ b/config/packages/routing.yaml @@ -0,0 +1,10 @@ +framework: + router: + # Configure how to generate URLs in non-HTTP contexts, such as CLI commands. + # See https://symfony.com/doc/current/routing.html#generating-urls-in-commands + #default_uri: http://localhost + +when@prod: + framework: + router: + strict_requirements: null diff --git a/config/packages/stof_doctrine_extensions.yaml b/config/packages/stof_doctrine_extensions.yaml new file mode 100644 index 0000000..5082189 --- /dev/null +++ b/config/packages/stof_doctrine_extensions.yaml @@ -0,0 +1,8 @@ +# Read the documentation: https://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html +# See the official DoctrineExtensions documentation for more details: https://github.com/doctrine-extensions/DoctrineExtensions/tree/main/doc +stof_doctrine_extensions: + default_locale: en_US + orm: + default: + timestampable: true + sluggable: true diff --git a/config/packages/translation.yaml b/config/packages/translation.yaml new file mode 100644 index 0000000..b3f8f9c --- /dev/null +++ b/config/packages/translation.yaml @@ -0,0 +1,7 @@ +framework: + default_locale: en + translator: + default_path: '%kernel.project_dir%/translations' + fallbacks: + - en + providers: diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml new file mode 100644 index 0000000..3f795d9 --- /dev/null +++ b/config/packages/twig.yaml @@ -0,0 +1,6 @@ +twig: + file_name_pattern: '*.twig' + +when@test: + twig: + strict_variables: true diff --git a/config/packages/web_profiler.yaml b/config/packages/web_profiler.yaml new file mode 100644 index 0000000..b946111 --- /dev/null +++ b/config/packages/web_profiler.yaml @@ -0,0 +1,17 @@ +when@dev: + web_profiler: + toolbar: true + intercept_redirects: false + + framework: + profiler: + only_exceptions: false + collect_serializer_data: true + +when@test: + web_profiler: + toolbar: false + intercept_redirects: false + + framework: + profiler: { collect: false } diff --git a/config/packages/zenstruck_foundry.yaml b/config/packages/zenstruck_foundry.yaml new file mode 100644 index 0000000..e3ed04b --- /dev/null +++ b/config/packages/zenstruck_foundry.yaml @@ -0,0 +1,5 @@ +when@dev: &dev + # See full configuration: https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#full-default-bundle-configuration + zenstruck_foundry: + +when@test: *dev diff --git a/config/preload.php b/config/preload.php new file mode 100644 index 0000000..5ebcdb2 --- /dev/null +++ b/config/preload.php @@ -0,0 +1,5 @@ + [ + 'path' => './assets/app.js', + 'entrypoint' => true, + ], + '@hotwired/stimulus' => [ + 'version' => '3.2.2', + ], + '@symfony/stimulus-bundle' => [ + 'path' => './vendor/symfony/stimulus-bundle/assets/dist/loader.js', + ], + '@hotwired/turbo' => [ + 'version' => '7.3.0', + ], +]; diff --git a/migrations/.gitignore b/migrations/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/migrations/Version20241111171351.php b/migrations/Version20241111171351.php new file mode 100644 index 0000000..b9fef4a --- /dev/null +++ b/migrations/Version20241111171351.php @@ -0,0 +1,33 @@ +addSql('CREATE TABLE starship (id SERIAL NOT NULL, name VARCHAR(255) NOT NULL, class VARCHAR(255) NOT NULL, captain VARCHAR(255) NOT NULL, status VARCHAR(255) NOT NULL, arrived_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, PRIMARY KEY(id))'); + $this->addSql('COMMENT ON COLUMN starship.arrived_at IS \'(DC2Type:datetime_immutable)\''); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE SCHEMA public'); + $this->addSql('DROP TABLE starship'); + } +} diff --git a/migrations/Version20241201203154.php b/migrations/Version20241201203154.php new file mode 100644 index 0000000..f96a406 --- /dev/null +++ b/migrations/Version20241201203154.php @@ -0,0 +1,38 @@ +addSql('ALTER TABLE starship ADD slug VARCHAR(255) DEFAULT NULL'); + $this->addSql('ALTER TABLE starship ADD created_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL'); + $this->addSql('ALTER TABLE starship ADD updated_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL'); + $this->addSql('COMMENT ON COLUMN starship.created_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN starship.updated_at IS \'(DC2Type:datetime_immutable)\''); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE SCHEMA public'); + $this->addSql('ALTER TABLE starship DROP slug'); + $this->addSql('ALTER TABLE starship DROP created_at'); + $this->addSql('ALTER TABLE starship DROP updated_at'); + } +} diff --git a/migrations/Version20241201203519.php b/migrations/Version20241201203519.php new file mode 100644 index 0000000..a325667 --- /dev/null +++ b/migrations/Version20241201203519.php @@ -0,0 +1,40 @@ +addSql('UPDATE starship SET slug = id, created_at = arrived_at, updated_at = arrived_at'); + + // this up() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE starship ALTER slug SET NOT NULL'); + $this->addSql('ALTER TABLE starship ALTER created_at SET NOT NULL'); + $this->addSql('ALTER TABLE starship ALTER updated_at SET NOT NULL'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_C414E64A989D9B62 ON starship (slug)'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE SCHEMA public'); + $this->addSql('DROP INDEX UNIQ_C414E64A989D9B62'); + $this->addSql('ALTER TABLE starship ALTER slug DROP NOT NULL'); + $this->addSql('ALTER TABLE starship ALTER created_at DROP NOT NULL'); + $this->addSql('ALTER TABLE starship ALTER updated_at DROP NOT NULL'); + } +} diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..9982c21 --- /dev/null +++ b/public/index.php @@ -0,0 +1,9 @@ +addArgument('slug', InputArgument::REQUIRED, 'The slug of the starship') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $io = new SymfonyStyle($input, $output); + $slug = $input->getArgument('slug'); + $ship = $this->shipRepo->findOneBy(['slug' => $slug]); + + if (!$ship) { + $io->error('Starship not found.'); + + return Command::FAILURE; + } + + $io->comment(sprintf('Checking-in starship: %s', $ship->getName())); + + $ship->checkIn(); + + $this->em->flush(); + + $io->success('Starship checked-in.'); + + return Command::SUCCESS; + } +} diff --git a/src/Command/ShipRemoveCommand.php b/src/Command/ShipRemoveCommand.php new file mode 100644 index 0000000..4613f0a --- /dev/null +++ b/src/Command/ShipRemoveCommand.php @@ -0,0 +1,55 @@ +addArgument('slug', InputArgument::REQUIRED, 'The slug of the starship') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $io = new SymfonyStyle($input, $output); + $slug = $input->getArgument('slug'); + $ship = $this->shipRepo->findOneBy(['slug' => $slug]); + + if (!$ship) { + $io->error('Starship not found.'); + + return Command::FAILURE; + } + + $io->comment(sprintf('Removing starship: %s', $ship->getName())); + + $this->em->remove($ship); + $this->em->flush(); + + $io->success('Starship removed.'); + + return Command::SUCCESS; + } +} diff --git a/src/Command/ShipReportCommand.php b/src/Command/ShipReportCommand.php new file mode 100644 index 0000000..0e64599 --- /dev/null +++ b/src/Command/ShipReportCommand.php @@ -0,0 +1,56 @@ +addArgument('arg1', InputArgument::OPTIONAL, 'Argument description') + ->addOption('option1', null, InputOption::VALUE_NONE, 'Option description') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $io = new SymfonyStyle($input, $output); + $arg1 = $input->getArgument('arg1'); + + if ($arg1) { + $io->note(sprintf('You passed an argument: %s', $arg1)); + } + + if ($input->getOption('option1')) { + // ... + } + + $io->progressStart(100); + for ($i = 0; $i < 100; ++$i) { + $io->progressAdvance(); + usleep(10000); + } + $io->progressFinish(); + + $io->success('You have a new command! Now make it your own! Pass --help to see your options.'); + + return Command::SUCCESS; + } +} diff --git a/src/Controller/.gitignore b/src/Controller/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/src/Controller/MainController.php b/src/Controller/MainController.php new file mode 100644 index 0000000..9470f12 --- /dev/null +++ b/src/Controller/MainController.php @@ -0,0 +1,29 @@ +findIncomplete(); + $ships->setMaxPerPage(5); + $ships->setCurrentPage($request->query->get('page', 1)); + + $myShip = $repository->findMyShip(); + + return $this->render('main/homepage.html.twig', [ + 'myShip' => $myShip, + 'ships' => $ships, + ]); + } +} diff --git a/src/Controller/StarshipApiController.php b/src/Controller/StarshipApiController.php new file mode 100644 index 0000000..cf6783c --- /dev/null +++ b/src/Controller/StarshipApiController.php @@ -0,0 +1,32 @@ +findAll(); + + return $this->json($starships); + } + + #[Route('/{id<\d+>}', methods: ['GET'])] + public function get(int $id, StarshipRepository $repository): Response + { + $starship = $repository->find($id); + + if (!$starship) { + throw $this->createNotFoundException('Starship not found'); + } + + return $this->json($starship); + } +} diff --git a/src/Controller/StarshipController.php b/src/Controller/StarshipController.php new file mode 100644 index 0000000..cada764 --- /dev/null +++ b/src/Controller/StarshipController.php @@ -0,0 +1,22 @@ + 'slug'])] + Starship $ship, + ): Response { + return $this->render('starship/show.html.twig', [ + 'ship' => $ship, + ]); + } +} diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php new file mode 100644 index 0000000..db4fd60 --- /dev/null +++ b/src/DataFixtures/AppFixtures.php @@ -0,0 +1,40 @@ + 'USS LeafyCruiser (NCC-0001)', + 'class' => 'Garden', + 'captain' => 'Jean-Luc Pickles', + 'status' => StarshipStatusEnum::IN_PROGRESS, + 'arrivedAt' => new \DateTimeImmutable('-1 day'), + ]); + + StarshipFactory::createOne([ + 'name' => 'USS Espresso (NCC-1234-C)', + 'class' => 'Latte', + 'captain' => 'James T. Quick!', + 'status' => StarshipStatusEnum::COMPLETED, + 'arrivedAt' => new \DateTimeImmutable('-1 week'), + ]); + + StarshipFactory::createOne([ + 'name' => 'USS Wanderlust (NCC-2024-W)', + 'class' => 'Delta Tourist', + 'captain' => 'Kathryn Journeyway', + 'status' => StarshipStatusEnum::WAITING, + 'arrivedAt' => new \DateTimeImmutable('-1 month'), + ]); + + StarshipFactory::createMany(20); + } +} diff --git a/src/Entity/.gitignore b/src/Entity/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/src/Entity/Starship.php b/src/Entity/Starship.php new file mode 100644 index 0000000..cf67944 --- /dev/null +++ b/src/Entity/Starship.php @@ -0,0 +1,167 @@ +id; + } + + public function getName(): ?string + { + return $this->name; + } + + public function setName(string $name): static + { + $this->name = $name; + + return $this; + } + + public function getClass(): ?string + { + return $this->class; + } + + public function setClass(string $class): static + { + $this->class = $class; + + return $this; + } + + public function getCaptain(): ?string + { + return $this->captain; + } + + public function setCaptain(string $captain): static + { + $this->captain = $captain; + + return $this; + } + + public function getStatus(): ?StarshipStatusEnum + { + return $this->status; + } + + public function setStatus(StarshipStatusEnum $status): static + { + $this->status = $status; + + return $this; + } + + public function getArrivedAt(): ?\DateTimeImmutable + { + return $this->arrivedAt; + } + + public function setArrivedAt(\DateTimeImmutable $arrivedAt): static + { + $this->arrivedAt = $arrivedAt; + + return $this; + } + + public function getStatusString(): string + { + return $this->status->value; + } + + public function getStatusImageFilename(): string + { + return match ($this->status) { + StarshipStatusEnum::WAITING => 'images/status-waiting.png', + StarshipStatusEnum::IN_PROGRESS => 'images/status-in-progress.png', + StarshipStatusEnum::COMPLETED => 'images/status-complete.png', + }; + } + + public function getSlug(): ?string + { + return $this->slug; + } + + public function setSlug(?string $slug): static + { + $this->slug = $slug; + + return $this; + } + + public function getCreatedAt(): ?\DateTimeImmutable + { + return $this->createdAt; + } + + public function setCreatedAt(?\DateTimeImmutable $createdAt): static + { + $this->createdAt = $createdAt; + + return $this; + } + + public function getUpdatedAt(): ?\DateTimeImmutable + { + return $this->updatedAt; + } + + public function setUpdatedAt(?\DateTimeImmutable $updatedAt): static + { + $this->updatedAt = $updatedAt; + + return $this; + } + + public function checkIn(?\DateTimeImmutable $arrivedAt = null): static + { + $this->arrivedAt = $arrivedAt ?? new \DateTimeImmutable('now'); + $this->status = StarshipStatusEnum::WAITING; + + return $this; + } +} diff --git a/src/Entity/StarshipStatusEnum.php b/src/Entity/StarshipStatusEnum.php new file mode 100644 index 0000000..918e81b --- /dev/null +++ b/src/Entity/StarshipStatusEnum.php @@ -0,0 +1,10 @@ + + */ +final class StarshipFactory extends PersistentProxyObjectFactory +{ + private const SHIP_NAMES = [ + 'Nebula Drifter', + 'Quantum Voyager', + 'Starlight Nomad', + 'Celestial Serpent', + 'Solar Wanderer', + 'Galactic Mirage', + 'Cosmic Falcon', + 'Nebula Phoenix', + 'Hypernova Explorer', + 'Astro Nomad', + 'Celestial Seeker', + 'Lunar Marauder', + 'Starstruck Dreamer', + 'Void Runner', + 'Orbit Vindicator', + 'Nova Ghost', + 'Sky Raider', + 'Pulsar Rider', + 'Photon Drifter', + 'Astral Nomad', + 'Solar Rogue', + 'Quasar Whisper', + 'Intergalactic Mirage', + 'Nebula Wraith', + 'Gravity Phantom', + 'Stellar Pirate', + 'Comet Streaker', + 'Nebula Zephyr', + 'Celestial Breeze', + 'Event Horizon', + ]; + + private const CLASSES = [ + 'Eclipse', + 'Vanguard', + 'Specter', + 'Aurora', + 'Interceptor', + 'Nebula', + 'Corsair', + 'Phoenix', + 'Sentinel', + 'Odyssey', + ]; + + private const CAPTAINS = [ + 'Orion Stark', + 'Lyra Voss', + 'Cassian Drake', + 'Zara Rayne', + 'Alaric Forge', + 'Rhea Solaris', + 'Kael Hunter', + 'Luna Seraph', + 'Thorne Valen', + 'Nyx Shadow', + 'Eliar Storm', + 'Vesper Kaine', + 'Astra Starling', + 'Lucian Blaze', + 'Solara Quill', + 'Rowan Steel', + 'Jax Lark', + 'Nova Sinclair', + 'Darius Gale', + 'Lyric Voss', + 'Eir Wen', + 'Silas Kade', + 'Amara Flame', + 'Orion Blackwell', + 'Thalia Star', + 'Cyrus Rook', + 'Sage Aurelius', + 'Zane Frost', + 'Ember Cross', + 'Vale Shadow', + ]; + + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services + * + * @todo inject services if required + */ + public function __construct() + { + } + + public static function class(): string + { + return Starship::class; + } + + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories + * + * @todo add your default values here + */ + protected function defaults(): array|callable + { + return [ + 'arrivedAt' => \DateTimeImmutable::createFromMutable(self::faker()->dateTimeBetween('-1 year', 'now')), + 'captain' => self::faker()->randomElement(self::CAPTAINS), + 'class' => self::faker()->randomElement(self::CLASSES), + 'name' => self::faker()->randomElement(self::SHIP_NAMES), + 'status' => self::faker()->randomElement(StarshipStatusEnum::cases()), + ]; + } + + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization + */ + protected function initialize(): static + { + return $this + // ->afterInstantiate(function(Starship $starship): void {}) + ; + } +} diff --git a/src/Kernel.php b/src/Kernel.php new file mode 100644 index 0000000..779cd1f --- /dev/null +++ b/src/Kernel.php @@ -0,0 +1,11 @@ + + */ +class StarshipRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Starship::class); + } + + /** + * @return Starship[] + */ + public function findIncomplete(): Pagerfanta + { + $query = $this->createQueryBuilder('s') + ->where('s.status != :status') + ->orderBy('s.arrivedAt', 'DESC') + ->setParameter('status', StarshipStatusEnum::COMPLETED) + ->getQuery() + ; + + return new Pagerfanta(new QueryAdapter($query)); + } + + public function findMyShip(): Starship + { + return $this->findAll()[0]; + } + + // /** + // * @return Starship[] Returns an array of Starship objects + // */ + // public function findByExampleField($value): array + // { + // return $this->createQueryBuilder('s') + // ->andWhere('s.exampleField = :val') + // ->setParameter('val', $value) + // ->orderBy('s.id', 'ASC') + // ->setMaxResults(10) + // ->getQuery() + // ->getResult() + // ; + // } + + // public function findOneBySomeField($value): ?Starship + // { + // return $this->createQueryBuilder('s') + // ->andWhere('s.exampleField = :val') + // ->setParameter('val', $value) + // ->getQuery() + // ->getOneOrNullResult() + // ; + // } +} diff --git a/src/Twig/Extension/AppExtension.php b/src/Twig/Extension/AppExtension.php new file mode 100644 index 0000000..9e417b1 --- /dev/null +++ b/src/Twig/Extension/AppExtension.php @@ -0,0 +1,18 @@ +issLocationPool->get('iss_location_data', function (): array { + $response = $this->client->request('GET', 'https://api.wheretheiss.at/v1/satellites/25544'); + + return $response->toArray(); + }); + } +} diff --git a/symfony.lock b/symfony.lock new file mode 100644 index 0000000..fd54ad8 --- /dev/null +++ b/symfony.lock @@ -0,0 +1,249 @@ +{ + "babdev/pagerfanta-bundle": { + "version": "v4.5.0" + }, + "doctrine/doctrine-bundle": { + "version": "2.13", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "2.13", + "ref": "8d96c0b51591ffc26794d865ba3ee7d193438a83" + }, + "files": [ + "config/packages/doctrine.yaml", + "src/Entity/.gitignore", + "src/Repository/.gitignore" + ] + }, + "doctrine/doctrine-fixtures-bundle": { + "version": "3.6", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "3.0", + "ref": "1f5514cfa15b947298df4d771e694e578d4c204d" + }, + "files": [ + "src/DataFixtures/AppFixtures.php" + ] + }, + "doctrine/doctrine-migrations-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "3.1", + "ref": "1d01ec03c6ecbd67c3375c5478c9a423ae5d6a33" + }, + "files": [ + "config/packages/doctrine_migrations.yaml", + "migrations/.gitignore" + ] + }, + "knplabs/knp-time-bundle": { + "version": "v2.2.0" + }, + "php-cs-fixer/shim": { + "version": "3.46", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "3.0", + "ref": "16422bf8eac6c3be42afe07d37e2abc89d2bdf6b" + }, + "files": [ + ".php-cs-fixer.dist.php" + ] + }, + "stof/doctrine-extensions-bundle": { + "version": "1.12", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "main", + "version": "1.2", + "ref": "e805aba9eff5372e2d149a9ff56566769e22819d" + }, + "files": [ + "config/packages/stof_doctrine_extensions.yaml" + ] + }, + "symfony/asset-mapper": { + "version": "7.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.4", + "ref": "6c28c471640cc2c6e60812ebcb961c526ef8997f" + }, + "files": [ + "assets/app.js", + "assets/styles/app.css", + "config/packages/asset_mapper.yaml", + "importmap.php" + ] + }, + "symfony/console": { + "version": "7.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "5.3", + "ref": "1781ff40d8a17d87cf53f8d4cf0c8346ed2bb461" + }, + "files": [ + "bin/console" + ] + }, + "symfony/debug-bundle": { + "version": "7.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "5.3", + "ref": "5aa8aa48234c8eb6dbdd7b3cd5d791485d2cec4b" + }, + "files": [ + "config/packages/debug.yaml" + ] + }, + "symfony/flex": { + "version": "2.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "1.0", + "ref": "146251ae39e06a95be0fe3d13c807bcf3938b172" + }, + "files": [ + ".env" + ] + }, + "symfony/framework-bundle": { + "version": "7.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "7.0", + "ref": "6356c19b9ae08e7763e4ba2d9ae63043efc75db5" + }, + "files": [ + "config/packages/cache.yaml", + "config/packages/framework.yaml", + "config/preload.php", + "config/routes/framework.yaml", + "config/services.yaml", + "public/index.php", + "src/Controller/.gitignore", + "src/Kernel.php" + ] + }, + "symfony/maker-bundle": { + "version": "1.52", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "1.0", + "ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f" + } + }, + "symfony/monolog-bundle": { + "version": "3.10", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "3.7", + "ref": "aff23899c4440dd995907613c1dd709b6f59503f" + }, + "files": [ + "config/packages/monolog.yaml" + ] + }, + "symfony/routing": { + "version": "7.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "7.0", + "ref": "21b72649d5622d8f7da329ffb5afb232a023619d" + }, + "files": [ + "config/packages/routing.yaml", + "config/routes.yaml" + ] + }, + "symfony/stimulus-bundle": { + "version": "2.13", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "2.13", + "ref": "6acd9ff4f7fd5626d2962109bd4ebab351d43c43" + }, + "files": [ + "assets/bootstrap.js", + "assets/controllers.json", + "assets/controllers/hello_controller.js" + ] + }, + "symfony/translation": { + "version": "7.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.3", + "ref": "e28e27f53663cc34f0be2837aba18e3a1bef8e7b" + }, + "files": [ + "config/packages/translation.yaml", + "translations/.gitignore" + ] + }, + "symfony/twig-bundle": { + "version": "7.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.4", + "ref": "cab5fd2a13a45c266d45a7d9337e28dee6272877" + }, + "files": [ + "config/packages/twig.yaml", + "templates/base.html.twig" + ] + }, + "symfony/ux-turbo": { + "version": "v2.13.2" + }, + "symfony/web-profiler-bundle": { + "version": "7.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.1", + "ref": "e42b3f0177df239add25373083a564e5ead4e13a" + }, + "files": [ + "config/packages/web_profiler.yaml", + "config/routes/web_profiler.yaml" + ] + }, + "symfonycasts/tailwind-bundle": { + "version": "v0.5.0" + }, + "twig/extra-bundle": { + "version": "v3.8.0" + }, + "zenstruck/foundry": { + "version": "2.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "2.0", + "ref": "56bc588a1b6d5d218319f70c64c2f0fbebe30ec7" + }, + "files": [ + "config/packages/zenstruck_foundry.yaml" + ] + } +} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..bb226fb --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,11 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + "./assets/**/*.js", + "./templates/**/*.html.twig", + ], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/templates/base.html.twig b/templates/base.html.twig new file mode 100644 index 0000000..f471ee5 --- /dev/null +++ b/templates/base.html.twig @@ -0,0 +1,43 @@ + + + + + {% block title %}Welcome!{% endblock %} + + {% block stylesheets %} + {% endblock %} + + {% block javascripts %} + {% block importmap %}{{ importmap('app') }}{% endblock %} + {% endblock %} + + + + + diff --git a/templates/main/_shipStatusAside.html.twig b/templates/main/_shipStatusAside.html.twig new file mode 100644 index 0000000..2574a6b --- /dev/null +++ b/templates/main/_shipStatusAside.html.twig @@ -0,0 +1,36 @@ + diff --git a/templates/main/homepage.html.twig b/templates/main/homepage.html.twig new file mode 100644 index 0000000..b7cd337 --- /dev/null +++ b/templates/main/homepage.html.twig @@ -0,0 +1,71 @@ +{% extends 'base.html.twig' %} + +{% block title %}Starshop: Beam up some parts!{% endblock %} + +{% block body %} +
+ {{ include('main/_shipStatusAside.html.twig') }} + +
+

+ Ship Repair Queue +

+ +
+ {{ ships.nbResults }} ships (Page {{ ships.currentPage }} of {{ ships.nbPages }}) +
+ +
+ {% for ship in ships %} +
+
+ Status: {{ ship.statusString }} +
+
+
+

{{ ship.statusString }}

+
+

+ {{ ship.name }} +

+
+ Arrived at: {{ ship.arrivedAt|ago }} +
+
+
+
+
+

Captain

+

{{ ship.captain }}

+
+ +
+

Class

+

{{ ship.class }}

+
+
+
+ {% endfor %} +
+ + {% if ships.haveToPaginate %} +
+ {% if ships.hasPreviousPage %} + < Previous + {% endif %} + {% if ships.hasNextPage %} + Next > + {% endif %} +
+ {% endif %} + +

+ Looking for your next galactic ride? + Browse the {{ ships|length * 10 }} starships for sale! +

+
+
+{% endblock %} diff --git a/templates/starship/show.html.twig b/templates/starship/show.html.twig new file mode 100644 index 0000000..d767faf --- /dev/null +++ b/templates/starship/show.html.twig @@ -0,0 +1,42 @@ +{% extends 'base.html.twig' %} + +{% block title %}{{ ship.name }}{% endblock %} + +{% block body %} + +
+
+ purple ship launching +
+
+
+
+
+
+

{{ ship.statusString }}

+
+ +

+ {{ ship.name }} +

+

Spaceship Captain

+

{{ ship.captain }}

+ +

Class

+

{{ ship.class }}

+ +

Ship Status

+

30,000 lys to next service

+ +

Arrived At

+

{{ ship.arrivedAt|ago }}

+
+
+
+
+{% endblock %} diff --git a/translations/.gitignore b/translations/.gitignore new file mode 100644 index 0000000..e69de29 From 38b61e1e5a228dac708f652df10929b840a137d6 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Fri, 28 Feb 2025 17:11:33 -0500 Subject: [PATCH 002/181] WIP outline --- sfcasts/outline/outline.md | 113 +++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 sfcasts/outline/outline.md diff --git a/sfcasts/outline/outline.md b/sfcasts/outline/outline.md new file mode 100644 index 0000000..0aee361 --- /dev/null +++ b/sfcasts/outline/outline.md @@ -0,0 +1,113 @@ +# Doctrine Relations: Outline + +## Project Setup + +- Remind of the project & 1 entity: `Starship` +- Tell them to download the course code & set up +- 1 entity right now (zzzz boring): we can't track the parts of a starship + +## New Entity: StarshipPart + +- (record this but move through it quickly) +- so let's add a new entity: `StarshipPart` +- use `bin/console make:entity` to create it + - add `name`, `price` & `notes` properties +- `make:migration` and `doctrine:migrations:migrate` +- `make:factory` for `StarshipPart` +- add some fun parts probably by having the user paste in + some pre-made code + - ideas: + - `warp core` (looks cool AND zoom) + - `shield generator` (in case you run into any Borg) + - `captain's chair` (just slightly more comfortable than the others) + - `fuzzy dice` (obviously) + - `photon torpedoes` (for when the fuzzy dice don't work) + - `holodeck` (parental controls? No way!) + - `Tactical Whoopee Cushion Array` (can't beat them? Embarrass them!) + - `Temporal Seat Warmers`(warm your seat before you sit down) + - `Food Replicator` (Earl Grey, hot) + - `Self-Destruct Button Cover` (for when you have a cat) + - `Redshirt Dispenser` (Instantly replenishes expendable crew members.) +- reload the fixtures + +## ManyToOne: StarshipPart to Starship +- Ok! We have ships and parts! But how do we connect them? +- Each `StarshipPart` should belong to a `Starship` +- to create a relation, we can use `bin/console make:entity` again +- should we call the new property `starshipId`? +- No! This is where Doctrine shines: we don't think about ids + - instead, we think about objects, like a `Starship` object + is related to a `StarshipPart` object +- edit the `StarshipPart` entity: give it a `starship` property +- this will be a relation and the command walks us through the + relationship types + - it seems like a `ManyToOne` relationship + - that makes sense: many parts can belong to one ship + - nullable? No! Every part should belong to a ship + - map the other side? This is super interesting. This is + optional, but will allow us to say `$starship->getParts()` + to get all the parts for a ship + - That sounds cool! Let's do it! +- I committed before recording, so run `git status` to see + the changes +- *both* entities were updated +- In `StarshipPart`, a new property was added: `starship` +- But instead of `ORM\Column`, we have `ORM\ManyToOne` +- It also added a getter and setter for `starship` +- In `Starship`, it added a `parts` property with `ORM\OneToMany` +- It also added a `getParts()` method +- But instead of a `setParts()` method, it added `addPart()` + and `removePart()` methods: these are just more convenient, + especially when working with forms or the serializer +- Up in the constructor, it initialized the `parts` property + to a new `ArrayCollection` +- You need this, but it's a minor detail: it looks and acts like an array: + you can even `foreach` over it +- mention how `ManyToOne` and `OneToMany` are actually the same *one* relation + type: just seen from different sides + - If `StarshipPart` belongs to one `Starship`, then `Starship` has many `StarshipPart`s +- Since `make:entity` added new properties `Starship`, we need to + run `make:migration` and `doctrine:migrations:migrate` +- Check out the migration file + - Woha! It added a new column `starship_id` to the `starship_part` table +- Doctrine is smart: we added a `starship` property, but it + knows that the column should be `starship_id` +- So how do we relate a part to a ship? + +## Relating Parts to a Ship +- Ref: https://symfonycasts.com/screencast/doctrine-relations/saving-relations +- Create a `Starship` and `StarshipPart` in `AppFixtures` +- They're not related yet, but try loading the fixtures +- Error! +> `starship_id` cannot be null on the `starship_part` table +- we made the ship required in `make:entity`: you can see that + in the `nullable=false` on `JoinColumn` above the `starship` + property +- How *do* we say that this part belongs to this ship? +- Easy! `$part->setStarship($ship)` +- Notice that we're not setting the `starship_id` property + or even passing an id: we're setting the `Starship` object +- This is the magic of Doctrine: it knows how to save this + relationship: it will first save the `Starship` object + and then use its id to set the `starship_id` column on the + `starship_part` table +- Let's prove it! Reload the fixtures + +``` +symfony console doctrine:query:sql 'SELECT * FROM answer' +``` + +- The `starship_id` column is set to 12345. Amazing! +- Let's look up that ship in the database + +``` +symfony console doctrine:query:sql 'SELECT * FROM starship WHERE id = 12345' +``` + +- Big takeaway: when you're working with relations, you're + working with objects, not ids +- Doctrine handles the boring details of saving the relationship + +## Creating and Relating many ships and parts via Foundry + +... TODO by Ryan From c8fce33021fa61f7cb129cc1b086dc1cb054a98f Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Mon, 3 Mar 2025 14:38:22 -0500 Subject: [PATCH 003/181] finished outline --- sfcasts/outline/outline.md | 333 ++++++++++++++++++++++++++++++++++++- 1 file changed, 332 insertions(+), 1 deletion(-) diff --git a/sfcasts/outline/outline.md b/sfcasts/outline/outline.md index 0aee361..9f514d1 100644 --- a/sfcasts/outline/outline.md +++ b/sfcasts/outline/outline.md @@ -110,4 +110,335 @@ symfony console doctrine:query:sql 'SELECT * FROM starship WHERE id = 12345' ## Creating and Relating many ships and parts via Foundry -... TODO by Ryan +Ref: https://symfonycasts.com/screencast/doctrine-relations/foundry-factory-relation +Note: This section is rocky. The original was too long & in the weeds. I've +shortened it, but I think some of the proposed code and results are incorrect. + +- We have a few parts and a few ships, but let's create a lot +- This is a perfect job for Foundry +- remove manually created fixtures & replace with Foundry +- create 100 parts +- try the fixtures: it errors: `starship_id` cannot be null +- in `getDefaults()`, add a `starship` key set to `Starship::random()` +- try the fixtures again +- no error, check the database: + +``` +symfony console doctrine:query:sql 'SELECT * FROM starship_part' +``` + +- Things are looking good! Each part is related to a different ship +- `getDefaults()` is called for each part, + so each part is related to a different, random ship +- This includes ships that have any status, including "waiting" + - But in reality, we only track parts for ships that are "completed" so + we know how much to charge the customer. We're not Ferengi, but we're + not a charity either! + - Change `starship` to `Starship::createOne(['status' => StarshipStatusEnum::STATUS_COMPLETED])` + - try the fixtures again and check the database + - now, all parts are related to completed ships + - but... we have 123 ships! What the Ferengi? + - 23 from the original fixtures and 100 from the parts: + - `getDefaults()` is called for each part, so it's creating a new ship + for each part... + - fix this by setting the `starship` key to a factory that sets the status + to `STATUS_COMPLETED`. + - Explain that factories are like "recipes" for creating objects + and explain why setting a relationship to a factory is a best practice + +## Fetching Parts for a Ship + +ref: https://symfonycasts.com/screencast/doctrine-relations/fetching-relations +- On the starship show page, let's show the parts for that ship +- In `show()` action, autowire `StarshipPartRepository` & use + `findBy()` to get the parts for the ship + - the interesting part is that we're not passing an id + for the ship: we're passing the `Starship` object +- dd() the parts to see that it works +- use `$ship->getParts()` and dd() to see that it works +- Refresh: instead of an array of `StarshipPart` objects, we see + a `PersistentCollection` object that looks empty! +- Explain this a bit: +- https://symfonycasts.com/screencast/doctrine-relations/fetching-relations#persistentcollection-amp-arraycollection +- loop over the parts and *then* `dump()` each part +- refresh and see the parts in the WDT +- 2 queries: one to get the ship and then, a moment later, when + we `foreach` over the parts, Doctrine automatically queries + for the parts for that ship +- Amazing! + +## Rendering Parts in the Template + +Ref: https://symfonycasts.com/screencast/doctrine-relations/rendering + +- Pass a `parts` variable to the template, loop over it and render + the parts +- But even this is too much work! +- Update template to loop over `ship.parts` +- It works! +- This calls the `getParts()` method on the `Starship` object + and Doctrine queries for the parts, just like before +- Render the number of parts with `{{ ship.parts|length }}` + - +- In WDT, still 2 queries (or 3 due to the count?), but the second/third occurs + in the template + +## Owning and Inverse Sides + +- Replicate https://symfonycasts.com/screencast/doctrine-relations/owning-vs-inverse +- Important to understand, but need to avoid getting too wordy + +## Relation orderBy and fetch + +Ref: https://symfonycasts.com/screencast/doctrine-relations/orderby-extra-lazy + +- When we call `getParts()`, we're not guaranteed the order +- How can we order the parts, like by `name`? +- Add `orderBy` to the `ORM\OneToMany` attribute in `Starship` +- Refresh the page: the parts are ordered by name! +- Check the query in the profiler: it's ordering by name! +- but, there are a lot of queries: one for the ships and then + one to find the parts for each ship + - This is called the "N+1" problem, which we'll tackle later. + it's a minor performance issue thanks to the lazy loading: + the fact that Doctrine doesn't load the parts until we ask for them +- The problem here is even crazier, however: we're querying for + the parts for each ship... *just to count them*! +- Again, this is a minor performance issue... unless you have + a lot of parts +- To fix this issue, we can use `fetch="EXTRA_LAZY"` in the `ORM\OneToMany` + attribute in `Starship` +- Refresh the page: we have the same number of queries, but + the second query is now a `SELECT COUNT(*)` query. Much more efficient! +- Should we always use `fetch="EXTRA_LAZY"`? First, this is a small + performance optimization that I wouldn't worry about unless a ship can have + a lot of parts + - Second, there are som cases where this can cause an extra query. + - Again, this is a minor performance issue, but that's why it's not the default + +## Filtering a Relation + +Ref: https://symfonycasts.com/screencast/doctrine-relations/collection-criteria +- `$ship->getParts()` returns all parts, but what if we only want + the parts that cost more than 100 credits? +- We could do a fresh query for all parts that cost more than 100 + credits *and* belong to this ship +- But lame! I still want to use `$ship->getParts()`, it's so easy! +- Add a new method to `Starship` called `getExpensiveParts()` +- We could loop over the parts and filter only for the expensive + ones, but that's not efficient: we'd be querying for *all* of + this ship's parts, only to throw most of them away +- Instead, we can use a `Criteria` object to filter the parts +- (use `Criteria` to filter the parts) +- Refresh the page: only the expensive parts are shown +- and the query in the profiler is still efficient: it's only + querying for the expensive parts. Amazing! +- The `Criteria` object is powerful, though, imo, it's also a bit + cryptic, I admit +- I like to organize my query logic in a repository method... but + now we have some query logic in the entity. Is that bad? + - Not necessarily, but for organization, we can have the best + of both worlds: by moving the `Criteria` logic to a repository +- In `StarshipPartRepository`, add a `createExpensiveCriteria()` + but make it static +- Move the `Criteria` logic to this method & return +- Why static? First, because we're not using `$this` in the method, + so it *can* be static. Second, because we're going to use this + method from the `Starship` entity... and you can't autowire + services into entities +- use method in `getExpensiveParts()` +- Also create a `getExpensiveParts(int $limit = 10)` method in the repository + - But, we're not going to use this method: it's just to show + that you *can* combine `Criteria` with a query builder + +## Most Expensive Parts +- ref: https://symfonycasts.com/screencast/doctrine-relations/popular-answers +- This chapter sets up the JOIN later and shows the + `include()` function to reuse templates (as this hasn't been shown + yet in the series) +- https://symfonycasts.com/screencast/doctrine-relations/string-component + I think is out of place here. +- Maybe a bonus course called "Extra Goodies" that shows a bunch of + random, but useful, things like this +- Maybe also bonus deploy course (people often ask about this) + +## JOINing Relations +ref: https://symfonycasts.com/screencast/doctrine-relations/join-n-plus-one +- talk about N+1 problem +- Show it on the most expensive parts page +- Add the JOIN: talk about how you JOIN on the `starship` property, + not the `starship_id` column: Doctrine takes care of the details +- But we have the same number of queries! Why? +- 2 reasons to JOIN: + - 1) to avoid the N+1 problem + - 2) to do a WHERE or ORDER BY on the joined table +- we'll talk about the second reason soon +- For the N+1 problem, we need select the data +- Use `addSelect()`. +- Refresh the page: only 2 queries! The JOIN is working! + +## Search, the Request Object & OR Query Logic + +- Replicate: https://symfonycasts.com/screencast/doctrine-relations/search-form +- A bit unrelated to relations, but important topics that we need + to cover +- ... + +## The 4 (2?) Types of Relations +- Replicate: https://symfonycasts.com/screencast/doctrine-relations/relationship-types +- Talk about how `ManyToOne` and `OneToMany` are the same + relation type, and even `OneToOne`, which I don't use + often, is the same relation type as `ManyToOne` with + a restriction that limits to only one related object +- So, there are really only 2 relation types: `ManyToOne` and `ManyToMany` +- Space repair is dangerous work in a vacuum environment: + perfect for droids! +- In fact we have an army of droids where each droid is assigned + to *multiple* ships and each ship has *multiple* droids +- That's a `ManyToMany` relation +- Use `bin/console make:entity` to create a `Droid` entity +- Properties: `name` and `primaryFunction` +- `make:fatory` for `Droid` and add some fun droids: + - `R2-D2` (astromech) + - `C-3PO` (protocol) + - `BB-8` (astromech) + - `IG-88` (assassin) + - `IHOP-123` (pancake chef) +- `make:migration` and `doctrine:migrations:migrate` +- Look at the migration file: it created a new table `droid` + delightfully boring + +## ManyToMany: Droids to Ships + +- Ok! We have ships and droids! But how do we connect them? +- Each `Starship` should have many `Droid`s and each `Droid` + should belong to many `Starship`s +- Don't think about the database: think about the objects: + we want a new droids property on `Starship` +- Use `make:entity` to update `Starship` and add a `droids` + property +- Choose relation type. Then, yup! This smells like a `ManyToMany` + relationship. Choose that +- Say yes to mapping other side: optional, but `$droid->getShips()` + sounds handy. +- Go check out the changes in the entities +- In `Starship`, a new property was added: `droids` with `ORM\ManyToMany`, + this is a collection of `Droid` objects +- the collection initialized in the constructor was generated + for us, along with `getDroids()`, `addDroid()` and `removeDroid()` methods + - If you're thinking "this is just like `OneToMany`", you're right! +- Now check out the `Droid` entity: it has a new property `ships` + with `ORM\ManyToMany` and the same methods +- We're all set! Generate the migration... and open it up +- Woha! It created a new table `starship_droid` with 2 columns: + `starship_id` and `droid_id` +- Again, in PHP, we think of objects: a `Starship` object has + many `Droid` objects and a `Droid` object has many `Starship` objects +- Doctrine takes care of the boring details of saving this relationship +- Run the migration + +## Adding Droids to Ships in the ManyToMany Relation +- In `AppFixtures`, create a `Starship` with `createOne()` and 3 + droids manually (persist and flush) +- The question now is: how do we assign this droid to this ship... + cause the crew is hungry for pancakes! +- `$ship->addDroid($droid)` (do it for just 2 of the droids) +- Reload the fixtures +- Check the database: the `droid` table has 3 rows: no surprise +- But the `starship_droid` table has 2 rows: the 2 droids are + related to the ship. Incredible! +- Doctrine entirely handles inserting & deleting rows in this table +- If we saved all of this and then called `$droid->removeShip($ship)`, + Doctrine would delete the row in the `starship_droid` table + Magical! +- Owning vs inverse in a `ManyToMany` +- Replicate: https://symfonycasts.com/screencast/doctrine-relations/many-to-many-saving#owning-vs-inverse-on-a-manytomany + - Mostly you don't need to think about this) + - And so maybe we shorten this section + +## Foundry Proxy Objects +- https://symfonycasts.com/screencast/doctrine-relations/many-to-many-saving#foundry-proxy-objects +- Still relevant? + +## ManyToMany in Foundry +- Replicate: https://symfonycasts.com/screencast/doctrine-relations/many-to-many-factory + +## Rendering ManyToMany Relations +- I'm happy to report that *using* a `ManyToMany` relation is + exactly the same as using a `OneToMany` relation +- On the starship show page, loop over `ship.droids` and render + the droid names +- Done! +- `$ship->getDroids()` is a collection of `Droid` objects + +## Join Across ManyToMany Relations +- ref: https://symfonycasts.com/screencast/doctrine-relations/many-to-many-joins#joining-in-a-query-with-a-manytomany +- We have a lot of queries on the starship show page +- It's our ol' buddy the N+1 problem: that friend that keeps + hanging around well after the party is over +- Is this a real performance issue? Maybe, maybe not +- But we know how to fix it: JOINs! +- Add the JOIN to the query in the repository + - What's interesting is that we don't think about the database + or the `starship_droid` table: we JOIN on the `droids` property + and it's all handled for us + - Include the `addSelect()` to select the data +- Refresh the page: only 2 queries! The JOIN is working! +- And check out the query in the profiler: it's a JOIN query + across the `starship_droid` table + +## ManyToMany with Extra Columns + +- ManyToMany relations are unique in that Doctrine entirely + manages the join table: there is no entity for it +- A side effect of this is that you can't add extra columns + to the join table +- But what if we want to track the date that a droid was + assigned to a ship? +- In this case, we need to create a new entity: `DroidAssignment` + and handle things a bit more manually +- Undo the `ManyToMany` relation +- This time, use `bin/console make:entity` to create an entity for + the join table: `DroidAssignment` +- Add a `dateAssigned` property, then 2 more: +- `droid` with `ManyToOne` to `Droid` +- `ship` with `ManyToOne` to `Starship` +- Say yes to generating the other side for `droid` as +- `$droid->getDroidAssignments()` might be useful +- Say no to generating the other side for `ship`... mostly so + we can experience how the inverse side is optional +- Check out the changes in the entities + - Beautifully boring: `DroidAssignment` has 2 `ManyToOne` relations + - Note: no changes to `Starship` as we decided not to map the + other side of the relation +- In the `DroidAssignment` entity, add a `__construct()` method + to set the `dateAssigned` property to `new \DateTimeImmutable()` +- generate the migration and open it up +- It looks like a lot of changes at first, but look closer: +- the `droid_assignment` table is already there from the + `ManyToMany` relation: the migration is just adding an autoincrement + `id` column and the `date_assigned` column +- This is really the same relation as before, but we've taken + control of the join table to add an extra column + - We made a bunch of changes in PHP, but the database, essentially, + stayed the same +- Run the migration +- It fails! + +## Handling a Failed Migration +- Replicate: https://symfonycasts.com/screencast/doctrine-relations/broken-migration + +## DroidAssignment Fixtures +- Replicate: https://symfonycasts.com/screencast/doctrine-relations/question-tag-fixtures + +## Doing Crazy Things with Foundry & Relations +- replicate: https://symfonycasts.com/screencast/doctrine-relations/foundry-phd + +## JOINing across multiple relations +- replicate: https://symfonycasts.com/screencast/doctrine-relations/foundry-phd + +## Pagination +- ref: https://symfonycasts.com/screencast/doctrine-relations/pagination +- Include this? It's unrelated to relations +- Or do we cover this in the "extras" course? +- Or make a small pagination course and mention it here? From ec4b1df0ce6251726cf8b403293c3d3df0275cb8 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Wed, 5 Mar 2025 14:31:50 -0500 Subject: [PATCH 004/181] upgrading deps --- composer.json | 40 +-- composer.lock | 960 +++++++++++++++++++++++--------------------------- 2 files changed, 454 insertions(+), 546 deletions(-) diff --git a/composer.json b/composer.json index 3af514b..d7c2d7c 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,7 @@ "ext-ctype": "*", "ext-iconv": "*", "babdev/pagerfanta-bundle": "^4.5", - "doctrine/dbal": "^3", + "doctrine/dbal": "^4", "doctrine/doctrine-bundle": "^2.13", "doctrine/doctrine-migrations-bundle": "^3.3", "doctrine/orm": "^3.3", @@ -16,25 +16,25 @@ "pagerfanta/doctrine-orm-adapter": "^4.7", "php-cs-fixer/shim": "^3.46", "phpdocumentor/reflection-docblock": "^5.3", - "phpstan/phpdoc-parser": "^1.25", + "phpstan/phpdoc-parser": "^2.0", "stof/doctrine-extensions-bundle": "^1.12", - "symfony/asset": "7.1.*", - "symfony/asset-mapper": "7.1.*", - "symfony/console": "7.1.*", - "symfony/dotenv": "7.1.*", + "symfony/asset": "7.2.*", + "symfony/asset-mapper": "7.2.*", + "symfony/console": "7.2.*", + "symfony/dotenv": "7.2.*", "symfony/flex": "^2", - "symfony/framework-bundle": "7.1.*", - "symfony/http-client": "7.1.*", + "symfony/framework-bundle": "7.2.*", + "symfony/http-client": "7.2.*", "symfony/monolog-bundle": "^3.0", - "symfony/property-access": "7.1.*", - "symfony/property-info": "7.1.*", - "symfony/runtime": "7.1.*", - "symfony/serializer": "7.1.*", + "symfony/property-access": "7.2.*", + "symfony/property-info": "7.2.*", + "symfony/runtime": "7.2.*", + "symfony/serializer": "7.2.*", "symfony/stimulus-bundle": "^2.13", - "symfony/twig-bundle": "7.1.*", + "symfony/twig-bundle": "7.2.*", "symfony/ux-turbo": "^2.13", - "symfony/yaml": "7.1.*", - "symfonycasts/tailwind-bundle": "^0.7.1", + "symfony/yaml": "7.2.*", + "symfonycasts/tailwind-bundle": "^0.8.0", "twig/extra-bundle": "^2.12|^3.0", "twig/twig": "^2.12|^3.0" }, @@ -88,16 +88,16 @@ "extra": { "symfony": { "allow-contrib": false, - "require": "7.1.*", + "require": "7.2.*", "docker": true } }, "require-dev": { - "doctrine/doctrine-fixtures-bundle": "^3.6", - "symfony/debug-bundle": "7.1.*", + "doctrine/doctrine-fixtures-bundle": "^4.0", + "symfony/debug-bundle": "7.2.*", "symfony/maker-bundle": "^1.52", - "symfony/stopwatch": "7.1.*", - "symfony/web-profiler-bundle": "7.1.*", + "symfony/stopwatch": "7.2.*", + "symfony/web-profiler-bundle": "7.2.*", "zenstruck/foundry": "^2.2" } } diff --git a/composer.lock b/composer.lock index 866dd04..5a46e59 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9b7555863b0e06c24d6018b892c505e1", + "content-hash": "2e703bb9d89c28b463ef36f6e31540a9", "packages": [ { "name": "babdev/pagerfanta-bundle", @@ -402,138 +402,42 @@ ], "time": "2024-04-18T06:56:21+00:00" }, - { - "name": "doctrine/common", - "version": "3.5.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/d9ea4a54ca2586db781f0265d36bea731ac66ec5", - "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5", - "shasum": "" - }, - "require": { - "doctrine/persistence": "^2.0 || ^3.0 || ^4.0", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0 || ^10.0", - "doctrine/collections": "^1", - "phpstan/phpstan": "^1.4.1", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", - "squizlabs/php_codesniffer": "^3.0", - "symfony/phpunit-bridge": "^6.1", - "vimeo/psalm": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "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": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", - "homepage": "https://www.doctrine-project.org/projects/common.html", - "keywords": [ - "common", - "doctrine", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.5.0" - }, - "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%2Fcommon", - "type": "tidelift" - } - ], - "time": "2025-01-01T22:12:03+00:00" - }, { "name": "doctrine/dbal", - "version": "3.9.4", + "version": "4.2.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "ec16c82f20be1a7224e65ac67144a29199f87959" + "reference": "19a2b7deb5fe8c2df0ff817ecea305e50acb62ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/ec16c82f20be1a7224e65ac67144a29199f87959", - "reference": "ec16c82f20be1a7224e65ac67144a29199f87959", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/19a2b7deb5fe8c2df0ff817ecea305e50acb62ec", + "reference": "19a2b7deb5fe8c2df0ff817ecea305e50acb62ec", "shasum": "" }, "require": { - "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", + "php": "^8.1", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, "require-dev": { "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.1", + "jetbrains/phpstorm-stubs": "2023.2", "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-phpunit": "2.0.3", "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "9.6.22", + "phpunit/phpunit": "10.5.39", "slevomat/coding-standard": "8.13.1", "squizlabs/php_codesniffer": "3.10.2", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/console": "^4.4|^5.4|^6.0|^7.0" + "symfony/cache": "^6.3.8|^7.0", + "symfony/console": "^5.4|^6.3|^7.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." }, - "bin": [ - "bin/doctrine-dbal" - ], "type": "library", "autoload": { "psr-4": { @@ -586,7 +490,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.9.4" + "source": "https://github.com/doctrine/dbal/tree/4.2.2" }, "funding": [ { @@ -602,33 +506,31 @@ "type": "tidelift" } ], - "time": "2025-01-16T08:28:55+00:00" + "time": "2025-01-16T08:40:56+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.3", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "1.4.10 || 2.0.3", + "phpstan/phpstan-phpunit": "^1.0 || ^2", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -636,7 +538,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -647,9 +549,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "source": "https://github.com/doctrine/deprecations/tree/1.1.4" }, - "time": "2024-01-30T19:34:25+00:00" + "time": "2024-12-07T21:18:45+00:00" }, { "name": "doctrine/doctrine-bundle", @@ -773,16 +675,16 @@ }, { "name": "doctrine/doctrine-migrations-bundle", - "version": "3.4.0", + "version": "3.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "a5c5fe0d2c6b911c03555046febb05a05a347078" + "reference": "e858ce0f5c12b266dce7dce24834448355155da7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/a5c5fe0d2c6b911c03555046febb05a05a347078", - "reference": "a5c5fe0d2c6b911c03555046febb05a05a347078", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/e858ce0f5c12b266dce7dce24834448355155da7", + "reference": "e858ce0f5c12b266dce7dce24834448355155da7", "shasum": "" }, "require": { @@ -839,7 +741,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", - "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.0" + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.1" }, "funding": [ { @@ -855,7 +757,7 @@ "type": "tidelift" } ], - "time": "2025-01-16T20:28:10+00:00" + "time": "2025-01-27T22:48:22+00:00" }, { "name": "doctrine/event-manager", @@ -1291,16 +1193,16 @@ }, { "name": "doctrine/orm", - "version": "3.3.1", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "b1f8253105aa5382c495e5f9f8ef34e297775428" + "reference": "c9557c588b3a70ed93caff069d0aa75737f25609" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/b1f8253105aa5382c495e5f9f8ef34e297775428", - "reference": "b1f8253105aa5382c495e5f9f8ef34e297775428", + "url": "https://api.github.com/repos/doctrine/orm/zipball/c9557c588b3a70ed93caff069d0aa75737f25609", + "reference": "c9557c588b3a70ed93caff069d0aa75737f25609", "shasum": "" }, "require": { @@ -1375,9 +1277,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/3.3.1" + "source": "https://github.com/doctrine/orm/tree/3.3.2" }, - "time": "2024-12-19T07:08:14+00:00" + "time": "2025-02-04T19:43:15+00:00" }, { "name": "doctrine/persistence", @@ -1532,25 +1434,24 @@ }, { "name": "gedmo/doctrine-extensions", - "version": "v3.17.1", + "version": "v3.19.0", "source": { "type": "git", "url": "https://github.com/doctrine-extensions/DoctrineExtensions.git", - "reference": "eabb45018c5a4362b46c5beae3881261da89f900" + "reference": "5b0b8a442d19e6701ae64535dc08f7944e2895d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/eabb45018c5a4362b46c5beae3881261da89f900", - "reference": "eabb45018c5a4362b46c5beae3881261da89f900", + "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/5b0b8a442d19e6701ae64535dc08f7944e2895d2", + "reference": "5b0b8a442d19e6701ae64535dc08f7944e2895d2", "shasum": "" }, "require": { "behat/transliterator": "^1.2", "doctrine/collections": "^1.2 || ^2.0", - "doctrine/common": "^2.13 || ^3.0", "doctrine/deprecations": "^1.0", "doctrine/event-manager": "^1.2 || ^2.0", - "doctrine/persistence": "^2.2 || ^3.0", + "doctrine/persistence": "^2.2 || ^3.0 || ^4.0", "php": "^7.4 || ^8.0", "psr/cache": "^1 || ^2 || ^3", "psr/clock": "^1", @@ -1558,24 +1459,26 @@ }, "conflict": { "doctrine/annotations": "<1.13 || >=3.0", + "doctrine/common": "<2.13 || >=4.0", "doctrine/dbal": "<3.7 || >=5.0", "doctrine/mongodb-odm": "<2.3 || >=3.0", - "doctrine/orm": "<2.14.0 || 2.16.0 || 2.16.1 || >=4.0" + "doctrine/orm": "<2.20 || >=3.0 <3.3 || >=4.0" }, "require-dev": { "doctrine/annotations": "^1.13 || ^2.0", "doctrine/cache": "^1.11 || ^2.0", + "doctrine/common": "^2.13 || ^3.0", "doctrine/dbal": "^3.7 || ^4.0", "doctrine/doctrine-bundle": "^2.3", "doctrine/mongodb-odm": "^2.3", - "doctrine/orm": "^2.14.0 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.14.0", + "doctrine/orm": "^2.20 || ^3.3", + "friendsofphp/php-cs-fixer": "^3.70", "nesbot/carbon": "^2.71 || ^3.0", - "phpstan/phpstan": "^1.11", - "phpstan/phpstan-doctrine": "^1.4", - "phpstan/phpstan-phpunit": "^1.4", + "phpstan/phpstan": "^2.1.1", + "phpstan/phpstan-doctrine": "^2.0.1", + "phpstan/phpstan-phpunit": "^2.0.3", "phpunit/phpunit": "^9.6", - "rector/rector": "^1.1", + "rector/rector": "^2.0.6", "symfony/console": "^5.4 || ^6.0 || ^7.0", "symfony/doctrine-bridge": "^5.4 || ^6.0 || ^7.0", "symfony/phpunit-bridge": "^6.0 || ^7.0", @@ -1637,7 +1540,7 @@ "support": { "email": "gediminas.morkevicius@gmail.com", "issues": "https://github.com/doctrine-extensions/DoctrineExtensions/issues", - "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.17.1", + "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.19.0", "wiki": "https://github.com/Atlantic18/DoctrineExtensions/tree/main/doc" }, "funding": [ @@ -1658,7 +1561,7 @@ "type": "github" } ], - "time": "2024-10-07T22:30:27+00:00" + "time": "2025-02-24T22:12:57+00:00" }, { "name": "knplabs/knp-time-bundle", @@ -1737,16 +1640,16 @@ }, { "name": "monolog/monolog", - "version": "3.8.0", + "version": "3.8.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67" + "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/32e515fdc02cdafbe4593e30a9350d486b125b67", - "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", "shasum": "" }, "require": { @@ -1824,7 +1727,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.8.0" + "source": "https://github.com/Seldaek/monolog/tree/3.8.1" }, "funding": [ { @@ -1836,7 +1739,7 @@ "type": "tidelift" } ], - "time": "2024-11-12T13:57:08+00:00" + "time": "2024-12-05T17:15:07+00:00" }, { "name": "pagerfanta/core", @@ -1930,16 +1833,16 @@ }, { "name": "php-cs-fixer/shim", - "version": "v3.65.0", + "version": "v3.70.2", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/shim.git", - "reference": "4983ec79b9dee926695ac324ea6e8d291935525d" + "reference": "ff041542719ad3be54bd34647d0fd5bc7900115e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/4983ec79b9dee926695ac324ea6e8d291935525d", - "reference": "4983ec79b9dee926695ac324ea6e8d291935525d", + "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/ff041542719ad3be54bd34647d0fd5bc7900115e", + "reference": "ff041542719ad3be54bd34647d0fd5bc7900115e", "shasum": "" }, "require": { @@ -1976,9 +1879,9 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/PHP-CS-Fixer/shim/issues", - "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.65.0" + "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.70.2" }, - "time": "2024-11-25T00:39:41+00:00" + "time": "2025-03-03T21:07:46+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -2035,16 +1938,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.0", + "version": "5.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c" + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f3558a4c23426d12bffeaab463f8a8d8b681193c", - "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", "shasum": "" }, "require": { @@ -2093,9 +1996,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.0" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1" }, - "time": "2024-11-12T11:25:25+00:00" + "time": "2024-12-07T09:39:29+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -2157,30 +2060,30 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.33.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140" + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140", - "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^5.3.0", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", "symfony/process": "^5.2" }, "type": "library", @@ -2198,9 +2101,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" }, - "time": "2024-10-13T11:25:22+00:00" + "time": "2025-02-19T13:28:12+00:00" }, { "name": "psr/cache", @@ -2534,16 +2437,16 @@ }, { "name": "symfony/asset", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "0dcd51490d7fc9fbf3c8f5aec6df182920fc0426" + "reference": "cb926cd59fefa1f9b4900b3695f0f846797ba5c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/0dcd51490d7fc9fbf3c8f5aec6df182920fc0426", - "reference": "0dcd51490d7fc9fbf3c8f5aec6df182920fc0426", + "url": "https://api.github.com/repos/symfony/asset/zipball/cb926cd59fefa1f9b4900b3695f0f846797ba5c0", + "reference": "cb926cd59fefa1f9b4900b3695f0f846797ba5c0", "shasum": "" }, "require": { @@ -2583,7 +2486,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/asset/tree/v7.1.6" + "source": "https://github.com/symfony/asset/tree/v7.2.0" }, "funding": [ { @@ -2599,20 +2502,20 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:11:02+00:00" + "time": "2024-10-25T15:15:23+00:00" }, { "name": "symfony/asset-mapper", - "version": "v7.1.9", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/asset-mapper.git", - "reference": "bb1c2f5f394c84ce5b1ac8c94d0ac213ae3ce5f8" + "reference": "d9a514cbaba040691d5b10afc20755590d2ac80a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset-mapper/zipball/bb1c2f5f394c84ce5b1ac8c94d0ac213ae3ce5f8", - "reference": "bb1c2f5f394c84ce5b1ac8c94d0ac213ae3ce5f8", + "url": "https://api.github.com/repos/symfony/asset-mapper/zipball/d9a514cbaba040691d5b10afc20755590d2ac80a", + "reference": "d9a514cbaba040691d5b10afc20755590d2ac80a", "shasum": "" }, "require": { @@ -2662,7 +2565,7 @@ "description": "Maps directories of assets & makes them available in a public directory with versioned filenames.", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/asset-mapper/tree/v7.1.9" + "source": "https://github.com/symfony/asset-mapper/tree/v7.2.3" }, "funding": [ { @@ -2678,20 +2581,20 @@ "type": "tidelift" } ], - "time": "2024-11-20T11:08:58+00:00" + "time": "2025-01-27T11:08:17+00:00" }, { "name": "symfony/cache", - "version": "v7.1.9", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "18e0ba45a50032aa53dfebf830ec2980bb131591" + "reference": "d33cd9e14326e14a4145c21e600602eaf17cc9e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/18e0ba45a50032aa53dfebf830ec2980bb131591", - "reference": "18e0ba45a50032aa53dfebf830ec2980bb131591", + "url": "https://api.github.com/repos/symfony/cache/zipball/d33cd9e14326e14a4145c21e600602eaf17cc9e7", + "reference": "d33cd9e14326e14a4145c21e600602eaf17cc9e7", "shasum": "" }, "require": { @@ -2719,6 +2622,7 @@ "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/clock": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", "symfony/filesystem": "^6.4|^7.0", @@ -2759,7 +2663,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.9" + "source": "https://github.com/symfony/cache/tree/v7.2.4" }, "funding": [ { @@ -2775,7 +2679,7 @@ "type": "tidelift" } ], - "time": "2024-11-20T10:42:04+00:00" + "time": "2025-02-26T09:57:54+00:00" }, { "name": "symfony/cache-contracts", @@ -2797,12 +2701,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2855,16 +2759,16 @@ }, { "name": "symfony/config", - "version": "v7.1.7", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8" + "reference": "7716594aaae91d9141be080240172a92ecca4d44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8", - "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8", + "url": "https://api.github.com/repos/symfony/config/zipball/7716594aaae91d9141be080240172a92ecca4d44", + "reference": "7716594aaae91d9141be080240172a92ecca4d44", "shasum": "" }, "require": { @@ -2910,7 +2814,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/config/tree/v7.1.7" + "source": "https://github.com/symfony/config/tree/v7.2.3" }, "funding": [ { @@ -2926,20 +2830,20 @@ "type": "tidelift" } ], - "time": "2024-11-04T11:34:07+00:00" + "time": "2025-01-22T12:07:01+00:00" }, { "name": "symfony/console", - "version": "v7.1.8", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ff04e5b5ba043d2badfb308197b9e6b42883fcd5", - "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -3003,7 +2907,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.8" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -3019,20 +2923,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:23:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/dependency-injection", - "version": "v7.1.9", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "900d2eac6e33aef743bdc10dd8c75d012215fd08" + "reference": "f0a1614cccb4b8431a97076f9debc08ddca321ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/900d2eac6e33aef743bdc10dd8c75d012215fd08", - "reference": "900d2eac6e33aef743bdc10dd8c75d012215fd08", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f0a1614cccb4b8431a97076f9debc08ddca321ca", + "reference": "f0a1614cccb4b8431a97076f9debc08ddca321ca", "shasum": "" }, "require": { @@ -3083,7 +2987,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.1.9" + "source": "https://github.com/symfony/dependency-injection/tree/v7.2.4" }, "funding": [ { @@ -3099,7 +3003,7 @@ "type": "tidelift" } ], - "time": "2024-11-25T15:44:54+00:00" + "time": "2025-02-21T09:47:16+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3120,12 +3024,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3170,21 +3074,21 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.1.10", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "e8bb28f54741c0eb91ff7bc07f3abf5ebd4a3609" + "reference": "95bc5dde5202828bbc462bc06ba67cd244fa8a15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/e8bb28f54741c0eb91ff7bc07f3abf5ebd4a3609", - "reference": "e8bb28f54741c0eb91ff7bc07f3abf5ebd4a3609", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/95bc5dde5202828bbc462bc06ba67cd244fa8a15", + "reference": "95bc5dde5202828bbc462bc06ba67cd244fa8a15", "shasum": "" }, "require": { "doctrine/event-manager": "^2", - "doctrine/persistence": "^3.1", + "doctrine/persistence": "^3.1|^4", "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", @@ -3192,6 +3096,7 @@ "symfony/service-contracts": "^2.5|^3" }, "conflict": { + "doctrine/collections": "<1.8", "doctrine/dbal": "<3.6", "doctrine/lexer": "<1.1", "doctrine/orm": "<2.15", @@ -3208,7 +3113,7 @@ "symfony/validator": "<6.4" }, "require-dev": { - "doctrine/collections": "^1.0|^2.0", + "doctrine/collections": "^1.8|^2.0", "doctrine/data-fixtures": "^1.1|^2", "doctrine/dbal": "^3.6|^4", "doctrine/orm": "^2.15|^3", @@ -3258,7 +3163,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.10" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.2.4" }, "funding": [ { @@ -3274,20 +3179,20 @@ "type": "tidelift" } ], - "time": "2024-12-19T14:23:39+00:00" + "time": "2025-02-18T16:43:05+00:00" }, { "name": "symfony/dotenv", - "version": "v7.1.9", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "245d1afe223664d2276afb75177d8988c328fb78" + "reference": "28347a897771d0c28e99b75166dd2689099f3045" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/245d1afe223664d2276afb75177d8988c328fb78", - "reference": "245d1afe223664d2276afb75177d8988c328fb78", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/28347a897771d0c28e99b75166dd2689099f3045", + "reference": "28347a897771d0c28e99b75166dd2689099f3045", "shasum": "" }, "require": { @@ -3332,7 +3237,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v7.1.9" + "source": "https://github.com/symfony/dotenv/tree/v7.2.0" }, "funding": [ { @@ -3348,20 +3253,20 @@ "type": "tidelift" } ], - "time": "2024-11-27T11:17:28+00:00" + "time": "2024-11-27T11:18:42+00:00" }, { "name": "symfony/error-handler", - "version": "v7.1.7", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "010e44661f4c6babaf8c4862fe68c24a53903342" + "reference": "aabf79938aa795350c07ce6464dd1985607d95d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/010e44661f4c6babaf8c4862fe68c24a53903342", - "reference": "010e44661f4c6babaf8c4862fe68c24a53903342", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/aabf79938aa795350c07ce6464dd1985607d95d5", + "reference": "aabf79938aa795350c07ce6464dd1985607d95d5", "shasum": "" }, "require": { @@ -3407,7 +3312,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.7" + "source": "https://github.com/symfony/error-handler/tree/v7.2.4" }, "funding": [ { @@ -3423,20 +3328,20 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:55+00:00" + "time": "2025-02-02T20:27:07+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "87254c78dd50721cfd015b62277a8281c5589702" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702", - "reference": "87254c78dd50721cfd015b62277a8281c5589702", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { @@ -3487,7 +3392,7 @@ "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/v7.1.6" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -3503,7 +3408,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -3525,12 +3430,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3583,16 +3488,16 @@ }, { "name": "symfony/filesystem", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4" + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/c835867b3c62bb05c7fe3d637c871c7ae52024d4", - "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", "shasum": "" }, "require": { @@ -3629,7 +3534,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.1.6" + "source": "https://github.com/symfony/filesystem/tree/v7.2.0" }, "funding": [ { @@ -3645,20 +3550,20 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:11:02+00:00" + "time": "2024-10-25T15:15:23+00:00" }, { "name": "symfony/finder", - "version": "v7.1.6", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8" + "reference": "87a71856f2f56e4100373e92529eed3171695cfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/2cb89664897be33f78c65d3d2845954c8d7a43b8", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8", + "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", + "reference": "87a71856f2f56e4100373e92529eed3171695cfb", "shasum": "" }, "require": { @@ -3693,7 +3598,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.6" + "source": "https://github.com/symfony/finder/tree/v7.2.2" }, "funding": [ { @@ -3709,20 +3614,20 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:31:23+00:00" + "time": "2024-12-30T19:00:17+00:00" }, { "name": "symfony/flex", - "version": "v2.4.7", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402" + "reference": "8ce1acd9842abe0e9b4c4a0bd3f259859516c018" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/92f4fba342161ff36072bd3b8e0b3c6c23160402", - "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402", + "url": "https://api.github.com/repos/symfony/flex/zipball/8ce1acd9842abe0e9b4c4a0bd3f259859516c018", + "reference": "8ce1acd9842abe0e9b4c4a0bd3f259859516c018", "shasum": "" }, "require": { @@ -3761,7 +3666,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v2.4.7" + "source": "https://github.com/symfony/flex/tree/v2.5.0" }, "funding": [ { @@ -3777,20 +3682,20 @@ "type": "tidelift" } ], - "time": "2024-10-07T08:51:54+00:00" + "time": "2025-03-03T07:50:46+00:00" }, { "name": "symfony/framework-bundle", - "version": "v7.1.6", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "1d616d762905091e798d64c53ffe3840ccfc3d89" + "reference": "6d6614378cd8128eed0a037ce6ac51a26c5aaed5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/1d616d762905091e798d64c53ffe3840ccfc3d89", - "reference": "1d616d762905091e798d64c53ffe3840ccfc3d89", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/6d6614378cd8128eed0a037ce6ac51a26c5aaed5", + "reference": "6d6614378cd8128eed0a037ce6ac51a26c5aaed5", "shasum": "" }, "require": { @@ -3799,14 +3704,14 @@ "php": ">=8.2", "symfony/cache": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^7.1.5", + "symfony/dependency-injection": "^7.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/error-handler": "^6.4|^7.0", "symfony/event-dispatcher": "^6.4|^7.0", "symfony/filesystem": "^7.1", "symfony/finder": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", + "symfony/http-kernel": "^7.2", "symfony/polyfill-mbstring": "~1.0", "symfony/routing": "^6.4|^7.0" }, @@ -3831,14 +3736,15 @@ "symfony/runtime": "<6.4.13|>=7.0,<7.1.6", "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", "symfony/security-core": "<6.4", - "symfony/security-csrf": "<6.4", - "symfony/serializer": "<6.4", + "symfony/security-csrf": "<7.2", + "symfony/serializer": "<7.1", "symfony/stopwatch": "<6.4", "symfony/translation": "<6.4", "symfony/twig-bridge": "<6.4", "symfony/twig-bundle": "<6.4", "symfony/validator": "<6.4", "symfony/web-profiler-bundle": "<6.4", + "symfony/webhook": "<7.2", "symfony/workflow": "<6.4" }, "require-dev": { @@ -3870,7 +3776,7 @@ "symfony/scheduler": "^6.4.4|^7.0.4", "symfony/security-bundle": "^6.4|^7.0", "symfony/semaphore": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", + "symfony/serializer": "^7.1", "symfony/stopwatch": "^6.4|^7.0", "symfony/string": "^6.4|^7.0", "symfony/translation": "^6.4|^7.0", @@ -3879,9 +3785,10 @@ "symfony/uid": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0", "symfony/web-link": "^6.4|^7.0", + "symfony/webhook": "^7.2", "symfony/workflow": "^6.4|^7.0", "symfony/yaml": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "type": "symfony-bundle", "autoload": { @@ -3909,7 +3816,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v7.1.6" + "source": "https://github.com/symfony/framework-bundle/tree/v7.2.4" }, "funding": [ { @@ -3925,30 +3832,31 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:11:02+00:00" + "time": "2025-02-26T08:19:39+00:00" }, { "name": "symfony/http-client", - "version": "v7.1.9", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "2ec49720a38a8041673ba4c42512bfd845218c56" + "reference": "78981a2ffef6437ed92d4d7e2a86a82f256c6dc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/2ec49720a38a8041673ba4c42512bfd845218c56", - "reference": "2ec49720a38a8041673ba4c42512bfd845218c56", + "url": "https://api.github.com/repos/symfony/http-client/zipball/78981a2ffef6437ed92d4d7e2a86a82f256c6dc6", + "reference": "78981a2ffef6437ed92d4d7e2a86a82f256c6dc6", "shasum": "" }, "require": { "php": ">=8.2", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-client-contracts": "~3.4.3|^3.5.1", + "symfony/http-client-contracts": "~3.4.4|^3.5.2", "symfony/service-contracts": "^2.5|^3" }, "conflict": { + "amphp/amp": "<2.5", "php-http/discovery": "<1.15", "symfony/http-foundation": "<6.4" }, @@ -3959,14 +3867,14 @@ "symfony/http-client-implementation": "3.0" }, "require-dev": { - "amphp/amp": "^2.5", - "amphp/http-client": "^4.2.1", - "amphp/http-tunnel": "^1.0", + "amphp/http-client": "^4.2.1|^5.0", + "amphp/http-tunnel": "^1.0|^2.0", "amphp/socket": "^1.1", "guzzlehttp/promises": "^1.4|^2.0", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", + "symfony/amphp-http-client-meta": "^1.0|^2.0", "symfony/dependency-injection": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", "symfony/messenger": "^6.4|^7.0", @@ -4003,7 +3911,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.1.9" + "source": "https://github.com/symfony/http-client/tree/v7.2.4" }, "funding": [ { @@ -4019,20 +3927,20 @@ "type": "tidelift" } ], - "time": "2024-11-27T11:52:45+00:00" + "time": "2025-02-13T10:27:23+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.5.1", + "version": "v3.5.2", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9" + "reference": "ee8d807ab20fcb51267fdace50fbe3494c31e645" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/c2f3ad828596624ca39ea40f83617ef51ca8bbf9", - "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ee8d807ab20fcb51267fdace50fbe3494c31e645", + "reference": "ee8d807ab20fcb51267fdace50fbe3494c31e645", "shasum": "" }, "require": { @@ -4040,12 +3948,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4081,7 +3989,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.2" }, "funding": [ { @@ -4097,24 +4005,25 @@ "type": "tidelift" } ], - "time": "2024-11-25T12:02:18+00:00" + "time": "2024-12-07T08:49:48+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.9", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "82765842fb599c7ed839b650214680c7ee5779be" + "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/82765842fb599c7ed839b650214680c7ee5779be", - "reference": "82765842fb599c7ed839b650214680c7ee5779be", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ee1b504b8926198be89d05e5b6fc4c3810c090f0", + "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, @@ -4158,7 +4067,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.9" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.3" }, "funding": [ { @@ -4174,20 +4083,20 @@ "type": "tidelift" } ], - "time": "2024-11-13T18:58:36+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.9", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "649d0e23c571344ef1153d4ffb2564f534b85a45" + "reference": "9f1103734c5789798fefb90e91de4586039003ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/649d0e23c571344ef1153d4ffb2564f534b85a45", - "reference": "649d0e23c571344ef1153d4ffb2564f534b85a45", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f1103734c5789798fefb90e91de4586039003ed", + "reference": "9f1103734c5789798fefb90e91de4586039003ed", "shasum": "" }, "require": { @@ -4216,7 +4125,7 @@ "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", "symfony/var-dumper": "<6.4", - "twig/twig": "<3.0.4" + "twig/twig": "<3.12" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" @@ -4244,7 +4153,7 @@ "symfony/validator": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0", "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "type": "library", "autoload": { @@ -4272,7 +4181,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.9" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.4" }, "funding": [ { @@ -4288,20 +4197,20 @@ "type": "tidelift" } ], - "time": "2024-11-27T12:55:11+00:00" + "time": "2025-02-26T11:01:22+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "e1da878cf5f701df5f5c1799bdbf827acee5a76e" + "reference": "bbae784f0456c5a87c89d7c1a3fcc9cbee976c1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/e1da878cf5f701df5f5c1799bdbf827acee5a76e", - "reference": "e1da878cf5f701df5f5c1799bdbf827acee5a76e", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/bbae784f0456c5a87c89d7c1a3fcc9cbee976c1d", + "reference": "bbae784f0456c5a87c89d7c1a3fcc9cbee976c1d", "shasum": "" }, "require": { @@ -4350,7 +4259,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v7.1.6" + "source": "https://github.com/symfony/monolog-bridge/tree/v7.2.0" }, "funding": [ { @@ -4366,7 +4275,7 @@ "type": "tidelift" } ], - "time": "2024-10-14T08:49:35+00:00" + "time": "2024-10-14T18:16:08+00:00" }, { "name": "symfony/monolog-bundle", @@ -4472,8 +4381,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4550,8 +4459,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4634,8 +4543,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4708,8 +4617,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4766,16 +4675,16 @@ }, { "name": "symfony/process", - "version": "v7.1.8", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892" + "reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/42783370fda6e538771f7c7a36e9fa2ee3a84892", - "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892", + "url": "https://api.github.com/repos/symfony/process/zipball/d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf", + "reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf", "shasum": "" }, "require": { @@ -4807,7 +4716,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.8" + "source": "https://github.com/symfony/process/tree/v7.2.4" }, "funding": [ { @@ -4823,20 +4732,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:23:19+00:00" + "time": "2025-02-05T08:33:46+00:00" }, { "name": "symfony/property-access", - "version": "v7.1.6", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "975d7f7fd8fcb952364c6badc46d01a580532bf9" + "reference": "b28732e315d81fbec787f838034de7d6c9b2b902" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/975d7f7fd8fcb952364c6badc46d01a580532bf9", - "reference": "975d7f7fd8fcb952364c6badc46d01a580532bf9", + "url": "https://api.github.com/repos/symfony/property-access/zipball/b28732e315d81fbec787f838034de7d6c9b2b902", + "reference": "b28732e315d81fbec787f838034de7d6c9b2b902", "shasum": "" }, "require": { @@ -4883,7 +4792,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.1.6" + "source": "https://github.com/symfony/property-access/tree/v7.2.3" }, "funding": [ { @@ -4899,31 +4808,33 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/property-info", - "version": "v7.1.9", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "e9a7b2a4984457c3849afd2b1a1ec7f2994cb1b5" + "reference": "dedb118fd588a92f226b390250b384d25f4192fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/e9a7b2a4984457c3849afd2b1a1ec7f2994cb1b5", - "reference": "e9a7b2a4984457c3849afd2b1a1ec7f2994cb1b5", + "url": "https://api.github.com/repos/symfony/property-info/zipball/dedb118fd588a92f226b390250b384d25f4192fe", + "reference": "dedb118fd588a92f226b390250b384d25f4192fe", "shasum": "" }, "require": { "php": ">=8.2", "symfony/string": "^6.4|^7.0", - "symfony/type-info": "^7.1" + "symfony/type-info": "~7.1.9|^7.2.2" }, "conflict": { "phpdocumentor/reflection-docblock": "<5.2", "phpdocumentor/type-resolver": "<1.5.1", - "symfony/dependency-injection": "<6.4" + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/serializer": "<6.4" }, "require-dev": { "phpdocumentor/reflection-docblock": "^5.2", @@ -4966,7 +4877,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.1.9" + "source": "https://github.com/symfony/property-info/tree/v7.2.3" }, "funding": [ { @@ -4982,20 +4893,20 @@ "type": "tidelift" } ], - "time": "2024-11-27T09:50:41+00:00" + "time": "2025-01-27T11:08:17+00:00" }, { "name": "symfony/routing", - "version": "v7.1.9", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "a27bb8e0cc3ca4baf17159d053910c9736c3aa4c" + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/a27bb8e0cc3ca4baf17159d053910c9736c3aa4c", - "reference": "a27bb8e0cc3ca4baf17159d053910c9736c3aa4c", + "url": "https://api.github.com/repos/symfony/routing/zipball/ee9a67edc6baa33e5fae662f94f91fd262930996", + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996", "shasum": "" }, "require": { @@ -5047,7 +4958,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.9" + "source": "https://github.com/symfony/routing/tree/v7.2.3" }, "funding": [ { @@ -5063,20 +4974,20 @@ "type": "tidelift" } ], - "time": "2024-11-13T16:12:35+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/runtime", - "version": "v7.1.7", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/runtime.git", - "reference": "9889783c17e8a68fa5e88c8e8a1a85e802558dba" + "reference": "8e8d09bd69b7f6c0260dd3d58f37bd4fbdeab5ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/runtime/zipball/9889783c17e8a68fa5e88c8e8a1a85e802558dba", - "reference": "9889783c17e8a68fa5e88c8e8a1a85e802558dba", + "url": "https://api.github.com/repos/symfony/runtime/zipball/8e8d09bd69b7f6c0260dd3d58f37bd4fbdeab5ad", + "reference": "8e8d09bd69b7f6c0260dd3d58f37bd4fbdeab5ad", "shasum": "" }, "require": { @@ -5126,7 +5037,7 @@ "runtime" ], "support": { - "source": "https://github.com/symfony/runtime/tree/v7.1.7" + "source": "https://github.com/symfony/runtime/tree/v7.2.3" }, "funding": [ { @@ -5142,20 +5053,20 @@ "type": "tidelift" } ], - "time": "2024-11-05T16:45:54+00:00" + "time": "2024-12-29T21:39:47+00:00" }, { "name": "symfony/serializer", - "version": "v7.1.9", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "39ec8beb1b8149c96785abad0e9ee390375a3e58" + "reference": "d3e6cd13f035e1061647f0144b5623a1e7e775ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/39ec8beb1b8149c96785abad0e9ee390375a3e58", - "reference": "39ec8beb1b8149c96785abad0e9ee390375a3e58", + "url": "https://api.github.com/repos/symfony/serializer/zipball/d3e6cd13f035e1061647f0144b5623a1e7e775ba", + "reference": "d3e6cd13f035e1061647f0144b5623a1e7e775ba", "shasum": "" }, "require": { @@ -5169,7 +5080,6 @@ "symfony/dependency-injection": "<6.4", "symfony/property-access": "<6.4", "symfony/property-info": "<6.4", - "symfony/type-info": "<7.1.5", "symfony/uid": "<6.4", "symfony/validator": "<6.4", "symfony/yaml": "<6.4" @@ -5181,7 +5091,7 @@ "symfony/cache": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dependency-injection": "^7.2", "symfony/error-handler": "^6.4|^7.0", "symfony/filesystem": "^6.4|^7.0", "symfony/form": "^6.4|^7.0", @@ -5192,7 +5102,7 @@ "symfony/property-access": "^6.4|^7.0", "symfony/property-info": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/type-info": "^7.1.5", + "symfony/type-info": "^7.1", "symfony/uid": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0", @@ -5225,7 +5135,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/serializer/tree/v7.1.9" + "source": "https://github.com/symfony/serializer/tree/v7.2.4" }, "funding": [ { @@ -5241,7 +5151,7 @@ "type": "tidelift" } ], - "time": "2024-11-14T21:24:44+00:00" + "time": "2025-02-24T10:49:57+00:00" }, { "name": "symfony/service-contracts", @@ -5267,12 +5177,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5328,16 +5238,16 @@ }, { "name": "symfony/stimulus-bundle", - "version": "v2.22.0", + "version": "v2.23.0", "source": { "type": "git", "url": "https://github.com/symfony/stimulus-bundle.git", - "reference": "2e840a3b12f06b33441cc3eb8907f51b806a7e4b" + "reference": "254f4e05cbaa349d4ae68b9b2e6a22995e0887f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/2e840a3b12f06b33441cc3eb8907f51b806a7e4b", - "reference": "2e840a3b12f06b33441cc3eb8907f51b806a7e4b", + "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/254f4e05cbaa349d4ae68b9b2e6a22995e0887f9", + "reference": "254f4e05cbaa349d4ae68b9b2e6a22995e0887f9", "shasum": "" }, "require": { @@ -5377,7 +5287,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/stimulus-bundle/tree/v2.22.0" + "source": "https://github.com/symfony/stimulus-bundle/tree/v2.23.0" }, "funding": [ { @@ -5393,20 +5303,20 @@ "type": "tidelift" } ], - "time": "2024-11-20T07:57:38+00:00" + "time": "2025-01-16T21:55:09+00:00" }, { "name": "symfony/stopwatch", - "version": "v7.1.6", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "8b4a434e6e7faf6adedffb48783a5c75409a1a05" + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8b4a434e6e7faf6adedffb48783a5c75409a1a05", - "reference": "8b4a434e6e7faf6adedffb48783a5c75409a1a05", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", "shasum": "" }, "require": { @@ -5439,7 +5349,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.1.6" + "source": "https://github.com/symfony/stopwatch/tree/v7.2.4" }, "funding": [ { @@ -5455,20 +5365,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-02-24T10:49:57+00:00" }, { "name": "symfony/string", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281" + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/591ebd41565f356fcd8b090fe64dbb5878f50281", - "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { @@ -5526,7 +5436,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.8" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -5542,24 +5452,25 @@ "type": "tidelift" } ], - "time": "2024-11-13T13:31:21+00:00" + "time": "2024-11-13T13:31:26+00:00" }, { "name": "symfony/translation", - "version": "v7.1.6", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f" + "reference": "283856e6981286cc0d800b53bd5703e8e363f05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f", + "url": "https://api.github.com/repos/symfony/translation/zipball/283856e6981286cc0d800b53bd5703e8e363f05a", + "reference": "283856e6981286cc0d800b53bd5703e8e363f05a", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, @@ -5620,7 +5531,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.6" + "source": "https://github.com/symfony/translation/tree/v7.2.4" }, "funding": [ { @@ -5636,7 +5547,7 @@ "type": "tidelift" } ], - "time": "2024-09-28T12:35:13+00:00" + "time": "2025-02-13T10:27:23+00:00" }, { "name": "symfony/translation-contracts", @@ -5657,12 +5568,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5718,22 +5629,23 @@ }, { "name": "symfony/twig-bridge", - "version": "v7.1.9", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "67ea8a59432307efb0fdcae0d8512e7c4a9e4c01" + "reference": "45c00afd4c9accf00a91215067c2858e5a9a3c4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/67ea8a59432307efb0fdcae0d8512e7c4a9e4c01", - "reference": "67ea8a59432307efb0fdcae0d8512e7c4a9e4c01", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/45c00afd4c9accf00a91215067c2858e5a9a3c4e", + "reference": "45c00afd4c9accf00a91215067c2858e5a9a3c4e", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/translation-contracts": "^2.5|^3", - "twig/twig": "^3.9" + "twig/twig": "^3.12" }, "conflict": { "phpdocumentor/reflection-docblock": "<3.2.2", @@ -5807,7 +5719,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v7.1.9" + "source": "https://github.com/symfony/twig-bridge/tree/v7.2.4" }, "funding": [ { @@ -5823,20 +5735,20 @@ "type": "tidelift" } ], - "time": "2024-11-25T12:02:18+00:00" + "time": "2025-02-14T14:27:24+00:00" }, { "name": "symfony/twig-bundle", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "af902314a71fb412ae412094f7e1d7e49594507b" + "reference": "cd2be4563afaef5285bb6e0a06c5445e644a5c01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/af902314a71fb412ae412094f7e1d7e49594507b", - "reference": "af902314a71fb412ae412094f7e1d7e49594507b", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/cd2be4563afaef5285bb6e0a06c5445e644a5c01", + "reference": "cd2be4563afaef5285bb6e0a06c5445e644a5c01", "shasum": "" }, "require": { @@ -5847,7 +5759,7 @@ "symfony/http-foundation": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", "symfony/twig-bridge": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "conflict": { "symfony/framework-bundle": "<6.4", @@ -5891,7 +5803,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v7.1.6" + "source": "https://github.com/symfony/twig-bundle/tree/v7.2.0" }, "funding": [ { @@ -5907,35 +5819,28 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-10-23T08:11:15+00:00" }, { "name": "symfony/type-info", - "version": "v7.1.8", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "51535dde21c7abf65c9d000a30bb15f6478195e6" + "reference": "269344575181c326781382ed53f7262feae3c6a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/51535dde21c7abf65c9d000a30bb15f6478195e6", - "reference": "51535dde21c7abf65c9d000a30bb15f6478195e6", + "url": "https://api.github.com/repos/symfony/type-info/zipball/269344575181c326781382ed53f7262feae3c6a4", + "reference": "269344575181c326781382ed53f7262feae3c6a4", "shasum": "" }, "require": { "php": ">=8.2", "psr/container": "^1.1|^2.0" }, - "conflict": { - "phpstan/phpdoc-parser": "<1.0", - "symfony/dependency-injection": "<6.4", - "symfony/property-info": "<6.4" - }, "require-dev": { - "phpstan/phpdoc-parser": "^1.0|^2.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0" + "phpstan/phpdoc-parser": "^1.0|^2.0" }, "type": "library", "autoload": { @@ -5973,7 +5878,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.1.8" + "source": "https://github.com/symfony/type-info/tree/v7.2.4" }, "funding": [ { @@ -5989,20 +5894,20 @@ "type": "tidelift" } ], - "time": "2024-11-07T15:49:33+00:00" + "time": "2025-02-25T15:19:41+00:00" }, { "name": "symfony/ux-turbo", - "version": "v2.22.0", + "version": "v2.23.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-turbo.git", - "reference": "f7af0aa09190354dd4630ea330d8a3fc3e8ef278" + "reference": "db96cf04d70a8c820671ce55530e8bf641ada33f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/f7af0aa09190354dd4630ea330d8a3fc3e8ef278", - "reference": "f7af0aa09190354dd4630ea330d8a3fc3e8ef278", + "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/db96cf04d70a8c820671ce55530e8bf641ada33f", + "reference": "db96cf04d70a8c820671ce55530e8bf641ada33f", "shasum": "" }, "require": { @@ -6071,7 +5976,7 @@ "turbo-stream" ], "support": { - "source": "https://github.com/symfony/ux-turbo/tree/v2.22.0" + "source": "https://github.com/symfony/ux-turbo/tree/v2.23.0" }, "funding": [ { @@ -6087,20 +5992,20 @@ "type": "tidelift" } ], - "time": "2024-11-29T15:25:16+00:00" + "time": "2025-02-06T08:47:30+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.8", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8" + "reference": "82b478c69745d8878eb60f9a049a4d584996f73a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", - "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/82b478c69745d8878eb60f9a049a4d584996f73a", + "reference": "82b478c69745d8878eb60f9a049a4d584996f73a", "shasum": "" }, "require": { @@ -6116,7 +6021,7 @@ "symfony/http-kernel": "^6.4|^7.0", "symfony/process": "^6.4|^7.0", "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -6154,7 +6059,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.8" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.3" }, "funding": [ { @@ -6170,20 +6075,20 @@ "type": "tidelift" } ], - "time": "2024-11-08T15:46:42+00:00" + "time": "2025-01-17T11:39:41+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.1.6", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "90173ef89c40e7c8c616653241048705f84130ef" + "reference": "4ede73aa7a73d81506002d2caadbbdad1ef5b69a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/90173ef89c40e7c8c616653241048705f84130ef", - "reference": "90173ef89c40e7c8c616653241048705f84130ef", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/4ede73aa7a73d81506002d2caadbbdad1ef5b69a", + "reference": "4ede73aa7a73d81506002d2caadbbdad1ef5b69a", "shasum": "" }, "require": { @@ -6230,7 +6135,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.1.6" + "source": "https://github.com/symfony/var-exporter/tree/v7.2.4" }, "funding": [ { @@ -6246,24 +6151,25 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-02-13T10:27:23+00:00" }, { "name": "symfony/yaml", - "version": "v7.1.6", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671" + "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", - "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ac238f173df0c9c1120f862d0f599e17535a87ec", + "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -6301,7 +6207,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.6" + "source": "https://github.com/symfony/yaml/tree/v7.2.3" }, "funding": [ { @@ -6317,20 +6223,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-01-07T12:55:42+00:00" }, { "name": "symfonycasts/tailwind-bundle", - "version": "v0.7.1", + "version": "v0.8.0", "source": { "type": "git", "url": "https://github.com/SymfonyCasts/tailwind-bundle.git", - "reference": "81c9e6ff2bb1a95e67fc6af04ca87fccdcf55aa4" + "reference": "43100c1ad793a1574a675aaf8a1f633fd7fe6e4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SymfonyCasts/tailwind-bundle/zipball/81c9e6ff2bb1a95e67fc6af04ca87fccdcf55aa4", - "reference": "81c9e6ff2bb1a95e67fc6af04ca87fccdcf55aa4", + "url": "https://api.github.com/repos/SymfonyCasts/tailwind-bundle/zipball/43100c1ad793a1574a675aaf8a1f633fd7fe6e4a", + "reference": "43100c1ad793a1574a675aaf8a1f633fd7fe6e4a", "shasum": "" }, "require": { @@ -6338,6 +6244,7 @@ "symfony/asset-mapper": "^6.3|^7.0", "symfony/cache": "^6.3|^7.0", "symfony/console": "^5.4|^6.3|^7.0", + "symfony/deprecation-contracts": "^2.2|^3.0", "symfony/http-client": "^5.4|^6.3|^7.0", "symfony/process": "^5.4|^6.3|^7.0" }, @@ -6370,26 +6277,26 @@ ], "support": { "issues": "https://github.com/SymfonyCasts/tailwind-bundle/issues", - "source": "https://github.com/SymfonyCasts/tailwind-bundle/tree/v0.7.1" + "source": "https://github.com/SymfonyCasts/tailwind-bundle/tree/v0.8.0" }, - "time": "2025-01-23T14:54:07+00:00" + "time": "2025-03-04T15:35:32+00:00" }, { "name": "twig/extra-bundle", - "version": "v3.16.0", + "version": "v3.20.0", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "9746573ca4bc1cd03a767a183faadaf84e0c31fa" + "reference": "9df5e1dbb6a68c0665ae5603f6f2c20815647876" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/9746573ca4bc1cd03a767a183faadaf84e0c31fa", - "reference": "9746573ca4bc1cd03a767a183faadaf84e0c31fa", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/9df5e1dbb6a68c0665ae5603f6f2c20815647876", + "reference": "9df5e1dbb6a68c0665ae5603f6f2c20815647876", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1.0", "symfony/framework-bundle": "^5.4|^6.4|^7.0", "symfony/twig-bundle": "^5.4|^6.4|^7.0", "twig/twig": "^3.2|^4.0" @@ -6434,7 +6341,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.16.0" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.20.0" }, "funding": [ { @@ -6446,28 +6353,27 @@ "type": "tidelift" } ], - "time": "2024-09-26T19:22:23+00:00" + "time": "2025-02-08T09:47:15+00:00" }, { "name": "twig/twig", - "version": "v3.16.0", + "version": "v3.20.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "475ad2dc97d65d8631393e721e7e44fb544f0561" + "reference": "3468920399451a384bef53cf7996965f7cd40183" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/475ad2dc97d65d8631393e721e7e44fb544f0561", - "reference": "475ad2dc97d65d8631393e721e7e44fb544f0561", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3468920399451a384bef53cf7996965f7cd40183", + "reference": "3468920399451a384bef53cf7996965f7cd40183", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php81": "^1.29" + "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { "phpstan/phpstan": "^2.0", @@ -6514,7 +6420,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.16.0" + "source": "https://github.com/twigphp/Twig/tree/v3.20.0" }, "funding": [ { @@ -6526,7 +6432,7 @@ "type": "tidelift" } ], - "time": "2024-11-29T08:27:05+00:00" + "time": "2025-02-13T08:34:43+00:00" }, { "name": "webmozart/assert", @@ -6673,25 +6579,25 @@ }, { "name": "doctrine/doctrine-fixtures-bundle", - "version": "3.7.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", - "reference": "bd59519a7532b9e1a41cef4049d5326dfac7def9" + "reference": "90185317e6bb3d845667c5ebd444d9c83ae19a01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/bd59519a7532b9e1a41cef4049d5326dfac7def9", - "reference": "bd59519a7532b9e1a41cef4049d5326dfac7def9", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/90185317e6bb3d845667c5ebd444d9c83ae19a01", + "reference": "90185317e6bb3d845667c5ebd444d9c83ae19a01", "shasum": "" }, "require": { - "doctrine/data-fixtures": "^1.5 || ^2.0", + "doctrine/data-fixtures": "^2.0", "doctrine/doctrine-bundle": "^2.2", "doctrine/orm": "^2.14.0 || ^3.0", "doctrine/persistence": "^2.4 || ^3.0", - "php": "^7.4 || ^8.0", - "psr/log": "^1 || ^2 || ^3", + "php": "^8.1", + "psr/log": "^2 || ^3", "symfony/config": "^5.4 || ^6.0 || ^7.0", "symfony/console": "^5.4 || ^6.0 || ^7.0", "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", @@ -6705,8 +6611,7 @@ "require-dev": { "doctrine/coding-standard": "^12", "phpstan/phpstan": "^2", - "phpunit/phpunit": "^9.6.13", - "symfony/phpunit-bridge": "^6.3.6" + "phpunit/phpunit": "^10.5.38 || ^11" }, "type": "symfony-bundle", "autoload": { @@ -6740,7 +6645,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", - "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.7.1" + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/4.0.0" }, "funding": [ { @@ -6756,7 +6661,7 @@ "type": "tidelift" } ], - "time": "2024-12-03T17:07:51+00:00" + "time": "2024-12-05T18:35:55+00:00" }, { "name": "fakerphp/faker", @@ -6823,16 +6728,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -6875,22 +6780,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "symfony/debug-bundle", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", - "reference": "c91a650aa390071d22dfaf32c2ff77fda27e9583" + "reference": "2dade0d1415c08b627379b5ec214ec8424cb2e32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/c91a650aa390071d22dfaf32c2ff77fda27e9583", - "reference": "c91a650aa390071d22dfaf32c2ff77fda27e9583", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/2dade0d1415c08b627379b5ec214ec8424cb2e32", + "reference": "2dade0d1415c08b627379b5ec214ec8424cb2e32", "shasum": "" }, "require": { @@ -6935,7 +6840,7 @@ "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/debug-bundle/tree/v7.1.6" + "source": "https://github.com/symfony/debug-bundle/tree/v7.2.0" }, "funding": [ { @@ -6951,20 +6856,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/maker-bundle", - "version": "v1.61.0", + "version": "v1.62.1", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18" + "reference": "468ff2708200c95ebc0d85d3174b6c6711b8a590" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/a3b7f14d349f8f44ed752d4dde2263f77510cc18", - "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/468ff2708200c95ebc0d85d3174b6c6711b8a590", + "reference": "468ff2708200c95ebc0d85d3174b6c6711b8a590", "shasum": "" }, "require": { @@ -7027,7 +6932,7 @@ ], "support": { "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.61.0" + "source": "https://github.com/symfony/maker-bundle/tree/v1.62.1" }, "funding": [ { @@ -7043,20 +6948,20 @@ "type": "tidelift" } ], - "time": "2024-08-29T22:50:23+00:00" + "time": "2025-01-15T00:21:40+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v7.1.9", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "6f26474e0e8ff746cb0abaddf9ebe0b067172fb1" + "reference": "4ffde1c860a100533b02697d9aaf5f45759ec26a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/6f26474e0e8ff746cb0abaddf9ebe0b067172fb1", - "reference": "6f26474e0e8ff746cb0abaddf9ebe0b067172fb1", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/4ffde1c860a100533b02697d9aaf5f45759ec26a", + "reference": "4ffde1c860a100533b02697d9aaf5f45759ec26a", "shasum": "" }, "require": { @@ -7066,12 +6971,13 @@ "symfony/http-kernel": "^6.4|^7.0", "symfony/routing": "^6.4|^7.0", "symfony/twig-bundle": "^6.4|^7.0", - "twig/twig": "^3.10" + "twig/twig": "^3.12" }, "conflict": { "symfony/form": "<6.4", "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4" + "symfony/messenger": "<6.4", + "symfony/serializer": "<7.2" }, "require-dev": { "symfony/browser-kit": "^6.4|^7.0", @@ -7108,7 +7014,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.9" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.2.4" }, "funding": [ { @@ -7124,7 +7030,7 @@ "type": "tidelift" } ], - "time": "2024-11-19T10:11:44+00:00" + "time": "2025-02-14T14:27:24+00:00" }, { "name": "zenstruck/assert", @@ -7187,16 +7093,16 @@ }, { "name": "zenstruck/foundry", - "version": "v2.3.1", + "version": "v2.3.6", "source": { "type": "git", "url": "https://github.com/zenstruck/foundry.git", - "reference": "6f744b05706c1780e61368f23bf77e18c83d8fcd" + "reference": "4a647475f7f65f52b238db8b82c55df5dc3bf6fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zenstruck/foundry/zipball/6f744b05706c1780e61368f23bf77e18c83d8fcd", - "reference": "6f744b05706c1780e61368f23bf77e18c83d8fcd", + "url": "https://api.github.com/repos/zenstruck/foundry/zipball/4a647475f7f65f52b238db8b82c55df5dc3bf6fa", + "reference": "4a647475f7f65f52b238db8b82c55df5dc3bf6fa", "shasum": "" }, "require": { @@ -7212,11 +7118,12 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8", "brianium/paratest": "^6|^7", - "dama/doctrine-test-bundle": "^7.0|^8.0", + "dama/doctrine-test-bundle": "^8.0", "doctrine/collections": "^1.7|^2.0", - "doctrine/common": "^3.2", + "doctrine/common": "^3.2.2", "doctrine/doctrine-bundle": "^2.10", "doctrine/doctrine-migrations-bundle": "^2.2|^3.0", + "doctrine/mongodb-odm": "^2.4", "doctrine/mongodb-odm-bundle": "^4.6|^5.0", "doctrine/orm": "^2.16|^3.0", "phpunit/phpunit": "^9.5.0 || ^10.0 || ^11.0", @@ -7226,6 +7133,7 @@ "symfony/phpunit-bridge": "^6.4|^7.0", "symfony/runtime": "^6.4|^7.0", "symfony/translation-contracts": "^3.4", + "symfony/uid": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0", "symfony/yaml": "^6.4|^7.0" }, @@ -7278,7 +7186,7 @@ ], "support": { "issues": "https://github.com/zenstruck/foundry/issues", - "source": "https://github.com/zenstruck/foundry/tree/v2.3.1" + "source": "https://github.com/zenstruck/foundry/tree/v2.3.6" }, "funding": [ { @@ -7286,12 +7194,12 @@ "type": "github" } ], - "time": "2024-12-12T09:03:06+00:00" + "time": "2025-02-25T18:18:47+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": [], "prefer-stable": true, "prefer-lowest": false, "platform": { @@ -7299,7 +7207,7 @@ "ext-ctype": "*", "ext-iconv": "*" }, - "platform-dev": {}, + "platform-dev": [], "platform-overrides": { "php": "8.3" }, From 6ba85ffd184822373a60af7669185ebb5b3fd214 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Wed, 5 Mar 2025 14:33:16 -0500 Subject: [PATCH 005/181] updating recipe: asset-mapper --- config/packages/asset_mapper.yaml | 6 ++++++ symfony.lock | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/config/packages/asset_mapper.yaml b/config/packages/asset_mapper.yaml index d1ac653..f7653e9 100644 --- a/config/packages/asset_mapper.yaml +++ b/config/packages/asset_mapper.yaml @@ -3,3 +3,9 @@ framework: # The paths to make available to the asset mapper. paths: - assets/ + missing_import_mode: strict + +when@prod: + framework: + asset_mapper: + missing_import_mode: warn diff --git a/symfony.lock b/symfony.lock index fd54ad8..c1c8384 100644 --- a/symfony.lock +++ b/symfony.lock @@ -69,12 +69,12 @@ ] }, "symfony/asset-mapper": { - "version": "7.1", + "version": "7.2", "recipe": { "repo": "github.com/symfony/recipes", "branch": "main", "version": "6.4", - "ref": "6c28c471640cc2c6e60812ebcb961c526ef8997f" + "ref": "5ad1308aa756d58f999ffbe1540d1189f5d7d14a" }, "files": [ "assets/app.js", From 5432bf71f25d628c84eadfd32b1b6a95fd099b4f Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Wed, 5 Mar 2025 14:34:24 -0500 Subject: [PATCH 006/181] upgrading recipe: flex --- .env.dev | 0 symfony.lock | 9 +++++---- 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 .env.dev diff --git a/.env.dev b/.env.dev new file mode 100644 index 0000000..e69de29 diff --git a/symfony.lock b/symfony.lock index c1c8384..8855123 100644 --- a/symfony.lock +++ b/symfony.lock @@ -108,15 +108,16 @@ ] }, "symfony/flex": { - "version": "2.4", + "version": "2.5", "recipe": { "repo": "github.com/symfony/recipes", "branch": "main", - "version": "1.0", - "ref": "146251ae39e06a95be0fe3d13c807bcf3938b172" + "version": "2.4", + "ref": "52e9754527a15e2b79d9a610f98185a1fe46622a" }, "files": [ - ".env" + ".env", + ".env.dev" ] }, "symfony/framework-bundle": { From 1cca8da63eb7acef8fe3f4bdbac52f750d10072f Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Wed, 5 Mar 2025 14:37:23 -0500 Subject: [PATCH 007/181] upgrading recipe: framework-bundle --- .env | 2 +- .env.dev | 4 ++++ config/packages/framework.yaml | 1 - symfony.lock | 6 +++--- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.env b/.env index 21fb614..4595258 100644 --- a/.env +++ b/.env @@ -16,7 +16,7 @@ ###> symfony/framework-bundle ### APP_ENV=dev -APP_SECRET=67f556bf9f5069ec0467e65c0505002c +APP_SECRET= ###< symfony/framework-bundle ### ISS_LOCATION_CACHE_TTL=5 diff --git a/.env.dev b/.env.dev index e69de29..9f55352 100644 --- a/.env.dev +++ b/.env.dev @@ -0,0 +1,4 @@ + +###> symfony/framework-bundle ### +APP_SECRET=51da4beea7350d056c07597de976300e +###< symfony/framework-bundle ### diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml index 877eb25..7e1ee1f 100644 --- a/config/packages/framework.yaml +++ b/config/packages/framework.yaml @@ -1,7 +1,6 @@ # see https://symfony.com/doc/current/reference/configuration/framework.html framework: secret: '%env(APP_SECRET)%' - #csrf_protection: true # Note that the session will be started ONLY if you read or write from it. session: true diff --git a/symfony.lock b/symfony.lock index 8855123..4cc4a0f 100644 --- a/symfony.lock +++ b/symfony.lock @@ -121,12 +121,12 @@ ] }, "symfony/framework-bundle": { - "version": "7.1", + "version": "7.2", "recipe": { "repo": "github.com/symfony/recipes", "branch": "main", - "version": "7.0", - "ref": "6356c19b9ae08e7763e4ba2d9ae63043efc75db5" + "version": "7.2", + "ref": "87bcf6f7c55201f345d8895deda46d2adbdbaa89" }, "files": [ "config/packages/cache.yaml", From 6e254c78f72fd416625b57aaa75a92868cc52ed1 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Wed, 5 Mar 2025 14:40:13 -0500 Subject: [PATCH 008/181] upgrading recipe: stimulus-bundle --- .../controllers/csrf_protection_controller.js | 79 +++++++++++++++++++ symfony.lock | 7 +- 2 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 assets/controllers/csrf_protection_controller.js diff --git a/assets/controllers/csrf_protection_controller.js b/assets/controllers/csrf_protection_controller.js new file mode 100644 index 0000000..2811f21 --- /dev/null +++ b/assets/controllers/csrf_protection_controller.js @@ -0,0 +1,79 @@ +const nameCheck = /^[-_a-zA-Z0-9]{4,22}$/; +const tokenCheck = /^[-_\/+a-zA-Z0-9]{24,}$/; + +// Generate and double-submit a CSRF token in a form field and a cookie, as defined by Symfony's SameOriginCsrfTokenManager +document.addEventListener('submit', function (event) { + generateCsrfToken(event.target); +}, true); + +// When @hotwired/turbo handles form submissions, send the CSRF token in a header in addition to a cookie +// The `framework.csrf_protection.check_header` config option needs to be enabled for the header to be checked +document.addEventListener('turbo:submit-start', function (event) { + const h = generateCsrfHeaders(event.detail.formSubmission.formElement); + Object.keys(h).map(function (k) { + event.detail.formSubmission.fetchRequest.headers[k] = h[k]; + }); +}); + +// When @hotwired/turbo handles form submissions, remove the CSRF cookie once a form has been submitted +document.addEventListener('turbo:submit-end', function (event) { + removeCsrfToken(event.detail.formSubmission.formElement); +}); + +export function generateCsrfToken (formElement) { + const csrfField = formElement.querySelector('input[data-controller="csrf-protection"], input[name="_csrf_token"]'); + + if (!csrfField) { + return; + } + + let csrfCookie = csrfField.getAttribute('data-csrf-protection-cookie-value'); + let csrfToken = csrfField.value; + + if (!csrfCookie && nameCheck.test(csrfToken)) { + csrfField.setAttribute('data-csrf-protection-cookie-value', csrfCookie = csrfToken); + csrfField.defaultValue = csrfToken = btoa(String.fromCharCode.apply(null, (window.crypto || window.msCrypto).getRandomValues(new Uint8Array(18)))); + csrfField.dispatchEvent(new Event('change', { bubbles: true })); + } + + if (csrfCookie && tokenCheck.test(csrfToken)) { + const cookie = csrfCookie + '_' + csrfToken + '=' + csrfCookie + '; path=/; samesite=strict'; + document.cookie = window.location.protocol === 'https:' ? '__Host-' + cookie + '; secure' : cookie; + } +} + +export function generateCsrfHeaders (formElement) { + const headers = {}; + const csrfField = formElement.querySelector('input[data-controller="csrf-protection"], input[name="_csrf_token"]'); + + if (!csrfField) { + return headers; + } + + const csrfCookie = csrfField.getAttribute('data-csrf-protection-cookie-value'); + + if (tokenCheck.test(csrfField.value) && nameCheck.test(csrfCookie)) { + headers[csrfCookie] = csrfField.value; + } + + return headers; +} + +export function removeCsrfToken (formElement) { + const csrfField = formElement.querySelector('input[data-controller="csrf-protection"], input[name="_csrf_token"]'); + + if (!csrfField) { + return; + } + + const csrfCookie = csrfField.getAttribute('data-csrf-protection-cookie-value'); + + if (tokenCheck.test(csrfField.value) && nameCheck.test(csrfCookie)) { + const cookie = csrfCookie + '_' + csrfField.value + '=0; path=/; samesite=strict; max-age=0'; + + document.cookie = window.location.protocol === 'https:' ? '__Host-' + cookie + '; secure' : cookie; + } +} + +/* stimulusFetch: 'lazy' */ +export default 'csrf-protection-controller'; diff --git a/symfony.lock b/symfony.lock index 4cc4a0f..d524ff8 100644 --- a/symfony.lock +++ b/symfony.lock @@ -174,16 +174,17 @@ ] }, "symfony/stimulus-bundle": { - "version": "2.13", + "version": "2.23", "recipe": { "repo": "github.com/symfony/recipes", "branch": "main", - "version": "2.13", - "ref": "6acd9ff4f7fd5626d2962109bd4ebab351d43c43" + "version": "2.20", + "ref": "3acc494b566816514a6873a89023a35440b6386d" }, "files": [ "assets/bootstrap.js", "assets/controllers.json", + "assets/controllers/csrf_protection_controller.js", "assets/controllers/hello_controller.js" ] }, From 718e70cca3e1f2a40ac348aa7f00b19a08e4b570 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Wed, 5 Mar 2025 15:15:31 -0500 Subject: [PATCH 009/181] completing setup inatructions --- README.md | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/README.md b/README.md index a8b57cf..1538ae4 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,75 @@ Well hi there! This repository holds the code and script for the [Symfony, Doctrine Relations & Warp Drive Basics](https://symfonycasts.com/screencast/symfony7-doctrine-relations) course on SymfonyCasts. +## Setup + +If you've just downloaded the code, congratulations!! + +To get it working, follow these steps: + +**Download Composer dependencies** + +Make sure you have [Composer installed](https://getcomposer.org/download/) +and then run: + +``` +composer install +``` + +You may alternatively need to run `php composer.phar install`, depending +on how you installed Composer. + +**(Optional) Start the Docker database container** + +``` +docker compose up -d +``` + +If not using Docker, you can skip this step, but you'll need +to configure `DATABASE_URL` in `.env`. + +**Create the database, Schema (Tables) & Load Fixtures** + +If using Docker, the database should already be created. + +``` +symfony console doctrine:database:create --if-not-exists +symfony console doctrine:schema:create +symfony console doctrine:fixtures:load +``` + +**Build TailwindCSS** + +This project uses TailwindCSS, to build the CSS file run: + +``` +php bin/console tailwind:build +``` + +**Start the Symfony web server** + +You can use Nginx or Apache, but Symfony's local web server +works even better. + +To install the Symfony local web server, follow +"Downloading the Symfony client" instructions found +here: https://symfony.com/download - you only need to do this +once on your system. + +Then, to start the web server, open a terminal, move into the +project, and run: + +``` +symfony serve +``` + +(If this is your first time using this command, you may see an +error that you need to run `symfony server:ca:install` first). + +Now check out the site at `https://localhost:8000` + +Have fun! + ## Have Ideas, Feedback or an Issue? If you have suggestions or questions, please feel free to open an issue From b3607e4867999b3a358e3d616caa6f0511fd48a8 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Wed, 5 Mar 2025 15:57:11 -0500 Subject: [PATCH 010/181] adding tailwind config file --- README.md | 4 ++++ config/packages/symfonycasts_tailwind.yaml | 6 ++++++ 2 files changed, 10 insertions(+) create mode 100644 config/packages/symfonycasts_tailwind.yaml diff --git a/README.md b/README.md index 1538ae4..3a3c2e3 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,10 @@ symfony console doctrine:fixtures:load This project uses TailwindCSS, to build the CSS file run: +If you're using the `symfony serve` command to run the site, you're done! +The `tailwind:build` command is already running thanks to the `workers` config +in `symfony.yaml`. + ``` php bin/console tailwind:build ``` diff --git a/config/packages/symfonycasts_tailwind.yaml b/config/packages/symfonycasts_tailwind.yaml new file mode 100644 index 0000000..54d707f --- /dev/null +++ b/config/packages/symfonycasts_tailwind.yaml @@ -0,0 +1,6 @@ +symfonycasts_tailwind: + # Specify the EXACT version of Tailwind CSS you want to use + binary_version: 'v4.0.10' + + # Alternatively, you can specify the path to the binary that you manage yourself + #binary: 'node_modules/.bin/tailwindcss' From 3c7163b1e441bfa49f45e678cc43314cc70c6c38 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Wed, 5 Mar 2025 16:02:13 -0500 Subject: [PATCH 011/181] updating recipe: tailwind --- symfony.lock | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/symfony.lock b/symfony.lock index d524ff8..30fa9ef 100644 --- a/symfony.lock +++ b/symfony.lock @@ -231,7 +231,16 @@ ] }, "symfonycasts/tailwind-bundle": { - "version": "v0.5.0" + "version": "0.8", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "0.8", + "ref": "4ea7c9488fdce8943520daf3fdc31e93e5b59c64" + }, + "files": [ + "config/packages/symfonycasts_tailwind.yaml" + ] }, "twig/extra-bundle": { "version": "v3.8.0" From 6ed118dc83d463da7949b339ff88ec2d0e726d81 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Thu, 6 Mar 2025 10:40:25 -0500 Subject: [PATCH 012/181] adding setup details --- _tuts/README.md | 5 + _tuts/starshippart-make-entity.diff | 121 +++++++++++++++++++++++++ _tuts/starshippart-make-migration.diff | 0 _tuts/steps.json | 20 ++++ 4 files changed, 146 insertions(+) create mode 100644 _tuts/README.md create mode 100644 _tuts/starshippart-make-entity.diff create mode 100644 _tuts/starshippart-make-migration.diff create mode 100644 _tuts/steps.json diff --git a/_tuts/README.md b/_tuts/README.md new file mode 100644 index 0000000..5d0079d --- /dev/null +++ b/_tuts/README.md @@ -0,0 +1,5 @@ +# Hello there! + +The files in this directory cannot be modified directly: we use an internal tool +to manage them. If you find an issue with the code, you can open an issue on the +repository. In fact, that would be awesome :). diff --git a/_tuts/starshippart-make-entity.diff b/_tuts/starshippart-make-entity.diff new file mode 100644 index 0000000..3c7712d --- /dev/null +++ b/_tuts/starshippart-make-entity.diff @@ -0,0 +1,121 @@ +diff --git a/src/Entity/StarshipPart.php b/src/Entity/StarshipPart.php +new file mode 100644 +index 0000000..662df52 +--- /dev/null ++++ b/src/Entity/StarshipPart.php +@@ -0,0 +1,66 @@ ++id; ++ } ++ ++ public function getName(): ?string ++ { ++ return $this->name; ++ } ++ ++ public function setName(string $name): static ++ { ++ $this->name = $name; ++ ++ return $this; ++ } ++ ++ public function getPrice(): ?int ++ { ++ return $this->price; ++ } ++ ++ public function setPrice(int $price): static ++ { ++ $this->price = $price; ++ ++ return $this; ++ } ++ ++ public function getNotes(): ?string ++ { ++ return $this->notes; ++ } ++ ++ public function setNotes(?string $notes): static ++ { ++ $this->notes = $notes; ++ ++ return $this; ++ } ++} +diff --git a/src/Repository/StarshipPartRepository.php b/src/Repository/StarshipPartRepository.php +new file mode 100644 +index 0000000..7622388 +--- /dev/null ++++ b/src/Repository/StarshipPartRepository.php +@@ -0,0 +1,43 @@ ++ ++ */ ++class StarshipPartRepository extends ServiceEntityRepository ++{ ++ public function __construct(ManagerRegistry $registry) ++ { ++ parent::__construct($registry, StarshipPart::class); ++ } ++ ++// /** ++// * @return StarshipPart[] Returns an array of StarshipPart objects ++// */ ++// public function findByExampleField($value): array ++// { ++// return $this->createQueryBuilder('s') ++// ->andWhere('s.exampleField = :val') ++// ->setParameter('val', $value) ++// ->orderBy('s.id', 'ASC') ++// ->setMaxResults(10) ++// ->getQuery() ++// ->getResult() ++// ; ++// } ++ ++// public function findOneBySomeField($value): ?StarshipPart ++// { ++// return $this->createQueryBuilder('s') ++// ->andWhere('s.exampleField = :val') ++// ->setParameter('val', $value) ++// ->getQuery() ++// ->getOneOrNullResult() ++// ; ++// } ++} diff --git a/_tuts/starshippart-make-migration.diff b/_tuts/starshippart-make-migration.diff new file mode 100644 index 0000000..e69de29 diff --git a/_tuts/steps.json b/_tuts/steps.json new file mode 100644 index 0000000..68007f5 --- /dev/null +++ b/_tuts/steps.json @@ -0,0 +1,20 @@ +{ + "steps": [ + { + "id": "start", + "name": "start", + "description": null + }, + { + "id": "starshippart-make-entity", + "name": "StarshipPart: make:entity", + "description": null + }, + { + "id": "starshippart-make-migration", + "name": "StarshipPart: make:migration", + "description": null + } + ], + "sha": "3c7163b1e441bfa49f45e678cc43314cc70c6c38" +} \ No newline at end of file From 253d9e5a492ed883b863cd7c44eb76424dccb417 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Thu, 6 Mar 2025 10:42:21 -0500 Subject: [PATCH 013/181] tuts hero working... --- migrations/.gitignore | 0 migrations/Version20241111171351.php | 33 ----------------------- migrations/Version20241201203154.php | 38 -------------------------- migrations/Version20241201203519.php | 40 ---------------------------- 4 files changed, 111 deletions(-) delete mode 100644 migrations/.gitignore delete mode 100644 migrations/Version20241111171351.php delete mode 100644 migrations/Version20241201203154.php delete mode 100644 migrations/Version20241201203519.php diff --git a/migrations/.gitignore b/migrations/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/migrations/Version20241111171351.php b/migrations/Version20241111171351.php deleted file mode 100644 index b9fef4a..0000000 --- a/migrations/Version20241111171351.php +++ /dev/null @@ -1,33 +0,0 @@ -addSql('CREATE TABLE starship (id SERIAL NOT NULL, name VARCHAR(255) NOT NULL, class VARCHAR(255) NOT NULL, captain VARCHAR(255) NOT NULL, status VARCHAR(255) NOT NULL, arrived_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, PRIMARY KEY(id))'); - $this->addSql('COMMENT ON COLUMN starship.arrived_at IS \'(DC2Type:datetime_immutable)\''); - } - - public function down(Schema $schema): void - { - // this down() migration is auto-generated, please modify it to your needs - $this->addSql('CREATE SCHEMA public'); - $this->addSql('DROP TABLE starship'); - } -} diff --git a/migrations/Version20241201203154.php b/migrations/Version20241201203154.php deleted file mode 100644 index f96a406..0000000 --- a/migrations/Version20241201203154.php +++ /dev/null @@ -1,38 +0,0 @@ -addSql('ALTER TABLE starship ADD slug VARCHAR(255) DEFAULT NULL'); - $this->addSql('ALTER TABLE starship ADD created_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL'); - $this->addSql('ALTER TABLE starship ADD updated_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL'); - $this->addSql('COMMENT ON COLUMN starship.created_at IS \'(DC2Type:datetime_immutable)\''); - $this->addSql('COMMENT ON COLUMN starship.updated_at IS \'(DC2Type:datetime_immutable)\''); - } - - public function down(Schema $schema): void - { - // this down() migration is auto-generated, please modify it to your needs - $this->addSql('CREATE SCHEMA public'); - $this->addSql('ALTER TABLE starship DROP slug'); - $this->addSql('ALTER TABLE starship DROP created_at'); - $this->addSql('ALTER TABLE starship DROP updated_at'); - } -} diff --git a/migrations/Version20241201203519.php b/migrations/Version20241201203519.php deleted file mode 100644 index a325667..0000000 --- a/migrations/Version20241201203519.php +++ /dev/null @@ -1,40 +0,0 @@ -addSql('UPDATE starship SET slug = id, created_at = arrived_at, updated_at = arrived_at'); - - // this up() migration is auto-generated, please modify it to your needs - $this->addSql('ALTER TABLE starship ALTER slug SET NOT NULL'); - $this->addSql('ALTER TABLE starship ALTER created_at SET NOT NULL'); - $this->addSql('ALTER TABLE starship ALTER updated_at SET NOT NULL'); - $this->addSql('CREATE UNIQUE INDEX UNIQ_C414E64A989D9B62 ON starship (slug)'); - } - - public function down(Schema $schema): void - { - // this down() migration is auto-generated, please modify it to your needs - $this->addSql('CREATE SCHEMA public'); - $this->addSql('DROP INDEX UNIQ_C414E64A989D9B62'); - $this->addSql('ALTER TABLE starship ALTER slug DROP NOT NULL'); - $this->addSql('ALTER TABLE starship ALTER created_at DROP NOT NULL'); - $this->addSql('ALTER TABLE starship ALTER updated_at DROP NOT NULL'); - } -} From e14b8e666b091391d96f402a5921322bcf09c38a Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Thu, 6 Mar 2025 10:45:02 -0500 Subject: [PATCH 014/181] re-adding migrations/ dir --- migrations/.gitignore | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 migrations/.gitignore diff --git a/migrations/.gitignore b/migrations/.gitignore new file mode 100644 index 0000000..e69de29 From 5a0e1e0a6a751355c3c231556362ea49ec050e5f Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Fri, 7 Mar 2025 11:38:03 -0500 Subject: [PATCH 015/181] Through foundry relation steps --- _tuts/starshippart-add-relation.diff | 139 ++++++++++++++++++ .../starshippart-add-timestampableentity.diff | 57 +++++++ _tuts/starshippart-change-to-new.diff | 13 ++ _tuts/starshippart-create-in-fixtures.diff | 34 +++++ .../starshippart-createmany-in-fixtures.diff | 41 ++++++ _tuts/starshippart-make-factory.diff | 57 +++++++ _tuts/starshippart-make-migration.diff | 37 +++++ ...hippart-set-explicit-ship-in-fixtures.diff | 23 +++ ...starshippart-set-relation-in-fixtures.diff | 12 ++ ...hippart-set-ship-using-randomorcreate.diff | 12 ++ _tuts/starshippart-set-status-in-new.diff | 23 +++ _tuts/starshippart-tweak-factory.diff | 42 ++++++ _tuts/starshippart-use-createone.diff | 13 ++ _tuts/steps.json | 62 +++++++- 14 files changed, 564 insertions(+), 1 deletion(-) create mode 100644 _tuts/starshippart-add-relation.diff create mode 100644 _tuts/starshippart-add-timestampableentity.diff create mode 100644 _tuts/starshippart-change-to-new.diff create mode 100644 _tuts/starshippart-create-in-fixtures.diff create mode 100644 _tuts/starshippart-createmany-in-fixtures.diff create mode 100644 _tuts/starshippart-make-factory.diff create mode 100644 _tuts/starshippart-set-explicit-ship-in-fixtures.diff create mode 100644 _tuts/starshippart-set-relation-in-fixtures.diff create mode 100644 _tuts/starshippart-set-ship-using-randomorcreate.diff create mode 100644 _tuts/starshippart-set-status-in-new.diff create mode 100644 _tuts/starshippart-tweak-factory.diff create mode 100644 _tuts/starshippart-use-createone.diff diff --git a/_tuts/starshippart-add-relation.diff b/_tuts/starshippart-add-relation.diff new file mode 100644 index 0000000..23bdb40 --- /dev/null +++ b/_tuts/starshippart-add-relation.diff @@ -0,0 +1,139 @@ +diff --git a/migrations/Version20250306163930.php b/migrations/Version20250306163930.php +new file mode 100644 +index 0000000..5637a13 +--- /dev/null ++++ b/migrations/Version20250306163930.php +@@ -0,0 +1,35 @@ ++addSql('ALTER TABLE starship_part ADD starship_id INT NOT NULL'); ++ $this->addSql('ALTER TABLE starship_part ADD CONSTRAINT FK_41C447379B24DF5 FOREIGN KEY (starship_id) REFERENCES starship (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); ++ $this->addSql('CREATE INDEX IDX_41C447379B24DF5 ON starship_part (starship_id)'); ++ } ++ ++ public function down(Schema $schema): void ++ { ++ // this down() migration is auto-generated, please modify it to your needs ++ $this->addSql('ALTER TABLE starship_part DROP CONSTRAINT FK_41C447379B24DF5'); ++ $this->addSql('DROP INDEX IDX_41C447379B24DF5'); ++ $this->addSql('ALTER TABLE starship_part DROP starship_id'); ++ } ++} +diff --git a/src/Entity/Starship.php b/src/Entity/Starship.php +index cf67944..b29dfa4 100644 +--- a/src/Entity/Starship.php ++++ b/src/Entity/Starship.php +@@ -3,6 +3,8 @@ + namespace App\Entity; + + use App\Repository\StarshipRepository; ++use Doctrine\Common\Collections\ArrayCollection; ++use Doctrine\Common\Collections\Collection; + use Doctrine\ORM\Mapping as ORM; + use Gedmo\Mapping\Annotation\Slug; + use Gedmo\Mapping\Annotation\Timestampable; +@@ -42,6 +44,17 @@ class Starship + #[Timestampable(on: 'update')] + private ?\DateTimeImmutable $updatedAt = null; + ++ /** ++ * @var Collection ++ */ ++ #[ORM\OneToMany(targetEntity: StarshipPart::class, mappedBy: 'starship')] ++ private Collection $parts; ++ ++ public function __construct() ++ { ++ $this->parts = new ArrayCollection(); ++ } ++ + public function getId(): ?int + { + return $this->id; +@@ -164,4 +177,34 @@ class Starship + + return $this; + } ++ ++ /** ++ * @return Collection ++ */ ++ public function getParts(): Collection ++ { ++ return $this->parts; ++ } ++ ++ public function addPart(StarshipPart $part): static ++ { ++ if (!$this->parts->contains($part)) { ++ $this->parts->add($part); ++ $part->setStarship($this); ++ } ++ ++ return $this; ++ } ++ ++ public function removePart(StarshipPart $part): static ++ { ++ if ($this->parts->removeElement($part)) { ++ // set the owning side to null (unless already changed) ++ if ($part->getStarship() === $this) { ++ $part->setStarship(null); ++ } ++ } ++ ++ return $this; ++ } + } +diff --git a/src/Entity/StarshipPart.php b/src/Entity/StarshipPart.php +index c80f321..0cdf95c 100644 +--- a/src/Entity/StarshipPart.php ++++ b/src/Entity/StarshipPart.php +@@ -26,6 +26,10 @@ class StarshipPart + #[ORM\Column(type: Types::TEXT, nullable: true)] + private ?string $notes = null; + ++ #[ORM\ManyToOne(inversedBy: 'parts')] ++ #[ORM\JoinColumn(nullable: false)] ++ private ?Starship $starship = null; ++ + public function getId(): ?int + { + return $this->id; +@@ -66,4 +70,16 @@ class StarshipPart + + return $this; + } ++ ++ public function getStarship(): ?Starship ++ { ++ return $this->starship; ++ } ++ ++ public function setStarship(?Starship $starship): static ++ { ++ $this->starship = $starship; ++ ++ return $this; ++ } + } diff --git a/_tuts/starshippart-add-timestampableentity.diff b/_tuts/starshippart-add-timestampableentity.diff new file mode 100644 index 0000000..a49dd97 --- /dev/null +++ b/_tuts/starshippart-add-timestampableentity.diff @@ -0,0 +1,57 @@ +diff --git a/migrations/Version20250306160247.php b/migrations/Version20250306160247.php +new file mode 100644 +index 0000000..39aaa7b +--- /dev/null ++++ b/migrations/Version20250306160247.php +@@ -0,0 +1,33 @@ ++addSql('ALTER TABLE starship_part ADD created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL'); ++ $this->addSql('ALTER TABLE starship_part ADD updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL'); ++ } ++ ++ public function down(Schema $schema): void ++ { ++ // this down() migration is auto-generated, please modify it to your needs ++ $this->addSql('ALTER TABLE starship_part DROP created_at'); ++ $this->addSql('ALTER TABLE starship_part DROP updated_at'); ++ } ++} +diff --git a/src/Entity/StarshipPart.php b/src/Entity/StarshipPart.php +index 662df52..c80f321 100644 +--- a/src/Entity/StarshipPart.php ++++ b/src/Entity/StarshipPart.php +@@ -5,10 +5,13 @@ namespace App\Entity; + use App\Repository\StarshipPartRepository; + use Doctrine\DBAL\Types\Types; + use Doctrine\ORM\Mapping as ORM; ++use Gedmo\Timestampable\Traits\TimestampableEntity; + + #[ORM\Entity(repositoryClass: StarshipPartRepository::class)] + class StarshipPart + { ++ use TimestampableEntity; ++ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column] diff --git a/_tuts/starshippart-change-to-new.diff b/_tuts/starshippart-change-to-new.diff new file mode 100644 index 0000000..55cdeab --- /dev/null +++ b/_tuts/starshippart-change-to-new.diff @@ -0,0 +1,13 @@ +diff --git a/src/Factory/StarshipPartFactory.php b/src/Factory/StarshipPartFactory.php +index f4249c5..4922221 100644 +--- a/src/Factory/StarshipPartFactory.php ++++ b/src/Factory/StarshipPartFactory.php +@@ -51,7 +51,7 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory + 'name' => $randomPart[0], + 'notes' => $randomPart[1], + 'price' => self::faker()->randomNumber(5), +- 'starship' => StarshipFactory::createOne(), ++ 'starship' => StarshipFactory::new(), + ]; + } + diff --git a/_tuts/starshippart-create-in-fixtures.diff b/_tuts/starshippart-create-in-fixtures.diff new file mode 100644 index 0000000..7555661 --- /dev/null +++ b/_tuts/starshippart-create-in-fixtures.diff @@ -0,0 +1,34 @@ +diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php +index db4fd60..3705e64 100644 +--- a/src/DataFixtures/AppFixtures.php ++++ b/src/DataFixtures/AppFixtures.php +@@ -2,6 +2,8 @@ + + namespace App\DataFixtures; + ++use App\Entity\Starship; ++use App\Entity\StarshipPart; + use App\Entity\StarshipStatusEnum; + use App\Factory\StarshipFactory; + use Doctrine\Bundle\FixturesBundle\Fixture; +@@ -19,6 +21,20 @@ class AppFixtures extends Fixture + 'arrivedAt' => new \DateTimeImmutable('-1 day'), + ]); + ++ $starship = new Starship(); ++ $starship->setName('USS Taco Tuesday'); ++ $starship->setClass('Tex-Mex'); ++ $starship->checkIn(); ++ $starship->setCaptain('James T. Nacho'); ++ $manager->persist($starship); ++ ++ $part = new StarshipPart(); ++ $part->setName('spoiler'); ++ $part->setNotes('There\'s no air drag in space, but it looks cool.'); ++ $part->setPrice(500); ++ $manager->persist($part); ++ $manager->flush(); ++ + StarshipFactory::createOne([ + 'name' => 'USS Espresso (NCC-1234-C)', + 'class' => 'Latte', diff --git a/_tuts/starshippart-createmany-in-fixtures.diff b/_tuts/starshippart-createmany-in-fixtures.diff new file mode 100644 index 0000000..74e2c76 --- /dev/null +++ b/_tuts/starshippart-createmany-in-fixtures.diff @@ -0,0 +1,41 @@ +diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php +index bf63256..354e723 100644 +--- a/src/DataFixtures/AppFixtures.php ++++ b/src/DataFixtures/AppFixtures.php +@@ -6,6 +6,7 @@ use App\Entity\Starship; + use App\Entity\StarshipPart; + use App\Entity\StarshipStatusEnum; + use App\Factory\StarshipFactory; ++use App\Factory\StarshipPartFactory; + use Doctrine\Bundle\FixturesBundle\Fixture; + use Doctrine\Persistence\ObjectManager; + +@@ -21,21 +22,6 @@ class AppFixtures extends Fixture + 'arrivedAt' => new \DateTimeImmutable('-1 day'), + ]); + +- $starship = new Starship(); +- $starship->setName('USS Taco Tuesday'); +- $starship->setClass('Tex-Mex'); +- $starship->checkIn(); +- $starship->setCaptain('James T. Nacho'); +- $manager->persist($starship); +- +- $part = new StarshipPart(); +- $part->setName('spoiler'); +- $part->setNotes('There\'s no air drag in space, but it looks cool.'); +- $part->setPrice(500); +- $manager->persist($part); +- $part->setStarship($starship); +- $manager->flush(); +- + StarshipFactory::createOne([ + 'name' => 'USS Espresso (NCC-1234-C)', + 'class' => 'Latte', +@@ -53,5 +39,6 @@ class AppFixtures extends Fixture + ]); + + StarshipFactory::createMany(20); ++ StarshipPartFactory::createMany(100); + } + } diff --git a/_tuts/starshippart-make-factory.diff b/_tuts/starshippart-make-factory.diff new file mode 100644 index 0000000..d2f953b --- /dev/null +++ b/_tuts/starshippart-make-factory.diff @@ -0,0 +1,57 @@ +diff --git a/src/Factory/StarshipPartFactory.php b/src/Factory/StarshipPartFactory.php +new file mode 100644 +index 0000000..00f6e15 +--- /dev/null ++++ b/src/Factory/StarshipPartFactory.php +@@ -0,0 +1,51 @@ ++ ++ */ ++final class StarshipPartFactory extends PersistentProxyObjectFactory ++{ ++ /** ++ * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services ++ * ++ * @todo inject services if required ++ */ ++ public function __construct() ++ { ++ } ++ ++ public static function class(): string ++ { ++ return StarshipPart::class; ++ } ++ ++ /** ++ * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories ++ * ++ * @todo add your default values here ++ */ ++ protected function defaults(): array|callable ++ { ++ return [ ++ 'createdAt' => self::faker()->dateTime(), ++ 'name' => self::faker()->text(255), ++ 'price' => self::faker()->randomNumber(), ++ 'updatedAt' => self::faker()->dateTime(), ++ ]; ++ } ++ ++ /** ++ * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization ++ */ ++ protected function initialize(): static ++ { ++ return $this ++ // ->afterInstantiate(function(StarshipPart $starshipPart): void {}) ++ ; ++ } ++} diff --git a/_tuts/starshippart-make-migration.diff b/_tuts/starshippart-make-migration.diff index e69de29..04a4244 100644 --- a/_tuts/starshippart-make-migration.diff +++ b/_tuts/starshippart-make-migration.diff @@ -0,0 +1,37 @@ +diff --git a/migrations/Version20250306155858.php b/migrations/Version20250306155858.php +new file mode 100644 +index 0000000..ed70a85 +--- /dev/null ++++ b/migrations/Version20250306155858.php +@@ -0,0 +1,31 @@ ++addSql('CREATE TABLE starship_part (id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, name VARCHAR(255) NOT NULL, price INT NOT NULL, notes TEXT DEFAULT NULL, PRIMARY KEY(id))'); ++ } ++ ++ public function down(Schema $schema): void ++ { ++ // this down() migration is auto-generated, please modify it to your needs ++ $this->addSql('DROP TABLE starship_part'); ++ } ++} diff --git a/_tuts/starshippart-set-explicit-ship-in-fixtures.diff b/_tuts/starshippart-set-explicit-ship-in-fixtures.diff new file mode 100644 index 0000000..91c2e88 --- /dev/null +++ b/_tuts/starshippart-set-explicit-ship-in-fixtures.diff @@ -0,0 +1,23 @@ +diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php +index 354e723..a793a77 100644 +--- a/src/DataFixtures/AppFixtures.php ++++ b/src/DataFixtures/AppFixtures.php +@@ -30,7 +30,7 @@ class AppFixtures extends Fixture + 'arrivedAt' => new \DateTimeImmutable('-1 week'), + ]); + +- StarshipFactory::createOne([ ++ $ship = StarshipFactory::createOne([ + 'name' => 'USS Wanderlust (NCC-2024-W)', + 'class' => 'Delta Tourist', + 'captain' => 'Kathryn Journeyway', +@@ -39,6 +39,8 @@ class AppFixtures extends Fixture + ]); + + StarshipFactory::createMany(20); +- StarshipPartFactory::createMany(100); ++ StarshipPartFactory::createMany(100, [ ++ 'starship' => $ship, ++ ]); + } + } diff --git a/_tuts/starshippart-set-relation-in-fixtures.diff b/_tuts/starshippart-set-relation-in-fixtures.diff new file mode 100644 index 0000000..387b6f7 --- /dev/null +++ b/_tuts/starshippart-set-relation-in-fixtures.diff @@ -0,0 +1,12 @@ +diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php +index 3705e64..bf63256 100644 +--- a/src/DataFixtures/AppFixtures.php ++++ b/src/DataFixtures/AppFixtures.php +@@ -33,6 +33,7 @@ class AppFixtures extends Fixture + $part->setNotes('There\'s no air drag in space, but it looks cool.'); + $part->setPrice(500); + $manager->persist($part); ++ $part->setStarship($starship); + $manager->flush(); + + StarshipFactory::createOne([ diff --git a/_tuts/starshippart-set-ship-using-randomorcreate.diff b/_tuts/starshippart-set-ship-using-randomorcreate.diff new file mode 100644 index 0000000..e22f47f --- /dev/null +++ b/_tuts/starshippart-set-ship-using-randomorcreate.diff @@ -0,0 +1,12 @@ +diff --git a/src/Factory/StarshipPartFactory.php b/src/Factory/StarshipPartFactory.php +index 8c1da12..df19810 100644 +--- a/src/Factory/StarshipPartFactory.php ++++ b/src/Factory/StarshipPartFactory.php +@@ -51,6 +51,7 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory + 'name' => $randomPart[0], + 'notes' => $randomPart[1], + 'price' => self::faker()->randomNumber(5), ++ 'starship' => StarshipFactory::randomOrCreate() + ]; + } + diff --git a/_tuts/starshippart-set-status-in-new.diff b/_tuts/starshippart-set-status-in-new.diff new file mode 100644 index 0000000..27437be --- /dev/null +++ b/_tuts/starshippart-set-status-in-new.diff @@ -0,0 +1,23 @@ +diff --git a/src/Factory/StarshipPartFactory.php b/src/Factory/StarshipPartFactory.php +index 4922221..e2a782e 100644 +--- a/src/Factory/StarshipPartFactory.php ++++ b/src/Factory/StarshipPartFactory.php +@@ -3,6 +3,7 @@ + namespace App\Factory; + + use App\Entity\StarshipPart; ++use App\Entity\StarshipStatusEnum; + use Zenstruck\Foundry\Persistence\PersistentProxyObjectFactory; + + /** +@@ -51,7 +52,9 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory + 'name' => $randomPart[0], + 'notes' => $randomPart[1], + 'price' => self::faker()->randomNumber(5), +- 'starship' => StarshipFactory::new(), ++ 'starship' => StarshipFactory::new([ ++ 'status' => StarshipStatusEnum::COMPLETED, ++ ]), + ]; + } + diff --git a/_tuts/starshippart-tweak-factory.diff b/_tuts/starshippart-tweak-factory.diff new file mode 100644 index 0000000..3edd105 --- /dev/null +++ b/_tuts/starshippart-tweak-factory.diff @@ -0,0 +1,42 @@ +diff --git a/src/Factory/StarshipPartFactory.php b/src/Factory/StarshipPartFactory.php +index 00f6e15..8c1da12 100644 +--- a/src/Factory/StarshipPartFactory.php ++++ b/src/Factory/StarshipPartFactory.php +@@ -10,6 +10,19 @@ use Zenstruck\Foundry\Persistence\PersistentProxyObjectFactory; + */ + final class StarshipPartFactory extends PersistentProxyObjectFactory + { ++ private static array $partIdeas = [ ++ 'warp core' => 'looks cool AND zoom', ++ 'shield generator' => 'in case you run into any Borg', ++ 'captain\'s chair' => 'just slightly more comfortable than the others', ++ 'fuzzy dice' => 'obviously', ++ 'photon torpedoes' => 'for when the fuzzy dice don\'t work', ++ 'holodeck' => 'parental controls? No way!', ++ 'Tactical Whoopee Cushion Array' => 'can\'t beat them? Embarrass them!', ++ 'Temporal Seat Warmers' => 'warm your seat before you sit down', ++ 'Food Replicator' => 'Earl Grey, hot', ++ 'Self-Destruct Button Cover' => 'for when you have a cat', ++ 'Redshirt Dispenser' => 'Instantly replenishes expendable crew members.', ++ ]; + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services + * +@@ -31,11 +44,13 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory + */ + protected function defaults(): array|callable + { ++ $randomPartKey = self::faker()->randomKey(self::$partIdeas); ++ $randomPart = [$randomPartKey, self::$partIdeas[$randomPartKey]]; ++ + return [ +- 'createdAt' => self::faker()->dateTime(), +- 'name' => self::faker()->text(255), +- 'price' => self::faker()->randomNumber(), +- 'updatedAt' => self::faker()->dateTime(), ++ 'name' => $randomPart[0], ++ 'notes' => $randomPart[1], ++ 'price' => self::faker()->randomNumber(5), + ]; + } + diff --git a/_tuts/starshippart-use-createone.diff b/_tuts/starshippart-use-createone.diff new file mode 100644 index 0000000..f82ac74 --- /dev/null +++ b/_tuts/starshippart-use-createone.diff @@ -0,0 +1,13 @@ +diff --git a/src/Factory/StarshipPartFactory.php b/src/Factory/StarshipPartFactory.php +index df19810..f4249c5 100644 +--- a/src/Factory/StarshipPartFactory.php ++++ b/src/Factory/StarshipPartFactory.php +@@ -51,7 +51,7 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory + 'name' => $randomPart[0], + 'notes' => $randomPart[1], + 'price' => self::faker()->randomNumber(5), +- 'starship' => StarshipFactory::randomOrCreate() ++ 'starship' => StarshipFactory::createOne(), + ]; + } + diff --git a/_tuts/steps.json b/_tuts/steps.json index 68007f5..62b9968 100644 --- a/_tuts/steps.json +++ b/_tuts/steps.json @@ -14,7 +14,67 @@ "id": "starshippart-make-migration", "name": "StarshipPart: make:migration", "description": null + }, + { + "id": "starshippart-add-timestampableentity", + "name": "StarshipPart: Add TimestampableEntity", + "description": null + }, + { + "id": "starshippart-make-factory", + "name": "StarshipPart: make:factory", + "description": null + }, + { + "id": "starshippart-tweak-factory", + "name": "StarshipPart: tweak factory", + "description": null + }, + { + "id": "starshippart-add-relation", + "name": "StarshipPart: add relation", + "description": null + }, + { + "id": "starshippart-create-in-fixtures", + "name": "StarshipPart: create in fixtures", + "description": null + }, + { + "id": "starshippart-set-relation-in-fixtures", + "name": "StarshipPart: set relation in fixtures", + "description": null + }, + { + "id": "starshippart-createmany-in-fixtures", + "name": "StarshipPart: createMany() in fixtures", + "description": null + }, + { + "id": "starshippart-set-ship-using-randomorcreate", + "name": "StarshipPart: set ship using randomOrCreate", + "description": null + }, + { + "id": "starshippart-set-explicit-ship-in-fixtures", + "name": "StarshipPart: Set explicit ship in fixtures", + "description": null + }, + { + "id": "starshippart-use-createone", + "name": "StarshipPart: use createOne()", + "description": null + }, + { + "id": "starshippart-change-to-new", + "name": "StarshipPart: Change to new()", + "description": null + }, + { + "id": "starshippart-set-status-in-new", + "name": "StarshipPart: Set status in new()", + "description": null } ], - "sha": "3c7163b1e441bfa49f45e678cc43314cc70c6c38" + "sha": "e14b8e666b091391d96f402a5921322bcf09c38a" } \ No newline at end of file From 0926ae8820bd1ac2372318a0eb95a2194ab44794 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Fri, 7 Mar 2025 12:18:46 -0500 Subject: [PATCH 016/181] upgrading tailwind config to v4 --- assets/styles/app.css | 4 +--- tailwind.config.js | 11 ----------- 2 files changed, 1 insertion(+), 14 deletions(-) delete mode 100644 tailwind.config.js diff --git a/assets/styles/app.css b/assets/styles/app.css index b5c61c9..f1d8c73 100644 --- a/assets/styles/app.css +++ b/assets/styles/app.css @@ -1,3 +1 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; +@import "https://github.com/tailwindcss"; diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index bb226fb..0000000 --- a/tailwind.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - "./assets/**/*.js", - "./templates/**/*.html.twig", - ], - theme: { - extend: {}, - }, - plugins: [], -} From c38fa3dfe926f3665787c90c1b35d4e99933d169 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Sat, 8 Mar 2025 07:39:32 -0500 Subject: [PATCH 017/181] Adding hardcoded parts to ship show --- templates/starship/show.html.twig | 90 +++++++++++++++++++++---------- 1 file changed, 62 insertions(+), 28 deletions(-) diff --git a/templates/starship/show.html.twig b/templates/starship/show.html.twig index d767faf..7083434 100644 --- a/templates/starship/show.html.twig +++ b/templates/starship/show.html.twig @@ -3,40 +3,74 @@ {% block title %}{{ ship.name }}{% endblock %} {% block body %} - -
-
- purple ship launching + -
-
-
-
-
-

{{ ship.statusString }}

-
+
+
+ purple ship launching +
+
+
+
+
+
+

{{ ship.statusString }}

+
-

- {{ ship.name }} -

-

Spaceship Captain

-

{{ ship.captain }}

+

+ {{ ship.name }} +

+

+ Spaceship Captain +

+

{{ ship.captain }}

-

Class

-

{{ ship.class }}

+

+ Class +

+

{{ ship.class }}

-

Ship Status

-

30,000 lys to next service

+

+ Ship Status +

+

30,000 lys to next + service +

-

Arrived At

-

{{ ship.arrivedAt|ago }}

+

+ Arrived At +

+

{{ ship.arrivedAt|ago }}

+ +

+ Parts +

+
    +
  • + + Steering Wheel + + + Honk honk + +
  • +
+
-
{% endblock %} From 9af13e10e536ebdcbcd231e959946a7b292be6d4 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Sun, 9 Mar 2025 10:57:05 -0400 Subject: [PATCH 018/181] Using TimestampableEntity --- src/Entity/Starship.php | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/Entity/Starship.php b/src/Entity/Starship.php index cf67944..a09295e 100644 --- a/src/Entity/Starship.php +++ b/src/Entity/Starship.php @@ -6,10 +6,13 @@ use Doctrine\ORM\Mapping as ORM; use Gedmo\Mapping\Annotation\Slug; use Gedmo\Mapping\Annotation\Timestampable; +use Gedmo\Timestampable\Traits\TimestampableEntity; #[ORM\Entity(repositoryClass: StarshipRepository::class)] class Starship { + use TimestampableEntity; + #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] @@ -34,14 +37,6 @@ class Starship #[Slug(fields: ['name'])] private ?string $slug = null; - #[ORM\Column] - #[Timestampable(on: 'create')] - private ?\DateTimeImmutable $createdAt = null; - - #[ORM\Column] - #[Timestampable(on: 'update')] - private ?\DateTimeImmutable $updatedAt = null; - public function getId(): ?int { return $this->id; From a436a969b67db1b522fb710cda7d0a45a12ed05f Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Sun, 9 Mar 2025 11:21:56 -0400 Subject: [PATCH 019/181] tuts hero working... --- src/Entity/Starship.php | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/src/Entity/Starship.php b/src/Entity/Starship.php index a09295e..323ca40 100644 --- a/src/Entity/Starship.php +++ b/src/Entity/Starship.php @@ -128,30 +128,6 @@ public function setSlug(?string $slug): static return $this; } - public function getCreatedAt(): ?\DateTimeImmutable - { - return $this->createdAt; - } - - public function setCreatedAt(?\DateTimeImmutable $createdAt): static - { - $this->createdAt = $createdAt; - - return $this; - } - - public function getUpdatedAt(): ?\DateTimeImmutable - { - return $this->updatedAt; - } - - public function setUpdatedAt(?\DateTimeImmutable $updatedAt): static - { - $this->updatedAt = $updatedAt; - - return $this; - } - public function checkIn(?\DateTimeImmutable $arrivedAt = null): static { $this->arrivedAt = $arrivedAt ?? new \DateTimeImmutable('now'); From d11a72830699839472c4483714b397080acb526c Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Sun, 9 Mar 2025 11:22:35 -0400 Subject: [PATCH 020/181] Through OwningInverse steps --- _tuts/fetchingparts-loop-and-dump.diff | 17 ++++++ _tuts/fetchingparts-use-findby.diff | 24 ++++++++ _tuts/fetchingparts-use-getparts.diff | 13 +++++ ...e-create-ship-and-2-parts-in-fixtures.diff | 22 +++++++ _tuts/owninginverse-remove-tmp-code.diff | 33 +++++++++++ _tuts/owninginverse-set-inverse-side.diff | 14 +++++ _tuts/owninginverse-use-real.diff | 13 +++++ _tuts/starshippart-add-relation.diff | 10 ++-- _tuts/starshippart-change-to-new.diff | 4 +- _tuts/starshippart-remove-ship-override.diff | 27 +++++++++ ...hippart-set-ship-using-randomorcreate.diff | 14 ++++- _tuts/starshippart-set-status-in-new.diff | 14 +---- _tuts/starshippart-use-createone.diff | 6 +- _tuts/steps.json | 57 ++++++++++++++++++- _tuts/template-count-the-parts.diff | 25 ++++++++ _tuts/template-loop-over-ship-parts.diff | 25 ++++++++ _tuts/template-rendering-parts-variable.diff | 49 ++++++++++++++++ 17 files changed, 342 insertions(+), 25 deletions(-) create mode 100644 _tuts/fetchingparts-loop-and-dump.diff create mode 100644 _tuts/fetchingparts-use-findby.diff create mode 100644 _tuts/fetchingparts-use-getparts.diff create mode 100644 _tuts/owninginverse-create-ship-and-2-parts-in-fixtures.diff create mode 100644 _tuts/owninginverse-remove-tmp-code.diff create mode 100644 _tuts/owninginverse-set-inverse-side.diff create mode 100644 _tuts/owninginverse-use-real.diff create mode 100644 _tuts/starshippart-remove-ship-override.diff create mode 100644 _tuts/template-count-the-parts.diff create mode 100644 _tuts/template-loop-over-ship-parts.diff create mode 100644 _tuts/template-rendering-parts-variable.diff diff --git a/_tuts/fetchingparts-loop-and-dump.diff b/_tuts/fetchingparts-loop-and-dump.diff new file mode 100644 index 0000000..b086a73 --- /dev/null +++ b/_tuts/fetchingparts-loop-and-dump.diff @@ -0,0 +1,17 @@ +diff --git a/src/Controller/StarshipController.php b/src/Controller/StarshipController.php +index 45e844c..79579d7 100644 +--- a/src/Controller/StarshipController.php ++++ b/src/Controller/StarshipController.php +@@ -19,7 +19,11 @@ class StarshipController extends AbstractController + StarshipPartRepository $partRepository, + ): Response { + $parts = $partRepository->findBy(['starship' => $ship]); +- dd($ship->getParts()); ++ ++ foreach ($parts as $part) { ++ dump($part); ++ } ++ + return $this->render('starship/show.html.twig', [ + 'ship' => $ship, + ]); diff --git a/_tuts/fetchingparts-use-findby.diff b/_tuts/fetchingparts-use-findby.diff new file mode 100644 index 0000000..5f03f12 --- /dev/null +++ b/_tuts/fetchingparts-use-findby.diff @@ -0,0 +1,24 @@ +diff --git a/src/Controller/StarshipController.php b/src/Controller/StarshipController.php +index cada764..c9f0af3 100644 +--- a/src/Controller/StarshipController.php ++++ b/src/Controller/StarshipController.php +@@ -3,6 +3,8 @@ + namespace App\Controller; + + use App\Entity\Starship; ++use App\Repository\StarshipPartRepository; ++use App\Repository\StarshipRepository; + use Symfony\Bridge\Doctrine\Attribute\MapEntity; + use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; + use Symfony\Component\HttpFoundation\Response; +@@ -14,7 +16,10 @@ class StarshipController extends AbstractController + public function show( + #[MapEntity(mapping: ['slug' => 'slug'])] + Starship $ship, ++ StarshipPartRepository $partRepository, + ): Response { ++ $parts = $partRepository->findBy(['starship' => $ship]); ++ dd($parts); + return $this->render('starship/show.html.twig', [ + 'ship' => $ship, + ]); diff --git a/_tuts/fetchingparts-use-getparts.diff b/_tuts/fetchingparts-use-getparts.diff new file mode 100644 index 0000000..5a88bf7 --- /dev/null +++ b/_tuts/fetchingparts-use-getparts.diff @@ -0,0 +1,13 @@ +diff --git a/src/Controller/StarshipController.php b/src/Controller/StarshipController.php +index c9f0af3..45e844c 100644 +--- a/src/Controller/StarshipController.php ++++ b/src/Controller/StarshipController.php +@@ -19,7 +19,7 @@ class StarshipController extends AbstractController + StarshipPartRepository $partRepository, + ): Response { + $parts = $partRepository->findBy(['starship' => $ship]); +- dd($parts); ++ dd($ship->getParts()); + return $this->render('starship/show.html.twig', [ + 'ship' => $ship, + ]); diff --git a/_tuts/owninginverse-create-ship-and-2-parts-in-fixtures.diff b/_tuts/owninginverse-create-ship-and-2-parts-in-fixtures.diff new file mode 100644 index 0000000..8d68da4 --- /dev/null +++ b/_tuts/owninginverse-create-ship-and-2-parts-in-fixtures.diff @@ -0,0 +1,22 @@ +diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php +index ef1da9d..cb16013 100644 +--- a/src/DataFixtures/AppFixtures.php ++++ b/src/DataFixtures/AppFixtures.php +@@ -13,6 +13,17 @@ class AppFixtures extends Fixture + { + public function load(ObjectManager $manager): void + { ++ $starship = StarshipFactory::createOne(); ++ $part1 = new StarshipPart(); ++ $part1->setName('Warp Core'); ++ $part1->setPrice(1000); ++ $part2 = new StarshipPart(); ++ $part2->setName('Phaser Array'); ++ $part2->setPrice(500); ++ $manager->persist($part1); ++ $manager->persist($part2); ++ ++ $manager->flush(); + StarshipFactory::createOne([ + 'name' => 'USS LeafyCruiser (NCC-0001)', + 'class' => 'Garden', diff --git a/_tuts/owninginverse-remove-tmp-code.diff b/_tuts/owninginverse-remove-tmp-code.diff new file mode 100644 index 0000000..d03aa25 --- /dev/null +++ b/_tuts/owninginverse-remove-tmp-code.diff @@ -0,0 +1,33 @@ +diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php +index 1bd2f25..a6f8c7e 100644 +--- a/src/DataFixtures/AppFixtures.php ++++ b/src/DataFixtures/AppFixtures.php +@@ -2,7 +2,6 @@ + + namespace App\DataFixtures; + +-use App\Entity\StarshipPart; + use App\Entity\StarshipStatusEnum; + use App\Factory\StarshipFactory; + use App\Factory\StarshipPartFactory; +@@ -13,20 +12,6 @@ class AppFixtures extends Fixture + { + public function load(ObjectManager $manager): void + { +- $starship = StarshipFactory::createOne()->_real(); +- $part1 = new StarshipPart(); +- $part1->setName('Warp Core'); +- $part1->setPrice(1000); +- $part2 = new StarshipPart(); +- $part2->setName('Phaser Array'); +- $part2->setPrice(500); +- $manager->persist($part1); +- $manager->persist($part2); +- +- $starship->addPart($part1); +- $starship->addPart($part2); +- +- $manager->flush(); + StarshipFactory::createOne([ + 'name' => 'USS LeafyCruiser (NCC-0001)', + 'class' => 'Garden', diff --git a/_tuts/owninginverse-set-inverse-side.diff b/_tuts/owninginverse-set-inverse-side.diff new file mode 100644 index 0000000..941eb9e --- /dev/null +++ b/_tuts/owninginverse-set-inverse-side.diff @@ -0,0 +1,14 @@ +diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php +index 1176afa..1bd2f25 100644 +--- a/src/DataFixtures/AppFixtures.php ++++ b/src/DataFixtures/AppFixtures.php +@@ -23,6 +23,9 @@ class AppFixtures extends Fixture + $manager->persist($part1); + $manager->persist($part2); + ++ $starship->addPart($part1); ++ $starship->addPart($part2); ++ + $manager->flush(); + StarshipFactory::createOne([ + 'name' => 'USS LeafyCruiser (NCC-0001)', diff --git a/_tuts/owninginverse-use-real.diff b/_tuts/owninginverse-use-real.diff new file mode 100644 index 0000000..c6b9dd0 --- /dev/null +++ b/_tuts/owninginverse-use-real.diff @@ -0,0 +1,13 @@ +diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php +index cb16013..1176afa 100644 +--- a/src/DataFixtures/AppFixtures.php ++++ b/src/DataFixtures/AppFixtures.php +@@ -13,7 +13,7 @@ class AppFixtures extends Fixture + { + public function load(ObjectManager $manager): void + { +- $starship = StarshipFactory::createOne(); ++ $starship = StarshipFactory::createOne()->_real(); + $part1 = new StarshipPart(); + $part1->setName('Warp Core'); + $part1->setPrice(1000); diff --git a/_tuts/starshippart-add-relation.diff b/_tuts/starshippart-add-relation.diff index 23bdb40..b3702be 100644 --- a/_tuts/starshippart-add-relation.diff +++ b/_tuts/starshippart-add-relation.diff @@ -40,7 +40,7 @@ index 0000000..5637a13 + } +} diff --git a/src/Entity/Starship.php b/src/Entity/Starship.php -index cf67944..b29dfa4 100644 +index 323ca40..d150913 100644 --- a/src/Entity/Starship.php +++ b/src/Entity/Starship.php @@ -3,6 +3,8 @@ @@ -52,9 +52,9 @@ index cf67944..b29dfa4 100644 use Doctrine\ORM\Mapping as ORM; use Gedmo\Mapping\Annotation\Slug; use Gedmo\Mapping\Annotation\Timestampable; -@@ -42,6 +44,17 @@ class Starship - #[Timestampable(on: 'update')] - private ?\DateTimeImmutable $updatedAt = null; +@@ -37,6 +39,17 @@ class Starship + #[Slug(fields: ['name'])] + private ?string $slug = null; + /** + * @var Collection @@ -70,7 +70,7 @@ index cf67944..b29dfa4 100644 public function getId(): ?int { return $this->id; -@@ -164,4 +177,34 @@ class Starship +@@ -135,4 +148,34 @@ class Starship return $this; } diff --git a/_tuts/starshippart-change-to-new.diff b/_tuts/starshippart-change-to-new.diff index 55cdeab..5ec51ec 100644 --- a/_tuts/starshippart-change-to-new.diff +++ b/_tuts/starshippart-change-to-new.diff @@ -1,8 +1,8 @@ diff --git a/src/Factory/StarshipPartFactory.php b/src/Factory/StarshipPartFactory.php -index f4249c5..4922221 100644 +index ec03c87..44c4fb8 100644 --- a/src/Factory/StarshipPartFactory.php +++ b/src/Factory/StarshipPartFactory.php -@@ -51,7 +51,7 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory +@@ -52,7 +52,7 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory 'name' => $randomPart[0], 'notes' => $randomPart[1], 'price' => self::faker()->randomNumber(5), diff --git a/_tuts/starshippart-remove-ship-override.diff b/_tuts/starshippart-remove-ship-override.diff new file mode 100644 index 0000000..ffc72ce --- /dev/null +++ b/_tuts/starshippart-remove-ship-override.diff @@ -0,0 +1,27 @@ +diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php +index a793a77..55ac651 100644 +--- a/src/DataFixtures/AppFixtures.php ++++ b/src/DataFixtures/AppFixtures.php +@@ -39,8 +39,6 @@ class AppFixtures extends Fixture + ]); + + StarshipFactory::createMany(20); +- StarshipPartFactory::createMany(100, [ +- 'starship' => $ship, +- ]); ++ StarshipPartFactory::createMany(100); + } + } +diff --git a/src/Factory/StarshipPartFactory.php b/src/Factory/StarshipPartFactory.php +index 02fc5f5..67d4275 100644 +--- a/src/Factory/StarshipPartFactory.php ++++ b/src/Factory/StarshipPartFactory.php +@@ -52,7 +52,7 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory + 'name' => $randomPart[0], + 'notes' => $randomPart[1], + 'price' => self::faker()->randomNumber(5), +- 'starship' => StarshipFactory::new([ ++ 'starship' => StarshipFactory::randomOrCreate([ + 'status' => StarshipStatusEnum::IN_PROGRESS, + ]), + ]; diff --git a/_tuts/starshippart-set-ship-using-randomorcreate.diff b/_tuts/starshippart-set-ship-using-randomorcreate.diff index e22f47f..afc0674 100644 --- a/_tuts/starshippart-set-ship-using-randomorcreate.diff +++ b/_tuts/starshippart-set-ship-using-randomorcreate.diff @@ -1,12 +1,20 @@ diff --git a/src/Factory/StarshipPartFactory.php b/src/Factory/StarshipPartFactory.php -index 8c1da12..df19810 100644 +index 8c1da12..1e035f0 100644 --- a/src/Factory/StarshipPartFactory.php +++ b/src/Factory/StarshipPartFactory.php -@@ -51,6 +51,7 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory +@@ -3,6 +3,7 @@ + namespace App\Factory; + + use App\Entity\StarshipPart; ++use App\Entity\StarshipStatusEnum; + use Zenstruck\Foundry\Persistence\PersistentProxyObjectFactory; + + /** +@@ -51,6 +52,7 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory 'name' => $randomPart[0], 'notes' => $randomPart[1], 'price' => self::faker()->randomNumber(5), -+ 'starship' => StarshipFactory::randomOrCreate() ++ 'starship' => StarshipFactory::randomOrCreate(['status' => StarshipStatusEnum::IN_PROGRESS]), ]; } diff --git a/_tuts/starshippart-set-status-in-new.diff b/_tuts/starshippart-set-status-in-new.diff index 27437be..bac8fd2 100644 --- a/_tuts/starshippart-set-status-in-new.diff +++ b/_tuts/starshippart-set-status-in-new.diff @@ -1,22 +1,14 @@ diff --git a/src/Factory/StarshipPartFactory.php b/src/Factory/StarshipPartFactory.php -index 4922221..e2a782e 100644 +index 44c4fb8..02fc5f5 100644 --- a/src/Factory/StarshipPartFactory.php +++ b/src/Factory/StarshipPartFactory.php -@@ -3,6 +3,7 @@ - namespace App\Factory; - - use App\Entity\StarshipPart; -+use App\Entity\StarshipStatusEnum; - use Zenstruck\Foundry\Persistence\PersistentProxyObjectFactory; - - /** -@@ -51,7 +52,9 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory +@@ -52,7 +52,9 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory 'name' => $randomPart[0], 'notes' => $randomPart[1], 'price' => self::faker()->randomNumber(5), - 'starship' => StarshipFactory::new(), + 'starship' => StarshipFactory::new([ -+ 'status' => StarshipStatusEnum::COMPLETED, ++ 'status' => StarshipStatusEnum::IN_PROGRESS, + ]), ]; } diff --git a/_tuts/starshippart-use-createone.diff b/_tuts/starshippart-use-createone.diff index f82ac74..7fce368 100644 --- a/_tuts/starshippart-use-createone.diff +++ b/_tuts/starshippart-use-createone.diff @@ -1,12 +1,12 @@ diff --git a/src/Factory/StarshipPartFactory.php b/src/Factory/StarshipPartFactory.php -index df19810..f4249c5 100644 +index 1e035f0..ec03c87 100644 --- a/src/Factory/StarshipPartFactory.php +++ b/src/Factory/StarshipPartFactory.php -@@ -51,7 +51,7 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory +@@ -52,7 +52,7 @@ final class StarshipPartFactory extends PersistentProxyObjectFactory 'name' => $randomPart[0], 'notes' => $randomPart[1], 'price' => self::faker()->randomNumber(5), -- 'starship' => StarshipFactory::randomOrCreate() +- 'starship' => StarshipFactory::randomOrCreate(['status' => StarshipStatusEnum::IN_PROGRESS]), + 'starship' => StarshipFactory::createOne(), ]; } diff --git a/_tuts/steps.json b/_tuts/steps.json index 62b9968..cdca9dd 100644 --- a/_tuts/steps.json +++ b/_tuts/steps.json @@ -74,7 +74,62 @@ "id": "starshippart-set-status-in-new", "name": "StarshipPart: Set status in new()", "description": null + }, + { + "id": "starshippart-remove-ship-override", + "name": "StarshipPart: Remove ship override", + "description": null + }, + { + "id": "fetchingparts-use-findby", + "name": "FetchingParts: Use findBy()", + "description": null + }, + { + "id": "fetchingparts-use-getparts", + "name": "FetchingParts: use ->getParts()", + "description": null + }, + { + "id": "fetchingparts-loop-and-dump", + "name": "FetchingParts: Loop and dump()", + "description": null + }, + { + "id": "template-rendering-parts-variable", + "name": "Template: Rendering parts variable", + "description": null + }, + { + "id": "template-loop-over-ship-parts", + "name": "Template: Loop over ship.parts", + "description": null + }, + { + "id": "template-count-the-parts", + "name": "Template: Count the parts", + "description": null + }, + { + "id": "owninginverse-create-ship-and-2-parts-in-fixtures", + "name": "OwningInverse: Create Ship & 2 parts in fixtures", + "description": null + }, + { + "id": "owninginverse-use-real", + "name": "OwningInverse: Use _real()", + "description": null + }, + { + "id": "owninginverse-set-inverse-side", + "name": "OwningInverse: set inverse side", + "description": null + }, + { + "id": "owninginverse-remove-tmp-code", + "name": "OwningInverse: Remove tmp code", + "description": null } ], - "sha": "e14b8e666b091391d96f402a5921322bcf09c38a" + "sha": "a436a969b67db1b522fb710cda7d0a45a12ed05f" } \ No newline at end of file diff --git a/_tuts/template-count-the-parts.diff b/_tuts/template-count-the-parts.diff new file mode 100644 index 0000000..38d3f50 --- /dev/null +++ b/_tuts/template-count-the-parts.diff @@ -0,0 +1,25 @@ +diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php +index 55ac651..ef1da9d 100644 +--- a/src/DataFixtures/AppFixtures.php ++++ b/src/DataFixtures/AppFixtures.php +@@ -2,7 +2,6 @@ + + namespace App\DataFixtures; + +-use App\Entity\Starship; + use App\Entity\StarshipPart; + use App\Entity\StarshipStatusEnum; + use App\Factory\StarshipFactory; +diff --git a/templates/starship/show.html.twig b/templates/starship/show.html.twig +index 15df632..6f7a0ac 100644 +--- a/templates/starship/show.html.twig ++++ b/templates/starship/show.html.twig +@@ -57,7 +57,7 @@ +

{{ ship.arrivedAt|ago }}

+ +

+- Parts ++ Parts ({{ ship.parts|length }}) +

+
    + {% for part in ship.parts %} diff --git a/_tuts/template-loop-over-ship-parts.diff b/_tuts/template-loop-over-ship-parts.diff new file mode 100644 index 0000000..559b22f --- /dev/null +++ b/_tuts/template-loop-over-ship-parts.diff @@ -0,0 +1,25 @@ +diff --git a/src/Controller/StarshipController.php b/src/Controller/StarshipController.php +index 746904a..8a05b7b 100644 +--- a/src/Controller/StarshipController.php ++++ b/src/Controller/StarshipController.php +@@ -20,7 +20,6 @@ class StarshipController extends AbstractController + ): Response { + return $this->render('starship/show.html.twig', [ + 'ship' => $ship, +- 'parts' => $partRepository->findBy(['starship' => $ship]), + ]); + } + } +diff --git a/templates/starship/show.html.twig b/templates/starship/show.html.twig +index 6e4434e..15df632 100644 +--- a/templates/starship/show.html.twig ++++ b/templates/starship/show.html.twig +@@ -60,7 +60,7 @@ + Parts + +
      +- {% for part in parts %} ++ {% for part in ship.parts %} +
    • + + {{ part.name }} diff --git a/_tuts/template-rendering-parts-variable.diff b/_tuts/template-rendering-parts-variable.diff new file mode 100644 index 0000000..14013da --- /dev/null +++ b/_tuts/template-rendering-parts-variable.diff @@ -0,0 +1,49 @@ +diff --git a/src/Controller/StarshipController.php b/src/Controller/StarshipController.php +index 79579d7..746904a 100644 +--- a/src/Controller/StarshipController.php ++++ b/src/Controller/StarshipController.php +@@ -18,14 +18,9 @@ class StarshipController extends AbstractController + Starship $ship, + StarshipPartRepository $partRepository, + ): Response { +- $parts = $partRepository->findBy(['starship' => $ship]); +- +- foreach ($parts as $part) { +- dump($part); +- } +- + return $this->render('starship/show.html.twig', [ + 'ship' => $ship, ++ 'parts' => $partRepository->findBy(['starship' => $ship]), + ]); + } + } +diff --git a/templates/starship/show.html.twig b/templates/starship/show.html.twig +index 7083434..6e4434e 100644 +--- a/templates/starship/show.html.twig ++++ b/templates/starship/show.html.twig +@@ -60,14 +60,16 @@ + Parts + +
        +-
      • +- +- Steering Wheel +- +- +- Honk honk +- +-
      • ++ {% for part in parts %} ++
      • ++ ++ {{ part.name }} ++ ++ ++ {{ part.notes }} ++ ++
      • ++ {% endfor %} +
      +
+
From d1ae0b5022a3c48e853072b97fdaf1bb48bf9af2 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Sun, 9 Mar 2025 11:33:33 -0400 Subject: [PATCH 021/181] better phrasing --- templates/main/homepage.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/main/homepage.html.twig b/templates/main/homepage.html.twig index b7cd337..a36bb59 100644 --- a/templates/main/homepage.html.twig +++ b/templates/main/homepage.html.twig @@ -32,7 +32,7 @@ >{{ ship.name }}
- Arrived at: {{ ship.arrivedAt|ago }} + Arrived: {{ ship.arrivedAt|ago }}
From 5e5b93bbfbea86df3bcd96e50989581bdabbdfd0 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Sun, 9 Mar 2025 11:57:10 -0400 Subject: [PATCH 022/181] Printing part price --- templates/starship/show.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/starship/show.html.twig b/templates/starship/show.html.twig index 7083434..739fcb3 100644 --- a/templates/starship/show.html.twig +++ b/templates/starship/show.html.twig @@ -62,7 +62,7 @@
+
+
+ + starshop logo + + +
+ {% block body %}{% endblock %} +
+
+ Made with ❤️ by SymfonyCasts +
+