From f7557efa1a781d39df0bbdc0b9b3da13b5f4db67 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Thu, 29 Jan 2026 10:58:17 +0100 Subject: [PATCH 01/47] chore: Mark tensorflow.purejs config entry as lazy-loaded Signed-off-by: Marcel Klehr --- .github/workflows/cluster-faces-test.yml | 2 +- .github/workflows/full-run-test.yml | 2 +- lib/Classifiers/Audio/MusicnnClassifier.php | 2 +- lib/Classifiers/Classifier.php | 2 +- lib/Classifiers/Images/ClusteringFaceClassifier.php | 2 +- lib/Classifiers/Images/ImagenetClassifier.php | 2 +- lib/Classifiers/Images/LandmarksClassifier.php | 2 +- lib/Classifiers/Video/MovinetClassifier.php | 2 +- lib/Migration/InstallDeps.php | 2 +- lib/Service/SettingsService.php | 7 +++++-- tests/ClassifierTest.php | 8 ++++---- 11 files changed, 18 insertions(+), 15 deletions(-) diff --git a/.github/workflows/cluster-faces-test.yml b/.github/workflows/cluster-faces-test.yml index 24404c06..8201e29b 100644 --- a/.github/workflows/cluster-faces-test.yml +++ b/.github/workflows/cluster-faces-test.yml @@ -161,7 +161,7 @@ jobs: - name: Set config run: | - ./occ config:app:set --value ${{ matrix.pure-js-mode }} recognize tensorflow.purejs + ./occ config:app:set --lazy --value ${{ matrix.pure-js-mode }} recognize tensorflow.purejs ./occ config:app:set --value true recognize faces.enabled # only use one core. GH actions has 2 ./occ config:app:set --value 1 recognize tensorflow.cores diff --git a/.github/workflows/full-run-test.yml b/.github/workflows/full-run-test.yml index 776de784..6aca00ff 100644 --- a/.github/workflows/full-run-test.yml +++ b/.github/workflows/full-run-test.yml @@ -155,7 +155,7 @@ jobs: - name: Set pure-js mode run: | - ./occ config:app:set --value ${{ matrix.pure-js-mode }} recognize tensorflow.purejs + ./occ config:app:set --lazy --value ${{ matrix.pure-js-mode }} recognize tensorflow.purejs - name: Set imagenet.enabled run: | diff --git a/lib/Classifiers/Audio/MusicnnClassifier.php b/lib/Classifiers/Audio/MusicnnClassifier.php index e1bf329c..db578f87 100644 --- a/lib/Classifiers/Audio/MusicnnClassifier.php +++ b/lib/Classifiers/Audio/MusicnnClassifier.php @@ -31,7 +31,7 @@ public function __construct(Logger $logger, IAppConfig $config, TagManager $tagM #[Override] public function classify(array $queueFiles): void { - if ($this->config->getAppValueString('tensorflow.purejs', 'false') === 'true') { + if ($this->config->getAppValueString('tensorflow.purejs', 'false', lazy: true) === 'true') { $timeout = self::AUDIO_PUREJS_TIMEOUT; } else { $timeout = self::AUDIO_TIMEOUT; diff --git a/lib/Classifiers/Classifier.php b/lib/Classifiers/Classifier.php index 92e0657d..bec36016 100644 --- a/lib/Classifiers/Classifier.php +++ b/lib/Classifiers/Classifier.php @@ -179,7 +179,7 @@ public function classifyFiles(string $model, array $queueFiles, int $timeout): \ if ($this->config->getAppValueString('tensorflow.gpu', 'false') === 'true') { $env['RECOGNIZE_GPU'] = 'true'; } - if ($this->config->getAppValueString('tensorflow.purejs', 'false') === 'true') { + if ($this->config->getAppValueString('tensorflow.purejs', 'false', lazy: true) === 'true') { $env['RECOGNIZE_PUREJS'] = 'true'; } // Set cores diff --git a/lib/Classifiers/Images/ClusteringFaceClassifier.php b/lib/Classifiers/Images/ClusteringFaceClassifier.php index b69bb0c7..1842da7e 100644 --- a/lib/Classifiers/Images/ClusteringFaceClassifier.php +++ b/lib/Classifiers/Images/ClusteringFaceClassifier.php @@ -64,7 +64,7 @@ private function getUsersWithFileAccess(Node $node): array { #[Override] public function classify(array $queueFiles): void { - if ($this->config->getAppValueString('tensorflow.purejs', 'false') === 'true') { + if ($this->config->getAppValueString('tensorflow.purejs', 'false', lazy: true) === 'true') { $timeout = self::IMAGE_PUREJS_TIMEOUT; } else { $timeout = self::IMAGE_TIMEOUT; diff --git a/lib/Classifiers/Images/ImagenetClassifier.php b/lib/Classifiers/Images/ImagenetClassifier.php index a69d99ce..4ec865be 100644 --- a/lib/Classifiers/Images/ImagenetClassifier.php +++ b/lib/Classifiers/Images/ImagenetClassifier.php @@ -33,7 +33,7 @@ public function __construct(Logger $logger, IAppConfig $config, TagManager $tagM #[Override] public function classify(array $queueFiles): void { - if ($this->config->getAppValueString('tensorflow.purejs', 'false') === 'true') { + if ($this->config->getAppValueString('tensorflow.purejs', 'false', lazy: true) === 'true') { $timeout = self::IMAGE_PUREJS_TIMEOUT; } else { $timeout = self::IMAGE_TIMEOUT; diff --git a/lib/Classifiers/Images/LandmarksClassifier.php b/lib/Classifiers/Images/LandmarksClassifier.php index 9bda8403..2888b4fd 100644 --- a/lib/Classifiers/Images/LandmarksClassifier.php +++ b/lib/Classifiers/Images/LandmarksClassifier.php @@ -33,7 +33,7 @@ public function __construct(Logger $logger, IAppConfig $config, TagManager $tagM #[Override] public function classify(array $queueFiles): void { - if ($this->config->getAppValueString('tensorflow.purejs', 'false') === 'true') { + if ($this->config->getAppValueString('tensorflow.purejs', 'false', lazy: true) === 'true') { $timeout = self::IMAGE_PUREJS_TIMEOUT; } else { $timeout = self::IMAGE_TIMEOUT; diff --git a/lib/Classifiers/Video/MovinetClassifier.php b/lib/Classifiers/Video/MovinetClassifier.php index ad6f986d..d888016d 100644 --- a/lib/Classifiers/Video/MovinetClassifier.php +++ b/lib/Classifiers/Video/MovinetClassifier.php @@ -31,7 +31,7 @@ public function __construct(Logger $logger, IAppConfig $config, TagManager $tagM #[Override] public function classify(array $queueFiles): void { - if ($this->config->getAppValueString('tensorflow.purejs', 'false') === 'true') { + if ($this->config->getAppValueString('tensorflow.purejs', 'false', lazy: true) === 'true') { throw new Exception('Movinet does not support WASM mode'); } else { $timeout = self::VIDEO_TIMEOUT; diff --git a/lib/Migration/InstallDeps.php b/lib/Migration/InstallDeps.php index 914fcda7..7faeb04c 100644 --- a/lib/Migration/InstallDeps.php +++ b/lib/Migration/InstallDeps.php @@ -160,7 +160,7 @@ protected function installNodeBinary(IOutput $output) : void { $supportsAVX = $this->isAVXSupported(); if ($isARM || $isMusl || !$supportsAVX) { $output->info('Enabling purejs mode (isMusl='.$isMusl.', isARM='.$isARM.', supportsAVX='.$supportsAVX.')'); - $this->config->setAppValueString('tensorflow.purejs', 'true'); + $this->config->setAppValueString('tensorflow.purejs', 'true', lazy: true); } } diff --git a/lib/Service/SettingsService.php b/lib/Service/SettingsService.php index 66b9f44d..2c136ef5 100644 --- a/lib/Service/SettingsService.php +++ b/lib/Service/SettingsService.php @@ -78,7 +78,7 @@ public function __construct(IAppConfig $config, IJobList $jobList) { */ public function getSetting(string $key): string { if (strpos($key, 'batchSize') !== false) { - return $this->config->getAppValueString($key, $this->getSetting('tensorflow.purejs') === 'false' ? self::DEFAULTS[$key] : self::PUREJS_DEFAULTS[$key]); + return $this->config->getAppValueString($key, $this->getSetting('tensorflow.purejs', lazy: true) === 'false' ? self::DEFAULTS[$key] : self::PUREJS_DEFAULTS[$key]); } return $this->config->getAppValueString($key, self::DEFAULTS[$key]); } @@ -115,7 +115,10 @@ public function setSetting(string $key, string $value): void { break; } } - $this->config->setAppValueString($key, $value); + if (in_array($key, ['tensorflow.purejs'], true)) { + $lazy = true; + } + $this->config->setAppValueString($key, $value, lazy: $lazy); } /** diff --git a/tests/ClassifierTest.php b/tests/ClassifierTest.php index 330c65af..d549df67 100644 --- a/tests/ClassifierTest.php +++ b/tests/ClassifierTest.php @@ -395,7 +395,7 @@ public function testImagenetPipeline(string $ignoreFileName) : void { } public function testLandmarksPipeline() : void { - if ($this->config->getAppValueString('tensorflow.purejs', 'false') === 'true') { + if ($this->config->getAppValueString('tensorflow.purejs', 'false', lazy: true) === 'true') { // landmarks will fail with purejs/WASM mode, sadly, because we use a worse imagenet model in WASM mode self::markTestSkipped(); } @@ -582,7 +582,7 @@ public function testFacesPipeline() : void { * @throws \Psr\Container\NotFoundExceptionInterface */ public function testMovinetPipeline(string $ignoreFileName) : void { - if ($this->config->getAppValueString('tensorflow.purejs', 'false') === 'true') { + if ($this->config->getAppValueString('tensorflow.purejs', 'false', lazy: true) === 'true') { // Cannot run musicnn with purejs/WASM mode self::markTestSkipped(); } @@ -664,7 +664,7 @@ public function testMovinetPipeline(string $ignoreFileName) : void { * @throws \Psr\Container\NotFoundExceptionInterface */ public function testMusicnnPipeline(string $ignoreFileName) : void { - if ($this->config->getAppValueString('tensorflow.purejs', 'false') === 'true') { + if ($this->config->getAppValueString('tensorflow.purejs', 'false', lazy: true) === 'true') { // Cannot run musicnn with purejs/WASM mode self::markTestSkipped(); } @@ -736,7 +736,7 @@ public function testMusicnnPipeline(string $ignoreFileName) : void { * @throws \OCP\Files\NotPermittedException */ public function testClassifier($file, $model, $tag) : void { - if ($this->config->getAppValueString('tensorflow.purejs', 'false') === 'true' && in_array($model, ['movinet', 'musicnn'])) { + if ($this->config->getAppValueString('tensorflow.purejs', 'false', lazy: true) === 'true' && in_array($model, ['movinet', 'musicnn'])) { // Cannot run musicnn/movinet with purejs/WASM mode self::markTestSkipped(); } From feec07257522ed643bc4986e2e2f6b6291ddc8b4 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Thu, 29 Jan 2026 11:00:55 +0100 Subject: [PATCH 02/47] chore: Mark node_binary config entry as lazy-loaded Signed-off-by: Marcel Klehr --- lib/Classifiers/Classifier.php | 2 +- lib/Migration/InstallDeps.php | 6 +++--- lib/Service/SettingsService.php | 10 ++++++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/Classifiers/Classifier.php b/lib/Classifiers/Classifier.php index bec36016..65b47445 100644 --- a/lib/Classifiers/Classifier.php +++ b/lib/Classifiers/Classifier.php @@ -159,7 +159,7 @@ public function classifyFiles(string $model, array $queueFiles, int $timeout): \ $this->logger->debug('Classifying '.var_export($paths, true)); $command = [ - $this->config->getAppValueString('node_binary'), + $this->config->getAppValueString('node_binary', lazy: true), dirname(__DIR__, 2) . '/src/classifier_'.$model.'.js', '-' ]; diff --git a/lib/Migration/InstallDeps.php b/lib/Migration/InstallDeps.php index 7faeb04c..d6d645ad 100644 --- a/lib/Migration/InstallDeps.php +++ b/lib/Migration/InstallDeps.php @@ -74,7 +74,7 @@ public function getName(): string { public function run(IOutput $output): void { try { - $existingBinary = $this->config->getAppValueString('node_binary', ''); + $existingBinary = $this->config->getAppValueString('node_binary', '', lazy: true); if ($existingBinary !== '') { $version = $this->testBinary($existingBinary); if ($version === null) { @@ -86,7 +86,7 @@ public function run(IOutput $output): void { $this->setBinariesPermissions(); - $binaryPath = $this->config->getAppValueString('node_binary', ''); + $binaryPath = $this->config->getAppValueString('node_binary', '', lazy: true); $this->runTfjsInstall($binaryPath); $this->runFfmpegInstall($binaryPath); @@ -155,7 +155,7 @@ protected function installNodeBinary(IOutput $output) : void { } // Write the app config - $this->config->setAppValueString('node_binary', $binaryPath); + $this->config->setAppValueString('node_binary', $binaryPath, lazy: true); $supportsAVX = $this->isAVXSupported(); if ($isARM || $isMusl || !$supportsAVX) { diff --git a/lib/Service/SettingsService.php b/lib/Service/SettingsService.php index 2c136ef5..f78b4713 100644 --- a/lib/Service/SettingsService.php +++ b/lib/Service/SettingsService.php @@ -63,6 +63,7 @@ final class SettingsService { 'movinet.batchSize' => '5', 'musicnn.batchSize' => '20', ]; + public const LAZY_SETTINGS = ['tensorflow.purejs', 'node_binary']; private IAppConfig $config; private IJobList $jobList; @@ -80,7 +81,11 @@ public function getSetting(string $key): string { if (strpos($key, 'batchSize') !== false) { return $this->config->getAppValueString($key, $this->getSetting('tensorflow.purejs', lazy: true) === 'false' ? self::DEFAULTS[$key] : self::PUREJS_DEFAULTS[$key]); } - return $this->config->getAppValueString($key, self::DEFAULTS[$key]); + $lazy = false; + if (in_array($key, self::LAZY_SETTINGS, true)) { + $lazy = true; + } + return $this->config->getAppValueString($key, self::DEFAULTS[$key], lazy: $lazy); } /** @@ -115,7 +120,8 @@ public function setSetting(string $key, string $value): void { break; } } - if (in_array($key, ['tensorflow.purejs'], true)) { + $lazy = false; + if (in_array($key, self::LAZY_SETTINGS, true)) { $lazy = true; } $this->config->setAppValueString($key, $value, lazy: $lazy); From e820b5a64b2a793c4f3686e121c1c0263d6f663b Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Thu, 29 Jan 2026 11:03:30 +0100 Subject: [PATCH 03/47] chore: Mark nice_binary config entry as lazy-loaded Signed-off-by: Marcel Klehr --- lib/Classifiers/Classifier.php | 4 ++-- lib/Controller/AdminController.php | 8 ++++---- lib/Migration/InstallDeps.php | 8 ++++---- lib/Service/SettingsService.php | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/Classifiers/Classifier.php b/lib/Classifiers/Classifier.php index 65b47445..07b53756 100644 --- a/lib/Classifiers/Classifier.php +++ b/lib/Classifiers/Classifier.php @@ -164,9 +164,9 @@ public function classifyFiles(string $model, array $queueFiles, int $timeout): \ '-' ]; - if (trim($this->config->getAppValueString('nice_binary', '')) !== '') { + if (trim($this->config->getAppValueString('nice_binary', '', lazy: true)) !== '') { $command = [ - $this->config->getAppValueString('nice_binary'), + $this->config->getAppValueString('nice_binary', lazy: true), "-" . $this->config->getAppValueString('nice_value', '0'), ...$command, ]; diff --git a/lib/Controller/AdminController.php b/lib/Controller/AdminController.php index a266c0dd..72c51c8b 100644 --- a/lib/Controller/AdminController.php +++ b/lib/Controller/AdminController.php @@ -177,17 +177,17 @@ public function musl(): JSONResponse { public function nice(): JSONResponse { /* use nice binary from settings if available */ - if ($this->config->getAppValueString('nice_binary', '') !== '') { - $nice_path = $this->config->getAppValueString('nice_binary'); + if ($this->config->getAppValueString('nice_binary', '', lazy: true) !== '') { + $nice_path = $this->config->getAppValueString('nice_binary', lazy: true); } else { /* returns the path to the nice binary or false if not found */ $nice_path = $this->binaryFinder->findBinaryPath('nice'); } if ($nice_path !== false) { - $this->config->setAppValueString('nice_binary', $nice_path); + $this->config->setAppValueString('nice_binary', $nice_path, lazy: true); } else { - $this->config->setAppValueString('nice_binary', ''); + $this->config->setAppValueString('nice_binary', '', lazy: true); return new JSONResponse(['nice' => false]); } diff --git a/lib/Migration/InstallDeps.php b/lib/Migration/InstallDeps.php index d6d645ad..a9428f65 100644 --- a/lib/Migration/InstallDeps.php +++ b/lib/Migration/InstallDeps.php @@ -102,17 +102,17 @@ public function run(IOutput $output): void { protected function setNiceBinaryPath() : void { /* use nice binary from settings if available */ - if ($this->config->getAppValueString('nice_binary', '') !== '') { - $nice_path = $this->config->getAppValueString('nice_binary'); + if ($this->config->getAppValueString('nice_binary', '', lazy: true) !== '') { + $nice_path = $this->config->getAppValueString('nice_binary', lazy: true); } else { /* returns the path to the nice binary or false if not found */ $nice_path = $this->binaryFinder->findBinaryPath('nice'); } if ($nice_path !== false) { - $this->config->setAppValueString('nice_binary', $nice_path); + $this->config->setAppValueString('nice_binary', $nice_path, lazy: true); } else { - $this->config->setAppValueString('nice_binary', ''); + $this->config->setAppValueString('nice_binary', '', lazy: true); } } diff --git a/lib/Service/SettingsService.php b/lib/Service/SettingsService.php index f78b4713..ce79836d 100644 --- a/lib/Service/SettingsService.php +++ b/lib/Service/SettingsService.php @@ -63,7 +63,7 @@ final class SettingsService { 'movinet.batchSize' => '5', 'musicnn.batchSize' => '20', ]; - public const LAZY_SETTINGS = ['tensorflow.purejs', 'node_binary']; + public const LAZY_SETTINGS = ['tensorflow.purejs', 'node_binary', 'nice_binary']; private IAppConfig $config; private IJobList $jobList; @@ -79,7 +79,7 @@ public function __construct(IAppConfig $config, IJobList $jobList) { */ public function getSetting(string $key): string { if (strpos($key, 'batchSize') !== false) { - return $this->config->getAppValueString($key, $this->getSetting('tensorflow.purejs', lazy: true) === 'false' ? self::DEFAULTS[$key] : self::PUREJS_DEFAULTS[$key]); + return $this->config->getAppValueString($key, $this->getSetting('tensorflow.purejs') === 'false' ? self::DEFAULTS[$key] : self::PUREJS_DEFAULTS[$key]); } $lazy = false; if (in_array($key, self::LAZY_SETTINGS, true)) { From 1ef24019c7e95a646930e5a059e3979617b01f8b Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Thu, 29 Jan 2026 11:04:24 +0100 Subject: [PATCH 04/47] chore: Mark nice_value config entry as lazy-loaded Signed-off-by: Marcel Klehr --- lib/Classifiers/Classifier.php | 2 +- lib/Service/SettingsService.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Classifiers/Classifier.php b/lib/Classifiers/Classifier.php index 07b53756..221e22e3 100644 --- a/lib/Classifiers/Classifier.php +++ b/lib/Classifiers/Classifier.php @@ -167,7 +167,7 @@ public function classifyFiles(string $model, array $queueFiles, int $timeout): \ if (trim($this->config->getAppValueString('nice_binary', '', lazy: true)) !== '') { $command = [ $this->config->getAppValueString('nice_binary', lazy: true), - "-" . $this->config->getAppValueString('nice_value', '0'), + "-" . $this->config->getAppValueString('nice_value', '0', lazy: true), ...$command, ]; } diff --git a/lib/Service/SettingsService.php b/lib/Service/SettingsService.php index ce79836d..6b4aa7c7 100644 --- a/lib/Service/SettingsService.php +++ b/lib/Service/SettingsService.php @@ -63,7 +63,7 @@ final class SettingsService { 'movinet.batchSize' => '5', 'musicnn.batchSize' => '20', ]; - public const LAZY_SETTINGS = ['tensorflow.purejs', 'node_binary', 'nice_binary']; + public const LAZY_SETTINGS = ['tensorflow.purejs', 'node_binary', 'nice_binary', 'nice_value']; private IAppConfig $config; private IJobList $jobList; From 04967a180759150457f6cd0c09a7236c47ceac88 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Thu, 29 Jan 2026 11:05:58 +0100 Subject: [PATCH 05/47] chore: Mark ffmpeg_binary config entry as lazy-loaded Signed-off-by: Marcel Klehr --- lib/Migration/InstallDeps.php | 8 ++++---- lib/Service/SettingsService.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/Migration/InstallDeps.php b/lib/Migration/InstallDeps.php index a9428f65..ed8ed084 100644 --- a/lib/Migration/InstallDeps.php +++ b/lib/Migration/InstallDeps.php @@ -238,17 +238,17 @@ protected function runFfmpegInstall(string $nodeBinary): void { protected function setFfmpegBinaryPath() : void { /* use nice binary from settings if available */ - if ($this->config->getAppValueString('ffmpeg_binary', '') !== '') { - $ffmpeg_path = $this->config->getAppValueString('ffmpeg_binary'); + if ($this->config->getAppValueString('ffmpeg_binary', '', lazy: true) !== '') { + $ffmpeg_path = $this->config->getAppValueString('ffmpeg_binary', lazy: true); } else { /* returns the path to the nice binary or false if not found */ $ffmpeg_path = $this->binaryFinder->findBinaryPath('ffmpeg'); } if ($ffmpeg_path !== false) { - $this->config->setAppValueString('ffmpeg_binary', $ffmpeg_path); + $this->config->setAppValueString('ffmpeg_binary', $ffmpeg_path, lazy: true); } else { - $this->config->setAppValueString('ffmpeg_binary', __DIR__ . '/../../node_modules/ffmpeg-static/ffmpeg'); + $this->config->setAppValueString('ffmpeg_binary', __DIR__ . '/../../node_modules/ffmpeg-static/ffmpeg', lazy: true); } } diff --git a/lib/Service/SettingsService.php b/lib/Service/SettingsService.php index 6b4aa7c7..e926bca7 100644 --- a/lib/Service/SettingsService.php +++ b/lib/Service/SettingsService.php @@ -63,7 +63,7 @@ final class SettingsService { 'movinet.batchSize' => '5', 'musicnn.batchSize' => '20', ]; - public const LAZY_SETTINGS = ['tensorflow.purejs', 'node_binary', 'nice_binary', 'nice_value']; + public const LAZY_SETTINGS = ['tensorflow.purejs', 'node_binary', 'nice_binary', 'nice_value', 'ffmpeg_binary']; private IAppConfig $config; private IJobList $jobList; From 9fea2f4cf44c4c8ffefb89322d7b3aff7322160d Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Thu, 29 Jan 2026 11:09:03 +0100 Subject: [PATCH 06/47] chore: Mark status config entries as lazy-loaded Signed-off-by: Marcel Klehr --- lib/Classifiers/Audio/MusicnnClassifier.php | 2 +- .../Images/ClusteringFaceClassifier.php | 2 +- lib/Classifiers/Images/ImagenetClassifier.php | 2 +- lib/Classifiers/Images/LandmarksClassifier.php | 2 +- lib/Classifiers/Video/MovinetClassifier.php | 2 +- lib/Service/SettingsService.php | 14 +++++++++++++- 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/Classifiers/Audio/MusicnnClassifier.php b/lib/Classifiers/Audio/MusicnnClassifier.php index db578f87..c1da29f0 100644 --- a/lib/Classifiers/Audio/MusicnnClassifier.php +++ b/lib/Classifiers/Audio/MusicnnClassifier.php @@ -43,7 +43,7 @@ public function classify(array $queueFiles): void { */ foreach ($classifierProcess as $queueFile => $results) { $this->tagManager->assignTags($queueFile->getFileId(), $results); - $this->config->setAppValueString(self::MODEL_NAME.'.status', 'true'); + $this->config->setAppValueString(self::MODEL_NAME.'.status', 'true', lazy: true); $this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time()); } } diff --git a/lib/Classifiers/Images/ClusteringFaceClassifier.php b/lib/Classifiers/Images/ClusteringFaceClassifier.php index 1842da7e..7bfd20ec 100644 --- a/lib/Classifiers/Images/ClusteringFaceClassifier.php +++ b/lib/Classifiers/Images/ClusteringFaceClassifier.php @@ -134,7 +134,7 @@ public function classify(array $queueFiles): void { $this->logger->debug('scheduling ClusterFacesJob for user ' . $userId); $this->jobList->add(ClusterFacesJob::class, ['userId' => $userId]); } - $this->config->setAppValueString(self::MODEL_NAME . '.status', 'true'); + $this->config->setAppValueString(self::MODEL_NAME . '.status', 'true', lazy: true); $this->config->setAppValueString(self::MODEL_NAME . '.lastFile', (string)time()); } } diff --git a/lib/Classifiers/Images/ImagenetClassifier.php b/lib/Classifiers/Images/ImagenetClassifier.php index 4ec865be..cc62a18f 100644 --- a/lib/Classifiers/Images/ImagenetClassifier.php +++ b/lib/Classifiers/Images/ImagenetClassifier.php @@ -47,7 +47,7 @@ public function classify(array $queueFiles): void { $landmarkTags = array_filter($results, static function ($tagName) { return in_array($tagName, LandmarksClassifier::PRECONDITION_TAGS); }); - $this->config->setAppValueString(self::MODEL_NAME.'.status', 'true'); + $this->config->setAppValueString(self::MODEL_NAME.'.status', 'true', lazy: true); $this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time()); if (count($landmarkTags) > 0) { diff --git a/lib/Classifiers/Images/LandmarksClassifier.php b/lib/Classifiers/Images/LandmarksClassifier.php index 2888b4fd..6340ee8e 100644 --- a/lib/Classifiers/Images/LandmarksClassifier.php +++ b/lib/Classifiers/Images/LandmarksClassifier.php @@ -44,7 +44,7 @@ public function classify(array $queueFiles): void { /** @var list $results */ foreach ($classifierProcess as $queueFile => $results) { $this->tagManager->assignTags($queueFile->getFileId(), $results); - $this->config->setAppValueString(self::MODEL_NAME.'.status', 'true'); + $this->config->setAppValueString(self::MODEL_NAME.'.status', 'true', lazy: true); $this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time()); } } diff --git a/lib/Classifiers/Video/MovinetClassifier.php b/lib/Classifiers/Video/MovinetClassifier.php index d888016d..fb6776fe 100644 --- a/lib/Classifiers/Video/MovinetClassifier.php +++ b/lib/Classifiers/Video/MovinetClassifier.php @@ -42,7 +42,7 @@ public function classify(array $queueFiles): void { /** @var list $results */ foreach ($classifierProcess as $queueFile => $results) { $this->tagManager->assignTags($queueFile->getFileId(), $results); - $this->config->setAppValueString(self::MODEL_NAME.'.status', 'true'); + $this->config->setAppValueString(self::MODEL_NAME.'.status', 'true', lazy: true); $this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time()); } } diff --git a/lib/Service/SettingsService.php b/lib/Service/SettingsService.php index e926bca7..ae35d7b4 100644 --- a/lib/Service/SettingsService.php +++ b/lib/Service/SettingsService.php @@ -63,7 +63,19 @@ final class SettingsService { 'movinet.batchSize' => '5', 'musicnn.batchSize' => '20', ]; - public const LAZY_SETTINGS = ['tensorflow.purejs', 'node_binary', 'nice_binary', 'nice_value', 'ffmpeg_binary']; + public const LAZY_SETTINGS = [ + 'tensorflow.purejs', + 'node_binary', + 'nice_binary', + 'nice_value', + 'ffmpeg_binary', + 'clusterFaces.status', + 'faces.status', + 'imagenet.status', + 'landmarks.status', + 'movinet.status', + 'musicnn.status', + ]; private IAppConfig $config; private IJobList $jobList; From 65711e51f9a354f0d464b13f1f399528d5d58b6e Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Thu, 29 Jan 2026 11:11:39 +0100 Subject: [PATCH 07/47] chore: Mark lastFile config entries as lazy-loaded Signed-off-by: Marcel Klehr --- lib/Classifiers/Audio/MusicnnClassifier.php | 2 +- lib/Classifiers/Images/ClusteringFaceClassifier.php | 2 +- lib/Classifiers/Images/ImagenetClassifier.php | 2 +- lib/Classifiers/Images/LandmarksClassifier.php | 2 +- lib/Classifiers/Video/MovinetClassifier.php | 2 +- lib/Service/SettingsService.php | 6 ++++++ 6 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/Classifiers/Audio/MusicnnClassifier.php b/lib/Classifiers/Audio/MusicnnClassifier.php index c1da29f0..de5dba13 100644 --- a/lib/Classifiers/Audio/MusicnnClassifier.php +++ b/lib/Classifiers/Audio/MusicnnClassifier.php @@ -44,7 +44,7 @@ public function classify(array $queueFiles): void { foreach ($classifierProcess as $queueFile => $results) { $this->tagManager->assignTags($queueFile->getFileId(), $results); $this->config->setAppValueString(self::MODEL_NAME.'.status', 'true', lazy: true); - $this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time()); + $this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time(), lazy: true); } } } diff --git a/lib/Classifiers/Images/ClusteringFaceClassifier.php b/lib/Classifiers/Images/ClusteringFaceClassifier.php index 7bfd20ec..81eff74a 100644 --- a/lib/Classifiers/Images/ClusteringFaceClassifier.php +++ b/lib/Classifiers/Images/ClusteringFaceClassifier.php @@ -135,7 +135,7 @@ public function classify(array $queueFiles): void { $this->jobList->add(ClusterFacesJob::class, ['userId' => $userId]); } $this->config->setAppValueString(self::MODEL_NAME . '.status', 'true', lazy: true); - $this->config->setAppValueString(self::MODEL_NAME . '.lastFile', (string)time()); + $this->config->setAppValueString(self::MODEL_NAME . '.lastFile', (string)time(), lazy: true); } } $this->logger->debug('face classifier end'); diff --git a/lib/Classifiers/Images/ImagenetClassifier.php b/lib/Classifiers/Images/ImagenetClassifier.php index cc62a18f..576c0546 100644 --- a/lib/Classifiers/Images/ImagenetClassifier.php +++ b/lib/Classifiers/Images/ImagenetClassifier.php @@ -48,7 +48,7 @@ public function classify(array $queueFiles): void { return in_array($tagName, LandmarksClassifier::PRECONDITION_TAGS); }); $this->config->setAppValueString(self::MODEL_NAME.'.status', 'true', lazy: true); - $this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time()); + $this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time(), lazy: true); if (count($landmarkTags) > 0) { try { diff --git a/lib/Classifiers/Images/LandmarksClassifier.php b/lib/Classifiers/Images/LandmarksClassifier.php index 6340ee8e..adcf60ad 100644 --- a/lib/Classifiers/Images/LandmarksClassifier.php +++ b/lib/Classifiers/Images/LandmarksClassifier.php @@ -45,7 +45,7 @@ public function classify(array $queueFiles): void { foreach ($classifierProcess as $queueFile => $results) { $this->tagManager->assignTags($queueFile->getFileId(), $results); $this->config->setAppValueString(self::MODEL_NAME.'.status', 'true', lazy: true); - $this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time()); + $this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time(), lazy: true); } } } diff --git a/lib/Classifiers/Video/MovinetClassifier.php b/lib/Classifiers/Video/MovinetClassifier.php index fb6776fe..5f9b6a60 100644 --- a/lib/Classifiers/Video/MovinetClassifier.php +++ b/lib/Classifiers/Video/MovinetClassifier.php @@ -43,7 +43,7 @@ public function classify(array $queueFiles): void { foreach ($classifierProcess as $queueFile => $results) { $this->tagManager->assignTags($queueFile->getFileId(), $results); $this->config->setAppValueString(self::MODEL_NAME.'.status', 'true', lazy: true); - $this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time()); + $this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time(), lazy: true); } } } diff --git a/lib/Service/SettingsService.php b/lib/Service/SettingsService.php index ae35d7b4..1c7051ff 100644 --- a/lib/Service/SettingsService.php +++ b/lib/Service/SettingsService.php @@ -75,6 +75,12 @@ final class SettingsService { 'landmarks.status', 'movinet.status', 'musicnn.status', + 'faces.lastFile', + 'imagenet.lastFile', + 'landmarks.lastFile', + 'movinet.lastFile', + 'musicnn.lastFile', + 'clusterFaces.lastRun', ]; private IAppConfig $config; From f56c51d8041d2fe05a6b7a1352df40c12cae482e Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Thu, 29 Jan 2026 11:13:38 +0100 Subject: [PATCH 08/47] chore: Mark 'concurrency.enabled' config entriy as lazy-loaded Signed-off-by: Marcel Klehr --- .github/workflows/files-scan-test.yml | 2 +- lib/Service/SettingsService.php | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/files-scan-test.yml b/.github/workflows/files-scan-test.yml index 35bd1242..cfae8dd5 100644 --- a/.github/workflows/files-scan-test.yml +++ b/.github/workflows/files-scan-test.yml @@ -133,7 +133,7 @@ jobs: - name: Set imagenet.enabled and concurrency.enabled run: | ./occ config:app:set --value true recognize imagenet.enabled - ./occ config:app:set --value true recognize concurrency.enabled + ./occ config:app:set --lazy --value true recognize concurrency.enabled - name: Run scan env: diff --git a/lib/Service/SettingsService.php b/lib/Service/SettingsService.php index 1c7051ff..93c6eac2 100644 --- a/lib/Service/SettingsService.php +++ b/lib/Service/SettingsService.php @@ -81,6 +81,12 @@ final class SettingsService { 'movinet.lastFile', 'musicnn.lastFile', 'clusterFaces.lastRun', + 'faces.batchSize', + 'imagenet.batchSize', + 'landmarks.batchSize', + 'movinet.batchSize', + 'musicnn.batchSize', + 'concurrency.enabled' ]; private IAppConfig $config; From 336497a842d9550132df46eae65d1d2f4c2b68b0 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Thu, 29 Jan 2026 11:19:34 +0100 Subject: [PATCH 09/47] fix: Add migration changing non-lazy config entries to lazy Signed-off-by: Marcel Klehr --- .../Version011000002Date20260129094821.php | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 lib/Migration/Version011000002Date20260129094821.php diff --git a/lib/Migration/Version011000002Date20260129094821.php b/lib/Migration/Version011000002Date20260129094821.php new file mode 100644 index 00000000..fd804fbb --- /dev/null +++ b/lib/Migration/Version011000002Date20260129094821.php @@ -0,0 +1,35 @@ +appConfig->hasAppKey($settingsKey, lazy: false)) { + $value = $this->appConfig->getAppValueString($settingsKey); + $this->appConfig->deleteAppValue($settingsKey); + $this->appConfig->setAppValueString($settingsKey, $value, lazy: true); + } + } + } +} From a85b6573040e903974dfd091fc487987d397ab3b Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Thu, 29 Jan 2026 11:29:07 +0100 Subject: [PATCH 10/47] fix: Introduce internal require_api_key setting Signed-off-by: Marcel Klehr --- .github/workflows/cluster-faces-test.yml | 2 ++ lib/Dav/Faces/PropFindPlugin.php | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/.github/workflows/cluster-faces-test.yml b/.github/workflows/cluster-faces-test.yml index 8201e29b..be626e7f 100644 --- a/.github/workflows/cluster-faces-test.yml +++ b/.github/workflows/cluster-faces-test.yml @@ -163,6 +163,8 @@ jobs: run: | ./occ config:app:set --lazy --value ${{ matrix.pure-js-mode }} recognize tensorflow.purejs ./occ config:app:set --value true recognize faces.enabled + # Don't force API key usage to allow tests to run + ./occ config:app:set --value false recognize require_api_key # only use one core. GH actions has 2 ./occ config:app:set --value 1 recognize tensorflow.cores diff --git a/lib/Dav/Faces/PropFindPlugin.php b/lib/Dav/Faces/PropFindPlugin.php index 0c56f1f1..d5e615e3 100644 --- a/lib/Dav/Faces/PropFindPlugin.php +++ b/lib/Dav/Faces/PropFindPlugin.php @@ -15,6 +15,7 @@ use OCA\Recognize\Db\FaceDetectionWithTitle; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\MultipleObjectsReturnedException; +use OCP\AppFramework\Services\IAppConfig; use OCP\AppFramework\Utility\ITimeFactory; use OCP\DB\Exception; use OCP\Files\DavUtil; @@ -47,6 +48,7 @@ public function __construct( private ICrypto $crypto, private LoggerInterface $logger, private ITimeFactory $timeFactory, + private IAppConfig $appConfig, ) { } @@ -130,6 +132,9 @@ public function beforeMethod(RequestInterface $request, ResponseInterface $respo if (!str_starts_with($request->getPath(), 'recognize')) { return; } + if ($this->appConfig->getAppValueString('require_api_key', 'true') !== 'true') { + return; + } $key = $request->getHeader('X-Recognize-Api-Key'); if ($key === null) { throw new Forbidden('You must provide a valid X-Recognize-Api-Key'); From bffc3627c034f8e2ae738d1cec48143457cdcfd1 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Thu, 29 Jan 2026 11:45:58 +0100 Subject: [PATCH 11/47] Fix: Run cs:fix Signed-off-by: Marcel Klehr --- lib/Migration/Version011000002Date20260129094821.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/Migration/Version011000002Date20260129094821.php b/lib/Migration/Version011000002Date20260129094821.php index fd804fbb..b00e03d6 100644 --- a/lib/Migration/Version011000002Date20260129094821.php +++ b/lib/Migration/Version011000002Date20260129094821.php @@ -8,11 +8,8 @@ namespace OCA\Recognize\Migration; use Closure; -use Doctrine\DBAL\Schema\SchemaException; use OCA\Recognize\Service\SettingsService; use OCP\AppFramework\Services\IAppConfig; -use OCP\DB\ISchemaWrapper; -use OCP\DB\Types; use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; From cd02d7a9abcc94ff5ca93bc2cc11a35ea389f43c Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Thu, 29 Jan 2026 12:41:36 +0100 Subject: [PATCH 12/47] chore: Update vendor-bin Signed-off-by: Marcel Klehr --- vendor-bin/php-cs-fixer/composer.lock | 96 ++++++------ vendor-bin/php-scoper/composer.lock | 24 +-- vendor-bin/phpunit/composer.lock | 49 +++--- vendor-bin/psalm/composer.lock | 205 +++++++++++++------------- 4 files changed, 189 insertions(+), 185 deletions(-) diff --git a/vendor-bin/php-cs-fixer/composer.lock b/vendor-bin/php-cs-fixer/composer.lock index ca256f97..9d16cd3c 100644 --- a/vendor-bin/php-cs-fixer/composer.lock +++ b/vendor-bin/php-cs-fixer/composer.lock @@ -402,16 +402,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.92.3", + "version": "v3.93.1", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "2ba8f5a60f6f42fb65758cfb3768434fa2d1c7e8" + "reference": "b3546ab487c0762c39f308dc1ec0ea2c461fc21a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2ba8f5a60f6f42fb65758cfb3768434fa2d1c7e8", - "reference": "2ba8f5a60f6f42fb65758cfb3768434fa2d1c7e8", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b3546ab487c0762c39f308dc1ec0ea2c461fc21a", + "reference": "b3546ab487c0762c39f308dc1ec0ea2c461fc21a", "shasum": "" }, "require": { @@ -443,17 +443,17 @@ }, "require-dev": { "facile-it/paraunit": "^1.3.1 || ^2.7", - "infection/infection": "^0.31.0", - "justinrainbow/json-schema": "^6.5", - "keradus/cli-executor": "^2.2", + "infection/infection": "^0.32", + "justinrainbow/json-schema": "^6.6", + "keradus/cli-executor": "^2.3", "mikey179/vfsstream": "^1.6.12", "php-coveralls/php-coveralls": "^2.9", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", - "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34", + "phpunit/phpunit": "^9.6.31 || ^10.5.60 || ^11.5.48", "symfony/polyfill-php85": "^1.33", - "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2 || ^8.0", - "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2 || ^8.0" + "symfony/var-dumper": "^5.4.48 || ^6.4.26 || ^7.4.0 || ^8.0", + "symfony/yaml": "^5.4.45 || ^6.4.30 || ^7.4.1 || ^8.0" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -494,7 +494,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.92.3" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.93.1" }, "funding": [ { @@ -502,7 +502,7 @@ "type": "github" } ], - "time": "2025-12-18T10:45:02+00:00" + "time": "2026-01-28T23:50:50+00:00" }, { "name": "nextcloud/coding-standard", @@ -772,16 +772,16 @@ }, { "name": "react/child-process", - "version": "v0.6.6", + "version": "v0.6.7", "source": { "type": "git", "url": "https://github.com/reactphp/child-process.git", - "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159" + "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159", - "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/970f0e71945556422ee4570ccbabaedc3cf04ad3", + "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3", "shasum": "" }, "require": { @@ -835,7 +835,7 @@ ], "support": { "issues": "https://github.com/reactphp/child-process/issues", - "source": "https://github.com/reactphp/child-process/tree/v0.6.6" + "source": "https://github.com/reactphp/child-process/tree/v0.6.7" }, "funding": [ { @@ -843,7 +843,7 @@ "type": "open_collective" } ], - "time": "2025-01-01T16:37:48+00:00" + "time": "2025-12-23T15:25:20+00:00" }, { "name": "react/dns", @@ -1293,16 +1293,16 @@ }, { "name": "symfony/console", - "version": "v8.0.1", + "version": "v8.0.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "fcb73f69d655b48fcb894a262f074218df08bd58" + "reference": "ace03c4cf9805080ff40cbeec69fca180c339a3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/fcb73f69d655b48fcb894a262f074218df08bd58", - "reference": "fcb73f69d655b48fcb894a262f074218df08bd58", + "url": "https://api.github.com/repos/symfony/console/zipball/ace03c4cf9805080ff40cbeec69fca180c339a3b", + "reference": "ace03c4cf9805080ff40cbeec69fca180c339a3b", "shasum": "" }, "require": { @@ -1359,7 +1359,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v8.0.1" + "source": "https://github.com/symfony/console/tree/v8.0.4" }, "funding": [ { @@ -1379,7 +1379,7 @@ "type": "tidelift" } ], - "time": "2025-12-05T15:25:33+00:00" + "time": "2026-01-13T13:06:50+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1450,16 +1450,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v8.0.0", + "version": "v8.0.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "573f95783a2ec6e38752979db139f09fec033f03" + "reference": "99301401da182b6cfaa4700dbe9987bb75474b47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/573f95783a2ec6e38752979db139f09fec033f03", - "reference": "573f95783a2ec6e38752979db139f09fec033f03", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/99301401da182b6cfaa4700dbe9987bb75474b47", + "reference": "99301401da182b6cfaa4700dbe9987bb75474b47", "shasum": "" }, "require": { @@ -1511,7 +1511,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/v8.0.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.4" }, "funding": [ { @@ -1531,7 +1531,7 @@ "type": "tidelift" } ], - "time": "2025-10-30T14:17:19+00:00" + "time": "2026-01-05T11:45:55+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -1681,16 +1681,16 @@ }, { "name": "symfony/finder", - "version": "v8.0.0", + "version": "v8.0.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "7598dd5770580fa3517ec83e8da0c9b9e01f4291" + "reference": "8bd576e97c67d45941365bf824e18dc8538e6eb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/7598dd5770580fa3517ec83e8da0c9b9e01f4291", - "reference": "7598dd5770580fa3517ec83e8da0c9b9e01f4291", + "url": "https://api.github.com/repos/symfony/finder/zipball/8bd576e97c67d45941365bf824e18dc8538e6eb0", + "reference": "8bd576e97c67d45941365bf824e18dc8538e6eb0", "shasum": "" }, "require": { @@ -1725,7 +1725,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v8.0.0" + "source": "https://github.com/symfony/finder/tree/v8.0.5" }, "funding": [ { @@ -1745,7 +1745,7 @@ "type": "tidelift" } ], - "time": "2025-11-05T14:36:47+00:00" + "time": "2026-01-26T15:08:38+00:00" }, { "name": "symfony/options-resolver", @@ -2399,16 +2399,16 @@ }, { "name": "symfony/process", - "version": "v8.0.0", + "version": "v8.0.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "a0a750500c4ce900d69ba4e9faf16f82c10ee149" + "reference": "b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/a0a750500c4ce900d69ba4e9faf16f82c10ee149", - "reference": "a0a750500c4ce900d69ba4e9faf16f82c10ee149", + "url": "https://api.github.com/repos/symfony/process/zipball/b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674", + "reference": "b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674", "shasum": "" }, "require": { @@ -2440,7 +2440,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v8.0.0" + "source": "https://github.com/symfony/process/tree/v8.0.5" }, "funding": [ { @@ -2460,7 +2460,7 @@ "type": "tidelift" } ], - "time": "2025-10-16T16:25:44+00:00" + "time": "2026-01-26T15:08:38+00:00" }, { "name": "symfony/service-contracts", @@ -2617,16 +2617,16 @@ }, { "name": "symfony/string", - "version": "v8.0.1", + "version": "v8.0.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc" + "reference": "758b372d6882506821ed666032e43020c4f57194" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ba65a969ac918ce0cc3edfac6cdde847eba231dc", - "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc", + "url": "https://api.github.com/repos/symfony/string/zipball/758b372d6882506821ed666032e43020c4f57194", + "reference": "758b372d6882506821ed666032e43020c4f57194", "shasum": "" }, "require": { @@ -2683,7 +2683,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.0.1" + "source": "https://github.com/symfony/string/tree/v8.0.4" }, "funding": [ { @@ -2703,7 +2703,7 @@ "type": "tidelift" } ], - "time": "2025-12-01T09:13:36+00:00" + "time": "2026-01-12T12:37:40+00:00" } ], "packages-dev": [], diff --git a/vendor-bin/php-scoper/composer.lock b/vendor-bin/php-scoper/composer.lock index 520170e0..9a25b52f 100644 --- a/vendor-bin/php-scoper/composer.lock +++ b/vendor-bin/php-scoper/composer.lock @@ -491,16 +491,16 @@ }, { "name": "symfony/console", - "version": "v6.4.30", + "version": "v6.4.32", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "1b2813049506b39eb3d7e64aff033fd5ca26c97e" + "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/1b2813049506b39eb3d7e64aff033fd5ca26c97e", - "reference": "1b2813049506b39eb3d7e64aff033fd5ca26c97e", + "url": "https://api.github.com/repos/symfony/console/zipball/0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3", + "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3", "shasum": "" }, "require": { @@ -565,7 +565,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.30" + "source": "https://github.com/symfony/console/tree/v6.4.32" }, "funding": [ { @@ -585,7 +585,7 @@ "type": "tidelift" } ], - "time": "2025-12-05T13:47:41+00:00" + "time": "2026-01-13T08:45:59+00:00" }, { "name": "symfony/deprecation-contracts", @@ -802,16 +802,16 @@ }, { "name": "symfony/finder", - "version": "v6.4.27", + "version": "v6.4.33", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "a1b6aa435d2fba50793b994a839c32b6064f063b" + "reference": "24965ca011dac87431729640feef8bcf7b5523e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a1b6aa435d2fba50793b994a839c32b6064f063b", - "reference": "a1b6aa435d2fba50793b994a839c32b6064f063b", + "url": "https://api.github.com/repos/symfony/finder/zipball/24965ca011dac87431729640feef8bcf7b5523e0", + "reference": "24965ca011dac87431729640feef8bcf7b5523e0", "shasum": "" }, "require": { @@ -846,7 +846,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.27" + "source": "https://github.com/symfony/finder/tree/v6.4.33" }, "funding": [ { @@ -866,7 +866,7 @@ "type": "tidelift" } ], - "time": "2025-10-15T18:32:00+00:00" + "time": "2026-01-26T13:03:48+00:00" }, { "name": "symfony/polyfill-ctype", diff --git a/vendor-bin/phpunit/composer.lock b/vendor-bin/phpunit/composer.lock index 550588c6..b30d392b 100644 --- a/vendor-bin/phpunit/composer.lock +++ b/vendor-bin/phpunit/composer.lock @@ -9,30 +9,29 @@ "packages-dev": [ { "name": "doctrine/instantiator", - "version": "2.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + "reference": "23da848e1a2308728fe5fdddabf4be17ff9720c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/23da848e1a2308728fe5fdddabf4be17ff9720c7", + "reference": "23da848e1a2308728fe5fdddabf4be17ff9720c7", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^8.4" }, "require-dev": { - "doctrine/coding-standard": "^11", + "doctrine/coding-standard": "^14", "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" + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5.58" }, "type": "library", "autoload": { @@ -59,7 +58,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + "source": "https://github.com/doctrine/instantiator/tree/2.1.0" }, "funding": [ { @@ -75,7 +74,7 @@ "type": "tidelift" } ], - "time": "2022-12-30T00:23:10+00:00" + "time": "2026-01-05T06:47:08+00:00" }, { "name": "myclabs/deep-copy", @@ -634,16 +633,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.31", + "version": "9.6.34", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "945d0b7f346a084ce5549e95289962972c4272e5" + "reference": "b36f02317466907a230d3aa1d34467041271ef4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/945d0b7f346a084ce5549e95289962972c4272e5", - "reference": "945d0b7f346a084ce5549e95289962972c4272e5", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b36f02317466907a230d3aa1d34467041271ef4a", + "reference": "b36f02317466907a230d3aa1d34467041271ef4a", "shasum": "" }, "require": { @@ -665,7 +664,7 @@ "phpunit/php-timer": "^5.0.3", "sebastian/cli-parser": "^1.0.2", "sebastian/code-unit": "^1.0.8", - "sebastian/comparator": "^4.0.9", + "sebastian/comparator": "^4.0.10", "sebastian/diff": "^4.0.6", "sebastian/environment": "^5.1.5", "sebastian/exporter": "^4.0.8", @@ -717,7 +716,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.31" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.34" }, "funding": [ { @@ -741,7 +740,7 @@ "type": "tidelift" } ], - "time": "2025-12-06T07:45:52+00:00" + "time": "2026-01-27T05:45:00+00:00" }, { "name": "sebastian/cli-parser", @@ -912,16 +911,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.9", + "version": "4.0.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "67a2df3a62639eab2cc5906065e9805d4fd5dfc5" + "reference": "e4df00b9b3571187db2831ae9aada2c6efbd715d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/67a2df3a62639eab2cc5906065e9805d4fd5dfc5", - "reference": "67a2df3a62639eab2cc5906065e9805d4fd5dfc5", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e4df00b9b3571187db2831ae9aada2c6efbd715d", + "reference": "e4df00b9b3571187db2831ae9aada2c6efbd715d", "shasum": "" }, "require": { @@ -974,7 +973,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.9" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.10" }, "funding": [ { @@ -994,7 +993,7 @@ "type": "tidelift" } ], - "time": "2025-08-10T06:51:50+00:00" + "time": "2026-01-24T09:22:56+00:00" }, { "name": "sebastian/complexity", diff --git a/vendor-bin/psalm/composer.lock b/vendor-bin/psalm/composer.lock index 2c723e31..fad56c62 100644 --- a/vendor-bin/psalm/composer.lock +++ b/vendor-bin/psalm/composer.lock @@ -1038,22 +1038,22 @@ }, { "name": "danog/advanced-json-rpc", - "version": "v3.2.2", + "version": "v3.2.3", "source": { "type": "git", "url": "https://github.com/danog/php-advanced-json-rpc.git", - "reference": "aadb1c4068a88c3d0530cfe324b067920661efcb" + "reference": "ae703ea7b4811797a10590b6078de05b3b33dd91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/danog/php-advanced-json-rpc/zipball/aadb1c4068a88c3d0530cfe324b067920661efcb", - "reference": "aadb1c4068a88c3d0530cfe324b067920661efcb", + "url": "https://api.github.com/repos/danog/php-advanced-json-rpc/zipball/ae703ea7b4811797a10590b6078de05b3b33dd91", + "reference": "ae703ea7b4811797a10590b6078de05b3b33dd91", "shasum": "" }, "require": { "netresearch/jsonmapper": "^5", "php": ">=8.1", - "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0 || ^6" }, "replace": { "felixfbecker/php-advanced-json-rpc": "^3" @@ -1084,9 +1084,9 @@ "description": "A more advanced JSONRPC implementation", "support": { "issues": "https://github.com/danog/php-advanced-json-rpc/issues", - "source": "https://github.com/danog/php-advanced-json-rpc/tree/v3.2.2" + "source": "https://github.com/danog/php-advanced-json-rpc/tree/v3.2.3" }, - "time": "2025-02-14T10:55:15+00:00" + "time": "2026-01-12T21:07:10+00:00" }, { "name": "daverandom/libdns", @@ -1394,20 +1394,20 @@ }, { "name": "league/uri", - "version": "7.7.0", + "version": "7.8.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807" + "reference": "4436c6ec8d458e4244448b069cc572d088230b76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/8d587cddee53490f9b82bf203d3a9aa7ea4f9807", - "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76", + "reference": "4436c6ec8d458e4244448b069cc572d088230b76", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.7", + "league/uri-interfaces": "^7.8", "php": "^8.1", "psr/http-factory": "^1" }, @@ -1421,11 +1421,11 @@ "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", "ext-uri": "to use the PHP native URI class", - "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", - "league/uri-components": "Needed to easily manipulate URI objects components", - "league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", "php-64bit": "to improve IPV4 host parsing", - "rowbot/url": "to handle WHATWG URL", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -1480,7 +1480,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.7.0" + "source": "https://github.com/thephpleague/uri/tree/7.8.0" }, "funding": [ { @@ -1488,20 +1488,20 @@ "type": "github" } ], - "time": "2025-12-07T16:02:06+00:00" + "time": "2026-01-14T17:24:56+00:00" }, { "name": "league/uri-interfaces", - "version": "7.7.0", + "version": "7.8.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c" + "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/62ccc1a0435e1c54e10ee6022df28d6c04c2946c", - "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4", + "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4", "shasum": "" }, "require": { @@ -1514,7 +1514,7 @@ "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", "php-64bit": "to improve IPV4 host parsing", - "rowbot/url": "to handle WHATWG URL", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -1564,7 +1564,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.7.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0" }, "funding": [ { @@ -1572,7 +1572,7 @@ "type": "github" } ], - "time": "2025-12-07T16:03:21+00:00" + "time": "2026-01-15T06:54:53+00:00" }, { "name": "netresearch/jsonmapper", @@ -1738,16 +1738,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.5", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "90614c73d3800e187615e2dd236ad0e2a01bf761" + "reference": "2f5cbed597cb261d1ea458f3da3a9ad32e670b1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/90614c73d3800e187615e2dd236ad0e2a01bf761", - "reference": "90614c73d3800e187615e2dd236ad0e2a01bf761", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/2f5cbed597cb261d1ea458f3da3a9ad32e670b1e", + "reference": "2f5cbed597cb261d1ea458f3da3a9ad32e670b1e", "shasum": "" }, "require": { @@ -1755,9 +1755,9 @@ "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" + "phpdocumentor/type-resolver": "^2.0", + "phpstan/phpdoc-parser": "^2.0", + "webmozart/assert": "^1.9.1 || ^2" }, "require-dev": { "mockery/mockery": "~1.3.5 || ~1.6.0", @@ -1766,7 +1766,8 @@ "phpstan/phpstan-mockery": "^1.1", "phpstan/phpstan-webmozart-assert": "^1.2", "phpunit/phpunit": "^9.5", - "psalm/phar": "^5.26" + "psalm/phar": "^5.26", + "shipmonk/dead-code-detector": "^0.5.1" }, "type": "library", "extra": { @@ -1796,44 +1797,44 @@ "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.5" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.0.1" }, - "time": "2025-11-27T19:50:05+00:00" + "time": "2026-01-20T15:30:42+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.12.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195" + "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195", - "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/327a05bbee54120d4786a0dc67aad30226ad4cf9", + "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", - "php": "^7.3 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.18|^2.0" + "phpstan/phpdoc-parser": "^2.0" }, "require-dev": { "ext-tokenizer": "*", "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" + "psalm/phar": "^4" }, "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" + "dev-1.x": "1.x-dev", + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -1854,22 +1855,22 @@ "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.12.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/2.0.0" }, - "time": "2025-11-21T15:09:14+00:00" + "time": "2026-01-06T21:53:42+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "2.3.0", + "version": "2.3.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", - "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", "shasum": "" }, "require": { @@ -1901,9 +1902,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/2.3.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2" }, - "time": "2025-08-30T15:50:23+00:00" + "time": "2026-01-25T14:56:51+00:00" }, { "name": "psr/container", @@ -2325,16 +2326,16 @@ }, { "name": "symfony/console", - "version": "v6.4.30", + "version": "v6.4.32", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "1b2813049506b39eb3d7e64aff033fd5ca26c97e" + "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/1b2813049506b39eb3d7e64aff033fd5ca26c97e", - "reference": "1b2813049506b39eb3d7e64aff033fd5ca26c97e", + "url": "https://api.github.com/repos/symfony/console/zipball/0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3", + "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3", "shasum": "" }, "require": { @@ -2399,7 +2400,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.30" + "source": "https://github.com/symfony/console/tree/v6.4.32" }, "funding": [ { @@ -2419,7 +2420,7 @@ "type": "tidelift" } ], - "time": "2025-12-05T13:47:41+00:00" + "time": "2026-01-13T08:45:59+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2975,16 +2976,16 @@ }, { "name": "symfony/process", - "version": "v6.4.26", + "version": "v6.4.33", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "48bad913268c8cafabbf7034b39c8bb24fbc5ab8" + "reference": "c46e854e79b52d07666e43924a20cb6dc546644e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/48bad913268c8cafabbf7034b39c8bb24fbc5ab8", - "reference": "48bad913268c8cafabbf7034b39c8bb24fbc5ab8", + "url": "https://api.github.com/repos/symfony/process/zipball/c46e854e79b52d07666e43924a20cb6dc546644e", + "reference": "c46e854e79b52d07666e43924a20cb6dc546644e", "shasum": "" }, "require": { @@ -3016,7 +3017,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.26" + "source": "https://github.com/symfony/process/tree/v6.4.33" }, "funding": [ { @@ -3036,7 +3037,7 @@ "type": "tidelift" } ], - "time": "2025-09-11T09:57:09+00:00" + "time": "2026-01-23T16:02:12+00:00" }, { "name": "symfony/service-contracts", @@ -3127,16 +3128,16 @@ }, { "name": "symfony/string", - "version": "v7.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003" + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d50e862cb0a0e0886f73ca1f31b865efbb795003", - "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003", + "url": "https://api.github.com/repos/symfony/string/zipball/1c4b10461bf2ec27537b5f36105337262f5f5d6f", + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f", "shasum": "" }, "require": { @@ -3194,7 +3195,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.4.0" + "source": "https://github.com/symfony/string/tree/v7.4.4" }, "funding": [ { @@ -3214,20 +3215,20 @@ "type": "tidelift" } ], - "time": "2025-11-27T13:27:24+00:00" + "time": "2026-01-12T10:54:30+00:00" }, { "name": "vimeo/psalm", - "version": "6.14.2", + "version": "6.14.3", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "bbd217fc98c0daa0a13aea2a7f119d03ba3fc9a0" + "reference": "d0b040a91f280f071c1abcb1b77ce3822058725a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/bbd217fc98c0daa0a13aea2a7f119d03ba3fc9a0", - "reference": "bbd217fc98c0daa0a13aea2a7f119d03ba3fc9a0", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/d0b040a91f280f071c1abcb1b77ce3822058725a", + "reference": "d0b040a91f280f071c1abcb1b77ce3822058725a", "shasum": "" }, "require": { @@ -3253,8 +3254,8 @@ "php": "~8.1.31 || ~8.2.27 || ~8.3.16 || ~8.4.3 || ~8.5.0", "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0", "spatie/array-to-xml": "^2.17.0 || ^3.0", - "symfony/console": "^6.0 || ^7.0", - "symfony/filesystem": "~6.3.12 || ~6.4.3 || ^7.0.3", + "symfony/console": "^6.0 || ^7.0 || ^8.0", + "symfony/filesystem": "~6.3.12 || ~6.4.3 || ^7.0.3 || ^8.0", "symfony/polyfill-php84": "^1.31.0" }, "provide": { @@ -3276,7 +3277,7 @@ "psalm/plugin-phpunit": "^0.19", "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.6", - "symfony/process": "^6.0 || ^7.0" + "symfony/process": "^6.0 || ^7.0 || ^8.0" }, "suggest": { "ext-curl": "In order to send data to shepherd", @@ -3332,27 +3333,27 @@ "issues": "https://github.com/vimeo/psalm/issues", "source": "https://github.com/vimeo/psalm" }, - "time": "2025-12-11T08:58:52+00:00" + "time": "2025-12-23T15:36:48+00:00" }, { "name": "webmozart/assert", - "version": "1.12.1", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "9be6926d8b485f55b9229203f962b51ed377ba68" + "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/9be6926d8b485f55b9229203f962b51ed377ba68", - "reference": "9be6926d8b485f55b9229203f962b51ed377ba68", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", + "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", "shasum": "" }, "require": { "ext-ctype": "*", "ext-date": "*", "ext-filter": "*", - "php": "^7.2 || ^8.0" + "php": "^8.2" }, "suggest": { "ext-intl": "", @@ -3362,7 +3363,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10-dev" + "dev-feature/2-0": "2.0-dev" } }, "autoload": { @@ -3378,6 +3379,10 @@ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" + }, + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com" } ], "description": "Assertions to validate method input/output with nice error messages.", @@ -3388,9 +3393,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.12.1" + "source": "https://github.com/webmozarts/assert/tree/2.1.2" }, - "time": "2025-10-29T15:56:20+00:00" + "time": "2026-01-13T14:02:24+00:00" } ], "packages-dev": [ @@ -3400,16 +3405,16 @@ "source": { "type": "git", "url": "https://github.com/nextcloud-deps/ocp.git", - "reference": "4a157cd2b3b339cc2529de578bddc1d2e4b77507" + "reference": "a101733a740e3264643b76f6489515cb27c43c99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/4a157cd2b3b339cc2529de578bddc1d2e4b77507", - "reference": "4a157cd2b3b339cc2529de578bddc1d2e4b77507", + "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/a101733a740e3264643b76f6489515cb27c43c99", + "reference": "a101733a740e3264643b76f6489515cb27c43c99", "shasum": "" }, "require": { - "php": "~8.1 || ~8.2 || ~8.3 || ~8.4", + "php": "~8.1 || ~8.2 || ~8.3 || ~8.4 || ~8.5", "psr/clock": "^1.0", "psr/container": "^2.0.2", "psr/event-dispatcher": "^1.0", @@ -3419,7 +3424,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "33.0.0-dev" + "dev-master": "34.0.0-dev" } }, "notification-url": "https://packagist.org/downloads/", @@ -3441,7 +3446,7 @@ "issues": "https://github.com/nextcloud-deps/ocp/issues", "source": "https://github.com/nextcloud-deps/ocp/tree/master" }, - "time": "2025-12-19T00:55:34+00:00" + "time": "2026-01-29T01:05:54+00:00" }, { "name": "psr/clock", @@ -3815,16 +3820,16 @@ }, { "name": "sabre/vobject", - "version": "4.5.7", + "version": "4.5.8", "source": { "type": "git", "url": "https://github.com/sabre-io/vobject.git", - "reference": "ff22611a53782e90c97be0d0bc4a5f98a5c0a12c" + "reference": "d554eb24d64232922e1eab5896cc2f84b3b9ffb1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/vobject/zipball/ff22611a53782e90c97be0d0bc4a5f98a5c0a12c", - "reference": "ff22611a53782e90c97be0d0bc4a5f98a5c0a12c", + "url": "https://api.github.com/repos/sabre-io/vobject/zipball/d554eb24d64232922e1eab5896cc2f84b3b9ffb1", + "reference": "d554eb24d64232922e1eab5896cc2f84b3b9ffb1", "shasum": "" }, "require": { @@ -3915,7 +3920,7 @@ "issues": "https://github.com/sabre-io/vobject/issues", "source": "https://github.com/fruux/sabre-vobject" }, - "time": "2025-04-17T09:22:48+00:00" + "time": "2026-01-12T10:45:19+00:00" }, { "name": "sabre/xml", From 06cde844efc95008569483c520001197c473dd3d Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Mon, 30 Mar 2026 10:54:21 +0200 Subject: [PATCH 13/47] chore: Update php-scoper Signed-off-by: Marcel Klehr --- vendor-bin/php-scoper/composer.json | 4 +- vendor-bin/php-scoper/composer.lock | 514 ++++++++++++++++++++-------- 2 files changed, 375 insertions(+), 143 deletions(-) diff --git a/vendor-bin/php-scoper/composer.json b/vendor-bin/php-scoper/composer.json index 84babd30..1e2c2fb5 100644 --- a/vendor-bin/php-scoper/composer.json +++ b/vendor-bin/php-scoper/composer.json @@ -1,11 +1,11 @@ { "require": { - "humbug/php-scoper": "^0.18", + "humbug/php-scoper": "0.18.x", "cweagans/composer-patches": "^1.7" }, "config": { "platform": { - "php": "8.1" + "php": "8.2" }, "allow-plugins": { "cweagans/composer-patches": true diff --git a/vendor-bin/php-scoper/composer.lock b/vendor-bin/php-scoper/composer.lock index 9a25b52f..f997e25c 100644 --- a/vendor-bin/php-scoper/composer.lock +++ b/vendor-bin/php-scoper/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": "d3fc98d5174d04efc06f00c0c31bc0a7", + "content-hash": "6b203b4405890920a7d6c71dde7574d7", "packages": [ { "name": "cweagans/composer-patches", @@ -56,44 +56,46 @@ }, { "name": "fidry/console", - "version": "0.5.5", + "version": "0.6.11", "source": { "type": "git", "url": "https://github.com/theofidry/console.git", - "reference": "bc1fe03f600c63f12ec0a39c6b746c1a1fb77bf7" + "reference": "bea8316beae874fc5b8be679d67dd3169c7e205f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/console/zipball/bc1fe03f600c63f12ec0a39c6b746c1a1fb77bf7", - "reference": "bc1fe03f600c63f12ec0a39c6b746c1a1fb77bf7", + "url": "https://api.github.com/repos/theofidry/console/zipball/bea8316beae874fc5b8be679d67dd3169c7e205f", + "reference": "bea8316beae874fc5b8be679d67dd3169c7e205f", "shasum": "" }, "require": { - "php": "^7.4.0 || ^8.0.0", - "symfony/console": "^4.4 || ^5.4 || ^6.1", - "symfony/event-dispatcher-contracts": "^1.0 || ^2.5 || ^3.0", - "symfony/service-contracts": "^1.0 || ^2.5 || ^3.0", - "thecodingmachine/safe": "^1.3 || ^2.0", + "php": "^8.2", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/console": "^6.4 || ^7.2", + "symfony/deprecation-contracts": "^3.4", + "symfony/event-dispatcher-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php84": "^1.31", + "symfony/service-contracts": "^2.5 || ^3.0", + "thecodingmachine/safe": "^2.0 || ^3.0", "webmozart/assert": "^1.11" }, "conflict": { - "symfony/dependency-injection": "<5.3.0", - "symfony/framework-bundle": "<5.3.0", - "symfony/http-kernel": "<5.3.0" + "symfony/dependency-injection": "<6.4.0 || >=7.0.0 <7.2.0", + "symfony/framework-bundle": "<6.4.0 || >=7.0.0 <7.2.0", + "symfony/http-kernel": "<6.4.0 || >=7.0.0 <7.2.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4", - "composer/semver": "^3.3", - "ergebnis/composer-normalize": "^2.28", - "infection/infection": "^0.26", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.4.3", - "symfony/dependency-injection": "^4.4 || ^5.4 || ^6.1", - "symfony/framework-bundle": "^4.4 || ^5.4 || ^6.1", - "symfony/http-kernel": "^4.4 || ^5.4 || ^6.1", - "symfony/phpunit-bridge": "^4.4.47 || ^5.4 || ^6.0", - "symfony/yaml": "^4.4 || ^5.4 || ^6.1", - "webmozarts/strict-phpunit": "^7.3" + "bamarni/composer-bin-plugin": "^1.8.2", + "composer/semver": "^3.3.2", + "ergebnis/composer-normalize": "^2.33", + "fidry/makefile": "^0.2.1 || ^1.0.0", + "infection/infection": "^0.28", + "phpunit/phpunit": "^10.2", + "symfony/dependency-injection": "^6.4 || ^7.2", + "symfony/flex": "^2.4.0", + "symfony/framework-bundle": "^6.4 || ^7.2", + "symfony/http-kernel": "^6.4 || ^7.2", + "symfony/yaml": "^6.4 || ^7.2" }, "type": "library", "extra": { @@ -128,7 +130,7 @@ ], "support": { "issues": "https://github.com/theofidry/console/issues", - "source": "https://github.com/theofidry/console/tree/0.5.5" + "source": "https://github.com/theofidry/console/tree/0.6.11" }, "funding": [ { @@ -136,7 +138,7 @@ "type": "github" } ], - "time": "2022-12-18T10:49:34+00:00" + "time": "2025-02-14T11:06:15+00:00" }, { "name": "fidry/filesystem", @@ -206,37 +208,38 @@ }, { "name": "humbug/php-scoper", - "version": "0.18.7", + "version": "0.18.18", "source": { "type": "git", "url": "https://github.com/humbug/php-scoper.git", - "reference": "9386a0af946f175d7a1ebfb68851bc2bb8ad7858" + "reference": "dd55d01a937602c9473cfbe0ecab9521cb9740aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/humbug/php-scoper/zipball/9386a0af946f175d7a1ebfb68851bc2bb8ad7858", - "reference": "9386a0af946f175d7a1ebfb68851bc2bb8ad7858", + "url": "https://api.github.com/repos/humbug/php-scoper/zipball/dd55d01a937602c9473cfbe0ecab9521cb9740aa", + "reference": "dd55d01a937602c9473cfbe0ecab9521cb9740aa", "shasum": "" }, "require": { - "fidry/console": "^0.5.0", + "fidry/console": "^0.6.10", "fidry/filesystem": "^1.1", - "jetbrains/phpstorm-stubs": "^v2022.2", - "nikic/php-parser": "^4.12", - "php": "^8.1", - "symfony/console": "^5.2 || ^6.0", - "symfony/filesystem": "^5.2 || ^6.0", - "symfony/finder": "^5.2 || ^6.0", - "thecodingmachine/safe": "^2.0" + "jetbrains/phpstorm-stubs": "^2024.1", + "nikic/php-parser": "^5.0", + "php": "^8.2", + "symfony/console": "^6.4 || ^7.0", + "symfony/filesystem": "^6.4 || ^7.0", + "symfony/finder": "^6.4 || ^7.0", + "symfony/var-dumper": "^7.1", + "thecodingmachine/safe": "^3.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.1", "ergebnis/composer-normalize": "^2.28", "fidry/makefile": "^1.0", - "humbug/box": "^4.5.1", + "humbug/box": "^4.6.2", "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.0", - "symfony/yaml": "^6.1" + "phpunit/phpunit": "^10.0 || ^11.0", + "symfony/yaml": "^6.4 || ^7.0" }, "bin": [ "bin/php-scoper" @@ -283,30 +286,29 @@ "description": "Prefixes all PHP namespaces in a file or directory.", "support": { "issues": "https://github.com/humbug/php-scoper/issues", - "source": "https://github.com/humbug/php-scoper/tree/0.18.7" + "source": "https://github.com/humbug/php-scoper/tree/0.18.18" }, - "time": "2023-11-04T18:01:12+00:00" + "time": "2025-10-15T15:29:47+00:00" }, { "name": "jetbrains/phpstorm-stubs", - "version": "v2022.3", + "version": "v2024.3", "source": { "type": "git", "url": "https://github.com/JetBrains/phpstorm-stubs.git", - "reference": "6b568c153cea002dc6fad96285c3063d07cab18d" + "reference": "0e82bdfe850c71857ee4ee3501ed82a9fc5d043c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/6b568c153cea002dc6fad96285c3063d07cab18d", - "reference": "6b568c153cea002dc6fad96285c3063d07cab18d", + "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/0e82bdfe850c71857ee4ee3501ed82a9fc5d043c", + "reference": "0e82bdfe850c71857ee4ee3501ed82a9fc5d043c", "shasum": "" }, "require-dev": { - "friendsofphp/php-cs-fixer": "@stable", - "nikic/php-parser": "@stable", - "php": "^8.0", - "phpdocumentor/reflection-docblock": "@stable", - "phpunit/phpunit": "@stable" + "friendsofphp/php-cs-fixer": "v3.64.0", + "nikic/php-parser": "v5.3.1", + "phpdocumentor/reflection-docblock": "5.6.0", + "phpunit/phpunit": "11.4.3" }, "type": "library", "autoload": { @@ -331,36 +333,43 @@ "type" ], "support": { - "source": "https://github.com/JetBrains/phpstorm-stubs/tree/v2022.3" + "source": "https://github.com/JetBrains/phpstorm-stubs/tree/v2024.3" }, - "time": "2022-10-17T09:21:37+00:00" + "time": "2024-12-14T08:03:12+00:00" }, { "name": "nikic/php-parser", - "version": "v4.19.5", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "51bd93cc741b7fc3d63d20b6bdcd99fdaa359837" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/51bd93cc741b7fc3d63d20b6bdcd99fdaa359837", - "reference": "51bd93cc741b7fc3d63d20b6bdcd99fdaa359837", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.1" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, "autoload": { "psr-4": { "PhpParser\\": "lib/PhpParser" @@ -382,9 +391,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.5" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2025-12-06T11:45:25+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "psr/container", @@ -489,49 +498,99 @@ }, "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": "symfony/console", - "version": "v6.4.32", + "version": "v7.4.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3" + "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3", - "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3", + "url": "https://api.github.com/repos/symfony/console/zipball/e1e6770440fb9c9b0cf725f81d1361ad1835329d", + "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^7.2|^8.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "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": "^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-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -565,7 +624,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.32" + "source": "https://github.com/symfony/console/tree/v7.4.7" }, "funding": [ { @@ -585,7 +644,7 @@ "type": "tidelift" } ], - "time": "2026-01-13T08:45:59+00:00" + "time": "2026-03-06T14:06:20+00:00" }, { "name": "symfony/deprecation-contracts", @@ -732,25 +791,25 @@ }, { "name": "symfony/filesystem", - "version": "v6.4.30", + "version": "v7.4.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "441c6b69f7222aadae7cbf5df588496d5ee37789" + "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/441c6b69f7222aadae7cbf5df588496d5ee37789", - "reference": "441c6b69f7222aadae7cbf5df588496d5ee37789", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/3ebc794fa5315e59fd122561623c2e2e4280538e", + "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^5.4|^6.4|^7.0" + "symfony/process": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -778,7 +837,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.30" + "source": "https://github.com/symfony/filesystem/tree/v7.4.6" }, "funding": [ { @@ -798,27 +857,27 @@ "type": "tidelift" } ], - "time": "2025-11-26T14:43:45+00:00" + "time": "2026-02-25T16:50:00+00:00" }, { "name": "symfony/finder", - "version": "v6.4.33", + "version": "v7.4.6", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "24965ca011dac87431729640feef8bcf7b5523e0" + "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/24965ca011dac87431729640feef8bcf7b5523e0", - "reference": "24965ca011dac87431729640feef8bcf7b5523e0", + "url": "https://api.github.com/repos/symfony/finder/zipball/8655bf1076b7a3a346cb11413ffdabff50c7ffcf", + "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0|^7.0" + "symfony/filesystem": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -846,7 +905,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.33" + "source": "https://github.com/symfony/finder/tree/v7.4.6" }, "funding": [ { @@ -866,7 +925,7 @@ "type": "tidelift" } ], - "time": "2026-01-26T13:03:48+00:00" + "time": "2026-01-29T09:40:50+00:00" }, { "name": "symfony/polyfill-ctype", @@ -1203,6 +1262,86 @@ ], "time": "2024-12-23T08:48:59+00:00" }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" + }, { "name": "symfony/service-contracts", "version": "v3.6.1", @@ -1292,22 +1431,23 @@ }, { "name": "symfony/string", - "version": "v6.4.30", + "version": "v7.4.6", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "50590a057841fa6bf69d12eceffce3465b9e32cb" + "reference": "9f209231affa85aa930a5e46e6eb03381424b30b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/50590a057841fa6bf69d12eceffce3465b9e32cb", - "reference": "50590a057841fa6bf69d12eceffce3465b9e32cb", + "url": "https://api.github.com/repos/symfony/string/zipball/9f209231affa85aa930a5e46e6eb03381424b30b", + "reference": "9f209231affa85aa930a5e46e6eb03381424b30b", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-grapheme": "~1.33", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, @@ -1315,10 +1455,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/intl": "^6.2|^7.0", + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -1357,7 +1498,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.30" + "source": "https://github.com/symfony/string/tree/v7.4.6" }, "funding": [ { @@ -1377,50 +1518,122 @@ "type": "tidelift" } ], - "time": "2025-11-21T18:03:05+00:00" + "time": "2026-02-09T09:33:46+00:00" }, { - "name": "thecodingmachine/safe", - "version": "v2.5.0", + "name": "symfony/var-dumper", + "version": "v7.4.6", "source": { "type": "git", - "url": "https://github.com/thecodingmachine/safe.git", - "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0" + "url": "https://github.com/symfony/var-dumper.git", + "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0", - "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/045321c440ac18347b136c63d2e9bf28a2dc0291", + "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291", "shasum": "" }, "require": { - "php": "^8.0" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" }, "require-dev": { - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "^3.2", - "thecodingmachine/phpstan-strict-rules": "^1.0" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" }, + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" + "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.4.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-02-15T10:53:20+00:00" + }, + { + "name": "thecodingmachine/safe", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/thecodingmachine/safe.git", + "reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19" }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/705683a25bacf0d4860c7dea4d7947bfd09eea19", + "reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^10", + "squizlabs/php_codesniffer": "^3.2" + }, + "type": "library", "autoload": { "files": [ - "deprecated/apc.php", - "deprecated/array.php", - "deprecated/datetime.php", - "deprecated/libevent.php", - "deprecated/misc.php", - "deprecated/password.php", - "deprecated/mssql.php", - "deprecated/stats.php", - "deprecated/strings.php", "lib/special_cases.php", - "deprecated/mysqli.php", "generated/apache.php", "generated/apcu.php", "generated/array.php", @@ -1460,6 +1673,7 @@ "generated/mbstring.php", "generated/misc.php", "generated/mysql.php", + "generated/mysqli.php", "generated/network.php", "generated/oci8.php", "generated/opcache.php", @@ -1472,6 +1686,7 @@ "generated/ps.php", "generated/pspell.php", "generated/readline.php", + "generated/rnp.php", "generated/rpminfo.php", "generated/rrd.php", "generated/sem.php", @@ -1503,7 +1718,6 @@ "lib/DateTime.php", "lib/DateTimeImmutable.php", "lib/Exceptions/", - "deprecated/Exceptions/", "generated/Exceptions/" ] }, @@ -1514,9 +1728,27 @@ "description": "PHP core functions that throw exceptions instead of returning FALSE on error", "support": { "issues": "https://github.com/thecodingmachine/safe/issues", - "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0" + "source": "https://github.com/thecodingmachine/safe/tree/v3.4.0" }, - "time": "2023-04-05T11:54:14+00:00" + "funding": [ + { + "url": "https://github.com/OskarStark", + "type": "github" + }, + { + "url": "https://github.com/shish", + "type": "github" + }, + { + "url": "https://github.com/silasjoisten", + "type": "github" + }, + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2026-02-04T18:08:13+00:00" }, { "name": "webmozart/assert", @@ -1586,7 +1818,7 @@ "platform": {}, "platform-dev": {}, "platform-overrides": { - "php": "8.1" + "php": "8.2" }, "plugin-api-version": "2.6.0" } From e5601ce2420a602bf083bd4b09ebb78b09de2cfb Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Mon, 30 Mar 2026 10:59:17 +0200 Subject: [PATCH 14/47] chore: Update psalm and php-cs-fixer Signed-off-by: Marcel Klehr --- vendor-bin/php-cs-fixer/composer.lock | 110 +++++++++++--------- vendor-bin/psalm/composer.lock | 138 +++++++++++++------------- 2 files changed, 130 insertions(+), 118 deletions(-) diff --git a/vendor-bin/php-cs-fixer/composer.lock b/vendor-bin/php-cs-fixer/composer.lock index 9d16cd3c..d2e9c7bc 100644 --- a/vendor-bin/php-cs-fixer/composer.lock +++ b/vendor-bin/php-cs-fixer/composer.lock @@ -402,16 +402,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.93.1", + "version": "v3.94.2", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "b3546ab487c0762c39f308dc1ec0ea2c461fc21a" + "reference": "7787ceff91365ba7d623ec410b8f429cdebb4f63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b3546ab487c0762c39f308dc1ec0ea2c461fc21a", - "reference": "b3546ab487c0762c39f308dc1ec0ea2c461fc21a", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/7787ceff91365ba7d623ec410b8f429cdebb4f63", + "reference": "7787ceff91365ba7d623ec410b8f429cdebb4f63", "shasum": "" }, "require": { @@ -428,7 +428,7 @@ "react/event-loop": "^1.5", "react/socket": "^1.16", "react/stream": "^1.4", - "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0", + "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0 || ^8.0", "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0", "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", @@ -442,18 +442,18 @@ "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0" }, "require-dev": { - "facile-it/paraunit": "^1.3.1 || ^2.7", - "infection/infection": "^0.32", - "justinrainbow/json-schema": "^6.6", + "facile-it/paraunit": "^1.3.1 || ^2.7.1", + "infection/infection": "^0.32.3", + "justinrainbow/json-schema": "^6.6.4", "keradus/cli-executor": "^2.3", "mikey179/vfsstream": "^1.6.12", - "php-coveralls/php-coveralls": "^2.9", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", - "phpunit/phpunit": "^9.6.31 || ^10.5.60 || ^11.5.48", + "php-coveralls/php-coveralls": "^2.9.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.7", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.7", + "phpunit/phpunit": "^9.6.34 || ^10.5.63 || ^11.5.51", "symfony/polyfill-php85": "^1.33", - "symfony/var-dumper": "^5.4.48 || ^6.4.26 || ^7.4.0 || ^8.0", - "symfony/yaml": "^5.4.45 || ^6.4.30 || ^7.4.1 || ^8.0" + "symfony/var-dumper": "^5.4.48 || ^6.4.32 || ^7.4.4 || ^8.0.4", + "symfony/yaml": "^5.4.45 || ^6.4.30 || ^7.4.1 || ^8.0.1" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -494,7 +494,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.93.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.94.2" }, "funding": [ { @@ -502,7 +502,7 @@ "type": "github" } ], - "time": "2026-01-28T23:50:50+00:00" + "time": "2026-02-20T16:13:53+00:00" }, { "name": "nextcloud/coding-standard", @@ -1226,29 +1226,29 @@ }, { "name": "sebastian/diff", - "version": "7.0.0", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "7ab1ea946c012266ca32390913653d844ecd085f" + "reference": "a2b6d09d7729ee87d605a439469f9dcc39be5ea3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", - "reference": "7ab1ea946c012266ca32390913653d844ecd085f", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/a2b6d09d7729ee87d605a439469f9dcc39be5ea3", + "reference": "a2b6d09d7729ee87d605a439469f9dcc39be5ea3", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0", + "phpunit/phpunit": "^13.0", "symfony/process": "^7.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -1281,28 +1281,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" + "source": "https://github.com/sebastianbergmann/diff/tree/8.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/diff", + "type": "tidelift" } ], - "time": "2025-02-07T04:55:46+00:00" + "time": "2026-02-06T04:42:27+00:00" }, { "name": "symfony/console", - "version": "v8.0.4", + "version": "v8.0.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "ace03c4cf9805080ff40cbeec69fca180c339a3b" + "reference": "15ed9008a4ebe2d6a78e4937f74e0c13ef2e618a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ace03c4cf9805080ff40cbeec69fca180c339a3b", - "reference": "ace03c4cf9805080ff40cbeec69fca180c339a3b", + "url": "https://api.github.com/repos/symfony/console/zipball/15ed9008a4ebe2d6a78e4937f74e0c13ef2e618a", + "reference": "15ed9008a4ebe2d6a78e4937f74e0c13ef2e618a", "shasum": "" }, "require": { @@ -1359,7 +1371,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v8.0.4" + "source": "https://github.com/symfony/console/tree/v8.0.7" }, "funding": [ { @@ -1379,7 +1391,7 @@ "type": "tidelift" } ], - "time": "2026-01-13T13:06:50+00:00" + "time": "2026-03-06T14:06:22+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1611,16 +1623,16 @@ }, { "name": "symfony/filesystem", - "version": "v8.0.1", + "version": "v8.0.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "d937d400b980523dc9ee946bb69972b5e619058d" + "reference": "7bf9162d7a0dff98d079b72948508fa48018a770" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/d937d400b980523dc9ee946bb69972b5e619058d", - "reference": "d937d400b980523dc9ee946bb69972b5e619058d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/7bf9162d7a0dff98d079b72948508fa48018a770", + "reference": "7bf9162d7a0dff98d079b72948508fa48018a770", "shasum": "" }, "require": { @@ -1657,7 +1669,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v8.0.1" + "source": "https://github.com/symfony/filesystem/tree/v8.0.6" }, "funding": [ { @@ -1677,20 +1689,20 @@ "type": "tidelift" } ], - "time": "2025-12-01T09:13:36+00:00" + "time": "2026-02-25T16:59:43+00:00" }, { "name": "symfony/finder", - "version": "v8.0.5", + "version": "v8.0.6", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "8bd576e97c67d45941365bf824e18dc8538e6eb0" + "reference": "441404f09a54de6d1bd6ad219e088cdf4c91f97c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/8bd576e97c67d45941365bf824e18dc8538e6eb0", - "reference": "8bd576e97c67d45941365bf824e18dc8538e6eb0", + "url": "https://api.github.com/repos/symfony/finder/zipball/441404f09a54de6d1bd6ad219e088cdf4c91f97c", + "reference": "441404f09a54de6d1bd6ad219e088cdf4c91f97c", "shasum": "" }, "require": { @@ -1725,7 +1737,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v8.0.5" + "source": "https://github.com/symfony/finder/tree/v8.0.6" }, "funding": [ { @@ -1745,7 +1757,7 @@ "type": "tidelift" } ], - "time": "2026-01-26T15:08:38+00:00" + "time": "2026-01-29T09:41:02+00:00" }, { "name": "symfony/options-resolver", @@ -2617,16 +2629,16 @@ }, { "name": "symfony/string", - "version": "v8.0.4", + "version": "v8.0.6", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "758b372d6882506821ed666032e43020c4f57194" + "reference": "6c9e1108041b5dce21a9a4984b531c4923aa9ec4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/758b372d6882506821ed666032e43020c4f57194", - "reference": "758b372d6882506821ed666032e43020c4f57194", + "url": "https://api.github.com/repos/symfony/string/zipball/6c9e1108041b5dce21a9a4984b531c4923aa9ec4", + "reference": "6c9e1108041b5dce21a9a4984b531c4923aa9ec4", "shasum": "" }, "require": { @@ -2683,7 +2695,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.0.4" + "source": "https://github.com/symfony/string/tree/v8.0.6" }, "funding": [ { @@ -2703,7 +2715,7 @@ "type": "tidelift" } ], - "time": "2026-01-12T12:37:40+00:00" + "time": "2026-02-09T10:14:57+00:00" } ], "packages-dev": [], diff --git a/vendor-bin/psalm/composer.lock b/vendor-bin/psalm/composer.lock index fad56c62..f5e4adc3 100644 --- a/vendor-bin/psalm/composer.lock +++ b/vendor-bin/psalm/composer.lock @@ -1171,29 +1171,29 @@ }, { "name": "doctrine/deprecations", - "version": "1.1.5", + "version": "1.1.6", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "conflict": { - "phpunit/phpunit": "<=7.5 || >=13" + "phpunit/phpunit": "<=7.5 || >=14" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^13", - "phpstan/phpstan": "1.4.10 || 2.1.11", + "doctrine/coding-standard": "^9 || ^12 || ^14", + "phpstan/phpstan": "1.4.10 || 2.1.30", "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", "psr/log": "^1 || ^2 || ^3" }, "suggest": { @@ -1213,9 +1213,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + "source": "https://github.com/doctrine/deprecations/tree/1.1.6" }, - "time": "2025-04-07T20:06:18+00:00" + "time": "2026-02-07T07:09:04+00:00" }, { "name": "felixfbecker/language-server-protocol", @@ -1394,20 +1394,20 @@ }, { "name": "league/uri", - "version": "7.8.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "4436c6ec8d458e4244448b069cc572d088230b76" + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76", - "reference": "4436c6ec8d458e4244448b069cc572d088230b76", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.8", + "league/uri-interfaces": "^7.8.1", "php": "^8.1", "psr/http-factory": "^1" }, @@ -1480,7 +1480,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.8.0" + "source": "https://github.com/thephpleague/uri/tree/7.8.1" }, "funding": [ { @@ -1488,20 +1488,20 @@ "type": "github" } ], - "time": "2026-01-14T17:24:56+00:00" + "time": "2026-03-15T20:22:25+00:00" }, { "name": "league/uri-interfaces", - "version": "7.8.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4" + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4", - "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", "shasum": "" }, "require": { @@ -1564,7 +1564,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1" }, "funding": [ { @@ -1572,20 +1572,20 @@ "type": "github" } ], - "time": "2026-01-15T06:54:53+00:00" + "time": "2026-03-08T20:05:35+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v5.0.0", + "version": "v5.0.1", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c" + "reference": "980674efdda65913492d29a8fd51c82270dd37bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c", - "reference": "8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/980674efdda65913492d29a8fd51c82270dd37bb", + "reference": "980674efdda65913492d29a8fd51c82270dd37bb", "shasum": "" }, "require": { @@ -1621,9 +1621,9 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v5.0.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v5.0.1" }, - "time": "2024-09-08T10:20:00+00:00" + "time": "2026-02-22T16:28:03+00:00" }, { "name": "nikic/php-parser", @@ -1738,16 +1738,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "6.0.1", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "2f5cbed597cb261d1ea458f3da3a9ad32e670b1e" + "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/2f5cbed597cb261d1ea458f3da3a9ad32e670b1e", - "reference": "2f5cbed597cb261d1ea458f3da3a9ad32e670b1e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/7bae67520aa9f5ecc506d646810bd40d9da54582", + "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582", "shasum": "" }, "require": { @@ -1797,9 +1797,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/6.0.1" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.0.3" }, - "time": "2026-01-20T15:30:42+00:00" + "time": "2026-03-18T20:49:53+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -2326,16 +2326,16 @@ }, { "name": "symfony/console", - "version": "v6.4.32", + "version": "v6.4.35", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3" + "reference": "49257c96304c508223815ee965c251e7c79e614e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3", - "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3", + "url": "https://api.github.com/repos/symfony/console/zipball/49257c96304c508223815ee965c251e7c79e614e", + "reference": "49257c96304c508223815ee965c251e7c79e614e", "shasum": "" }, "require": { @@ -2400,7 +2400,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.32" + "source": "https://github.com/symfony/console/tree/v6.4.35" }, "funding": [ { @@ -2420,7 +2420,7 @@ "type": "tidelift" } ], - "time": "2026-01-13T08:45:59+00:00" + "time": "2026-03-06T13:31:08+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2491,16 +2491,16 @@ }, { "name": "symfony/filesystem", - "version": "v7.4.0", + "version": "v7.4.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "d551b38811096d0be9c4691d406991b47c0c630a" + "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/d551b38811096d0be9c4691d406991b47c0c630a", - "reference": "d551b38811096d0be9c4691d406991b47c0c630a", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/3ebc794fa5315e59fd122561623c2e2e4280538e", + "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e", "shasum": "" }, "require": { @@ -2537,7 +2537,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.0" + "source": "https://github.com/symfony/filesystem/tree/v7.4.6" }, "funding": [ { @@ -2557,7 +2557,7 @@ "type": "tidelift" } ], - "time": "2025-11-27T13:27:24+00:00" + "time": "2026-02-25T16:50:00+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3128,16 +3128,16 @@ }, { "name": "symfony/string", - "version": "v7.4.4", + "version": "v7.4.6", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f" + "reference": "9f209231affa85aa930a5e46e6eb03381424b30b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/1c4b10461bf2ec27537b5f36105337262f5f5d6f", - "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f", + "url": "https://api.github.com/repos/symfony/string/zipball/9f209231affa85aa930a5e46e6eb03381424b30b", + "reference": "9f209231affa85aa930a5e46e6eb03381424b30b", "shasum": "" }, "require": { @@ -3195,7 +3195,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.4.4" + "source": "https://github.com/symfony/string/tree/v7.4.6" }, "funding": [ { @@ -3215,20 +3215,20 @@ "type": "tidelift" } ], - "time": "2026-01-12T10:54:30+00:00" + "time": "2026-02-09T09:33:46+00:00" }, { "name": "vimeo/psalm", - "version": "6.14.3", + "version": "6.16.1", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "d0b040a91f280f071c1abcb1b77ce3822058725a" + "reference": "f1f5de594dc76faf8784e02d3dc4716c91c6f6ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/d0b040a91f280f071c1abcb1b77ce3822058725a", - "reference": "d0b040a91f280f071c1abcb1b77ce3822058725a", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/f1f5de594dc76faf8784e02d3dc4716c91c6f6ac", + "reference": "f1f5de594dc76faf8784e02d3dc4716c91c6f6ac", "shasum": "" }, "require": { @@ -3252,7 +3252,7 @@ "netresearch/jsonmapper": "^5.0", "nikic/php-parser": "^5.0.0", "php": "~8.1.31 || ~8.2.27 || ~8.3.16 || ~8.4.3 || ~8.5.0", - "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0", "spatie/array-to-xml": "^2.17.0 || ^3.0", "symfony/console": "^6.0 || ^7.0 || ^8.0", "symfony/filesystem": "~6.3.12 || ~6.4.3 || ^7.0.3 || ^8.0", @@ -3333,20 +3333,20 @@ "issues": "https://github.com/vimeo/psalm/issues", "source": "https://github.com/vimeo/psalm" }, - "time": "2025-12-23T15:36:48+00:00" + "time": "2026-03-19T10:56:09+00:00" }, { "name": "webmozart/assert", - "version": "2.1.2", + "version": "2.1.6", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649" + "reference": "ff31ad6efc62e66e518fbab1cde3453d389bcdc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", - "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/ff31ad6efc62e66e518fbab1cde3453d389bcdc8", + "reference": "ff31ad6efc62e66e518fbab1cde3453d389bcdc8", "shasum": "" }, "require": { @@ -3393,9 +3393,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.1.2" + "source": "https://github.com/webmozarts/assert/tree/2.1.6" }, - "time": "2026-01-13T14:02:24+00:00" + "time": "2026-02-27T10:28:38+00:00" } ], "packages-dev": [ @@ -3405,12 +3405,12 @@ "source": { "type": "git", "url": "https://github.com/nextcloud-deps/ocp.git", - "reference": "a101733a740e3264643b76f6489515cb27c43c99" + "reference": "cd912d2ba9fca6027ee4d0a55fd06c41c75af4d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/a101733a740e3264643b76f6489515cb27c43c99", - "reference": "a101733a740e3264643b76f6489515cb27c43c99", + "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/cd912d2ba9fca6027ee4d0a55fd06c41c75af4d2", + "reference": "cd912d2ba9fca6027ee4d0a55fd06c41c75af4d2", "shasum": "" }, "require": { @@ -3446,7 +3446,7 @@ "issues": "https://github.com/nextcloud-deps/ocp/issues", "source": "https://github.com/nextcloud-deps/ocp/tree/master" }, - "time": "2026-01-29T01:05:54+00:00" + "time": "2026-03-27T01:17:33+00:00" }, { "name": "psr/clock", From cf71b27842345d09a3caccc5ec5dfae0974ea748 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Mon, 30 Mar 2026 11:01:23 +0200 Subject: [PATCH 15/47] chore: Fix deprecated API usage Signed-off-by: Marcel Klehr --- tests/ClassifierTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/ClassifierTest.php b/tests/ClassifierTest.php index d549df67..dbbfc429 100644 --- a/tests/ClassifierTest.php +++ b/tests/ClassifierTest.php @@ -72,7 +72,7 @@ public static function setUpBeforeClass(): void { public function setUp(): void { parent::setUp(); - $this->rootFolder = \OC::$server->getRootFolder(); + $this->rootFolder = \OCP\Server::get(IRootFolder::class); $this->userFolder = $this->loginAndGetUserFolder(self::TEST_USER1); $this->faceDetectionMapper = \OC::$server->get(FaceDetectionMapper::class); $logger = \OC::$server->get(Logger::class); From b21a9de97610e462d9af4247239c03edc5f075b2 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Mon, 30 Mar 2026 11:14:42 +0200 Subject: [PATCH 16/47] chore: Fix barmani-bin interaction with php-scoper Signed-off-by: Marcel Klehr --- composer.json | 88 ++++++++++++++++++++++++++------------------------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/composer.json b/composer.json index 3b785d00..66b35278 100644 --- a/composer.json +++ b/composer.json @@ -1,47 +1,49 @@ { - "require": { - "php": ">=8.2", - "ext-json": "*", - "ext-pdo": "*", - "rubix/ml": "2.x", - "amphp\/parallel": "1.4.x", - "wamania/php-stemmer": "4.0 as 3.0", - "bamarni/composer-bin-plugin": "^1.8" - }, - "autoload": { - "psr-4": { - "OCA\\Recognize\\": "lib/" - } + "require": { + "php": ">=8.2", + "ext-json": "*", + "ext-pdo": "*", + "rubix/ml": "2.x", + "amphp/parallel": "1.4.x", + "wamania/php-stemmer": "4.0 as 3.0", + "bamarni/composer-bin-plugin": "^1.8" + }, + "autoload": { + "psr-4": { + "OCA\\Recognize\\": "lib/" + } + }, + "scripts": { + "lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l", + "cs:check": "php-cs-fixer fix --dry-run --diff", + "cs:fix": "php-cs-fixer fix", + "psalm": "psalm", + "psalm:update-baseline": "psalm --threads=1 --update-baseline", + "psalm:update-baseline:force": "psalm --threads=1 --update-baseline --set-baseline=psalm-baseline.xml", + "test:unit": "phpunit --config tests/phpunit.xml", + "post-install-cmd": [ + "@composer bin all install --ansi", + "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\".\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\"", + "@composer bin all install --ansi", + "composer dump-autoload" + ], + "post-update-cmd": [ + "@composer bin all update --ansi", + "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\".\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\"", + "@composer bin all install --ansi", + "composer dump-autoload" + ] + }, + "config": { + "platform": { + "php": "8.2.0" }, - "scripts": { - "lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l", - "cs:check": "php-cs-fixer fix --dry-run --diff", - "cs:fix": "php-cs-fixer fix", - "psalm": "psalm", - "psalm:update-baseline": "psalm --threads=1 --update-baseline", - "psalm:update-baseline:force": "psalm --threads=1 --update-baseline --set-baseline=psalm-baseline.xml", - "test:unit": "phpunit --config tests/phpunit.xml", - "post-install-cmd": [ - "@composer bin all install --ansi", - "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\".\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\"", - "composer dump-autoload" - ], - "post-update-cmd": [ - "@composer bin all update --ansi", - "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\".\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\"", - "composer dump-autoload" - ] + "allow-plugins": { + "bamarni/composer-bin-plugin": true, + "composer/package-versions-deprecated": true }, - "config": { - "platform": { - "php": "8.2.0" - }, - "allow-plugins": { - "bamarni/composer-bin-plugin": true, - "composer/package-versions-deprecated": true - }, - "autoloader-suffix": "Recognize", - "optimize-autoloader": true, - "sort-packages": true - } + "autoloader-suffix": "Recognize", + "optimize-autoloader": true, + "sort-packages": true + } } From dd51bb22c85ce6d7d7310d897d85662f7d8693ed Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Mon, 30 Mar 2026 11:19:25 +0200 Subject: [PATCH 17/47] chore: Fix barmani php-scoper interaction Signed-off-by: Marcel Klehr --- composer.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 66b35278..83319e37 100644 --- a/composer.json +++ b/composer.json @@ -24,13 +24,15 @@ "post-install-cmd": [ "@composer bin all install --ansi", "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\".\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\"", - "@composer bin all install --ansi", + "composer install --no-scripts", + "@composer bin all update --ansi", "composer dump-autoload" ], "post-update-cmd": [ "@composer bin all update --ansi", "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\".\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\"", - "@composer bin all install --ansi", + "composer install --no-scripts", + "@composer bin all update --ansi", "composer dump-autoload" ] }, From 4c457c462baa2b12cf995fc316cb010abc00feb7 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Mon, 30 Mar 2026 11:34:21 +0200 Subject: [PATCH 18/47] fix: fix some psalm issues Signed-off-by: Marcel Klehr --- lib/Dav/Faces/FacePhoto.php | 3 +++ lib/Migration/Version011000002Date20260129094821.php | 2 +- lib/Service/TagManager.php | 6 +++--- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/Dav/Faces/FacePhoto.php b/lib/Dav/Faces/FacePhoto.php index 98af9d63..f3071534 100644 --- a/lib/Dav/Faces/FacePhoto.php +++ b/lib/Dav/Faces/FacePhoto.php @@ -123,6 +123,9 @@ public function hasPreview(): bool { public function isFavorite(): bool { $tagger = $this->tagManager->load('files'); + if ($tagger === null) { + return false; + } $tags = $tagger->getTagsForObjects([$this->getFile()->getId()]); if ($tags === false || empty($tags)) { diff --git a/lib/Migration/Version011000002Date20260129094821.php b/lib/Migration/Version011000002Date20260129094821.php index b00e03d6..30425f2b 100644 --- a/lib/Migration/Version011000002Date20260129094821.php +++ b/lib/Migration/Version011000002Date20260129094821.php @@ -20,7 +20,7 @@ public function __construct( ) { } - public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options) { + public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void { foreach (SettingsService::LAZY_SETTINGS as $settingsKey) { if ($this->appConfig->hasAppKey($settingsKey, lazy: false)) { $value = $this->appConfig->getAppValueString($settingsKey); diff --git a/lib/Service/TagManager.php b/lib/Service/TagManager.php index 46459d00..83ce57be 100644 --- a/lib/Service/TagManager.php +++ b/lib/Service/TagManager.php @@ -73,13 +73,13 @@ public function assignTags(int $fileId, array $tags): void { }, $tags); $tags[] = $this->getProcessedTag()->getId(); /** @var array $tagsByFile */ - $tagsByFile = $this->objectMapper->getTagIdsForObjects([$fileId], 'files'); + $tagsByFile = $this->objectMapper->getTagIdsForObjects([(string)$fileId], 'files'); $oldTags = $tagsByFile[(string) $fileId]; - $this->objectMapper->assignTags((string)$fileId, 'files', array_unique(array_merge($tags, $oldTags))); + $this->objectMapper->assignTags((string)$fileId, 'files', array_values(array_unique(array_merge($tags, $oldTags)))); } /** - * @param array $fileIds + * @param list $fileIds * @return array> */ public function getTagsForFiles(array $fileIds): array { From 84d28aefc63f285cd7531af24673cc1cfc4f0ca8 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Mon, 30 Mar 2026 12:12:56 +0200 Subject: [PATCH 19/47] fix: fix psalm issues Signed-off-by: Marcel Klehr --- lib/BackgroundJobs/StorageCrawlJob.php | 2 +- lib/Command/Classify.php | 2 +- lib/Dav/Faces/PropFindPlugin.php | 4 +- lib/Service/StorageService.php | 43 +++----------------- lib/Service/TagManager.php | 4 +- psalm-baseline.xml | 56 +++++++++++++++----------- 6 files changed, 45 insertions(+), 66 deletions(-) diff --git a/lib/BackgroundJobs/StorageCrawlJob.php b/lib/BackgroundJobs/StorageCrawlJob.php index 210d117a..0d4c835c 100644 --- a/lib/BackgroundJobs/StorageCrawlJob.php +++ b/lib/BackgroundJobs/StorageCrawlJob.php @@ -78,7 +78,7 @@ protected function run($argument): void { $this->queue->insertIntoQueue(ImagenetClassifier::MODEL_NAME, $queueFile); } if (!in_array(ImagenetClassifier::MODEL_NAME, $models) && in_array(LandmarksClassifier::MODEL_NAME, $models)) { - $tags = $this->tagManager->getTagsForFiles([$queueFile->getFileId()]); + $tags = $this->tagManager->getTagsForFiles([(string)$queueFile->getFileId()]); $fileTags = $tags[$queueFile->getFileId()]; $landmarkTags = array_filter($fileTags, function ($tag) { return in_array($tag->getName(), LandmarksClassifier::PRECONDITION_TAGS); diff --git a/lib/Command/Classify.php b/lib/Command/Classify.php index d49fc3fd..c7ffebf6 100644 --- a/lib/Command/Classify.php +++ b/lib/Command/Classify.php @@ -123,7 +123,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int } // if retry flag is set, skip other classifiers for tagged files if ($input->getOption('retry')) { - $fileTags = $this->tagManager->getTagsForFiles([$lastFileId]); + $fileTags = $this->tagManager->getTagsForFiles([(string)$lastFileId]); // check if processed tag is already in the tags if (in_array($processedTag, $fileTags[$lastFileId])) { continue; diff --git a/lib/Dav/Faces/PropFindPlugin.php b/lib/Dav/Faces/PropFindPlugin.php index d5e615e3..41721e2a 100644 --- a/lib/Dav/Faces/PropFindPlugin.php +++ b/lib/Dav/Faces/PropFindPlugin.php @@ -78,12 +78,12 @@ public function propFind(PropFind $propFind, INode $node): void { $propFind->handle(TagsPlugin::FAVORITE_PROPERTYNAME, fn () => $node->isFavorite() ? 1 : 0); $propFind->handle(FilesPlugin::HAS_PREVIEW_PROPERTYNAME, fn () => json_encode($this->previewManager->isAvailable($node->getFile()->getFileInfo()))); $propFind->handle(FilesPlugin::PERMISSIONS_PROPERTYNAME, function () use ($node): string { - $permissions = DavUtil::getDavPermissions($node->getFile()->getFileInfo()); + $permissions = DavUtil::getDavPermissions($node->getFile(), $node->getFile()->getParent()); $filteredPermissions = str_replace('R', '', $permissions); return $filteredPermissions; }); - foreach ($node->getFile()->getFileInfo()->getMetadata() as $metadataKey => $metadataValue) { + foreach ($node->getFile()->getMetadata() as $metadataKey => $metadataValue) { /** @var string $metadataKey */ $propFind->handle(FilesPlugin::FILE_METADATA_PREFIX.$metadataKey, $metadataValue); } diff --git a/lib/Service/StorageService.php b/lib/Service/StorageService.php index 12c2c796..ed282759 100644 --- a/lib/Service/StorageService.php +++ b/lib/Service/StorageService.php @@ -16,6 +16,7 @@ use OCA\Recognize\Constants; use OCP\DB\Exception; use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\Files\Cache\IFileAccess; use OCP\Files\IMimeTypeLoader; use OCP\FilesMetadata\IFilesMetadataManager; use OCP\IDBConnection; @@ -39,6 +40,7 @@ public function __construct( private IgnoreService $ignoreService, private IMimeTypeLoader $mimeTypes, private IFilesMetadataManager $metadataManager, + private IFileAccess $fileAccess, ) { } @@ -47,46 +49,13 @@ public function __construct( * @throws \OCP\DB\Exception */ public function getMounts(): \Generator { - $qb = $this->db->getQueryBuilder(); - $qb->selectDistinct(['root_id', 'storage_id', 'mount_provider_class']) // to avoid scanning each occurrence of a groupfolder - ->from('mounts') - ->where($qb->expr()->in('mount_provider_class', $qb->createPositionalParameter(self::ALLOWED_MOUNT_TYPES, IQueryBuilder::PARAM_STR_ARRAY))); - $result = $qb->executeQuery(); - - - while ( - /** @var array{storage_id:int, root_id:int,mount_provider_class:string} $row */ - $row = $result->fetch() - ) { - $storageId = (int)$row['storage_id']; - $rootId = (int)$row['root_id']; - $overrideRoot = $rootId; - if (in_array($row['mount_provider_class'], self::HOME_MOUNT_TYPES)) { - // Only crawl files, not cache or trashbin - $qb = new CacheQueryBuilder($this->db->getQueryBuilder(), $this->metadataManager); - try { - $res = $qb->selectFileCache() - ->andWhere($qb->expr()->eq('filecache.storage', $qb->createNamedParameter($storageId, IQueryBuilder::PARAM_INT))) - ->andWhere($qb->expr()->eq('filecache.path', $qb->createNamedParameter('files'))) - ->executeQuery(); - /** @var array|false $root */ - $root = $res->fetch(); - $res->closeCursor(); - if ($root !== false) { - $overrideRoot = intval($root['fileid']); - } - } catch (Exception $e) { - $this->logger->error('Could not fetch home storage files root for storage '.$storageId, ['exception' => $e]); - continue; - } - } + foreach ($this->fileAccess->getDistinctMounts(self::ALLOWED_MOUNT_TYPES) as $mount) { yield [ - 'storage_id' => $storageId, - 'root_id' => $rootId, - 'override_root' => $overrideRoot, + 'storage_id' => $mount['storage_id'], + 'root_id' => $mount['root_id'], + 'override_root' => $mount['overridden_root'], ]; } - $result->closeCursor(); } /** diff --git a/lib/Service/TagManager.php b/lib/Service/TagManager.php index 83ce57be..99fd5abd 100644 --- a/lib/Service/TagManager.php +++ b/lib/Service/TagManager.php @@ -91,7 +91,7 @@ public function getTagsForFiles(array $fileIds): array { } /** - * @return array + * @return list */ public function findClassifiedFiles(): array { return $this->objectMapper->getObjectIdsForTags($this->getProcessedTag()->getId(), 'files'); @@ -107,7 +107,7 @@ public function findMissedClassifications(): array { $processedId = $this->getProcessedTag()->getId(); foreach ($classifiedChunks as $classifiedChunk) { /** @var array $tagIdsByFile */ - $tagIdsByFile = $this->objectMapper->getTagIdsForObjects($classifiedChunk, 'files'); + $tagIdsByFile = $this->objectMapper->getTagIdsForObjects(array_values($classifiedChunk), 'files'); $missedChunk = array_keys(array_filter($tagIdsByFile, function ($tags) use ($processedId) : bool { return count($tags) === 1 && $tags[0] !== $processedId; })); diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 86d77e4a..cb20b751 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1,5 +1,5 @@ - + getContainer()]]> @@ -645,17 +645,9 @@ - getFile()->getFileInfo()]]> getFile()->getFileInfo()]]> - - - - - - - @@ -665,8 +657,6 @@ - - @@ -690,6 +680,9 @@ + + + @@ -709,11 +702,22 @@ getter('faceVector')]]> + + + + + + + + + + + @@ -724,6 +728,21 @@ + + + + + + + + + + + + + + + @@ -734,6 +753,9 @@ + + + @@ -943,7 +965,6 @@ - @@ -952,23 +973,16 @@ - - - - - - - @@ -989,10 +1003,6 @@ expr()->notLike('path', $qb->createNamedParameter($path ? $path . '/%' : '%'))]]> expr()->notLike('path', $qb->createNamedParameter($path ? $path . '/%' : '%'))]]> - - - - From 6d6dc76e98423d29431bfa09dcfee2aebd067847 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Mon, 30 Mar 2026 12:22:54 +0200 Subject: [PATCH 20/47] fix: drop nc 33 Signed-off-by: Marcel Klehr --- appinfo/info.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appinfo/info.xml b/appinfo/info.xml index cecb93a6..93cb2fa4 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -75,7 +75,7 @@ Requirements: The app does not send any sensitive data to cloud providers or similar services. All processing is done on your Nextcloud machine, using Tensorflow.js running in Node.js. ]]> - 11.1.0-dev.0 + 12.0.0-dev.0 agpl Marcel Klehr @@ -92,7 +92,7 @@ The app does not send any sensitive data to cloud providers or similar services. https://raw.githubusercontent.com/nextcloud/recognize/main/screenshots/Logo.png https://raw.githubusercontent.com/nextcloud/recognize/main/screenshots/imagenet_examples.jpg - + OCA\Recognize\BackgroundJobs\MaintenanceJob From 50a2e15708422d6301282ece619c8699cabc2ea3 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Mon, 30 Mar 2026 14:06:53 +0200 Subject: [PATCH 21/47] fix: Don't run barmani update in composer post-install script Signed-off-by: Marcel Klehr --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 83319e37..e16fd0ee 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "@composer bin all install --ansi", "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\".\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\"", "composer install --no-scripts", - "@composer bin all update --ansi", + "@composer bin all install --ansi", "composer dump-autoload" ], "post-update-cmd": [ From 42526381ae5abc108309c1f603d977ff24ad5621 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 08:49:43 +0200 Subject: [PATCH 22/47] fix(TAR): Use modern way to inject TempManager Signed-off-by: Marcel Klehr --- lib/Helper/TAR.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/Helper/TAR.php b/lib/Helper/TAR.php index 5b069b16..6b7f584b 100644 --- a/lib/Helper/TAR.php +++ b/lib/Helper/TAR.php @@ -34,6 +34,7 @@ namespace OCA\Recognize\Helper; use Icewind\Streams\CallbackWrapper; +use OCP\ITempManager; final class TAR extends Archive { public const PLAIN = 0; @@ -91,7 +92,7 @@ public static function getTarType($file) { * @return bool */ public function addFolder($path) { - $tmpBase = \OC::$server->getTempManager()->getTemporaryFolder(); + $tmpBase = \OCP\Server::get(ITempManager::class)->getTemporaryFolder(); $path = rtrim($path, '/') . '/'; if ($this->fileExists($path)) { return false; From 72ab676c4ba1fbc44a06b089c2617e3965fd4fab Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 08:52:42 +0200 Subject: [PATCH 23/47] fix: Fix Psalm issue Signed-off-by: Marcel Klehr --- lib/Helper/TAR.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/Helper/TAR.php b/lib/Helper/TAR.php index 6b7f584b..8c29a168 100644 --- a/lib/Helper/TAR.php +++ b/lib/Helper/TAR.php @@ -93,6 +93,9 @@ public static function getTarType($file) { */ public function addFolder($path) { $tmpBase = \OCP\Server::get(ITempManager::class)->getTemporaryFolder(); + if ($tmpBase === false) { + return false; + } $path = rtrim($path, '/') . '/'; if ($this->fileExists($path)) { return false; From ee7c2b06c30492d3b3298b188108db27d7632687 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 09:02:57 +0200 Subject: [PATCH 24/47] fix(TAR): Use modern dep injection Signed-off-by: Marcel Klehr --- lib/Helper/TAR.php | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/Helper/TAR.php b/lib/Helper/TAR.php index 8c29a168..a99f4af9 100644 --- a/lib/Helper/TAR.php +++ b/lib/Helper/TAR.php @@ -144,7 +144,10 @@ public function addFile($path, $source = '') { */ public function rename($source, $dest) { //no proper way to delete, rename entire archive, rename file and remake archive - $tmp = \OC::$server->getTempManager()->getTemporaryFolder(); + $tmp = \OCP\Server::get(ITempManager::class)->getTemporaryFolder(); + if ($tmp === false) { + return false; + } $this->tar->extract($tmp); rename($tmp . $source, $tmp . $dest); $this->tar = null; @@ -263,7 +266,10 @@ public function getFile($path) { * @return bool */ public function extractFile($path, $dest) { - $tmp = \OC::$server->getTempManager()->getTemporaryFolder(); + $tmp = \OCP\Server::get(ITempManager::class)->getTemporaryFolder(); + if ($tmp === false) { + return false; + } if (!$this->fileExists($path)) { return false; } @@ -340,7 +346,10 @@ public function remove($path) { $this->fileList = false; $this->cachedHeaders = false; //no proper way to delete, extract entire archive, delete file and remake archive - $tmp = \OC::$server->getTempManager()->getTemporaryFolder(); + $tmp = \OCP\Server::get(ITempManager::class)->getTemporaryFolder(); + if ($tmp === false) { + return false; + } $this->tar->extract($tmp); \OCP\Files::rmdirr($tmp . $path); $this->tar = null; @@ -363,7 +372,10 @@ public function getStream($path, $mode) { } else { $ext = ''; } - $tmpFile = \OC::$server->getTempManager()->getTemporaryFile($ext); + $tmpFile = \OCP\Server::get(ITempManager::class)->getTemporaryFile($ext); + if ($tmpFile === false) { + return false; + } if ($this->fileExists($path)) { $this->extractFile($path, $tmpFile); } elseif ($mode == 'r' or $mode == 'rb') { From 0483ff3befe63af3350f4f5e14bb639a164baf14 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 10:32:07 +0200 Subject: [PATCH 25/47] fix(composer): Don't run barmani update in post-update-cmd Signed-off-by: Marcel Klehr --- composer.json | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index e16fd0ee..85a42506 100644 --- a/composer.json +++ b/composer.json @@ -29,10 +29,10 @@ "composer dump-autoload" ], "post-update-cmd": [ - "@composer bin all update --ansi", + "@composer bin all install --ansi", "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\".\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\"", "composer install --no-scripts", - "@composer bin all update --ansi", + "@composer bin all install --ansi", "composer dump-autoload" ] }, diff --git a/package-lock.json b/package-lock.json index 4eb16095..64b95e1e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "recognize", - "version": "11.1.0-dev.0", + "version": "12.0.0-dev.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "recognize", - "version": "11.1.0-dev.0", + "version": "12.0.0-dev.0", "license": "MIT", "dependencies": { "@exifer/gps": "^1.0.0-beta.2", diff --git a/package.json b/package.json index 36d7bf5d..89e9e190 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "recognize", - "version": "11.1.0-dev.0", + "version": "12.0.0-dev.0", "description": "Image recognition in nextcloud", "main": "src/classifier_imagenet.js", "directories": { From d38cdddd7b4f4182330f210a20feba45939c0886 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 11:04:00 +0200 Subject: [PATCH 26/47] chore: Check in composer.lock Signed-off-by: Marcel Klehr --- composer.lock | 1473 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1473 insertions(+) create mode 100644 composer.lock diff --git a/composer.lock b/composer.lock new file mode 100644 index 00000000..f1e066ef --- /dev/null +++ b/composer.lock @@ -0,0 +1,1473 @@ +{ + "_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": "e22424cde05a8f2d8a505535137c8192", + "packages": [ + { + "name": "amphp/amp", + "version": "v2.6.5", + "source": { + "type": "git", + "url": "https://github.com/amphp/amp.git", + "reference": "d7dda98dae26e56f3f6fcfbf1c1f819c9a993207" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/amp/zipball/d7dda98dae26e56f3f6fcfbf1c1f819c9a993207", + "reference": "d7dda98dae26e56f3f6fcfbf1c1f819c9a993207", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1", + "ext-json": "*", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^7 | ^8 | ^9", + "react/promise": "^2", + "vimeo/psalm": "^3.12" + }, + "type": "library", + "autoload": { + "files": [ + "lib/functions.php", + "lib/Internal/functions.php" + ], + "psr-4": { + "Amp\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A non-blocking concurrency framework for PHP applications.", + "homepage": "https://amphp.org/amp", + "keywords": [ + "async", + "asynchronous", + "awaitable", + "concurrency", + "event", + "event-loop", + "future", + "non-blocking", + "promise" + ], + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/amp/issues", + "source": "https://github.com/amphp/amp/tree/v2.6.5" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2025-09-03T19:41:28+00:00" + }, + { + "name": "amphp/byte-stream", + "version": "v1.8.2", + "source": { + "type": "git", + "url": "https://github.com/amphp/byte-stream.git", + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", + "shasum": "" + }, + "require": { + "amphp/amp": "^2", + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.4", + "friendsofphp/php-cs-fixer": "^2.3", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^6 || ^7 || ^8", + "psalm/phar": "^3.11.4" + }, + "type": "library", + "autoload": { + "files": [ + "lib/functions.php" + ], + "psr-4": { + "Amp\\ByteStream\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A stream abstraction to make working with non-blocking I/O simple.", + "homepage": "https://amphp.org/byte-stream", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "non-blocking", + "stream" + ], + "support": { + "issues": "https://github.com/amphp/byte-stream/issues", + "source": "https://github.com/amphp/byte-stream/tree/v1.8.2" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-04-13T18:00:56+00:00" + }, + { + "name": "amphp/parallel", + "version": "v1.4.4", + "source": { + "type": "git", + "url": "https://github.com/amphp/parallel.git", + "reference": "508ca221f2f47235327db5120f0a89d43435b69b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/parallel/zipball/508ca221f2f47235327db5120f0a89d43435b69b", + "reference": "508ca221f2f47235327db5120f0a89d43435b69b", + "shasum": "" + }, + "require": { + "amphp/amp": "^2", + "amphp/byte-stream": "^1.6.1", + "amphp/parser": "^1", + "amphp/process": "^1", + "amphp/serialization": "^1", + "amphp/sync": "^1.0.1", + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^1.1", + "phpunit/phpunit": "^9 || ^8 || ^7" + }, + "type": "library", + "autoload": { + "files": [ + "lib/Context/functions.php", + "lib/Sync/functions.php", + "lib/Worker/functions.php" + ], + "psr-4": { + "Amp\\Parallel\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Stephen Coakley", + "email": "me@stephencoakley.com" + } + ], + "description": "Parallel processing component for Amp.", + "homepage": "https://github.com/amphp/parallel", + "keywords": [ + "async", + "asynchronous", + "concurrent", + "multi-processing", + "multi-threading" + ], + "support": { + "issues": "https://github.com/amphp/parallel/issues", + "source": "https://github.com/amphp/parallel/tree/v1.4.4" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-12-08T16:28:11+00:00" + }, + { + "name": "amphp/parser", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/parser.git", + "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/parser/zipball/3cf1f8b32a0171d4b1bed93d25617637a77cded7", + "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7", + "shasum": "" + }, + "require": { + "php": ">=7.4" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Amp\\Parser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A generator parser to make streaming parsers simple.", + "homepage": "https://github.com/amphp/parser", + "keywords": [ + "async", + "non-blocking", + "parser", + "stream" + ], + "support": { + "issues": "https://github.com/amphp/parser/issues", + "source": "https://github.com/amphp/parser/tree/v1.1.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-03-21T19:16:53+00:00" + }, + { + "name": "amphp/process", + "version": "v1.1.9", + "source": { + "type": "git", + "url": "https://github.com/amphp/process.git", + "reference": "55b837d4f1857b9bd7efb7bb859ae6b0e804f13f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/process/zipball/55b837d4f1857b9bd7efb7bb859ae6b0e804f13f", + "reference": "55b837d4f1857b9bd7efb7bb859ae6b0e804f13f", + "shasum": "" + }, + "require": { + "amphp/amp": "^2", + "amphp/byte-stream": "^1.4", + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1", + "phpunit/phpunit": "^6" + }, + "type": "library", + "autoload": { + "files": [ + "lib/functions.php" + ], + "psr-4": { + "Amp\\Process\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Asynchronous process manager.", + "homepage": "https://github.com/amphp/process", + "support": { + "issues": "https://github.com/amphp/process/issues", + "source": "https://github.com/amphp/process/tree/v1.1.9" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-12-13T17:38:25+00:00" + }, + { + "name": "amphp/serialization", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/serialization.git", + "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/serialization/zipball/693e77b2fb0b266c3c7d622317f881de44ae94a1", + "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "phpunit/phpunit": "^9 || ^8 || ^7" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Amp\\Serialization\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Serialization tools for IPC and data storage in PHP.", + "homepage": "https://github.com/amphp/serialization", + "keywords": [ + "async", + "asynchronous", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/amphp/serialization/issues", + "source": "https://github.com/amphp/serialization/tree/master" + }, + "time": "2020-03-25T21:39:07+00:00" + }, + { + "name": "amphp/sync", + "version": "v1.4.2", + "source": { + "type": "git", + "url": "https://github.com/amphp/sync.git", + "reference": "85ab06764f4f36d63b1356b466df6111cf4b89cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/sync/zipball/85ab06764f4f36d63b1356b466df6111cf4b89cf", + "reference": "85ab06764f4f36d63b1356b466df6111cf4b89cf", + "shasum": "" + }, + "require": { + "amphp/amp": "^2.2", + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.1", + "phpunit/phpunit": "^9 || ^8 || ^7" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php", + "src/ConcurrentIterator/functions.php" + ], + "psr-4": { + "Amp\\Sync\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Stephen Coakley", + "email": "me@stephencoakley.com" + } + ], + "description": "Mutex, Semaphore, and other synchronization tools for Amp.", + "homepage": "https://github.com/amphp/sync", + "keywords": [ + "async", + "asynchronous", + "mutex", + "semaphore", + "synchronization" + ], + "support": { + "issues": "https://github.com/amphp/sync/issues", + "source": "https://github.com/amphp/sync/tree/v1.4.2" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-10-25T18:29:10+00:00" + }, + { + "name": "andrewdalpino/okbloomer", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/andrewdalpino/OkBloomer.git", + "reference": "39321cb515c1e99128d28489b0187120ba7ce84c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/andrewdalpino/OkBloomer/zipball/39321cb515c1e99128d28489b0187120ba7ce84c", + "reference": "39321cb515c1e99128d28489b0187120ba7ce84c", + "shasum": "" + }, + "require": { + "php": ">=7.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.0", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "OkBloomer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrew DalPino", + "email": "support@andrewdalpino.com", + "homepage": "https://github.com/andrewdalpino", + "role": "Lead Developer" + } + ], + "description": "An autoscaling Bloom filter with ultra-low memory usage for PHP.", + "keywords": [ + "Bloom Filter", + "layered bloom filter", + "scalable bloom filter" + ], + "support": { + "docs": "https://github.com/andrewdalpino/OkBloomer/README.md", + "email": "support@andrewdalpino.com", + "issues": "https://github.com/andrewdalpino/OkBloomer/issues", + "source": "https://github.com/andrewdalpino/OkBloomer" + }, + "funding": [ + { + "url": "https://github.com/sponsors/andrewdalpino", + "type": "github" + } + ], + "time": "2022-01-24T03:41:23+00:00" + }, + { + "name": "bamarni/composer-bin-plugin", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/bamarni/composer-bin-plugin.git", + "reference": "641d0663f5ac270b1aeec4337b7856f76204df47" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/641d0663f5ac270b1aeec4337b7856f76204df47", + "reference": "641d0663f5ac270b1aeec4337b7856f76204df47", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "composer/composer": "^2.2.26", + "ext-json": "*", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8 || ^2.0", + "phpstan/phpstan-phpunit": "^1.1 || ^2.0", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.0", + "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", + "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", + "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Bamarni\\Composer\\Bin\\BamarniBinPlugin" + }, + "autoload": { + "psr-4": { + "Bamarni\\Composer\\Bin\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "No conflicts for your bin dependencies", + "keywords": [ + "composer", + "conflict", + "dependency", + "executable", + "isolation", + "tool" + ], + "support": { + "issues": "https://github.com/bamarni/composer-bin-plugin/issues", + "source": "https://github.com/bamarni/composer-bin-plugin/tree/1.9.1" + }, + "time": "2026-02-04T10:18:12+00:00" + }, + { + "name": "joomla/string", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/joomla-framework/string.git", + "reference": "0b3d33564db389e27346f7e275c694897c939434" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/joomla-framework/string/zipball/0b3d33564db389e27346f7e275c694897c939434", + "reference": "0b3d33564db389e27346f7e275c694897c939434", + "shasum": "" + }, + "require": { + "php": "^8.1.0", + "symfony/deprecation-contracts": "^2|^3" + }, + "conflict": { + "doctrine/inflector": "<1.2" + }, + "require-dev": { + "doctrine/inflector": "^1.2", + "joomla/test": "^3.0", + "phpstan/phpstan": "1.12.27", + "phpstan/phpstan-deprecation-rules": "1.2.1", + "phpunit/phpunit": "^9.5.28", + "squizlabs/php_codesniffer": "^3.7.2" + }, + "suggest": { + "doctrine/inflector": "To use the string inflector", + "ext-mbstring": "For improved processing" + }, + "type": "joomla-package", + "extra": { + "branch-alias": { + "dev-2.0-dev": "2.0-dev", + "dev-3.x-dev": "3.0-dev" + } + }, + "autoload": { + "files": [ + "src/phputf8/utf8.php", + "src/phputf8/ord.php", + "src/phputf8/str_ireplace.php", + "src/phputf8/str_pad.php", + "src/phputf8/str_split.php", + "src/phputf8/strcasecmp.php", + "src/phputf8/strcspn.php", + "src/phputf8/stristr.php", + "src/phputf8/strrev.php", + "src/phputf8/strspn.php", + "src/phputf8/trim.php", + "src/phputf8/ucfirst.php", + "src/phputf8/ucwords.php", + "src/phputf8/utils/ascii.php", + "src/phputf8/utils/validation.php" + ], + "psr-4": { + "Joomla\\String\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "description": "Joomla String Package", + "homepage": "https://github.com/joomla-framework/string", + "keywords": [ + "framework", + "joomla", + "string" + ], + "support": { + "issues": "https://github.com/joomla-framework/string/issues", + "source": "https://github.com/joomla-framework/string/tree/3.0.4" + }, + "time": "2025-07-19T15:25:56+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": "rubix/ml", + "version": "2.5.3", + "source": { + "type": "git", + "url": "https://github.com/RubixML/ML.git", + "reference": "e0960dcb19c9722ccbc4826f5b9417a75fa01613" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/RubixML/ML/zipball/e0960dcb19c9722ccbc4826f5b9417a75fa01613", + "reference": "e0960dcb19c9722ccbc4826f5b9417a75fa01613", + "shasum": "" + }, + "require": { + "amphp/parallel": "^1.3", + "andrewdalpino/okbloomer": "^1.0", + "ext-json": "*", + "php": ">=7.4", + "psr/log": "^1.1|^2.0|^3.0", + "rubix/tensor": "^3.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.17", + "symfony/polyfill-php82": "^1.27", + "symfony/polyfill-php83": "^1.27", + "wamania/php-stemmer": "^4.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.0", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-gd": "For image support", + "ext-mbstring": "For fast multibyte string manipulation", + "ext-svm": "For Support Vector Machine engine (libsvm)", + "ext-tensor": "For fast Matrix/Vector computing" + }, + "type": "library", + "autoload": { + "files": [ + "src/constants.php", + "src/functions.php" + ], + "psr-4": { + "Rubix\\ML\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrew DalPino", + "homepage": "https://github.com/andrewdalpino" + }, + { + "name": "Contributors", + "homepage": "https://github.com/RubixML/ML/graphs/contributors" + } + ], + "description": "A high-level machine learning and deep learning library for the PHP language.", + "homepage": "https://rubixml.github.io/ML/latest/", + "keywords": [ + "Algorithm", + "Deep learning", + "Linear regression", + "Neural network", + "Rubix", + "TF-IDF", + "adaboost", + "ai", + "analytics", + "anomaly detection", + "artificial intelligence", + "cart", + "classification", + "classifier", + "clustering", + "cross validation", + "data mining", + "data science", + "dataset", + "dbscan", + "dimensionality reduction", + "ensemble", + "estimator", + "etl", + "feature extraction", + "feature importance", + "feature selection", + "gaussian mixture", + "gbm", + "gmm", + "gradient boost", + "grid search", + "image recognition", + "imputation", + "inference", + "isolation forest", + "k-means", + "k-nearest neighbors", + "kmeans", + "knn", + "local outlier factor", + "loda", + "lof", + "logistic regression", + "machine learning", + "manifold learning", + "mean shift", + "ml", + "mlp", + "multilayer perceptron", + "naive bayes", + "natural language processing", + "nearest neighbors", + "nlp", + "outlier detection", + "php", + "php ai", + "php machine learning", + "php ml", + "prediction", + "predictive modeling", + "random forest", + "ranking", + "recommendation", + "regression", + "regressor", + "ridge", + "rubix ml", + "rubixml", + "softmax", + "supervised learning", + "support vector machine", + "svm", + "t-sne", + "text mining", + "tf idf", + "tsne", + "unsupervised learning" + ], + "support": { + "chat": "https://t.me/RubixML", + "docs": "https://rubixml.github.io/ML/latest/", + "issues": "https://github.com/RubixML/ML/issues", + "source": "https://github.com/RubixML/ML" + }, + "funding": [ + { + "url": "https://github.com/sponsors/andrewdalpino", + "type": "github" + } + ], + "time": "2025-10-01T17:52:15+00:00" + }, + { + "name": "rubix/tensor", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/RubixML/Tensor.git", + "reference": "9f0ee170319280dcf081984adccefa8b0e6f06b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/RubixML/Tensor/zipball/9f0ee170319280dcf081984adccefa8b0e6f06b8", + "reference": "9f0ee170319280dcf081984adccefa8b0e6f06b8", + "shasum": "" + }, + "require": { + "php": ">=7.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.0", + "phalcon/zephir": "^0.17", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/constants.php" + ], + "psr-4": { + "Tensor\\": "src/", + "Zephir\\Optimizers\\FunctionCall\\": "optimizers/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrew DalPino", + "email": "support@andrewdalpino.com", + "homepage": "https://github.com/andrewdalpino", + "role": "Project Lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/RubixML/Tensor/graphs/contributors" + } + ], + "description": "A library and extension that provides objects for scientific computing in PHP.", + "homepage": "https://github.com/RubixML/Tensor", + "keywords": [ + "1d convolution", + "2d convolution", + "arithmetic", + "blas", + "computation", + "computing", + "convolution", + "decomposition", + "dot product", + "eigendecomposition", + "eigenvalue", + "eigenvector", + "engineering", + "extension", + "lapack", + "linear algebra", + "math", + "matmul", + "matrix", + "matrix multiplication", + "multithreaded", + "php", + "php extension", + "pseudoinverse", + "scientific computing", + "signal processing", + "singular value decomposition", + "statistics", + "svd", + "tensor", + "trigonometry", + "vector", + "vector norm" + ], + "support": { + "chat": "https://t.me/RubixML", + "email": "support@andrewdalpino.com", + "issues": "https://github.com/RubixML/Tensor/issues", + "source": "https://github.com/RubixML/Tensor" + }, + "funding": [ + { + "url": "https://github.com/andrewdalpino", + "type": "github" + } + ], + "time": "2024-03-15T19:43:50+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.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-25T14:21:43+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-23T08:48:59+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php82", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php82.git", + "reference": "5d2ed36f7734637dacc025f179698031951b1692" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/5d2ed36f7734637dacc025f179698031951b1692", + "reference": "5d2ed36f7734637dacc025f179698031951b1692", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php82\\": "" + }, + "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.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php82/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\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.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-08T02:45:35+00:00" + }, + { + "name": "wamania/php-stemmer", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/wamania/php-stemmer.git", + "reference": "d96509294ea843b4b86e4900df27424a6ea0ace8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wamania/php-stemmer/zipball/d96509294ea843b4b86e4900df27424a6ea0ace8", + "reference": "d96509294ea843b4b86e4900df27424a6ea0ace8", + "shasum": "" + }, + "require": { + "joomla/string": ">=2.0.1", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Wamania\\Snowball\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Wamania", + "homepage": "http://wamania.com" + } + ], + "description": "Native PHP Stemmer", + "keywords": [ + "php", + "porter", + "stemmer" + ], + "support": { + "issues": "https://github.com/wamania/php-stemmer/issues", + "source": "https://github.com/wamania/php-stemmer/tree/v4.0.0" + }, + "time": "2024-12-22T08:54:03+00:00" + } + ], + "packages-dev": [], + "aliases": [ + { + "package": "wamania/php-stemmer", + "version": "4.0.0.0", + "alias": "3.0", + "alias_normalized": "3.0.0.0" + } + ], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=8.2", + "ext-json": "*", + "ext-pdo": "*" + }, + "platform-dev": {}, + "platform-overrides": { + "php": "8.2.0" + }, + "plugin-api-version": "2.6.0" +} From 6185ce42a85151b0b2c3843bd9fd8a9ab9513d2c Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 11:16:54 +0200 Subject: [PATCH 27/47] tests: Run SQLITE tests with php 8.4 Signed-off-by: Marcel Klehr --- .github/workflows/phpunit-sqlite.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/phpunit-sqlite.yml b/.github/workflows/phpunit-sqlite.yml index ce4d12b0..7276edc0 100644 --- a/.github/workflows/phpunit-sqlite.yml +++ b/.github/workflows/phpunit-sqlite.yml @@ -72,7 +72,7 @@ jobs: strategy: matrix: - php-versions: ${{ fromJson(needs.matrix.outputs.php-version) }} + php-versions: ['8.4'] server-versions: ${{ fromJson(needs.matrix.outputs.server-max) }} name: SQLite PHP ${{ matrix.php-versions }} Nextcloud ${{ matrix.server-versions }} From 3f17d0d567e468dbfaebc173113396d87f5cf698 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 11:29:45 +0200 Subject: [PATCH 28/47] chore: Update php-scoper to version 0.18.19 Signed-off-by: Marcel Klehr --- vendor-bin/php-scoper/composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor-bin/php-scoper/composer.json b/vendor-bin/php-scoper/composer.json index 1e2c2fb5..d92eddc3 100644 --- a/vendor-bin/php-scoper/composer.json +++ b/vendor-bin/php-scoper/composer.json @@ -1,11 +1,11 @@ { "require": { - "humbug/php-scoper": "0.18.x", + "humbug/php-scoper": "0.18.19", "cweagans/composer-patches": "^1.7" }, "config": { "platform": { - "php": "8.2" + "php": "8.4" }, "allow-plugins": { "cweagans/composer-patches": true From b0e4b249a08ccb3b5e3c484fee1f3d8525d07e26 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 11:55:53 +0200 Subject: [PATCH 29/47] fix: Don't use php-scoper -f Signed-off-by: Marcel Klehr --- .github/workflows/phpunit-sqlite.yml | 2 +- composer.json | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/phpunit-sqlite.yml b/.github/workflows/phpunit-sqlite.yml index 7276edc0..ce4d12b0 100644 --- a/.github/workflows/phpunit-sqlite.yml +++ b/.github/workflows/phpunit-sqlite.yml @@ -72,7 +72,7 @@ jobs: strategy: matrix: - php-versions: ['8.4'] + php-versions: ${{ fromJson(needs.matrix.outputs.php-version) }} server-versions: ${{ fromJson(needs.matrix.outputs.server-max) }} name: SQLite PHP ${{ matrix.php-versions }} Nextcloud ${{ matrix.server-versions }} diff --git a/composer.json b/composer.json index 85a42506..9e54a17e 100644 --- a/composer.json +++ b/composer.json @@ -23,16 +23,12 @@ "test:unit": "phpunit --config tests/phpunit.xml", "post-install-cmd": [ "@composer bin all install --ansi", - "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\".\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\"", - "composer install --no-scripts", - "@composer bin all install --ansi", + "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || (vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\"/tmp/scoped-vendor\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\" && cp -rf /tmp/scoped-vendor/* ./vendor/ && rm -rf /tmp/scoped-vendor)", "composer dump-autoload" ], "post-update-cmd": [ "@composer bin all install --ansi", - "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\".\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\"", - "composer install --no-scripts", - "@composer bin all install --ansi", + "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || (vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\"/tmp/scoped-vendor\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\" && cp -rf /tmp/scoped-vendor/* ./vendor/ && rm -rf /tmp/scoped-vendor)", "composer dump-autoload" ] }, From 23e7ed752fba88229ec8942566257f1dc4561e28 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 12:02:12 +0200 Subject: [PATCH 30/47] fix: Don't check in lock file Signed-off-by: Marcel Klehr --- composer.lock | 1473 ------------------------------------------------- 1 file changed, 1473 deletions(-) delete mode 100644 composer.lock diff --git a/composer.lock b/composer.lock deleted file mode 100644 index f1e066ef..00000000 --- a/composer.lock +++ /dev/null @@ -1,1473 +0,0 @@ -{ - "_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": "e22424cde05a8f2d8a505535137c8192", - "packages": [ - { - "name": "amphp/amp", - "version": "v2.6.5", - "source": { - "type": "git", - "url": "https://github.com/amphp/amp.git", - "reference": "d7dda98dae26e56f3f6fcfbf1c1f819c9a993207" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/d7dda98dae26e56f3f6fcfbf1c1f819c9a993207", - "reference": "d7dda98dae26e56f3f6fcfbf1c1f819c9a993207", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1", - "ext-json": "*", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^7 | ^8 | ^9", - "react/promise": "^2", - "vimeo/psalm": "^3.12" - }, - "type": "library", - "autoload": { - "files": [ - "lib/functions.php", - "lib/Internal/functions.php" - ], - "psr-4": { - "Amp\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "https://amphp.org/amp", - "keywords": [ - "async", - "asynchronous", - "awaitable", - "concurrency", - "event", - "event-loop", - "future", - "non-blocking", - "promise" - ], - "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.5" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2025-09-03T19:41:28+00:00" - }, - { - "name": "amphp/byte-stream", - "version": "v1.8.2", - "source": { - "type": "git", - "url": "https://github.com/amphp/byte-stream.git", - "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", - "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", - "shasum": "" - }, - "require": { - "amphp/amp": "^2", - "php": ">=7.1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1.4", - "friendsofphp/php-cs-fixer": "^2.3", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^6 || ^7 || ^8", - "psalm/phar": "^3.11.4" - }, - "type": "library", - "autoload": { - "files": [ - "lib/functions.php" - ], - "psr-4": { - "Amp\\ByteStream\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "https://amphp.org/byte-stream", - "keywords": [ - "amp", - "amphp", - "async", - "io", - "non-blocking", - "stream" - ], - "support": { - "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v1.8.2" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-04-13T18:00:56+00:00" - }, - { - "name": "amphp/parallel", - "version": "v1.4.4", - "source": { - "type": "git", - "url": "https://github.com/amphp/parallel.git", - "reference": "508ca221f2f47235327db5120f0a89d43435b69b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel/zipball/508ca221f2f47235327db5120f0a89d43435b69b", - "reference": "508ca221f2f47235327db5120f0a89d43435b69b", - "shasum": "" - }, - "require": { - "amphp/amp": "^2", - "amphp/byte-stream": "^1.6.1", - "amphp/parser": "^1", - "amphp/process": "^1", - "amphp/serialization": "^1", - "amphp/sync": "^1.0.1", - "php": ">=7.1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^1.1", - "phpunit/phpunit": "^9 || ^8 || ^7" - }, - "type": "library", - "autoload": { - "files": [ - "lib/Context/functions.php", - "lib/Sync/functions.php", - "lib/Worker/functions.php" - ], - "psr-4": { - "Amp\\Parallel\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Stephen Coakley", - "email": "me@stephencoakley.com" - } - ], - "description": "Parallel processing component for Amp.", - "homepage": "https://github.com/amphp/parallel", - "keywords": [ - "async", - "asynchronous", - "concurrent", - "multi-processing", - "multi-threading" - ], - "support": { - "issues": "https://github.com/amphp/parallel/issues", - "source": "https://github.com/amphp/parallel/tree/v1.4.4" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-12-08T16:28:11+00:00" - }, - { - "name": "amphp/parser", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/amphp/parser.git", - "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/parser/zipball/3cf1f8b32a0171d4b1bed93d25617637a77cded7", - "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7", - "shasum": "" - }, - "require": { - "php": ">=7.4" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "phpunit/phpunit": "^9", - "psalm/phar": "^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Amp\\Parser\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A generator parser to make streaming parsers simple.", - "homepage": "https://github.com/amphp/parser", - "keywords": [ - "async", - "non-blocking", - "parser", - "stream" - ], - "support": { - "issues": "https://github.com/amphp/parser/issues", - "source": "https://github.com/amphp/parser/tree/v1.1.1" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-03-21T19:16:53+00:00" - }, - { - "name": "amphp/process", - "version": "v1.1.9", - "source": { - "type": "git", - "url": "https://github.com/amphp/process.git", - "reference": "55b837d4f1857b9bd7efb7bb859ae6b0e804f13f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/process/zipball/55b837d4f1857b9bd7efb7bb859ae6b0e804f13f", - "reference": "55b837d4f1857b9bd7efb7bb859ae6b0e804f13f", - "shasum": "" - }, - "require": { - "amphp/amp": "^2", - "amphp/byte-stream": "^1.4", - "php": ">=7.1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1", - "phpunit/phpunit": "^6" - }, - "type": "library", - "autoload": { - "files": [ - "lib/functions.php" - ], - "psr-4": { - "Amp\\Process\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "Asynchronous process manager.", - "homepage": "https://github.com/amphp/process", - "support": { - "issues": "https://github.com/amphp/process/issues", - "source": "https://github.com/amphp/process/tree/v1.1.9" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-12-13T17:38:25+00:00" - }, - { - "name": "amphp/serialization", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/amphp/serialization.git", - "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/serialization/zipball/693e77b2fb0b266c3c7d622317f881de44ae94a1", - "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "phpunit/phpunit": "^9 || ^8 || ^7" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Amp\\Serialization\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "Serialization tools for IPC and data storage in PHP.", - "homepage": "https://github.com/amphp/serialization", - "keywords": [ - "async", - "asynchronous", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/amphp/serialization/issues", - "source": "https://github.com/amphp/serialization/tree/master" - }, - "time": "2020-03-25T21:39:07+00:00" - }, - { - "name": "amphp/sync", - "version": "v1.4.2", - "source": { - "type": "git", - "url": "https://github.com/amphp/sync.git", - "reference": "85ab06764f4f36d63b1356b466df6111cf4b89cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/sync/zipball/85ab06764f4f36d63b1356b466df6111cf4b89cf", - "reference": "85ab06764f4f36d63b1356b466df6111cf4b89cf", - "shasum": "" - }, - "require": { - "amphp/amp": "^2.2", - "php": ">=7.1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1.1", - "phpunit/phpunit": "^9 || ^8 || ^7" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php", - "src/ConcurrentIterator/functions.php" - ], - "psr-4": { - "Amp\\Sync\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Stephen Coakley", - "email": "me@stephencoakley.com" - } - ], - "description": "Mutex, Semaphore, and other synchronization tools for Amp.", - "homepage": "https://github.com/amphp/sync", - "keywords": [ - "async", - "asynchronous", - "mutex", - "semaphore", - "synchronization" - ], - "support": { - "issues": "https://github.com/amphp/sync/issues", - "source": "https://github.com/amphp/sync/tree/v1.4.2" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2021-10-25T18:29:10+00:00" - }, - { - "name": "andrewdalpino/okbloomer", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/andrewdalpino/OkBloomer.git", - "reference": "39321cb515c1e99128d28489b0187120ba7ce84c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/andrewdalpino/OkBloomer/zipball/39321cb515c1e99128d28489b0187120ba7ce84c", - "reference": "39321cb515c1e99128d28489b0187120ba7ce84c", - "shasum": "" - }, - "require": { - "php": ">=7.4" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.0", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "OkBloomer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrew DalPino", - "email": "support@andrewdalpino.com", - "homepage": "https://github.com/andrewdalpino", - "role": "Lead Developer" - } - ], - "description": "An autoscaling Bloom filter with ultra-low memory usage for PHP.", - "keywords": [ - "Bloom Filter", - "layered bloom filter", - "scalable bloom filter" - ], - "support": { - "docs": "https://github.com/andrewdalpino/OkBloomer/README.md", - "email": "support@andrewdalpino.com", - "issues": "https://github.com/andrewdalpino/OkBloomer/issues", - "source": "https://github.com/andrewdalpino/OkBloomer" - }, - "funding": [ - { - "url": "https://github.com/sponsors/andrewdalpino", - "type": "github" - } - ], - "time": "2022-01-24T03:41:23+00:00" - }, - { - "name": "bamarni/composer-bin-plugin", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/bamarni/composer-bin-plugin.git", - "reference": "641d0663f5ac270b1aeec4337b7856f76204df47" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/641d0663f5ac270b1aeec4337b7856f76204df47", - "reference": "641d0663f5ac270b1aeec4337b7856f76204df47", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^2.0", - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "composer/composer": "^2.2.26", - "ext-json": "*", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8 || ^2.0", - "phpstan/phpstan-phpunit": "^1.1 || ^2.0", - "phpunit/phpunit": "^8.5 || ^9.6 || ^10.0", - "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", - "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", - "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Bamarni\\Composer\\Bin\\BamarniBinPlugin" - }, - "autoload": { - "psr-4": { - "Bamarni\\Composer\\Bin\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "No conflicts for your bin dependencies", - "keywords": [ - "composer", - "conflict", - "dependency", - "executable", - "isolation", - "tool" - ], - "support": { - "issues": "https://github.com/bamarni/composer-bin-plugin/issues", - "source": "https://github.com/bamarni/composer-bin-plugin/tree/1.9.1" - }, - "time": "2026-02-04T10:18:12+00:00" - }, - { - "name": "joomla/string", - "version": "3.0.4", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/string.git", - "reference": "0b3d33564db389e27346f7e275c694897c939434" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/string/zipball/0b3d33564db389e27346f7e275c694897c939434", - "reference": "0b3d33564db389e27346f7e275c694897c939434", - "shasum": "" - }, - "require": { - "php": "^8.1.0", - "symfony/deprecation-contracts": "^2|^3" - }, - "conflict": { - "doctrine/inflector": "<1.2" - }, - "require-dev": { - "doctrine/inflector": "^1.2", - "joomla/test": "^3.0", - "phpstan/phpstan": "1.12.27", - "phpstan/phpstan-deprecation-rules": "1.2.1", - "phpunit/phpunit": "^9.5.28", - "squizlabs/php_codesniffer": "^3.7.2" - }, - "suggest": { - "doctrine/inflector": "To use the string inflector", - "ext-mbstring": "For improved processing" - }, - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev", - "dev-3.x-dev": "3.0-dev" - } - }, - "autoload": { - "files": [ - "src/phputf8/utf8.php", - "src/phputf8/ord.php", - "src/phputf8/str_ireplace.php", - "src/phputf8/str_pad.php", - "src/phputf8/str_split.php", - "src/phputf8/strcasecmp.php", - "src/phputf8/strcspn.php", - "src/phputf8/stristr.php", - "src/phputf8/strrev.php", - "src/phputf8/strspn.php", - "src/phputf8/trim.php", - "src/phputf8/ucfirst.php", - "src/phputf8/ucwords.php", - "src/phputf8/utils/ascii.php", - "src/phputf8/utils/validation.php" - ], - "psr-4": { - "Joomla\\String\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla String Package", - "homepage": "https://github.com/joomla-framework/string", - "keywords": [ - "framework", - "joomla", - "string" - ], - "support": { - "issues": "https://github.com/joomla-framework/string/issues", - "source": "https://github.com/joomla-framework/string/tree/3.0.4" - }, - "time": "2025-07-19T15:25:56+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": "rubix/ml", - "version": "2.5.3", - "source": { - "type": "git", - "url": "https://github.com/RubixML/ML.git", - "reference": "e0960dcb19c9722ccbc4826f5b9417a75fa01613" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/RubixML/ML/zipball/e0960dcb19c9722ccbc4826f5b9417a75fa01613", - "reference": "e0960dcb19c9722ccbc4826f5b9417a75fa01613", - "shasum": "" - }, - "require": { - "amphp/parallel": "^1.3", - "andrewdalpino/okbloomer": "^1.0", - "ext-json": "*", - "php": ">=7.4", - "psr/log": "^1.1|^2.0|^3.0", - "rubix/tensor": "^3.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.17", - "symfony/polyfill-php82": "^1.27", - "symfony/polyfill-php83": "^1.27", - "wamania/php-stemmer": "^4.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.0", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^9.0" - }, - "suggest": { - "ext-gd": "For image support", - "ext-mbstring": "For fast multibyte string manipulation", - "ext-svm": "For Support Vector Machine engine (libsvm)", - "ext-tensor": "For fast Matrix/Vector computing" - }, - "type": "library", - "autoload": { - "files": [ - "src/constants.php", - "src/functions.php" - ], - "psr-4": { - "Rubix\\ML\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrew DalPino", - "homepage": "https://github.com/andrewdalpino" - }, - { - "name": "Contributors", - "homepage": "https://github.com/RubixML/ML/graphs/contributors" - } - ], - "description": "A high-level machine learning and deep learning library for the PHP language.", - "homepage": "https://rubixml.github.io/ML/latest/", - "keywords": [ - "Algorithm", - "Deep learning", - "Linear regression", - "Neural network", - "Rubix", - "TF-IDF", - "adaboost", - "ai", - "analytics", - "anomaly detection", - "artificial intelligence", - "cart", - "classification", - "classifier", - "clustering", - "cross validation", - "data mining", - "data science", - "dataset", - "dbscan", - "dimensionality reduction", - "ensemble", - "estimator", - "etl", - "feature extraction", - "feature importance", - "feature selection", - "gaussian mixture", - "gbm", - "gmm", - "gradient boost", - "grid search", - "image recognition", - "imputation", - "inference", - "isolation forest", - "k-means", - "k-nearest neighbors", - "kmeans", - "knn", - "local outlier factor", - "loda", - "lof", - "logistic regression", - "machine learning", - "manifold learning", - "mean shift", - "ml", - "mlp", - "multilayer perceptron", - "naive bayes", - "natural language processing", - "nearest neighbors", - "nlp", - "outlier detection", - "php", - "php ai", - "php machine learning", - "php ml", - "prediction", - "predictive modeling", - "random forest", - "ranking", - "recommendation", - "regression", - "regressor", - "ridge", - "rubix ml", - "rubixml", - "softmax", - "supervised learning", - "support vector machine", - "svm", - "t-sne", - "text mining", - "tf idf", - "tsne", - "unsupervised learning" - ], - "support": { - "chat": "https://t.me/RubixML", - "docs": "https://rubixml.github.io/ML/latest/", - "issues": "https://github.com/RubixML/ML/issues", - "source": "https://github.com/RubixML/ML" - }, - "funding": [ - { - "url": "https://github.com/sponsors/andrewdalpino", - "type": "github" - } - ], - "time": "2025-10-01T17:52:15+00:00" - }, - { - "name": "rubix/tensor", - "version": "3.0.5", - "source": { - "type": "git", - "url": "https://github.com/RubixML/Tensor.git", - "reference": "9f0ee170319280dcf081984adccefa8b0e6f06b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/RubixML/Tensor/zipball/9f0ee170319280dcf081984adccefa8b0e6f06b8", - "reference": "9f0ee170319280dcf081984adccefa8b0e6f06b8", - "shasum": "" - }, - "require": { - "php": ">=7.4" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.0", - "phalcon/zephir": "^0.17", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/constants.php" - ], - "psr-4": { - "Tensor\\": "src/", - "Zephir\\Optimizers\\FunctionCall\\": "optimizers/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrew DalPino", - "email": "support@andrewdalpino.com", - "homepage": "https://github.com/andrewdalpino", - "role": "Project Lead" - }, - { - "name": "Contributors", - "homepage": "https://github.com/RubixML/Tensor/graphs/contributors" - } - ], - "description": "A library and extension that provides objects for scientific computing in PHP.", - "homepage": "https://github.com/RubixML/Tensor", - "keywords": [ - "1d convolution", - "2d convolution", - "arithmetic", - "blas", - "computation", - "computing", - "convolution", - "decomposition", - "dot product", - "eigendecomposition", - "eigenvalue", - "eigenvector", - "engineering", - "extension", - "lapack", - "linear algebra", - "math", - "matmul", - "matrix", - "matrix multiplication", - "multithreaded", - "php", - "php extension", - "pseudoinverse", - "scientific computing", - "signal processing", - "singular value decomposition", - "statistics", - "svd", - "tensor", - "trigonometry", - "vector", - "vector norm" - ], - "support": { - "chat": "https://t.me/RubixML", - "email": "support@andrewdalpino.com", - "issues": "https://github.com/RubixML/Tensor/issues", - "source": "https://github.com/RubixML/Tensor" - }, - "funding": [ - { - "url": "https://github.com/andrewdalpino", - "type": "github" - } - ], - "time": "2024-03-15T19:43:50+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.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-25T14:21:43+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-12-23T08:48:59+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.33.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-01-02T08:10:11+00:00" - }, - { - "name": "symfony/polyfill-php82", - "version": "v1.33.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php82.git", - "reference": "5d2ed36f7734637dacc025f179698031951b1692" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/5d2ed36f7734637dacc025f179698031951b1692", - "reference": "5d2ed36f7734637dacc025f179698031951b1692", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php82\\": "" - }, - "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.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php82/tree/v1.33.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-php83", - "version": "v1.33.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", - "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\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.33.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-07-08T02:45:35+00:00" - }, - { - "name": "wamania/php-stemmer", - "version": "v4.0.0", - "source": { - "type": "git", - "url": "https://github.com/wamania/php-stemmer.git", - "reference": "d96509294ea843b4b86e4900df27424a6ea0ace8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wamania/php-stemmer/zipball/d96509294ea843b4b86e4900df27424a6ea0ace8", - "reference": "d96509294ea843b4b86e4900df27424a6ea0ace8", - "shasum": "" - }, - "require": { - "joomla/string": ">=2.0.1", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Wamania\\Snowball\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Wamania", - "homepage": "http://wamania.com" - } - ], - "description": "Native PHP Stemmer", - "keywords": [ - "php", - "porter", - "stemmer" - ], - "support": { - "issues": "https://github.com/wamania/php-stemmer/issues", - "source": "https://github.com/wamania/php-stemmer/tree/v4.0.0" - }, - "time": "2024-12-22T08:54:03+00:00" - } - ], - "packages-dev": [], - "aliases": [ - { - "package": "wamania/php-stemmer", - "version": "4.0.0.0", - "alias": "3.0", - "alias_normalized": "3.0.0.0" - } - ], - "minimum-stability": "stable", - "stability-flags": {}, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=8.2", - "ext-json": "*", - "ext-pdo": "*" - }, - "platform-dev": {}, - "platform-overrides": { - "php": "8.2.0" - }, - "plugin-api-version": "2.6.0" -} From f99e7522a5a87f12c03888f328f3b4cd6b9c43cf Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 12:11:42 +0200 Subject: [PATCH 31/47] fix: Run composer install before composer bin all install Signed-off-by: Marcel Klehr --- composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/composer.json b/composer.json index 9e54a17e..6fbc6322 100644 --- a/composer.json +++ b/composer.json @@ -27,6 +27,7 @@ "composer dump-autoload" ], "post-update-cmd": [ + "composer install --no-scripts", "@composer bin all install --ansi", "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || (vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\"/tmp/scoped-vendor\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\" && cp -rf /tmp/scoped-vendor/* ./vendor/ && rm -rf /tmp/scoped-vendor)", "composer dump-autoload" From a39217111e32f62d57dfb5c602c99d495518799c Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 12:15:42 +0200 Subject: [PATCH 32/47] fixes Signed-off-by: Marcel Klehr --- composer.json | 1 - vendor-bin/php-scoper/composer.json | 13 +- vendor-bin/php-scoper/composer.lock | 409 ++++++++++++++++------------ 3 files changed, 236 insertions(+), 187 deletions(-) diff --git a/composer.json b/composer.json index 6fbc6322..9e54a17e 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,6 @@ "composer dump-autoload" ], "post-update-cmd": [ - "composer install --no-scripts", "@composer bin all install --ansi", "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || (vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\"/tmp/scoped-vendor\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\" && cp -rf /tmp/scoped-vendor/* ./vendor/ && rm -rf /tmp/scoped-vendor)", "composer dump-autoload" diff --git a/vendor-bin/php-scoper/composer.json b/vendor-bin/php-scoper/composer.json index d92eddc3..99977f4d 100644 --- a/vendor-bin/php-scoper/composer.json +++ b/vendor-bin/php-scoper/composer.json @@ -1,7 +1,6 @@ { "require": { - "humbug/php-scoper": "0.18.19", - "cweagans/composer-patches": "^1.7" + "humbug/php-scoper": "0.18.19" }, "config": { "platform": { @@ -11,13 +10,5 @@ "cweagans/composer-patches": true } }, - "extra": { - "patches": { - "thecodingmachine/safe": { - "PHP 8.4 compatibility, patch 1": "https://patch-diff.githubusercontent.com/raw/thecodingmachine/safe/pull/464.patch", - "PHP 8.4 compatibility, patch 2": "https://patch-diff.githubusercontent.com/raw/thecodingmachine/safe/pull/466.patch", - "PHP 8.4 compatibility, patch 3": "https://github.com/blizzz/safe/commit/6eeee2a20ffb2be3456ae8615b227c78e1ca8a20.patch" - } - } - } + "minimum-stability": "dev" } \ No newline at end of file diff --git a/vendor-bin/php-scoper/composer.lock b/vendor-bin/php-scoper/composer.lock index f997e25c..431b91fe 100644 --- a/vendor-bin/php-scoper/composer.lock +++ b/vendor-bin/php-scoper/composer.lock @@ -4,56 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6b203b4405890920a7d6c71dde7574d7", + "content-hash": "085b7ee6059a9fda1562a4c998f89479", "packages": [ - { - "name": "cweagans/composer-patches", - "version": "1.7.3", - "source": { - "type": "git", - "url": "https://github.com/cweagans/composer-patches.git", - "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/e190d4466fe2b103a55467dfa83fc2fecfcaf2db", - "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.3.0" - }, - "require-dev": { - "composer/composer": "~1.0 || ~2.0", - "phpunit/phpunit": "~4.6" - }, - "type": "composer-plugin", - "extra": { - "class": "cweagans\\Composer\\Patches" - }, - "autoload": { - "psr-4": { - "cweagans\\Composer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Cameron Eagans", - "email": "me@cweagans.net" - } - ], - "description": "Provides a way to patch Composer packages.", - "support": { - "issues": "https://github.com/cweagans/composer-patches/issues", - "source": "https://github.com/cweagans/composer-patches/tree/1.7.3" - }, - "time": "2022-12-20T22:53:13+00:00" - }, { "name": "fidry/console", "version": "0.6.11", @@ -142,27 +94,27 @@ }, { "name": "fidry/filesystem", - "version": "1.2.3", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/theofidry/filesystem.git", - "reference": "3e1f9cac40f807b7c4196013ab77cc1b9416e3e5" + "reference": "d0d9e8dfa43f7663da153c306b0d5bc24846ad8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/filesystem/zipball/3e1f9cac40f807b7c4196013ab77cc1b9416e3e5", - "reference": "3e1f9cac40f807b7c4196013ab77cc1b9416e3e5", + "url": "https://api.github.com/repos/theofidry/filesystem/zipball/d0d9e8dfa43f7663da153c306b0d5bc24846ad8e", + "reference": "d0d9e8dfa43f7663da153c306b0d5bc24846ad8e", "shasum": "" }, "require": { - "php": "^8.1", + "php": "^8.3", "symfony/filesystem": "^6.4 || ^7.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.4", "ergebnis/composer-normalize": "^2.28", "infection/infection": ">=0.26", - "phpunit/phpunit": "^10.3", + "phpunit/phpunit": "^12", "symfony/finder": "^6.4 || ^7.0" }, "type": "library", @@ -196,7 +148,7 @@ ], "support": { "issues": "https://github.com/theofidry/filesystem/issues", - "source": "https://github.com/theofidry/filesystem/tree/1.2.3" + "source": "https://github.com/theofidry/filesystem/tree/1.3.0" }, "funding": [ { @@ -204,31 +156,33 @@ "type": "github" } ], - "time": "2025-02-13T22:58:51+00:00" + "time": "2025-02-13T23:05:19+00:00" }, { "name": "humbug/php-scoper", - "version": "0.18.18", + "version": "0.18.19", "source": { "type": "git", "url": "https://github.com/humbug/php-scoper.git", - "reference": "dd55d01a937602c9473cfbe0ecab9521cb9740aa" + "reference": "518d551ad5d6996c69faf6b49ed692b5ed816bdc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/humbug/php-scoper/zipball/dd55d01a937602c9473cfbe0ecab9521cb9740aa", - "reference": "dd55d01a937602c9473cfbe0ecab9521cb9740aa", + "url": "https://api.github.com/repos/humbug/php-scoper/zipball/518d551ad5d6996c69faf6b49ed692b5ed816bdc", + "reference": "518d551ad5d6996c69faf6b49ed692b5ed816bdc", "shasum": "" }, "require": { "fidry/console": "^0.6.10", "fidry/filesystem": "^1.1", - "jetbrains/phpstorm-stubs": "^2024.1", + "jetbrains/phpstorm-stubs": "dev-master", "nikic/php-parser": "^5.0", "php": "^8.2", - "symfony/console": "^6.4 || ^7.0", - "symfony/filesystem": "^6.4 || ^7.0", - "symfony/finder": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.4", + "symfony/filesystem": "^6.4 || ^7.4", + "symfony/finder": "^6.4 || ^7.4", + "symfony/polyfill-iconv": "^1.33", + "symfony/polyfill-mbstring": "^1.33", "symfony/var-dumper": "^7.1", "thecodingmachine/safe": "^3.0" }, @@ -239,7 +193,7 @@ "humbug/box": "^4.6.2", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^10.0 || ^11.0", - "symfony/yaml": "^6.4 || ^7.0" + "symfony/yaml": "^6.4 || ^7.4" }, "bin": [ "bin/php-scoper" @@ -286,30 +240,31 @@ "description": "Prefixes all PHP namespaces in a file or directory.", "support": { "issues": "https://github.com/humbug/php-scoper/issues", - "source": "https://github.com/humbug/php-scoper/tree/0.18.18" + "source": "https://github.com/humbug/php-scoper/tree/0.18.19" }, - "time": "2025-10-15T15:29:47+00:00" + "time": "2026-03-02T11:06:51+00:00" }, { "name": "jetbrains/phpstorm-stubs", - "version": "v2024.3", + "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/JetBrains/phpstorm-stubs.git", - "reference": "0e82bdfe850c71857ee4ee3501ed82a9fc5d043c" + "url": "https://github.com/JetBrains/phpstorm-stubs", + "reference": "3327932472f512d2eb9e122b19702b335083fd9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/0e82bdfe850c71857ee4ee3501ed82a9fc5d043c", - "reference": "0e82bdfe850c71857ee4ee3501ed82a9fc5d043c", + "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/3327932472f512d2eb9e122b19702b335083fd9d", + "reference": "3327932472f512d2eb9e122b19702b335083fd9d", "shasum": "" }, "require-dev": { - "friendsofphp/php-cs-fixer": "v3.64.0", - "nikic/php-parser": "v5.3.1", - "phpdocumentor/reflection-docblock": "5.6.0", - "phpunit/phpunit": "11.4.3" + "friendsofphp/php-cs-fixer": "^v3.86", + "nikic/php-parser": "^v5.6", + "phpdocumentor/reflection-docblock": "^5.6", + "phpunit/phpunit": "^12.3" }, + "default-branch": true, "type": "library", "autoload": { "files": [ @@ -332,23 +287,20 @@ "stubs", "type" ], - "support": { - "source": "https://github.com/JetBrains/phpstorm-stubs/tree/v2024.3" - }, - "time": "2024-12-14T08:03:12+00:00" + "time": "2026-03-18T23:46:11+00:00" }, { "name": "nikic/php-parser", - "version": "v5.7.0", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + "reference": "50f0d9c9d0e3cff1163c959c50aaaaa4a7115f08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/50f0d9c9d0e3cff1163c959c50aaaaa4a7115f08", + "reference": "50f0d9c9d0e3cff1163c959c50aaaaa4a7115f08", "shasum": "" }, "require": { @@ -361,6 +313,7 @@ "ircmaxell/php-yacc": "^0.0.7", "phpunit/phpunit": "^9.0" }, + "default-branch": true, "bin": [ "bin/php-parse" ], @@ -391,27 +344,28 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + "source": "https://github.com/nikic/PHP-Parser/tree/master" }, - "time": "2025-12-06T11:56:16+00:00" + "time": "2026-02-26T13:20:22+00:00" }, { "name": "psr/container", - "version": "2.0.2", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + "reference": "707984727bd5b2b670e59559d3ed2500240cf875" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "url": "https://api.github.com/repos/php-fig/container/zipball/707984727bd5b2b670e59559d3ed2500240cf875", + "reference": "707984727bd5b2b670e59559d3ed2500240cf875", "shasum": "" }, "require": { "php": ">=7.4.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -444,27 +398,31 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" + "source": "https://github.com/php-fig/container" }, - "time": "2021-11-05T16:47:00+00:00" + "time": "2023-09-22T11:11:30+00:00" }, { "name": "psr/event-dispatcher", - "version": "1.0.0", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874", + "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874", "shasum": "" }, "require": { "php": ">=7.2.0" }, + "suggest": { + "fig/event-dispatcher-util": "Provides some useful PSR-14 utilities" + }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -483,7 +441,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Standard interfaces for event handling.", @@ -493,14 +451,13 @@ "psr-14" ], "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + "source": "https://github.com/php-fig/event-dispatcher" }, - "time": "2019-01-08T18:20:26+00:00" + "time": "2024-03-17T21:29:03+00:00" }, { "name": "psr/log", - "version": "3.0.2", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", @@ -515,6 +472,7 @@ "require": { "php": ">=8.0.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -550,16 +508,16 @@ }, { "name": "symfony/console", - "version": "v7.4.7", + "version": "7.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d" + "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/e1e6770440fb9c9b0cf725f81d1361ad1835329d", - "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d", + "url": "https://api.github.com/repos/symfony/console/zipball/1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", + "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", "shasum": "" }, "require": { @@ -624,7 +582,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.7" + "source": "https://github.com/symfony/console/tree/7.4" }, "funding": [ { @@ -644,25 +602,26 @@ "type": "tidelift" } ], - "time": "2026-03-06T14:06:20+00:00" + "time": "2026-03-30T13:54:39+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.6.0", + "version": "dev-main", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + "reference": "bbd66f9d55454b9b7a66a9cebe77523806a3288a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/bbd66f9d55454b9b7a66a9cebe77523806a3288a", + "reference": "bbd66f9d55454b9b7a66a9cebe77523806a3288a", "shasum": "" }, "require": { "php": ">=8.1" }, + "default-branch": true, "type": "library", "extra": { "thanks": { @@ -670,7 +629,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -695,7 +654,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/main" }, "funding": [ { @@ -706,31 +665,36 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-01-05T13:30:16+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.6.0", + "version": "dev-main", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", - "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/ccba7060602b7fed0b03c85bf025257f76d9ef32", + "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32", "shasum": "" }, "require": { "php": ">=8.1", "psr/event-dispatcher": "^1" }, + "default-branch": true, "type": "library", "extra": { "thanks": { @@ -738,7 +702,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -771,7 +735,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/main" }, "funding": [ { @@ -782,25 +746,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-01-05T13:30:16+00:00" }, { "name": "symfony/filesystem", - "version": "v7.4.6", + "version": "7.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e" + "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3ebc794fa5315e59fd122561623c2e2e4280538e", - "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/58b9790d12f9670b7f53a1c1738febd3108970a5", + "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5", "shasum": "" }, "require": { @@ -837,7 +805,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.6" + "source": "https://github.com/symfony/filesystem/tree/7.4" }, "funding": [ { @@ -857,20 +825,20 @@ "type": "tidelift" } ], - "time": "2026-02-25T16:50:00+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/finder", - "version": "v7.4.6", + "version": "7.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf" + "reference": "e0be088d22278583a82da281886e8c3592fbf149" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/8655bf1076b7a3a346cb11413ffdabff50c7ffcf", - "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf", + "url": "https://api.github.com/repos/symfony/finder/zipball/e0be088d22278583a82da281886e8c3592fbf149", + "reference": "e0be088d22278583a82da281886e8c3592fbf149", "shasum": "" }, "require": { @@ -905,7 +873,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.4.6" + "source": "https://github.com/symfony/finder/tree/7.4" }, "funding": [ { @@ -925,11 +893,11 @@ "type": "tidelift" } ], - "time": "2026-01-29T09:40:50+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.33.0", + "version": "1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -950,6 +918,7 @@ "suggest": { "ext-ctype": "For best performance" }, + "default-branch": true, "type": "library", "extra": { "thanks": { @@ -1010,9 +979,94 @@ ], "time": "2024-09-09T11:45:10+00:00" }, + { + "name": "symfony/polyfill-iconv", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "5f3b930437ae03ae5dff61269024d8ea1b3774aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/5f3b930437ae03ae5dff61269024d8ea1b3774aa", + "reference": "5f3b930437ae03ae5dff61269024d8ea1b3774aa", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-iconv": "*" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "default-branch": true, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + } + }, + "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 Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-17T14:58:18+00:00" + }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.33.0", + "version": "1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", @@ -1030,6 +1084,7 @@ "suggest": { "ext-intl": "For best performance" }, + "default-branch": true, "type": "library", "extra": { "thanks": { @@ -1094,7 +1149,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.33.0", + "version": "1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -1112,6 +1167,7 @@ "suggest": { "ext-intl": "For best performance" }, + "default-branch": true, "type": "library", "extra": { "thanks": { @@ -1179,7 +1235,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", + "version": "1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -1201,6 +1257,7 @@ "suggest": { "ext-mbstring": "For best performance" }, + "default-branch": true, "type": "library", "extra": { "thanks": { @@ -1264,21 +1321,22 @@ }, { "name": "symfony/polyfill-php84", - "version": "v1.33.0", + "version": "1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + "reference": "4acd8b3205f17b5811d5e036e89690fe8baad365" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/4acd8b3205f17b5811d5e036e89690fe8baad365", + "reference": "4acd8b3205f17b5811d5e036e89690fe8baad365", "shasum": "" }, "require": { "php": ">=7.2" }, + "default-branch": true, "type": "library", "extra": { "thanks": { @@ -1320,7 +1378,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php84/tree/1.x" }, "funding": [ { @@ -1340,20 +1398,20 @@ "type": "tidelift" } ], - "time": "2025-06-24T13:30:11+00:00" + "time": "2025-08-20T10:44:59+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.6.1", + "version": "dev-main", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", - "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a", "shasum": "" }, "require": { @@ -1364,6 +1422,7 @@ "conflict": { "ext-psr": "<1.1|>=2" }, + "default-branch": true, "type": "library", "extra": { "thanks": { @@ -1371,7 +1430,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -1407,7 +1466,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" + "source": "https://github.com/symfony/service-contracts/tree/main" }, "funding": [ { @@ -1427,40 +1486,40 @@ "type": "tidelift" } ], - "time": "2025-07-15T11:30:57+00:00" + "time": "2026-03-28T09:44:51+00:00" }, { "name": "symfony/string", - "version": "v7.4.6", + "version": "8.1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "9f209231affa85aa930a5e46e6eb03381424b30b" + "reference": "59d447e2ec5d46c5e26176c3020614aa6b43042e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/9f209231affa85aa930a5e46e6eb03381424b30b", - "reference": "9f209231affa85aa930a5e46e6eb03381424b30b", + "url": "https://api.github.com/repos/symfony/string/zipball/59d447e2ec5d46c5e26176c3020614aa6b43042e", + "reference": "59d447e2ec5d46c5e26176c3020614aa6b43042e", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.33", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-intl-grapheme": "^1.33", + "symfony/polyfill-intl-normalizer": "^1.0", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1|^8.0", - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/emoji": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0|^8.0" + "symfony/var-exporter": "^7.4|^8.0" }, + "default-branch": true, "type": "library", "autoload": { "files": [ @@ -1498,7 +1557,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.4.6" + "source": "https://github.com/symfony/string/tree/8.1" }, "funding": [ { @@ -1518,20 +1577,20 @@ "type": "tidelift" } ], - "time": "2026-02-09T09:33:46+00:00" + "time": "2026-03-30T15:21:58+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.4.6", + "version": "7.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291" + "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/045321c440ac18347b136c63d2e9bf28a2dc0291", - "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9510c3966f749a1d1ff0059e1eabef6cc621e7fd", + "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd", "shasum": "" }, "require": { @@ -1585,7 +1644,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.4.6" + "source": "https://github.com/symfony/var-dumper/tree/7.4" }, "funding": [ { @@ -1605,7 +1664,7 @@ "type": "tidelift" } ], - "time": "2026-02-15T10:53:20+00:00" + "time": "2026-03-30T13:44:50+00:00" }, { "name": "thecodingmachine/safe", @@ -1811,14 +1870,14 @@ ], "packages-dev": [], "aliases": [], - "minimum-stability": "stable", + "minimum-stability": "dev", "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": {}, "platform-dev": {}, "platform-overrides": { - "php": "8.2" + "php": "8.4" }, "plugin-api-version": "2.6.0" } From 9244c9ec4bdb66236376488835ee1e41d4c84457 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 13:02:28 +0200 Subject: [PATCH 33/47] fix(Makefile) Signed-off-by: Marcel Klehr --- Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile b/Makefile index e2336f8b..4e559eed 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,6 @@ npm-update: composer-install: composer install - composer install install-binaries: mkdir -p bin From 4416698bb3ea4fc049844dd39f1b531bdff394c1 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 13:16:47 +0200 Subject: [PATCH 34/47] fix(composer.json) Signed-off-by: Marcel Klehr --- composer.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/composer.json b/composer.json index 9e54a17e..cc35ef2d 100644 --- a/composer.json +++ b/composer.json @@ -22,11 +22,13 @@ "psalm:update-baseline:force": "psalm --threads=1 --update-baseline --set-baseline=psalm-baseline.xml", "test:unit": "phpunit --config tests/phpunit.xml", "post-install-cmd": [ + "composer install --no-scripts", "@composer bin all install --ansi", "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || (vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\"/tmp/scoped-vendor\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\" && cp -rf /tmp/scoped-vendor/* ./vendor/ && rm -rf /tmp/scoped-vendor)", "composer dump-autoload" ], "post-update-cmd": [ + "composer install --no-scripts", "@composer bin all install --ansi", "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || (vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\"/tmp/scoped-vendor\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\" && cp -rf /tmp/scoped-vendor/* ./vendor/ && rm -rf /tmp/scoped-vendor)", "composer dump-autoload" From e698e0a5d8514e068772c2db79dbd1466a59bb6f Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 13:28:36 +0200 Subject: [PATCH 35/47] fix(composer.json): Pin bamarni/composer-bin-plugin to 1.8.x Signed-off-by: Marcel Klehr --- composer.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/composer.json b/composer.json index cc35ef2d..e116d165 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ "rubix/ml": "2.x", "amphp/parallel": "1.4.x", "wamania/php-stemmer": "4.0 as 3.0", - "bamarni/composer-bin-plugin": "^1.8" + "bamarni/composer-bin-plugin": "1.8.x" }, "autoload": { "psr-4": { @@ -22,13 +22,11 @@ "psalm:update-baseline:force": "psalm --threads=1 --update-baseline --set-baseline=psalm-baseline.xml", "test:unit": "phpunit --config tests/phpunit.xml", "post-install-cmd": [ - "composer install --no-scripts", "@composer bin all install --ansi", "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || (vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\"/tmp/scoped-vendor\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\" && cp -rf /tmp/scoped-vendor/* ./vendor/ && rm -rf /tmp/scoped-vendor)", "composer dump-autoload" ], "post-update-cmd": [ - "composer install --no-scripts", "@composer bin all install --ansi", "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || (vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\"/tmp/scoped-vendor\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\" && cp -rf /tmp/scoped-vendor/* ./vendor/ && rm -rf /tmp/scoped-vendor)", "composer dump-autoload" From 477cf26024112fb9c69e518ce48bd00e1a81bb4e Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 13:48:39 +0200 Subject: [PATCH 36/47] fix(composer.json): Remove bamarni bin plugin Signed-off-by: Marcel Klehr --- composer.json | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/composer.json b/composer.json index e116d165..a9d120a8 100644 --- a/composer.json +++ b/composer.json @@ -5,8 +5,7 @@ "ext-pdo": "*", "rubix/ml": "2.x", "amphp/parallel": "1.4.x", - "wamania/php-stemmer": "4.0 as 3.0", - "bamarni/composer-bin-plugin": "1.8.x" + "wamania/php-stemmer": "4.0 as 3.0" }, "autoload": { "psr-4": { @@ -15,20 +14,26 @@ }, "scripts": { "lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l", - "cs:check": "php-cs-fixer fix --dry-run --diff", - "cs:fix": "php-cs-fixer fix", - "psalm": "psalm", - "psalm:update-baseline": "psalm --threads=1 --update-baseline", - "psalm:update-baseline:force": "psalm --threads=1 --update-baseline --set-baseline=psalm-baseline.xml", - "test:unit": "phpunit --config tests/phpunit.xml", + "cs:check": "vendor-bin/php-cs-fixer/vendor/bin/php-cs-fixer fix --dry-run --diff", + "cs:fix": "vendor-bin/php-cs-fixer/vendor/bin/php-cs-fixer fix", + "psalm": "vendor-bin/psalm/vendor/bin/psalm", + "psalm:update-baseline": "vendor-bin/psalm/vendor/bin/psalm --threads=1 --update-baseline", + "psalm:update-baseline:force": "vendor-bin/psalm/vendor/bin/psalm --threads=1 --update-baseline --set-baseline=psalm-baseline.xml", + "test:unit": "vendor-bin/phpunit/vendor/bin/phpunit --config tests/phpunit.xml", "post-install-cmd": [ - "@composer bin all install --ansi", - "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || (vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\"/tmp/scoped-vendor\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\" && cp -rf /tmp/scoped-vendor/* ./vendor/ && rm -rf /tmp/scoped-vendor)", + "composer install --working-dir=vendor-bin/php-cs-fixer --ansi --no-interaction", + "composer install --working-dir=vendor-bin/php-scoper --ansi --no-interaction", + "composer install --working-dir=vendor-bin/phpunit --ansi --no-interaction", + "composer install --working-dir=vendor-bin/psalm --ansi --no-interaction", + "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || (vendor-bin/php-scoper/vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\"/tmp/scoped-vendor\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\" && cp -rf /tmp/scoped-vendor/* ./vendor/ && rm -rf /tmp/scoped-vendor)", "composer dump-autoload" ], "post-update-cmd": [ - "@composer bin all install --ansi", - "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || (vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\"/tmp/scoped-vendor\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\" && cp -rf /tmp/scoped-vendor/* ./vendor/ && rm -rf /tmp/scoped-vendor)", + "composer install --working-dir=vendor-bin/php-cs-fixer --ansi --no-interaction", + "composer install --working-dir=vendor-bin/php-scoper --ansi --no-interaction", + "composer install --working-dir=vendor-bin/phpunit --ansi --no-interaction", + "composer install --working-dir=vendor-bin/psalm --ansi --no-interaction", + "grep -r 'OCA\\\\Recognize\\\\Vendor\\\\Rubix' ./vendor/rubix/ml/ || (vendor-bin/php-scoper/vendor/bin/php-scoper add-prefix --prefix='OCA\\Recognize\\Vendor' --output-dir=\"/tmp/scoped-vendor\" --working-dir=\"./vendor/\" -f --config=\"../scoper.inc.php\" && cp -rf /tmp/scoped-vendor/* ./vendor/ && rm -rf /tmp/scoped-vendor)", "composer dump-autoload" ] }, @@ -37,7 +42,6 @@ "php": "8.2.0" }, "allow-plugins": { - "bamarni/composer-bin-plugin": true, "composer/package-versions-deprecated": true }, "autoloader-suffix": "Recognize", From d4ae4220f4c97fd06f934c39a2a820a21b3d2e04 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 13:55:25 +0200 Subject: [PATCH 37/47] fix: Fix php-cs-fixer Signed-off-by: Marcel Klehr --- .php-cs-fixer.dist.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index c7ecba4b..f37f3b69 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -1,7 +1,7 @@ Date: Tue, 31 Mar 2026 13:57:41 +0200 Subject: [PATCH 38/47] fixes Signed-off-by: Marcel Klehr --- vendor-bin/php-cs-fixer/composer.json | 5 +++++ vendor-bin/php-scoper/composer.json | 5 +---- vendor-bin/phpunit/composer.json | 5 +++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/vendor-bin/php-cs-fixer/composer.json b/vendor-bin/php-cs-fixer/composer.json index 6aaae3d1..6a7d052c 100644 --- a/vendor-bin/php-cs-fixer/composer.json +++ b/vendor-bin/php-cs-fixer/composer.json @@ -2,5 +2,10 @@ "require": { "friendsofphp/php-cs-fixer": "3.x", "nextcloud/coding-standard": "1.x" + }, + "config": { + "platform": { + "php": "8.2" + } } } diff --git a/vendor-bin/php-scoper/composer.json b/vendor-bin/php-scoper/composer.json index 99977f4d..5f855a6f 100644 --- a/vendor-bin/php-scoper/composer.json +++ b/vendor-bin/php-scoper/composer.json @@ -4,10 +4,7 @@ }, "config": { "platform": { - "php": "8.4" - }, - "allow-plugins": { - "cweagans/composer-patches": true + "php": "8.2" } }, "minimum-stability": "dev" diff --git a/vendor-bin/phpunit/composer.json b/vendor-bin/phpunit/composer.json index 1247357e..fec17ce2 100644 --- a/vendor-bin/phpunit/composer.json +++ b/vendor-bin/phpunit/composer.json @@ -1,5 +1,10 @@ { "require-dev": { "phpunit/phpunit": "9.x" + }, + "config": { + "platform": { + "php": "8.2" + } } } From 8f6a4286ebf980139285eabc05cc29a6359f38f6 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 14:52:54 +0200 Subject: [PATCH 39/47] fixes Signed-off-by: Marcel Klehr --- vendor-bin/psalm/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor-bin/psalm/composer.json b/vendor-bin/psalm/composer.json index 34e9d433..85fe63a7 100644 --- a/vendor-bin/psalm/composer.json +++ b/vendor-bin/psalm/composer.json @@ -6,7 +6,7 @@ }, "config": { "platform": { - "php": "8.2.27" + "php": "8.2.30" } }, "require-dev": { From 724eadea9d8599aa949af558fad8394ce342a340 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 15:17:15 +0200 Subject: [PATCH 40/47] fix: Autoloader loading issue Signed-off-by: Marcel Klehr --- lib/AppInfo/Application.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 6d5925eb..ff23f55e 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -47,7 +47,7 @@ public function __construct() { } public function register(IRegistrationContext $context): void { - @include_once __DIR__ . '/../../vendor/scoper-autoload.php'; + @include_once __DIR__ . '/../../vendor/autoload.php'; @include_once __DIR__ . '/../../vendor/rubix/ml/src/functions.php'; @include_once __DIR__ . '/../../vendor/rubix/ml/src/constants.php'; From d25c98d2a9f7a623bcb20cbcde174662517b5acf Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 15:27:50 +0200 Subject: [PATCH 41/47] fix: Fix php-cs-fixer vendor bin install Signed-off-by: Marcel Klehr --- vendor-bin/php-cs-fixer/composer.lock | 218 +++++++++++++------------- 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/vendor-bin/php-cs-fixer/composer.lock b/vendor-bin/php-cs-fixer/composer.lock index d2e9c7bc..c7e8cb5c 100644 --- a/vendor-bin/php-cs-fixer/composer.lock +++ b/vendor-bin/php-cs-fixer/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": "9e21b68134ecd6c23608aeb19271ae57", + "content-hash": "f815a8266472c33b33dea0dbc9309853", "packages": [ { "name": "clue/ndjson-react", @@ -1226,29 +1226,29 @@ }, { "name": "sebastian/diff", - "version": "8.0.0", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "a2b6d09d7729ee87d605a439469f9dcc39be5ea3" + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/a2b6d09d7729ee87d605a439469f9dcc39be5ea3", - "reference": "a2b6d09d7729ee87d605a439469f9dcc39be5ea3", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=8.4" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^13.0", - "symfony/process": "^7.2" + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "8.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -1281,63 +1281,59 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/8.0.0" + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/diff", - "type": "tidelift" } ], - "time": "2026-02-06T04:42:27+00:00" + "time": "2024-07-03T04:53:05+00:00" }, { "name": "symfony/console", - "version": "v8.0.7", + "version": "v7.4.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "15ed9008a4ebe2d6a78e4937f74e0c13ef2e618a" + "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/15ed9008a4ebe2d6a78e4937f74e0c13ef2e618a", - "reference": "15ed9008a4ebe2d6a78e4937f74e0c13ef2e618a", + "url": "https://api.github.com/repos/symfony/console/zipball/e1e6770440fb9c9b0cf725f81d1361ad1835329d", + "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d", "shasum": "" }, "require": { - "php": ">=8.4", - "symfony/polyfill-mbstring": "^1.0", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.4|^8.0" + "symfony/string": "^7.2|^8.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/event-dispatcher": "^7.4|^8.0", - "symfony/http-foundation": "^7.4|^8.0", - "symfony/http-kernel": "^7.4|^8.0", - "symfony/lock": "^7.4|^8.0", - "symfony/messenger": "^7.4|^8.0", - "symfony/process": "^7.4|^8.0", - "symfony/stopwatch": "^7.4|^8.0", - "symfony/var-dumper": "^7.4|^8.0" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -1371,7 +1367,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v8.0.7" + "source": "https://github.com/symfony/console/tree/v7.4.7" }, "funding": [ { @@ -1391,7 +1387,7 @@ "type": "tidelift" } ], - "time": "2026-03-06T14:06:22+00:00" + "time": "2026-03-06T14:06:20+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1462,24 +1458,24 @@ }, { "name": "symfony/event-dispatcher", - "version": "v8.0.4", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "99301401da182b6cfaa4700dbe9987bb75474b47" + "reference": "dc2c0eba1af673e736bb851d747d266108aea746" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/99301401da182b6cfaa4700dbe9987bb75474b47", - "reference": "99301401da182b6cfaa4700dbe9987bb75474b47", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dc2c0eba1af673e736bb851d747d266108aea746", + "reference": "dc2c0eba1af673e736bb851d747d266108aea746", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/security-http": "<7.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -1488,14 +1484,14 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/error-handler": "^7.4|^8.0", - "symfony/expression-language": "^7.4|^8.0", - "symfony/framework-bundle": "^7.4|^8.0", - "symfony/http-foundation": "^7.4|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^7.4|^8.0" + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -1523,7 +1519,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/v8.0.4" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.4" }, "funding": [ { @@ -1543,7 +1539,7 @@ "type": "tidelift" } ], - "time": "2026-01-05T11:45:55+00:00" + "time": "2026-01-05T11:45:34+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -1623,25 +1619,25 @@ }, { "name": "symfony/filesystem", - "version": "v8.0.6", + "version": "v7.4.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "7bf9162d7a0dff98d079b72948508fa48018a770" + "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/7bf9162d7a0dff98d079b72948508fa48018a770", - "reference": "7bf9162d7a0dff98d079b72948508fa48018a770", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/3ebc794fa5315e59fd122561623c2e2e4280538e", + "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^7.4|^8.0" + "symfony/process": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -1669,7 +1665,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v8.0.6" + "source": "https://github.com/symfony/filesystem/tree/v7.4.6" }, "funding": [ { @@ -1689,27 +1685,27 @@ "type": "tidelift" } ], - "time": "2026-02-25T16:59:43+00:00" + "time": "2026-02-25T16:50:00+00:00" }, { "name": "symfony/finder", - "version": "v8.0.6", + "version": "v7.4.6", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "441404f09a54de6d1bd6ad219e088cdf4c91f97c" + "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/441404f09a54de6d1bd6ad219e088cdf4c91f97c", - "reference": "441404f09a54de6d1bd6ad219e088cdf4c91f97c", + "url": "https://api.github.com/repos/symfony/finder/zipball/8655bf1076b7a3a346cb11413ffdabff50c7ffcf", + "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf", "shasum": "" }, "require": { - "php": ">=8.4" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^7.4|^8.0" + "symfony/filesystem": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -1737,7 +1733,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v8.0.6" + "source": "https://github.com/symfony/finder/tree/v7.4.6" }, "funding": [ { @@ -1757,24 +1753,24 @@ "type": "tidelift" } ], - "time": "2026-01-29T09:41:02+00:00" + "time": "2026-01-29T09:40:50+00:00" }, { "name": "symfony/options-resolver", - "version": "v8.0.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "d2b592535ffa6600c265a3893a7f7fd2bad82dd7" + "reference": "b38026df55197f9e39a44f3215788edf83187b80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/d2b592535ffa6600c265a3893a7f7fd2bad82dd7", - "reference": "d2b592535ffa6600c265a3893a7f7fd2bad82dd7", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80", + "reference": "b38026df55197f9e39a44f3215788edf83187b80", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -1808,7 +1804,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v8.0.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.4.0" }, "funding": [ { @@ -1828,7 +1824,7 @@ "type": "tidelift" } ], - "time": "2025-11-12T15:55:31+00:00" + "time": "2025-11-12T15:39:26+00:00" }, { "name": "symfony/polyfill-ctype", @@ -2411,20 +2407,20 @@ }, { "name": "symfony/process", - "version": "v8.0.5", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674" + "reference": "608476f4604102976d687c483ac63a79ba18cc97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674", - "reference": "b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674", + "url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97", + "reference": "608476f4604102976d687c483ac63a79ba18cc97", "shasum": "" }, "require": { - "php": ">=8.4" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -2452,7 +2448,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v8.0.5" + "source": "https://github.com/symfony/process/tree/v7.4.5" }, "funding": [ { @@ -2472,7 +2468,7 @@ "type": "tidelift" } ], - "time": "2026-01-26T15:08:38+00:00" + "time": "2026-01-26T15:07:59+00:00" }, { "name": "symfony/service-contracts", @@ -2563,20 +2559,20 @@ }, { "name": "symfony/stopwatch", - "version": "v8.0.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "67df1914c6ccd2d7b52f70d40cf2aea02159d942" + "reference": "8a24af0a2e8a872fb745047180649b8418303084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/67df1914c6ccd2d7b52f70d40cf2aea02159d942", - "reference": "67df1914c6ccd2d7b52f70d40cf2aea02159d942", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8a24af0a2e8a872fb745047180649b8418303084", + "reference": "8a24af0a2e8a872fb745047180649b8418303084", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.2", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -2605,7 +2601,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v8.0.0" + "source": "https://github.com/symfony/stopwatch/tree/v7.4.0" }, "funding": [ { @@ -2625,38 +2621,39 @@ "type": "tidelift" } ], - "time": "2025-08-04T07:36:47+00:00" + "time": "2025-08-04T07:05:15+00:00" }, { "name": "symfony/string", - "version": "v8.0.6", + "version": "v7.4.6", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "6c9e1108041b5dce21a9a4984b531c4923aa9ec4" + "reference": "9f209231affa85aa930a5e46e6eb03381424b30b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/6c9e1108041b5dce21a9a4984b531c4923aa9ec4", - "reference": "6c9e1108041b5dce21a9a4984b531c4923aa9ec4", + "url": "https://api.github.com/repos/symfony/string/zipball/9f209231affa85aa930a5e46e6eb03381424b30b", + "reference": "9f209231affa85aa930a5e46e6eb03381424b30b", "shasum": "" }, "require": { - "php": ">=8.4", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-intl-grapheme": "^1.33", - "symfony/polyfill-intl-normalizer": "^1.0", - "symfony/polyfill-mbstring": "^1.0" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.4|^8.0", - "symfony/http-client": "^7.4|^8.0", - "symfony/intl": "^7.4|^8.0", + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^7.4|^8.0" + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -2695,7 +2692,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.0.6" + "source": "https://github.com/symfony/string/tree/v7.4.6" }, "funding": [ { @@ -2715,7 +2712,7 @@ "type": "tidelift" } ], - "time": "2026-02-09T10:14:57+00:00" + "time": "2026-02-09T09:33:46+00:00" } ], "packages-dev": [], @@ -2726,5 +2723,8 @@ "prefer-lowest": false, "platform": {}, "platform-dev": {}, + "platform-overrides": { + "php": "8.2" + }, "plugin-api-version": "2.6.0" } From ca474fd60aa7d0fe49d628d7c0396b05fd5f7a60 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 15:40:25 +0200 Subject: [PATCH 42/47] fix: Fix vendor bin installs Signed-off-by: Marcel Klehr --- vendor-bin/phpunit/composer.lock | 28 ++++++++++++++++------------ vendor-bin/psalm/composer.lock | 12 ++++++------ 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/vendor-bin/phpunit/composer.lock b/vendor-bin/phpunit/composer.lock index b30d392b..85fa28c7 100644 --- a/vendor-bin/phpunit/composer.lock +++ b/vendor-bin/phpunit/composer.lock @@ -4,34 +4,35 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d341582453d521ee8d41f01149d10de8", + "content-hash": "f0c2908cd5d2c7eb714afffb69b0ee64", "packages": [], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "2.1.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "23da848e1a2308728fe5fdddabf4be17ff9720c7" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/23da848e1a2308728fe5fdddabf4be17ff9720c7", - "reference": "23da848e1a2308728fe5fdddabf4be17ff9720c7", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^8.4" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^14", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^10.5.58" + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -58,7 +59,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.1.0" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -74,7 +75,7 @@ "type": "tidelift" } ], - "time": "2026-01-05T06:47:08+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "myclabs/deep-copy", @@ -1811,5 +1812,8 @@ "prefer-lowest": false, "platform": {}, "platform-dev": {}, + "platform-overrides": { + "php": "8.2" + }, "plugin-api-version": "2.6.0" } diff --git a/vendor-bin/psalm/composer.lock b/vendor-bin/psalm/composer.lock index f5e4adc3..c6cb57c1 100644 --- a/vendor-bin/psalm/composer.lock +++ b/vendor-bin/psalm/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": "8ae5dc98cc7f96b10e055d03ff9e9288", + "content-hash": "27861af2fa93d4fa4c1ace04b24fd74b", "packages": [ { "name": "amphp/amp", @@ -3405,12 +3405,12 @@ "source": { "type": "git", "url": "https://github.com/nextcloud-deps/ocp.git", - "reference": "cd912d2ba9fca6027ee4d0a55fd06c41c75af4d2" + "reference": "50fef0ff2189206a5228b81044f1730c2aa4b396" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/cd912d2ba9fca6027ee4d0a55fd06c41c75af4d2", - "reference": "cd912d2ba9fca6027ee4d0a55fd06c41c75af4d2", + "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/50fef0ff2189206a5228b81044f1730c2aa4b396", + "reference": "50fef0ff2189206a5228b81044f1730c2aa4b396", "shasum": "" }, "require": { @@ -3446,7 +3446,7 @@ "issues": "https://github.com/nextcloud-deps/ocp/issues", "source": "https://github.com/nextcloud-deps/ocp/tree/master" }, - "time": "2026-03-27T01:17:33+00:00" + "time": "2026-03-31T01:18:57+00:00" }, { "name": "psr/clock", @@ -4002,7 +4002,7 @@ "platform": {}, "platform-dev": {}, "platform-overrides": { - "php": "8.2.27" + "php": "8.2.30" }, "plugin-api-version": "2.6.0" } From c66324ea1a74bbc582224177e2c81fe4e2e31ef1 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 15:44:12 +0200 Subject: [PATCH 43/47] fix: Fix vendor bin installs Signed-off-by: Marcel Klehr --- vendor-bin/php-scoper/composer.lock | 52 ++++++++++++++--------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/vendor-bin/php-scoper/composer.lock b/vendor-bin/php-scoper/composer.lock index 431b91fe..4bd0daa0 100644 --- a/vendor-bin/php-scoper/composer.lock +++ b/vendor-bin/php-scoper/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": "085b7ee6059a9fda1562a4c998f89479", + "content-hash": "3a069bb314edba3d9e79bccfc4f459a8", "packages": [ { "name": "fidry/console", @@ -94,27 +94,27 @@ }, { "name": "fidry/filesystem", - "version": "1.3.0", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theofidry/filesystem.git", - "reference": "d0d9e8dfa43f7663da153c306b0d5bc24846ad8e" + "reference": "3e1f9cac40f807b7c4196013ab77cc1b9416e3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/filesystem/zipball/d0d9e8dfa43f7663da153c306b0d5bc24846ad8e", - "reference": "d0d9e8dfa43f7663da153c306b0d5bc24846ad8e", + "url": "https://api.github.com/repos/theofidry/filesystem/zipball/3e1f9cac40f807b7c4196013ab77cc1b9416e3e5", + "reference": "3e1f9cac40f807b7c4196013ab77cc1b9416e3e5", "shasum": "" }, "require": { - "php": "^8.3", + "php": "^8.1", "symfony/filesystem": "^6.4 || ^7.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.4", "ergebnis/composer-normalize": "^2.28", "infection/infection": ">=0.26", - "phpunit/phpunit": "^12", + "phpunit/phpunit": "^10.3", "symfony/finder": "^6.4 || ^7.0" }, "type": "library", @@ -148,7 +148,7 @@ ], "support": { "issues": "https://github.com/theofidry/filesystem/issues", - "source": "https://github.com/theofidry/filesystem/tree/1.3.0" + "source": "https://github.com/theofidry/filesystem/tree/1.2.3" }, "funding": [ { @@ -156,7 +156,7 @@ "type": "github" } ], - "time": "2025-02-13T23:05:19+00:00" + "time": "2025-02-13T22:58:51+00:00" }, { "name": "humbug/php-scoper", @@ -1490,36 +1490,36 @@ }, { "name": "symfony/string", - "version": "8.1.x-dev", + "version": "7.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "59d447e2ec5d46c5e26176c3020614aa6b43042e" + "reference": "114ac57257d75df748eda23dd003878080b8e688" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/59d447e2ec5d46c5e26176c3020614aa6b43042e", - "reference": "59d447e2ec5d46c5e26176c3020614aa6b43042e", + "url": "https://api.github.com/repos/symfony/string/zipball/114ac57257d75df748eda23dd003878080b8e688", + "reference": "114ac57257d75df748eda23dd003878080b8e688", "shasum": "" }, "require": { - "php": ">=8.4", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-intl-grapheme": "^1.33", - "symfony/polyfill-intl-normalizer": "^1.0", - "symfony/polyfill-mbstring": "^1.0" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.4|^8.0", - "symfony/http-client": "^7.4|^8.0", - "symfony/intl": "^7.4|^8.0", + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^7.4|^8.0" + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, - "default-branch": true, "type": "library", "autoload": { "files": [ @@ -1557,7 +1557,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/8.1" + "source": "https://github.com/symfony/string/tree/7.4" }, "funding": [ { @@ -1577,7 +1577,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:21:58+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/var-dumper", @@ -1877,7 +1877,7 @@ "platform": {}, "platform-dev": {}, "platform-overrides": { - "php": "8.4" + "php": "8.2" }, "plugin-api-version": "2.6.0" } From d921b024f9e90843012e9562d18b27467b97a186 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 16:22:03 +0200 Subject: [PATCH 44/47] fix: Fix psalm workflow Signed-off-by: Marcel Klehr --- .github/workflows/psalm-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/psalm-matrix.yml b/.github/workflows/psalm-matrix.yml index 1707d297..89f15335 100644 --- a/.github/workflows/psalm-matrix.yml +++ b/.github/workflows/psalm-matrix.yml @@ -41,7 +41,7 @@ jobs: - name: Set up php${{ steps.versions.outputs.php-available }} uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a # v2.33.0 with: - php-version: ${{ steps.versions.outputs.php-available }} + php-version: ${{ steps.versions.outputs.php-min }} extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite coverage: none ini-file: development From 57cdb12516145172b4b9b09f652f3eb68198dd71 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 16:23:52 +0200 Subject: [PATCH 45/47] fix: Fix psalm baseline Signed-off-by: Marcel Klehr --- psalm-baseline.xml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/psalm-baseline.xml b/psalm-baseline.xml index cb20b751..ca80bd71 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -763,6 +763,14 @@ + + + + + + + + @@ -778,6 +786,9 @@ path]]> + path]]> + path]]> + path]]> @@ -795,15 +806,24 @@ + + + + tar]]> tar]]> tar]]> + + + + + fileList]]> tar->extract($dest)]]> tar->extractInString($path)]]> @@ -819,6 +839,8 @@ + + tar]]> @@ -828,11 +850,19 @@ + + + tar]]> + tar]]> + tar]]> + tar]]> + tar]]> + tar]]> tar]]> tar]]> tar]]> From ca112e995ffa150e1df5105ea8d545be248421cf Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 17:00:51 +0200 Subject: [PATCH 46/47] tests: Fix cluster faces workflow Signed-off-by: Marcel Klehr --- .github/workflows/cluster-faces-test.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cluster-faces-test.yml b/.github/workflows/cluster-faces-test.yml index be626e7f..a2b55cc7 100644 --- a/.github/workflows/cluster-faces-test.yml +++ b/.github/workflows/cluster-faces-test.yml @@ -8,8 +8,7 @@ on: push: branches: - main - - stable8 - - stable9 + - stable* paths: - 'lib/**' - 'src/**' @@ -131,9 +130,15 @@ jobs: ./occ app:enable -vvv -f ${{ env.APP_NAME }} php -S localhost:8080 & - - name: Install + - name: Checkout app + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + repository: nextcloud/viewer + path: apps/viewer + + - name: Install viewer run: | - ./occ app:enable -vvv ${{ env.APP_NAME }} + ./occ app:enable -vvv viewer - name: Remove unnecessary models to make space run: | From fc606c7bf09d90a83e6930e712d9d8c48cb63ec4 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Mar 2026 17:24:29 +0200 Subject: [PATCH 47/47] tests: install yq from pypi instead of xq Signed-off-by: Marcel Klehr --- .github/workflows/cluster-faces-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cluster-faces-test.yml b/.github/workflows/cluster-faces-test.yml index a2b55cc7..49c77a11 100644 --- a/.github/workflows/cluster-faces-test.yml +++ b/.github/workflows/cluster-faces-test.yml @@ -228,7 +228,7 @@ jobs: - name: Install xq if: steps.clustering-cache.outputs.cache-hit != 'true' run: | - pip install xq --break-system-packages + pip install yq --break-system-packages - name: Download face assignments if: steps.clustering-cache.outputs.cache-hit != 'true'