From ef5ad71d0625286dccef7b6b98c57dd2bdd462bc Mon Sep 17 00:00:00 2001 From: JC5 Date: Sun, 20 Jul 2025 12:56:38 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=96=20Auto=20commit=20for=20release=20?= =?UTF-8?q?'develop'=20on=202025-07-20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/AutoImports.php | 4 +- app/Console/Commands/ShowVersion.php | 1 + app/Http/Controllers/DebugController.php | 1 + .../Import/ConversionController.php | 4 +- .../Import/File/RoleController.php | 1 + app/Http/Controllers/IndexController.php | 1 - app/Http/Middleware/IsReadyForStep.php | 3 +- app/Http/Request/ConfigurationPostRequest.php | 12 +- .../Conversion/Routine/CSVFileProcessor.php | 1 + .../CSV/Conversion/Routine/ColumnValue.php | 2 +- .../CSV/Conversion/Routine/LineProcessor.php | 22 +- .../Routine/PseudoTransactionProcessor.php | 10 +- app/Services/CSV/Converter/CleanId.php | 2 +- app/Services/CSV/Converter/CleanInteger.php | 4 - app/Services/CSV/Converter/CleanUrl.php | 2 +- .../CSV/Converter/ConverterInterface.php | 4 - app/Services/CSV/Converter/Iban.php | 2 +- .../CSV/Mapper/ExpenseRevenueAccounts.php | 2 +- app/Services/CSV/Mapper/GetAccounts.php | 9 +- app/Services/CSV/Roles/RoleService.php | 8 +- .../Camt/Conversion/TransactionExtractor.php | 8 +- .../Camt/Conversion/TransactionMapper.php | 2 +- app/Services/Camt/Transaction.php | 6 +- .../Nordigen/Conversion/RoutineManager.php | 2 +- .../Request/GetAccountBalanceRequest.php | 4 +- .../Nordigen/Request/ListAccountsRequest.php | 1 - .../SimpleFIN/Conversion/AccountMapper.php | 4 +- .../Response/PutRefreshConnectionResponse.php | 4 +- changelog.md | 6 +- config/importer.php | 4 +- package-lock.json | 214 +++++++++--------- 31 files changed, 172 insertions(+), 178 deletions(-) diff --git a/app/Console/AutoImports.php b/app/Console/AutoImports.php index 989b3727..12dceb74 100644 --- a/app/Console/AutoImports.php +++ b/app/Console/AutoImports.php @@ -662,7 +662,7 @@ trait AutoImports protected function isNothingDownloaded(): bool { foreach ($this->conversionErrors as $errors) { - if (array_any($errors, fn($error) => str_contains($error, '[a111]'))) { + if (array_any($errors, fn ($error) => str_contains($error, '[a111]'))) { return true; } } @@ -673,7 +673,7 @@ trait AutoImports protected function isExpiredAgreement(): bool { foreach ($this->conversionErrors as $errors) { - if (array_any($errors, fn($error) => str_contains($error, 'EUA') && str_contains($error, 'expired'))) { + if (array_any($errors, fn ($error) => str_contains($error, 'EUA') && str_contains($error, 'expired'))) { return true; } } diff --git a/app/Console/Commands/ShowVersion.php b/app/Console/Commands/ShowVersion.php index 9ce82089..95050b22 100644 --- a/app/Console/Commands/ShowVersion.php +++ b/app/Console/Commands/ShowVersion.php @@ -26,6 +26,7 @@ declare(strict_types=1); namespace App\Console\Commands; use Illuminate\Console\Command; + use const PHP_SAPI; /** diff --git a/app/Http/Controllers/DebugController.php b/app/Http/Controllers/DebugController.php index c23662d8..fa2b9914 100644 --- a/app/Http/Controllers/DebugController.php +++ b/app/Http/Controllers/DebugController.php @@ -33,6 +33,7 @@ use Illuminate\View\View; use Monolog\Handler\RotatingFileHandler; use Monolog\Logger; use Exception; + use const PHP_SAPI; class DebugController extends Controller diff --git a/app/Http/Controllers/Import/ConversionController.php b/app/Http/Controllers/Import/ConversionController.php index f52fa08e..ce595eec 100644 --- a/app/Http/Controllers/Import/ConversionController.php +++ b/app/Http/Controllers/Import/ConversionController.php @@ -119,7 +119,7 @@ class ConversionController extends Controller throw new ImporterErrorException(sprintf('Not a supported flow: "%s"', $flow)); } - /** @var RoutineManagerInterface|null $routine */ + /** @var null|RoutineManagerInterface $routine */ if ('file' === $flow) { $contentType = $configuration->getContentType(); if ('unknown' === $contentType || 'csv' === $contentType) { @@ -250,7 +250,7 @@ class ConversionController extends Controller throw new ImporterErrorException(sprintf('Not a supported flow: "%s"', $flow)); } - /** @var RoutineManagerInterface|null $routine */ + /** @var null|RoutineManagerInterface $routine */ if ('file' === $flow) { $contentType = $configuration->getContentType(); if ('unknown' === $contentType || 'csv' === $contentType) { diff --git a/app/Http/Controllers/Import/File/RoleController.php b/app/Http/Controllers/Import/File/RoleController.php index 852514da..de843d28 100644 --- a/app/Http/Controllers/Import/File/RoleController.php +++ b/app/Http/Controllers/Import/File/RoleController.php @@ -212,6 +212,7 @@ class RoleController extends Controller private function getFieldsForLevel(string $level): array { $allFields = config('camt.fields'); + return array_filter($allFields, function ($field) use ($level) { return $level === $field['level']; }); diff --git a/app/Http/Controllers/IndexController.php b/app/Http/Controllers/IndexController.php index e3713f19..eaf9cbf8 100644 --- a/app/Http/Controllers/IndexController.php +++ b/app/Http/Controllers/IndexController.php @@ -28,7 +28,6 @@ namespace App\Http\Controllers; use App\Services\Session\Constants; use App\Services\Shared\Authentication\SecretManager; use Illuminate\Http\Request; -use Illuminate\Support\Collection; use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Log; diff --git a/app/Http/Middleware/IsReadyForStep.php b/app/Http/Middleware/IsReadyForStep.php index 2289da26..2c80dfbb 100644 --- a/app/Http/Middleware/IsReadyForStep.php +++ b/app/Http/Middleware/IsReadyForStep.php @@ -337,6 +337,7 @@ trait IsReadyForStep switch (self::STEP) { default: throw new ImporterErrorException(sprintf('isReadyForSimpleFINStep: Cannot handle SimpleFIN step "%s"', self::STEP)); + case 'authenticate': // simpleFIN needs no authentication. return false; @@ -693,7 +694,7 @@ trait IsReadyForStep { Log::debug(sprintf('redirectToBasicStep("%s")', self::STEP)); - /** @noinspection PhpSwitchStatementWitSingleBranchInspection */ + // @noinspection PhpSwitchStatementWitSingleBranchInspection switch (self::STEP) { default: throw new ImporterErrorException(sprintf('redirectToBasicStep: Cannot handle basic step "%s"', self::STEP)); diff --git a/app/Http/Request/ConfigurationPostRequest.php b/app/Http/Request/ConfigurationPostRequest.php index f8aac364..3ea77d22 100644 --- a/app/Http/Request/ConfigurationPostRequest.php +++ b/app/Http/Request/ConfigurationPostRequest.php @@ -52,9 +52,9 @@ class ConfigurationPostRequest extends Request ]); // Decode underscore-encoded account IDs back to original IDs with spaces - $doImport = $this->get('do_import') ?? []; - $accounts = $this->get('accounts') ?? []; - $newAccount = $this->get('new_account') ?? []; + $doImport = $this->get('do_import') ?? []; + $accounts = $this->get('accounts') ?? []; + $newAccount = $this->get('new_account') ?? []; $decodedDoImport = []; $decodedAccounts = []; @@ -203,9 +203,9 @@ class ConfigurationPostRequest extends Request { $validator->after(function (Validator $validator): void { // validate all account info - $flow = request()->cookie(Constants::FLOW_COOKIE); - $data = $validator->getData(); // @phpstan-ignore-line - $doImport = $data['do_import'] ?? []; + $flow = request()->cookie(Constants::FLOW_COOKIE); + $data = $validator->getData(); // @phpstan-ignore-line + $doImport = $data['do_import'] ?? []; if (0 === count($doImport) && 'file' !== $flow) { $validator->errors()->add('do_import', 'You must select at least one account to import from.'); } diff --git a/app/Services/CSV/Conversion/Routine/CSVFileProcessor.php b/app/Services/CSV/Conversion/Routine/CSVFileProcessor.php index 5e3c8401..17cf344c 100644 --- a/app/Services/CSV/Conversion/Routine/CSVFileProcessor.php +++ b/app/Services/CSV/Conversion/Routine/CSVFileProcessor.php @@ -72,6 +72,7 @@ class CSVFileProcessor try { $stmt = new Statement()->offset($offset); + /** @var ResultSet $records */ $records = $stmt->process($this->reader); } catch (Exception $e) { diff --git a/app/Services/CSV/Conversion/Routine/ColumnValue.php b/app/Services/CSV/Conversion/Routine/ColumnValue.php index 7333492a..0142761e 100644 --- a/app/Services/CSV/Conversion/Routine/ColumnValue.php +++ b/app/Services/CSV/Conversion/Routine/ColumnValue.php @@ -75,7 +75,7 @@ class ColumnValue public function getParsedValue() { if (0 !== $this->mappedValue) { - /** @noinspection UnnecessaryCastingInspection */ + // @noinspection UnnecessaryCastingInspection return $this->mappedValue; } diff --git a/app/Services/CSV/Conversion/Routine/LineProcessor.php b/app/Services/CSV/Conversion/Routine/LineProcessor.php index 2b07bbb7..07680a66 100644 --- a/app/Services/CSV/Conversion/Routine/LineProcessor.php +++ b/app/Services/CSV/Conversion/Routine/LineProcessor.php @@ -94,8 +94,8 @@ class LineProcessor private function process(array $line): array { Log::debug(sprintf('[%s] Now in %s', config('importer.version'), __METHOD__)); - $count = count($line); - $return = []; + $count = count($line); + $return = []; foreach ($line as $columnIndex => $value) { Log::debug(sprintf('Now at column %d/%d', $columnIndex + 1, $count)); $value = trim((string)$value); @@ -113,13 +113,13 @@ class LineProcessor } // is a mapped value present? - $mapped = $this->mapping[$columnIndex][$value] ?? 0; + $mapped = $this->mapping[$columnIndex][$value] ?? 0; Log::debug(sprintf('ColumnIndex is %s', var_export($columnIndex, true))); Log::debug(sprintf('Value is %s', var_export($value, true))); // Log::debug('Local mapping (will not be printed)'); // the role might change because of the mapping. - $role = $this->getRoleForColumn($columnIndex, $mapped); - $appendValue = config(sprintf('csv.import_roles.%s.append_value', $originalRole)); + $role = $this->getRoleForColumn($columnIndex, $mapped); + $appendValue = config(sprintf('csv.import_roles.%s.append_value', $originalRole)); if (null === $appendValue) { $appendValue = false; @@ -127,7 +127,7 @@ class LineProcessor // Log::debug(sprintf('Append value config: %s', sprintf('csv.import_roles.%s.append_value', $originalRole))); - $columnValue = new ColumnValue(); + $columnValue = new ColumnValue(); $columnValue->setValue($value); $columnValue->setRole($role); $columnValue->setAppendValue($appendValue); @@ -140,7 +140,7 @@ class LineProcessor $columnValue->setConfiguration($this->dateFormat); } - $return[] = $columnValue; + $return[] = $columnValue; } // add a special column value for the "source" $columnValue = new ColumnValue(); @@ -148,7 +148,7 @@ class LineProcessor $columnValue->setMappedValue(0); $columnValue->setAppendValue(false); $columnValue->setRole('original-source'); - $return[] = $columnValue; + $return[] = $columnValue; Log::debug(sprintf('Added column #%d to denote the original source.', count($return))); return $return; @@ -165,7 +165,7 @@ class LineProcessor */ private function getRoleForColumn(int $column, int $mapped): string { - $role = $this->roles[$column] ?? '_ignore'; + $role = $this->roles[$column] ?? '_ignore'; if (0 === $mapped) { Log::debug(sprintf('Column #%d with role "%s" is not mapped.', $column + 1, $role)); @@ -178,7 +178,7 @@ class LineProcessor return $role; } - $roleMapping = [ + $roleMapping = [ 'account-id' => 'account-id', 'account-name' => 'account-id', 'account-iban' => 'account-id', @@ -203,7 +203,7 @@ class LineProcessor if (!array_key_exists($role, $roleMapping)) { throw new ImporterErrorException(sprintf('Cannot indicate new role for mapped role "%s"', $role)); // @codeCoverageIgnore } - $newRole = $roleMapping[$role]; + $newRole = $roleMapping[$role]; if ($newRole !== $role) { Log::debug(sprintf('Role was "%s", but because of mapping (mapped to #%d), role becomes "%s"', $role, $mapped, $newRole)); } diff --git a/app/Services/CSV/Conversion/Routine/PseudoTransactionProcessor.php b/app/Services/CSV/Conversion/Routine/PseudoTransactionProcessor.php index 6e29f04d..49edaf2a 100644 --- a/app/Services/CSV/Conversion/Routine/PseudoTransactionProcessor.php +++ b/app/Services/CSV/Conversion/Routine/PseudoTransactionProcessor.php @@ -73,14 +73,14 @@ class PseudoTransactionProcessor if (null !== $accountId) { // in cache perhaps? - $inCache = RequestCache::has($cacheKey, $token); + $inCache = RequestCache::has($cacheKey, $token); if ($inCache) { $this->defaultAccount = RequestCache::get($cacheKey, $token); return; } - $accountRequest = new GetAccountRequest($url, $token); + $accountRequest = new GetAccountRequest($url, $token); $accountRequest->setVerify(config('importer.connection.verify')); $accountRequest->setTimeOut(config('importer.connection.timeout')); $accountRequest->setId($accountId); @@ -103,8 +103,8 @@ class PseudoTransactionProcessor */ private function getDefaultCurrency(): void { - $url = SecretManager::getBaseUrl(); - $token = SecretManager::getAccessToken(); + $url = SecretManager::getBaseUrl(); + $token = SecretManager::getAccessToken(); $currencyRequest = new GetCurrencyRequest($url, $token); $currencyRequest->setVerify(config('importer.connection.verify')); @@ -155,7 +155,7 @@ class PseudoTransactionProcessor $object->setTransactionCurrency($this->defaultCurrency); } - $line = $object->process($line); + $line = $object->process($line); } Log::debug('Final transaction: ', $line); diff --git a/app/Services/CSV/Converter/CleanId.php b/app/Services/CSV/Converter/CleanId.php index 1813838a..aa58c2da 100644 --- a/app/Services/CSV/Converter/CleanId.php +++ b/app/Services/CSV/Converter/CleanId.php @@ -35,7 +35,7 @@ class CleanId implements ConverterInterface /** * Convert a value. */ - public function convert(mixed $value): int|null + public function convert(mixed $value): ?int { Log::debug(sprintf('Now applying CleanId converter on "%s"', $value)); $value = (int) $value; diff --git a/app/Services/CSV/Converter/CleanInteger.php b/app/Services/CSV/Converter/CleanInteger.php index e80be441..8ae44d40 100644 --- a/app/Services/CSV/Converter/CleanInteger.php +++ b/app/Services/CSV/Converter/CleanInteger.php @@ -32,10 +32,6 @@ class CleanInteger implements ConverterInterface { /** * Convert a value. - * - * @param mixed $value - * - * @return int */ public function convert(mixed $value): int { diff --git a/app/Services/CSV/Converter/CleanUrl.php b/app/Services/CSV/Converter/CleanUrl.php index 76baf8ef..41aa2ef6 100644 --- a/app/Services/CSV/Converter/CleanUrl.php +++ b/app/Services/CSV/Converter/CleanUrl.php @@ -33,7 +33,7 @@ class CleanUrl implements ConverterInterface /** * Convert a value. */ - public function convert(mixed $value): string|null + public function convert(mixed $value): ?string { $value = app('steam')->cleanStringAndNewlines($value); diff --git a/app/Services/CSV/Converter/ConverterInterface.php b/app/Services/CSV/Converter/ConverterInterface.php index 72863eff..c6298d4e 100644 --- a/app/Services/CSV/Converter/ConverterInterface.php +++ b/app/Services/CSV/Converter/ConverterInterface.php @@ -31,10 +31,6 @@ interface ConverterInterface { /** * Convert a value. - * - * @param mixed $value - * - * @return mixed */ public function convert(mixed $value): mixed; diff --git a/app/Services/CSV/Converter/Iban.php b/app/Services/CSV/Converter/Iban.php index a165ee7d..43cc5f2c 100644 --- a/app/Services/CSV/Converter/Iban.php +++ b/app/Services/CSV/Converter/Iban.php @@ -53,7 +53,7 @@ class Iban implements ConverterInterface public static function isValidIban(string $value): bool { Log::debug(sprintf('isValidIBAN("%s")', $value)); - $value = strtoupper(trim( app('steam')->cleanStringAndNewlines($value))); + $value = strtoupper(trim(app('steam')->cleanStringAndNewlines($value))); $value = str_replace("\x20", '', $value); Log::debug(sprintf('Trim: isValidIBAN("%s")', $value)); $search = [' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; diff --git a/app/Services/CSV/Mapper/ExpenseRevenueAccounts.php b/app/Services/CSV/Mapper/ExpenseRevenueAccounts.php index 1e5772db..86f2f927 100644 --- a/app/Services/CSV/Mapper/ExpenseRevenueAccounts.php +++ b/app/Services/CSV/Mapper/ExpenseRevenueAccounts.php @@ -132,7 +132,7 @@ class ExpenseRevenueAccounts implements MapperInterface } // Sort each group - $newResult = []; + $newResult = []; foreach ($result as $group => $array) { asort($array, SORT_STRING); $newResult[$group] = $array; diff --git a/app/Services/CSV/Mapper/GetAccounts.php b/app/Services/CSV/Mapper/GetAccounts.php index f47d22b0..3c88b19d 100644 --- a/app/Services/CSV/Mapper/GetAccounts.php +++ b/app/Services/CSV/Mapper/GetAccounts.php @@ -31,7 +31,6 @@ use GrumpyDictator\FFIIIApiSupport\Exceptions\ApiHttpException; use GrumpyDictator\FFIIIApiSupport\Model\Account; use GrumpyDictator\FFIIIApiSupport\Request\GetAccountsRequest; use GrumpyDictator\FFIIIApiSupport\Response\GetAccountsResponse; -use GrumpyDictator\FFIIIApiSupport\Response\ValidationErrorResponse; use Illuminate\Support\Facades\Log; /** @@ -58,7 +57,7 @@ trait GetAccounts $request->setType(GetAccountsRequest::ALL); try { - /** @var GetAccountsResponse|null $response */ + /** @var null|GetAccountsResponse $response */ $response = $request->get(); } catch (ApiHttpException $e) { Log::error(sprintf('[%s]: %s', config('importer.version'), $e->getMessage())); @@ -110,7 +109,7 @@ trait GetAccounts $request->setTimeOut(config('importer.connection.timeout')); try { - /** @var GetAccountsResponse|null $response */ + /** @var null|GetAccountsResponse $response */ $response = $request->get(); } catch (ApiHttpException $e) { Log::error(sprintf('[%s]: %s', config('importer.version'), $e->getMessage())); @@ -180,7 +179,7 @@ trait GetAccounts $result[$group] ??= []; $result[$group][$account->id] = $name; } - $newResult = []; + $newResult = []; foreach ($result as $group => $array) { asort($array, SORT_STRING); $newResult[$group] = $array; @@ -215,7 +214,7 @@ trait GetAccounts } } - $newResult = []; + $newResult = []; foreach ($result as $group => $array) { asort($array, SORT_STRING); $newResult[$group] = $array; diff --git a/app/Services/CSV/Roles/RoleService.php b/app/Services/CSV/Roles/RoleService.php index baa4ed05..b2b98d7b 100644 --- a/app/Services/CSV/Roles/RoleService.php +++ b/app/Services/CSV/Roles/RoleService.php @@ -98,7 +98,7 @@ class RoleService try { $stmt = new Statement()->limit(1)->offset(0); $records = $stmt->process($reader); - $count = count($records->first()); + $count = count($records->first()); Log::debug(sprintf('Role service: first row has %d columns', $count)); for ($i = 0; $i < $count; ++$i) { $headers[] = sprintf('Column #%d', $i + 1); @@ -205,11 +205,11 @@ class RoleService $count = count($entry->getTransactionDetails()); // count level D entries. if (0 === $count) { // TODO Create a single transaction, I guess? - $transactions[] = new Transaction( $camtMessage, $statement, $entry, []); + $transactions[] = new Transaction($camtMessage, $statement, $entry, []); } if (0 !== $count) { foreach ($entry->getTransactionDetails() as $detail) { - $transactions[] = new Transaction( $camtMessage, $statement, $entry, [$detail]); + $transactions[] = new Transaction($camtMessage, $statement, $entry, [$detail]); } } } @@ -222,7 +222,7 @@ class RoleService break; } foreach ($fieldNames as $name) { - $name = (string)$name; + $name = (string)$name; if (array_key_exists($name, $examples)) { // there is at least one example, so we can check how many if (count($examples[$name]) > 5) { // there are already five examples, so jump to next field continue; diff --git a/app/Services/Camt/Conversion/TransactionExtractor.php b/app/Services/Camt/Conversion/TransactionExtractor.php index d192aa57..01543805 100644 --- a/app/Services/Camt/Conversion/TransactionExtractor.php +++ b/app/Services/Camt/Conversion/TransactionExtractor.php @@ -46,19 +46,19 @@ class TransactionExtractor if (0 !== $count) { $handling = $this->configuration->getGroupedTransactionHandling(); if ('split' === $handling) { - $transactions[] = new Transaction( $message, $statement, $entry, $entry->getTransactionDetails()); + $transactions[] = new Transaction($message, $statement, $entry, $entry->getTransactionDetails()); } if ('single' === $handling) { foreach ($entry->getTransactionDetails() as $detail) { - $transactions[] = new Transaction( $message, $statement, $entry, [$detail]); + $transactions[] = new Transaction($message, $statement, $entry, [$detail]); } } if ('group' === $handling) { if (1 === $count) { - $transactions[] = new Transaction( $message, $statement, $entry, $entry->getTransactionDetails()); + $transactions[] = new Transaction($message, $statement, $entry, $entry->getTransactionDetails()); } if ($count > 1) { - $transactions[] = new Transaction( $message, $statement, $entry, []); + $transactions[] = new Transaction($message, $statement, $entry, []); } } } diff --git a/app/Services/Camt/Conversion/TransactionMapper.php b/app/Services/Camt/Conversion/TransactionMapper.php index d8b9f684..2063f962 100644 --- a/app/Services/Camt/Conversion/TransactionMapper.php +++ b/app/Services/Camt/Conversion/TransactionMapper.php @@ -711,7 +711,7 @@ class TransactionMapper if (array_key_exists($field, $current)) { // there is a value... // so we check all accounts for a match - if (array_any($this->allAccounts, fn($account) => $current[$field] === $account->{$accountIdentificationSuffix})) { + if (array_any($this->allAccounts, fn ($account) => $current[$field] === $account->{$accountIdentificationSuffix})) { return true; } } diff --git a/app/Services/Camt/Transaction.php b/app/Services/Camt/Transaction.php index b88a8c46..763cd72f 100644 --- a/app/Services/Camt/Transaction.php +++ b/app/Services/Camt/Transaction.php @@ -429,9 +429,9 @@ class Transaction // but maybe you want also the entire address // 2025-07-19: method is always uses $useEntireAddress=false, nobody uses this. -// if ($useEntireAddress && $addressLine = $this->generateAddressLine($relatedParty->getRelatedPartyType()->getAddress())) { -// $opposingName .= sprintf(', %s', $addressLine); -// } + // if ($useEntireAddress && $addressLine = $this->generateAddressLine($relatedParty->getRelatedPartyType()->getAddress())) { + // $opposingName .= sprintf(', %s', $addressLine); + // } } return $opposingName; diff --git a/app/Services/Nordigen/Conversion/RoutineManager.php b/app/Services/Nordigen/Conversion/RoutineManager.php index 974a951f..1a4776cf 100644 --- a/app/Services/Nordigen/Conversion/RoutineManager.php +++ b/app/Services/Nordigen/Conversion/RoutineManager.php @@ -229,7 +229,7 @@ class RoutineManager implements RoutineManagerInterface private function findAccountInfo(array $accounts, int $accountId): ?array { - return array_find($accounts, fn($account) => $account['id'] === $accountId); + return array_find($accounts, fn ($account) => $account['id'] === $accountId); } diff --git a/app/Services/Nordigen/Request/GetAccountBalanceRequest.php b/app/Services/Nordigen/Request/GetAccountBalanceRequest.php index bd1c2cce..60763781 100644 --- a/app/Services/Nordigen/Request/GetAccountBalanceRequest.php +++ b/app/Services/Nordigen/Request/GetAccountBalanceRequest.php @@ -1,4 +1,6 @@ -setParameters([]); diff --git a/app/Services/SimpleFIN/Conversion/AccountMapper.php b/app/Services/SimpleFIN/Conversion/AccountMapper.php index d8f55778..2006ff8c 100644 --- a/app/Services/SimpleFIN/Conversion/AccountMapper.php +++ b/app/Services/SimpleFIN/Conversion/AccountMapper.php @@ -305,7 +305,7 @@ class AccountMapper { $this->loadFireflyAccounts(); - return array_find($this->fireflyAccounts, fn($account) => $account->id === $id); + return array_find($this->fireflyAccounts, fn ($account) => $account->id === $id); } @@ -414,7 +414,7 @@ class AccountMapper 'Temporary failure in name resolution', ]; - return array_any($retryableErrors, fn($retryableError) => false !== stripos($errorMessage, $retryableError)); + return array_any($retryableErrors, fn ($retryableError) => false !== stripos($errorMessage, $retryableError)); } diff --git a/app/Services/Spectre/Response/PutRefreshConnectionResponse.php b/app/Services/Spectre/Response/PutRefreshConnectionResponse.php index 3cc5c863..c1c15691 100644 --- a/app/Services/Spectre/Response/PutRefreshConnectionResponse.php +++ b/app/Services/Spectre/Response/PutRefreshConnectionResponse.php @@ -32,7 +32,5 @@ use App\Services\Shared\Response\Response; */ class PutRefreshConnectionResponse extends Response { - public function __construct(array $data) - { - } + public function __construct(array $data) {} } diff --git a/changelog.md b/changelog.md index 260e357e..807c043b 100644 --- a/changelog.md +++ b/changelog.md @@ -7,9 +7,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). > ⚠️ Some changes in this release may unexpectedly lead to duplicate transactions. This is caused by changes in the data handling routines. This is unfortunate, but a result of new insights, changed APIs and other minor fixes. My apologies for any inconvenience. I try to avoid these kinds of changes, but it can't always be helped. ### Fixed -- #10602 -- #10599 -- #10609 +- [Issue 10602](https://github.com/firefly-iii/firefly-iii/issues/10602) ([Importer] SimpleFIN import does not respect datetime) reported by @wyomatthew +- [Discussion 10599](https://github.com/orgs/firefly-iii/discussions/10599) (Issue with simpleFIN importing) started by @DrEthan77 +- [Issue 10609](https://github.com/firefly-iii/firefly-iii/issues/10609) (GoCardless imports with exchange rate 0 should not add note to transaction) reported by @TomVarga - [PR 901](https://github.com/firefly-iii/data-importer/pull/901) by @TomVarga for issue 10609 - [PR 905](https://github.com/firefly-iii/data-importer/pull/905) by @DrEthan77 (This PR fixes issue 10599) diff --git a/config/importer.php b/config/importer.php index 187b5471..e8abddaa 100644 --- a/config/importer.php +++ b/config/importer.php @@ -24,8 +24,8 @@ declare(strict_types=1); return [ - 'version' => 'develop/2025-07-19', - 'build_time' => 1752897412, + 'version' => 'develop/2025-07-20', + 'build_time' => 1753008967, 'flows' => ['nordigen', 'spectre', 'file', 'simplefin'], 'enabled_flows' => [ 'nordigen' => true, diff --git a/package-lock.json b/package-lock.json index 83c36f65..2b8309b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,9 +12,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.7.tgz", - "integrity": "sha512-uD0kKFHh6ETr8TqEtaAcV+dn/2qnYbH/+8wGEdY70Qf7l1l/jmBUbrmQqwiPKAQE6cOQ7dTj6Xr0HzQDGHyceQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", "cpu": [ "ppc64" ], @@ -29,9 +29,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.7.tgz", - "integrity": "sha512-Jhuet0g1k9rAJHrXGIh7sFknFuT4sfytYZpZpuZl7YKDhnPByVAm5oy2LEBmMbuYf3ejWVYCc2seX81Mk+madA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", "cpu": [ "arm" ], @@ -46,9 +46,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.7.tgz", - "integrity": "sha512-p0ohDnwyIbAtztHTNUTzN5EGD/HJLs1bwysrOPgSdlIA6NDnReoVfoCyxG6W1d85jr2X80Uq5KHftyYgaK9LPQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", "cpu": [ "arm64" ], @@ -63,9 +63,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.7.tgz", - "integrity": "sha512-mMxIJFlSgVK23HSsII3ZX9T2xKrBCDGyk0qiZnIW10LLFFtZLkFD6imZHu7gUo2wkNZwS9Yj3mOtZD3ZPcjCcw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", "cpu": [ "x64" ], @@ -80,9 +80,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.7.tgz", - "integrity": "sha512-jyOFLGP2WwRwxM8F1VpP6gcdIJc8jq2CUrURbbTouJoRO7XCkU8GdnTDFIHdcifVBT45cJlOYsZ1kSlfbKjYUQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", "cpu": [ "arm64" ], @@ -97,9 +97,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.7.tgz", - "integrity": "sha512-m9bVWqZCwQ1BthruifvG64hG03zzz9gE2r/vYAhztBna1/+qXiHyP9WgnyZqHgGeXoimJPhAmxfbeU+nMng6ZA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", "cpu": [ "x64" ], @@ -114,9 +114,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.7.tgz", - "integrity": "sha512-Bss7P4r6uhr3kDzRjPNEnTm/oIBdTPRNQuwaEFWT/uvt6A1YzK/yn5kcx5ZxZ9swOga7LqeYlu7bDIpDoS01bA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", "cpu": [ "arm64" ], @@ -131,9 +131,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.7.tgz", - "integrity": "sha512-S3BFyjW81LXG7Vqmr37ddbThrm3A84yE7ey/ERBlK9dIiaWgrjRlre3pbG7txh1Uaxz8N7wGGQXmC9zV+LIpBQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", "cpu": [ "x64" ], @@ -148,9 +148,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.7.tgz", - "integrity": "sha512-JZMIci/1m5vfQuhKoFXogCKVYVfYQmoZJg8vSIMR4TUXbF+0aNlfXH3DGFEFMElT8hOTUF5hisdZhnrZO/bkDw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", "cpu": [ "arm" ], @@ -165,9 +165,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.7.tgz", - "integrity": "sha512-HfQZQqrNOfS1Okn7PcsGUqHymL1cWGBslf78dGvtrj8q7cN3FkapFgNA4l/a5lXDwr7BqP2BSO6mz9UremNPbg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", "cpu": [ "arm64" ], @@ -182,9 +182,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.7.tgz", - "integrity": "sha512-9Jex4uVpdeofiDxnwHRgen+j6398JlX4/6SCbbEFEXN7oMO2p0ueLN+e+9DdsdPLUdqns607HmzEFnxwr7+5wQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", "cpu": [ "ia32" ], @@ -199,9 +199,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.7.tgz", - "integrity": "sha512-TG1KJqjBlN9IHQjKVUYDB0/mUGgokfhhatlay8aZ/MSORMubEvj/J1CL8YGY4EBcln4z7rKFbsH+HeAv0d471w==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", "cpu": [ "loong64" ], @@ -216,9 +216,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.7.tgz", - "integrity": "sha512-Ty9Hj/lx7ikTnhOfaP7ipEm/ICcBv94i/6/WDg0OZ3BPBHhChsUbQancoWYSO0WNkEiSW5Do4febTTy4x1qYQQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", "cpu": [ "mips64el" ], @@ -233,9 +233,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.7.tgz", - "integrity": "sha512-MrOjirGQWGReJl3BNQ58BLhUBPpWABnKrnq8Q/vZWWwAB1wuLXOIxS2JQ1LT3+5T+3jfPh0tyf5CpbyQHqnWIQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", "cpu": [ "ppc64" ], @@ -250,9 +250,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.7.tgz", - "integrity": "sha512-9pr23/pqzyqIZEZmQXnFyqp3vpa+KBk5TotfkzGMqpw089PGm0AIowkUppHB9derQzqniGn3wVXgck19+oqiOw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", "cpu": [ "riscv64" ], @@ -267,9 +267,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.7.tgz", - "integrity": "sha512-4dP11UVGh9O6Y47m8YvW8eoA3r8qL2toVZUbBKyGta8j6zdw1cn9F/Rt59/Mhv0OgY68pHIMjGXWOUaykCnx+w==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", "cpu": [ "s390x" ], @@ -284,9 +284,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.7.tgz", - "integrity": "sha512-ghJMAJTdw/0uhz7e7YnpdX1xVn7VqA0GrWrAO2qKMuqbvgHT2VZiBv1BQ//VcHsPir4wsL3P2oPggfKPzTKoCA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", "cpu": [ "x64" ], @@ -301,9 +301,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.7.tgz", - "integrity": "sha512-bwXGEU4ua45+u5Ci/a55B85KWaDSRS8NPOHtxy2e3etDjbz23wlry37Ffzapz69JAGGc4089TBo+dGzydQmydg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", "cpu": [ "arm64" ], @@ -318,9 +318,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.7.tgz", - "integrity": "sha512-tUZRvLtgLE5OyN46sPSYlgmHoBS5bx2URSrgZdW1L1teWPYVmXh+QN/sKDqkzBo/IHGcKcHLKDhBeVVkO7teEA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", "cpu": [ "x64" ], @@ -335,9 +335,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.7.tgz", - "integrity": "sha512-bTJ50aoC+WDlDGBReWYiObpYvQfMjBNlKztqoNUL0iUkYtwLkBQQeEsTq/I1KyjsKA5tyov6VZaPb8UdD6ci6Q==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", "cpu": [ "arm64" ], @@ -352,9 +352,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.7.tgz", - "integrity": "sha512-TA9XfJrgzAipFUU895jd9j2SyDh9bbNkK2I0gHcvqb/o84UeQkBpi/XmYX3cO1q/9hZokdcDqQxIi6uLVrikxg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", "cpu": [ "x64" ], @@ -369,9 +369,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.7.tgz", - "integrity": "sha512-5VTtExUrWwHHEUZ/N+rPlHDwVFQ5aME7vRJES8+iQ0xC/bMYckfJ0l2n3yGIfRoXcK/wq4oXSItZAz5wslTKGw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", "cpu": [ "arm64" ], @@ -386,9 +386,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.7.tgz", - "integrity": "sha512-umkbn7KTxsexhv2vuuJmj9kggd4AEtL32KodkJgfhNOHMPtQ55RexsaSrMb+0+jp9XL4I4o2y91PZauVN4cH3A==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", "cpu": [ "x64" ], @@ -403,9 +403,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.7.tgz", - "integrity": "sha512-j20JQGP/gz8QDgzl5No5Gr4F6hurAZvtkFxAKhiv2X49yi/ih8ECK4Y35YnjlMogSKJk931iNMcd35BtZ4ghfw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", "cpu": [ "arm64" ], @@ -420,9 +420,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.7.tgz", - "integrity": "sha512-4qZ6NUfoiiKZfLAXRsvFkA0hoWVM+1y2bSHXHkpdLAs/+r0LgwqYohmfZCi985c6JWHhiXP30mgZawn/XrqAkQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", "cpu": [ "ia32" ], @@ -437,9 +437,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.7.tgz", - "integrity": "sha512-FaPsAHTwm+1Gfvn37Eg3E5HIpfR3i6x1AIcla/MkqAIupD4BW3MrSeUqfoTzwwJhk3WE2/KqUn4/eenEJC76VA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", "cpu": [ "x64" ], @@ -1277,9 +1277,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.7.tgz", - "integrity": "sha512-daJB0q2dmTzo90L9NjRaohhRWrCzYxWNFTjEi72/h+p5DcY3yn4MacWfDakHmaBaDzDiuLJsCh0+6LK/iX+c+Q==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -1290,32 +1290,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.7", - "@esbuild/android-arm": "0.25.7", - "@esbuild/android-arm64": "0.25.7", - "@esbuild/android-x64": "0.25.7", - "@esbuild/darwin-arm64": "0.25.7", - "@esbuild/darwin-x64": "0.25.7", - "@esbuild/freebsd-arm64": "0.25.7", - "@esbuild/freebsd-x64": "0.25.7", - "@esbuild/linux-arm": "0.25.7", - "@esbuild/linux-arm64": "0.25.7", - "@esbuild/linux-ia32": "0.25.7", - "@esbuild/linux-loong64": "0.25.7", - "@esbuild/linux-mips64el": "0.25.7", - "@esbuild/linux-ppc64": "0.25.7", - "@esbuild/linux-riscv64": "0.25.7", - "@esbuild/linux-s390x": "0.25.7", - "@esbuild/linux-x64": "0.25.7", - "@esbuild/netbsd-arm64": "0.25.7", - "@esbuild/netbsd-x64": "0.25.7", - "@esbuild/openbsd-arm64": "0.25.7", - "@esbuild/openbsd-x64": "0.25.7", - "@esbuild/openharmony-arm64": "0.25.7", - "@esbuild/sunos-x64": "0.25.7", - "@esbuild/win32-arm64": "0.25.7", - "@esbuild/win32-ia32": "0.25.7", - "@esbuild/win32-x64": "0.25.7" + "@esbuild/aix-ppc64": "0.25.8", + "@esbuild/android-arm": "0.25.8", + "@esbuild/android-arm64": "0.25.8", + "@esbuild/android-x64": "0.25.8", + "@esbuild/darwin-arm64": "0.25.8", + "@esbuild/darwin-x64": "0.25.8", + "@esbuild/freebsd-arm64": "0.25.8", + "@esbuild/freebsd-x64": "0.25.8", + "@esbuild/linux-arm": "0.25.8", + "@esbuild/linux-arm64": "0.25.8", + "@esbuild/linux-ia32": "0.25.8", + "@esbuild/linux-loong64": "0.25.8", + "@esbuild/linux-mips64el": "0.25.8", + "@esbuild/linux-ppc64": "0.25.8", + "@esbuild/linux-riscv64": "0.25.8", + "@esbuild/linux-s390x": "0.25.8", + "@esbuild/linux-x64": "0.25.8", + "@esbuild/netbsd-arm64": "0.25.8", + "@esbuild/netbsd-x64": "0.25.8", + "@esbuild/openbsd-arm64": "0.25.8", + "@esbuild/openbsd-x64": "0.25.8", + "@esbuild/openharmony-arm64": "0.25.8", + "@esbuild/sunos-x64": "0.25.8", + "@esbuild/win32-arm64": "0.25.8", + "@esbuild/win32-ia32": "0.25.8", + "@esbuild/win32-x64": "0.25.8" } }, "node_modules/fill-range": {