Auto commit for release 'develop' on 2024-07-29

This commit is contained in:
github-actions
2024-07-29 05:06:54 +02:00
parent 2df4b40a28
commit ac8a43bb37
28 changed files with 523 additions and 566 deletions

View File

@@ -72,30 +72,38 @@
}, },
{ {
"name": "composer/pcre", "name": "composer/pcre",
"version": "3.1.4", "version": "3.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/composer/pcre.git", "url": "https://github.com/composer/pcre.git",
"reference": "04229f163664973f68f38f6f73d917799168ef24" "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24", "url": "https://api.github.com/repos/composer/pcre/zipball/ea4ab6f9580a4fd221e0418f2c357cdd39102a90",
"reference": "04229f163664973f68f38f6f73d917799168ef24", "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.4 || ^8.0" "php": "^7.4 || ^8.0"
}, },
"conflict": {
"phpstan/phpstan": "<1.11.8"
},
"require-dev": { "require-dev": {
"phpstan/phpstan": "^1.3", "phpstan/phpstan": "^1.11.8",
"phpstan/phpstan-strict-rules": "^1.1", "phpstan/phpstan-strict-rules": "^1.1",
"symfony/phpunit-bridge": "^5" "phpunit/phpunit": "^8 || ^9"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-main": "3.x-dev" "dev-main": "3.x-dev"
},
"phpstan": {
"includes": [
"extension.neon"
]
} }
}, },
"autoload": { "autoload": {
@@ -123,7 +131,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/composer/pcre/issues", "issues": "https://github.com/composer/pcre/issues",
"source": "https://github.com/composer/pcre/tree/3.1.4" "source": "https://github.com/composer/pcre/tree/3.2.0"
}, },
"funding": [ "funding": [
{ {
@@ -139,7 +147,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-05-27T13:40:54+00:00" "time": "2024-07-25T09:36:02+00:00"
}, },
{ {
"name": "composer/semver", "name": "composer/semver",
@@ -398,16 +406,16 @@
}, },
{ {
"name": "friendsofphp/php-cs-fixer", "name": "friendsofphp/php-cs-fixer",
"version": "v3.59.3", "version": "v3.60.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
"reference": "30ba9ecc2b0e5205e578fe29973c15653d9bfd29" "reference": "e595e4e070d17c5d42ed8c4206f630fcc5f401a4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/30ba9ecc2b0e5205e578fe29973c15653d9bfd29", "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/e595e4e070d17c5d42ed8c4206f630fcc5f401a4",
"reference": "30ba9ecc2b0e5205e578fe29973c15653d9bfd29", "reference": "e595e4e070d17c5d42ed8c4206f630fcc5f401a4",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -489,7 +497,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.59.3" "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.60.0"
}, },
"funding": [ "funding": [
{ {
@@ -497,7 +505,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2024-06-16T14:17:03+00:00" "time": "2024-07-25T09:26:51+00:00"
}, },
{ {
"name": "psr/container", "name": "psr/container",
@@ -1026,31 +1034,31 @@
}, },
{ {
"name": "react/socket", "name": "react/socket",
"version": "v1.15.0", "version": "v1.16.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/reactphp/socket.git", "url": "https://github.com/reactphp/socket.git",
"reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038" "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/reactphp/socket/zipball/216d3aec0b87f04a40ca04f481e6af01bdd1d038", "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1",
"reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038", "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"evenement/evenement": "^3.0 || ^2.0 || ^1.0", "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
"php": ">=5.3.0", "php": ">=5.3.0",
"react/dns": "^1.11", "react/dns": "^1.13",
"react/event-loop": "^1.2", "react/event-loop": "^1.2",
"react/promise": "^3 || ^2.6 || ^1.2.1", "react/promise": "^3.2 || ^2.6 || ^1.2.1",
"react/stream": "^1.2" "react/stream": "^1.4"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
"react/async": "^4 || ^3 || ^2", "react/async": "^4.3 || ^3.3 || ^2",
"react/promise-stream": "^1.4", "react/promise-stream": "^1.4",
"react/promise-timer": "^1.10" "react/promise-timer": "^1.11"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -1094,7 +1102,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/reactphp/socket/issues", "issues": "https://github.com/reactphp/socket/issues",
"source": "https://github.com/reactphp/socket/tree/v1.15.0" "source": "https://github.com/reactphp/socket/tree/v1.16.0"
}, },
"funding": [ "funding": [
{ {
@@ -1102,7 +1110,7 @@
"type": "open_collective" "type": "open_collective"
} }
], ],
"time": "2023-12-15T11:02:10+00:00" "time": "2024-07-26T10:38:09+00:00"
}, },
{ {
"name": "react/stream", "name": "react/stream",
@@ -1251,16 +1259,16 @@
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v7.1.2", "version": "v7.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "0aa29ca177f432ab68533432db0de059f39c92ae" "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/0aa29ca177f432ab68533432db0de059f39c92ae", "url": "https://api.github.com/repos/symfony/console/zipball/cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9",
"reference": "0aa29ca177f432ab68533432db0de059f39c92ae", "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1324,7 +1332,7 @@
"terminal" "terminal"
], ],
"support": { "support": {
"source": "https://github.com/symfony/console/tree/v7.1.2" "source": "https://github.com/symfony/console/tree/v7.1.3"
}, },
"funding": [ "funding": [
{ {
@@ -1340,7 +1348,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-06-28T10:03:55+00:00" "time": "2024-07-26T12:41:01+00:00"
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
@@ -1633,16 +1641,16 @@
}, },
{ {
"name": "symfony/finder", "name": "symfony/finder",
"version": "v7.1.1", "version": "v7.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/finder.git", "url": "https://github.com/symfony/finder.git",
"reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6" "reference": "717c6329886f32dc65e27461f80f2a465412fdca"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/fbb0ba67688b780efbc886c1a0a0948dcf7205d6", "url": "https://api.github.com/repos/symfony/finder/zipball/717c6329886f32dc65e27461f80f2a465412fdca",
"reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6", "reference": "717c6329886f32dc65e27461f80f2a465412fdca",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1677,7 +1685,7 @@
"description": "Finds files and directories via an intuitive fluent interface", "description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/finder/tree/v7.1.1" "source": "https://github.com/symfony/finder/tree/v7.1.3"
}, },
"funding": [ "funding": [
{ {
@@ -1693,7 +1701,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-05-31T14:57:53+00:00" "time": "2024-07-24T07:08:44+00:00"
}, },
{ {
"name": "symfony/options-resolver", "name": "symfony/options-resolver",
@@ -2238,16 +2246,16 @@
}, },
{ {
"name": "symfony/process", "name": "symfony/process",
"version": "v7.1.1", "version": "v7.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/process.git", "url": "https://github.com/symfony/process.git",
"reference": "febf90124323a093c7ee06fdb30e765ca3c20028" "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/febf90124323a093c7ee06fdb30e765ca3c20028", "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca",
"reference": "febf90124323a093c7ee06fdb30e765ca3c20028", "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2279,7 +2287,7 @@
"description": "Executes commands in sub-processes", "description": "Executes commands in sub-processes",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/process/tree/v7.1.1" "source": "https://github.com/symfony/process/tree/v7.1.3"
}, },
"funding": [ "funding": [
{ {
@@ -2295,7 +2303,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-05-31T14:57:53+00:00" "time": "2024-07-26T12:44:47+00:00"
}, },
{ {
"name": "symfony/service-contracts", "name": "symfony/service-contracts",
@@ -2444,16 +2452,16 @@
}, },
{ {
"name": "symfony/string", "name": "symfony/string",
"version": "v7.1.2", "version": "v7.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/string.git", "url": "https://github.com/symfony/string.git",
"reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8" "reference": "ea272a882be7f20cad58d5d78c215001617b7f07"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/14221089ac66cf82e3cf3d1c1da65de305587ff8", "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07",
"reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8", "reference": "ea272a882be7f20cad58d5d78c215001617b7f07",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2511,7 +2519,7 @@
"utf8" "utf8"
], ],
"support": { "support": {
"source": "https://github.com/symfony/string/tree/v7.1.2" "source": "https://github.com/symfony/string/tree/v7.1.3"
}, },
"funding": [ "funding": [
{ {
@@ -2527,7 +2535,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-06-28T09:27:18+00:00" "time": "2024-07-22T10:25:37+00:00"
} }
], ],
"packages-dev": [], "packages-dev": [],

View File

@@ -39,7 +39,6 @@ use LaravelJsonApi\Laravel\Http\Controllers\Actions;
* *
* This class handles api/v2 requests for accounts. * This class handles api/v2 requests for accounts.
* Most stuff is default stuff. * Most stuff is default stuff.
*
*/ */
class AccountController extends Controller class AccountController extends Controller
{ {
@@ -47,8 +46,8 @@ class AccountController extends Controller
use Actions\Destroy; use Actions\Destroy;
use Actions\DetachRelationship; use Actions\DetachRelationship;
// use Actions\FetchMany; // use Actions\FetchMany;
//use Actions\FetchOne; // use Actions\FetchOne;
use Actions\FetchRelated; use Actions\FetchRelated;
use Actions\FetchRelationship; use Actions\FetchRelationship;
use Actions\Store; use Actions\Store;
@@ -58,9 +57,6 @@ class AccountController extends Controller
/** /**
* Fetch zero to many JSON API resources. * Fetch zero to many JSON API resources.
* *
* @param AccountSchema $schema
* @param AccountCollectionQuery $request
*
* @return Responsable|Response * @return Responsable|Response
*/ */
public function index(AccountSchema $schema, AccountCollectionQuery $request) public function index(AccountSchema $schema, AccountCollectionQuery $request)
@@ -70,7 +66,8 @@ class AccountController extends Controller
->repository() ->repository()
->queryAll() ->queryAll()
->withRequest($request) ->withRequest($request)
->get(); ->get()
;
// do something custom... // do something custom...
@@ -80,10 +77,6 @@ class AccountController extends Controller
/** /**
* Fetch zero to one JSON API resource by id. * Fetch zero to one JSON API resource by id.
* *
* @param AccountSchema $schema
* @param AccountSingleQuery $request
* @param Account $account
*
* @return Responsable|Response * @return Responsable|Response
*/ */
public function show(AccountSchema $schema, AccountSingleQuery $request, Account $account) public function show(AccountSchema $schema, AccountSingleQuery $request, Account $account)
@@ -92,26 +85,26 @@ class AccountController extends Controller
->repository() ->repository()
->queryOne($account) ->queryOne($account)
->withRequest($request) ->withRequest($request)
->first(); ->first()
;
// do something custom... // do something custom...
return new DataResponse($model); return new DataResponse($model);
} }
// public function readAccountBalances(AnonymousQuery $query, AccountBalanceSchema $schema, Account $account): Responsable
// public function readAccountBalances(AnonymousQuery $query, AccountBalanceSchema $schema, Account $account): Responsable // {
// { // $schema = JsonApi::server()->schemas()->schemaFor('account-balances');
// $schema = JsonApi::server()->schemas()->schemaFor('account-balances'); //
// // $models = $schema
// $models = $schema // ->repository()
// ->repository() // ->queryAll()
// ->queryAll() // ->withRequest($query)
// ->withRequest($query) // ->withAccount($account)
// ->withAccount($account) // ->get()
// ->get() // ;
// ; //
// // return DataResponse::make($models);
// return DataResponse::make($models); // }
// }
} }

View File

@@ -46,19 +46,20 @@ class FixUnevenAmount extends Command
{ {
$this->fixUnevenAmounts(); $this->fixUnevenAmounts();
$this->matchCurrencies(); $this->matchCurrencies();
return 0; return 0;
} }
private function fixJournal(int $param): void private function fixJournal(int $param): void
{ {
// one of the transactions is bad. // one of the transactions is bad.
$journal = TransactionJournal::find($param); $journal = TransactionJournal::find($param);
if (null === $journal) { if (null === $journal) {
return; return;
} }
/** @var null|Transaction $source */ /** @var null|Transaction $source */
$source = $journal->transactions()->where('amount', '<', 0)->first(); $source = $journal->transactions()->where('amount', '<', 0)->first();
if (null === $source) { if (null === $source) {
$this->friendlyError( $this->friendlyError(
@@ -74,11 +75,11 @@ class FixUnevenAmount extends Command
return; return;
} }
$amount = bcmul('-1', $source->amount); $amount = bcmul('-1', $source->amount);
// fix amount of destination: // fix amount of destination:
/** @var null|Transaction $destination */ /** @var null|Transaction $destination */
$destination = $journal->transactions()->where('amount', '>', 0)->first(); $destination = $journal->transactions()->where('amount', '>', 0)->first();
if (null === $destination) { if (null === $destination) {
$this->friendlyError( $this->friendlyError(
@@ -98,7 +99,7 @@ class FixUnevenAmount extends Command
$destination->amount = $amount; $destination->amount = $amount;
$destination->save(); $destination->save();
$message = sprintf('Corrected amount in transaction journal #%d', $param); $message = sprintf('Corrected amount in transaction journal #%d', $param);
$this->friendlyInfo($message); $this->friendlyInfo($message);
} }
@@ -106,9 +107,10 @@ class FixUnevenAmount extends Command
{ {
$count = 0; $count = 0;
$journals = \DB::table('transactions') $journals = \DB::table('transactions')
->groupBy('transaction_journal_id') ->groupBy('transaction_journal_id')
->whereNull('deleted_at') ->whereNull('deleted_at')
->get(['transaction_journal_id', \DB::raw('SUM(amount) AS the_sum')]); ->get(['transaction_journal_id', \DB::raw('SUM(amount) AS the_sum')])
;
/** @var \stdClass $entry */ /** @var \stdClass $entry */
foreach ($journals as $entry) { foreach ($journals as $entry) {
@@ -156,19 +158,20 @@ class FixUnevenAmount extends Command
private function matchCurrencies(): void private function matchCurrencies(): void
{ {
$journals = TransactionJournal $journals = TransactionJournal::leftJoin('transactions', 'transaction_journals.id', 'transactions.transaction_journal_id')
::leftJoin('transactions', 'transaction_journals.id', 'transactions.transaction_journal_id')
->where('transactions.transaction_currency_id', '!=', \DB::raw('transaction_journals.transaction_currency_id')) ->where('transactions.transaction_currency_id', '!=', \DB::raw('transaction_journals.transaction_currency_id'))
->get(['transaction_journals.*']); ->get(['transaction_journals.*'])
;
if (0 === $journals->count()) { if (0 === $journals->count()) {
$this->friendlyPositive('Journal currency integrity is OK'); $this->friendlyPositive('Journal currency integrity is OK');
return; return;
} }
/** @var TransactionJournal $journal */ /** @var TransactionJournal $journal */
foreach($journals as $journal) { foreach ($journals as $journal) {
Transaction::where('transaction_journal_id', $journal->id)->update(['transaction_currency_id' => $journal->transaction_currency_id]); Transaction::where('transaction_journal_id', $journal->id)->update(['transaction_currency_id' => $journal->transaction_currency_id]);
} }
$this->friendlyPositive(sprintf('Fixed %d journal(s) with mismatched currencies.', $journals->count())); $this->friendlyPositive(sprintf('Fixed %d journal(s) with mismatched currencies.', $journals->count()));
} }
} }

View File

@@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace FireflyIII\JsonApi\V2\Accounts; namespace FireflyIII\JsonApi\V2\Accounts;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
@@ -10,17 +12,15 @@ use LaravelJsonApi\Validation\Rule as JsonApiRule;
class AccountCollectionQuery extends ResourceQuery class AccountCollectionQuery extends ResourceQuery
{ {
/** /**
* Get the validation rules that apply to the request query parameters. * Get the validation rules that apply to the request query parameters.
*
* @return array
*/ */
public function rules(): array public function rules(): array
{ {
Log::debug(__METHOD__); Log::debug(__METHOD__);
return [ return [
'fields' => [ 'fields' => [
'nullable', 'nullable',
'array', 'array',
JsonApiRule::fieldSets(), JsonApiRule::fieldSets(),
@@ -30,27 +30,27 @@ class AccountCollectionQuery extends ResourceQuery
'integer', 'integer',
new IsAllowedGroupAction(Account::class, request()->method()), new IsAllowedGroupAction(Account::class, request()->method()),
], ],
'filter' => [ 'filter' => [
'nullable', 'nullable',
'array', 'array',
JsonApiRule::filter(), JsonApiRule::filter(),
], ],
'include' => [ 'include' => [
'nullable', 'nullable',
'string', 'string',
JsonApiRule::includePaths(), JsonApiRule::includePaths(),
], ],
'page' => [ 'page' => [
'nullable', 'nullable',
'array', 'array',
JsonApiRule::page(), JsonApiRule::page(),
], ],
'sort' => [ 'sort' => [
'nullable', 'nullable',
'string', 'string',
JsonApiRule::sort(), JsonApiRule::sort(),
], ],
'withCount' => [ 'withCount' => [
'nullable', 'nullable',
'string', 'string',
JsonApiRule::countable(), JsonApiRule::countable(),

View File

@@ -45,9 +45,10 @@ use LaravelJsonApi\NonEloquent\Concerns\HasRelationsCapability;
*/ */
class AccountRepository extends AbstractRepository implements QueriesAll class AccountRepository extends AbstractRepository implements QueriesAll
{ {
use UsergroupAware;
use HasRelationsCapability;
use HasCrudCapability; use HasCrudCapability;
use HasRelationsCapability;
use UsergroupAware;
/** /**
* SiteRepository constructor. * SiteRepository constructor.
*/ */
@@ -56,27 +57,28 @@ class AccountRepository extends AbstractRepository implements QueriesAll
public function exists(string $resourceId): bool public function exists(string $resourceId): bool
{ {
Log::debug(__METHOD__); Log::debug(__METHOD__);
return null !== Account::find((int) $resourceId); return null !== Account::find((int) $resourceId);
} }
public function find(string $resourceId): ?object public function find(string $resourceId): ?object
{ {
Log::debug(__METHOD__); Log::debug(__METHOD__);
// throw new \RuntimeException('trace me'); // throw new \RuntimeException('trace me');
$account = Account::find((int) $resourceId); $account = Account::find((int) $resourceId);
if(null === $account) { if (null === $account) {
return null; return null;
} }
// enrich the collected data // enrich the collected data
$enrichment = new AccountEnrichment(); $enrichment = new AccountEnrichment();
return $enrichment->enrichSingle($account); return $enrichment->enrichSingle($account);
} }
public function queryAll(): Capabilities\AccountQuery public function queryAll(): Capabilities\AccountQuery
{ {
Log::debug(__METHOD__); Log::debug(__METHOD__);
return Capabilities\AccountQuery::make() return Capabilities\AccountQuery::make()
->withUserGroup($this->userGroup) ->withUserGroup($this->userGroup)
->withServer($this->server) ->withServer($this->server)
@@ -84,17 +86,11 @@ class AccountRepository extends AbstractRepository implements QueriesAll
; ;
} }
/**
* @inheritDoc
*/
protected function crud(): Capabilities\CrudAccount protected function crud(): Capabilities\CrudAccount
{ {
return Capabilities\CrudAccount::make(); return Capabilities\CrudAccount::make();
} }
/**
* @inheritDoc
*/
protected function relations(): CrudRelations protected function relations(): CrudRelations
{ {
return Capabilities\CrudAccountRelations::make(); return Capabilities\CrudAccountRelations::make();

View File

@@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace FireflyIII\JsonApi\V2\Accounts; namespace FireflyIII\JsonApi\V2\Accounts;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
@@ -14,26 +16,23 @@ class AccountResource extends JsonApiResource
{ {
/** /**
* Get the resource id. * Get the resource id.
*
* @return string
*/ */
public function id(): string public function id(): string
{ {
Log::debug(__METHOD__); Log::debug(__METHOD__);
return (string) $this->resource->id; return (string) $this->resource->id;
} }
/** /**
* Get the resource's attributes. * Get the resource's attributes.
* *
* @param Request|null $request * @param null|Request $request
*
* @return iterable
*/ */
public function attributes($request): iterable public function attributes($request): iterable
{ {
Log::debug(__METHOD__); Log::debug(__METHOD__);
return [ return [
'created_at' => $this->resource->created_at, 'created_at' => $this->resource->created_at,
'updated_at' => $this->resource->updated_at, 'updated_at' => $this->resource->updated_at,
@@ -57,17 +56,14 @@ class AccountResource extends JsonApiResource
'interest_period' => $this->resource->interest_period, 'interest_period' => $this->resource->interest_period,
'current_debt' => $this->resource->current_debt, 'current_debt' => $this->resource->current_debt,
'last_activity' => $this->resource->last_activity,
'last_activity' => $this->resource->last_activity,
]; ];
} }
/** /**
* Get the resource's relationships. * Get the resource's relationships.
* *
* @param Request|null $request * @param null|Request $request
*
* @return iterable
*/ */
public function relationships($request): iterable public function relationships($request): iterable
{ {
@@ -75,5 +71,4 @@ class AccountResource extends JsonApiResource
$this->relation('user')->withData($this->resource->user), $this->relation('user')->withData($this->resource->user),
]; ];
} }
} }

View File

@@ -109,7 +109,7 @@ class AccountResourceOld extends JsonApiResource
return [ return [
$this->relation('user')->withData($this->resource->user), $this->relation('user')->withData($this->resource->user),
$this->relation('currency')->withData($this->resource->transactionCurrency), $this->relation('currency')->withData($this->resource->transactionCurrency),
//$this->relation('account_balances')->withData($this->resource->balances), // $this->relation('account_balances')->withData($this->resource->balances),
]; ];
} }
} }

View File

@@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace FireflyIII\JsonApi\V2\Accounts; namespace FireflyIII\JsonApi\V2\Accounts;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
@@ -11,27 +13,22 @@ use LaravelJsonApi\NonEloquent\Fields\Attribute;
use LaravelJsonApi\NonEloquent\Fields\ID; use LaravelJsonApi\NonEloquent\Fields\ID;
use LaravelJsonApi\NonEloquent\Filters\Filter; use LaravelJsonApi\NonEloquent\Filters\Filter;
class AccountSchema extends Schema class AccountSchema extends Schema
{ {
use UsergroupAware; use UsergroupAware;
/** /**
* The model the schema corresponds to. * The model the schema corresponds to.
*
* @var string
*/ */
public static string $model = Account::class; public static string $model = Account::class;
/** /**
* Get the resource fields. * Get the resource fields.
*
* @return array
*/ */
public function fields(): array public function fields(): array
{ {
Log::debug(__METHOD__);; Log::debug(__METHOD__);
return [ return [
ID::make(), ID::make(),
Attribute::make('created_at'), Attribute::make('created_at'),
@@ -61,21 +58,19 @@ class AccountSchema extends Schema
// dynamic data // dynamic data
Attribute::make('last_activity'), Attribute::make('last_activity'),
HasOne::make('user')->readOnly(), HasOne::make('user')->readOnly(),
]; ];
} }
/** /**
* Get the resource filters. * Get the resource filters.
*
* @return array
*/ */
public function filters(): array public function filters(): array
{ {
Log::debug(__METHOD__);; Log::debug(__METHOD__);
return [ return [
Filter::make('id'), Filter::make('id'),
]; ];
} }
@@ -83,10 +78,11 @@ class AccountSchema extends Schema
{ {
Log::debug(__METHOD__); Log::debug(__METHOD__);
$this->setUserGroup($this->server->getUsergroup()); $this->setUserGroup($this->server->getUsergroup());
return AccountRepository::make()
->withServer($this->server)
->withSchema($this)
->withUserGroup($this->userGroup);
}
return AccountRepository::make()
->withServer($this->server)
->withSchema($this)
->withUserGroup($this->userGroup)
;
}
} }

View File

@@ -41,13 +41,13 @@ class AccountSchemaOld extends Schema
DateTime::make('created_at')->sortable()->readOnly(), DateTime::make('created_at')->sortable()->readOnly(),
DateTime::make('updated_at')->sortable()->readOnly(), DateTime::make('updated_at')->sortable()->readOnly(),
Str::make('name')->sortable(), Str::make('name')->sortable(),
// Str::make('account_type'), // Str::make('account_type'),
// Str::make('virtual_balance'), // Str::make('virtual_balance'),
// Str::make('iban'), // Str::make('iban'),
// Boolean::make('active'), // Boolean::make('active'),
// Number::make('order'), // Number::make('order'),
HasOne::make('user')->readOnly(), HasOne::make('user')->readOnly(),
//HasMany::make('account_balances'), // HasMany::make('account_balances'),
]; ];
} }

View File

@@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace FireflyIII\JsonApi\V2\Accounts; namespace FireflyIII\JsonApi\V2\Accounts;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
@@ -8,33 +10,31 @@ use LaravelJsonApi\Validation\Rule as JsonApiRule;
class AccountSingleQuery extends ResourceQuery class AccountSingleQuery extends ResourceQuery
{ {
/** /**
* Get the validation rules that apply to the request query parameters. * Get the validation rules that apply to the request query parameters.
*
* @return array
*/ */
public function rules(): array public function rules(): array
{ {
Log::debug(__METHOD__);; Log::debug(__METHOD__);
return [ return [
'fields' => [ 'fields' => [
'nullable', 'nullable',
'array', 'array',
JsonApiRule::fieldSets(), JsonApiRule::fieldSets(),
], ],
'filter' => [ 'filter' => [
'nullable', 'nullable',
'array', 'array',
JsonApiRule::filter()->forget('id'), JsonApiRule::filter()->forget('id'),
], ],
'include' => [ 'include' => [
'nullable', 'nullable',
'string', 'string',
JsonApiRule::includePaths(), JsonApiRule::includePaths(),
], ],
'page' => JsonApiRule::notSupported(), 'page' => JsonApiRule::notSupported(),
'sort' => JsonApiRule::notSupported(), 'sort' => JsonApiRule::notSupported(),
'withCount' => [ 'withCount' => [
'nullable', 'nullable',
'string', 'string',

View File

@@ -31,16 +31,12 @@ class CrudAccount extends CrudResource
{ {
/** /**
* Read the supplied site. * Read the supplied site.
*
* @param Account $account
*
* @return Account|null
*/ */
public function read(Account $account): ?Account public function read(Account $account): ?Account
{ {
// enrich the collected data // enrich the collected data
$enrichment = new AccountEnrichment(); $enrichment = new AccountEnrichment();
return $enrichment->enrichSingle($account); return $enrichment->enrichSingle($account);
} }
} }

View File

@@ -25,7 +25,4 @@ namespace FireflyIII\JsonApi\V2\Accounts\Capabilities;
use LaravelJsonApi\NonEloquent\Capabilities\CrudRelations; use LaravelJsonApi\NonEloquent\Capabilities\CrudRelations;
class CrudAccountRelations extends CrudRelations class CrudAccountRelations extends CrudRelations {}
{
}

View File

@@ -43,10 +43,11 @@ class Server extends BaseServer
protected function allSchemas(): array protected function allSchemas(): array
{ {
Log::debug(__METHOD__); Log::debug(__METHOD__);
return [ return [
AccountSchema::class, AccountSchema::class,
UserSchema::class, UserSchema::class,
//AccountBalanceSchema::class, // AccountBalanceSchema::class,
]; ];
} }
} }

View File

@@ -51,7 +51,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @property null|Carbon $deleted_at * @property null|Carbon $deleted_at
* @property int $user_id * @property int $user_id
* @property int $account_type_id * @property int $account_type_id
* @property string $account_type_string * @property string $account_type_string
* @property string $name * @property string $name
* @property string $virtual_balance * @property string $virtual_balance
* @property null|string $iban * @property null|string $iban
@@ -76,7 +76,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @property Collection|Transaction[] $transactions * @property Collection|Transaction[] $transactions
* @property null|int $transactions_count * @property null|int $transactions_count
* @property User $user * @property User $user
* @property string $last_activity * @property string $last_activity
* *
* @method static EloquentBuilder|Account accountTypeIn($types) * @method static EloquentBuilder|Account accountTypeIn($types)
* @method static EloquentBuilder|Account newModelQuery() * @method static EloquentBuilder|Account newModelQuery()
@@ -98,35 +98,35 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static Builder|Account withTrashed() * @method static Builder|Account withTrashed()
* @method static Builder|Account withoutTrashed() * @method static Builder|Account withoutTrashed()
* *
* @property Carbon $lastActivityDate * @property Carbon $lastActivityDate
* @property string $startBalance * @property string $startBalance
* @property string $endBalance * @property string $endBalance
* @property string $difference * @property string $difference
* @property string $interest * @property string $interest
* @property string $interestPeriod * @property string $interestPeriod
* @property string $accountTypeString * @property string $accountTypeString
* @property Location $location * @property Location $location
* @property string $liability_direction * @property string $liability_direction
* @property string $current_debt * @property string $current_debt
* @property int $user_group_id * @property int $user_group_id
* *
* @method static EloquentBuilder|Account whereUserGroupId($value) * @method static EloquentBuilder|Account whereUserGroupId($value)
* *
* @property null|UserGroup $userGroup * @property null|UserGroup $userGroup
* @property mixed $account_id * @property mixed $account_id
* *
* @mixin Eloquent * @mixin Eloquent
*/ */
class Account extends Model class Account extends Model
{ {
use Cachable;
use HasFactory; use HasFactory;
use ReturnsIntegerIdTrait; use ReturnsIntegerIdTrait;
use ReturnsIntegerUserIdTrait; use ReturnsIntegerUserIdTrait;
use SoftDeletes; use SoftDeletes;
use Cachable;
protected $casts protected $casts
= [ = [
'created_at' => 'datetime', 'created_at' => 'datetime',
'updated_at' => 'datetime', 'updated_at' => 'datetime',
'user_id' => 'integer', 'user_id' => 'integer',
@@ -135,9 +135,9 @@ class Account extends Model
'encrypted' => 'boolean', 'encrypted' => 'boolean',
]; ];
protected $fillable = ['user_id', 'user_group_id', 'account_type_id', 'name', 'active', 'virtual_balance', 'iban']; protected $fillable = ['user_id', 'user_group_id', 'account_type_id', 'name', 'active', 'virtual_balance', 'iban'];
protected $hidden = ['encrypted']; protected $hidden = ['encrypted'];
private bool $joinedAccountTypes = false; private bool $joinedAccountTypes = false;
/** /**
@@ -151,10 +151,10 @@ class Account extends Model
$accountId = (int) $value; $accountId = (int) $value;
/** @var User $user */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
/** @var null|Account $account */ /** @var null|Account $account */
$account = $user->accounts()->with(['accountType'])->find($accountId); $account = $user->accounts()->with(['accountType'])->find($accountId);
if (null !== $account) { if (null !== $account) {
return $account; return $account;
} }
@@ -185,8 +185,9 @@ class Account extends Model
{ {
/** @var null|AccountMeta $metaValue */ /** @var null|AccountMeta $metaValue */
$metaValue = $this->accountMeta() $metaValue = $this->accountMeta()
->where('name', 'account_number') ->where('name', 'account_number')
->first(); ->first()
;
return null !== $metaValue ? $metaValue->data : ''; return null !== $metaValue ? $metaValue->data : '';
} }
@@ -249,7 +250,7 @@ class Account extends Model
public function setVirtualBalanceAttribute(mixed $value): void public function setVirtualBalanceAttribute(mixed $value): void
{ {
$value = (string) $value; $value = (string) $value;
if ('' === $value) { if ('' === $value) {
$value = null; $value = null;
} }
@@ -269,7 +270,7 @@ class Account extends Model
protected function accountId(): Attribute protected function accountId(): Attribute
{ {
return Attribute::make( return Attribute::make(
get: static fn($value) => (int) $value, get: static fn ($value) => (int) $value,
); );
} }
@@ -279,21 +280,21 @@ class Account extends Model
protected function accountTypeId(): Attribute protected function accountTypeId(): Attribute
{ {
return Attribute::make( return Attribute::make(
get: static fn($value) => (int) $value, get: static fn ($value) => (int) $value,
); );
} }
protected function iban(): Attribute protected function iban(): Attribute
{ {
return Attribute::make( return Attribute::make(
get: static fn($value) => null === $value ? null : trim(str_replace(' ', '', (string) $value)), get: static fn ($value) => null === $value ? null : trim(str_replace(' ', '', (string) $value)),
); );
} }
protected function order(): Attribute protected function order(): Attribute
{ {
return Attribute::make( return Attribute::make(
get: static fn($value) => (int) $value, get: static fn ($value) => (int) $value,
); );
} }
@@ -303,7 +304,7 @@ class Account extends Model
protected function virtualBalance(): Attribute protected function virtualBalance(): Attribute
{ {
return Attribute::make( return Attribute::make(
get: static fn($value) => (string) $value, get: static fn ($value) => (string) $value,
); );
} }
} }

View File

@@ -94,10 +94,10 @@ use Illuminate\Database\Eloquent\SoftDeletes;
*/ */
class Transaction extends Model class Transaction extends Model
{ {
use Cachable;
use HasFactory; use HasFactory;
use ReturnsIntegerIdTrait; use ReturnsIntegerIdTrait;
use SoftDeletes; use SoftDeletes;
use Cachable;
protected $casts protected $casts
= [ = [

View File

@@ -555,10 +555,11 @@ class AccountRepository implements AccountRepositoryInterface
} }
} }
// reset the rest to zero. // reset the rest to zero.
$all = [AccountType::DEFAULT, AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::CREDITCARD, AccountType::MORTGAGE]; $all = [AccountType::DEFAULT, AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::CREDITCARD, AccountType::MORTGAGE];
$this->user->accounts()->leftJoin('account_types','account_types.id','=','accounts.account_type_id') $this->user->accounts()->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id')
->whereNotIn('account_types.type', $all) ->whereNotIn('account_types.type', $all)
->update(['order' => 0]); ->update(['order' => 0])
;
} }
public function searchAccount(string $query, array $types, int $limit): Collection public function searchAccount(string $query, array $types, int $limit): Collection

View File

@@ -242,10 +242,11 @@ class AccountRepository implements AccountRepositoryInterface
} }
} }
// reset the rest to zero. // reset the rest to zero.
$all = [AccountType::DEFAULT, AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::CREDITCARD, AccountType::MORTGAGE]; $all = [AccountType::DEFAULT, AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::CREDITCARD, AccountType::MORTGAGE];
$this->user->accounts()->leftJoin('account_types','account_types.id','=','accounts.account_type_id') $this->user->accounts()->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id')
->whereNotIn('account_types.type', $all) ->whereNotIn('account_types.type', $all)
->update(['order' => 0]); ->update(['order' => 0])
;
} }
public function getAccountsByType(array $types, ?array $sort = [], ?array $filters = []): Collection public function getAccountsByType(array $types, ?array $sort = [], ?array $filters = []): Collection

View File

@@ -23,19 +23,16 @@ declare(strict_types=1);
namespace FireflyIII\Rules; namespace FireflyIII\Rules;
use Closure;
use FireflyIII\Enums\UserRoleEnum; use FireflyIII\Enums\UserRoleEnum;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
use FireflyIII\Repositories\UserGroup\UserGroupRepositoryInterface; use FireflyIII\Repositories\UserGroup\UserGroupRepositoryInterface;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
class IsAllowedGroupAction implements ValidationRule class IsAllowedGroupAction implements ValidationRule
{ {
private string $className; private string $className;
private string $methodName; private string $methodName;
@@ -44,47 +41,51 @@ class IsAllowedGroupAction implements ValidationRule
public function __construct(string $className, string $methodName) public function __construct(string $className, string $methodName)
{ {
$this->className = $className; $this->className = $className;
$this->methodName = $methodName; $this->methodName = $methodName;
// you need these roles to do anything with any endpoint. // you need these roles to do anything with any endpoint.
$this->acceptedRoles = [UserRoleEnum::OWNER, UserRoleEnum::FULL]; $this->acceptedRoles = [UserRoleEnum::OWNER, UserRoleEnum::FULL];
$this->repository = app(UserGroupRepositoryInterface::class); $this->repository = app(UserGroupRepositoryInterface::class);
} }
/** /**
* @inheritDoc
* @throws AuthorizationException * @throws AuthorizationException
*/ */
#[\Override] public function validate(string $attribute, mixed $value, Closure $fail): void #[\Override]
public function validate(string $attribute, mixed $value, \Closure $fail): void
{ {
if('GET' === $this->methodName) { if ('GET' === $this->methodName) {
// need at least "read only rights". // need at least "read only rights".
$this->acceptedRoles[] = UserRoleEnum::READ_ONLY; $this->acceptedRoles[] = UserRoleEnum::READ_ONLY;
} }
if('GET' !== $this->methodName) { if ('GET' !== $this->methodName) {
// either post, put or delete or something else.. you need more access rights. // either post, put or delete or something else.. you need more access rights.
switch ($this->className) { switch ($this->className) {
default: default:
throw new AuthorizationException(sprintf('Cannot handle class "%s"', $this->className)); throw new AuthorizationException(sprintf('Cannot handle class "%s"', $this->className));
case Account::class: case Account::class:
$this->acceptedRoles[] = UserRoleEnum::MANAGE_TRANSACTIONS; $this->acceptedRoles[] = UserRoleEnum::MANAGE_TRANSACTIONS;
break; break;
} }
} }
$this->validateUserGroup((int)$value, $fail); $this->validateUserGroup((int)$value, $fail);
} }
private function validateUserGroup(int $userGroupId, Closure $fail): void { private function validateUserGroup(int $userGroupId, \Closure $fail): void
{
Log::debug(sprintf('validateUserGroup: %s', static::class)); Log::debug(sprintf('validateUserGroup: %s', static::class));
if (!auth()->check()) { if (!auth()->check()) {
Log::debug('validateUserGroup: user is not logged in, return NULL.'); Log::debug('validateUserGroup: user is not logged in, return NULL.');
$fail('validation.no_auth_user_group')->translate(); $fail('validation.no_auth_user_group')->translate();
return; return;
} }
/** @var User $user */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
if(0 !== $userGroupId) { if (0 !== $userGroupId) {
Log::debug(sprintf('validateUserGroup: user group submitted, search for memberships in group #%d.', $userGroupId)); Log::debug(sprintf('validateUserGroup: user group submitted, search for memberships in group #%d.', $userGroupId));
} }
if (0 === $userGroupId) { if (0 === $userGroupId) {
@@ -98,14 +99,16 @@ class IsAllowedGroupAction implements ValidationRule
if (0 === $memberships->count()) { if (0 === $memberships->count()) {
Log::debug(sprintf('validateUserGroup: user has no access to group #%d.', $userGroupId)); Log::debug(sprintf('validateUserGroup: user has no access to group #%d.', $userGroupId));
$fail('validation.no_access_user_group')->translate(); $fail('validation.no_access_user_group')->translate();
return; return;
} }
// need to get the group from the membership: // need to get the group from the membership:
$userGroup = $this->repository->getById($userGroupId); $userGroup = $this->repository->getById($userGroupId);
if (null === $userGroup) { if (null === $userGroup) {
Log::debug(sprintf('validateUserGroup: group #%d does not exist.', $userGroupId)); Log::debug(sprintf('validateUserGroup: group #%d does not exist.', $userGroupId));
$fail('validation.belongs_user_or_user_group')->translate(); $fail('validation.belongs_user_or_user_group')->translate();
return; return;
} }
Log::debug(sprintf('validateUserGroup: validate access of user to group #%d ("%s").', $userGroupId, $userGroup->title)); Log::debug(sprintf('validateUserGroup: validate access of user to group #%d ("%s").', $userGroupId, $userGroup->title));

View File

@@ -28,7 +28,6 @@ use FireflyIII\User;
trait UserGroupDetectable trait UserGroupDetectable
{ {
/** /**
* Return the user group or NULL if none is set. * Return the user group or NULL if none is set.
* Will throw exception if invalid. * Will throw exception if invalid.

View File

@@ -24,7 +24,6 @@ declare(strict_types=1);
namespace FireflyIII\Support\JsonApi\Concerns; namespace FireflyIII\Support\JsonApi\Concerns;
use FireflyIII\Models\UserGroup; use FireflyIII\Models\UserGroup;
use FireflyIII\User;
trait UsergroupAware trait UsergroupAware
{ {
@@ -46,5 +45,4 @@ trait UsergroupAware
return $this; return $this;
} }
} }

View File

@@ -69,16 +69,16 @@ class AccountEnrichment implements EnrichmentInterface
$this->collectMetaData(); $this->collectMetaData();
// $this->getMetaBalances(); // $this->getMetaBalances();
// $this->collection->transform(function (Account $account) { // $this->collection->transform(function (Account $account) {
// $account->user_array = ['id' => 1, 'bla bla' => 'bla']; // $account->user_array = ['id' => 1, 'bla bla' => 'bla'];
// $account->balances = collect([ // $account->balances = collect([
// ['balance_id' => 1, 'balance' => 5], // ['balance_id' => 1, 'balance' => 5],
// ['balance_id' => 2, 'balance' => 5], // ['balance_id' => 2, 'balance' => 5],
// ['balance_id' => 3, 'balance' => 5], // ['balance_id' => 3, 'balance' => 5],
// ]); // ]);
// //
// return $account; // return $account;
// }); // });
return $this->collection; return $this->collection;
} }
@@ -136,7 +136,7 @@ class AccountEnrichment implements EnrichmentInterface
$metaFields = $this->repository->getMetaValues($this->collection, ['currency_id', 'account_role', 'account_number', 'liability_direction', 'interest', 'interest_period', 'current_debt']); $metaFields = $this->repository->getMetaValues($this->collection, ['currency_id', 'account_role', 'account_number', 'liability_direction', 'interest', 'interest_period', 'current_debt']);
$currencyIds = $metaFields->where('name', 'currency_id')->pluck('data')->toArray(); $currencyIds = $metaFields->where('name', 'currency_id')->pluck('data')->toArray();
$currencies = []; $currencies = [];
foreach ($this->currencyRepository->getByIds($currencyIds) as $currency) { foreach ($this->currencyRepository->getByIds($currencyIds) as $currency) {
$id = $currency->id; $id = $currency->id;
$currencies[$id] = $currency; $currencies[$id] = $currency;
@@ -159,11 +159,13 @@ class AccountEnrichment implements EnrichmentInterface
}); });
} }
#[\Override] public function enrichSingle(Model $model): Model #[\Override]
public function enrichSingle(Model $model): Model
{ {
Log::debug(__METHOD__); Log::debug(__METHOD__);
$collection = new Collection([$model]); $collection = new Collection([$model]);
$collection = $this->enrich($collection); $collection = $this->enrich($collection);
return $collection->first(); return $collection->first();
} }
} }

View File

@@ -122,8 +122,8 @@ class AccountBalanceCalculator
$sumForeignAmount = '' === $sumForeignAmount ? '0' : $sumForeignAmount; $sumForeignAmount = '' === $sumForeignAmount ? '0' : $sumForeignAmount;
// at this point SQLite may return scientific notation because why not. Terrible. // at this point SQLite may return scientific notation because why not. Terrible.
$sumAmount = app('steam')->floatalize($sumAmount); $sumAmount = app('steam')->floatalize($sumAmount);
$sumForeignAmount = app('steam')->floatalize($sumForeignAmount); $sumForeignAmount = app('steam')->floatalize($sumForeignAmount);
// first create for normal currency: // first create for normal currency:
$entry = $this->getAccountBalanceByAccount($account, $transactionCurrency); $entry = $this->getAccountBalanceByAccount($account, $transactionCurrency);

24
composer.lock generated
View File

@@ -6421,16 +6421,16 @@
}, },
{ {
"name": "symfony/cache", "name": "symfony/cache",
"version": "v7.1.2", "version": "v7.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/cache.git", "url": "https://github.com/symfony/cache.git",
"reference": "e933e1d947ffb88efcdd34a2bd51561cab7deaae" "reference": "8ac37acee794372f9732fe8a61a8221f6762148e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/e933e1d947ffb88efcdd34a2bd51561cab7deaae", "url": "https://api.github.com/repos/symfony/cache/zipball/8ac37acee794372f9732fe8a61a8221f6762148e",
"reference": "e933e1d947ffb88efcdd34a2bd51561cab7deaae", "reference": "8ac37acee794372f9732fe8a61a8221f6762148e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -6498,7 +6498,7 @@
"psr6" "psr6"
], ],
"support": { "support": {
"source": "https://github.com/symfony/cache/tree/v7.1.2" "source": "https://github.com/symfony/cache/tree/v7.1.3"
}, },
"funding": [ "funding": [
{ {
@@ -6514,7 +6514,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-06-11T13:32:38+00:00" "time": "2024-07-17T06:10:24+00:00"
}, },
{ {
"name": "symfony/cache-contracts", "name": "symfony/cache-contracts",
@@ -8619,16 +8619,16 @@
}, },
{ {
"name": "symfony/psr-http-message-bridge", "name": "symfony/psr-http-message-bridge",
"version": "v7.1.1", "version": "v7.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/psr-http-message-bridge.git", "url": "https://github.com/symfony/psr-http-message-bridge.git",
"reference": "9a5dbb606da711f5d40a7596ad577856f9402140" "reference": "1365d10f5476f74a27cf9c2d1eee70c069019db0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/9a5dbb606da711f5d40a7596ad577856f9402140", "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/1365d10f5476f74a27cf9c2d1eee70c069019db0",
"reference": "9a5dbb606da711f5d40a7596ad577856f9402140", "reference": "1365d10f5476f74a27cf9c2d1eee70c069019db0",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -8682,7 +8682,7 @@
"psr-7" "psr-7"
], ],
"support": { "support": {
"source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.1" "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.3"
}, },
"funding": [ "funding": [
{ {
@@ -8698,7 +8698,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-05-31T14:57:53+00:00" "time": "2024-07-17T06:10:24+00:00"
}, },
{ {
"name": "symfony/routing", "name": "symfony/routing",

View File

@@ -117,7 +117,7 @@ return [
'expression_engine' => true, 'expression_engine' => true,
// see cer.php for exchange rates feature flag. // see cer.php for exchange rates feature flag.
], ],
'version' => 'develop/2024-07-22', 'version' => 'develop/2024-07-29',
'api_version' => '2.1.0', 'api_version' => '2.1.0',
'db_version' => 24, 'db_version' => 24,
@@ -503,13 +503,13 @@ return [
'remove_tag' => RemoveTag::class, 'remove_tag' => RemoveTag::class,
'remove_all_tags' => RemoveAllTags::class, 'remove_all_tags' => RemoveAllTags::class,
'set_description' => SetDescription::class, 'set_description' => SetDescription::class,
//'append_description' => AppendDescription::class, // 'append_description' => AppendDescription::class,
//'prepend_description' => PrependDescription::class, // 'prepend_description' => PrependDescription::class,
'set_source_account' => SetSourceAccount::class, 'set_source_account' => SetSourceAccount::class,
'set_destination_account' => SetDestinationAccount::class, 'set_destination_account' => SetDestinationAccount::class,
'set_notes' => SetNotes::class, 'set_notes' => SetNotes::class,
// 'append_notes' => AppendNotes::class, // 'append_notes' => AppendNotes::class,
// 'prepend_notes' => PrependNotes::class, // 'prepend_notes' => PrependNotes::class,
'clear_notes' => ClearNotes::class, 'clear_notes' => ClearNotes::class,
'link_to_bill' => LinkToBill::class, 'link_to_bill' => LinkToBill::class,
'convert_withdrawal' => ConvertToWithdrawal::class, 'convert_withdrawal' => ConvertToWithdrawal::class,
@@ -518,10 +518,10 @@ return [
'switch_accounts' => SwitchAccounts::class, 'switch_accounts' => SwitchAccounts::class,
'update_piggy' => UpdatePiggybank::class, 'update_piggy' => UpdatePiggybank::class,
'delete_transaction' => DeleteTransaction::class, 'delete_transaction' => DeleteTransaction::class,
// 'append_descr_to_notes' => AppendDescriptionToNotes::class, // 'append_descr_to_notes' => AppendDescriptionToNotes::class,
// 'append_notes_to_descr' => AppendNotesToDescription::class, // 'append_notes_to_descr' => AppendNotesToDescription::class,
// 'move_descr_to_notes' => MoveDescriptionToNotes::class, // 'move_descr_to_notes' => MoveDescriptionToNotes::class,
// 'move_notes_to_descr' => MoveNotesToDescription::class, // 'move_notes_to_descr' => MoveNotesToDescription::class,
'set_source_to_cash' => SetSourceToCashAccount::class, 'set_source_to_cash' => SetSourceToCashAccount::class,
'set_destination_to_cash' => SetDestinationToCashAccount::class, 'set_destination_to_cash' => SetDestinationToCashAccount::class,
'set_amount' => SetAmount::class, 'set_amount' => SetAmount::class,

View File

@@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
return [ return [
'cache-prefix' => '', 'cache-prefix' => '',
'enabled' => env('MODEL_CACHE_ENABLED', true), 'enabled' => env('MODEL_CACHE_ENABLED', true),

534
package-lock.json generated
View File

@@ -69,9 +69,9 @@
} }
}, },
"node_modules/@babel/compat-data": { "node_modules/@babel/compat-data": {
"version": "7.24.9", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.0.tgz",
"integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", "integrity": "sha512-P4fwKI2mjEb3ZU5cnMJzvRsRKGBUcs8jvxIoRmr6ufAY9Xk2Bz7JubRTTivkw55c7WQJfTECeqYVa+HZ0FzREg==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -117,12 +117,12 @@
} }
}, },
"node_modules/@babel/generator": { "node_modules/@babel/generator": {
"version": "7.24.10", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
"integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/types": "^7.24.9", "@babel/types": "^7.25.0",
"@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25", "@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1" "jsesc": "^2.5.1"
@@ -182,19 +182,17 @@
} }
}, },
"node_modules/@babel/helper-create-class-features-plugin": { "node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.24.8", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.8.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz",
"integrity": "sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==", "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-annotate-as-pure": "^7.24.7", "@babel/helper-annotate-as-pure": "^7.24.7",
"@babel/helper-environment-visitor": "^7.24.7",
"@babel/helper-function-name": "^7.24.7",
"@babel/helper-member-expression-to-functions": "^7.24.8", "@babel/helper-member-expression-to-functions": "^7.24.8",
"@babel/helper-optimise-call-expression": "^7.24.7", "@babel/helper-optimise-call-expression": "^7.24.7",
"@babel/helper-replace-supers": "^7.24.7", "@babel/helper-replace-supers": "^7.25.0",
"@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
"@babel/helper-split-export-declaration": "^7.24.7", "@babel/traverse": "^7.25.0",
"semver": "^6.3.1" "semver": "^6.3.1"
}, },
"engines": { "engines": {
@@ -214,9 +212,9 @@
} }
}, },
"node_modules/@babel/helper-create-regexp-features-plugin": { "node_modules/@babel/helper-create-regexp-features-plugin": {
"version": "7.24.7", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.0.tgz",
"integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==", "integrity": "sha512-q0T+dknZS+L5LDazIP+02gEZITG5unzvb6yIjcmj5i0eFrs5ToBV2m2JGH4EsE/gtP8ygEGLGApBgRIZkTm7zg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-annotate-as-pure": "^7.24.7", "@babel/helper-annotate-as-pure": "^7.24.7",
@@ -255,43 +253,6 @@
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
} }
}, },
"node_modules/@babel/helper-environment-visitor": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
"integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
"dev": true,
"dependencies": {
"@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-function-name": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
"integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
"dev": true,
"dependencies": {
"@babel/template": "^7.24.7",
"@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-hoist-variables": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
"integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
"dev": true,
"dependencies": {
"@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-member-expression-to-functions": { "node_modules/@babel/helper-member-expression-to-functions": {
"version": "7.24.8", "version": "7.24.8",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
@@ -319,16 +280,15 @@
} }
}, },
"node_modules/@babel/helper-module-transforms": { "node_modules/@babel/helper-module-transforms": {
"version": "7.24.9", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.0.tgz",
"integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", "integrity": "sha512-bIkOa2ZJYn7FHnepzr5iX9Kmz8FjIz4UKzJ9zhX3dnYuVW0xul9RuR3skBfoLu+FPTQw90EHW9rJsSZhyLQ3fQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-environment-visitor": "^7.24.7",
"@babel/helper-module-imports": "^7.24.7", "@babel/helper-module-imports": "^7.24.7",
"@babel/helper-simple-access": "^7.24.7", "@babel/helper-simple-access": "^7.24.7",
"@babel/helper-split-export-declaration": "^7.24.7", "@babel/helper-validator-identifier": "^7.24.7",
"@babel/helper-validator-identifier": "^7.24.7" "@babel/traverse": "^7.25.0"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -359,14 +319,14 @@
} }
}, },
"node_modules/@babel/helper-remap-async-to-generator": { "node_modules/@babel/helper-remap-async-to-generator": {
"version": "7.24.7", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
"integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-annotate-as-pure": "^7.24.7", "@babel/helper-annotate-as-pure": "^7.24.7",
"@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-wrap-function": "^7.25.0",
"@babel/helper-wrap-function": "^7.24.7" "@babel/traverse": "^7.25.0"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -376,14 +336,14 @@
} }
}, },
"node_modules/@babel/helper-replace-supers": { "node_modules/@babel/helper-replace-supers": {
"version": "7.24.7", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
"integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-member-expression-to-functions": "^7.24.8",
"@babel/helper-member-expression-to-functions": "^7.24.7", "@babel/helper-optimise-call-expression": "^7.24.7",
"@babel/helper-optimise-call-expression": "^7.24.7" "@babel/traverse": "^7.25.0"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -418,18 +378,6 @@
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-split-export-declaration": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
"integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
"dev": true,
"dependencies": {
"@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": { "node_modules/@babel/helper-string-parser": {
"version": "7.24.8", "version": "7.24.8",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
@@ -458,28 +406,27 @@
} }
}, },
"node_modules/@babel/helper-wrap-function": { "node_modules/@babel/helper-wrap-function": {
"version": "7.24.7", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
"integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-function-name": "^7.24.7", "@babel/template": "^7.25.0",
"@babel/template": "^7.24.7", "@babel/traverse": "^7.25.0",
"@babel/traverse": "^7.24.7", "@babel/types": "^7.25.0"
"@babel/types": "^7.24.7"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helpers": { "node_modules/@babel/helpers": {
"version": "7.24.8", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
"integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/template": "^7.24.7", "@babel/template": "^7.25.0",
"@babel/types": "^7.24.8" "@babel/types": "^7.25.0"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -563,9 +510,9 @@
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.24.8", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz",
"integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==",
"dev": true, "dev": true,
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
@@ -575,13 +522,28 @@
} }
}, },
"node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
"version": "7.24.7", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.0.tgz",
"integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==", "integrity": "sha512-dG0aApncVQwAUJa8tP1VHTnmU67BeIQvKafd3raEx315H54FfkZSz3B/TT+33ZQAjatGJA79gZqTtqL5QZUKXw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-plugin-utils": "^7.24.7" "@babel/traverse": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz",
"integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.24.8"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -591,12 +553,12 @@
} }
}, },
"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
"version": "7.24.7", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
"integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==", "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.24.7" "@babel/helper-plugin-utils": "^7.24.8"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -623,13 +585,13 @@
} }
}, },
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
"version": "7.24.7", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
"integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==", "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-plugin-utils": "^7.24.7" "@babel/traverse": "^7.25.0"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -921,15 +883,15 @@
} }
}, },
"node_modules/@babel/plugin-transform-async-generator-functions": { "node_modules/@babel/plugin-transform-async-generator-functions": {
"version": "7.24.7", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz",
"integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-remap-async-to-generator": "^7.25.0",
"@babel/helper-remap-async-to-generator": "^7.24.7", "@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-async-generators": "^7.8.4" "@babel/traverse": "^7.25.0"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -971,12 +933,12 @@
} }
}, },
"node_modules/@babel/plugin-transform-block-scoping": { "node_modules/@babel/plugin-transform-block-scoping": {
"version": "7.24.7", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
"integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.24.7" "@babel/helper-plugin-utils": "^7.24.8"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -1019,18 +981,16 @@
} }
}, },
"node_modules/@babel/plugin-transform-classes": { "node_modules/@babel/plugin-transform-classes": {
"version": "7.24.8", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.8.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz",
"integrity": "sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==", "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-annotate-as-pure": "^7.24.7", "@babel/helper-annotate-as-pure": "^7.24.7",
"@babel/helper-compilation-targets": "^7.24.8", "@babel/helper-compilation-targets": "^7.24.8",
"@babel/helper-environment-visitor": "^7.24.7",
"@babel/helper-function-name": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-replace-supers": "^7.24.7", "@babel/helper-replace-supers": "^7.25.0",
"@babel/helper-split-export-declaration": "^7.24.7", "@babel/traverse": "^7.25.0",
"globals": "^11.1.0" "globals": "^11.1.0"
}, },
"engines": { "engines": {
@@ -1102,6 +1062,22 @@
"@babel/core": "^7.0.0-0" "@babel/core": "^7.0.0-0"
} }
}, },
"node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz",
"integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==",
"dev": true,
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.25.0",
"@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/plugin-transform-dynamic-import": { "node_modules/@babel/plugin-transform-dynamic-import": {
"version": "7.24.7", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
@@ -1167,14 +1143,14 @@
} }
}, },
"node_modules/@babel/plugin-transform-function-name": { "node_modules/@babel/plugin-transform-function-name": {
"version": "7.24.7", "version": "7.25.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
"integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-compilation-targets": "^7.24.7", "@babel/helper-compilation-targets": "^7.24.8",
"@babel/helper-function-name": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-plugin-utils": "^7.24.7" "@babel/traverse": "^7.25.1"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -1279,15 +1255,15 @@
} }
}, },
"node_modules/@babel/plugin-transform-modules-systemjs": { "node_modules/@babel/plugin-transform-modules-systemjs": {
"version": "7.24.7", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
"integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==", "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-hoist-variables": "^7.24.7", "@babel/helper-module-transforms": "^7.25.0",
"@babel/helper-module-transforms": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-validator-identifier": "^7.24.7",
"@babel/helper-validator-identifier": "^7.24.7" "@babel/traverse": "^7.25.0"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -1706,19 +1682,20 @@
} }
}, },
"node_modules/@babel/preset-env": { "node_modules/@babel/preset-env": {
"version": "7.24.8", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.8.tgz", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.0.tgz",
"integrity": "sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==", "integrity": "sha512-vYAA8PrCOeZfG4D87hmw1KJ1BPubghXP1e2MacRFwECGNKL76dkA38JEwYllbvQCpf/kLxsTtir0b8MtxKoVCw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/compat-data": "^7.24.8", "@babel/compat-data": "^7.25.0",
"@babel/helper-compilation-targets": "^7.24.8", "@babel/helper-compilation-targets": "^7.24.8",
"@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-validator-option": "^7.24.8", "@babel/helper-validator-option": "^7.24.8",
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.0",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
"@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-properties": "^7.12.13",
@@ -1739,29 +1716,30 @@
"@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
"@babel/plugin-transform-arrow-functions": "^7.24.7", "@babel/plugin-transform-arrow-functions": "^7.24.7",
"@babel/plugin-transform-async-generator-functions": "^7.24.7", "@babel/plugin-transform-async-generator-functions": "^7.25.0",
"@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-async-to-generator": "^7.24.7",
"@babel/plugin-transform-block-scoped-functions": "^7.24.7", "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
"@babel/plugin-transform-block-scoping": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0",
"@babel/plugin-transform-class-properties": "^7.24.7", "@babel/plugin-transform-class-properties": "^7.24.7",
"@babel/plugin-transform-class-static-block": "^7.24.7", "@babel/plugin-transform-class-static-block": "^7.24.7",
"@babel/plugin-transform-classes": "^7.24.8", "@babel/plugin-transform-classes": "^7.25.0",
"@babel/plugin-transform-computed-properties": "^7.24.7", "@babel/plugin-transform-computed-properties": "^7.24.7",
"@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-destructuring": "^7.24.8",
"@babel/plugin-transform-dotall-regex": "^7.24.7", "@babel/plugin-transform-dotall-regex": "^7.24.7",
"@babel/plugin-transform-duplicate-keys": "^7.24.7", "@babel/plugin-transform-duplicate-keys": "^7.24.7",
"@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0",
"@babel/plugin-transform-dynamic-import": "^7.24.7", "@babel/plugin-transform-dynamic-import": "^7.24.7",
"@babel/plugin-transform-exponentiation-operator": "^7.24.7", "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
"@babel/plugin-transform-export-namespace-from": "^7.24.7", "@babel/plugin-transform-export-namespace-from": "^7.24.7",
"@babel/plugin-transform-for-of": "^7.24.7", "@babel/plugin-transform-for-of": "^7.24.7",
"@babel/plugin-transform-function-name": "^7.24.7", "@babel/plugin-transform-function-name": "^7.25.0",
"@babel/plugin-transform-json-strings": "^7.24.7", "@babel/plugin-transform-json-strings": "^7.24.7",
"@babel/plugin-transform-literals": "^7.24.7", "@babel/plugin-transform-literals": "^7.24.7",
"@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
"@babel/plugin-transform-member-expression-literals": "^7.24.7", "@babel/plugin-transform-member-expression-literals": "^7.24.7",
"@babel/plugin-transform-modules-amd": "^7.24.7", "@babel/plugin-transform-modules-amd": "^7.24.7",
"@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-modules-commonjs": "^7.24.8",
"@babel/plugin-transform-modules-systemjs": "^7.24.7", "@babel/plugin-transform-modules-systemjs": "^7.25.0",
"@babel/plugin-transform-modules-umd": "^7.24.7", "@babel/plugin-transform-modules-umd": "^7.24.7",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
"@babel/plugin-transform-new-target": "^7.24.7", "@babel/plugin-transform-new-target": "^7.24.7",
@@ -1830,9 +1808,9 @@
"dev": true "dev": true
}, },
"node_modules/@babel/runtime": { "node_modules/@babel/runtime": {
"version": "7.24.8", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
"integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==",
"dependencies": { "dependencies": {
"regenerator-runtime": "^0.14.0" "regenerator-runtime": "^0.14.0"
}, },
@@ -1841,33 +1819,30 @@
} }
}, },
"node_modules/@babel/template": { "node_modules/@babel/template": {
"version": "7.24.7", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
"integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.24.7", "@babel/code-frame": "^7.24.7",
"@babel/parser": "^7.24.7", "@babel/parser": "^7.25.0",
"@babel/types": "^7.24.7" "@babel/types": "^7.25.0"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/traverse": { "node_modules/@babel/traverse": {
"version": "7.24.8", "version": "7.25.1",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.1.tgz",
"integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", "integrity": "sha512-LrHHoWq08ZpmmFqBAzN+hUdWwy5zt7FGa/hVwMcOqW6OVtwqaoD5utfuGYU87JYxdZgLUvktAsn37j/sYR9siA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.24.7", "@babel/code-frame": "^7.24.7",
"@babel/generator": "^7.24.8", "@babel/generator": "^7.25.0",
"@babel/helper-environment-visitor": "^7.24.7", "@babel/parser": "^7.25.0",
"@babel/helper-function-name": "^7.24.7", "@babel/template": "^7.25.0",
"@babel/helper-hoist-variables": "^7.24.7", "@babel/types": "^7.25.0",
"@babel/helper-split-export-declaration": "^7.24.7",
"@babel/parser": "^7.24.8",
"@babel/types": "^7.24.8",
"debug": "^4.3.1", "debug": "^4.3.1",
"globals": "^11.1.0" "globals": "^11.1.0"
}, },
@@ -1876,9 +1851,9 @@
} }
}, },
"node_modules/@babel/types": { "node_modules/@babel/types": {
"version": "7.24.9", "version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.0.tgz",
"integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", "integrity": "sha512-LcnxQSsd9aXOIgmmSpvZ/1yo46ra2ESYyqLcryaBZOghxy5qqOBjvCWP5JfkI8yl9rlxRgdLTTMCQQRcN2hdCg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-string-parser": "^7.24.8", "@babel/helper-string-parser": "^7.24.8",
@@ -2410,9 +2385,9 @@
} }
}, },
"node_modules/@rollup/rollup-android-arm-eabi": { "node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.1.tgz",
"integrity": "sha512-JlPfZ/C7yn5S5p0yKk7uhHTTnFlvTgLetl2VxqE518QgyM7C9bSfFTYvB/Q/ftkq0RIPY4ySxTz+/wKJ/dXC0w==", "integrity": "sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -2423,9 +2398,9 @@
] ]
}, },
"node_modules/@rollup/rollup-android-arm64": { "node_modules/@rollup/rollup-android-arm64": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.1.tgz",
"integrity": "sha512-RDxUSY8D1tWYfn00DDi5myxKgOk6RvWPxhmWexcICt/MEC6yEMr4HNCu1sXXYLw8iAsg0D44NuU+qNq7zVWCrw==", "integrity": "sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -2436,9 +2411,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-arm64": { "node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.1.tgz",
"integrity": "sha512-emvKHL4B15x6nlNTBMtIaC9tLPRpeA5jMvRLXVbl/W9Ie7HhkrE7KQjvgS9uxgatL1HmHWDXk5TTS4IaNJxbAA==", "integrity": "sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -2449,9 +2424,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-x64": { "node_modules/@rollup/rollup-darwin-x64": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.1.tgz",
"integrity": "sha512-fO28cWA1dC57qCd+D0rfLC4VPbh6EOJXrreBmFLWPGI9dpMlER2YwSPZzSGfq11XgcEpPukPTfEVFtw2q2nYJg==", "integrity": "sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -2462,9 +2437,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm-gnueabihf": { "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.1.tgz",
"integrity": "sha512-2Rn36Ubxdv32NUcfm0wB1tgKqkQuft00PtM23VqLuCUR4N5jcNWDoV5iBC9jeGdgS38WK66ElncprqgMUOyomw==", "integrity": "sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -2475,9 +2450,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm-musleabihf": { "node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.1.tgz",
"integrity": "sha512-gJuzIVdq/X1ZA2bHeCGCISe0VWqCoNT8BvkQ+BfsixXwTOndhtLUpOg0A1Fcx/+eA6ei6rMBzlOz4JzmiDw7JQ==", "integrity": "sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -2488,9 +2463,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-gnu": { "node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.1.tgz",
"integrity": "sha512-0EkX2HYPkSADo9cfeGFoQ7R0/wTKb7q6DdwI4Yn/ULFE1wuRRCHybxpl2goQrx4c/yzK3I8OlgtBu4xvted0ug==", "integrity": "sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -2501,9 +2476,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-musl": { "node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.1.tgz",
"integrity": "sha512-GlIQRj9px52ISomIOEUq/IojLZqzkvRpdP3cLgIE1wUWaiU5Takwlzpz002q0Nxxr1y2ZgxC2obWxjr13lvxNQ==", "integrity": "sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -2514,9 +2489,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": { "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.1.tgz",
"integrity": "sha512-N6cFJzssruDLUOKfEKeovCKiHcdwVYOT1Hs6dovDQ61+Y9n3Ek4zXvtghPPelt6U0AH4aDGnDLb83uiJMkWYzQ==", "integrity": "sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@@ -2527,9 +2502,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-riscv64-gnu": { "node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.1.tgz",
"integrity": "sha512-2DnD3mkS2uuam/alF+I7M84koGwvn3ZVD7uG+LEWpyzo/bq8+kKnus2EVCkcvh6PlNB8QPNFOz6fWd5N8o1CYg==", "integrity": "sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
@@ -2540,9 +2515,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-s390x-gnu": { "node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.1.tgz",
"integrity": "sha512-D6pkaF7OpE7lzlTOFCB2m3Ngzu2ykw40Nka9WmKGUOTS3xcIieHe82slQlNq69sVB04ch73thKYIWz/Ian8DUA==", "integrity": "sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==",
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
@@ -2553,9 +2528,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-gnu": { "node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz",
"integrity": "sha512-HBndjQLP8OsdJNSxpNIN0einbDmRFg9+UQeZV1eiYupIRuZsDEoeGU43NQsS34Pp166DtwQOnpcbV/zQxM+rWA==", "integrity": "sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -2566,9 +2541,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-musl": { "node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.1.tgz",
"integrity": "sha512-HxfbvfCKJe/RMYJJn0a12eiOI9OOtAUF4G6ozrFUK95BNyoJaSiBjIOHjZskTUffUrB84IPKkFG9H9nEvJGW6A==", "integrity": "sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -2579,9 +2554,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-arm64-msvc": { "node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.1.tgz",
"integrity": "sha512-HxDMKIhmcguGTiP5TsLNolwBUK3nGGUEoV/BO9ldUBoMLBssvh4J0X8pf11i1fTV7WShWItB1bKAKjX4RQeYmg==", "integrity": "sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -2592,9 +2567,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-ia32-msvc": { "node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.1.tgz",
"integrity": "sha512-xItlIAZZaiG/u0wooGzRsx11rokP4qyc/79LkAOdznGRAbOFc+SfEdfUOszG1odsHNgwippUJavag/+W/Etc6Q==", "integrity": "sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@@ -2605,9 +2580,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-x64-msvc": { "node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.1.tgz",
"integrity": "sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==", "integrity": "sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -2716,9 +2691,9 @@
} }
}, },
"node_modules/@types/eslint": { "node_modules/@types/eslint": {
"version": "8.56.10", "version": "9.6.0",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz",
"integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/estree": "*", "@types/estree": "*",
@@ -2855,12 +2830,12 @@
"dev": true "dev": true
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "20.14.11", "version": "22.0.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.0.tgz",
"integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", "integrity": "sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"undici-types": "~5.26.4" "undici-types": "~6.11.1"
} }
}, },
"node_modules/@types/node-forge": { "node_modules/@types/node-forge": {
@@ -4816,9 +4791,9 @@
"dev": true "dev": true
}, },
"node_modules/debug": { "node_modules/debug": {
"version": "4.3.5", "version": "4.3.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
"integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"ms": "2.1.2" "ms": "2.1.2"
@@ -5108,9 +5083,9 @@
"dev": true "dev": true
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.832", "version": "1.5.2",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.832.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.2.tgz",
"integrity": "sha512-cTen3SB0H2SGU7x467NRe1eVcQgcuS6jckKfWJHia2eo0cHIGOqHoAxevIYZD4eRHcWjkvFzo93bi3vJ9W+1lA==", "integrity": "sha512-kc4r3U3V3WLaaZqThjYz/Y6z8tJe+7K0bbjUVo3i+LWIypVdMx5nXCkwRe6SWbY6ILqLdc1rKcKmr3HoH7wjSQ==",
"dev": true "dev": true
}, },
"node_modules/elliptic": { "node_modules/elliptic": {
@@ -5159,9 +5134,9 @@
} }
}, },
"node_modules/enhanced-resolve": { "node_modules/enhanced-resolve": {
"version": "5.17.0", "version": "5.17.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
"integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"graceful-fs": "^4.2.4", "graceful-fs": "^4.2.4",
@@ -6453,9 +6428,9 @@
} }
}, },
"node_modules/immutable": { "node_modules/immutable": {
"version": "4.3.6", "version": "4.3.7",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
"integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
"dev": true "dev": true
}, },
"node_modules/import-fresh": { "node_modules/import-fresh": {
@@ -6475,9 +6450,9 @@
} }
}, },
"node_modules/import-local": { "node_modules/import-local": {
"version": "3.1.0", "version": "3.2.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
"integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"pkg-dir": "^4.2.0", "pkg-dir": "^4.2.0",
@@ -7885,9 +7860,9 @@
} }
}, },
"node_modules/patch-package/node_modules/yaml": { "node_modules/patch-package/node_modules/yaml": {
"version": "2.4.5", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz",
"integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==",
"dev": true, "dev": true,
"bin": { "bin": {
"yaml": "bin.mjs" "yaml": "bin.mjs"
@@ -9019,9 +8994,9 @@
} }
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "4.19.0", "version": "4.19.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.0.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.1.tgz",
"integrity": "sha512-5r7EYSQIowHsK4eTZ0Y81qpZuJz+MUuYeqmmYmRMl1nwhdmbiYqt5jwzf6u7wyOzJgYqtCRMtVRKOtHANBz7rA==", "integrity": "sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/estree": "1.0.5" "@types/estree": "1.0.5"
@@ -9034,22 +9009,22 @@
"npm": ">=8.0.0" "npm": ">=8.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.19.0", "@rollup/rollup-android-arm-eabi": "4.19.1",
"@rollup/rollup-android-arm64": "4.19.0", "@rollup/rollup-android-arm64": "4.19.1",
"@rollup/rollup-darwin-arm64": "4.19.0", "@rollup/rollup-darwin-arm64": "4.19.1",
"@rollup/rollup-darwin-x64": "4.19.0", "@rollup/rollup-darwin-x64": "4.19.1",
"@rollup/rollup-linux-arm-gnueabihf": "4.19.0", "@rollup/rollup-linux-arm-gnueabihf": "4.19.1",
"@rollup/rollup-linux-arm-musleabihf": "4.19.0", "@rollup/rollup-linux-arm-musleabihf": "4.19.1",
"@rollup/rollup-linux-arm64-gnu": "4.19.0", "@rollup/rollup-linux-arm64-gnu": "4.19.1",
"@rollup/rollup-linux-arm64-musl": "4.19.0", "@rollup/rollup-linux-arm64-musl": "4.19.1",
"@rollup/rollup-linux-powerpc64le-gnu": "4.19.0", "@rollup/rollup-linux-powerpc64le-gnu": "4.19.1",
"@rollup/rollup-linux-riscv64-gnu": "4.19.0", "@rollup/rollup-linux-riscv64-gnu": "4.19.1",
"@rollup/rollup-linux-s390x-gnu": "4.19.0", "@rollup/rollup-linux-s390x-gnu": "4.19.1",
"@rollup/rollup-linux-x64-gnu": "4.19.0", "@rollup/rollup-linux-x64-gnu": "4.19.1",
"@rollup/rollup-linux-x64-musl": "4.19.0", "@rollup/rollup-linux-x64-musl": "4.19.1",
"@rollup/rollup-win32-arm64-msvc": "4.19.0", "@rollup/rollup-win32-arm64-msvc": "4.19.1",
"@rollup/rollup-win32-ia32-msvc": "4.19.0", "@rollup/rollup-win32-ia32-msvc": "4.19.1",
"@rollup/rollup-win32-x64-msvc": "4.19.0", "@rollup/rollup-win32-x64-msvc": "4.19.1",
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
}, },
@@ -9928,9 +9903,9 @@
} }
}, },
"node_modules/undici-types": { "node_modules/undici-types": {
"version": "5.26.5", "version": "6.11.1",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==",
"dev": true "dev": true
}, },
"node_modules/unicode-canonical-property-names-ecmascript": { "node_modules/unicode-canonical-property-names-ecmascript": {
@@ -10040,13 +10015,16 @@
} }
}, },
"node_modules/url": { "node_modules/url": {
"version": "0.11.3", "version": "0.11.4",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz",
"integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"punycode": "^1.4.1", "punycode": "^1.4.1",
"qs": "^6.11.2" "qs": "^6.12.3"
},
"engines": {
"node": ">= 0.4"
} }
}, },
"node_modules/util": { "node_modules/util": {
@@ -10105,9 +10083,9 @@
} }
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "5.3.4", "version": "5.3.5",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.3.4.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz",
"integrity": "sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==", "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"esbuild": "^0.21.3", "esbuild": "^0.21.3",

View File

@@ -268,7 +268,7 @@ return [
'auto_budget_period_mandatory' => 'The auto budget period is a mandatory field.', 'auto_budget_period_mandatory' => 'The auto budget period is a mandatory field.',
// no access to administration: // no access to administration:
'no_auth_user_group' => 'You have to be logged in to access this administration.', 'no_auth_user_group' => 'You have to be logged in to access this administration.',
'no_access_user_group' => 'You do not have the correct access rights for this administration.', 'no_access_user_group' => 'You do not have the correct access rights for this administration.',
'administration_owner_rename' => 'You can\'t rename your standard administration.', 'administration_owner_rename' => 'You can\'t rename your standard administration.',
]; ];

View File

@@ -38,11 +38,7 @@ use LaravelJsonApi\Laravel\Routing\ResourceRegistrar;
* \__/ |____| | _| `._____| \______/ \______/ |__| |_______|_______/ * \__/ |____| | _| `._____| \______/ \______/ |__| |_______|_______/
*/ */
// AUTOCOMPLETE ROUTES
/**
* AUTOCOMPLETE ROUTES
*/
Route::group( Route::group(
[ [
'namespace' => 'FireflyIII\Api\V2\Controllers\Autocomplete', 'namespace' => 'FireflyIII\Api\V2\Controllers\Autocomplete',
@@ -57,9 +53,7 @@ Route::group(
} }
); );
/** // CHART ROUTES
* CHART ROUTES
*/
Route::group( Route::group(
[ [
'namespace' => 'FireflyIII\Api\V2\Controllers\Chart', 'namespace' => 'FireflyIII\Api\V2\Controllers\Chart',
@@ -68,14 +62,12 @@ Route::group(
], ],
static function (): void { static function (): void {
Route::get('account/dashboard', ['uses' => 'AccountController@dashboard', 'as' => 'account.dashboard']); Route::get('account/dashboard', ['uses' => 'AccountController@dashboard', 'as' => 'account.dashboard']);
Route::get('budget/dashboard', ['uses' => 'BudgetController@dashboard', 'as' => 'budget.dashboard']); Route::get('budget/dashboard', ['uses' => 'BudgetController@dashboard', 'as' => 'budget.dashboard']);
Route::get('category/dashboard', ['uses' => 'CategoryController@dashboard', 'as' => 'category.dashboard']); Route::get('category/dashboard', ['uses' => 'CategoryController@dashboard', 'as' => 'category.dashboard']);
Route::get('balance/balance', ['uses' => 'BalanceController@balance', 'as' => 'balance.balance']); Route::get('balance/balance', ['uses' => 'BalanceController@balance', 'as' => 'balance.balance']);
} }
); );
// V2 API route for Summary boxes // V2 API route for Summary boxes
// BASIC // BASIC
Route::group( Route::group(
@@ -121,8 +113,8 @@ Route::group(
} }
); );
//// V2 API route for accounts. // // V2 API route for accounts.
//Route::group( // Route::group(
// [ // [
// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Account', // 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Account',
// 'prefix' => 'v2/accounts', // 'prefix' => 'v2/accounts',
@@ -133,7 +125,7 @@ Route::group(
// Route::get('{account}', ['uses' => 'ShowController@show', 'as' => 'show']); // Route::get('{account}', ['uses' => 'ShowController@show', 'as' => 'show']);
// Route::put('{account}', ['uses' => 'UpdateController@update', 'as' => 'update']); // Route::put('{account}', ['uses' => 'UpdateController@update', 'as' => 'update']);
// } // }
//); // );
// V2 API route for subscriptions. // V2 API route for subscriptions.
Route::group( Route::group(
@@ -247,26 +239,21 @@ Route::group(
} }
); );
/** // V2 JSON API ROUTES
* V2 JSON API ROUTES
*/
JsonApiRoute::server('v2')->prefix('v2') JsonApiRoute::server('v2')->prefix('v2')
->resources(function (ResourceRegistrar $server) { ->resources(function (ResourceRegistrar $server): void {
/** // ACCOUNTS
* ACCOUNTS $server->resource('accounts', AccountController::class)->readOnly()->relationships(function (Relationships $relations): void {
*/ $relations->hasOne('user')->readOnly();
$server->resource('accounts', AccountController::class)->readOnly()->relationships(function (Relationships $relations) { });
$relations->hasOne('user')->readOnly(); // $server->resource('accounts', AccountController::class)->readOnly();
});
// $server->resource('accounts', AccountController::class)->readOnly();
/** // USERS
* USERS $server->resource('users', JsonApiController::class)->readOnly()->relationships(function (Relationships $relations): void {
*/ $relations->hasMany('accounts')->readOnly();
$server->resource('users', JsonApiController::class)->readOnly()->relationships(function (Relationships $relations) { });
$relations->hasMany('accounts')->readOnly(); })
}); ;
});
/* /*
* ____ ____ __ .______ ______ __ __ .___________. _______ _______. * ____ ____ __ .______ ______ __ __ .___________. _______ _______.