diff --git a/.ci/php-cs-fixer/composer.lock b/.ci/php-cs-fixer/composer.lock index da18bed2c8..d9fdd6b4db 100644 --- a/.ci/php-cs-fixer/composer.lock +++ b/.ci/php-cs-fixer/composer.lock @@ -406,16 +406,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.76.0", + "version": "v3.84.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "0e3c484cef0ae9314b0f85986a36296087432c40" + "reference": "38dad0767bf2a9b516b976852200ae722fe984ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/0e3c484cef0ae9314b0f85986a36296087432c40", - "reference": "0e3c484cef0ae9314b0f85986a36296087432c40", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/38dad0767bf2a9b516b976852200ae722fe984ca", + "reference": "38dad0767bf2a9b516b976852200ae722fe984ca", "shasum": "" }, "require": { @@ -499,7 +499,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.76.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.84.0" }, "funding": [ { @@ -507,7 +507,7 @@ "type": "github" } ], - "time": "2025-06-30T14:15:06+00:00" + "time": "2025-07-15T18:21:57+00:00" }, { "name": "psr/container", diff --git a/app/Api/V1/Requests/Autocomplete/AutocompleteRequest.php b/app/Api/V1/Requests/Autocomplete/AutocompleteRequest.php index 687d23ba5f..566624b060 100644 --- a/app/Api/V1/Requests/Autocomplete/AutocompleteRequest.php +++ b/app/Api/V1/Requests/Autocomplete/AutocompleteRequest.php @@ -58,7 +58,7 @@ class AutocompleteRequest extends FormRequest public function rules(): array { return [ - 'date' => 'date|after:1900-01-01|before:2099-12-31', + 'date' => 'date|after:1970-01-02|before:2038-01-17', ]; } } diff --git a/app/Api/V1/Requests/Chart/ChartRequest.php b/app/Api/V1/Requests/Chart/ChartRequest.php index 58ade4f0c3..2ef933a1c2 100644 --- a/app/Api/V1/Requests/Chart/ChartRequest.php +++ b/app/Api/V1/Requests/Chart/ChartRequest.php @@ -60,8 +60,8 @@ class ChartRequest extends FormRequest public function rules(): array { return [ - 'start' => 'required|date|after:1900-01-01|before:2099-12-31|before_or_equal:end', - 'end' => 'required|date|after:1900-01-01|before:2099-12-31|after_or_equal:start', + 'start' => 'required|date|after:1970-01-02|before:2038-01-17|before_or_equal:end', + 'end' => 'required|date|after:1970-01-02|before:2038-01-17|after_or_equal:start', 'preselected' => sprintf('nullable|in:%s', implode(',', config('firefly.preselected_accounts'))), 'period' => sprintf('nullable|in:%s', implode(',', config('firefly.valid_view_ranges'))), 'accounts.*' => 'exists:accounts,id', diff --git a/app/Api/V1/Requests/Data/DateRequest.php b/app/Api/V1/Requests/Data/DateRequest.php index deab07a2db..7ba1861086 100644 --- a/app/Api/V1/Requests/Data/DateRequest.php +++ b/app/Api/V1/Requests/Data/DateRequest.php @@ -65,9 +65,9 @@ class DateRequest extends FormRequest public function rules(): array { return [ - 'date' => 'date|after:1900-01-01|before:2099-12-31', - 'start' => 'date|after:1900-01-01|before:2099-12-31|before:end|required_with:end', - 'end' => 'date|after:1900-01-01|before:2099-12-31|after:start|required_with:start', + 'date' => 'date|after:1970-01-02|before:2038-01-17', + 'start' => 'date|after:1970-01-02|before:2038-01-17|before:end|required_with:end', + 'end' => 'date|after:1970-01-02|before:2038-01-17|after:start|required_with:start', ]; } } diff --git a/app/Api/V1/Requests/Generic/DateRequest.php b/app/Api/V1/Requests/Generic/DateRequest.php index c3840ac76b..599cdef49a 100644 --- a/app/Api/V1/Requests/Generic/DateRequest.php +++ b/app/Api/V1/Requests/Generic/DateRequest.php @@ -55,8 +55,8 @@ class DateRequest extends FormRequest public function rules(): array { return [ - 'start' => 'required|date|after:1900-01-01|before:2099-12-31', - 'end' => 'required|date|after_or_equal:start|before:2099-12-31|after:1900-01-01', + 'start' => 'required|date|after:1970-01-02|before:2038-01-17', + 'end' => 'required|date|after_or_equal:start|before:2038-01-17|after:1970-01-02', ]; } } diff --git a/app/Api/V1/Requests/Generic/SingleDateRequest.php b/app/Api/V1/Requests/Generic/SingleDateRequest.php index 2e4842433b..14e3c5fc02 100644 --- a/app/Api/V1/Requests/Generic/SingleDateRequest.php +++ b/app/Api/V1/Requests/Generic/SingleDateRequest.php @@ -53,7 +53,7 @@ class SingleDateRequest extends FormRequest public function rules(): array { return [ - 'date' => 'required|date|after:1900-01-01|before:2099-12-31', + 'date' => 'required|date|after:1970-01-02|before:2038-01-17', ]; } } diff --git a/app/Api/V1/Requests/Models/AvailableBudget/Request.php b/app/Api/V1/Requests/Models/AvailableBudget/Request.php index ad36cdb728..93b3f732b0 100644 --- a/app/Api/V1/Requests/Models/AvailableBudget/Request.php +++ b/app/Api/V1/Requests/Models/AvailableBudget/Request.php @@ -66,8 +66,8 @@ class Request extends FormRequest 'currency_id' => 'numeric|exists:transaction_currencies,id', 'currency_code' => 'min:3|max:51|exists:transaction_currencies,code', 'amount' => ['nullable', new IsValidPositiveAmount()], - 'start' => 'date|after:1900-01-01|before:2099-12-31', - 'end' => 'date|after:1900-01-01|before:2099-12-31', + 'start' => 'date|after:1970-01-02|before:2038-01-17', + 'end' => 'date|after:1970-01-02|before:2038-01-17', ]; } diff --git a/app/Api/V1/Requests/Models/Bill/StoreRequest.php b/app/Api/V1/Requests/Models/Bill/StoreRequest.php index 727eb9afed..46b0027e7e 100644 --- a/app/Api/V1/Requests/Models/Bill/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Bill/StoreRequest.php @@ -80,9 +80,9 @@ class StoreRequest extends FormRequest 'amount_max' => ['required', new IsValidPositiveAmount()], 'currency_id' => 'numeric|exists:transaction_currencies,id', 'currency_code' => 'min:3|max:51|exists:transaction_currencies,code', - 'date' => 'date|required|after:1900-01-01|before:2099-12-31', - 'end_date' => 'nullable|date|after:date|after:1900-01-01|before:2099-12-31', - 'extension_date' => 'nullable|date|after:date|after:1900-01-01|before:2099-12-31', + 'date' => 'date|required|after:1970-01-02|before:2038-01-17', + 'end_date' => 'nullable|date|after:date|after:1970-01-02|before:2038-01-17', + 'extension_date' => 'nullable|date|after:date|after:1970-01-02|before:2038-01-17', 'repeat_freq' => 'in:weekly,monthly,quarterly,half-year,yearly|required', 'skip' => 'min:0|max:31|numeric', 'active' => [new IsBoolean()], diff --git a/app/Api/V1/Requests/Models/Bill/UpdateRequest.php b/app/Api/V1/Requests/Models/Bill/UpdateRequest.php index 4b69d4d6ee..149f5ad4b7 100644 --- a/app/Api/V1/Requests/Models/Bill/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Bill/UpdateRequest.php @@ -81,9 +81,9 @@ class UpdateRequest extends FormRequest 'amount_max' => ['nullable', new IsValidPositiveAmount()], 'currency_id' => 'numeric|exists:transaction_currencies,id', 'currency_code' => 'min:3|max:51|exists:transaction_currencies,code', - 'date' => 'date|after:1900-01-01|before:2099-12-31', - 'end_date' => 'date|after:date|after:1900-01-01|before:2099-12-31', - 'extension_date' => 'date|after:date|after:1900-01-01|before:2099-12-31', + 'date' => 'date|after:1970-01-02|before:2038-01-17', + 'end_date' => 'date|after:date|after:1970-01-02|before:2038-01-17', + 'extension_date' => 'date|after:date|after:1970-01-02|before:2038-01-17', 'repeat_freq' => 'in:weekly,monthly,quarterly,half-year,yearly', 'skip' => 'min:0|max:31|numeric', 'active' => [new IsBoolean()], diff --git a/app/Api/V1/Requests/Models/BudgetLimit/UpdateRequest.php b/app/Api/V1/Requests/Models/BudgetLimit/UpdateRequest.php index c1ed04a9a4..3c0fc08c37 100644 --- a/app/Api/V1/Requests/Models/BudgetLimit/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/BudgetLimit/UpdateRequest.php @@ -67,8 +67,8 @@ class UpdateRequest extends FormRequest public function rules(): array { return [ - 'start' => 'date|after:1900-01-01|before:2099-12-31', - 'end' => 'date|after:1900-01-01|before:2099-12-31', + 'start' => 'date|after:1970-01-02|before:2038-01-17', + 'end' => 'date|after:1970-01-02|before:2038-01-17', 'amount' => ['nullable', new IsValidPositiveAmount()], 'currency_id' => 'numeric|exists:transaction_currencies,id', 'currency_code' => 'min:3|max:51|exists:transaction_currencies,code', diff --git a/app/Api/V1/Requests/Models/CurrencyExchangeRate/DestroyRequest.php b/app/Api/V1/Requests/Models/CurrencyExchangeRate/DestroyRequest.php index 451cf53126..1762d7348c 100644 --- a/app/Api/V1/Requests/Models/CurrencyExchangeRate/DestroyRequest.php +++ b/app/Api/V1/Requests/Models/CurrencyExchangeRate/DestroyRequest.php @@ -45,7 +45,7 @@ class DestroyRequest extends FormRequest public function rules(): array { return [ - 'date' => 'required|date|after:1900-01-01|before:2099-12-31', + 'date' => 'required|date|after:1970-01-02|before:2038-01-17', ]; } } diff --git a/app/Api/V1/Requests/Models/CurrencyExchangeRate/StoreRequest.php b/app/Api/V1/Requests/Models/CurrencyExchangeRate/StoreRequest.php index f29dd31fa2..b4ef5d13b8 100644 --- a/app/Api/V1/Requests/Models/CurrencyExchangeRate/StoreRequest.php +++ b/app/Api/V1/Requests/Models/CurrencyExchangeRate/StoreRequest.php @@ -61,7 +61,7 @@ class StoreRequest extends FormRequest public function rules(): array { return [ - 'date' => 'required|date|after:1900-01-01|before:2099-12-31', + 'date' => 'required|date|after:1970-01-02|before:2038-01-17', 'rate' => 'required|numeric|gt:0', 'from' => 'required|exists:transaction_currencies,code', 'to' => 'required|exists:transaction_currencies,code', diff --git a/app/Api/V1/Requests/Models/CurrencyExchangeRate/UpdateRequest.php b/app/Api/V1/Requests/Models/CurrencyExchangeRate/UpdateRequest.php index e244895daa..ab37c34114 100644 --- a/app/Api/V1/Requests/Models/CurrencyExchangeRate/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/CurrencyExchangeRate/UpdateRequest.php @@ -50,7 +50,7 @@ class UpdateRequest extends FormRequest public function rules(): array { return [ - 'date' => 'date|after:1900-01-01|before:2099-12-31', + 'date' => 'date|after:1970-01-02|before:2038-01-17', 'rate' => 'required|numeric|gt:0', ]; } diff --git a/app/Api/V1/Requests/Models/Recurrence/UpdateRequest.php b/app/Api/V1/Requests/Models/Recurrence/UpdateRequest.php index bd8a26f1c2..f16c521590 100644 --- a/app/Api/V1/Requests/Models/Recurrence/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Recurrence/UpdateRequest.php @@ -154,7 +154,7 @@ class UpdateRequest extends FormRequest return [ 'title' => sprintf('min:1|max:255|uniqueObjectForUser:recurrences,title,%d', $recurrence->id), 'description' => 'min:1|max:32768', - 'first_date' => 'date|after:1900-01-01|before:2099-12-31', + 'first_date' => 'date|after:1970-01-02|before:2038-01-17', 'apply_rules' => [new IsBoolean()], 'active' => [new IsBoolean()], 'repeat_until' => 'nullable|date', diff --git a/app/Api/V1/Requests/Models/Rule/TestRequest.php b/app/Api/V1/Requests/Models/Rule/TestRequest.php index 27490d14f4..ef855b9c85 100644 --- a/app/Api/V1/Requests/Models/Rule/TestRequest.php +++ b/app/Api/V1/Requests/Models/Rule/TestRequest.php @@ -71,8 +71,8 @@ class TestRequest extends FormRequest public function rules(): array { return [ - 'start' => 'date|after:1900-01-01|before:2099-12-31', - 'end' => 'date|after_or_equal:start|after:1900-01-01|before:2099-12-31', + 'start' => 'date|after:1970-01-02|before:2038-01-17', + 'end' => 'date|after_or_equal:start|after:1970-01-02|before:2038-01-17', 'accounts' => '', 'accounts.*' => 'required|exists:accounts,id|belongsToUser:accounts', ]; diff --git a/app/Api/V1/Requests/Models/Rule/TriggerRequest.php b/app/Api/V1/Requests/Models/Rule/TriggerRequest.php index 07a4feb7d1..42f4417aca 100644 --- a/app/Api/V1/Requests/Models/Rule/TriggerRequest.php +++ b/app/Api/V1/Requests/Models/Rule/TriggerRequest.php @@ -65,8 +65,8 @@ class TriggerRequest extends FormRequest public function rules(): array { return [ - 'start' => 'date|after:1900-01-01|before:2099-12-31', - 'end' => 'date|after_or_equal:start|after:1900-01-01|before:2099-12-31', + 'start' => 'date|after:1970-01-02|before:2038-01-17', + 'end' => 'date|after_or_equal:start|after:1970-01-02|before:2038-01-17', 'accounts' => '', 'accounts.*' => 'exists:accounts,id|belongsToUser:accounts', ]; diff --git a/app/Api/V1/Requests/Models/RuleGroup/TestRequest.php b/app/Api/V1/Requests/Models/RuleGroup/TestRequest.php index 34fa7231e5..68c7bfb219 100644 --- a/app/Api/V1/Requests/Models/RuleGroup/TestRequest.php +++ b/app/Api/V1/Requests/Models/RuleGroup/TestRequest.php @@ -65,8 +65,8 @@ class TestRequest extends FormRequest public function rules(): array { return [ - 'start' => 'date|after:1900-01-01|before:2099-12-31', - 'end' => 'date|after_or_equal:start|after:1900-01-01|before:2099-12-31', + 'start' => 'date|after:1970-01-02|before:2038-01-17', + 'end' => 'date|after_or_equal:start|after:1970-01-02|before:2038-01-17', 'accounts' => '', 'accounts.*' => 'exists:accounts,id|belongsToUser:accounts', ]; diff --git a/app/Api/V1/Requests/Models/RuleGroup/TriggerRequest.php b/app/Api/V1/Requests/Models/RuleGroup/TriggerRequest.php index 97038d6ef2..67e7fd4e09 100644 --- a/app/Api/V1/Requests/Models/RuleGroup/TriggerRequest.php +++ b/app/Api/V1/Requests/Models/RuleGroup/TriggerRequest.php @@ -69,8 +69,8 @@ class TriggerRequest extends FormRequest public function rules(): array { return [ - 'start' => 'date|after:1900-01-01|before:2099-12-31', - 'end' => 'date|after_or_equal:start|after:1900-01-01|before:2099-12-31', + 'start' => 'date|after:1970-01-02|before:2038-01-17', + 'end' => 'date|after_or_equal:start|after:1970-01-02|before:2038-01-17', ]; } } diff --git a/app/Api/V1/Requests/Models/Tag/StoreRequest.php b/app/Api/V1/Requests/Models/Tag/StoreRequest.php index 2041d8f4b7..aeb51632bd 100644 --- a/app/Api/V1/Requests/Models/Tag/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Tag/StoreRequest.php @@ -62,7 +62,7 @@ class StoreRequest extends FormRequest $rules = [ 'tag' => 'required|min:1|uniqueObjectForUser:tags,tag|max:1024', 'description' => 'min:1|nullable|max:32768', - 'date' => 'date|nullable|after:1900-01-01|before:2099-12-31', + 'date' => 'date|nullable|after:1970-01-02|before:2038-01-17', ]; return Location::requestRules($rules); diff --git a/app/Api/V1/Requests/Models/Tag/UpdateRequest.php b/app/Api/V1/Requests/Models/Tag/UpdateRequest.php index 8ecf7f71a2..37417dfdb2 100644 --- a/app/Api/V1/Requests/Models/Tag/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Tag/UpdateRequest.php @@ -66,7 +66,7 @@ class UpdateRequest extends FormRequest $rules = [ 'tag' => 'min:1|max:1024|uniqueObjectForUser:tags,tag,'.$tag->id, 'description' => 'min:1|nullable|max:32768', - 'date' => 'date|nullable|after:1900-01-01|before:2099-12-31', + 'date' => 'date|nullable|after:1970-01-02|before:2038-01-17', ]; return Location::requestRules($rules); diff --git a/app/Api/V1/Requests/System/CronRequest.php b/app/Api/V1/Requests/System/CronRequest.php index ec57cfeb96..1ffebd0494 100644 --- a/app/Api/V1/Requests/System/CronRequest.php +++ b/app/Api/V1/Requests/System/CronRequest.php @@ -73,7 +73,7 @@ class CronRequest extends FormRequest { return [ 'force' => 'in:true,false', - 'date' => 'nullable|date|after:1900-01-01|before:2099-12-31', + 'date' => 'nullable|date|after:1970-01-02|before:2038-01-17', ]; } } diff --git a/app/Api/V2/Controllers/Controller.php b/app/Api/V2/Controllers/Controller.php index e9da840908..6117197914 100644 --- a/app/Api/V2/Controllers/Controller.php +++ b/app/Api/V2/Controllers/Controller.php @@ -116,7 +116,7 @@ class Controller extends BaseController app('log')->warning(sprintf('Ignored invalid date "%s" in API v2 controller parameter check: %s', substr((string) $date, 0, 20), $e->getMessage())); } // out of range? set to null. - if ($obj instanceof Carbon && ($obj->year <= 1900 || $obj->year > 2099)) { + if ($obj instanceof Carbon && ($obj->year <= 1970 || $obj->year > 2038)) { app('log')->warning(sprintf('Refuse to use date "%s" in API v2 controller parameter check: %s', $field, $obj->toAtomString())); $obj = null; } diff --git a/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php b/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php index deef2af69b..dbc934b394 100644 --- a/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php +++ b/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php @@ -86,7 +86,7 @@ class AutocompleteRequest extends FormRequest $valid = array_keys($this->types); return [ - 'date' => 'nullable|date|after:1900-01-01|before:2100-01-01', + 'date' => 'nullable|date|after:1970-01-02|before:2038-01-17', 'query' => 'nullable|string', 'size' => 'nullable|integer|min:1|max:100', 'page' => 'nullable|integer|min:1', diff --git a/app/Api/V2/Request/Chart/BalanceChartRequest.php b/app/Api/V2/Request/Chart/BalanceChartRequest.php index 3220714cdb..46c80d5f46 100644 --- a/app/Api/V2/Request/Chart/BalanceChartRequest.php +++ b/app/Api/V2/Request/Chart/BalanceChartRequest.php @@ -60,8 +60,8 @@ class BalanceChartRequest extends FormRequest public function rules(): array { return [ - 'start' => 'required|date|after:1900-01-01|before:2099-12-31', - 'end' => 'required|date|after_or_equal:start|before:2099-12-31|after:1900-01-01', + 'start' => 'required|date|after:1970-01-02|before:2038-01-17', + 'end' => 'required|date|after_or_equal:start|before:2038-01-17|after:1970-01-02', 'accounts.*' => 'required|exists:accounts,id', 'period' => sprintf('required|in:%s', implode(',', config('firefly.valid_view_ranges'))), ]; diff --git a/app/Api/V2/Request/Chart/ChartRequest.php b/app/Api/V2/Request/Chart/ChartRequest.php index cecb7edc40..d719129c6f 100644 --- a/app/Api/V2/Request/Chart/ChartRequest.php +++ b/app/Api/V2/Request/Chart/ChartRequest.php @@ -61,8 +61,8 @@ class ChartRequest extends FormRequest public function rules(): array { return [ - 'start' => 'required|date|after:1900-01-01|before:2099-12-31|before_or_equal:end', - 'end' => 'required|date|after:1900-01-01|before:2099-12-31|after_or_equal:start', + 'start' => 'required|date|after:1970-01-02|before:2038-01-17|before_or_equal:end', + 'end' => 'required|date|after:1970-01-02|before:2038-01-17|after_or_equal:start', 'preselected' => sprintf('nullable|in:%s', implode(',', config('firefly.preselected_accounts'))), 'period' => sprintf('nullable|in:%s', implode(',', config('firefly.valid_view_ranges'))), 'accounts.*' => 'exists:accounts,id', diff --git a/app/Api/V2/Request/Chart/DashboardChartRequest.php b/app/Api/V2/Request/Chart/DashboardChartRequest.php index 6c4a3cdfa6..08f1845ff1 100644 --- a/app/Api/V2/Request/Chart/DashboardChartRequest.php +++ b/app/Api/V2/Request/Chart/DashboardChartRequest.php @@ -60,8 +60,8 @@ class DashboardChartRequest extends FormRequest public function rules(): array { return [ - 'start' => 'required|date|after:1900-01-01|before:2099-12-31', - 'end' => 'required|date|after_or_equal:start|before:2099-12-31|after:1900-01-01', + 'start' => 'required|date|after:1970-01-02|before:2038-01-17', + 'end' => 'required|date|after_or_equal:start|before:2038-01-17|after:1970-01-02', 'preselected' => sprintf('in:%s', implode(',', config('firefly.preselected_accounts'))), 'accounts.*' => 'exists:accounts,id', ]; diff --git a/app/Api/V2/Request/Generic/DateRequest.php b/app/Api/V2/Request/Generic/DateRequest.php index 810d38e5b9..54ee20d068 100644 --- a/app/Api/V2/Request/Generic/DateRequest.php +++ b/app/Api/V2/Request/Generic/DateRequest.php @@ -55,8 +55,8 @@ class DateRequest extends FormRequest public function rules(): array { return [ - 'start' => 'required|date|after:1900-01-01|before:2099-12-31', - 'end' => 'required|date|after_or_equal:start|before:2099-12-31|after:1900-01-01', + 'start' => 'required|date|after:1970-01-02|before:2038-01-17', + 'end' => 'required|date|after_or_equal:start|before:2038-01-17|after:1970-01-02', ]; } } diff --git a/app/Api/V2/Request/Generic/SingleDateRequest.php b/app/Api/V2/Request/Generic/SingleDateRequest.php index a9a3465b44..12bd373c80 100644 --- a/app/Api/V2/Request/Generic/SingleDateRequest.php +++ b/app/Api/V2/Request/Generic/SingleDateRequest.php @@ -53,7 +53,7 @@ class SingleDateRequest extends FormRequest public function rules(): array { return [ - 'date' => 'required|date|after:1900-01-01|before:2099-12-31', + 'date' => 'required|date|after:1970-01-02|before:2038-01-17', ]; } } diff --git a/app/Api/V2/Request/Model/Account/IndexRequest.php b/app/Api/V2/Request/Model/Account/IndexRequest.php index 892ee4a16f..64a748175c 100644 --- a/app/Api/V2/Request/Model/Account/IndexRequest.php +++ b/app/Api/V2/Request/Model/Account/IndexRequest.php @@ -63,9 +63,9 @@ class IndexRequest extends FormRequest public function rules(): array { return [ - 'date' => 'date|after:1900-01-01|before:2099-12-31', - 'start' => 'date|after:1900-01-01|before:2099-12-31|before:end|required_with:end', - 'end' => 'date|after:1900-01-01|before:2099-12-31|after:start|required_with:start', + 'date' => 'date|after:1970-01-02|before:2038-01-17', + 'start' => 'date|after:1970-01-02|before:2038-01-17|before:end|required_with:end', + 'end' => 'date|after:1970-01-02|before:2038-01-17|after:start|required_with:start', ]; } } diff --git a/app/Api/V2/Request/Model/Transaction/InfiniteListRequest.php b/app/Api/V2/Request/Model/Transaction/InfiniteListRequest.php index a66e960f82..e54a4d836d 100644 --- a/app/Api/V2/Request/Model/Transaction/InfiniteListRequest.php +++ b/app/Api/V2/Request/Model/Transaction/InfiniteListRequest.php @@ -109,8 +109,8 @@ class InfiniteListRequest extends FormRequest public function rules(): array { return [ - 'start' => 'date|after:1900-01-01|before:2099-12-31', - 'end' => 'date|after:start|after:1900-01-01|before:2099-12-31', + 'start' => 'date|after:1970-01-02|before:2038-01-17', + 'end' => 'date|after:start|after:1970-01-02|before:2038-01-17', 'start_row' => 'integer|min:0|max:4294967296', 'end_row' => 'integer|min:0|max:4294967296|gt:start_row', ]; diff --git a/app/Api/V2/Request/Model/Transaction/ListRequest.php b/app/Api/V2/Request/Model/Transaction/ListRequest.php index 17cf22b78a..70d4ae70c2 100644 --- a/app/Api/V2/Request/Model/Transaction/ListRequest.php +++ b/app/Api/V2/Request/Model/Transaction/ListRequest.php @@ -84,8 +84,8 @@ class ListRequest extends FormRequest public function rules(): array { return [ - 'start' => 'date|after:1900-01-01|before:2099-12-31', - 'end' => 'date|after:start|after:1900-01-01|before:2099-12-31', + 'start' => 'date|after:1970-01-02|before:2038-01-17', + 'end' => 'date|after:start|after:1970-01-02|before:2038-01-17', ]; } } diff --git a/app/Factory/TagFactory.php b/app/Factory/TagFactory.php index b3a0e376e7..e0bb78254c 100644 --- a/app/Factory/TagFactory.php +++ b/app/Factory/TagFactory.php @@ -75,15 +75,15 @@ class TagFactory $latitude = 0.0 === (float) $data['latitude'] ? null : (float) $data['latitude']; // intentional float $longitude = 0.0 === (float) $data['longitude'] ? null : (float) $data['longitude']; // intentional float $array = [ - 'user_id' => $this->user->id, - 'user_group_id' => $this->userGroup->id, - 'tag' => trim((string) $data['tag']), - 'tagMode' => 'nothing', - 'date' => $data['date'], - 'description' => $data['description'], - 'latitude' => null, - 'longitude' => null, - 'zoomLevel' => null, + 'user_id' => $this->user->id, + 'user_group_id' => $this->userGroup->id, + 'tag' => trim((string) $data['tag']), + 'tag_mode' => 'nothing', + 'date' => $data['date'], + 'description' => $data['description'], + 'latitude' => null, + 'longitude' => null, + 'zoomLevel' => null, ]; /** @var null|Tag $tag */ diff --git a/app/Helpers/Collector/GroupCollector.php b/app/Helpers/Collector/GroupCollector.php index 4089a5e1bc..3112fcfdfa 100644 --- a/app/Helpers/Collector/GroupCollector.php +++ b/app/Helpers/Collector/GroupCollector.php @@ -434,6 +434,7 @@ class GroupCollector implements GroupCollectorInterface public function findNothing(): GroupCollectorInterface { + Log::warning('The search engine was instructed to FIND NOTHING. This may be a bug.'); $this->query->where('transaction_groups.id', -1); return $this; diff --git a/app/Http/Controllers/Json/RecurrenceController.php b/app/Http/Controllers/Json/RecurrenceController.php index 477260d5f0..6c07685f34 100644 --- a/app/Http/Controllers/Json/RecurrenceController.php +++ b/app/Http/Controllers/Json/RecurrenceController.php @@ -107,7 +107,7 @@ class RecurrenceController extends Controller $repetitionMoment = str_ireplace('ndom,', '', $request->get('type')); } if ('yearly' === $repetitionType) { - $repetitionMoment = explode(',', (string) $request->get('type'))[1] ?? '2018-01-01'; + $repetitionMoment = explode(',', (string) $request->get('type'))[1] ?? '2025-01-01'; } $actualStart->startOfDay(); $repetition = new RecurrenceRepetition(); diff --git a/app/Http/Requests/SelectTransactionsRequest.php b/app/Http/Requests/SelectTransactionsRequest.php index 674d3d222e..0cbdba1784 100644 --- a/app/Http/Requests/SelectTransactionsRequest.php +++ b/app/Http/Requests/SelectTransactionsRequest.php @@ -41,8 +41,8 @@ class SelectTransactionsRequest extends FormRequest public function rules(): array { return [ - 'start' => 'required|date|after:1900-01-01|before:2099-12-31|before:end|required_with:end', - 'end' => 'required|date|after:1900-01-01|before:2099-12-31|after:start|required_with:start', + 'start' => 'required|date|after:1970-01-02|before:2038-01-17|before:end|required_with:end', + 'end' => 'required|date|after:1970-01-02|before:2038-01-17|after:start|required_with:start', 'accounts' => 'required', 'accounts.*' => 'required|exists:accounts,id|belongsToUser:accounts', ]; diff --git a/app/Http/Requests/TagFormRequest.php b/app/Http/Requests/TagFormRequest.php index 8686b2bd5d..069ffd5ef3 100644 --- a/app/Http/Requests/TagFormRequest.php +++ b/app/Http/Requests/TagFormRequest.php @@ -74,7 +74,7 @@ class TagFormRequest extends FormRequest 'tag' => $tagRule, 'id' => $idRule, 'description' => 'max:32768|min:1|nullable', - 'date' => 'date|nullable|after:1984-09-17', + 'date' => 'date|nullable|after:1970-01-02|before:2038-01-17', ]; return Location::requestRules($rules); diff --git a/app/Models/Tag.php b/app/Models/Tag.php index 6a740a3730..3af4799730 100644 --- a/app/Models/Tag.php +++ b/app/Models/Tag.php @@ -40,7 +40,7 @@ class Tag extends Model use ReturnsIntegerUserIdTrait; use SoftDeletes; - protected $fillable = ['user_id', 'user_group_id', 'tag', 'date', 'date_tz', 'description', 'tagMode']; + protected $fillable = ['user_id', 'user_group_id', 'tag', 'date', 'date_tz', 'description', 'tag_mode']; protected $hidden = ['zoomLevel', 'latitude', 'longitude']; diff --git a/app/Support/Form/CurrencyForm.php b/app/Support/Form/CurrencyForm.php index 378375a351..0ac0b07f62 100644 --- a/app/Support/Form/CurrencyForm.php +++ b/app/Support/Form/CurrencyForm.php @@ -50,9 +50,9 @@ class CurrencyForm } /** - * @throws FireflyException - * * @phpstan-param view-string $view + * + * @throws FireflyException */ protected function currencyField(string $name, string $view, mixed $value = null, ?array $options = null): string { diff --git a/app/Support/JsonApi/Enrichments/TransactionGroupEnrichment.php b/app/Support/JsonApi/Enrichments/TransactionGroupEnrichment.php index 3d5d40db50..41567cf529 100644 --- a/app/Support/JsonApi/Enrichments/TransactionGroupEnrichment.php +++ b/app/Support/JsonApi/Enrichments/TransactionGroupEnrichment.php @@ -149,7 +149,9 @@ class TransactionGroupEnrichment implements EnrichmentInterface continue; } if (in_array($name, $this->dateFields, true)) { - $this->metaData[$entry['transaction_journal_id']][$name] = Carbon::parse($data); + Log::debug(sprintf('Meta data for "%s" is a date : "%s"', $name, $data)); + $this->metaData[$entry['transaction_journal_id']][$name] = Carbon::parse($data, config('app.timezone')); + Log::debug(sprintf('Meta data for "%s" converts to: "%s"', $name, $this->metaData[$entry['transaction_journal_id']][$name]->toW3CString())); continue; } diff --git a/app/Support/Request/ConvertsDataTypes.php b/app/Support/Request/ConvertsDataTypes.php index e1bdab159e..60e954945a 100644 --- a/app/Support/Request/ConvertsDataTypes.php +++ b/app/Support/Request/ConvertsDataTypes.php @@ -257,16 +257,16 @@ trait ConvertsDataTypes try { $carbon = Carbon::createFromFormat('Y-m-d', $value); } catch (InvalidDateException $e) { // @phpstan-ignore-line - app('log')->error(sprintf('[1] "%s" is not a valid date: %s', $value, $e->getMessage())); + Log::error(sprintf('[1] "%s" is not a valid date: %s', $value, $e->getMessage())); return null; } catch (InvalidFormatException $e) { // @phpstan-ignore-line - app('log')->error(sprintf('[2] "%s" is of an invalid format: %s', $value, $e->getMessage())); + Log::error(sprintf('[2] "%s" is of an invalid format: %s', $value, $e->getMessage())); return null; } if (!$carbon instanceof Carbon) { - app('log')->error(sprintf('[2] "%s" is of an invalid format.', $value)); + Log::error(sprintf('[2] "%s" is of an invalid format.', $value)); return null; } @@ -278,11 +278,11 @@ trait ConvertsDataTypes try { $carbon = Carbon::parse($value); } catch (InvalidDateException $e) { // @phpstan-ignore-line - app('log')->error(sprintf('[3] "%s" is not a valid date or time: %s', $value, $e->getMessage())); + Log::error(sprintf('[3] "%s" is not a valid date or time: %s', $value, $e->getMessage())); return null; } catch (InvalidFormatException $e) { - app('log')->error(sprintf('[4] "%s" is of an invalid format: %s', $value, $e->getMessage())); + Log::error(sprintf('[4] "%s" is of an invalid format: %s', $value, $e->getMessage())); return null; } @@ -306,6 +306,7 @@ trait ConvertsDataTypes protected function dateFromValue(?string $string): ?Carbon { if (null === $string) { + return null; } if ('' === $string) { @@ -319,11 +320,11 @@ trait ConvertsDataTypes // @ignoreException } if (!$carbon instanceof Carbon) { - app('log')->debug(sprintf('Invalid date: %s', $string)); + Log::debug(sprintf('Invalid date: %s', $string)); return null; } - app('log')->debug(sprintf('Date object: %s (%s)', $carbon->toW3cString(), $carbon->getTimezone())); + Log::debug(sprintf('Date object: %s (%s) from "%s"', $carbon->toW3cString(), $carbon->getTimezone(), $string)); return $carbon; } @@ -383,7 +384,7 @@ trait ConvertsDataTypes Log::debug(sprintf('Exception when parsing date "%s".', $this->get($field))); } if (!$result instanceof Carbon) { - app('log')->debug(sprintf('Exception when parsing date "%s".', $this->get($field))); + Log::debug(sprintf('Exception when parsing date "%s".', $this->get($field))); } return $result; diff --git a/app/Support/Search/OperatorQuerySearch.php b/app/Support/Search/OperatorQuerySearch.php index 095162de47..69781b2157 100644 --- a/app/Support/Search/OperatorQuerySearch.php +++ b/app/Support/Search/OperatorQuerySearch.php @@ -48,6 +48,7 @@ use FireflyIII\Support\Search\QueryParser\StringNode; use FireflyIII\User; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Log; use LogicException; use TypeError; @@ -84,7 +85,7 @@ class OperatorQuerySearch implements SearchInterface */ public function __construct() { - app('log')->debug('Constructed OperatorQuerySearch'); + Log::debug('Constructed OperatorQuerySearch'); $this->operators = new Collection(); $this->page = 1; $this->words = []; @@ -137,22 +138,22 @@ class OperatorQuerySearch implements SearchInterface */ public function parseQuery(string $query): void { - app('log')->debug(sprintf('Now in parseQuery("%s")', $query)); + Log::debug(sprintf('Now in parseQuery("%s")', $query)); /** @var QueryParserInterface $parser */ $parser = app(QueryParserInterface::class); - app('log')->debug(sprintf('Using %s as implementation for QueryParserInterface', $parser::class)); + Log::debug(sprintf('Using %s as implementation for QueryParserInterface', $parser::class)); try { $parsedQuery = $parser->parse($query); } catch (LogicException|TypeError $e) { - app('log')->error($e->getMessage()); - app('log')->error(sprintf('Could not parse search: "%s".', $query)); + Log::error($e->getMessage()); + Log::error(sprintf('Could not parse search: "%s".', $query)); throw new FireflyException(sprintf('Invalid search value "%s". See the logs.', e($query)), 0, $e); } - app('log')->debug(sprintf('Found %d node(s) at top-level', count($parsedQuery->getNodes()))); + Log::debug(sprintf('Found %d node(s) at top-level', count($parsedQuery->getNodes()))); $this->handleSearchNode($parsedQuery, $parsedQuery->isProhibited(false)); // add missing information @@ -169,7 +170,7 @@ class OperatorQuerySearch implements SearchInterface */ private function handleSearchNode(Node $node, bool $flipProhibitedFlag): void { - app('log')->debug(sprintf('Now in handleSearchNode(%s)', $node::class)); + Log::debug(sprintf('Now in handleSearchNode(%s)', $node::class)); switch (true) { case $node instanceof StringNode: @@ -188,7 +189,7 @@ class OperatorQuerySearch implements SearchInterface break; default: - app('log')->error(sprintf('Cannot handle node %s', $node::class)); + Log::error(sprintf('Cannot handle node %s', $node::class)); throw new FireflyException(sprintf('Firefly III search can\'t handle "%s"-nodes', $node::class)); } @@ -201,11 +202,11 @@ class OperatorQuerySearch implements SearchInterface $prohibited = $node->isProhibited($flipProhibitedFlag); if ($prohibited) { - app('log')->debug(sprintf('Exclude string "%s" from search string', $string)); + Log::debug(sprintf('Exclude string "%s" from search string', $string)); $this->prohibitedWords[] = $string; } if (!$prohibited) { - app('log')->debug(sprintf('Add string "%s" to search string', $string)); + Log::debug(sprintf('Add string "%s" to search string', $string)); $this->words[] = $string; } } @@ -241,11 +242,11 @@ class OperatorQuerySearch implements SearchInterface 'value' => $value, 'prohibited' => $prohibited, ]); - app('log')->debug(sprintf('Added operator type "%s"', $operator)); + Log::debug(sprintf('Added operator type "%s"', $operator)); } } if (!$inArray) { - app('log')->debug(sprintf('Added INVALID operator type "%s"', $operator)); + Log::debug(sprintf('Added INVALID operator type "%s"', $operator)); $this->invalidOperators[] = [ 'type' => $operator, 'value' => $value, @@ -262,24 +263,24 @@ class OperatorQuerySearch implements SearchInterface private function updateCollector(string $operator, string $value, bool $prohibited): bool { if ($prohibited) { - app('log')->debug(sprintf('Operator "%s" is now "%s"', $operator, sprintf('-%s', $operator))); + Log::debug(sprintf('Operator "%s" is now "%s"', $operator, sprintf('-%s', $operator))); $operator = sprintf('-%s', $operator); } - app('log')->debug(sprintf('Now in updateCollector("%s", "%s")', $operator, $value)); + Log::debug(sprintf('Now in updateCollector("%s", "%s")', $operator, $value)); // check if alias, replace if necessary: $operator = self::getRootOperator($operator); switch ($operator) { default: - app('log')->error(sprintf('No such operator: %s', $operator)); + Log::error(sprintf('No such operator: %s', $operator)); throw new FireflyException(sprintf('Unsupported search operator: "%s"', $operator)); // some search operators are ignored, basically: case 'user_action': - app('log')->info(sprintf('Ignore search operator "%s"', $operator)); + Log::info(sprintf('Ignore search operator "%s"', $operator)); return false; @@ -453,6 +454,7 @@ class OperatorQuerySearch implements SearchInterface } if (null === $account) { // since the source does not exist, cannot return results: + Log::warning('Call to findNothing() because source account does not exist (source_account_id).'); $this->collector->findNothing(); } @@ -465,6 +467,7 @@ class OperatorQuerySearch implements SearchInterface } if (null === $account) { // since the source does not exist, cannot return results: + Log::warning('Call to findNothing() because source account does not exist (-source_account_id).'); $this->collector->findNothing(); } @@ -580,6 +583,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->setDestinationAccounts(new Collection([$account])); } if (null === $account) { + Log::warning('Call to findNothing() because dest account does not exist (destination_account_id).'); $this->collector->findNothing(); } @@ -591,24 +595,34 @@ class OperatorQuerySearch implements SearchInterface $this->collector->excludeDestinationAccounts(new Collection([$account])); } if (null === $account) { + Log::warning('Call to findNothing() because dest account does not exist (-destination_account_id).'); $this->collector->findNothing(); } break; case 'account_id': + Log::debug(sprintf('Now in "account_id" with value "%s"', $value)); $parts = explode(',', $value); $collection = new Collection(); foreach ($parts as $accountId) { - $account = $this->accountRepository->find((int) $accountId); + $accountId = (int) $accountId; + Log::debug(sprintf('Searching for account with ID #%d', $accountId)); + $account = $this->accountRepository->find($accountId); if (null !== $account) { + Log::debug(sprintf('Found account with ID #%d ("%s")', $accountId, $account->name)); $collection->push($account); } + if (null === $account) { + Log::debug(sprintf('Did not find account with ID #%d', $accountId)); + } } if ($collection->count() > 0) { + Log::debug(sprintf('Found more than 0 accounts, include the %d found account(s).', $collection->count())); $this->collector->setAccounts($collection); } if (0 === $collection->count()) { + Log::warning('Call to findNothing() because zero accounts found (account_id).'); $this->collector->findNothing(); } @@ -627,6 +641,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->setNotAccounts($collection); } if (0 === $collection->count()) { + Log::warning('Call to findNothing() because zero accounts found (-account_id).'); $this->collector->findNothing(); } @@ -723,6 +738,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->setCurrency($currency); } if (!$currency instanceof TransactionCurrency) { + Log::warning('Call to findNothing() because currency does not exist (currency_is).'); $this->collector->findNothing(); } @@ -734,6 +750,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->excludeCurrency($currency); } if (!$currency instanceof TransactionCurrency) { + Log::warning('Call to findNothing() because currency does not exist (-currency_is).'); $this->collector->findNothing(); } @@ -745,6 +762,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->setForeignCurrency($currency); } if (!$currency instanceof TransactionCurrency) { + Log::warning('Call to findNothing() because currency does not exist (foreign_currency_is).'); $this->collector->findNothing(); } @@ -756,6 +774,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->excludeForeignCurrency($currency); } if (!$currency instanceof TransactionCurrency) { + Log::warning('Call to findNothing() because currency does not exist (-foreign_currency_is).'); $this->collector->findNothing(); } @@ -766,14 +785,14 @@ class OperatorQuerySearch implements SearchInterface // case 'has_attachments': case '-has_no_attachments': - app('log')->debug('Set collector to filter on attachments.'); + Log::debug('Set collector to filter on attachments.'); $this->collector->hasAttachments(); break; case 'has_no_attachments': case '-has_attachments': - app('log')->debug('Set collector to filter on NO attachments.'); + Log::debug('Set collector to filter on NO attachments.'); $this->collector->hasNoAttachments(); break; @@ -799,6 +818,7 @@ class OperatorQuerySearch implements SearchInterface break; } + Log::warning('Call to findNothing() because category does not exist (category_is).'); $this->collector->findNothing(); break; @@ -819,6 +839,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->setCategories($result); } if (0 === $result->count()) { + Log::warning('Call to findNothing() because no category exists (category_ends).'); $this->collector->findNothing(); } @@ -830,6 +851,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->excludeCategories($result); } if (0 === $result->count()) { + Log::warning('Call to findNothing() no category exists (-category_ends).'); $this->collector->findNothing(); } @@ -841,6 +863,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->setCategories($result); } if (0 === $result->count()) { + Log::warning('Call to findNothing() because no category exists (category_starts).'); $this->collector->findNothing(); } @@ -852,6 +875,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->excludeCategories($result); } if (0 === $result->count()) { + Log::warning('Call to findNothing() because no category exists (-category_starts).'); $this->collector->findNothing(); } @@ -863,6 +887,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->setCategories($result); } if (0 === $result->count()) { + Log::warning('Call to findNothing() because no category exists (category_contains).'); $this->collector->findNothing(); } @@ -874,6 +899,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->excludeCategories($result); } if (0 === $result->count()) { + Log::warning('Call to findNothing() because no category exists (-category_contains).'); $this->collector->findNothing(); } @@ -900,6 +926,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->setBudgets($result); } if (0 === $result->count()) { + Log::warning('Call to findNothing() from budget_contains.'); $this->collector->findNothing(); } @@ -911,6 +938,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->excludeBudgets($result); } if (0 === $result->count()) { + Log::warning('Call to findNothing() from -budget_contains.'); $this->collector->findNothing(); } @@ -923,6 +951,7 @@ class OperatorQuerySearch implements SearchInterface break; } + Log::warning('Call to findNothing() from budget_is.'); $this->collector->findNothing(); break; @@ -934,6 +963,7 @@ class OperatorQuerySearch implements SearchInterface break; } + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); break; @@ -944,6 +974,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->setBudgets($result); } if (0 === $result->count()) { + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } @@ -955,6 +986,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->excludeBudgets($result); } if (0 === $result->count()) { + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } @@ -966,6 +998,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->setBudgets($result); } if (0 === $result->count()) { + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } @@ -977,6 +1010,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->excludeBudgets($result); } if (0 === $result->count()) { + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } @@ -1004,6 +1038,7 @@ class OperatorQuerySearch implements SearchInterface break; } + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); break; @@ -1015,6 +1050,7 @@ class OperatorQuerySearch implements SearchInterface break; } + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); break; @@ -1026,6 +1062,7 @@ class OperatorQuerySearch implements SearchInterface break; } + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); break; @@ -1037,6 +1074,7 @@ class OperatorQuerySearch implements SearchInterface break; } + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); break; @@ -1047,6 +1085,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->setBills($result); } if (0 === $result->count()) { + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } @@ -1058,6 +1097,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->excludeBills($result); } if (0 === $result->count()) { + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } @@ -1069,6 +1109,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->setBills($result); } if (0 === $result->count()) { + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } @@ -1080,6 +1121,7 @@ class OperatorQuerySearch implements SearchInterface $this->collector->excludeBills($result); } if (0 === $result->count()) { + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } @@ -1109,7 +1151,8 @@ class OperatorQuerySearch implements SearchInterface } // no tags found means search must result in nothing. if (null === $result) { - app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } @@ -1118,7 +1161,8 @@ class OperatorQuerySearch implements SearchInterface case 'tag_contains': $tags = $this->tagRepository->searchTag($value); if (0 === $tags->count()) { - app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } if ($tags->count() > 0) { @@ -1132,7 +1176,8 @@ class OperatorQuerySearch implements SearchInterface case 'tag_starts': $tags = $this->tagRepository->tagStartsWith($value); if (0 === $tags->count()) { - app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } if ($tags->count() > 0) { @@ -1146,7 +1191,8 @@ class OperatorQuerySearch implements SearchInterface case '-tag_starts': $tags = $this->tagRepository->tagStartsWith($value); if (0 === $tags->count()) { - app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } if ($tags->count() > 0) { @@ -1159,7 +1205,8 @@ class OperatorQuerySearch implements SearchInterface case 'tag_ends': $tags = $this->tagRepository->tagEndsWith($value); if (0 === $tags->count()) { - app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } if ($tags->count() > 0) { @@ -1172,7 +1219,8 @@ class OperatorQuerySearch implements SearchInterface case '-tag_ends': $tags = $this->tagRepository->tagEndsWith($value); if (0 === $tags->count()) { - app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } if ($tags->count() > 0) { @@ -1186,7 +1234,8 @@ class OperatorQuerySearch implements SearchInterface $tags = $this->tagRepository->searchTag($value)->keyBy('id'); if (0 === $tags->count()) { - app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); } if ($tags->count() > 0) { @@ -1276,20 +1325,20 @@ class OperatorQuerySearch implements SearchInterface // case 'amount_is': // strip comma's, make dots. - app('log')->debug(sprintf('Original value "%s"', $value)); + Log::debug(sprintf('Original value "%s"', $value)); $value = str_replace(',', '.', $value); $amount = app('steam')->positive($value); - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->amountIs($amount); break; case '-amount_is': // strip comma's, make dots. - app('log')->debug(sprintf('Original value "%s"', $value)); + Log::debug(sprintf('Original value "%s"', $value)); $value = str_replace(',', '.', $value); $amount = app('steam')->positive($value); - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->amountIsNot($amount); break; @@ -1299,7 +1348,7 @@ class OperatorQuerySearch implements SearchInterface $value = str_replace(',', '.', $value); $amount = app('steam')->positive($value); - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->foreignAmountIs($amount); break; @@ -1309,7 +1358,7 @@ class OperatorQuerySearch implements SearchInterface $value = str_replace(',', '.', $value); $amount = app('steam')->positive($value); - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->foreignAmountIsNot($amount); break; @@ -1320,7 +1369,7 @@ class OperatorQuerySearch implements SearchInterface $value = str_replace(',', '.', $value); $amount = app('steam')->positive($value); - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->amountLess($amount); break; @@ -1331,29 +1380,29 @@ class OperatorQuerySearch implements SearchInterface $value = str_replace(',', '.', $value); $amount = app('steam')->positive($value); - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->foreignAmountLess($amount); break; case '-amount_less': case 'amount_more': - app('log')->debug(sprintf('Now handling operator "%s"', $operator)); + Log::debug(sprintf('Now handling operator "%s"', $operator)); // strip comma's, make dots. $value = str_replace(',', '.', $value); $amount = app('steam')->positive($value); - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->amountMore($amount); break; case '-foreign_amount_less': case 'foreign_amount_more': - app('log')->debug(sprintf('Now handling operator "%s"', $operator)); + Log::debug(sprintf('Now handling operator "%s"', $operator)); // strip comma's, make dots. $value = str_replace(',', '.', $value); $amount = app('steam')->positive($value); - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->foreignAmountMore($amount); break; @@ -1363,13 +1412,13 @@ class OperatorQuerySearch implements SearchInterface // case 'transaction_type': $this->collector->setTypes([ucfirst($value)]); - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); break; case '-transaction_type': $this->collector->excludeTypes([ucfirst($value)]); - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); break; @@ -1525,7 +1574,7 @@ class OperatorQuerySearch implements SearchInterface case 'created_at_on': case '-created_at_on': - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); $range = $this->parseDateRange($operator, $value); $this->setExactObjectDateParams('created_at', $range, $prohibited); @@ -1533,7 +1582,7 @@ class OperatorQuerySearch implements SearchInterface case 'created_at_before': case '-created_at_after': - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); $range = $this->parseDateRange($operator, $value); $this->setObjectDateBeforeParams('created_at', $range); @@ -1541,7 +1590,7 @@ class OperatorQuerySearch implements SearchInterface case 'created_at_after': case '-created_at_before': - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); $range = $this->parseDateRange($operator, $value); $this->setObjectDateAfterParams('created_at', $range); @@ -1549,7 +1598,7 @@ class OperatorQuerySearch implements SearchInterface case 'updated_at_on': case '-updated_at_on': - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); $range = $this->parseDateRange($operator, $value); $this->setExactObjectDateParams('updated_at', $range, $prohibited); @@ -1557,7 +1606,7 @@ class OperatorQuerySearch implements SearchInterface case 'updated_at_before': case '-updated_at_after': - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); $range = $this->parseDateRange($operator, $value); $this->setObjectDateBeforeParams('updated_at', $range); @@ -1565,7 +1614,7 @@ class OperatorQuerySearch implements SearchInterface case 'updated_at_after': case '-updated_at_before': - app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); $range = $this->parseDateRange($operator, $value); $this->setObjectDateAfterParams('updated_at', $range); @@ -1817,6 +1866,7 @@ class OperatorQuerySearch implements SearchInterface break; case '-exists': + Log::warning(sprintf('Call to findNothing() from %s.', $operator)); $this->collector->findNothing(); break; @@ -1919,11 +1969,11 @@ class OperatorQuerySearch implements SearchInterface if (str_starts_with($original, '-')) { $return = sprintf('-%s', $config['alias_for']); } - app('log')->debug(sprintf('"%s" is an alias for "%s", so return that instead.', $original, $return)); + Log::debug(sprintf('"%s" is an alias for "%s", so return that instead.', $original, $return)); return $return; } - app('log')->debug(sprintf('"%s" is not an alias.', $operator)); + Log::debug(sprintf('"%s" is not an alias.', $operator)); return $original; } @@ -1937,7 +1987,7 @@ class OperatorQuerySearch implements SearchInterface */ private function searchAccount(string $value, SearchDirection $searchDirection, StringPosition $stringPosition, bool $prohibited = false): void { - app('log')->debug(sprintf('searchAccount("%s", %s, %s)', $value, $stringPosition->name, $searchDirection->name)); + Log::debug(sprintf('searchAccount("%s", %s, %s)', $value, $stringPosition->name, $searchDirection->name)); // search direction (default): for source accounts $searchTypes = [AccountTypeEnum::ASSET->value, AccountTypeEnum::MORTGAGE->value, AccountTypeEnum::LOAN->value, AccountTypeEnum::DEBT->value, AccountTypeEnum::REVENUE->value]; @@ -1980,28 +2030,28 @@ class OperatorQuerySearch implements SearchInterface // get accounts: $accounts = $this->accountRepository->searchAccount($value, $searchTypes, 1337); if (0 === $accounts->count() && false === $prohibited) { - app('log')->debug('Found zero accounts, search for non existing account, NO results will be returned.'); + Log::warning('Found zero accounts, search for non existing account, NO results will be returned.'); $this->collector->findNothing(); return; } if (0 === $accounts->count() && true === $prohibited) { - app('log')->debug('Found zero accounts, but the search is negated, so effectively we ignore the search parameter.'); + Log::debug('Found zero accounts, but the search is negated, so effectively we ignore the search parameter.'); return; } - app('log')->debug(sprintf('Found %d accounts, will filter.', $accounts->count())); + Log::debug(sprintf('Found %d accounts, will filter.', $accounts->count())); $filtered = $accounts->filter( static fn (Account $account) => $stringMethod(strtolower($account->name), strtolower($value)) ); if (0 === $filtered->count()) { - app('log')->debug('Left with zero accounts, so cannot find anything, NO results will be returned.'); + Log::warning('Left with zero accounts, so cannot find anything, NO results will be returned.'); $this->collector->findNothing(); return; } - app('log')->debug(sprintf('Left with %d, set as %s().', $filtered->count(), $collectorMethod)); + Log::debug(sprintf('Left with %d, set as %s().', $filtered->count(), $collectorMethod)); $this->collector->{$collectorMethod}($filtered); // @phpstan-ignore-line } @@ -2015,7 +2065,7 @@ class OperatorQuerySearch implements SearchInterface */ private function searchAccountNr(string $value, SearchDirection $searchDirection, StringPosition $stringPosition, bool $prohibited = false): void { - app('log')->debug(sprintf('searchAccountNr(%s, %d, %d)', $value, $searchDirection->name, $stringPosition->name)); + Log::debug(sprintf('searchAccountNr(%s, %d, %d)', $value, $searchDirection->name, $stringPosition->name)); // search direction (default): for source accounts $searchTypes = [AccountTypeEnum::ASSET->value, AccountTypeEnum::MORTGAGE->value, AccountTypeEnum::LOAN->value, AccountTypeEnum::DEBT->value, AccountTypeEnum::REVENUE->value]; @@ -2060,14 +2110,15 @@ class OperatorQuerySearch implements SearchInterface // search for accounts: $accounts = $this->accountRepository->searchAccountNr($value, $searchTypes, 1337); if (0 === $accounts->count()) { - app('log')->debug('Found zero accounts, search for invalid account.'); + Log::debug('Found zero accounts, search for invalid account.'); + Log::warning('Call to findNothing() from searchAccountNr().'); $this->collector->findNothing(); return; } // if found, do filter - app('log')->debug(sprintf('Found %d accounts, will filter.', $accounts->count())); + Log::debug(sprintf('Found %d accounts, will filter.', $accounts->count())); $filtered = $accounts->filter( static function (Account $account) use ($value, $stringMethod) { // either IBAN or account number @@ -2086,12 +2137,13 @@ class OperatorQuerySearch implements SearchInterface ); if (0 === $filtered->count()) { - app('log')->debug('Left with zero, search for invalid account'); + Log::debug('Left with zero, search for invalid account'); + Log::warning('Call to findNothing() from searchAccountNr().'); $this->collector->findNothing(); return; } - app('log')->debug(sprintf('Left with %d, set as %s().', $filtered->count(), $collectorMethod)); + Log::debug(sprintf('Left with %d, set as %s().', $filtered->count(), $collectorMethod)); $this->collector->{$collectorMethod}($filtered); // @phpstan-ignore-line } @@ -2128,7 +2180,7 @@ class OperatorQuerySearch implements SearchInterface try { $parsedDate = $parser->parseDate($value); } catch (FireflyException) { - app('log')->debug(sprintf('Could not parse date "%s", will return empty array.', $value)); + Log::debug(sprintf('Could not parse date "%s", will return empty array.', $value)); $this->invalidOperators[] = [ 'type' => $type, 'value' => $value, @@ -2162,7 +2214,7 @@ class OperatorQuerySearch implements SearchInterface case 'exact': if ($value instanceof Carbon) { - app('log')->debug(sprintf('Set date_is_exact value "%s"', $value->format('Y-m-d'))); + Log::debug(sprintf('Set date_is_exact value "%s"', $value->format('Y-m-d'))); $this->collector->setRange($value, $value); $this->operators->push(['type' => 'date_on', 'value' => $value->format('Y-m-d')]); } @@ -2179,7 +2231,7 @@ class OperatorQuerySearch implements SearchInterface case 'year': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_exact YEAR value "%s"', $value)); + Log::debug(sprintf('Set date_is_exact YEAR value "%s"', $value)); $this->collector->yearIs($value); $this->operators->push(['type' => 'date_on_year', 'value' => $value]); } @@ -2188,7 +2240,7 @@ class OperatorQuerySearch implements SearchInterface case 'year_not': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_exact_not YEAR value "%s"', $value)); + Log::debug(sprintf('Set date_is_exact_not YEAR value "%s"', $value)); $this->collector->yearIsNot($value); $this->operators->push(['type' => 'not_date_on_year', 'value' => $value]); } @@ -2197,7 +2249,7 @@ class OperatorQuerySearch implements SearchInterface case 'month': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_exact MONTH value "%s"', $value)); + Log::debug(sprintf('Set date_is_exact MONTH value "%s"', $value)); $this->collector->monthIs($value); $this->operators->push(['type' => 'date_on_month', 'value' => $value]); } @@ -2206,7 +2258,7 @@ class OperatorQuerySearch implements SearchInterface case 'month_not': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_exact not MONTH value "%s"', $value)); + Log::debug(sprintf('Set date_is_exact not MONTH value "%s"', $value)); $this->collector->monthIsNot($value); $this->operators->push(['type' => 'not_date_on_month', 'value' => $value]); } @@ -2215,7 +2267,7 @@ class OperatorQuerySearch implements SearchInterface case 'day': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_exact DAY value "%s"', $value)); + Log::debug(sprintf('Set date_is_exact DAY value "%s"', $value)); $this->collector->dayIs($value); $this->operators->push(['type' => 'date_on_day', 'value' => $value]); } @@ -2224,7 +2276,7 @@ class OperatorQuerySearch implements SearchInterface case 'day_not': if (is_string($value)) { - app('log')->debug(sprintf('Set not date_is_exact DAY value "%s"', $value)); + Log::debug(sprintf('Set not date_is_exact DAY value "%s"', $value)); $this->collector->dayIsNot($value); $this->operators->push(['type' => 'not_date_on_day', 'value' => $value]); } @@ -2262,7 +2314,7 @@ class OperatorQuerySearch implements SearchInterface case 'year': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_before YEAR value "%s"', $value)); + Log::debug(sprintf('Set date_is_before YEAR value "%s"', $value)); $this->collector->yearBefore($value); $this->operators->push(['type' => 'date_before_year', 'value' => $value]); } @@ -2271,7 +2323,7 @@ class OperatorQuerySearch implements SearchInterface case 'month': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_before MONTH value "%s"', $value)); + Log::debug(sprintf('Set date_is_before MONTH value "%s"', $value)); $this->collector->monthBefore($value); $this->operators->push(['type' => 'date_before_month', 'value' => $value]); } @@ -2280,7 +2332,7 @@ class OperatorQuerySearch implements SearchInterface case 'day': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_before DAY value "%s"', $value)); + Log::debug(sprintf('Set date_is_before DAY value "%s"', $value)); $this->collector->dayBefore($value); $this->operators->push(['type' => 'date_before_day', 'value' => $value]); } @@ -2318,7 +2370,7 @@ class OperatorQuerySearch implements SearchInterface case 'year': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_after YEAR value "%s"', $value)); + Log::debug(sprintf('Set date_is_after YEAR value "%s"', $value)); $this->collector->yearAfter($value); $this->operators->push(['type' => 'date_after_year', 'value' => $value]); } @@ -2327,7 +2379,7 @@ class OperatorQuerySearch implements SearchInterface case 'month': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_after MONTH value "%s"', $value)); + Log::debug(sprintf('Set date_is_after MONTH value "%s"', $value)); $this->collector->monthAfter($value); $this->operators->push(['type' => 'date_after_month', 'value' => $value]); } @@ -2336,7 +2388,7 @@ class OperatorQuerySearch implements SearchInterface case 'day': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_after DAY value "%s"', $value)); + Log::debug(sprintf('Set date_is_after DAY value "%s"', $value)); $this->collector->dayAfter($value); $this->operators->push(['type' => 'date_after_day', 'value' => $value]); } @@ -2353,7 +2405,7 @@ class OperatorQuerySearch implements SearchInterface */ private function setExactMetaDateParams(string $field, array $range, bool $prohibited = false): void { - app('log')->debug('Now in setExactMetaDateParams()'); + Log::debug('Now in setExactMetaDateParams()'); /** * @var string $key @@ -2368,7 +2420,7 @@ class OperatorQuerySearch implements SearchInterface case 'exact': if ($value instanceof Carbon) { - app('log')->debug(sprintf('Set %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); + Log::debug(sprintf('Set %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); $this->collector->setMetaDateRange($value, $value, $field); $this->operators->push(['type' => sprintf('%s_on', $field), 'value' => $value->format('Y-m-d')]); } @@ -2377,7 +2429,7 @@ class OperatorQuerySearch implements SearchInterface case 'exact_not': if ($value instanceof Carbon) { - app('log')->debug(sprintf('Set NOT %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); + Log::debug(sprintf('Set NOT %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); $this->collector->excludeMetaDateRange($value, $value, $field); $this->operators->push(['type' => sprintf('not_%s_on', $field), 'value' => $value->format('Y-m-d')]); } @@ -2386,7 +2438,7 @@ class OperatorQuerySearch implements SearchInterface case 'year': if (is_string($value)) { - app('log')->debug(sprintf('Set %s_is_exact YEAR value "%s"', $field, $value)); + Log::debug(sprintf('Set %s_is_exact YEAR value "%s"', $field, $value)); $this->collector->metaYearIs($value, $field); $this->operators->push(['type' => sprintf('%s_on_year', $field), 'value' => $value]); } @@ -2395,7 +2447,7 @@ class OperatorQuerySearch implements SearchInterface case 'year_not': if (is_string($value)) { - app('log')->debug(sprintf('Set NOT %s_is_exact YEAR value "%s"', $field, $value)); + Log::debug(sprintf('Set NOT %s_is_exact YEAR value "%s"', $field, $value)); $this->collector->metaYearIsNot($value, $field); $this->operators->push(['type' => sprintf('not_%s_on_year', $field), 'value' => $value]); } @@ -2404,7 +2456,7 @@ class OperatorQuerySearch implements SearchInterface case 'month': if (is_string($value)) { - app('log')->debug(sprintf('Set %s_is_exact MONTH value "%s"', $field, $value)); + Log::debug(sprintf('Set %s_is_exact MONTH value "%s"', $field, $value)); $this->collector->metaMonthIs($value, $field); $this->operators->push(['type' => sprintf('%s_on_month', $field), 'value' => $value]); } @@ -2413,7 +2465,7 @@ class OperatorQuerySearch implements SearchInterface case 'month_not': if (is_string($value)) { - app('log')->debug(sprintf('Set NOT %s_is_exact MONTH value "%s"', $field, $value)); + Log::debug(sprintf('Set NOT %s_is_exact MONTH value "%s"', $field, $value)); $this->collector->metaMonthIsNot($value, $field); $this->operators->push(['type' => sprintf('not_%s_on_month', $field), 'value' => $value]); } @@ -2422,7 +2474,7 @@ class OperatorQuerySearch implements SearchInterface case 'day': if (is_string($value)) { - app('log')->debug(sprintf('Set %s_is_exact DAY value "%s"', $field, $value)); + Log::debug(sprintf('Set %s_is_exact DAY value "%s"', $field, $value)); $this->collector->metaDayIs($value, $field); $this->operators->push(['type' => sprintf('%s_on_day', $field), 'value' => $value]); } @@ -2431,7 +2483,7 @@ class OperatorQuerySearch implements SearchInterface case 'day_not': if (is_string($value)) { - app('log')->debug(sprintf('Set NOT %s_is_exact DAY value "%s"', $field, $value)); + Log::debug(sprintf('Set NOT %s_is_exact DAY value "%s"', $field, $value)); $this->collector->metaDayIsNot($value, $field); $this->operators->push(['type' => sprintf('not_%s_on_day', $field), 'value' => $value]); } @@ -2469,7 +2521,7 @@ class OperatorQuerySearch implements SearchInterface case 'year': if (is_string($value)) { - app('log')->debug(sprintf('Set %s_is_before YEAR value "%s"', $field, $value)); + Log::debug(sprintf('Set %s_is_before YEAR value "%s"', $field, $value)); $this->collector->metaYearBefore($value, $field); $this->operators->push(['type' => sprintf('%s_before_year', $field), 'value' => $value]); } @@ -2478,7 +2530,7 @@ class OperatorQuerySearch implements SearchInterface case 'month': if (is_string($value)) { - app('log')->debug(sprintf('Set %s_is_before MONTH value "%s"', $field, $value)); + Log::debug(sprintf('Set %s_is_before MONTH value "%s"', $field, $value)); $this->collector->metaMonthBefore($value, $field); $this->operators->push(['type' => sprintf('%s_before_month', $field), 'value' => $value]); } @@ -2487,7 +2539,7 @@ class OperatorQuerySearch implements SearchInterface case 'day': if (is_string($value)) { - app('log')->debug(sprintf('Set %s_is_before DAY value "%s"', $field, $value)); + Log::debug(sprintf('Set %s_is_before DAY value "%s"', $field, $value)); $this->collector->metaDayBefore($value, $field); $this->operators->push(['type' => sprintf('%s_before_day', $field), 'value' => $value]); } @@ -2525,7 +2577,7 @@ class OperatorQuerySearch implements SearchInterface case 'year': if (is_string($value)) { - app('log')->debug(sprintf('Set %s_is_after YEAR value "%s"', $field, $value)); + Log::debug(sprintf('Set %s_is_after YEAR value "%s"', $field, $value)); $this->collector->metaYearAfter($value, $field); $this->operators->push(['type' => sprintf('%s_after_year', $field), 'value' => $value]); } @@ -2534,7 +2586,7 @@ class OperatorQuerySearch implements SearchInterface case 'month': if (is_string($value)) { - app('log')->debug(sprintf('Set %s_is_after MONTH value "%s"', $field, $value)); + Log::debug(sprintf('Set %s_is_after MONTH value "%s"', $field, $value)); $this->collector->metaMonthAfter($value, $field); $this->operators->push(['type' => sprintf('%s_after_month', $field), 'value' => $value]); } @@ -2543,7 +2595,7 @@ class OperatorQuerySearch implements SearchInterface case 'day': if (is_string($value)) { - app('log')->debug(sprintf('Set %s_is_after DAY value "%s"', $field, $value)); + Log::debug(sprintf('Set %s_is_after DAY value "%s"', $field, $value)); $this->collector->metaDayAfter($value, $field); $this->operators->push(['type' => sprintf('%s_after_day', $field), 'value' => $value]); } @@ -2573,7 +2625,7 @@ class OperatorQuerySearch implements SearchInterface case 'exact': if ($value instanceof Carbon) { - app('log')->debug(sprintf('Set %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); + Log::debug(sprintf('Set %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); $this->collector->setObjectRange($value, clone $value, $field); $this->operators->push(['type' => sprintf('%s_on', $field), 'value' => $value->format('Y-m-d')]); } @@ -2582,7 +2634,7 @@ class OperatorQuerySearch implements SearchInterface case 'exact_not': if ($value instanceof Carbon) { - app('log')->debug(sprintf('Set NOT %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); + Log::debug(sprintf('Set NOT %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); $this->collector->excludeObjectRange($value, clone $value, $field); $this->operators->push(['type' => sprintf('not_%s_on', $field), 'value' => $value->format('Y-m-d')]); } @@ -2591,7 +2643,7 @@ class OperatorQuerySearch implements SearchInterface case 'year': if (is_string($value)) { - app('log')->debug(sprintf('Set %s_is_exact YEAR value "%s"', $field, $value)); + Log::debug(sprintf('Set %s_is_exact YEAR value "%s"', $field, $value)); $this->collector->objectYearIs($value, $field); $this->operators->push(['type' => sprintf('%s_on_year', $field), 'value' => $value]); } @@ -2600,7 +2652,7 @@ class OperatorQuerySearch implements SearchInterface case 'year_not': if (is_string($value)) { - app('log')->debug(sprintf('Set NOT %s_is_exact YEAR value "%s"', $field, $value)); + Log::debug(sprintf('Set NOT %s_is_exact YEAR value "%s"', $field, $value)); $this->collector->objectYearIsNot($value, $field); $this->operators->push(['type' => sprintf('not_%s_on_year', $field), 'value' => $value]); } @@ -2609,7 +2661,7 @@ class OperatorQuerySearch implements SearchInterface case 'month': if (is_string($value)) { - app('log')->debug(sprintf('Set %s_is_exact MONTH value "%s"', $field, $value)); + Log::debug(sprintf('Set %s_is_exact MONTH value "%s"', $field, $value)); $this->collector->objectMonthIs($value, $field); $this->operators->push(['type' => sprintf('%s_on_month', $field), 'value' => $value]); } @@ -2618,7 +2670,7 @@ class OperatorQuerySearch implements SearchInterface case 'month_not': if (is_string($value)) { - app('log')->debug(sprintf('Set NOT %s_is_exact MONTH value "%s"', $field, $value)); + Log::debug(sprintf('Set NOT %s_is_exact MONTH value "%s"', $field, $value)); $this->collector->objectMonthIsNot($value, $field); $this->operators->push(['type' => sprintf('not_%s_on_month', $field), 'value' => $value]); } @@ -2627,7 +2679,7 @@ class OperatorQuerySearch implements SearchInterface case 'day': if (is_string($value)) { - app('log')->debug(sprintf('Set %s_is_exact DAY value "%s"', $field, $value)); + Log::debug(sprintf('Set %s_is_exact DAY value "%s"', $field, $value)); $this->collector->objectDayIs($value, $field); $this->operators->push(['type' => sprintf('%s_on_day', $field), 'value' => $value]); } @@ -2636,7 +2688,7 @@ class OperatorQuerySearch implements SearchInterface case 'day_not': if (is_string($value)) { - app('log')->debug(sprintf('Set NOT %s_is_exact DAY value "%s"', $field, $value)); + Log::debug(sprintf('Set NOT %s_is_exact DAY value "%s"', $field, $value)); $this->collector->objectDayIsNot($value, $field); $this->operators->push(['type' => sprintf('not_%s_on_day', $field), 'value' => $value]); } @@ -2674,7 +2726,7 @@ class OperatorQuerySearch implements SearchInterface case 'year': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_before YEAR value "%s"', $value)); + Log::debug(sprintf('Set date_is_before YEAR value "%s"', $value)); $this->collector->objectYearBefore($value, $field); $this->operators->push(['type' => sprintf('%s_before_year', $field), 'value' => $value]); } @@ -2683,7 +2735,7 @@ class OperatorQuerySearch implements SearchInterface case 'month': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_before MONTH value "%s"', $value)); + Log::debug(sprintf('Set date_is_before MONTH value "%s"', $value)); $this->collector->objectMonthBefore($value, $field); $this->operators->push(['type' => sprintf('%s_before_month', $field), 'value' => $value]); } @@ -2692,7 +2744,7 @@ class OperatorQuerySearch implements SearchInterface case 'day': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_before DAY value "%s"', $value)); + Log::debug(sprintf('Set date_is_before DAY value "%s"', $value)); $this->collector->objectDayBefore($value, $field); $this->operators->push(['type' => sprintf('%s_before_day', $field), 'value' => $value]); } @@ -2730,7 +2782,7 @@ class OperatorQuerySearch implements SearchInterface case 'year': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_after YEAR value "%s"', $value)); + Log::debug(sprintf('Set date_is_after YEAR value "%s"', $value)); $this->collector->objectYearAfter($value, $field); $this->operators->push(['type' => sprintf('%s_after_year', $field), 'value' => $value]); } @@ -2739,7 +2791,7 @@ class OperatorQuerySearch implements SearchInterface case 'month': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_after MONTH value "%s"', $value)); + Log::debug(sprintf('Set date_is_after MONTH value "%s"', $value)); $this->collector->objectMonthAfter($value, $field); $this->operators->push(['type' => sprintf('%s_after_month', $field), 'value' => $value]); } @@ -2748,7 +2800,7 @@ class OperatorQuerySearch implements SearchInterface case 'day': if (is_string($value)) { - app('log')->debug(sprintf('Set date_is_after DAY value "%s"', $value)); + Log::debug(sprintf('Set date_is_after DAY value "%s"', $value)); $this->collector->objectDayAfter($value, $field); $this->operators->push(['type' => sprintf('%s_after_day', $field), 'value' => $value]); } @@ -2784,29 +2836,29 @@ class OperatorQuerySearch implements SearchInterface private function parseTagInstructions(): void { - app('log')->debug('Now in parseTagInstructions()'); + Log::debug('Now in parseTagInstructions()'); // if exclude tags, remove excluded tags. if (count($this->excludeTags) > 0) { - app('log')->debug(sprintf('%d exclude tag(s)', count($this->excludeTags))); + Log::debug(sprintf('%d exclude tag(s)', count($this->excludeTags))); $collection = new Collection(); foreach ($this->excludeTags as $tagId) { $tag = $this->tagRepository->find($tagId); if (null !== $tag) { - app('log')->debug(sprintf('Exclude tag "%s"', $tag->tag)); + Log::debug(sprintf('Exclude tag "%s"', $tag->tag)); $collection->push($tag); } } - app('log')->debug(sprintf('Selecting all tags except %d excluded tag(s).', $collection->count())); + Log::debug(sprintf('Selecting all tags except %d excluded tag(s).', $collection->count())); $this->collector->setWithoutSpecificTags($collection); } // if include tags, include them: if (count($this->includeTags) > 0) { - app('log')->debug(sprintf('%d include tag(s)', count($this->includeTags))); + Log::debug(sprintf('%d include tag(s)', count($this->includeTags))); $collection = new Collection(); foreach ($this->includeTags as $tagId) { $tag = $this->tagRepository->find($tagId); if (null !== $tag) { - app('log')->debug(sprintf('Include tag "%s"', $tag->tag)); + Log::debug(sprintf('Include tag "%s"', $tag->tag)); $collection->push($tag); } } @@ -2814,12 +2866,12 @@ class OperatorQuerySearch implements SearchInterface } // if include ANY tags, include them: (see #8632) if (count($this->includeAnyTags) > 0) { - app('log')->debug(sprintf('%d include ANY tag(s)', count($this->includeAnyTags))); + Log::debug(sprintf('%d include ANY tag(s)', count($this->includeAnyTags))); $collection = new Collection(); foreach ($this->includeAnyTags as $tagId) { $tag = $this->tagRepository->find($tagId); if (null !== $tag) { - app('log')->debug(sprintf('Include ANY tag "%s"', $tag->tag)); + Log::debug(sprintf('Include ANY tag "%s"', $tag->tag)); $collection->push($tag); } } diff --git a/app/Transformers/TransactionGroupTransformer.php b/app/Transformers/TransactionGroupTransformer.php index 8685c0246a..8482360c6a 100644 --- a/app/Transformers/TransactionGroupTransformer.php +++ b/app/Transformers/TransactionGroupTransformer.php @@ -220,12 +220,12 @@ class TransactionGroupTransformer extends AbstractTransformer 'sepa_ci' => $transaction['meta']['sepa_ci'] ?? null, 'sepa_batch_id' => $transaction['meta']['sepa_batch_id'] ?? null, - 'interest_date' => $transaction['meta_date']['interest_date'] ?? null, - 'book_date' => $transaction['meta_date']['book_date'] ?? null, - 'process_date' => $transaction['meta_date']['process_date'] ?? null, - 'due_date' => $transaction['meta_date']['due_date'] ?? null, - 'payment_date' => $transaction['meta_date']['payment_date'] ?? null, - 'invoice_date' => $transaction['meta_date']['invoice_date'] ?? null, + 'interest_date' => array_key_exists('interest_date', $transaction['meta_date']) ? $transaction['meta_date']['interest_date']->toW3CString() : null, + 'book_date' => array_key_exists('book_date', $transaction['meta_date']) ? $transaction['meta_date']['book_date']->toW3CString() : null, + 'process_date' => array_key_exists('process_date', $transaction['meta_date']) ? $transaction['meta_date']['process_date']->toW3CString() : null, + 'due_date' => array_key_exists('due_date', $transaction['meta_date']) ? $transaction['meta_date']['due_date']->toW3CString() : null, + 'payment_date' => array_key_exists('payment_date', $transaction['meta_date']) ? $transaction['meta_date']['payment_date']->toW3CString() : null, + 'invoice_date' => array_key_exists('invoice_date', $transaction['meta_date']) ? $transaction['meta_date']['invoice_date']->toW3CString() : null, // location data 'longitude' => $transaction['location']['longitude'], 'latitude' => $transaction['location']['latitude'], diff --git a/changelog.md b/changelog.md index ea91d1cca9..1d2961848a 100644 --- a/changelog.md +++ b/changelog.md @@ -3,6 +3,21 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## 6.2.21 - 2025-07-18 + +### Added + +- Debug information to search engine. + +### Changed + +- Rename table field for postgres databases. + +### Fixed + +- [Issue 10581](https://github.com/firefly-iii/firefly-iii/issues/10581) (Epoch doesn't fit in a PHP integer error on 32-bit systems due to strict date validation) reported by @kksandr7 +- [Discussion 10601](https://github.com/orgs/firefly-iii/discussions/10601) (Edit a transaction will result in an incorrect date) started by @MasterZhang007 + ## 6.2.20 - 2025-07-02 ### Changed diff --git a/composer.lock b/composer.lock index d22080bff3..cf3d63f796 100644 --- a/composer.lock +++ b/composer.lock @@ -1879,16 +1879,16 @@ }, { "name": "laravel/framework", - "version": "v12.19.3", + "version": "v12.20.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "4e6ec689ef704bb4bd282f29d9dd658dfb4fb262" + "reference": "1b9a00f8caf5503c92aa436279172beae1a484ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/4e6ec689ef704bb4bd282f29d9dd658dfb4fb262", - "reference": "4e6ec689ef704bb4bd282f29d9dd658dfb4fb262", + "url": "https://api.github.com/repos/laravel/framework/zipball/1b9a00f8caf5503c92aa436279172beae1a484ff", + "reference": "1b9a00f8caf5503c92aa436279172beae1a484ff", "shasum": "" }, "require": { @@ -2090,7 +2090,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-06-18T12:56:23+00:00" + "time": "2025-07-08T15:02:21+00:00" }, { "name": "laravel/passport", @@ -2170,16 +2170,16 @@ }, { "name": "laravel/prompts", - "version": "v0.3.5", + "version": "v0.3.6", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1" + "reference": "86a8b692e8661d0fb308cec64f3d176821323077" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/57b8f7efe40333cdb925700891c7d7465325d3b1", - "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1", + "url": "https://api.github.com/repos/laravel/prompts/zipball/86a8b692e8661d0fb308cec64f3d176821323077", + "reference": "86a8b692e8661d0fb308cec64f3d176821323077", "shasum": "" }, "require": { @@ -2223,22 +2223,22 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.5" + "source": "https://github.com/laravel/prompts/tree/v0.3.6" }, - "time": "2025-02-11T13:34:40+00:00" + "time": "2025-07-07T14:17:42+00:00" }, { "name": "laravel/sanctum", - "version": "v4.1.1", + "version": "v4.1.2", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "a360a6a1fd2400ead4eb9b6a9c1bb272939194f5" + "reference": "e4c09e69aecd5a383e0c1b85a6bb501c997d7491" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/a360a6a1fd2400ead4eb9b6a9c1bb272939194f5", - "reference": "a360a6a1fd2400ead4eb9b6a9c1bb272939194f5", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/e4c09e69aecd5a383e0c1b85a6bb501c997d7491", + "reference": "e4c09e69aecd5a383e0c1b85a6bb501c997d7491", "shasum": "" }, "require": { @@ -2289,7 +2289,7 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2025-04-23T13:03:38+00:00" + "time": "2025-07-01T15:49:32+00:00" }, { "name": "laravel/serializable-closure", @@ -2354,16 +2354,16 @@ }, { "name": "laravel/slack-notification-channel", - "version": "v3.5.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/laravel/slack-notification-channel.git", - "reference": "b9448136c2e93f51f0d603d05d6bf64412e5727c" + "reference": "642677a57490eebccb7e9fb666f5a5379c6e3459" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/b9448136c2e93f51f0d603d05d6bf64412e5727c", - "reference": "b9448136c2e93f51f0d603d05d6bf64412e5727c", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/642677a57490eebccb7e9fb666f5a5379c6e3459", + "reference": "642677a57490eebccb7e9fb666f5a5379c6e3459", "shasum": "" }, "require": { @@ -2413,9 +2413,9 @@ ], "support": { "issues": "https://github.com/laravel/slack-notification-channel/issues", - "source": "https://github.com/laravel/slack-notification-channel/tree/v3.5.0" + "source": "https://github.com/laravel/slack-notification-channel/tree/v3.6.0" }, - "time": "2025-02-23T14:43:55+00:00" + "time": "2025-06-26T16:51:38+00:00" }, { "name": "laravel/ui", @@ -10708,16 +10708,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.13.1", + "version": "1.13.3", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" + "reference": "faed855a7b5f4d4637717c2b3863e277116beb36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", - "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/faed855a7b5f4d4637717c2b3863e277116beb36", + "reference": "faed855a7b5f4d4637717c2b3863e277116beb36", "shasum": "" }, "require": { @@ -10756,7 +10756,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.3" }, "funding": [ { @@ -10764,7 +10764,7 @@ "type": "tidelift" } ], - "time": "2025-04-29T12:36:36+00:00" + "time": "2025-07-05T12:25:42+00:00" }, { "name": "nikic/php-parser", @@ -11549,16 +11549,16 @@ }, { "name": "phpunit/phpunit", - "version": "12.2.5", + "version": "12.2.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "b71849b29f7a8d7574e4401873cb8b539896613f" + "reference": "8b1348b254e5959acaf1539c6bd790515fb49414" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b71849b29f7a8d7574e4401873cb8b539896613f", - "reference": "b71849b29f7a8d7574e4401873cb8b539896613f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8b1348b254e5959acaf1539c6bd790515fb49414", + "reference": "8b1348b254e5959acaf1539c6bd790515fb49414", "shasum": "" }, "require": { @@ -11568,7 +11568,7 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.1", + "myclabs/deep-copy": "^1.13.3", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.3", @@ -11626,7 +11626,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/12.2.5" + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.2.7" }, "funding": [ { @@ -11650,20 +11650,20 @@ "type": "tidelift" } ], - "time": "2025-06-27T04:37:55+00:00" + "time": "2025-07-11T04:11:13+00:00" }, { "name": "rector/rector", - "version": "2.1.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "d513dea45a94394b660e15c155d1fa27826f8e30" + "reference": "d0917c069bb0d9bb06ed111cf052510f609015a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/d513dea45a94394b660e15c155d1fa27826f8e30", - "reference": "d513dea45a94394b660e15c155d1fa27826f8e30", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/d0917c069bb0d9bb06ed111cf052510f609015a4", + "reference": "d0917c069bb0d9bb06ed111cf052510f609015a4", "shasum": "" }, "require": { @@ -11702,7 +11702,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.1.0" + "source": "https://github.com/rectorphp/rector/tree/2.1.1" }, "funding": [ { @@ -11710,7 +11710,7 @@ "type": "github" } ], - "time": "2025-06-24T20:26:57+00:00" + "time": "2025-07-10T11:31:31+00:00" }, { "name": "sebastian/cli-parser", diff --git a/config/firefly.php b/config/firefly.php index 8e5a06c280..dc8e055249 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -78,9 +78,10 @@ return [ 'running_balance_column' => env('USE_RUNNING_BALANCE', false), // see cer.php for exchange rates feature flag. ], - 'version' => '6.2.20', + 'version' => '6.2.21', + 'build_time' => 1752727463, 'api_version' => '2.1.0', // field is no longer used. - 'db_version' => 25, + 'db_version' => 26, // generic settings 'maxUploadSize' => 1073741824, // 1 GB diff --git a/database/migrations/2025_07_10_065736_rename_tag_mode.php b/database/migrations/2025_07_10_065736_rename_tag_mode.php new file mode 100644 index 0000000000..26efd17a93 --- /dev/null +++ b/database/migrations/2025_07_10_065736_rename_tag_mode.php @@ -0,0 +1,47 @@ +renameColumn('tagMode', 'tag_mode'); + } + }); + // lower case just in case (haha) + Schema::table('tags', static function (Blueprint $table): void { + if (Schema::hasColumn('tags', 'tagmode') && !Schema::hasColumn('piggy_banks', 'tag_mode')) { + $table->renameColumn('tagmode', 'tag_mode'); + } + }); + } catch (RuntimeException $e) { + Log::error(sprintf('Could not rename column: %s', $e->getMessage())); + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + try { + Schema::table('tags', static function (Blueprint $table): void { + if (Schema::hasColumn('tags', 'tag_mode') && !Schema::hasColumn('piggy_banks', 'tagMode')) { + $table->renameColumn('tag_mode', 'tagMode'); + } + }); + } catch (RuntimeException $e) { + Log::error(sprintf('Could not rename column: %s', $e->getMessage())); + } + } +}; diff --git a/package-lock.json b/package-lock.json index cac46c29d4..21b0575400 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,9 +43,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.7.tgz", - "integrity": "sha512-xgu/ySj2mTiUFmdE9yCMfBxLp4DHd5DwmbbD05YAuICfodYT3VvRxbrh81LGQ/8UpSdtMdfKMn3KouYDX59DGQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", "dev": true, "license": "MIT", "engines": { @@ -53,22 +53,22 @@ } }, "node_modules/@babel/core": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.7.tgz", - "integrity": "sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.5", + "@babel/generator": "^7.28.0", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", "@babel/helpers": "^7.27.6", - "@babel/parser": "^7.27.7", + "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.7", - "@babel/types": "^7.27.7", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -94,16 +94,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", - "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.5", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -227,6 +227,16 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", @@ -406,13 +416,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.7.tgz", - "integrity": "sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.7" + "@babel/types": "^7.28.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -631,15 +641,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", - "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -683,9 +693,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.5.tgz", - "integrity": "sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", + "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -733,18 +743,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.7.tgz", - "integrity": "sha512-CuLkokN1PEZ0Fsjtq+001aog/C2drDK9nTfK/NRK0n6rBin6cBrvM+zfQjDE+UllhR6/J4a6w8Xq9i4yi3mQrw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz", + "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.27.7", - "globals": "^11.1.0" + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -771,14 +781,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.7.tgz", - "integrity": "sha512-pg3ZLdIKWCP0CrJm0O4jYjVthyBeioVfvz9nwt6o5paUxsgJ/8GucSMAIaj6M7xA4WY+SrvtGu2LijzkdyecWQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", + "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.7" + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -853,6 +863,23 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", @@ -1120,17 +1147,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.7.tgz", - "integrity": "sha512-201B1kFTWhckclcXpWHc8uUpYziDX/Pl4rxl0ZX0DiCZ3jknwfSUALL3QCYeeXXB37yWxJbo+g+Vfq8pAaHi3w==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", + "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.7", + "@babel/plugin-transform-destructuring": "^7.28.0", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.27.7" + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -1257,9 +1284,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.5.tgz", - "integrity": "sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz", + "integrity": "sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -1306,17 +1333,17 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.4.tgz", - "integrity": "sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.0.tgz", + "integrity": "sha512-dGopk9nZrtCs2+nfIem25UuHyt5moSJamArzIoh9/vezUQPmYDOzjaHDCkAzuGJibCIkPup8rMT2+wYB6S73cA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "engines": { @@ -1485,13 +1512,13 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", - "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.0.tgz", + "integrity": "sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.0", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", @@ -1505,19 +1532,20 @@ "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", "@babel/plugin-transform-async-to-generator": "^7.27.1", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", "@babel/plugin-transform-class-properties": "^7.27.1", "@babel/plugin-transform-class-static-block": "^7.27.1", - "@babel/plugin-transform-classes": "^7.27.1", + "@babel/plugin-transform-classes": "^7.28.0", "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", "@babel/plugin-transform-dotall-regex": "^7.27.1", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", "@babel/plugin-transform-exponentiation-operator": "^7.27.1", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", @@ -1534,15 +1562,15 @@ "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.27.2", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.27.1", "@babel/plugin-transform-optional-chaining": "^7.27.1", - "@babel/plugin-transform-parameters": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", "@babel/plugin-transform-private-methods": "^7.27.1", "@babel/plugin-transform-private-property-in-object": "^7.27.1", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.0", "@babel/plugin-transform-regexp-modifiers": "^7.27.1", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", @@ -1555,10 +1583,10 @@ "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", "semver": "^6.3.1" }, "engines": { @@ -1618,28 +1646,28 @@ } }, "node_modules/@babel/traverse": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.7.tgz", - "integrity": "sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.5", - "@babel/parser": "^7.27.7", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", - "@babel/types": "^7.27.7", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/types": "^7.28.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.7.tgz", - "integrity": "sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", + "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1672,9 +1700,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz", + "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==", "cpu": [ "ppc64" ], @@ -1689,9 +1717,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz", + "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==", "cpu": [ "arm" ], @@ -1706,9 +1734,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz", + "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==", "cpu": [ "arm64" ], @@ -1723,9 +1751,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz", + "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==", "cpu": [ "x64" ], @@ -1740,9 +1768,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz", + "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==", "cpu": [ "arm64" ], @@ -1757,9 +1785,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz", + "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==", "cpu": [ "x64" ], @@ -1774,9 +1802,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz", + "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==", "cpu": [ "arm64" ], @@ -1791,9 +1819,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz", + "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==", "cpu": [ "x64" ], @@ -1808,9 +1836,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz", + "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==", "cpu": [ "arm" ], @@ -1825,9 +1853,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz", + "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==", "cpu": [ "arm64" ], @@ -1842,9 +1870,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz", + "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==", "cpu": [ "ia32" ], @@ -1859,9 +1887,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz", + "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==", "cpu": [ "loong64" ], @@ -1876,9 +1904,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz", + "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==", "cpu": [ "mips64el" ], @@ -1893,9 +1921,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz", + "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==", "cpu": [ "ppc64" ], @@ -1910,9 +1938,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz", + "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==", "cpu": [ "riscv64" ], @@ -1927,9 +1955,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz", + "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==", "cpu": [ "s390x" ], @@ -1944,9 +1972,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz", + "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==", "cpu": [ "x64" ], @@ -1961,9 +1989,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz", + "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==", "cpu": [ "arm64" ], @@ -1978,9 +2006,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz", + "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==", "cpu": [ "x64" ], @@ -1995,9 +2023,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz", + "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==", "cpu": [ "arm64" ], @@ -2012,9 +2040,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz", + "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==", "cpu": [ "x64" ], @@ -2028,10 +2056,27 @@ "node": ">=18" } }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz", + "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz", + "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==", "cpu": [ "x64" ], @@ -2046,9 +2091,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz", + "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==", "cpu": [ "arm64" ], @@ -2063,9 +2108,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz", + "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==", "cpu": [ "ia32" ], @@ -2080,9 +2125,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz", + "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==", "cpu": [ "x64" ], @@ -2540,9 +2585,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.1.tgz", - "integrity": "sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", + "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", "cpu": [ "arm" ], @@ -2554,9 +2599,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.1.tgz", - "integrity": "sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", + "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", "cpu": [ "arm64" ], @@ -2568,9 +2613,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.1.tgz", - "integrity": "sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", + "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", "cpu": [ "arm64" ], @@ -2582,9 +2627,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.1.tgz", - "integrity": "sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", + "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", "cpu": [ "x64" ], @@ -2596,9 +2641,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.1.tgz", - "integrity": "sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", + "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", "cpu": [ "arm64" ], @@ -2610,9 +2655,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.1.tgz", - "integrity": "sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", + "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", "cpu": [ "x64" ], @@ -2624,9 +2669,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.1.tgz", - "integrity": "sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", + "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", "cpu": [ "arm" ], @@ -2638,9 +2683,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.1.tgz", - "integrity": "sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", + "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", "cpu": [ "arm" ], @@ -2652,9 +2697,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.1.tgz", - "integrity": "sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", + "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", "cpu": [ "arm64" ], @@ -2666,9 +2711,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.1.tgz", - "integrity": "sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", + "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", "cpu": [ "arm64" ], @@ -2680,9 +2725,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.1.tgz", - "integrity": "sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", + "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", "cpu": [ "loong64" ], @@ -2694,9 +2739,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.1.tgz", - "integrity": "sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", + "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", "cpu": [ "ppc64" ], @@ -2708,9 +2753,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.1.tgz", - "integrity": "sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", + "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", "cpu": [ "riscv64" ], @@ -2722,9 +2767,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.1.tgz", - "integrity": "sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", + "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", "cpu": [ "riscv64" ], @@ -2736,9 +2781,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.1.tgz", - "integrity": "sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", + "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", "cpu": [ "s390x" ], @@ -2750,9 +2795,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.1.tgz", - "integrity": "sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", + "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", "cpu": [ "x64" ], @@ -2764,9 +2809,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.1.tgz", - "integrity": "sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", + "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", "cpu": [ "x64" ], @@ -2778,9 +2823,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.1.tgz", - "integrity": "sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", + "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", "cpu": [ "arm64" ], @@ -2792,9 +2837,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.1.tgz", - "integrity": "sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", + "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", "cpu": [ "ia32" ], @@ -2806,9 +2851,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.1.tgz", - "integrity": "sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", + "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", "cpu": [ "x64" ], @@ -2970,9 +3015,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz", + "integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3096,9 +3141,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.10.tgz", - "integrity": "sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==", + "version": "24.0.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.14.tgz", + "integrity": "sha512-4zXMWD91vBLGRtHK3YbIoFMia+1nqEz72coM42C5ETjnNCa/heoj7NT1G67iAfOqMmcfhuCZ4uNpyz8EjlAejw==", "dev": true, "license": "MIT", "dependencies": { @@ -3106,9 +3151,9 @@ } }, "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "version": "1.3.13", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.13.tgz", + "integrity": "sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww==", "dev": true, "license": "MIT", "dependencies": { @@ -3600,10 +3645,23 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/admin-lte": { - "version": "4.0.0-rc3", - "resolved": "https://registry.npmjs.org/admin-lte/-/admin-lte-4.0.0-rc3.tgz", - "integrity": "sha512-BKEGJknLiNW/l++6tjO9YIy2x6il4y/S977cSaRfi+wadZF3xe7U+vDR8q2H99CVC49VmPqRwb36hiyEVmBQTw==", + "version": "4.0.0-rc4", + "resolved": "https://registry.npmjs.org/admin-lte/-/admin-lte-4.0.0-rc4.tgz", + "integrity": "sha512-k+ILDKHO6Tn77nMqvQ+wmQoes0Eky/s23jp2P07nUbbILk+7RMnLkCW2jFgiXaO9eFQ2fhmes0LAXJmQbdfpjA==", "license": "MIT" }, "node_modules/ajv": { @@ -3930,14 +3988,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -4421,9 +4479,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001726", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz", - "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==", + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", "dev": true, "funding": [ { @@ -4865,13 +4923,13 @@ "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.43.0.tgz", - "integrity": "sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==", + "version": "3.44.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz", + "integrity": "sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.25.0" + "browserslist": "^4.25.1" }, "funding": { "type": "opencollective", @@ -5636,9 +5694,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.178", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.178.tgz", - "integrity": "sha512-wObbz/ar3Bc6e4X5vf0iO8xTN8YAjN/tgiAOJLr7yjYFtP9wAjq8Mb5h0yn6kResir+VYx2DXBj9NNobs0ETSA==", + "version": "1.5.186", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.186.tgz", + "integrity": "sha512-lur7L4BFklgepaJxj4DqPk7vKbTEl0pajNlg2QjE5shefmlmBLm2HvQ7PMf1R/GvlevT/581cop33/quQcfX3A==", "dev": true, "license": "ISC" }, @@ -5799,9 +5857,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz", + "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5812,31 +5870,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.5", - "@esbuild/android-arm": "0.25.5", - "@esbuild/android-arm64": "0.25.5", - "@esbuild/android-x64": "0.25.5", - "@esbuild/darwin-arm64": "0.25.5", - "@esbuild/darwin-x64": "0.25.5", - "@esbuild/freebsd-arm64": "0.25.5", - "@esbuild/freebsd-x64": "0.25.5", - "@esbuild/linux-arm": "0.25.5", - "@esbuild/linux-arm64": "0.25.5", - "@esbuild/linux-ia32": "0.25.5", - "@esbuild/linux-loong64": "0.25.5", - "@esbuild/linux-mips64el": "0.25.5", - "@esbuild/linux-ppc64": "0.25.5", - "@esbuild/linux-riscv64": "0.25.5", - "@esbuild/linux-s390x": "0.25.5", - "@esbuild/linux-x64": "0.25.5", - "@esbuild/netbsd-arm64": "0.25.5", - "@esbuild/netbsd-x64": "0.25.5", - "@esbuild/openbsd-arm64": "0.25.5", - "@esbuild/openbsd-x64": "0.25.5", - "@esbuild/sunos-x64": "0.25.5", - "@esbuild/win32-arm64": "0.25.5", - "@esbuild/win32-ia32": "0.25.5", - "@esbuild/win32-x64": "0.25.5" + "@esbuild/aix-ppc64": "0.25.6", + "@esbuild/android-arm": "0.25.6", + "@esbuild/android-arm64": "0.25.6", + "@esbuild/android-x64": "0.25.6", + "@esbuild/darwin-arm64": "0.25.6", + "@esbuild/darwin-x64": "0.25.6", + "@esbuild/freebsd-arm64": "0.25.6", + "@esbuild/freebsd-x64": "0.25.6", + "@esbuild/linux-arm": "0.25.6", + "@esbuild/linux-arm64": "0.25.6", + "@esbuild/linux-ia32": "0.25.6", + "@esbuild/linux-loong64": "0.25.6", + "@esbuild/linux-mips64el": "0.25.6", + "@esbuild/linux-ppc64": "0.25.6", + "@esbuild/linux-riscv64": "0.25.6", + "@esbuild/linux-s390x": "0.25.6", + "@esbuild/linux-x64": "0.25.6", + "@esbuild/netbsd-arm64": "0.25.6", + "@esbuild/netbsd-x64": "0.25.6", + "@esbuild/openbsd-arm64": "0.25.6", + "@esbuild/openbsd-x64": "0.25.6", + "@esbuild/openharmony-arm64": "0.25.6", + "@esbuild/sunos-x64": "0.25.6", + "@esbuild/win32-arm64": "0.25.6", + "@esbuild/win32-ia32": "0.25.6", + "@esbuild/win32-x64": "0.25.6" } }, "node_modules/escalade": { @@ -6560,16 +6619,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/globby": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", @@ -6997,9 +7046,9 @@ } }, "node_modules/i18next": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.3.0.tgz", - "integrity": "sha512-ZSQIiNGfqSG6yoLHaCvrkPp16UejHI8PCDxFYaNG/1qxtmqNmqEg4JlWKlxkrUmrin2sEjsy+Mjy1TRozBhOgw==", + "version": "25.3.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.3.2.tgz", + "integrity": "sha512-JSnbZDxRVbphc5jiptxr3o2zocy5dEqpVm9qCGdJwRNO+9saUJS0/u4LnM/13C23fUEWxAylPqKU/NpMV/IjqA==", "funding": [ { "type": "individual", @@ -7763,9 +7812,9 @@ } }, "node_modules/laravel-vite-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.3.0.tgz", - "integrity": "sha512-P5qyG56YbYxM8OuYmK2OkhcKe0AksNVJUjq9LUZ5tOekU9fBn9LujYyctI4t9XoLjuMvHJXXpCoPntY1oKltuA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-2.0.0.tgz", + "integrity": "sha512-pnaKHInJgiWpG/g+LmaISHl7D/1s5wnOXnrGiBdt4NOs+tYZRw0v/ZANELGX2/dGgHyEzO+iZ6x4idpoK04z/Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7776,10 +7825,10 @@ "clean-orphaned-assets": "bin/clean.js" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^20.19.0 || >=22.12.0" }, "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0" + "vite": "^7.0.0" } }, "node_modules/launch-editor": { @@ -10068,9 +10117,9 @@ } }, "node_modules/rollup": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.1.tgz", - "integrity": "sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", + "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", "dev": true, "license": "MIT", "dependencies": { @@ -10084,26 +10133,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.44.1", - "@rollup/rollup-android-arm64": "4.44.1", - "@rollup/rollup-darwin-arm64": "4.44.1", - "@rollup/rollup-darwin-x64": "4.44.1", - "@rollup/rollup-freebsd-arm64": "4.44.1", - "@rollup/rollup-freebsd-x64": "4.44.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.44.1", - "@rollup/rollup-linux-arm-musleabihf": "4.44.1", - "@rollup/rollup-linux-arm64-gnu": "4.44.1", - "@rollup/rollup-linux-arm64-musl": "4.44.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.44.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.44.1", - "@rollup/rollup-linux-riscv64-gnu": "4.44.1", - "@rollup/rollup-linux-riscv64-musl": "4.44.1", - "@rollup/rollup-linux-s390x-gnu": "4.44.1", - "@rollup/rollup-linux-x64-gnu": "4.44.1", - "@rollup/rollup-linux-x64-musl": "4.44.1", - "@rollup/rollup-win32-arm64-msvc": "4.44.1", - "@rollup/rollup-win32-ia32-msvc": "4.44.1", - "@rollup/rollup-win32-x64-msvc": "4.44.1", + "@rollup/rollup-android-arm-eabi": "4.45.1", + "@rollup/rollup-android-arm64": "4.45.1", + "@rollup/rollup-darwin-arm64": "4.45.1", + "@rollup/rollup-darwin-x64": "4.45.1", + "@rollup/rollup-freebsd-arm64": "4.45.1", + "@rollup/rollup-freebsd-x64": "4.45.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", + "@rollup/rollup-linux-arm-musleabihf": "4.45.1", + "@rollup/rollup-linux-arm64-gnu": "4.45.1", + "@rollup/rollup-linux-arm64-musl": "4.45.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-musl": "4.45.1", + "@rollup/rollup-linux-s390x-gnu": "4.45.1", + "@rollup/rollup-linux-x64-gnu": "4.45.1", + "@rollup/rollup-linux-x64-musl": "4.45.1", + "@rollup/rollup-win32-arm64-msvc": "4.45.1", + "@rollup/rollup-win32-ia32-msvc": "4.45.1", + "@rollup/rollup-win32-x64-msvc": "4.45.1", "fsevents": "~2.3.2" } }, @@ -11130,9 +11179,9 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -11469,24 +11518,24 @@ } }, "node_modules/vite": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", - "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.5.tgz", + "integrity": "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", - "fdir": "^6.4.4", + "fdir": "^6.4.6", "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -11495,14 +11544,14 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", - "less": "*", + "less": "^4.0.0", "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" @@ -11577,9 +11626,9 @@ } }, "node_modules/vite/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -11789,22 +11838,23 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.99.9", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", - "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", + "version": "5.100.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.2.tgz", + "integrity": "sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==", "dev": true, "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", + "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", + "enhanced-resolve": "^5.17.2", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -11818,7 +11868,7 @@ "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -12471,7 +12521,7 @@ "dependencies": { "@fortawesome/fontawesome-free": "^6.4.0", "@popperjs/core": "^2.11.8", - "admin-lte": "^4.0.0-beta3", + "admin-lte": "^4.0.0-rc4", "alpinejs": "^3.13.7", "bootstrap": "^5", "bootstrap5-autocomplete": "^1", @@ -12489,10 +12539,10 @@ }, "devDependencies": { "axios": "^1", - "laravel-vite-plugin": "^1", + "laravel-vite-plugin": "^2", "patch-package": "^8", "sass": "^1", - "vite": "^6", + "vite": "^7", "vite-plugin-manifest-sri": "^0.2.0" } } diff --git a/patches/admin-lte+4.0.0-beta3.patch b/patches/admin-lte+4.0.0-rc4.patch similarity index 100% rename from patches/admin-lte+4.0.0-beta3.patch rename to patches/admin-lte+4.0.0-rc4.patch diff --git a/resources/assets/v1/src/locales/ca.json b/resources/assets/v1/src/locales/ca.json index e4bc5e6740..4dde0ac977 100644 --- a/resources/assets/v1/src/locales/ca.json +++ b/resources/assets/v1/src/locales/ca.json @@ -4,7 +4,7 @@ "administrations_index_menu": "Administracions financeres", "expires_at": "Caduca a les", "temp_administrations_introduction": "Firefly III aviat podr\u00e0 gestionar diverses administracions financeres. Ara mateix, nom\u00e9s en teniu una. Podeu definir el t\u00edtol d'aquesta administraci\u00f3 i la seva moneda nativa. Aix\u00f2 substitueix la configuraci\u00f3 anterior on definiu la vostra \"moneda predeterminada\". Aquesta configuraci\u00f3 ara est\u00e0 vinculada a l'administraci\u00f3 financera i pot ser diferent per a cada administraci\u00f3.", - "administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.", + "administration_currency_form_help": "La p\u00e0gina pot trigar molt a carregar-se si canvieu la moneda nativa, ja que pot ser que la transacci\u00f3 s'hagi de convertir a la vostra (nova) moneda nativa.", "administrations_page_edit_sub_title_js": "Edita l'administraci\u00f3 financera \"{title}\"", "table": "Taula", "welcome_back": "Qu\u00e8 est\u00e0 passant?", @@ -16,10 +16,10 @@ "select_source_account": "Per favor, selecciona o escriu un nom de compte d'origen v\u00e0lid", "split_transaction_title": "Descripci\u00f3 de la transacci\u00f3 dividida", "errors_submission": "Hi ha hagut un error amb el teu enviament. Per favor, revisa els errors de sota.", - "is_reconciled": "Is reconciled", + "is_reconciled": "Est\u00e0 reconciliat", "split": "Dividir", "single_split": "Divisi\u00f3", - "not_enough_currencies": "Not enough currencies", + "not_enough_currencies": "No hi ha prou monedes", "not_enough_currencies_enabled": "Si tens nom\u00e9s una divisa habilitada, no cal afegir tipus de canvi.", "transaction_stored_link": "La Transacci\u00f3 #{ID} (\"{title}\")<\/a> s'ha desat.", "webhook_stored_link": "S'ha desat el Webook #{ID} (\"{title}\")<\/a> correctament.", @@ -43,7 +43,7 @@ "submit": "Enviar", "amount": "Import", "date": "Data", - "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s) unless you remove the reconciliation flag.", + "is_reconciled_fields_dropped": "Com que aquesta transacci\u00f3 est\u00e0 reconciliada, no podreu actualitzar els comptes ni l'import o imports tret que elimineu el senyalador de reconciliaci\u00f3.", "tags": "Etiquetes", "no_budget": "(cap pressupost)", "no_bill": "(cap subscripci\u00f3)", @@ -141,9 +141,9 @@ "visit_webhook_url": "Visitar l'URL del webhook", "reset_webhook_secret": "Reiniciar el secret del webhook", "header_exchange_rates": "Tipus de canvi", - "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in the documentation<\/a>.", + "exchange_rates_intro": "Firefly III permet descarregar i utilitzar tipus de canvi. M\u00e9s informaci\u00f3 sobre aix\u00f2 a la documentaci\u00f3<\/a>.", "exchange_rates_from_to": "Entre {from} i {to} (i a la inversa)", - "exchange_rates_intro_rates": "Firefly III uses the following exchange rates. The inverse is automatically calculated when it is not provided. If no exchange rate exists for the date of the transaction, Firefly III will go back in time to find one. If none are present, the rate \"1\" will be used.", + "exchange_rates_intro_rates": "Firefly III utilitza els tipus de canvi seg\u00fcents. L'invers es calcula autom\u00e0ticament quan no es proporciona. Si no existeix cap tipus de canvi per a la data de la transacci\u00f3, Firefly III tornar\u00e0 enrere en el temps per trobar-ne un. Si no n'hi ha cap, s'utilitzar\u00e0 el tipus \"1\".", "header_exchange_rates_rates": "Tipus de canvi", "header_exchange_rates_table": "Taula amb els tipus de canvi", "help_rate_form": "El dia d'avui, quants {to} obtindr\u00e0s amb un {from}?", diff --git a/resources/assets/v1/src/locales/cs.json b/resources/assets/v1/src/locales/cs.json index 12673a2cca..a41a7bce8b 100644 --- a/resources/assets/v1/src/locales/cs.json +++ b/resources/assets/v1/src/locales/cs.json @@ -40,13 +40,13 @@ "stored_journal": "\u00dasp\u011b\u0161n\u011b vytvo\u0159ena nov\u00e1 transakce \u201e:description\u201c", "create_another": "Po ulo\u017een\u00ed se vr\u00e1tit sem pro vytvo\u0159en\u00ed dal\u0161\u00ed.", "reset_after": "Po odesl\u00e1n\u00ed vymazat obsah formul\u00e1\u0159e", - "submit": "Odeslat", + "submit": "Potvrdit", "amount": "\u010c\u00e1stka", "date": "Datum", "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s) unless you remove the reconciliation flag.", "tags": "\u0160t\u00edtky", "no_budget": "(\u017e\u00e1dn\u00fd rozpo\u010det)", - "no_bill": "(no subscription)", + "no_bill": "(bez pravideln\u00e9 platby)", "category": "Kategorie", "attachments": "P\u0159\u00edlohy", "notes": "Pozn\u00e1mky", @@ -62,7 +62,7 @@ "destination_account_reconciliation": "C\u00edlov\u00fd \u00fa\u010det odsouhlasen\u00e9 transakce nelze upravit.", "source_account_reconciliation": "Nem\u016f\u017eete upravovat zdrojov\u00fd \u00fa\u010det srovn\u00e1vac\u00ed transakce.", "budget": "Rozpo\u010det", - "bill": "Subscription", + "bill": "Pravideln\u00e1 platba", "you_create_withdrawal": "Vytv\u00e1\u0159\u00edte v\u00fdb\u011br.", "you_create_transfer": "Vytv\u00e1\u0159\u00edte p\u0159evod.", "you_create_deposit": "Vytv\u00e1\u0159\u00edte vklad.", @@ -72,7 +72,7 @@ "profile_whoops": "Omlouv\u00e1me se, tohle n\u011bjak nefunguje", "profile_something_wrong": "Something went wrong!", "profile_try_again": "Something went wrong. Please try again.", - "profile_oauth_clients": "OAuth Clients", + "profile_oauth_clients": "Klienti OAuth", "profile_oauth_no_clients": "Zat\u00edm jste nevytvo\u0159ili OAuth klienty.", "profile_oauth_clients_header": "Klienti", "profile_oauth_client_id": "ID z\u00e1kazn\u00edka", @@ -123,7 +123,7 @@ "create_new_webhook": "Vytvo\u0159it nov\u00fd webhook", "webhooks": "Webhooky", "webhook_trigger_form_help": "Ur\u010dit, na kterou ud\u00e1lost se spust\u00ed webhook", - "webhook_response_form_help": "Ur\u010dit, co mus\u00ed webhook odeslat do URL.", + "webhook_response_form_help": "Ur\u010dete, co mus\u00ed webhook odeslat do URL.", "webhook_delivery_form_help": "V jak\u00e9m form\u00e1tu mus\u00ed webhook pos\u00edlat data.", "webhook_active_form_help": "Webhook mus\u00ed b\u00fdt aktivn\u00ed, nebo nebude zavol\u00e1n.", "edit_webhook_js": "Upravit webhook \"{title}\"", diff --git a/resources/assets/v1/src/locales/es.json b/resources/assets/v1/src/locales/es.json index f95567a221..36d25d130a 100644 --- a/resources/assets/v1/src/locales/es.json +++ b/resources/assets/v1/src/locales/es.json @@ -1,11 +1,11 @@ { "firefly": { - "administrations_page_title": "Financial administrations", - "administrations_index_menu": "Financial administrations", - "expires_at": "Expires at", - "temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.", - "administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.", - "administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"", + "administrations_page_title": "Administraciones financieras", + "administrations_index_menu": "Administraciones financieras", + "expires_at": "Expira el", + "temp_administrations_introduction": "Firefly III pronto tendr\u00e1 la capacidad de gestionar m\u00faltiples administraciones financieras. Ahora mismo, solo tienes uno. Puedes establecer el t\u00edtulo de esta administraci\u00f3n y su moneda nativa. Esto reemplaza la configuraci\u00f3n anterior donde establecer\u00eda su \"moneda predeterminada\". Esta situaci\u00f3n est\u00e1 vinculada ahora a la administraci\u00f3n financiera y puede ser diferente por administraci\u00f3n.", + "administration_currency_form_help": "Puede tardar mucho tiempo en cargar la p\u00e1gina si cambia la moneda nativa porque la transacci\u00f3n puede necesitar ser convertida a su (nueva) moneda nativa.", + "administrations_page_edit_sub_title_js": "Editar administraci\u00f3n financiera \"{title}\"", "table": "Mesa", "welcome_back": "\u00bfQu\u00e9 est\u00e1 pasando?", "flash_error": "\u00a1Error!", @@ -16,11 +16,11 @@ "select_source_account": "Por favor, seleccione o escriba un nombre de cuenta de origen v\u00e1lido", "split_transaction_title": "Descripci\u00f3n de la transacci\u00f3n dividida", "errors_submission": "Hubo un problema con su env\u00edo. Por favor, compruebe los siguientes errores.", - "is_reconciled": "Is reconciled", + "is_reconciled": "Est\u00e1 reconciliado", "split": "Separar", "single_split": "Divisi\u00f3n", - "not_enough_currencies": "Not enough currencies", - "not_enough_currencies_enabled": "If you have just one currency enabled, there is no need to add exchange rates.", + "not_enough_currencies": "No hay suficientes monedas", + "not_enough_currencies_enabled": "Si solo tiene una divisa habilitada, no es necesario a\u00f1adir tipos de cambio.", "transaction_stored_link": "La transacci\u00f3n #{ID} (\"{title}\")<\/a> ha sido almacenada.", "webhook_stored_link": "El webhook #{ID} (\"{title}\")<\/a> ha sido almacenado.", "webhook_updated_link": "El webhook #{ID} (\"{title}\")<\/a> ha sido actualizado.", @@ -43,10 +43,10 @@ "submit": "Enviar", "amount": "Cantidad", "date": "Fecha", - "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s) unless you remove the reconciliation flag.", + "is_reconciled_fields_dropped": "Debido a que esta transacci\u00f3n est\u00e1 reconciliada, no podr\u00e1 actualizar las cuentas, ni la cantidad(es) a menos que elimine la bandera de reconciliaci\u00f3n.", "tags": "Etiquetas", "no_budget": "(sin presupuesto)", - "no_bill": "(no subscription)", + "no_bill": "(sin suscripci\u00f3n)", "category": "Categor\u00eda", "attachments": "Archivos adjuntos", "notes": "Notas", @@ -62,7 +62,7 @@ "destination_account_reconciliation": "No puedes editar la cuenta de destino de una transacci\u00f3n de reconciliaci\u00f3n.", "source_account_reconciliation": "No puedes editar la cuenta de origen de una transacci\u00f3n de reconciliaci\u00f3n.", "budget": "Presupuesto", - "bill": "Subscription", + "bill": "Suscripci\u00f3n", "you_create_withdrawal": "Est\u00e1 creando un gasto.", "you_create_transfer": "Est\u00e1 creando una transferencia.", "you_create_deposit": "Est\u00e1 creando un ingreso.", @@ -140,11 +140,11 @@ "response": "Respuesta", "visit_webhook_url": "Visita la URL del webhook", "reset_webhook_secret": "Restablecer secreto del webhook", - "header_exchange_rates": "Exchange rates", - "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in the documentation<\/a>.", + "header_exchange_rates": "Tipos de cambio", + "exchange_rates_intro": "Firefly III soporta la descarga y el uso de tipos de cambio. Lee m\u00e1s sobre esto en la documentaci\u00f3n<\/a>.", "exchange_rates_from_to": "Entre {from} y {to} (y viceversa)", "exchange_rates_intro_rates": "Firefly III utiliza los siguientes tipos de cambio. El inverso se calcula autom\u00e1ticamente cuando no se proporciona. Si no existe un tipo de cambio para la fecha de la transacci\u00f3n, Firefly III retroceder\u00e1 en el tiempo para encontrar uno. Si no hay ninguno presente, se usar\u00e1 la tasa \"1\".", - "header_exchange_rates_rates": "Exchange rates", + "header_exchange_rates_rates": "Tipos de cambio", "header_exchange_rates_table": "Tabla con tipos de cambio", "help_rate_form": "En este d\u00eda, \u00bfcu\u00e1nto {to} conseguir\u00e1s por un {from}?", "add_new_rate": "Agregar un nuevo tipo de cambio", @@ -174,7 +174,7 @@ "list": { "title": "T\u00edtulo", "active": "\u00bfEst\u00e1 Activo?", - "native_currency": "Native currency", + "native_currency": "Moneda nativa", "trigger": "Disparador", "response": "Respuesta", "delivery": "Entrega", diff --git a/resources/assets/v2/package.json b/resources/assets/v2/package.json index 4475761b96..59ba626b0e 100644 --- a/resources/assets/v2/package.json +++ b/resources/assets/v2/package.json @@ -9,16 +9,16 @@ }, "devDependencies": { "axios": "^1", - "laravel-vite-plugin": "^1", + "laravel-vite-plugin": "^2", "patch-package": "^8", "sass": "^1", - "vite": "^6", + "vite": "^7", "vite-plugin-manifest-sri": "^0.2.0" }, "dependencies": { "@fortawesome/fontawesome-free": "^6.4.0", "@popperjs/core": "^2.11.8", - "admin-lte": "^4.0.0-beta3", + "admin-lte": "^4.0.0-rc4", "alpinejs": "^3.13.7", "bootstrap": "^5", "bootstrap5-autocomplete": "^1", diff --git a/resources/lang/en_US/form.php b/resources/lang/en_US/form.php index 11f4f95dac..1a904a6d1b 100644 --- a/resources/lang/en_US/form.php +++ b/resources/lang/en_US/form.php @@ -64,7 +64,7 @@ return [ 'budget_id' => 'Budget', 'bill_id' => 'Subscription', 'opening_balance' => 'Opening balance', - 'tagMode' => 'Tag mode', + 'tag_mode' => 'Tag mode', 'virtual_balance' => 'Virtual balance', diff --git a/resources/views/accounts/reconcile/show.twig b/resources/views/accounts/reconcile/show.twig index dd503dec9c..bbcaaff3a1 100644 --- a/resources/views/accounts/reconcile/show.twig +++ b/resources/views/accounts/reconcile/show.twig @@ -82,13 +82,13 @@ {% for tag in journal.tags %}

- {% if tag.tagMode == 'nothing' %} + {% if tag.tag_mode == 'nothing' %} {% endif %} - {% if tag.tagMode == 'balancingAct' %} + {% if tag.tag_mode == 'balancingAct' %} {% endif %} - {% if tag.tagMode == 'advancePayment' %} + {% if tag.tag_mode == 'advancePayment' %} {% endif %} {{ tag.tag }} diff --git a/tests/integration/Support/Models/BillDateCalculatorTest.php b/tests/integration/Support/Models/BillDateCalculatorTest.php index d8206c714a..6402bf4328 100644 --- a/tests/integration/Support/Models/BillDateCalculatorTest.php +++ b/tests/integration/Support/Models/BillDateCalculatorTest.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace Tests\integration\Support\Models; use Override; -use Iterator; use Carbon\Carbon; use FireflyIII\Support\Models\BillDateCalculator; use PHPUnit\Framework\Attributes\DataProvider; @@ -59,7 +58,7 @@ final class BillDateCalculatorTest extends TestCase $this->assertSame($expected, $result); } - public static function provideDates(): Iterator + public static function provideDates(): iterable { // Carbon $earliest, Carbon $latest, Carbon $billStart, string $period, int $skip, ?Carbon $lastPaid // basic monthly bill.x diff --git a/tests/unit/Support/NavigationAddPeriodTest.php b/tests/unit/Support/NavigationAddPeriodTest.php index 1c13a557b4..5b5903de67 100644 --- a/tests/unit/Support/NavigationAddPeriodTest.php +++ b/tests/unit/Support/NavigationAddPeriodTest.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace Tests\unit\Support; use Override; -use Iterator; use Carbon\Carbon; use FireflyIII\Support\Calendar\Periodicity; use FireflyIII\Support\Navigation; @@ -111,7 +110,7 @@ final class NavigationAddPeriodTest extends TestCase $this->assertSame($expected->toDateString(), $period->toDateString()); } - public static function providePeriods(): Iterator + public static function providePeriods(): iterable { yield '1D' => ['1D', Carbon::now(), Carbon::tomorrow()]; @@ -161,7 +160,7 @@ final class NavigationAddPeriodTest extends TestCase $this->assertSame($expected->toDateString(), $period->toDateString()); } - public static function provideFrequencies(): Iterator + public static function provideFrequencies(): iterable { yield Periodicity::Daily->name => [Periodicity::Daily, Carbon::now(), Carbon::tomorrow()]; @@ -215,7 +214,7 @@ final class NavigationAddPeriodTest extends TestCase $this->assertSame($expected->toDateString(), $period->toDateString()); } - public static function provideMonthPeriods(): Iterator + public static function provideMonthPeriods(): iterable { yield '1M' => ['1M', Carbon::parse('2023-06-25'), Carbon::parse('2023-06-25')->addMonthsNoOverflow(1)]; diff --git a/tests/unit/Support/NavigationEndOfPeriodTest.php b/tests/unit/Support/NavigationEndOfPeriodTest.php index 4e8ccea578..ca52600d22 100644 --- a/tests/unit/Support/NavigationEndOfPeriodTest.php +++ b/tests/unit/Support/NavigationEndOfPeriodTest.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace Tests\unit\Support; use Override; -use Iterator; use Carbon\Carbon; use FireflyIII\Support\Navigation; use Illuminate\Support\Facades\Log; @@ -58,7 +57,7 @@ final class NavigationEndOfPeriodTest extends TestCase $this->assertSame($expected->toDateString(), $period->toDateString()); } - public static function provideDates(): Iterator + public static function provideDates(): iterable { yield '1D' => ['1D', Carbon::now(), Carbon::now()->endOfDay()]; @@ -122,7 +121,7 @@ final class NavigationEndOfPeriodTest extends TestCase Log::shouldHaveReceived('error', [$expectedMessage]); } - public static function provideUnknownFrequencies(): Iterator + public static function provideUnknownFrequencies(): iterable { yield '1day' => ['1day', Carbon::now(), Carbon::now()]; diff --git a/tests/unit/Support/NavigationPreferredCarbonFormatByPeriodTest.php b/tests/unit/Support/NavigationPreferredCarbonFormatByPeriodTest.php index 76a8dc54ba..9045679517 100644 --- a/tests/unit/Support/NavigationPreferredCarbonFormatByPeriodTest.php +++ b/tests/unit/Support/NavigationPreferredCarbonFormatByPeriodTest.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace Tests\unit\Support; use Override; -use Iterator; use FireflyIII\Support\Navigation; use PHPUnit\Framework\Attributes\DataProvider; use Tests\integration\TestCase; @@ -57,7 +56,7 @@ final class NavigationPreferredCarbonFormatByPeriodTest extends TestCase $this->assertSame($expected, $formatPeriod); } - public static function providePeriods(): Iterator + public static function providePeriods(): iterable { yield 'unknown' => ['1day', 'Y-m-d']; diff --git a/tests/unit/Support/NavigationPreferredCarbonFormatTest.php b/tests/unit/Support/NavigationPreferredCarbonFormatTest.php index 3584a98c2a..f45d1d5293 100644 --- a/tests/unit/Support/NavigationPreferredCarbonFormatTest.php +++ b/tests/unit/Support/NavigationPreferredCarbonFormatTest.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace Tests\unit\Support; use Override; -use Iterator; use Carbon\Carbon; use FireflyIII\Support\Navigation; use PHPUnit\Framework\Attributes\DataProvider; @@ -58,7 +57,7 @@ final class NavigationPreferredCarbonFormatTest extends TestCase $this->assertSame($expected, $carbonFormat); } - public static function providePeriods(): Iterator + public static function providePeriods(): iterable { yield '1 week' => [Carbon::now(), Carbon::now()->addWeek(), 'Y-m-d']; diff --git a/tests/unit/Support/NavigationPreferredEndOfPeriodTest.php b/tests/unit/Support/NavigationPreferredEndOfPeriodTest.php index 4d0f22e3e7..6687e639d7 100644 --- a/tests/unit/Support/NavigationPreferredEndOfPeriodTest.php +++ b/tests/unit/Support/NavigationPreferredEndOfPeriodTest.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace Tests\unit\Support; use Override; -use Iterator; use Carbon\Carbon; use FireflyIII\Support\Navigation; use PHPUnit\Framework\Attributes\DataProvider; @@ -58,7 +57,7 @@ final class NavigationPreferredEndOfPeriodTest extends TestCase $this->assertSame($expected, $formatPeriod); } - public static function providePeriods(): Iterator + public static function providePeriods(): iterable { yield '1 week' => [Carbon::now(), Carbon::now()->addWeek(), 'endOfDay']; diff --git a/tests/unit/Support/NavigationPreferredRangeFormatTest.php b/tests/unit/Support/NavigationPreferredRangeFormatTest.php index 7218e59db2..032b3ba28e 100644 --- a/tests/unit/Support/NavigationPreferredRangeFormatTest.php +++ b/tests/unit/Support/NavigationPreferredRangeFormatTest.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace Tests\unit\Support; use Override; -use Iterator; use Carbon\Carbon; use FireflyIII\Support\Navigation; use PHPUnit\Framework\Attributes\DataProvider; @@ -58,7 +57,7 @@ final class NavigationPreferredRangeFormatTest extends TestCase $this->assertSame($expected, $formatPeriod); } - public static function providePeriods(): Iterator + public static function providePeriods(): iterable { yield '1 week' => [Carbon::now(), Carbon::now()->addWeek(), '1D']; diff --git a/tests/unit/Support/NavigationPreferredSqlFormatTest.php b/tests/unit/Support/NavigationPreferredSqlFormatTest.php index 4a8fa37420..37c26d8935 100644 --- a/tests/unit/Support/NavigationPreferredSqlFormatTest.php +++ b/tests/unit/Support/NavigationPreferredSqlFormatTest.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace Tests\unit\Support; use Override; -use Iterator; use Carbon\Carbon; use FireflyIII\Support\Navigation; use PHPUnit\Framework\Attributes\DataProvider; @@ -58,7 +57,7 @@ final class NavigationPreferredSqlFormatTest extends TestCase $this->assertSame($expected, $formatPeriod); } - public static function provideDates(): Iterator + public static function provideDates(): iterable { yield '1 week' => [Carbon::now(), Carbon::now()->addWeek(), '%Y-%m-%d']; diff --git a/tests/unit/Support/NavigationStartOfPeriodTest.php b/tests/unit/Support/NavigationStartOfPeriodTest.php index 288aa7ecc4..1fbc177ea6 100644 --- a/tests/unit/Support/NavigationStartOfPeriodTest.php +++ b/tests/unit/Support/NavigationStartOfPeriodTest.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace Tests\unit\Support; use Override; -use Iterator; use Carbon\Carbon; use FireflyIII\Support\Navigation; use Illuminate\Support\Facades\Log; @@ -59,7 +58,7 @@ final class NavigationStartOfPeriodTest extends TestCase $this->assertSame($expected->toDateString(), $period->toDateString()); } - public static function provideDates(): Iterator + public static function provideDates(): iterable { yield 'custom' => ['custom', Carbon::now(), Carbon::now()]; @@ -124,7 +123,7 @@ final class NavigationStartOfPeriodTest extends TestCase $this->assertSame($expected->toDateString(), $period->toDateString()); } - public static function provideUnknownFrequencies(): Iterator + public static function provideUnknownFrequencies(): iterable { yield '1day' => ['1day', Carbon::now(), Carbon::now()]; diff --git a/tests/unit/Support/Search/QueryParser/AbstractQueryParserInterfaceParseQueryTester.php b/tests/unit/Support/Search/QueryParser/AbstractQueryParserInterfaceParseQueryTester.php index 33946565c4..a3e99863e6 100644 --- a/tests/unit/Support/Search/QueryParser/AbstractQueryParserInterfaceParseQueryTester.php +++ b/tests/unit/Support/Search/QueryParser/AbstractQueryParserInterfaceParseQueryTester.php @@ -4,7 +4,6 @@ declare(strict_types=1); namespace Tests\unit\Support\Search\QueryParser; -use Iterator; use FireflyIII\Support\Search\QueryParser\FieldNode; use FireflyIII\Support\Search\QueryParser\QueryParserInterface; use FireflyIII\Support\Search\QueryParser\StringNode; @@ -30,7 +29,7 @@ abstract class AbstractQueryParserInterfaceParseQueryTester extends TestCase } - public static function queryDataProvider(): Iterator + public static function queryDataProvider(): iterable { yield 'empty query' => [ '',