From 7efda2f890030f36af4a79490bb24d158a865b87 Mon Sep 17 00:00:00 2001
From: BernatVM <39736637+BernatVM@users.noreply.github.com>
Date: Tue, 30 Jul 2024 14:30:08 +0200
Subject: [PATCH 01/16] Feature/improve language localization for Catalan
(#3598)
* Update translations
* Update changelog
---
CHANGELOG.md | 6 +
apps/client/src/locales/messages.ca.xlf | 378 ++++++++++++------------
2 files changed, 195 insertions(+), 189 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index dc7fb9408..2e261220d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## Unreleased
+
+### Changed
+
+- Improved the language localization for Catalan (`ca`)
+
## 2.99.0 - 2024-07-29
### Changed
diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf
index a423dde12..7ff136408 100644
--- a/apps/client/src/locales/messages.ca.xlf
+++ b/apps/client/src/locales/messages.ca.xlf
@@ -3,7 +3,7 @@
Features
- Features
+ Característiques
apps/client/src/app/app-routing.module.ts
65
@@ -11,7 +11,7 @@
Internationalization
- Internationalization
+ Internacionalització
apps/client/src/app/app-routing.module.ts
79
@@ -19,7 +19,7 @@
Sign in
- Sign in
+ Iniciar sessió
apps/client/src/app/app-routing.module.ts
141
@@ -31,7 +31,7 @@
You are using the Live Demo.
- You are using the Live Demo.
+ Esteu utilitzant una demo.
apps/client/src/app/app.component.html
12
@@ -39,7 +39,7 @@
Create Account
- Create Account
+ Crea un Compte
apps/client/src/app/app.component.html
13
@@ -55,7 +55,7 @@
Personal Finance
- Personal Finance
+ Finances Personals
apps/client/src/app/app.component.html
54
@@ -63,7 +63,7 @@
Markets
- Markets
+ Mercats
apps/client/src/app/app.component.html
58
@@ -83,7 +83,7 @@
Resources
- Resources
+ Recursos
apps/client/src/app/app.component.html
61
@@ -103,7 +103,7 @@
About
- About
+ Sobre
apps/client/src/app/app.component.html
67
@@ -119,7 +119,7 @@
Blog
- Blog
+ Blog
apps/client/src/app/app.component.html
70
@@ -207,7 +207,7 @@
Changelog
- Changelog
+ Registre de canvis
apps/client/src/app/app.component.html
74
@@ -219,7 +219,7 @@
Features
- Features
+ Característiques
apps/client/src/app/app.component.html
76
@@ -235,7 +235,7 @@
Frequently Asked Questions (FAQ)
- Frequently Asked Questions (FAQ)
+ Preguntes Freqüents (FAQ)
apps/client/src/app/app.component.html
80
@@ -247,7 +247,7 @@
License
- License
+ Llicències
apps/client/src/app/app.component.html
85
@@ -259,7 +259,7 @@
Pricing
- Pricing
+ Preu
apps/client/src/app/app.component.html
94
@@ -283,7 +283,7 @@
Privacy Policy
- Privacy Policy
+ Política de privacitat
apps/client/src/app/app.component.html
100
@@ -295,7 +295,7 @@
Community
- Community
+ Comunitat
apps/client/src/app/app.component.html
118
@@ -335,7 +335,7 @@
The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term.
- The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term.
+ El risc d'assumir pèrdues en les inversions és substancial. No és recomanable invertir diners que pugui necessitar a curt termini.
apps/client/src/app/app.component.html
199
@@ -343,7 +343,7 @@
about
- about
+ sobre
apps/client/src/app/app.component.ts
59
@@ -427,7 +427,7 @@
license
- license
+ llicències
apps/client/src/app/app.component.ts
61
@@ -443,7 +443,7 @@
privacy-policy
- privacy-policy
+ política de privacitat
apps/client/src/app/app.component.ts
64
@@ -459,7 +459,7 @@
faq
- faq
+ faq
apps/client/src/app/app.component.ts
66
@@ -491,7 +491,7 @@
features
- features
+ característiques
apps/client/src/app/app.component.ts
67
@@ -555,7 +555,7 @@
markets
- markets
+ mercats
apps/client/src/app/app.component.ts
68
@@ -587,7 +587,7 @@
pricing
- pricing
+ preu
apps/client/src/app/app.component.ts
69
@@ -655,7 +655,7 @@
register
- register
+ registrar-se
apps/client/src/app/app.component.ts
70
@@ -691,7 +691,7 @@
resources
- resources
+ recursos
apps/client/src/app/app.component.ts
71
@@ -743,7 +743,7 @@
Alias
- Alias
+ Àlies
apps/client/src/app/components/access-table/access-table.component.html
4
@@ -763,7 +763,7 @@
Permission
- Permission
+ Permisos
apps/client/src/app/components/access-table/access-table.component.html
18
@@ -775,7 +775,7 @@
View
- View
+ Vista
apps/client/src/app/components/access-table/access-table.component.html
23
@@ -787,7 +787,7 @@
Restricted view
- Restricted view
+ Vista restringida
apps/client/src/app/components/access-table/access-table.component.html
26
@@ -799,7 +799,7 @@
Details
- Details
+ Detalls
apps/client/src/app/components/access-table/access-table.component.html
33
@@ -807,7 +807,7 @@
Revoke
- Revoke
+ Revocar
apps/client/src/app/components/access-table/access-table.component.html
62
@@ -815,7 +815,7 @@
Do you really want to revoke this granted access?
- Do you really want to revoke this granted access?
+ Realment vol revocar aquest accés?
apps/client/src/app/components/access-table/access-table.component.ts
50
@@ -823,7 +823,7 @@
Cash Balance
- Cash Balance
+ Balanç de Caixa
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
45
@@ -839,7 +839,7 @@
Equity
- Equity
+ Patrimoni
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
56
@@ -847,7 +847,7 @@
Activities
- Activities
+ Activitats
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
61
@@ -887,7 +887,7 @@
Platform
- Platform
+ Plataforma
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
65
@@ -903,7 +903,7 @@
Holdings
- Holdings
+ En cartera
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
77
@@ -923,7 +923,7 @@
Cash Balances
- Cash Balances
+ Balanç de Caixa
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
115
@@ -931,7 +931,7 @@
Transfer Cash Balance
- Transfer Cash Balance
+ Transferir Efectiu
apps/client/src/app/components/accounts-table/accounts-table.component.html
10
@@ -943,7 +943,7 @@
Name
- Name
+ Nom
apps/client/src/app/components/accounts-table/accounts-table.component.html
43
@@ -995,7 +995,7 @@
Total
- Total
+ Total
apps/client/src/app/components/accounts-table/accounts-table.component.html
55
@@ -1003,7 +1003,7 @@
Currency
- Currency
+ Divisa
apps/client/src/app/components/accounts-table/accounts-table.component.html
65
@@ -1031,7 +1031,7 @@
Value
- Value
+ Valor
apps/client/src/app/components/accounts-table/accounts-table.component.html
171
@@ -1095,7 +1095,7 @@
Edit
- Edit
+ Editar
apps/client/src/app/components/accounts-table/accounts-table.component.html
278
@@ -1123,7 +1123,7 @@
Delete
- Delete
+ Suprimir
apps/client/src/app/components/accounts-table/accounts-table.component.html
288
@@ -1163,7 +1163,7 @@
Do you really want to delete this account?
- Do you really want to delete this account?
+ Realment vol suprimir aquest compte?
apps/client/src/app/components/accounts-table/accounts-table.component.ts
101
@@ -1171,7 +1171,7 @@
Type
- Type
+ Tipus
apps/client/src/app/components/admin-jobs/admin-jobs.html
31
@@ -1191,7 +1191,7 @@
Asset Profile
- Asset Profile
+ Perfil d'Actiu
apps/client/src/app/components/admin-jobs/admin-jobs.html
35
@@ -1199,7 +1199,7 @@
Historical Market Data
- Historical Market Data
+ Dades Històriques de Mercat
apps/client/src/app/components/admin-jobs/admin-jobs.html
37
@@ -1207,7 +1207,7 @@
Symbol
- Symbol
+ Símbol
apps/client/src/app/components/admin-jobs/admin-jobs.html
44
@@ -1231,7 +1231,7 @@
Data Source
- Data Source
+ Origen de les Dades
apps/client/src/app/components/admin-jobs/admin-jobs.html
53
@@ -1251,7 +1251,7 @@
Priority
- Priority
+ Prioritat
apps/client/src/app/components/admin-jobs/admin-jobs.html
62
@@ -1259,7 +1259,7 @@
Attempts
- Attempts
+ Intents
apps/client/src/app/components/admin-jobs/admin-jobs.html
81
@@ -1267,7 +1267,7 @@
Created
- Created
+ Creat
apps/client/src/app/components/admin-jobs/admin-jobs.html
90
@@ -1275,7 +1275,7 @@
Finished
- Finished
+ Finalitzat
apps/client/src/app/components/admin-jobs/admin-jobs.html
99
@@ -1283,7 +1283,7 @@
Status
- Status
+ Estat
apps/client/src/app/components/admin-jobs/admin-jobs.html
108
@@ -1291,7 +1291,7 @@
Delete Jobs
- Delete Jobs
+ Aturar Processos
apps/client/src/app/components/admin-jobs/admin-jobs.html
149
@@ -1299,7 +1299,7 @@
View Data
- View Data
+ Veure les Dades
apps/client/src/app/components/admin-jobs/admin-jobs.html
164
@@ -1315,7 +1315,7 @@
Execute Job
- Execute Job
+ Executar Procés
apps/client/src/app/components/admin-jobs/admin-jobs.html
174
@@ -1323,7 +1323,7 @@
Delete Job
- Delete Job
+ Suprimir Procés
apps/client/src/app/components/admin-jobs/admin-jobs.html
177
@@ -1331,7 +1331,7 @@
Details for
- Details for
+ Detalls de
apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html
2
@@ -1339,7 +1339,7 @@
Date
- Date
+ Data
apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html
6
@@ -1359,7 +1359,7 @@
Market Price
- Market Price
+ Preu de Mercat
apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html
26
@@ -1371,7 +1371,7 @@
Cancel
- Cancel
+ Cancel·lar
apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html
46
@@ -1415,7 +1415,7 @@
Save
- Save
+ Guardar
apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html
48
@@ -1451,7 +1451,7 @@
Benchmarks
- Benchmarks
+ Punts de referència
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
80
@@ -1459,7 +1459,7 @@
Currencies
- Currencies
+ Divises
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
85
@@ -1467,7 +1467,7 @@
ETFs without Countries
- ETFs without Countries
+ ETFs sense País
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
90
@@ -1475,7 +1475,7 @@
ETFs without Sectors
- ETFs without Sectors
+ ETFs sense Sector
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
95
@@ -1483,7 +1483,7 @@
Filter by...
- Filter by...
+ Filtra per...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
322
@@ -1491,7 +1491,7 @@
Asset Class
- Asset Class
+ Classe d'Actiu
apps/client/src/app/components/admin-market-data/admin-market-data.html
86
@@ -1515,7 +1515,7 @@
Asset Sub Class
- Asset Sub Class
+ Subclasse d'Actiu
apps/client/src/app/components/admin-market-data/admin-market-data.html
95
@@ -1539,7 +1539,7 @@
First Activity
- First Activity
+ Primera Activitat
apps/client/src/app/components/admin-market-data/admin-market-data.html
104
@@ -1559,7 +1559,7 @@
Activities Count
- Activities Count
+ Nombre d'Activitats
apps/client/src/app/components/admin-market-data/admin-market-data.html
113
@@ -1567,7 +1567,7 @@
Historical Data
- Historical Data
+ Dades Històriques
apps/client/src/app/components/admin-market-data/admin-market-data.html
122
@@ -1579,7 +1579,7 @@
Sectors Count
- Sectors Count
+ Nombre de Sectors
apps/client/src/app/components/admin-market-data/admin-market-data.html
131
@@ -1587,7 +1587,7 @@
Countries Count
- Countries Count
+ Nombre de Països
apps/client/src/app/components/admin-market-data/admin-market-data.html
140
@@ -1595,7 +1595,7 @@
Gather Recent Data
- Gather Recent Data
+ Recopilar Dades Recents
apps/client/src/app/components/admin-market-data/admin-market-data.html
177
@@ -1603,7 +1603,7 @@
Gather All Data
- Gather All Data
+ Recopilar Totes les Dades
apps/client/src/app/components/admin-market-data/admin-market-data.html
180
@@ -1611,7 +1611,7 @@
Gather Profile Data
- Gather Profile Data
+ Recopilar Dades del Perfil
apps/client/src/app/components/admin-market-data/admin-market-data.html
183
@@ -1623,7 +1623,7 @@
Delete Profiles
- Delete Profiles
+ Eliminar Perfils
apps/client/src/app/components/admin-market-data/admin-market-data.html
190
@@ -1631,7 +1631,7 @@
Do you really want to delete this asset profile?
- Do you really want to delete this asset profile?
+ Realment vol eliminar el perfil d'aquest actiu?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
18
@@ -1639,7 +1639,7 @@
Do you really want to delete these profiles?
- Do you really want to delete these profiles?
+ Realment vol eliminar aquests perfils?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
34
@@ -1647,7 +1647,7 @@
Oops! Could not delete profiles.
- Oops! Could not delete profiles.
+ Oooh! No s'han pogut eliminar els perfils
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
45
@@ -1655,7 +1655,7 @@
Oops! Could not parse historical data.
- Oops! Could not parse historical data.
+ Oooh! No s'han pogut recopilar les dades históriques.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
232
@@ -1663,7 +1663,7 @@
The current market price is
- The current market price is
+ El preu de mercat actual és
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
336
@@ -1671,7 +1671,7 @@
Refresh
- Refresh
+ Refrescar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
22
@@ -1679,7 +1679,7 @@
Gather Historical Data
- Gather Historical Data
+ Recopilar Dades Històriques
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
32
@@ -1687,7 +1687,7 @@
Import
- Import
+ Importar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
110
@@ -1703,7 +1703,7 @@
Sector
- Sector
+ Sector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
187
@@ -1715,7 +1715,7 @@
Country
- Country
+ País
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
198
@@ -1731,7 +1731,7 @@
Sectors
- Sectors
+ Sectors
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
204
@@ -1751,7 +1751,7 @@
Countries
- Countries
+ Països
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
214
@@ -1767,7 +1767,7 @@
Benchmark
- Benchmark
+ Referència
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
286
@@ -1775,7 +1775,7 @@
Symbol Mapping
- Symbol Mapping
+ Mapatge de Símbols
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
292
@@ -1783,7 +1783,7 @@
Scraper Configuration
- Scraper Configuration
+ Configuració del Proveïdor de Dades
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
304
@@ -1791,7 +1791,7 @@
Test
- Test
+ Prova
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
322
@@ -1799,7 +1799,7 @@
Url
- Url
+ Url
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
352
@@ -1815,7 +1815,7 @@
Note
- Note
+ Notes
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
365
@@ -1831,7 +1831,7 @@
Add Asset Profile
- Add Asset Profile
+ Afegeix el Perfil de l'Actiu
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
7
@@ -1839,7 +1839,7 @@
Search
- Search
+ Cerca
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
16
@@ -1847,7 +1847,7 @@
Add Manually
- Add Manually
+ Afegir manualment
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
19
@@ -1855,7 +1855,7 @@
Name, symbol or ISIN
- Name, symbol or ISIN
+ Nom, símbol o ISIN
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
26
@@ -1867,7 +1867,7 @@
Please add a currency:
- Please add a currency:
+ Si us plau, afegiu una divisa:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
122
@@ -1875,7 +1875,7 @@
is an invalid currency!
- is an invalid currency!
+ no és una divisa vàlida!
apps/client/src/app/components/admin-overview/admin-overview.component.ts
129
@@ -1883,7 +1883,7 @@
Do you really want to delete this coupon?
- Do you really want to delete this coupon?
+ Està segur qeu vol eliminar aquest cupó?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
140
@@ -1891,7 +1891,7 @@
Do you really want to delete this currency?
- Do you really want to delete this currency?
+ Està segur que vol eliminar aquesta divisa?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
153
@@ -1899,7 +1899,7 @@
Do you really want to delete this system message?
- Do you really want to delete this system message?
+ Està segur que vol eliminar aquest missatge del sistema?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
166
@@ -1907,7 +1907,7 @@
Do you really want to flush the cache?
- Do you really want to flush the cache?
+ Està segur que vol depurar el cache?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
183
@@ -1915,7 +1915,7 @@
Please set your system message:
- Please set your system message:
+ Si us plau, afegeixi el seu missatge del sistema:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
214
@@ -1923,7 +1923,7 @@
Version
- Version
+ Versió
apps/client/src/app/components/admin-overview/admin-overview.html
7
@@ -1931,7 +1931,7 @@
User Count
- User Count
+ Número d'Usuaris
apps/client/src/app/components/admin-overview/admin-overview.html
13
@@ -1939,7 +1939,7 @@
Activity Count
- Activity Count
+ Número d'Activitats
apps/client/src/app/components/admin-overview/admin-overview.html
23
@@ -1947,7 +1947,7 @@
per User
- per User
+ per Usuari
apps/client/src/app/components/admin-overview/admin-overview.html
33
@@ -1955,7 +1955,7 @@
Exchange Rates
- Exchange Rates
+ Tipus de Canvi
apps/client/src/app/components/admin-overview/admin-overview.html
39
@@ -1963,7 +1963,7 @@
Add Currency
- Add Currency
+ Afegir Divisa
apps/client/src/app/components/admin-overview/admin-overview.html
109
@@ -1971,7 +1971,7 @@
User Signup
- User Signup
+ Registrar Usuari
apps/client/src/app/components/admin-overview/admin-overview.html
115
@@ -1979,7 +1979,7 @@
Read-only Mode
- Read-only Mode
+ Mode Només Lecutra
apps/client/src/app/components/admin-overview/admin-overview.html
129
@@ -1987,7 +1987,7 @@
Data Gathering
- Data Gathering
+ Recollida de Dades
apps/client/src/app/components/admin-overview/admin-overview.html
141
@@ -1995,7 +1995,7 @@
System Message
- System Message
+ Missatge del Sistema
apps/client/src/app/components/admin-overview/admin-overview.html
153
@@ -2003,7 +2003,7 @@
Set Message
- Set Message
+ Estableix el Missatge
apps/client/src/app/components/admin-overview/admin-overview.html
175
@@ -2011,7 +2011,7 @@
Coupons
- Coupons
+ Coupons
apps/client/src/app/components/admin-overview/admin-overview.html
183
@@ -2019,7 +2019,7 @@
Add
- Add
+ Afegir
apps/client/src/app/components/admin-overview/admin-overview.html
243
@@ -2031,7 +2031,7 @@
Housekeeping
- Housekeeping
+ Ordre
apps/client/src/app/components/admin-overview/admin-overview.html
251
@@ -2039,7 +2039,7 @@
Flush Cache
- Flush Cache
+ Depurar el Cache
apps/client/src/app/components/admin-overview/admin-overview.html
255
@@ -2047,7 +2047,7 @@
Add Platform
- Add Platform
+ Afegeix Plataforma
apps/client/src/app/components/admin-platform/admin-platform.component.html
11
@@ -2055,7 +2055,7 @@
Accounts
- Accounts
+ Comptes
apps/client/src/app/components/admin-platform/admin-platform.component.html
65
@@ -2087,7 +2087,7 @@
Do you really want to delete this platform?
- Do you really want to delete this platform?
+ Està segur que vol eliminar aquesta plataforma?
apps/client/src/app/components/admin-platform/admin-platform.component.ts
79
@@ -2095,7 +2095,7 @@
Update platform
- Update platform
+ Actualitzar plataforma
apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html
8
@@ -2103,7 +2103,7 @@
Add platform
- Add platform
+ Afegeix una plataforma
apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html
10
@@ -2111,7 +2111,7 @@
Platforms
- Platforms
+ Plataformes
apps/client/src/app/components/admin-settings/admin-settings.component.html
4
@@ -2119,7 +2119,7 @@
Tags
- Tags
+ Etiquetes
apps/client/src/app/components/admin-settings/admin-settings.component.html
10
@@ -2139,7 +2139,7 @@
Add Tag
- Add Tag
+ Afegir Etiqueta
apps/client/src/app/components/admin-tag/admin-tag.component.html
11
@@ -2147,7 +2147,7 @@
Do you really want to delete this tag?
- Do you really want to delete this tag?
+ Està segur que vol eliminar aquesta etiqueta?
apps/client/src/app/components/admin-tag/admin-tag.component.ts
79
@@ -2155,7 +2155,7 @@
Update tag
- Update tag
+ Actualitzar etiqueta
apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html
8
@@ -2163,7 +2163,7 @@
Add tag
- Add tag
+ Afegir etiqueta
apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html
10
@@ -2171,7 +2171,7 @@
Do you really want to delete this user?
- Do you really want to delete this user?
+ Està segur que vol eliminar aquest usuari?
apps/client/src/app/components/admin-users/admin-users.component.ts
113
@@ -2179,7 +2179,7 @@
User
- User
+ Usuari
apps/client/src/app/components/admin-users/admin-users.html
29
@@ -2187,7 +2187,7 @@
Registration
- Registration
+ Registrar-se
apps/client/src/app/components/admin-users/admin-users.html
97
@@ -2195,7 +2195,7 @@
Engagement per Day
- Engagement per Day
+ Implicació per Dia
apps/client/src/app/components/admin-users/admin-users.html
157
@@ -2203,7 +2203,7 @@
Last Request
- Last Request
+ Última Solicitut
apps/client/src/app/components/admin-users/admin-users.html
181
@@ -2211,7 +2211,7 @@
Impersonate User
- Impersonate User
+ Actuar com un altre Usuari
apps/client/src/app/components/admin-users/admin-users.html
218
@@ -2219,7 +2219,7 @@
Delete User
- Delete User
+ Eliminar Usuari
apps/client/src/app/components/admin-users/admin-users.html
229
@@ -2227,7 +2227,7 @@
Performance
- Performance
+ Rendiment
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html
6
@@ -2243,7 +2243,7 @@
Compare with...
- Compare with...
+ Comparar amb...
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html
18
@@ -2251,7 +2251,7 @@
Manage Benchmarks
- Manage Benchmarks
+ Gestionar els Punts de Referència
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html
35
@@ -2259,7 +2259,7 @@
Portfolio
- Portfolio
+ Portfolio
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
116
@@ -2271,7 +2271,7 @@
Benchmark
- Benchmark
+ Punt de Referència
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
128
@@ -2279,7 +2279,7 @@
Current Market Mood
- Current Market Mood
+ Sentiment del Mercat
apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
12
@@ -2287,7 +2287,7 @@
Overview
- Overview
+ Visió General
apps/client/src/app/components/header/header.component.html
28
@@ -2299,7 +2299,7 @@
Portfolio
- Portfolio
+ Portfolio
apps/client/src/app/components/header/header.component.html
41
@@ -2311,7 +2311,7 @@
Admin Control
- Admin Control
+ Panell d'Administració
apps/client/src/app/components/header/header.component.html
68
@@ -2323,7 +2323,7 @@
Upgrade Plan
- Upgrade Plan
+ Millora la teva Subscripció
apps/client/src/app/components/header/header.component.html
178
@@ -2343,7 +2343,7 @@
Renew Plan
- Renew Plan
+ Renova la teva Subscripció
apps/client/src/app/components/header/header.component.html
183
@@ -2359,7 +2359,7 @@
Me
- Me
+ Tu
apps/client/src/app/components/header/header.component.html
203
@@ -2367,7 +2367,7 @@
User
- User
+ Usuari
apps/client/src/app/components/header/header.component.html
221
@@ -2375,7 +2375,7 @@
My Ghostfolio
- My Ghostfolio
+ El meu Ghostfolio
apps/client/src/app/components/header/header.component.html
262
@@ -2383,7 +2383,7 @@
About Ghostfolio
- About Ghostfolio
+ Sobre Ghostfolio
apps/client/src/app/components/header/header.component.html
303
@@ -2395,7 +2395,7 @@
Sign in
- Sign in
+ Iniciar Sessió
apps/client/src/app/components/header/header.component.html
394
@@ -2407,7 +2407,7 @@
Get started
- Get started
+ Primers Passos
apps/client/src/app/components/header/header.component.html
404
@@ -2415,7 +2415,7 @@
Oops! Incorrect Security Token.
- Oops! Incorrect Security Token.
+ Oooh! El testimoni de seguretat és incorrecte.
apps/client/src/app/components/header/header.component.ts
243
@@ -2427,7 +2427,7 @@
Change with currency effect
- Change with currency effect
+ Canvia amb els efectes de la divisa
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
53
@@ -2435,7 +2435,7 @@
Change
- Change
+ Canvia
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
65
@@ -2447,7 +2447,7 @@
Performance with currency effect
- Performance with currency effect
+ Rendiment amb els efectes de la divisa
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
81
@@ -2455,7 +2455,7 @@
Average Unit Price
- Average Unit Price
+ Preu Mig per Unitat
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
103
@@ -2463,7 +2463,7 @@
Minimum Price
- Minimum Price
+ Preu Mínim
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
130
@@ -2471,7 +2471,7 @@
Maximum Price
- Maximum Price
+ Preu Màxim
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
146
@@ -2479,7 +2479,7 @@
Quantity
- Quantity
+ Quantitat
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
156
@@ -2495,7 +2495,7 @@
Investment
- Investment
+ Inversió
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
168
@@ -2507,7 +2507,7 @@
Dividend
- Dividend
+ Dividend
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
181
@@ -2531,7 +2531,7 @@
Dividend Yield
- Dividend Yield
+ Rendiment del Dividend
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
191
@@ -2539,7 +2539,7 @@
Fees
- Fees
+ Comissions
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
203
@@ -2555,7 +2555,7 @@
Activity
- Activity
+ Activitat
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
223
@@ -2563,7 +2563,7 @@
Report Data Glitch
- Report Data Glitch
+ Informar d'un Problema amb les Dades
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
399
@@ -2571,7 +2571,7 @@
Active
- Active
+ en Actiiu
apps/client/src/app/components/home-holdings/home-holdings.component.ts
36
@@ -2579,7 +2579,7 @@
Closed
- Closed
+ Finalitzat
apps/client/src/app/components/home-holdings/home-holdings.component.ts
37
@@ -2587,7 +2587,7 @@
Table
- Table
+ Taula
apps/client/src/app/components/home-holdings/home-holdings.html
17
@@ -2595,7 +2595,7 @@
Chart
- Chart
+ Gràfic
apps/client/src/app/components/home-holdings/home-holdings.html
20
@@ -2603,7 +2603,7 @@
Manage Activities
- Manage Activities
+ Gestionar Activitats
apps/client/src/app/components/home-holdings/home-holdings.html
60
@@ -2611,7 +2611,7 @@
Fear
- Fear
+ Por
apps/client/src/app/components/home-market/home-market.component.ts
27
@@ -2623,7 +2623,7 @@
Greed
- Greed
+ Cobdícia
apps/client/src/app/components/home-market/home-market.component.ts
28
@@ -2635,7 +2635,7 @@
Last Days
- Last Days
+ Últims Dies
apps/client/src/app/components/home-market/home-market.html
7
@@ -2643,7 +2643,7 @@
Welcome to Ghostfolio
- Welcome to Ghostfolio
+ Benvingut a Ghostfolio
apps/client/src/app/components/home-overview/home-overview.html
7
@@ -2651,7 +2651,7 @@
Ready to take control of your personal finances?
- Ready to take control of your personal finances?
+ Estàs preparat per controlar les teves finances personals?
apps/client/src/app/components/home-overview/home-overview.html
8
@@ -2659,7 +2659,7 @@
Setup your accounts
- Setup your accounts
+ Configura els teus comptes
apps/client/src/app/components/home-overview/home-overview.html
15
@@ -6475,7 +6475,7 @@
Equity
- Equity
+ Patrimoni
libs/ui/src/lib/i18n.ts
42
@@ -6679,4 +6679,4 @@
-
\ No newline at end of file
+
From fcc2ab1a481b7ed47a5860680e949ed31129ae03 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Wed, 31 Jul 2024 19:18:50 +0200
Subject: [PATCH 02/16] Feature/change color assignment by annualized
performance in treemap chart (#3617)
* Change color assignment to annualized performance
* Update changelog
---
CHANGELOG.md | 1 +
.../app/portfolio/portfolio.service.spec.ts | 78 -------------------
.../src/app/portfolio/portfolio.service.ts | 29 ++-----
.../common/src/lib/calculation-helper.spec.ts | 50 ++++++++++++
libs/common/src/lib/calculation-helper.ts | 20 +++++
.../treemap-chart/treemap-chart.component.ts | 55 ++++++++++---
6 files changed, 121 insertions(+), 112 deletions(-)
delete mode 100644 apps/api/src/app/portfolio/portfolio.service.spec.ts
create mode 100644 libs/common/src/lib/calculation-helper.spec.ts
create mode 100644 libs/common/src/lib/calculation-helper.ts
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2e261220d..7155cc66e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
+- Improved the color assignment in the chart of the holdings tab on the home page (experimental)
- Improved the language localization for Catalan (`ca`)
## 2.99.0 - 2024-07-29
diff --git a/apps/api/src/app/portfolio/portfolio.service.spec.ts b/apps/api/src/app/portfolio/portfolio.service.spec.ts
deleted file mode 100644
index 92970f547..000000000
--- a/apps/api/src/app/portfolio/portfolio.service.spec.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-import { Big } from 'big.js';
-
-import { PortfolioService } from './portfolio.service';
-
-describe('PortfolioService', () => {
- let portfolioService: PortfolioService;
-
- beforeAll(async () => {
- portfolioService = new PortfolioService(
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null
- );
- });
-
- describe('annualized performance percentage', () => {
- it('Get annualized performance', async () => {
- expect(
- portfolioService
- .getAnnualizedPerformancePercent({
- daysInMarket: NaN, // differenceInDays of date-fns returns NaN for the same day
- netPerformancePercentage: new Big(0)
- })
- .toNumber()
- ).toEqual(0);
-
- expect(
- portfolioService
- .getAnnualizedPerformancePercent({
- daysInMarket: 0,
- netPerformancePercentage: new Big(0)
- })
- .toNumber()
- ).toEqual(0);
-
- /**
- * Source: https://www.readyratios.com/reference/analysis/annualized_rate.html
- */
- expect(
- portfolioService
- .getAnnualizedPerformancePercent({
- daysInMarket: 65, // < 1 year
- netPerformancePercentage: new Big(0.1025)
- })
- .toNumber()
- ).toBeCloseTo(0.729705);
-
- expect(
- portfolioService
- .getAnnualizedPerformancePercent({
- daysInMarket: 365, // 1 year
- netPerformancePercentage: new Big(0.05)
- })
- .toNumber()
- ).toBeCloseTo(0.05);
-
- /**
- * Source: https://www.investopedia.com/terms/a/annualized-total-return.asp#annualized-return-formula-and-calculation
- */
- expect(
- portfolioService
- .getAnnualizedPerformancePercent({
- daysInMarket: 575, // > 1 year
- netPerformancePercentage: new Big(0.2374)
- })
- .toNumber()
- ).toBeCloseTo(0.145);
- });
- });
-});
diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts
index b5443c9cd..368c04595 100644
--- a/apps/api/src/app/portfolio/portfolio.service.ts
+++ b/apps/api/src/app/portfolio/portfolio.service.ts
@@ -18,6 +18,7 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
+import { getAnnualizedPerformancePercent } from '@ghostfolio/common/calculation-helper';
import {
DEFAULT_CURRENCY,
EMERGENCY_FUND_TAG_ID,
@@ -70,7 +71,7 @@ import {
parseISO,
set
} from 'date-fns';
-import { isEmpty, isNumber, last, uniq, uniqBy } from 'lodash';
+import { isEmpty, uniq, uniqBy } from 'lodash';
import { PortfolioCalculator } from './calculator/portfolio-calculator';
import {
@@ -206,24 +207,6 @@ export class PortfolioService {
};
}
- public getAnnualizedPerformancePercent({
- daysInMarket,
- netPerformancePercentage
- }: {
- daysInMarket: number;
- netPerformancePercentage: Big;
- }): Big {
- if (isNumber(daysInMarket) && daysInMarket > 0) {
- const exponent = new Big(365).div(daysInMarket).toNumber();
-
- return new Big(
- Math.pow(netPerformancePercentage.plus(1).toNumber(), exponent)
- ).minus(1);
- }
-
- return new Big(0);
- }
-
public async getDividends({
activities,
groupBy
@@ -713,7 +696,7 @@ export class PortfolioService {
return Account;
});
- const dividendYieldPercent = this.getAnnualizedPerformancePercent({
+ const dividendYieldPercent = getAnnualizedPerformancePercent({
daysInMarket: differenceInDays(new Date(), parseDate(firstBuyDate)),
netPerformancePercentage: timeWeightedInvestment.eq(0)
? new Big(0)
@@ -721,7 +704,7 @@ export class PortfolioService {
});
const dividendYieldPercentWithCurrencyEffect =
- this.getAnnualizedPerformancePercent({
+ getAnnualizedPerformancePercent({
daysInMarket: differenceInDays(new Date(), parseDate(firstBuyDate)),
netPerformancePercentage: timeWeightedInvestmentWithCurrencyEffect.eq(
0
@@ -1724,13 +1707,13 @@ export class PortfolioService {
const daysInMarket = differenceInDays(new Date(), firstOrderDate);
- const annualizedPerformancePercent = this.getAnnualizedPerformancePercent({
+ const annualizedPerformancePercent = getAnnualizedPerformancePercent({
daysInMarket,
netPerformancePercentage: new Big(netPerformancePercentage)
})?.toNumber();
const annualizedPerformancePercentWithCurrencyEffect =
- this.getAnnualizedPerformancePercent({
+ getAnnualizedPerformancePercent({
daysInMarket,
netPerformancePercentage: new Big(
netPerformancePercentageWithCurrencyEffect
diff --git a/libs/common/src/lib/calculation-helper.spec.ts b/libs/common/src/lib/calculation-helper.spec.ts
new file mode 100644
index 000000000..69621ec0a
--- /dev/null
+++ b/libs/common/src/lib/calculation-helper.spec.ts
@@ -0,0 +1,50 @@
+import { Big } from 'big.js';
+
+import { getAnnualizedPerformancePercent } from './calculation-helper';
+
+describe('CalculationHelper', () => {
+ describe('annualized performance percentage', () => {
+ it('Get annualized performance', async () => {
+ expect(
+ getAnnualizedPerformancePercent({
+ daysInMarket: NaN, // differenceInDays of date-fns returns NaN for the same day
+ netPerformancePercentage: new Big(0)
+ }).toNumber()
+ ).toEqual(0);
+
+ expect(
+ getAnnualizedPerformancePercent({
+ daysInMarket: 0,
+ netPerformancePercentage: new Big(0)
+ }).toNumber()
+ ).toEqual(0);
+
+ /**
+ * Source: https://www.readyratios.com/reference/analysis/annualized_rate.html
+ */
+ expect(
+ getAnnualizedPerformancePercent({
+ daysInMarket: 65, // < 1 year
+ netPerformancePercentage: new Big(0.1025)
+ }).toNumber()
+ ).toBeCloseTo(0.729705);
+
+ expect(
+ getAnnualizedPerformancePercent({
+ daysInMarket: 365, // 1 year
+ netPerformancePercentage: new Big(0.05)
+ }).toNumber()
+ ).toBeCloseTo(0.05);
+
+ /**
+ * Source: https://www.investopedia.com/terms/a/annualized-total-return.asp#annualized-return-formula-and-calculation
+ */
+ expect(
+ getAnnualizedPerformancePercent({
+ daysInMarket: 575, // > 1 year
+ netPerformancePercentage: new Big(0.2374)
+ }).toNumber()
+ ).toBeCloseTo(0.145);
+ });
+ });
+});
diff --git a/libs/common/src/lib/calculation-helper.ts b/libs/common/src/lib/calculation-helper.ts
new file mode 100644
index 000000000..7d2ec9099
--- /dev/null
+++ b/libs/common/src/lib/calculation-helper.ts
@@ -0,0 +1,20 @@
+import { Big } from 'big.js';
+import { isNumber } from 'lodash';
+
+export function getAnnualizedPerformancePercent({
+ daysInMarket,
+ netPerformancePercentage
+}: {
+ daysInMarket: number;
+ netPerformancePercentage: Big;
+}): Big {
+ if (isNumber(daysInMarket) && daysInMarket > 0) {
+ const exponent = new Big(365).div(daysInMarket).toNumber();
+
+ return new Big(
+ Math.pow(netPerformancePercentage.plus(1).toNumber(), exponent)
+ ).minus(1);
+ }
+
+ return new Big(0);
+}
diff --git a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts
index 9ee6a7aeb..3c1b3d540 100644
--- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts
+++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts
@@ -1,3 +1,4 @@
+import { getAnnualizedPerformancePercent } from '@ghostfolio/common/calculation-helper';
import { PortfolioPosition, UniqueAsset } from '@ghostfolio/common/interfaces';
import { CommonModule } from '@angular/common';
@@ -14,10 +15,12 @@ import {
ViewChild
} from '@angular/core';
import { DataSource } from '@prisma/client';
+import { Big } from 'big.js';
import { ChartConfiguration } from 'chart.js';
import { LinearScale } from 'chart.js';
import { Chart } from 'chart.js';
import { TreemapController, TreemapElement } from 'chartjs-chart-treemap';
+import { differenceInDays } from 'date-fns';
import { orderBy } from 'lodash';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
@@ -41,6 +44,8 @@ export class GfTreemapChartComponent
@ViewChild('chartCanvas') chartCanvas: ElementRef;
+ public static readonly HEAT_MULTIPLIER = 5;
+
public chart: Chart<'treemap'>;
public isLoading = true;
@@ -71,24 +76,52 @@ export class GfTreemapChartComponent
datasets: [
{
backgroundColor(ctx) {
- const netPerformancePercentWithCurrencyEffect =
- ctx.raw._data.netPerformancePercentWithCurrencyEffect;
-
- if (netPerformancePercentWithCurrencyEffect > 0.03) {
+ const annualizedNetPerformancePercentWithCurrencyEffect =
+ getAnnualizedPerformancePercent({
+ daysInMarket: differenceInDays(
+ new Date(),
+ ctx.raw._data.dateOfFirstActivity
+ ),
+ netPerformancePercentage: new Big(
+ ctx.raw._data.netPerformancePercentWithCurrencyEffect
+ )
+ }).toNumber();
+
+ if (
+ annualizedNetPerformancePercentWithCurrencyEffect >
+ 0.03 * GfTreemapChartComponent.HEAT_MULTIPLIER
+ ) {
return green[9];
- } else if (netPerformancePercentWithCurrencyEffect > 0.02) {
+ } else if (
+ annualizedNetPerformancePercentWithCurrencyEffect >
+ 0.02 * GfTreemapChartComponent.HEAT_MULTIPLIER
+ ) {
return green[7];
- } else if (netPerformancePercentWithCurrencyEffect > 0.01) {
+ } else if (
+ annualizedNetPerformancePercentWithCurrencyEffect >
+ 0.01 * GfTreemapChartComponent.HEAT_MULTIPLIER
+ ) {
return green[5];
- } else if (netPerformancePercentWithCurrencyEffect > 0) {
+ } else if (annualizedNetPerformancePercentWithCurrencyEffect > 0) {
return green[3];
- } else if (netPerformancePercentWithCurrencyEffect === 0) {
+ } else if (
+ annualizedNetPerformancePercentWithCurrencyEffect === 0
+ ) {
return gray[3];
- } else if (netPerformancePercentWithCurrencyEffect > -0.01) {
+ } else if (
+ annualizedNetPerformancePercentWithCurrencyEffect >
+ -0.01 * GfTreemapChartComponent.HEAT_MULTIPLIER
+ ) {
return red[3];
- } else if (netPerformancePercentWithCurrencyEffect > -0.02) {
+ } else if (
+ annualizedNetPerformancePercentWithCurrencyEffect >
+ -0.02 * GfTreemapChartComponent.HEAT_MULTIPLIER
+ ) {
return red[5];
- } else if (netPerformancePercentWithCurrencyEffect > -0.03) {
+ } else if (
+ annualizedNetPerformancePercentWithCurrencyEffect >
+ -0.03 * GfTreemapChartComponent.HEAT_MULTIPLIER
+ ) {
return red[7];
} else {
return red[9];
From c87b08ca8b8815b3dbb698025c1f6d2f7e3ec92d Mon Sep 17 00:00:00 2001
From: David Requeno <108202767+DavidReque@users.noreply.github.com>
Date: Thu, 1 Aug 2024 12:28:42 -0600
Subject: [PATCH 03/16] Feature/improve language localization for es (#3625)
* Update translations
* Update changelog
---
CHANGELOG.md | 1 +
apps/client/src/locales/messages.es.xlf | 12 ++++++------
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7155cc66e..30dd1f3a5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Improved the color assignment in the chart of the holdings tab on the home page (experimental)
- Improved the language localization for Catalan (`ca`)
+- Improved the language localization for Spanish (`es`)
## 2.99.0 - 2024-07-29
diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf
index 284876006..a2736f959 100644
--- a/apps/client/src/locales/messages.es.xlf
+++ b/apps/client/src/locales/messages.es.xlf
@@ -3652,7 +3652,7 @@
Fully managed Ghostfolio cloud offering.
- Fully managed Ghostfolio cloud offering.
+ Oferta en la nube de Ghostfolio totalmente administrada.
apps/client/src/app/pages/pricing/pricing-page.html
152
@@ -3664,7 +3664,7 @@
For ambitious investors who need the full picture of their financial assets.
- For ambitious investors who need the full picture of their financial assets.
+ Para inversores ambiciosos que necesitan una visión completa de sus activos financieros
apps/client/src/app/pages/pricing/pricing-page.html
184
@@ -3672,7 +3672,7 @@
One-time payment, no auto-renewal.
- One-time payment, no auto-renewal.
+ Pago único, sin renovación automática.
apps/client/src/app/pages/pricing/pricing-page.html
280
@@ -3780,7 +3780,7 @@
Switch to Ghostfolio Premium or Ghostfolio Open Source easily
- Switch to Ghostfolio Premium or Ghostfolio Open Source easily
+ Cambie a Ghostfolio Premium o Ghostfolio Open Source fácilmente
libs/ui/src/lib/i18n.ts
10
@@ -3788,7 +3788,7 @@
Switch to Ghostfolio Open Source or Ghostfolio Basic easily
- Switch to Ghostfolio Open Source or Ghostfolio Basic easily
+ Cambie a Ghostfolio Open Source o Ghostfolio Basic fácilmente
libs/ui/src/lib/i18n.ts
12
@@ -3796,7 +3796,7 @@
Market data provided by
- Market data provided by
+ Datos de mercado proporcionados por
libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html
2
From 02db0db733183931a8836f9a5d4f8bbeb8aa9750 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 2 Aug 2024 20:27:58 +0200
Subject: [PATCH 04/16] Feature/persist view mode of holdings tab on home page
(#3624)
* Persist view mode of holdings in user settings
* Update changelog
---
CHANGELOG.md | 1 +
.../src/app/user/update-user-setting.dto.ts | 5 +++
apps/api/src/app/user/user.service.ts | 5 ++-
.../home-holdings/home-holdings.component.ts | 40 ++++++++++++++++---
.../lib/interfaces/user-settings.interface.ts | 8 +++-
.../src/lib/types/holding-view-mode.type.ts | 1 -
.../src/lib/types/holdings-view-mode.type.ts | 1 +
libs/common/src/lib/types/index.ts | 4 +-
8 files changed, 55 insertions(+), 10 deletions(-)
delete mode 100644 libs/common/src/lib/types/holding-view-mode.type.ts
create mode 100644 libs/common/src/lib/types/holdings-view-mode.type.ts
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 30dd1f3a5..805821d7c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Improved the color assignment in the chart of the holdings tab on the home page (experimental)
+- Persisted the view mode of the holdings tab on the home page (experimental)
- Improved the language localization for Catalan (`ca`)
- Improved the language localization for Spanish (`es`)
diff --git a/apps/api/src/app/user/update-user-setting.dto.ts b/apps/api/src/app/user/update-user-setting.dto.ts
index 1fc02ff4d..78e6c27a9 100644
--- a/apps/api/src/app/user/update-user-setting.dto.ts
+++ b/apps/api/src/app/user/update-user-setting.dto.ts
@@ -2,6 +2,7 @@ import { IsCurrencyCode } from '@ghostfolio/api/validators/is-currency-code';
import type {
ColorScheme,
DateRange,
+ HoldingsViewMode,
ViewMode
} from '@ghostfolio/common/types';
@@ -66,6 +67,10 @@ export class UpdateUserSettingDto {
@IsOptional()
'filters.tags'?: string[];
+ @IsIn(['CHART', 'TABLE'])
+ @IsOptional()
+ holdingsViewMode?: HoldingsViewMode;
+
@IsBoolean()
@IsOptional()
isExperimentalFeatures?: boolean;
diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts
index 02a65b6a0..7aa1dbbe8 100644
--- a/apps/api/src/app/user/user.service.ts
+++ b/apps/api/src/app/user/user.service.ts
@@ -190,7 +190,7 @@ export class UserService {
(user.Settings.settings as UserSettings).dateRange =
(user.Settings.settings as UserSettings).viewMode === 'ZEN'
? 'max'
- : (user.Settings.settings as UserSettings)?.dateRange ?? 'max';
+ : ((user.Settings.settings as UserSettings)?.dateRange ?? 'max');
// Set default value for view mode
if (!(user.Settings.settings as UserSettings).viewMode) {
@@ -243,6 +243,9 @@ export class UserService {
// Reset benchmark
user.Settings.settings.benchmark = undefined;
+
+ // Reset holdings view mode
+ user.Settings.settings.holdingsViewMode = undefined;
} else if (user.subscription?.type === 'Premium') {
currentPermissions.push(permissions.reportDataGlitch);
diff --git a/apps/client/src/app/components/home-holdings/home-holdings.component.ts b/apps/client/src/app/components/home-holdings/home-holdings.component.ts
index 3b99adb06..dca8bbe55 100644
--- a/apps/client/src/app/components/home-holdings/home-holdings.component.ts
+++ b/apps/client/src/app/components/home-holdings/home-holdings.component.ts
@@ -9,7 +9,7 @@ import {
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import {
HoldingType,
- HoldingViewMode,
+ HoldingsViewMode,
ToggleOption
} from '@ghostfolio/common/types';
@@ -18,7 +18,7 @@ import { FormControl } from '@angular/forms';
import { Router } from '@angular/router';
import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
-import { takeUntil } from 'rxjs/operators';
+import { skip, takeUntil } from 'rxjs/operators';
@Component({
selector: 'gf-home-holdings',
@@ -26,6 +26,8 @@ import { takeUntil } from 'rxjs/operators';
templateUrl: './home-holdings.html'
})
export class HomeHoldingsComponent implements OnDestroy, OnInit {
+ public static DEFAULT_HOLDINGS_VIEW_MODE: HoldingsViewMode = 'TABLE';
+
public deviceType: string;
public hasImpersonationId: boolean;
public hasPermissionToAccessHoldingsChart: boolean;
@@ -37,7 +39,9 @@ export class HomeHoldingsComponent implements OnDestroy, OnInit {
{ label: $localize`Closed`, value: 'CLOSED' }
];
public user: User;
- public viewModeFormControl = new FormControl('TABLE');
+ public viewModeFormControl = new FormControl(
+ HomeHoldingsComponent.DEFAULT_HOLDINGS_VIEW_MODE
+ );
private unsubscribeSubject = new Subject();
@@ -81,6 +85,21 @@ export class HomeHoldingsComponent implements OnDestroy, OnInit {
this.changeDetectorRef.markForCheck();
}
});
+
+ this.viewModeFormControl.valueChanges
+ .pipe(
+ // Skip inizialization: "new FormControl"
+ skip(1),
+ takeUntil(this.unsubscribeSubject)
+ )
+ .subscribe((holdingsViewMode) => {
+ this.dataService
+ .putUserSetting({ holdingsViewMode })
+ .pipe(takeUntil(this.unsubscribeSubject))
+ .subscribe(() => {
+ this.userService.remove();
+ });
+ });
}
public onChangeHoldingType(aHoldingType: HoldingType) {
@@ -122,9 +141,20 @@ export class HomeHoldingsComponent implements OnDestroy, OnInit {
this.hasPermissionToAccessHoldingsChart &&
this.holdingType === 'ACTIVE'
) {
- this.viewModeFormControl.enable();
+ this.viewModeFormControl.enable({ emitEvent: false });
+
+ this.viewModeFormControl.setValue(
+ this.deviceType === 'mobile'
+ ? HomeHoldingsComponent.DEFAULT_HOLDINGS_VIEW_MODE
+ : this.user?.settings?.holdingsViewMode ||
+ HomeHoldingsComponent.DEFAULT_HOLDINGS_VIEW_MODE,
+ { emitEvent: false }
+ );
} else if (this.holdingType === 'CLOSED') {
- this.viewModeFormControl.setValue('TABLE');
+ this.viewModeFormControl.setValue(
+ HomeHoldingsComponent.DEFAULT_HOLDINGS_VIEW_MODE,
+ { emitEvent: false }
+ );
}
this.holdings = undefined;
diff --git a/libs/common/src/lib/interfaces/user-settings.interface.ts b/libs/common/src/lib/interfaces/user-settings.interface.ts
index a0599d132..5c88e3f4b 100644
--- a/libs/common/src/lib/interfaces/user-settings.interface.ts
+++ b/libs/common/src/lib/interfaces/user-settings.interface.ts
@@ -1,4 +1,9 @@
-import { ColorScheme, DateRange, ViewMode } from '@ghostfolio/common/types';
+import {
+ ColorScheme,
+ DateRange,
+ HoldingsViewMode,
+ ViewMode
+} from '@ghostfolio/common/types';
export interface UserSettings {
annualInterestRate?: number;
@@ -9,6 +14,7 @@ export interface UserSettings {
emergencyFund?: number;
'filters.accounts'?: string[];
'filters.tags'?: string[];
+ holdingsViewMode?: HoldingsViewMode;
isExperimentalFeatures?: boolean;
isRestrictedView?: boolean;
language?: string;
diff --git a/libs/common/src/lib/types/holding-view-mode.type.ts b/libs/common/src/lib/types/holding-view-mode.type.ts
deleted file mode 100644
index 50a4e2b29..000000000
--- a/libs/common/src/lib/types/holding-view-mode.type.ts
+++ /dev/null
@@ -1 +0,0 @@
-export type HoldingViewMode = 'CHART' | 'TABLE';
diff --git a/libs/common/src/lib/types/holdings-view-mode.type.ts b/libs/common/src/lib/types/holdings-view-mode.type.ts
new file mode 100644
index 000000000..7b5d0a09c
--- /dev/null
+++ b/libs/common/src/lib/types/holdings-view-mode.type.ts
@@ -0,0 +1 @@
+export type HoldingsViewMode = 'CHART' | 'TABLE';
diff --git a/libs/common/src/lib/types/index.ts b/libs/common/src/lib/types/index.ts
index 65fdfe5f0..68d4a2ec4 100644
--- a/libs/common/src/lib/types/index.ts
+++ b/libs/common/src/lib/types/index.ts
@@ -8,7 +8,7 @@ import type { DateRange } from './date-range.type';
import type { Granularity } from './granularity.type';
import type { GroupBy } from './group-by.type';
import type { HoldingType } from './holding-type.type';
-import type { HoldingViewMode } from './holding-view-mode.type';
+import type { HoldingsViewMode } from './holdings-view-mode.type';
import type { MarketAdvanced } from './market-advanced.type';
import type { MarketDataPreset } from './market-data-preset.type';
import type { MarketState } from './market-state.type';
@@ -31,7 +31,7 @@ export type {
Granularity,
GroupBy,
HoldingType,
- HoldingViewMode,
+ HoldingsViewMode,
Market,
MarketAdvanced,
MarketDataPreset,
From a500fb72c5e8d0e435f9c19f77cbca0761bab1dd Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 2 Aug 2024 20:57:03 +0200
Subject: [PATCH 05/16] Feature/refactor Angular Material theme (#3629)
---
apps/client/src/styles/theme.scss | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/apps/client/src/styles/theme.scss b/apps/client/src/styles/theme.scss
index bc4d7b73d..40a872c72 100644
--- a/apps/client/src/styles/theme.scss
+++ b/apps/client/src/styles/theme.scss
@@ -73,40 +73,40 @@ $gf-secondary: (
$gf-typography: mat.m2-define-typography-config();
-@include mat.core();
-
// Create default theme
$gf-theme-default: mat.m2-define-light-theme(
(
color: (
- primary: mat.m2-define-palette($gf-primary),
- accent: mat.m2-define-palette($gf-secondary, 500, 900, A100)
+ accent: mat.m2-define-palette($gf-secondary, 500, 900, A100),
+ primary: mat.m2-define-palette($gf-primary)
),
density: -3,
typography: $gf-typography
)
);
+
@include mat.all-component-themes($gf-theme-default);
-@include mat.button-density(0);
-@include mat.table-density(-1);
// Create dark theme
$gf-theme-dark: mat.m2-define-dark-theme(
(
color: (
- primary: mat.m2-define-palette($gf-primary),
- accent: mat.m2-define-palette($gf-secondary, 500, 900, A100)
+ accent: mat.m2-define-palette($gf-secondary, 500, 900, A100),
+ primary: mat.m2-define-palette($gf-primary)
),
density: -3,
typography: $gf-typography
)
);
+
.is-dark-theme {
@include mat.all-component-colors($gf-theme-dark);
- @include mat.button-density(0);
- @include mat.table-density(-1);
}
+@include mat.button-density(0);
+@include mat.core();
+@include mat.table-density(-1);
+
:root {
--gf-theme-alpha-hover: 0.04;
--gf-theme-primary-500: #36cfcc;
From 2fa723dc3cc8535fcde545758f3ba83d98e2cc22 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 3 Aug 2024 15:42:21 +0200
Subject: [PATCH 06/16] Bugfix/fix language selector of user account settings
(#3613)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fix value of Català
---
.../user-account-settings/user-account-settings.html | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.html b/apps/client/src/app/components/user-account-settings/user-account-settings.html
index 5ec0e75a1..8b512ce3f 100644
--- a/apps/client/src/app/components/user-account-settings/user-account-settings.html
+++ b/apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -70,16 +70,16 @@
"
>
+ Deutsch
+ English
@if (user?.settings?.isExperimentalFeatures) {
}
- Deutsch
- English
@if (user?.settings?.isExperimentalFeatures) {
Chinese (Community
Date: Sat, 3 Aug 2024 15:46:01 +0200
Subject: [PATCH 07/16] Feature/manage tags of holdings (#3630)
* Manage tags of holdings
* Update changelog
---
CHANGELOG.md | 4 +
apps/api/src/app/order/order.service.ts | 33 +++++++
.../src/app/portfolio/portfolio.controller.ts | 59 +++++++++---
.../src/app/portfolio/portfolio.service.ts | 21 +++-
.../app/portfolio/update-holding-tags.dto.ts | 7 ++
apps/client/src/app/app.component.ts | 4 +
.../holding-detail-dialog.component.ts | 95 ++++++++++++++++++-
.../holding-detail-dialog.html | 46 ++++++++-
.../interfaces/interfaces.ts | 1 +
...ate-or-update-activity-dialog.component.ts | 19 ++--
.../create-or-update-activity-dialog.html | 6 +-
apps/client/src/app/services/data.service.ts | 14 ++-
12 files changed, 279 insertions(+), 30 deletions(-)
create mode 100644 apps/api/src/app/portfolio/update-holding-tags.dto.ts
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 805821d7c..d8666cb74 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
+### Added
+
+- Added support to manage tags of holdings in the holding detail dialog
+
### Changed
- Improved the color assignment in the chart of the holdings tab on the home page (experimental)
diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts
index b743eb2b7..f7be3ba00 100644
--- a/apps/api/src/app/order/order.service.ts
+++ b/apps/api/src/app/order/order.service.ts
@@ -46,6 +46,39 @@ export class OrderService {
private readonly symbolProfileService: SymbolProfileService
) {}
+ public async assignTags({
+ dataSource,
+ symbol,
+ tags,
+ userId
+ }: { tags: Tag[]; userId: string } & UniqueAsset) {
+ const orders = await this.prismaService.order.findMany({
+ where: {
+ userId,
+ SymbolProfile: {
+ dataSource,
+ symbol
+ }
+ }
+ });
+
+ return Promise.all(
+ orders.map(({ id }) =>
+ this.prismaService.order.update({
+ data: {
+ tags: {
+ // The set operation replaces all existing connections with the provided ones
+ set: tags.map(({ id }) => {
+ return { id };
+ })
+ }
+ },
+ where: { id }
+ })
+ )
+ );
+ }
+
public async createOrder(
data: Prisma.OrderCreateInput & {
accountId?: string;
diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts
index 84d4ef532..3c7993c61 100644
--- a/apps/api/src/app/portfolio/portfolio.controller.ts
+++ b/apps/api/src/app/portfolio/portfolio.controller.ts
@@ -1,6 +1,7 @@
import { AccessService } from '@ghostfolio/api/app/access/access.service';
import { OrderService } from '@ghostfolio/api/app/order/order.service';
import { UserService } from '@ghostfolio/api/app/user/user.service';
+import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
import {
hasNotDefinedValuesInObject,
@@ -29,7 +30,8 @@ import {
} from '@ghostfolio/common/interfaces';
import {
hasReadRestrictedAccessPermission,
- isRestrictedView
+ isRestrictedView,
+ permissions
} from '@ghostfolio/common/permissions';
import type {
DateRange,
@@ -38,12 +40,14 @@ import type {
} from '@ghostfolio/common/types';
import {
+ Body,
Controller,
Get,
Headers,
HttpException,
Inject,
Param,
+ Put,
Query,
UseGuards,
UseInterceptors,
@@ -51,12 +55,13 @@ import {
} from '@nestjs/common';
import { REQUEST } from '@nestjs/core';
import { AuthGuard } from '@nestjs/passport';
-import { AssetClass, AssetSubClass } from '@prisma/client';
+import { AssetClass, AssetSubClass, DataSource } from '@prisma/client';
import { Big } from 'big.js';
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
import { PortfolioHoldingDetail } from './interfaces/portfolio-holding-detail.interface';
import { PortfolioService } from './portfolio.service';
+import { UpdateHoldingTagsDto } from './update-holding-tags.dto';
@Controller('portfolio')
export class PortfolioController {
@@ -566,23 +571,23 @@ export class PortfolioController {
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getPosition(
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
- @Param('dataSource') dataSource,
- @Param('symbol') symbol
+ @Param('dataSource') dataSource: DataSource,
+ @Param('symbol') symbol: string
): Promise {
- const position = await this.portfolioService.getPosition(
+ const holding = await this.portfolioService.getPosition(
dataSource,
impersonationId,
symbol
);
- if (position) {
- return position;
+ if (!holding) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.NOT_FOUND),
+ StatusCodes.NOT_FOUND
+ );
}
- throw new HttpException(
- getReasonPhrase(StatusCodes.NOT_FOUND),
- StatusCodes.NOT_FOUND
- );
+ return holding;
}
@Get('report')
@@ -605,4 +610,36 @@ export class PortfolioController {
return report;
}
+
+ @HasPermission(permissions.updateOrder)
+ @Put('position/:dataSource/:symbol/tags')
+ @UseInterceptors(TransformDataSourceInRequestInterceptor)
+ @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
+ public async updateHoldingTags(
+ @Body() data: UpdateHoldingTagsDto,
+ @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
+ @Param('dataSource') dataSource: DataSource,
+ @Param('symbol') symbol: string
+ ): Promise {
+ const holding = await this.portfolioService.getPosition(
+ dataSource,
+ impersonationId,
+ symbol
+ );
+
+ if (!holding) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.NOT_FOUND),
+ StatusCodes.NOT_FOUND
+ );
+ }
+
+ await this.portfolioService.updateTags({
+ dataSource,
+ impersonationId,
+ symbol,
+ tags: data.tags,
+ userId: this.request.user.id
+ });
+ }
}
diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts
index 368c04595..67529cc67 100644
--- a/apps/api/src/app/portfolio/portfolio.service.ts
+++ b/apps/api/src/app/portfolio/portfolio.service.ts
@@ -59,7 +59,8 @@ import {
DataSource,
Order,
Platform,
- Prisma
+ Prisma,
+ Tag
} from '@prisma/client';
import { Big } from 'big.js';
import {
@@ -1304,6 +1305,24 @@ export class PortfolioService {
};
}
+ public async updateTags({
+ dataSource,
+ impersonationId,
+ symbol,
+ tags,
+ userId
+ }: {
+ dataSource: DataSource;
+ impersonationId: string;
+ symbol: string;
+ tags: Tag[];
+ userId: string;
+ }) {
+ userId = await this.getUserId(impersonationId, userId);
+
+ await this.orderService.assignTags({ dataSource, symbol, tags, userId });
+ }
+
private async getCashPositions({
cashDetails,
userCurrency,
diff --git a/apps/api/src/app/portfolio/update-holding-tags.dto.ts b/apps/api/src/app/portfolio/update-holding-tags.dto.ts
new file mode 100644
index 000000000..11efe189d
--- /dev/null
+++ b/apps/api/src/app/portfolio/update-holding-tags.dto.ts
@@ -0,0 +1,7 @@
+import { Tag } from '@prisma/client';
+import { IsArray } from 'class-validator';
+
+export class UpdateHoldingTagsDto {
+ @IsArray()
+ tags: Tag[];
+}
diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts
index 08cc915bd..4f1464408 100644
--- a/apps/client/src/app/app.component.ts
+++ b/apps/client/src/app/app.component.ts
@@ -259,6 +259,10 @@ export class AppComponent implements OnDestroy, OnInit {
this.user?.permissions,
permissions.reportDataGlitch
),
+ hasPermissionToUpdateOrder:
+ !this.hasImpersonationId &&
+ hasPermission(this.user?.permissions, permissions.updateOrder) &&
+ !user?.settings?.isRestrictedView,
locale: this.user?.settings?.locale
},
height: this.deviceType === 'mobile' ? '97.5vh' : '80vh',
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
index 3ed2f13a5..5673cd0c0 100644
--- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
+++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
@@ -19,16 +19,24 @@ import { GfLineChartComponent } from '@ghostfolio/ui/line-chart';
import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart';
import { GfValueComponent } from '@ghostfolio/ui/value';
+import { COMMA, ENTER } from '@angular/cdk/keycodes';
import { CommonModule } from '@angular/common';
import {
CUSTOM_ELEMENTS_SCHEMA,
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
+ ElementRef,
Inject,
OnDestroy,
- OnInit
+ OnInit,
+ ViewChild
} from '@angular/core';
+import { FormBuilder, FormGroup } from '@angular/forms';
+import {
+ MatAutocompleteModule,
+ MatAutocompleteSelectedEvent
+} from '@angular/material/autocomplete';
import { MatButtonModule } from '@angular/material/button';
import { MatChipsModule } from '@angular/material/chips';
import {
@@ -36,14 +44,15 @@ import {
MatDialogModule,
MatDialogRef
} from '@angular/material/dialog';
+import { MatFormFieldModule } from '@angular/material/form-field';
import { SortDirection } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';
import { MatTabsModule } from '@angular/material/tabs';
import { Account, Tag } from '@prisma/client';
import { format, isSameMonth, isToday, parseISO } from 'date-fns';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
-import { Subject } from 'rxjs';
-import { takeUntil } from 'rxjs/operators';
+import { Observable, of, Subject } from 'rxjs';
+import { map, startWith, takeUntil } from 'rxjs/operators';
import { HoldingDetailDialogParams } from './interfaces/interfaces';
@@ -60,9 +69,11 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces';
GfLineChartComponent,
GfPortfolioProportionChartComponent,
GfValueComponent,
+ MatAutocompleteModule,
MatButtonModule,
MatChipsModule,
MatDialogModule,
+ MatFormFieldModule,
MatTabsModule,
NgxSkeletonLoaderModule
],
@@ -73,6 +84,9 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces';
templateUrl: 'holding-detail-dialog.html'
})
export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
+ @ViewChild('tagInput') tagInput: ElementRef;
+
+ public activityForm: FormGroup;
public accounts: Account[];
public activities: Activity[];
public assetClass: string;
@@ -88,6 +102,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
public dividendInBaseCurrencyPrecision = 2;
public dividendYieldPercentWithCurrencyEffect: number;
public feeInBaseCurrency: number;
+ public filteredTagsObservable: Observable = of([]);
public firstBuyDate: string;
public historicalDataItems: LineChartItem[];
public investment: number;
@@ -107,10 +122,12 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
public sectors: {
[name: string]: { name: string; value: number };
};
+ public separatorKeysCodes: number[] = [COMMA, ENTER];
public sortColumn = 'date';
public sortDirection: SortDirection = 'desc';
public SymbolProfile: EnhancedSymbolProfile;
public tags: Tag[];
+ public tagsAvailable: Tag[];
public totalItems: number;
public transactionCount: number;
public user: User;
@@ -123,10 +140,38 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
private dataService: DataService,
public dialogRef: MatDialogRef,
@Inject(MAT_DIALOG_DATA) public data: HoldingDetailDialogParams,
+ private formBuilder: FormBuilder,
private userService: UserService
) {}
public ngOnInit() {
+ const { tags } = this.dataService.fetchInfo();
+
+ this.activityForm = this.formBuilder.group({
+ tags: []
+ });
+
+ this.tagsAvailable = tags.map(({ id, name }) => {
+ return {
+ id,
+ name: translate(name)
+ };
+ });
+
+ this.activityForm
+ .get('tags')
+ .valueChanges.pipe(takeUntil(this.unsubscribeSubject))
+ .subscribe((tags) => {
+ this.dataService
+ .putHoldingTags({
+ tags,
+ dataSource: this.data.dataSource,
+ symbol: this.data.symbol
+ })
+ .pipe(takeUntil(this.unsubscribeSubject))
+ .subscribe();
+ });
+
this.dataService
.fetchHoldingDetail({
dataSource: this.data.dataSource,
@@ -248,12 +293,27 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
this.reportDataGlitchMail = `mailto:hi@ghostfol.io?Subject=Ghostfolio Data Glitch Report&body=Hello%0D%0DI would like to report a data glitch for%0D%0DSymbol: ${SymbolProfile?.symbol}%0DData Source: ${SymbolProfile?.dataSource}%0D%0DAdditional notes:%0D%0DCan you please take a look?%0D%0DKind regards`;
this.sectors = {};
this.SymbolProfile = SymbolProfile;
+
this.tags = tags.map(({ id, name }) => {
return {
id,
name: translate(name)
};
});
+
+ this.activityForm.setValue({ tags: this.tags }, { emitEvent: false });
+
+ this.filteredTagsObservable = this.activityForm.controls[
+ 'tags'
+ ].valueChanges.pipe(
+ startWith(this.activityForm.get('tags').value),
+ map((aTags: Tag[] | null) => {
+ return aTags
+ ? this.filterTags(aTags)
+ : this.tagsAvailable.slice();
+ })
+ );
+
this.transactionCount = transactionCount;
this.totalItems = transactionCount;
this.value = value;
@@ -353,6 +413,17 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
});
}
+ public onAddTag(event: MatAutocompleteSelectedEvent) {
+ this.activityForm.get('tags').setValue([
+ ...(this.activityForm.get('tags').value ?? []),
+ this.tagsAvailable.find(({ id }) => {
+ return id === event.option.value;
+ })
+ ]);
+
+ this.tagInput.nativeElement.value = '';
+ }
+
public onClose() {
this.dialogRef.close();
}
@@ -377,8 +448,26 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
});
}
+ public onRemoveTag(aTag: Tag) {
+ this.activityForm.get('tags').setValue(
+ this.activityForm.get('tags').value.filter(({ id }) => {
+ return id !== aTag.id;
+ })
+ );
+ }
+
public ngOnDestroy() {
this.unsubscribeSubject.next();
this.unsubscribeSubject.complete();
}
+
+ private filterTags(aTags: Tag[]) {
+ const tagIds = aTags.map(({ id }) => {
+ return id;
+ });
+
+ return this.tagsAvailable.filter(({ id }) => {
+ return !tagIds.includes(id);
+ });
+ }
}
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
index 9afeef709..b7474a7a3 100644
--- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -325,7 +325,7 @@
@@ -375,7 +375,49 @@
- @if (tags?.length > 0) {
+
+
+
+ Tags
+
+ @for (tag of activityForm.get('tags')?.value; track tag.id) {
+
+ {{ tag.name }}
+
+
+ }
+
+
+
+ @for (tag of filteredTagsObservable | async; track tag.id) {
+
+ {{ tag.name }}
+
+ }
+
+
+
+
+
+ @if (!data.hasPermissionToUpdateOrder && tagsAvailable?.length > 0) {
Tags
diff --git a/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
index c6cfce1ee..8178838ab 100644
--- a/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
@@ -9,6 +9,7 @@ export interface HoldingDetailDialogParams {
deviceType: string;
hasImpersonationId: boolean;
hasPermissionToReportDataGlitch: boolean;
+ hasPermissionToUpdateOrder: boolean;
locale: string;
symbol: string;
}
diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
index dedcdd4a9..323796bef 100644
--- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
@@ -53,8 +53,8 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
public isToday = isToday;
public mode: 'create' | 'update';
public platforms: { id: string; name: string }[];
- public separatorKeysCodes: number[] = [ENTER, COMMA];
- public tags: Tag[] = [];
+ public separatorKeysCodes: number[] = [COMMA, ENTER];
+ public tagsAvailable: Tag[] = [];
public total = 0;
public typesTranslationMap = new Map
();
public Validators = Validators;
@@ -81,7 +81,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
this.currencies = currencies;
this.defaultDateFormat = getDateFormatString(this.locale);
this.platforms = platforms;
- this.tags = tags.map(({ id, name }) => {
+ this.tagsAvailable = tags.map(({ id, name }) => {
return {
id,
name: translate(name)
@@ -287,7 +287,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
].valueChanges.pipe(
startWith(this.activityForm.get('tags').value),
map((aTags: Tag[] | null) => {
- return aTags ? this.filterTags(aTags) : this.tags.slice();
+ return aTags ? this.filterTags(aTags) : this.tagsAvailable.slice();
})
);
@@ -441,10 +441,11 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
public onAddTag(event: MatAutocompleteSelectedEvent) {
this.activityForm.get('tags').setValue([
...(this.activityForm.get('tags').value ?? []),
- this.tags.find(({ id }) => {
+ this.tagsAvailable.find(({ id }) => {
return id === event.option.value;
})
]);
+
this.tagInput.nativeElement.value = '';
}
@@ -518,12 +519,12 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
}
private filterTags(aTags: Tag[]) {
- const tagIds = aTags.map((tag) => {
- return tag.id;
+ const tagIds = aTags.map(({ id }) => {
+ return id;
});
- return this.tags.filter((tag) => {
- return !tagIds.includes(tag.id);
+ return this.tagsAvailable.filter(({ id }) => {
+ return !tagIds.includes(id);
});
}
diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
index 56cb66fcd..7795688c0 100644
--- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
+++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -378,11 +378,11 @@
-
+
Tags
- @for (tag of activityForm.get('tags')?.value; track tag) {
+ @for (tag of activityForm.get('tags')?.value; track tag.id) {
- @for (tag of filteredTagsObservable | async; track tag) {
+ @for (tag of filteredTagsObservable | async; track tag.id) {
{{ tag.name }}
diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts
index 64e498d12..4f9fd7e20 100644
--- a/apps/client/src/app/services/data.service.ts
+++ b/apps/client/src/app/services/data.service.ts
@@ -47,7 +47,8 @@ import { SortDirection } from '@angular/material/sort';
import {
AccountBalance,
DataSource,
- Order as OrderModel
+ Order as OrderModel,
+ Tag
} from '@prisma/client';
import { format, parseISO } from 'date-fns';
import { cloneDeep, groupBy, isNumber } from 'lodash';
@@ -649,6 +650,17 @@ export class DataService {
return this.http.put(`/api/v1/admin/settings/${key}`, aData);
}
+ public putHoldingTags({
+ dataSource,
+ symbol,
+ tags
+ }: { tags: Tag[] } & UniqueAsset) {
+ return this.http.put(
+ `/api/v1/portfolio/position/${dataSource}/${symbol}/tags`,
+ { tags }
+ );
+ }
+
public putOrder(aOrder: UpdateOrderDto) {
return this.http.put(`/api/v1/order/${aOrder.id}`, aOrder);
}
From 85661884a6f991cf27125e6a2ecc2dba8b197121 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 3 Aug 2024 15:47:52 +0200
Subject: [PATCH 08/16] Release 2.100.0 (#3631)
---
CHANGELOG.md | 2 +-
package.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d8666cb74..8726c4468 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## Unreleased
+## 2.100.0 - 2024-08-03
### Added
diff --git a/package.json b/package.json
index 9d4e673d9..c84514f6a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ghostfolio",
- "version": "2.99.0",
+ "version": "2.100.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
From e0068c4d5dcadcf35c761960cd4a1986f8dcb163 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sat, 3 Aug 2024 16:55:18 +0200
Subject: [PATCH 09/16] Feature/harden container security following OWASP best
practices (#3614)
* Harden container security
* Update changelog
---
CHANGELOG.md | 6 ++++++
Dockerfile | 8 +++++---
docker/docker-compose.build.yml | 7 ++++---
docker/docker-compose.dev.yml | 5 +++--
docker/docker-compose.yml | 29 +++++++++++++++++++++++++----
5 files changed, 43 insertions(+), 12 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8726c4468..a019343ef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## Unreleased
+
+### Changed
+
+- Hardened container security by switching to a non-root user, setting the filesystem to read-only, and dropping unnecessary capabilities
+
## 2.100.0 - 2024-08-03
### Added
diff --git a/Dockerfile b/Dockerfile
index 3f4554523..8ca86a308 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -11,7 +11,7 @@ COPY ./package.json package.json
COPY ./package-lock.json package-lock.json
COPY ./prisma/schema.prisma prisma/schema.prisma
-RUN apt update && apt install -y \
+RUN apt-get update && apt-get install -y --no-install-suggests \
g++ \
git \
make \
@@ -50,16 +50,18 @@ RUN npm run database:generate-typings
# Image to run, copy everything needed from builder
FROM node:20-slim
-
LABEL org.opencontainers.image.source="https://github.com/ghostfolio/ghostfolio"
+ENV NODE_ENV=production
-RUN apt update && apt install -y \
+RUN apt-get update && apt-get install -y --no-install-suggests \
curl \
openssl \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /ghostfolio/dist/apps /ghostfolio/apps
COPY ./docker/entrypoint.sh /ghostfolio/entrypoint.sh
+RUN chown -R node:node /ghostfolio
WORKDIR /ghostfolio/apps/api
EXPOSE ${PORT:-3333}
+USER node
CMD [ "/ghostfolio/entrypoint.sh" ]
diff --git a/docker/docker-compose.build.yml b/docker/docker-compose.build.yml
index 28990692d..636d9a4e3 100644
--- a/docker/docker-compose.build.yml
+++ b/docker/docker-compose.build.yml
@@ -6,7 +6,6 @@ services:
- ../.env
environment:
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?connect_timeout=300&sslmode=prefer
- NODE_ENV: production
REDIS_HOST: redis
REDIS_PASSWORD: ${REDIS_PASSWORD}
ports:
@@ -21,8 +20,9 @@ services:
interval: 10s
timeout: 5s
retries: 5
+
postgres:
- image: postgres:15
+ image: docker.io/library/postgres:15
env_file:
- ../.env
healthcheck:
@@ -32,8 +32,9 @@ services:
retries: 5
volumes:
- postgres:/var/lib/postgresql/data
+
redis:
- image: redis:alpine
+ image: docker.io/library/redis:alpine
env_file:
- ../.env
command: ['redis-server', '--requirepass', $REDIS_PASSWORD]
diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml
index 47944378c..91f8f2c09 100644
--- a/docker/docker-compose.dev.yml
+++ b/docker/docker-compose.dev.yml
@@ -1,6 +1,6 @@
services:
postgres:
- image: postgres:15
+ image: docker.io/library/postgres:15
container_name: postgres
restart: unless-stopped
env_file:
@@ -9,8 +9,9 @@ services:
- ${POSTGRES_PORT:-5432}:5432
volumes:
- postgres:/var/lib/postgresql/data
+
redis:
- image: redis:alpine
+ image: docker.io/library/redis:alpine
container_name: redis
restart: unless-stopped
env_file:
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 3e708e918..23d9d6358 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -1,12 +1,16 @@
services:
ghostfolio:
- image: ghostfolio/ghostfolio:latest
+ image: docker.io/ghostfolio/ghostfolio:latest
init: true
+ read_only: true
+ cap_drop:
+ - ALL
+ security_opt:
+ - no-new-privileges:true
env_file:
- ../.env
environment:
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?connect_timeout=300&sslmode=prefer
- NODE_ENV: production
REDIS_HOST: redis
REDIS_PASSWORD: ${REDIS_PASSWORD}
ports:
@@ -21,8 +25,19 @@ services:
interval: 10s
timeout: 5s
retries: 5
+
postgres:
- image: postgres:15
+ image: docker.io/library/postgres:15
+ cap_drop:
+ - ALL
+ cap_add:
+ - CHOWN
+ - DAC_READ_SEARCH
+ - FOWNER
+ - SETGID
+ - SETUID
+ security_opt:
+ - no-new-privileges:true
env_file:
- ../.env
healthcheck:
@@ -32,8 +47,14 @@ services:
retries: 5
volumes:
- postgres:/var/lib/postgresql/data
+
redis:
- image: redis:alpine
+ image: docker.io/library/redis:alpine
+ user: '999:1000'
+ cap_drop:
+ - ALL
+ security_opt:
+ - no-new-privileges:true
env_file:
- ../.env
command: ['redis-server', '--requirepass', $REDIS_PASSWORD]
From 420f331be9550b6342234f171612698dc304b45f Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 3 Aug 2024 16:58:08 +0200
Subject: [PATCH 10/16] Release 2.101.0 (#3632)
---
CHANGELOG.md | 2 +-
package.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a019343ef..7101d9440 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## Unreleased
+## 2.101.0 - 2024-08-03
### Changed
diff --git a/package.json b/package.json
index c84514f6a..3f555a43b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ghostfolio",
- "version": "2.100.0",
+ "version": "2.101.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
From aef650753e17669338c4172f11f452d33e9b0842 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 4 Aug 2024 08:18:54 +0200
Subject: [PATCH 11/16] Feature/clean up activities page (#3635)
* Clean up
---
.../portfolio/activities/activities-page.component.ts | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
index c96921c30..d6209cdf8 100644
--- a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
@@ -33,7 +33,6 @@ import { ImportActivitiesDialogParams } from './import-activities-dialog/interfa
templateUrl: './activities-page.html'
})
export class ActivitiesPageComponent implements OnDestroy, OnInit {
- public activities: Activity[];
public dataSource: MatTableDataSource;
public deviceType: string;
public hasImpersonationId: boolean;
@@ -66,13 +65,7 @@ export class ActivitiesPageComponent implements OnDestroy, OnInit {
if (params['createDialog']) {
this.openCreateActivityDialog();
} else if (params['editDialog']) {
- if (this.activities) {
- const activity = this.activities.find(({ id }) => {
- return id === params['activityId'];
- });
-
- this.openUpdateActivityDialog(activity);
- } else if (this.dataSource) {
+ if (this.dataSource && params['activityId']) {
const activity = this.dataSource.data.find(({ id }) => {
return id === params['activityId'];
});
From 4c7657a90e59d5a7199b7065e70300fcabd7a67f Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 4 Aug 2024 08:22:32 +0200
Subject: [PATCH 12/16] Feature/upgrade nx to version 19.5.6 (#3633)
* Upgrade Nx to version 19.5.6
* Update changelog
---
CHANGELOG.md | 6 +
package-lock.json | 882 ++++++++++++++++++++++++++++++++--------------
package.json | 22 +-
3 files changed, 634 insertions(+), 276 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7101d9440..a6e3b0ca5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## Unreleased
+
+### Changed
+
+- Upgraded `Nx` from version `19.5.1` to `19.5.6`
+
## 2.101.0 - 2024-08-03
### Changed
diff --git a/package-lock.json b/package-lock.json
index 23fb87fa4..1a9b0ce52 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ghostfolio",
- "version": "2.98.0",
+ "version": "2.101.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
- "version": "2.98.0",
+ "version": "2.101.0",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
@@ -108,16 +108,16 @@
"@angular/pwa": "18.1.1",
"@nestjs/schematics": "10.0.1",
"@nestjs/testing": "10.1.3",
- "@nx/angular": "19.5.1",
- "@nx/cypress": "19.5.1",
- "@nx/eslint-plugin": "19.5.1",
- "@nx/jest": "19.5.1",
- "@nx/js": "19.5.1",
- "@nx/nest": "19.5.1",
- "@nx/node": "19.5.1",
- "@nx/storybook": "19.5.1",
- "@nx/web": "19.5.1",
- "@nx/workspace": "19.5.1",
+ "@nx/angular": "19.5.6",
+ "@nx/cypress": "19.5.6",
+ "@nx/eslint-plugin": "19.5.6",
+ "@nx/jest": "19.5.6",
+ "@nx/js": "19.5.6",
+ "@nx/nest": "19.5.6",
+ "@nx/node": "19.5.6",
+ "@nx/storybook": "19.5.6",
+ "@nx/web": "19.5.6",
+ "@nx/workspace": "19.5.6",
"@schematics/angular": "18.1.1",
"@simplewebauthn/types": "9.0.1",
"@storybook/addon-essentials": "8.2.6",
@@ -146,7 +146,7 @@
"jest": "29.7.0",
"jest-environment-jsdom": "29.7.0",
"jest-preset-angular": "14.1.0",
- "nx": "19.5.1",
+ "nx": "19.5.6",
"prettier": "3.3.3",
"prettier-plugin-organize-attributes": "1.0.0",
"react": "18.2.0",
@@ -3893,6 +3893,7 @@
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.2.0.tgz",
"integrity": "sha512-E7Vgw78I93we4ZWdYCb4DGAwRROGkMIXk7/y87UmANR+J6qsWusmC3gLt0H+O0KOt5e6O38U8oJamgbudrES/w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@emnapi/wasi-threads": "1.0.1",
"tslib": "^2.4.0"
@@ -3903,6 +3904,7 @@
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz",
"integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"tslib": "^2.4.0"
}
@@ -3912,6 +3914,7 @@
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz",
"integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"tslib": "^2.4.0"
}
@@ -6409,6 +6412,7 @@
"resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.2.8.tgz",
"integrity": "sha512-qY1Wbqo0yu9nh6KR8K19t5T4tYtlUbmcNdcaCweISCyAbH99TrhpQkJ89NY0TLtnxQ6uayIYayqAWS7vzyDXVw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@module-federation/managers": "0.2.8",
"@module-federation/sdk": "0.2.8",
@@ -6441,6 +6445,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -6456,6 +6461,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -6469,6 +6475,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -6478,6 +6485,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -6490,6 +6498,7 @@
"resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.2.8.tgz",
"integrity": "sha512-6fGM/GiKw6LZiBe6DF8Petz6ih/Yyf3q2htLrx+hrWoDWfWEoWlLvoCUsVkY2UgMCLKid7Fm3Auc4w8A4aRjvQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@module-federation/bridge-react-webpack-plugin": "0.2.8",
"@module-federation/dts-plugin": "0.2.8",
@@ -6523,6 +6532,7 @@
"resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.2.8.tgz",
"integrity": "sha512-S5GXqt2Vrs1+uNXHw7UzZ7m3fs8H3nxNsNGQ0j5+HiT5yA7uRTY1AZJZCGAHzG6XImJ1DzL/SW1acM2Hwj0aAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@module-federation/sdk": "0.2.8",
"find-pkg": "2.0.0",
@@ -6534,6 +6544,7 @@
"resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.2.8.tgz",
"integrity": "sha512-kw4PeAldkOuGCWfCnDzZwPHUx5qv9+WztY5+TEbsgXc5E+/e2NDA6Gg3eT8zUGeexeGdab3f+DuN9ZClZJYVGA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@module-federation/dts-plugin": "0.2.8",
"@module-federation/managers": "0.2.8",
@@ -6547,6 +6558,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -6562,6 +6574,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -6575,6 +6588,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -6584,6 +6598,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -6596,6 +6611,7 @@
"resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.2.8.tgz",
"integrity": "sha512-5Bofm3cY7OOwO2DT5TevITd+HAA03zsY1wwsMb1BP6NkS/ukUtsjuRo2Anua0RkHBEIx+Dv5rpqOn7qSlOm1Fg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@module-federation/bridge-react-webpack-plugin": "0.2.8",
"@module-federation/dts-plugin": "0.2.8",
@@ -6622,6 +6638,7 @@
"resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.2.8.tgz",
"integrity": "sha512-8xmA/+z1zD09F5qU8VnSWLExqTCVWoHOguXsCX79kkqp7i0c+D2YaebWzlQ2kku+DU+0VIzXpQ3BBcumZ3v3wQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@module-federation/sdk": "0.2.8"
}
@@ -6631,6 +6648,7 @@
"resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.2.8.tgz",
"integrity": "sha512-RSNtyhcNvnTQIdzRUIOGue6WQA/9mL9cY/n0dEd357L/lmLCvfHiZbowlkacckDzyApariUHxzkHrU2Q6kzoew==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@module-federation/runtime": "0.2.8",
"@module-federation/webpack-bundler-runtime": "0.2.8"
@@ -6640,13 +6658,15 @@
"version": "0.2.8",
"resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.2.8.tgz",
"integrity": "sha512-eGMnJxdRDgt6dtMv8gkAlzEbTPWVHb3AHUNUG0w56wcbIF0RHC6kmvpHpSQyq4DVGWv3U4g/ZiH5BvBlqEelDQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@module-federation/third-party-dts-extractor": {
"version": "0.2.8",
"resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.2.8.tgz",
"integrity": "sha512-VGXvdsRlljbFUfGeA448CxR7i6fLWJN07ViRuNXYYXc19e4bQVhBHzrf7eCv9ahcf/tA/8YYCS2h11ixbD691A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"find-pkg": "2.0.0",
"fs-extra": "9.1.0",
@@ -6658,6 +6678,7 @@
"resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.2.8.tgz",
"integrity": "sha512-tiW1kD/V3QNul1/O3Y3lwQv/r4sUU4jvWZykrLvHYt2vuoGe1d4tHnSIFEVEAi9FSpuDwdRK2+NaWBr92gIS7Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@module-federation/runtime": "0.2.8",
"@module-federation/sdk": "0.2.8"
@@ -6740,6 +6761,7 @@
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz",
"integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@emnapi/core": "^1.1.0",
"@emnapi/runtime": "^1.1.0",
@@ -7460,94 +7482,104 @@
}
},
"node_modules/@nrwl/angular": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nrwl/angular/-/angular-19.5.1.tgz",
- "integrity": "sha512-p2Mr8G8uQYvkgFthyDUPrTYccCu8tGyJXMLg+N+myestNDTntJ34buwX3yvAeLMzhe89S+wjYY/FMZnue4zXiw==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nrwl/angular/-/angular-19.5.6.tgz",
+ "integrity": "sha512-ilS6ZjsEOToeTiKHixd9+wLvslUZ1cdvNIgvsUZ3VHK4OmGxTzGJXaV+1+CSgYDpSp4+MC/Di8EfzUteCn9mFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/angular": "19.5.1",
+ "@nx/angular": "19.5.6",
"tslib": "^2.3.0"
}
},
"node_modules/@nrwl/cypress": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nrwl/cypress/-/cypress-19.5.1.tgz",
- "integrity": "sha512-wBT7IQfqCZuj0Oa/2+2RAn73W0o4f+3iKdDBUF85/XFyemNGekVpFBpseQgZs4HPfukKJBjmdAg584s2hEAl9Q==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nrwl/cypress/-/cypress-19.5.6.tgz",
+ "integrity": "sha512-yVMSVjDcOdqiiJjHaHme/3FtyFgT4mK7+GZExoJzGevHDrReeN22a2+3W7Rr/cEi/qTDdnNfODn5QdSpWfbuLQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/cypress": "19.5.1"
+ "@nx/cypress": "19.5.6"
}
},
"node_modules/@nrwl/devkit": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.5.1.tgz",
- "integrity": "sha512-ZsckDZszLTv3oshNsY5fZ86g8a/VcGvgDpdiP/z/A/krtOHL8iUjdT/72Eo5DIult5WcSFjnifyWcyWIGe1PeA==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.5.6.tgz",
+ "integrity": "sha512-H7LGlwAktfL2GR4scwCfehuppmzcHJJt4C2PpiGEsfA74MKBw2/VGX15b29Mf36XbGS+Bx9vjvooZEt5HPCusw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/devkit": "19.5.1"
+ "@nx/devkit": "19.5.6"
}
},
"node_modules/@nrwl/eslint-plugin-nx": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-19.5.1.tgz",
- "integrity": "sha512-zCLLe4sbnV5U9yIi7MMFKpyW+KtQ3tTRra+7Lhyz/yrpu//3a0PrRz3o3LPuKSXxbqQryL5kQJzpqjOthF582Q==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-19.5.6.tgz",
+ "integrity": "sha512-pHIJHXOVJRC+wBI9zK0RnwKAh7NC9TKCdIm5KsYNFHTLswUxHnxzmP86hKTVcZO7o10NeYzBWD7QAQvqYgIQoA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/eslint-plugin": "19.5.1"
+ "@nx/eslint-plugin": "19.5.6"
}
},
"node_modules/@nrwl/jest": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nrwl/jest/-/jest-19.5.1.tgz",
- "integrity": "sha512-Bnwoq1PaWP2fxeCSEt9ME0tPaHPlXKvaZQiEFO2FfsBDuXCbdlAmusLnHe+QK8jJE5rwDZfCh73ERg5PSFR2tQ==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nrwl/jest/-/jest-19.5.6.tgz",
+ "integrity": "sha512-/redyU+er4f0xjLgWttdyOZw0yOozGzwDuUWYu0vR9SCmKXyhQf3kUHw6yR3/qOLiN32VbzAmiq67NvGhoRgFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/jest": "19.5.1"
+ "@nx/jest": "19.5.6"
}
},
"node_modules/@nrwl/js": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-19.5.1.tgz",
- "integrity": "sha512-t3EBizfpsT2n2x/oISqs2/JyCpwl1EqjvNDyXgMavLvIMnjLd1vsvmHwoblMJdRJFWropHlHBtp+6u2PRs/Gjw==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-19.5.6.tgz",
+ "integrity": "sha512-mfTBvon1v/Ts1Crvv25raXGxpQe3cgPTNCP+D5SG6Vpe/vbLOYiBi90UhHIKXKZOQ73RRx+Wojgn+Zv5pDo13A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/js": "19.5.1"
+ "@nx/js": "19.5.6"
}
},
"node_modules/@nrwl/nest": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nrwl/nest/-/nest-19.5.1.tgz",
- "integrity": "sha512-dLVcOUivzETCiB5em6dPhySPh4cUUgQcIvnk6S3o+3e9IgKOmjClsUNgzxo+nmugk9VFtFTTwxJnWj/juTGpSQ==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nrwl/nest/-/nest-19.5.6.tgz",
+ "integrity": "sha512-TPI2eD0JotnAvd3ynnrNiToVRTabjjqabU+JDnH2qrI2GnDwotbazJLxDQTlI62ev2sqs9lw3iMbn1jwJDy5UQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/nest": "19.5.1"
+ "@nx/nest": "19.5.6"
}
},
"node_modules/@nrwl/node": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nrwl/node/-/node-19.5.1.tgz",
- "integrity": "sha512-pkYhkV5ua+rw/EX9Cuvn20HjGechYIMgXCmz5YT8oq/UU6CaVszTqypjfak5eUjhHCAQklnrKHpxf/RQ5r4XHQ==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nrwl/node/-/node-19.5.6.tgz",
+ "integrity": "sha512-eiQqeHNtR40cdD0WX33ZUwom3Malt7C7zq+iU5DTLlbeC6ciZGz9pYkeNZ6JJZOEPEUGM5O+7gtWUb+Ig7ZyMQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/node": "19.5.1"
+ "@nx/node": "19.5.6"
}
},
"node_modules/@nrwl/storybook": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nrwl/storybook/-/storybook-19.5.1.tgz",
- "integrity": "sha512-3ZBsPF+vVHmiPFAUSHPrKOxFGJzDSq9aiibZT98knx0rCACfNvaCh+BfrciXfDXIjJ7DMQfRsuydhc+9+Bylfw==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nrwl/storybook/-/storybook-19.5.6.tgz",
+ "integrity": "sha512-xEAnwp16NKBXZ8nqXFiFjJFFc8SzWY+oRoXQTkR7mUV7kKnaeFK2mBq2JXygyRonRdrBjZIvsM7YzRRl3brlJQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/storybook": "19.5.1"
+ "@nx/storybook": "19.5.6"
}
},
"node_modules/@nrwl/tao": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.5.1.tgz",
- "integrity": "sha512-gAitJkexzI36jCNIHru1PAqNcFe17KlSwb3F4VoCArcZSJmSh5cTbxaAAWup8aavxHT6nF6G1Zm1+N0RmzRMRQ==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.5.6.tgz",
+ "integrity": "sha512-p1bxEjW32bIHAiTp+PVdJpa2V9En2s9FigepHXyvmT2Aipisz96CKiDjexhPTjOZHUKtqA9FgmOIuVl3sBME3g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "nx": "19.5.1",
+ "nx": "19.5.6",
"tslib": "^2.3.0"
},
"bin": {
@@ -7555,30 +7587,33 @@
}
},
"node_modules/@nrwl/web": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nrwl/web/-/web-19.5.1.tgz",
- "integrity": "sha512-UIf3CN9mYUzsLCvKQlETyYMiMp1sL0GL4yGVQJIMz9RqoND2NLNSM5+vcp7rs/UyD8YuACgs3Ii3C2yyTPH6aQ==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nrwl/web/-/web-19.5.6.tgz",
+ "integrity": "sha512-2TJB0zSBjDtl2AaZToTvSLej4ed5YO5nJ9iFsv764WDLI0D/WsciUiZHNdXSIhU0lf2yrs7CmIYZFWAdnXzxKA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/web": "19.5.1"
+ "@nx/web": "19.5.6"
}
},
"node_modules/@nrwl/webpack": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nrwl/webpack/-/webpack-19.5.1.tgz",
- "integrity": "sha512-+vSDWUnXh6y0jB6ZNvAB84KyIpTfrxzwh5bx7OtqQPQ8eh5i8PD6uXrXcc/PsxIRw2qQs1e+wu/qhdQszgFo6Q==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nrwl/webpack/-/webpack-19.5.6.tgz",
+ "integrity": "sha512-2tHi4QKDAjs9f7lzoELmzh5D1aT+XOn6PTK47V4n+Y878HgRQuv9NMRd7WhH5nAAlOKQYonsTc9e4doEJ6T9aQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/webpack": "19.5.1"
+ "@nx/webpack": "19.5.6"
}
},
"node_modules/@nrwl/workspace": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-19.5.1.tgz",
- "integrity": "sha512-lqX0bgqCv/qc35tqea16uMWbkMN2dxEOCCc81BxKwDf0roSlO0Jnb0vWMCBUrITWbginSe7vovvjfpGbS1QboA==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-19.5.6.tgz",
+ "integrity": "sha512-k0Pria840szB3dIDCXOMbD4jbnaLCeGRYthE5duG5nPxTCbeMMu7pU1t0sv9IgpQZ/JrHeWliknWgaTlIguPug==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/workspace": "19.5.1"
+ "@nx/workspace": "19.5.6"
}
},
"node_modules/@nuxtjs/opencollective": {
@@ -7647,24 +7682,24 @@
}
},
"node_modules/@nx/angular": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-19.5.1.tgz",
- "integrity": "sha512-ECut6FDXm44EgV5t90ckafDQVNPZsgwnameY3AMKhn5hs7XAtSDb1XTKuSZtAugFJGGrvXpT0auYq8etrVePyA==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-19.5.6.tgz",
+ "integrity": "sha512-86fZmTx7Omo7FJuRyuNvEiUHUSuwEaGFeh/UkWt3Crf5C0pAlPYzpcm3B7B7e0RwGiWII9Mc9ZLwnPTv4jgZdA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@module-federation/enhanced": "~0.2.3",
- "@nrwl/angular": "19.5.1",
- "@nx/devkit": "19.5.1",
- "@nx/eslint": "19.5.1",
- "@nx/js": "19.5.1",
- "@nx/web": "19.5.1",
- "@nx/webpack": "19.5.1",
- "@nx/workspace": "19.5.1",
+ "@nrwl/angular": "19.5.6",
+ "@nx/devkit": "19.5.6",
+ "@nx/eslint": "19.5.6",
+ "@nx/js": "19.5.6",
+ "@nx/web": "19.5.6",
+ "@nx/webpack": "19.5.6",
+ "@nx/workspace": "19.5.6",
"@phenomnomnominal/tsquery": "~5.0.1",
"@typescript-eslint/type-utils": "^7.16.0",
"chalk": "^4.1.0",
"find-cache-dir": "^3.3.2",
- "ignore": "^5.0.4",
"magic-string": "~0.30.2",
"minimatch": "9.0.3",
"piscina": "^4.4.0",
@@ -7678,13 +7713,7 @@
"@angular-devkit/core": ">= 16.0.0 < 19.0.0",
"@angular-devkit/schematics": ">= 16.0.0 < 19.0.0",
"@schematics/angular": ">= 16.0.0 < 19.0.0",
- "esbuild": "^0.19.2",
"rxjs": "^6.5.3 || ^7.5.0"
- },
- "peerDependenciesMeta": {
- "esbuild": {
- "optional": true
- }
}
},
"node_modules/@nx/angular/node_modules/ansi-styles": {
@@ -7740,15 +7769,16 @@
}
},
"node_modules/@nx/cypress": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-19.5.1.tgz",
- "integrity": "sha512-Yxgsqq4MRLmIRRATQq2L9jgOP/g1ex/cgbruKSkqUkB7WmmNfFJCA93ZiuMPtEOGPsfJLdjVfs6BqBLfw9GO0w==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-19.5.6.tgz",
+ "integrity": "sha512-3yUZ0AR5e9Ea7vk/6Zjje1QHyPXGycdnWOzOZuOJ6Wloeqj/EWWGoIEsSt+XAfzCiK/oWnlXpsbkrGJZYYgbdQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nrwl/cypress": "19.5.1",
- "@nx/devkit": "19.5.1",
- "@nx/eslint": "19.5.1",
- "@nx/js": "19.5.1",
+ "@nrwl/cypress": "19.5.6",
+ "@nx/devkit": "19.5.6",
+ "@nx/eslint": "19.5.6",
+ "@nx/js": "19.5.6",
"@phenomnomnominal/tsquery": "~5.0.1",
"detect-port": "^1.5.1",
"tslib": "^2.3.0"
@@ -7763,12 +7793,13 @@
}
},
"node_modules/@nx/devkit": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.5.1.tgz",
- "integrity": "sha512-Vj8wwzNIR5VIWmuLHhOi4aUVq7eVV5YTbctnEewKT+V/O4LZj+hClGyVNyT8s6b8JIjNWoIO4HXStLnH8rDOlw==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.5.6.tgz",
+ "integrity": "sha512-zSToXLkhbAOQmqVTgUNHdLO0uOZz/iGwqEK4tuAhU5hhqTcpN1TZUI9BlINvtFJBLvbNroGrnIh0gTq9CPzVHw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nrwl/devkit": "19.5.1",
+ "@nrwl/devkit": "19.5.6",
"ejs": "^3.1.7",
"enquirer": "~2.3.6",
"ignore": "^5.0.4",
@@ -7783,14 +7814,15 @@
}
},
"node_modules/@nx/eslint": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-19.5.1.tgz",
- "integrity": "sha512-PlWi2hmado+rSkbHi1a+VM+h1IOxLe9dIhLKC5t6p7Z8cG5QKjsn28okkuytKAq0wiVAyHRO3i/V415QM2lc1g==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-19.5.6.tgz",
+ "integrity": "sha512-WLUo4f+ndMVWZ5QqqZiZNCmbLCqEqPBopvGWJg6uUJyrm5HiFsks+1nRp7BxFzj0SwmdmSRzQFvMgorw7lAgCQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/devkit": "19.5.1",
- "@nx/js": "19.5.1",
- "@nx/linter": "19.5.1",
+ "@nx/devkit": "19.5.6",
+ "@nx/js": "19.5.6",
+ "@nx/linter": "19.5.6",
"semver": "^7.5.3",
"tslib": "^2.3.0",
"typescript": "~5.4.2"
@@ -7806,14 +7838,15 @@
}
},
"node_modules/@nx/eslint-plugin": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-19.5.1.tgz",
- "integrity": "sha512-wLroRSUC2/KJv2+VupBVKQ6A2zfub8CCsThJO4UFJvO+KM/Heuvb9kxpPdDie+tyCQQqJpkgTwpWC7uhpDLAMw==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-19.5.6.tgz",
+ "integrity": "sha512-5yZJbAoS35blBvY1riAxzemBGJJJW36FVm304ccPyJXvXA7Wa7yMbtwuVagJ9E7w4fodmCcWOAvrCDUTSakBug==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nrwl/eslint-plugin-nx": "19.5.1",
- "@nx/devkit": "19.5.1",
- "@nx/js": "19.5.1",
+ "@nrwl/eslint-plugin-nx": "19.5.6",
+ "@nx/devkit": "19.5.6",
+ "@nx/js": "19.5.6",
"@typescript-eslint/type-utils": "^7.16.0",
"@typescript-eslint/utils": "^7.16.0",
"chalk": "^4.1.0",
@@ -7889,6 +7922,7 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
"integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
"dev": true,
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -7898,16 +7932,17 @@
}
},
"node_modules/@nx/jest": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-19.5.1.tgz",
- "integrity": "sha512-KWPFS7z9stQPQZgNYmm8b2+ZOUI64o95OAnStB73HEREuk+sXtFVEtHcLOZsCjAmSL/wYTgw135+EdZeMrGX4A==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-19.5.6.tgz",
+ "integrity": "sha512-UkGEl7iAt3MEz+BB4Xp3u641LrMeOytTcbljjyYtR84YtJaYgc8CFmornnw8KVqfavQS+v/nrv8lMbbYQHkWpQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/reporters": "^29.4.1",
"@jest/test-result": "^29.4.1",
- "@nrwl/jest": "19.5.1",
- "@nx/devkit": "19.5.1",
- "@nx/js": "19.5.1",
+ "@nrwl/jest": "19.5.6",
+ "@nx/devkit": "19.5.6",
+ "@nx/js": "19.5.6",
"@phenomnomnominal/tsquery": "~5.0.1",
"chalk": "^4.1.0",
"identity-obj-proxy": "3.0.0",
@@ -7973,10 +8008,11 @@
}
},
"node_modules/@nx/js": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/js/-/js-19.5.1.tgz",
- "integrity": "sha512-Kp61s0cB3yk3RCyvSprakNL0VmXv7uqfsglqvxUDG6DXof9pj8jhTNn1Gms79DmUR5jxTeT+XNHcpl1y3QhTzg==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/js/-/js-19.5.6.tgz",
+ "integrity": "sha512-NNf6Zh4Z8k3dmkXkCUYrReH9ZpdAhvUQjwrWUHtmc5MnWTsQL12a01MwbMi4ReMzDLDjffDXjJFxYmbNYKaRzw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/core": "^7.23.2",
"@babel/plugin-proposal-decorators": "^7.22.7",
@@ -7985,9 +8021,9 @@
"@babel/preset-env": "^7.23.2",
"@babel/preset-typescript": "^7.22.5",
"@babel/runtime": "^7.22.6",
- "@nrwl/js": "19.5.1",
- "@nx/devkit": "19.5.1",
- "@nx/workspace": "19.5.1",
+ "@nrwl/js": "19.5.6",
+ "@nx/devkit": "19.5.6",
+ "@nx/workspace": "19.5.6",
"babel-plugin-const-enum": "^1.0.1",
"babel-plugin-macros": "^2.8.0",
"babel-plugin-transform-typescript-metadata": "^0.3.1",
@@ -8239,26 +8275,28 @@
}
},
"node_modules/@nx/linter": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-19.5.1.tgz",
- "integrity": "sha512-UamWirRf0hmJCpJev1kCdeNPDmsyavuV8r0Ha8t9hPX3dJravjT4IzHL3bJy1ctu8AJrYhJqdTvNKCjqO7Uopw==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-19.5.6.tgz",
+ "integrity": "sha512-OS0DZ1TDTvWaZe7ijLT6jkQZCCBg4OseFmP2Y6bqE/oRdyoRv95gCT2MGmyJQXkLoX5j9DMfc4nYXS0VHFYqdg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nx/eslint": "19.5.1"
+ "@nx/eslint": "19.5.6"
}
},
"node_modules/@nx/nest": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/nest/-/nest-19.5.1.tgz",
- "integrity": "sha512-QAFd/JFj9szQ+prnq0AquC1YIGaUk/FYlLwoj1FmkvtFBOtyHd6qKpOViPo7lWaLNbNy2cDuHGPmRzvUpejvyA==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/nest/-/nest-19.5.6.tgz",
+ "integrity": "sha512-cIr27QlF3RBb0NhCxJGipQt2uwgERLMJ0nqJhlkbBFlmZsZiFEQ33V89hgGAdPTB3ntEKmubKws0ZySn2hdrCQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nestjs/schematics": "^9.1.0",
- "@nrwl/nest": "19.5.1",
- "@nx/devkit": "19.5.1",
- "@nx/eslint": "19.5.1",
- "@nx/js": "19.5.1",
- "@nx/node": "19.5.1",
+ "@nrwl/nest": "19.5.6",
+ "@nx/devkit": "19.5.6",
+ "@nx/eslint": "19.5.6",
+ "@nx/js": "19.5.6",
+ "@nx/node": "19.5.6",
"@phenomnomnominal/tsquery": "~5.0.1",
"tslib": "^2.3.0"
}
@@ -8383,27 +8421,29 @@
}
},
"node_modules/@nx/node": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/node/-/node-19.5.1.tgz",
- "integrity": "sha512-EVZt+oIzCzpU2hnnn92KUa8ncksFl8eZceSr7qQVnYN+A++aISQQAAiGnNm+9i097kM70C9zcGr4yo74r3UkZw==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/node/-/node-19.5.6.tgz",
+ "integrity": "sha512-nWWoZCdomYOo0JmJMiP1UWlAnCdrvqLxXgWS6MNbQTT0rhJSn6em5S9N4TuHA7+aCDInvzNEL8YcVTm1xCbtug==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nrwl/node": "19.5.1",
- "@nx/devkit": "19.5.1",
- "@nx/eslint": "19.5.1",
- "@nx/jest": "19.5.1",
- "@nx/js": "19.5.1",
+ "@nrwl/node": "19.5.6",
+ "@nx/devkit": "19.5.6",
+ "@nx/eslint": "19.5.6",
+ "@nx/jest": "19.5.6",
+ "@nx/js": "19.5.6",
"tslib": "^2.3.0"
}
},
"node_modules/@nx/nx-darwin-arm64": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.5.1.tgz",
- "integrity": "sha512-mdFSnwf+cEGZQ0HDJIzHBOWmho66VUN44qsDRPVSwpaEqlHSlcbiqKzM0+oVx9CRDLNQoYtYs1Y3hGlnag1sCQ==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.5.6.tgz",
+ "integrity": "sha512-evEpUq571PQkhaLBR7ul5iqE2l97QS7Q37/rxoBuwJzyQ/QKHfNu5t032bR3KLyEOrv7golT10jMeoQlNeF7eQ==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -8413,13 +8453,14 @@
}
},
"node_modules/@nx/nx-darwin-x64": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.5.1.tgz",
- "integrity": "sha512-ficF0T6vN0LkkYoPyEgdXEOfIR9ss0hXeG2s32SwqfjNZlbisO4fvrHM8f8WPujEJ+5nCIJ9o4jJiWBHkfUTBg==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.5.6.tgz",
+ "integrity": "sha512-o1tu0dOW7TZ80VN9N11FQL/3gHd1+t6NqtEmRClN0/sAh2MZyiBdbXv7UeN5HoKE7HAusiVFIxK3c1lxOvFtsQ==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -8429,13 +8470,14 @@
}
},
"node_modules/@nx/nx-freebsd-x64": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.5.1.tgz",
- "integrity": "sha512-UjquUf8N06DlAyhpvEm1D57WXWQnvvVq6vIxq6rTmK+alWjMyOUs90sPYrqvV3TARAsdkos763S8T5rAOB/xYQ==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.5.6.tgz",
+ "integrity": "sha512-IUL0ROGpLUol9cuVJ7VeUvaB/ptxg7DOjMef1+LJeOgxl/SFNa0bj0kKpA/AQwujz6cLI7Ei7xLTVQOboNh1DA==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"freebsd"
@@ -8445,13 +8487,14 @@
}
},
"node_modules/@nx/nx-linux-arm-gnueabihf": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.5.1.tgz",
- "integrity": "sha512-UXBXiLEZVgHlz/iO634JQwQU/MP0Kx0tKwEzucjAryIUFTBRAZos76wTF8glBQaH4dTwWtQQObxaEVGGu+J4dA==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.5.6.tgz",
+ "integrity": "sha512-TGf1+cpWg5QiPEGW5kgxa1fVNyASMuqu+LvQ9CKhNYNz5EPD15yr/k6C0tOjgSXro3wi8TikTeG0Ln2hpmn6pw==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -8461,13 +8504,14 @@
}
},
"node_modules/@nx/nx-linux-arm64-gnu": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.5.1.tgz",
- "integrity": "sha512-UlBq3ImnFHMsI6jLxQA97ntgBvMvtnVmL/eluGOcUres9q0IqzTOWmBDccpR3ZLbI3NBrmDRrS79aid3SuBKwA==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.5.6.tgz",
+ "integrity": "sha512-4hZI5NmnBEAzr3NV/BtlPjbSVffLWGGCJ5tB/JB/NpW/vMtzOPCZ4RvsHuJMPprqHcXOdUnBgZFEcLbEMUXz0A==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -8477,13 +8521,14 @@
}
},
"node_modules/@nx/nx-linux-arm64-musl": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.5.1.tgz",
- "integrity": "sha512-sw0zdO9CLjDY9qiweZm5p5zrkOeRPagimHCtHw/YIuPfkBrtoazi9adD+f8OXou/jrL/f1UE2/CA3gQKDOT35Q==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.5.6.tgz",
+ "integrity": "sha512-n0oIBblMN+nlcBUbrFUkRSyzKZVR+G1lzdZ3PuHVwLC664hkbijEBAdF2E321yRfv5ohQVY0UIYDZVFN2XhFUg==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -8493,13 +8538,14 @@
}
},
"node_modules/@nx/nx-linux-x64-gnu": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.5.1.tgz",
- "integrity": "sha512-tHPcBgsyyLNRfJLWnDQLcWZZ69xn4Ocfnquxs30Q5gk5CZTNSVm/yA4ibYn9JGvSu0dNjzM+nJwmtEaudhtgSg==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.5.6.tgz",
+ "integrity": "sha512-IuoNo1bDHyJEeHom/n2m4+AA+UQ+Rlryvt9+bTdADclSFjmBLYCgbJwQRy7q9+vQk2mpQm0pQJv4d3XKCpDH+g==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -8509,13 +8555,14 @@
}
},
"node_modules/@nx/nx-linux-x64-musl": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.5.1.tgz",
- "integrity": "sha512-dHP8GrqK05gHwq6kSjuZqaN0CQrID2OspuJ4vKd+WoelioFNmdRAQWkOyqXA5dlrJfWs/IqV+WvnexYlxG1quw==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.5.6.tgz",
+ "integrity": "sha512-FXtB8m/CSRkXLtDOAGfImO9OCUDIwYBssnvCVqX6PyPTBaVWo/GvX1O9WRbXSqSVIaJJTPn1aY/p6vptlGbDFw==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -8525,13 +8572,14 @@
}
},
"node_modules/@nx/nx-win32-arm64-msvc": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.5.1.tgz",
- "integrity": "sha512-YNhVje0gSmt7bLWDCR1Ea3vbvqF+iIeDhtpJuK7kXMbWAujZrA5sGW/xdPPShV8omlQuu1Ggms0BUCwr8Aiyig==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.5.6.tgz",
+ "integrity": "sha512-aIDU84rjvxoqyUDIdN4VwS91Yec8bAtXOxjOFlF2acY2tXh0RjzmM+mkEP44nVAzFy0V1/cjzBKb6643FsEqdA==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
@@ -8541,13 +8589,14 @@
}
},
"node_modules/@nx/nx-win32-x64-msvc": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.5.1.tgz",
- "integrity": "sha512-bxj12iAuyEwBCV6A+C8nXQ55KNji4L0VrL3y2KeH0wOeBMgTeKQxoMNk0/Ty2O6354YkAgwaKRHJMnM/LfO+og==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.5.6.tgz",
+ "integrity": "sha512-zWB/2TjhNYKHbuPh++5hYitno3EpSFXrPND0I0VLec27WW7voRY9XQFFznA3omForU4FfmVhITcKCqzIb3EtpA==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
@@ -8557,30 +8606,32 @@
}
},
"node_modules/@nx/storybook": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/storybook/-/storybook-19.5.1.tgz",
- "integrity": "sha512-D5ltyQaOvQlGctQEy3t6ATNP1ddAIEAq1QMfzWxeXqhJPUKkPxV8vZUr6A+eKfm7z202pZ3UqInu6CQ5ydG/VQ==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/storybook/-/storybook-19.5.6.tgz",
+ "integrity": "sha512-9lfGxk/Wl6yVXWJZrOgcgYP1QmdxH6GG+VmOB+ofvQWapfH962jadmNlgxDzQW9uYoNI50WHibVq1eCfll68Uw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nrwl/storybook": "19.5.1",
- "@nx/cypress": "19.5.1",
- "@nx/devkit": "19.5.1",
- "@nx/eslint": "19.5.1",
- "@nx/js": "19.5.1",
+ "@nrwl/storybook": "19.5.6",
+ "@nx/cypress": "19.5.6",
+ "@nx/devkit": "19.5.6",
+ "@nx/eslint": "19.5.6",
+ "@nx/js": "19.5.6",
"@phenomnomnominal/tsquery": "~5.0.1",
"semver": "^7.5.3",
"tslib": "^2.3.0"
}
},
"node_modules/@nx/web": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/web/-/web-19.5.1.tgz",
- "integrity": "sha512-9R5KvFpmKlo6NHfswlxz2fBnnjj3Y/RX4o1RPwPDFUa9xPB+Ct1dbOESWSRSa6tJTa2UbyOfmiGdLnYdz0Gi+w==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/web/-/web-19.5.6.tgz",
+ "integrity": "sha512-mCw2KpVj8FPieRFn98bMJxF4s1RCMTciC78NKFiC0Dmg0KFmhFUw6geWe8anhhjbTxqFvLENMJQIn9K4dlaL1A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nrwl/web": "19.5.1",
- "@nx/devkit": "19.5.1",
- "@nx/js": "19.5.1",
+ "@nrwl/web": "19.5.6",
+ "@nx/devkit": "19.5.6",
+ "@nx/js": "19.5.6",
"chalk": "^4.1.0",
"detect-port": "^1.5.1",
"http-server": "^14.1.0",
@@ -8592,6 +8643,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -8607,6 +8659,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -8623,6 +8676,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -8632,6 +8686,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -8640,17 +8695,18 @@
}
},
"node_modules/@nx/webpack": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-19.5.1.tgz",
- "integrity": "sha512-9oIVBQWcvUBVLfK+9tVK2741EOYJRwq/gJmo7jYolRg8UlTumHoAg4nzPU9ZQ4Uq3y5+6nb8m5jfEzqI6GsSVQ==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-19.5.6.tgz",
+ "integrity": "sha512-7xMYx0MIxf4kuhiIyF7QEee7AgK1wzroO2wl+9fU8sjKhvDgW9k8huMCNkOcScptB3SP4CiM9b7S5c/pwr75hQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/core": "^7.23.2",
"@module-federation/enhanced": "^0.2.3",
"@module-federation/sdk": "^0.2.3",
- "@nrwl/webpack": "19.5.1",
- "@nx/devkit": "19.5.1",
- "@nx/js": "19.5.1",
+ "@nrwl/webpack": "19.5.6",
+ "@nx/devkit": "19.5.6",
+ "@nx/js": "19.5.6",
"@phenomnomnominal/tsquery": "~5.0.1",
"ajv": "^8.12.0",
"autoprefixer": "^10.4.9",
@@ -8660,7 +8716,9 @@
"copy-webpack-plugin": "^10.2.4",
"css-loader": "^6.4.0",
"css-minimizer-webpack-plugin": "^5.0.0",
+ "express": "^4.19.2",
"fork-ts-checker-webpack-plugin": "7.2.13",
+ "http-proxy-middleware": "^3.0.0",
"less": "4.1.3",
"less-loader": "11.1.0",
"license-webpack-plugin": "^4.0.2",
@@ -8691,13 +8749,15 @@
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
"integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@nx/webpack/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -8713,6 +8773,7 @@
"resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
"integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -8725,6 +8786,7 @@
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "*"
}
@@ -8734,6 +8796,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -8745,11 +8808,22 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/@nx/webpack/node_modules/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/@nx/webpack/node_modules/copy-webpack-plugin": {
"version": "10.2.4",
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz",
"integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-glob": "^3.2.7",
"glob-parent": "^6.0.1",
@@ -8774,6 +8848,7 @@
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
"integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/parse-json": "^4.0.0",
"import-fresh": "^3.2.1",
@@ -8790,6 +8865,7 @@
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz",
"integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"icss-utils": "^5.1.0",
"postcss": "^8.4.33",
@@ -8820,20 +8896,75 @@
}
}
},
+ "node_modules/@nx/webpack/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
"node_modules/@nx/webpack/node_modules/define-lazy-prop": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
"integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
+ "node_modules/@nx/webpack/node_modules/express": {
+ "version": "4.19.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
+ "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.2",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.6.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.2.0",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.11.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.18.0",
+ "serve-static": "1.15.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
"node_modules/@nx/webpack/node_modules/glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.3"
},
@@ -8846,6 +8977,7 @@
"resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz",
"integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-union": "^3.0.1",
"dir-glob": "^3.0.1",
@@ -8866,39 +8998,17 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/@nx/webpack/node_modules/http-proxy-middleware": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
- "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
- "dev": true,
- "dependencies": {
- "@types/http-proxy": "^1.17.8",
- "http-proxy": "^1.18.1",
- "is-glob": "^4.0.1",
- "is-plain-obj": "^3.0.0",
- "micromatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "@types/express": "^4.17.13"
- },
- "peerDependenciesMeta": {
- "@types/express": {
- "optional": true
- }
- }
- },
"node_modules/@nx/webpack/node_modules/is-docker": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
"integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"dev": true,
+ "license": "MIT",
"bin": {
"is-docker": "cli.js"
},
@@ -8914,6 +9024,7 @@
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-docker": "^2.0.0"
},
@@ -8926,6 +9037,7 @@
"resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz",
"integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"copy-anything": "^2.0.1",
"parse-node-version": "^1.0.1",
@@ -8952,6 +9064,7 @@
"resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz",
"integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"klona": "^2.0.4"
},
@@ -8972,6 +9085,7 @@
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
@@ -8986,6 +9100,7 @@
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
"integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
"dev": true,
+ "license": "MIT",
"optional": true,
"dependencies": {
"pify": "^4.0.1",
@@ -9000,6 +9115,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
+ "license": "ISC",
"optional": true,
"bin": {
"semver": "bin/semver"
@@ -9010,6 +9126,7 @@
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.7.tgz",
"integrity": "sha512-euWmddf0sk9Nv1O0gfeeUAvAkoSlWncNLF77C0TP2+WoPvy8mAHKOzMajcCz2dzvyt3CNgxb1obIEVFIRxaipg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"schema-utils": "^4.0.0"
},
@@ -9024,11 +9141,19 @@
"webpack": "^5.0.0"
}
},
+ "node_modules/@nx/webpack/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@nx/webpack/node_modules/open": {
"version": "8.4.2",
"resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
"integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"define-lazy-prop": "^2.0.0",
"is-docker": "^2.1.1",
@@ -9046,6 +9171,7 @@
"resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz",
"integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/retry": "0.12.0",
"retry": "^0.13.1"
@@ -9058,13 +9184,22 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
"integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@nx/webpack/node_modules/path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@nx/webpack/node_modules/pify": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true,
+ "license": "MIT",
"optional": true,
"engines": {
"node": ">=6"
@@ -9075,6 +9210,7 @@
"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz",
"integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cosmiconfig": "^7.0.0",
"klona": "^2.0.5",
@@ -9097,6 +9233,7 @@
"resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
"integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 4"
}
@@ -9106,6 +9243,7 @@
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
"integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.1.0"
}
@@ -9115,6 +9253,7 @@
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz",
"integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"klona": "^2.0.4",
"neo-async": "^2.6.2"
@@ -9153,6 +9292,7 @@
"resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
"integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -9165,6 +9305,7 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
+ "license": "BSD-3-Clause",
"optional": true,
"engines": {
"node": ">=0.10.0"
@@ -9175,6 +9316,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -9187,6 +9329,7 @@
"resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz",
"integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"colorette": "^2.0.10",
"memfs": "^3.4.3",
@@ -9210,6 +9353,7 @@
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",
"integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/bonjour": "^3.5.9",
"@types/connect-history-api-fallback": "^1.3.5",
@@ -9264,17 +9408,43 @@
}
}
},
+ "node_modules/@nx/webpack/node_modules/webpack-dev-server/node_modules/http-proxy-middleware": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
+ "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/http-proxy": "^1.17.8",
+ "http-proxy": "^1.18.1",
+ "is-glob": "^4.0.1",
+ "is-plain-obj": "^3.0.0",
+ "micromatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "@types/express": "^4.17.13"
+ },
+ "peerDependenciesMeta": {
+ "@types/express": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@nx/workspace": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.5.1.tgz",
- "integrity": "sha512-I/O+kDxaLzVXITmddijffNzllioe84oGSQ3q8s3nW7RP2/T1LkmOS7Prnd80sEVteQowHe0kOnvAh+p82kAUjQ==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.5.6.tgz",
+ "integrity": "sha512-VkyHzSPI+++kLgftE6HA/jXcbn3zZwDYjhsrmSqwutj8BTuKhxs1YIL2gkzYVoTytF1wpWl3nk5MzqMGclptjA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nrwl/workspace": "19.5.1",
- "@nx/devkit": "19.5.1",
+ "@nrwl/workspace": "19.5.6",
+ "@nx/devkit": "19.5.6",
"chalk": "^4.1.0",
"enquirer": "~2.3.6",
- "nx": "19.5.1",
+ "nx": "19.5.6",
"tslib": "^2.3.0",
"yargs-parser": "21.1.1"
}
@@ -9284,6 +9454,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -9299,6 +9470,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -9315,6 +9487,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -9324,6 +9497,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -11151,6 +11325,7 @@
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
"integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=10.13.0"
}
@@ -11217,6 +11392,7 @@
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz",
"integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"tslib": "^2.4.0"
}
@@ -12436,6 +12612,7 @@
"resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz",
"integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"js-yaml": "^3.10.0",
"tslib": "^2.4.0"
@@ -12449,6 +12626,7 @@
"resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz",
"integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
@@ -12460,7 +12638,8 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
+ "dev": true,
+ "license": "Python-2.0"
},
"node_modules/abab": {
"version": "2.0.6",
@@ -12597,6 +12776,7 @@
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.14.tgz",
"integrity": "sha512-DnyqqifT4Jrcvb8USYjp6FHtBpEIz1mnXu6pTRHZ0RL69LbQYiO+0lDFg5+OKA7U29oWSs3a/i8fhn8ZcceIWg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12.0"
}
@@ -12784,7 +12964,8 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/anymatch": {
"version": "3.1.3",
@@ -13150,10 +13331,11 @@
"dev": true
},
"node_modules/axios": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
- "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz",
+ "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
@@ -13590,6 +13772,7 @@
"resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
"integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"safe-buffer": "5.1.2"
},
@@ -13601,7 +13784,8 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/batch": {
"version": "0.6.1",
@@ -13838,6 +14022,7 @@
"resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz",
"integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==",
"dev": true,
+ "license": "(MIT OR Apache-2.0)",
"bin": {
"btoa": "bin/btoa.js"
},
@@ -14040,6 +14225,7 @@
"resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz",
"integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"mime-types": "^2.1.18",
"ylru": "^1.2.0"
@@ -14169,6 +14355,7 @@
"resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
"integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"browserslist": "^4.0.0",
"caniuse-lite": "^1.0.0",
@@ -14817,7 +15004,8 @@
"version": "2.9.3",
"resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
"integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/colorette": {
"version": "2.0.20",
@@ -15069,6 +15257,7 @@
"resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz",
"integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"depd": "~2.0.0",
"keygrip": "~1.1.0"
@@ -15197,6 +15386,7 @@
"resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
"integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4.0"
}
@@ -15457,6 +15647,7 @@
"resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz",
"integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": "^14 || ^16 || >=18"
},
@@ -15503,6 +15694,7 @@
"resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz",
"integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.18",
"cssnano": "^6.0.1",
@@ -15572,6 +15764,7 @@
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"mdn-data": "2.0.30",
"source-map-js": "^1.0.1"
@@ -15616,6 +15809,7 @@
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz",
"integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cssnano-preset-default": "^6.1.2",
"lilconfig": "^3.1.1"
@@ -15636,6 +15830,7 @@
"resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz",
"integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"browserslist": "^4.23.0",
"css-declaration-sorter": "^7.2.0",
@@ -15680,6 +15875,7 @@
"resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz",
"integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^14 || ^16 || >=18.0"
},
@@ -15692,6 +15888,7 @@
"resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
"integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"css-tree": "~2.2.0"
},
@@ -15705,6 +15902,7 @@
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
"integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"mdn-data": "2.0.28",
"source-map-js": "^1.0.1"
@@ -15718,7 +15916,8 @@
"version": "2.0.28",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
- "dev": true
+ "dev": true,
+ "license": "CC0-1.0"
},
"node_modules/cssom": {
"version": "0.5.0",
@@ -16457,6 +16656,7 @@
"resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz",
"integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4.0"
}
@@ -16551,7 +16751,8 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
"integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/deep-is": {
"version": "0.1.4",
@@ -16747,7 +16948,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/delimit-stream": {
"version": "0.1.0",
@@ -17041,6 +17243,7 @@
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
"integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"jake": "^10.8.5"
},
@@ -17156,6 +17359,7 @@
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
"integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-colors": "^4.1.1"
},
@@ -17252,7 +17456,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz",
"integrity": "sha512-JM8N6PytDbmIYm1IhPWlo8vr3NtfjhDY/1MhD/a5b/aad/USE8a0+NsqE9d5n+GVGmuNkPQWm4bFQWv18d8tMg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/es-abstract": {
"version": "1.23.3",
@@ -18334,6 +18539,7 @@
"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
"integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"homedir-polyfill": "^1.0.1"
},
@@ -18651,6 +18857,7 @@
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
"integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"minimatch": "^5.0.1"
}
@@ -18660,6 +18867,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -18730,6 +18938,7 @@
"resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-2.0.1.tgz",
"integrity": "sha512-qVdaUhYO39zmh28/JLQM5CoYN9byEOKEH4qfa8K1eNV17W0UUMJ9WgbR/hHFH+t5rcl+6RTb5UC7ck/I+uRkpQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"resolve-dir": "^1.0.1"
},
@@ -18742,6 +18951,7 @@
"resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-2.0.0.tgz",
"integrity": "sha512-WgZ+nKbELDa6N3i/9nrHeNznm+lY3z4YfhDDWgW+5P0pdmMj26bxaxU11ookgY3NyP9GC7HvZ9etp0jRFqGEeQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"find-file-up": "^2.0.1"
},
@@ -18859,6 +19069,7 @@
"resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.13.tgz",
"integrity": "sha512-fR3WRkOb4bQdWB/y7ssDUlVdrclvwtyCUIHCfivAoYxq9dF7XfrDKbMdZIfwJ7hxIAqkYSGeU7lLJE6xrxIBdg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.16.7",
"chalk": "^4.1.2",
@@ -18893,6 +19104,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -18909,6 +19121,7 @@
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
+ "license": "MIT",
"peerDependencies": {
"ajv": "^6.9.1"
}
@@ -18918,6 +19131,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -18933,6 +19147,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -18943,6 +19158,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -18959,6 +19175,7 @@
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
"integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/parse-json": "^4.0.0",
"import-fresh": "^3.2.1",
@@ -18975,6 +19192,7 @@
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -18989,6 +19207,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -18997,13 +19216,15 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -19016,6 +19237,7 @@
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
"integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
@@ -19034,6 +19256,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -19088,6 +19311,7 @@
"resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz",
"integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"js-yaml": "^3.13.1"
}
@@ -19096,7 +19320,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fs-extra": {
"version": "9.1.0",
@@ -19469,6 +19694,7 @@
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
"integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"global-prefix": "^1.0.1",
"is-windows": "^1.0.1",
@@ -19483,6 +19709,7 @@
"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
"integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"expand-tilde": "^2.0.2",
"homedir-polyfill": "^1.0.1",
@@ -19498,13 +19725,15 @@
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/global-prefix/node_modules/which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -19888,6 +20117,7 @@
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
"integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"parse-passwd": "^1.0.0"
},
@@ -20074,6 +20304,7 @@
"resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz",
"integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"deep-equal": "~1.0.1",
"http-errors": "~1.8.0"
@@ -20087,6 +20318,7 @@
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -20096,6 +20328,7 @@
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
"integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"depd": "~1.1.2",
"inherits": "2.0.4",
@@ -20112,6 +20345,7 @@
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -20206,6 +20440,7 @@
"resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz",
"integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"basic-auth": "^2.0.1",
"chalk": "^4.1.2",
@@ -20233,6 +20468,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -20248,6 +20484,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -20264,6 +20501,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -20273,6 +20511,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -21108,6 +21347,7 @@
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -21158,6 +21398,7 @@
"resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz",
"integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==",
"dev": true,
+ "license": "MIT",
"peerDependencies": {
"ws": "*"
}
@@ -21304,6 +21545,7 @@
"resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
"integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"async": "^3.2.3",
"chalk": "^4.0.2",
@@ -21322,6 +21564,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -21336,13 +21579,15 @@
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
"integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/jake/node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -21353,6 +21598,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -21369,6 +21615,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -21378,6 +21625,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -21390,6 +21638,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -23392,6 +23641,7 @@
"resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
"integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"tsscmp": "1.0.6"
},
@@ -23435,6 +23685,7 @@
"resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz",
"integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
@@ -23444,6 +23695,7 @@
"resolved": "https://registry.npmjs.org/koa/-/koa-2.11.0.tgz",
"integrity": "sha512-EpR9dElBTDlaDgyhDMiLkXrPwp6ZqgAIBvhhmxQ9XN4TFgW+gEz6tkcsNI6BnUbUftrKDjVFj4lW2/J2aNBMMA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"accepts": "^1.3.5",
"cache-content-type": "^1.0.0",
@@ -23478,13 +23730,15 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz",
"integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/koa-convert": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz",
"integrity": "sha512-K9XqjmEDStGX09v3oxR7t5uPRy0jqJdvodHa6wxWTHrTfDq0WUNnYTOOUZN6g8OM8oZQXprQASbiIXG2Ez8ehA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"co": "^4.6.0",
"koa-compose": "^3.0.0"
@@ -23498,6 +23752,7 @@
"resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz",
"integrity": "sha512-8gen2cvKHIZ35eDEik5WOo8zbVp9t4cP8p4hW4uE55waxolLRexKKrqfCpwhGVppnB40jWeF8bZeTVg99eZgPw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"any-promise": "^1.1.0"
}
@@ -23507,6 +23762,7 @@
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
@@ -23516,6 +23772,7 @@
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -23525,6 +23782,7 @@
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
"integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"depd": "~1.1.2",
"inherits": "2.0.4",
@@ -23540,13 +23798,15 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/koa/node_modules/statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -23713,6 +23973,7 @@
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
"integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=14"
},
@@ -23725,6 +23986,7 @@
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz",
"integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
@@ -24291,7 +24553,8 @@
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeepwith/-/lodash.clonedeepwith-4.5.0.tgz",
"integrity": "sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.debounce": {
"version": "4.0.8",
@@ -24330,7 +24593,8 @@
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
"integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/log-symbols": {
"version": "4.1.0",
@@ -24531,6 +24795,7 @@
"resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz",
"integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"date-format": "^4.0.14",
"debug": "^4.3.4",
@@ -24546,7 +24811,8 @@
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz",
"integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/loose-envify": {
"version": "1.4.0",
@@ -24732,7 +24998,8 @@
"version": "2.0.30",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
- "dev": true
+ "dev": true,
+ "license": "CC0-1.0"
},
"node_modules/media-typer": {
"version": "0.3.0",
@@ -26118,7 +26385,8 @@
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz",
"integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/node-releases": {
"version": "2.0.18",
@@ -26130,6 +26398,7 @@
"resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz",
"integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cron-parser": "^4.2.0",
"long-timeout": "0.1.1",
@@ -26333,18 +26602,19 @@
"devOptional": true
},
"node_modules/nx": {
- "version": "19.5.1",
- "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.1.tgz",
- "integrity": "sha512-aKctNLiK2hXl2536/qwnAqvSzNlIGwJdTBl2ajOnSyNrGWuLDMllTNTdp0/lU0QBJ2NSod3JbBQFV7cc9ILs4w==",
+ "version": "19.5.6",
+ "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.6.tgz",
+ "integrity": "sha512-qjP17aa5ViXSpo0bDgJ7O3b8EY/0+PbX7ZIKvG1g6qasohtfM1y4Sx2bbSow0zCKU0+r1LnR53Q0lyX4OOgtUg==",
"dev": true,
"hasInstallScript": true,
+ "license": "MIT",
"dependencies": {
"@napi-rs/wasm-runtime": "0.2.4",
- "@nrwl/tao": "19.5.1",
+ "@nrwl/tao": "19.5.6",
"@yarnpkg/lockfile": "^1.1.0",
"@yarnpkg/parsers": "3.0.0-rc.46",
"@zkochan/js-yaml": "0.0.7",
- "axios": "^1.6.0",
+ "axios": "^1.7.2",
"chalk": "^4.1.0",
"cli-cursor": "3.1.0",
"cli-spinners": "2.6.1",
@@ -26380,16 +26650,16 @@
"nx-cloud": "bin/nx-cloud.js"
},
"optionalDependencies": {
- "@nx/nx-darwin-arm64": "19.5.1",
- "@nx/nx-darwin-x64": "19.5.1",
- "@nx/nx-freebsd-x64": "19.5.1",
- "@nx/nx-linux-arm-gnueabihf": "19.5.1",
- "@nx/nx-linux-arm64-gnu": "19.5.1",
- "@nx/nx-linux-arm64-musl": "19.5.1",
- "@nx/nx-linux-x64-gnu": "19.5.1",
- "@nx/nx-linux-x64-musl": "19.5.1",
- "@nx/nx-win32-arm64-msvc": "19.5.1",
- "@nx/nx-win32-x64-msvc": "19.5.1"
+ "@nx/nx-darwin-arm64": "19.5.6",
+ "@nx/nx-darwin-x64": "19.5.6",
+ "@nx/nx-freebsd-x64": "19.5.6",
+ "@nx/nx-linux-arm-gnueabihf": "19.5.6",
+ "@nx/nx-linux-arm64-gnu": "19.5.6",
+ "@nx/nx-linux-arm64-musl": "19.5.6",
+ "@nx/nx-linux-x64-gnu": "19.5.6",
+ "@nx/nx-linux-x64-musl": "19.5.6",
+ "@nx/nx-win32-arm64-msvc": "19.5.6",
+ "@nx/nx-win32-x64-msvc": "19.5.6"
},
"peerDependencies": {
"@swc-node/register": "^1.8.0",
@@ -26409,6 +26679,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -26424,6 +26695,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -26440,6 +26712,7 @@
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
"integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"restore-cursor": "^3.1.0"
},
@@ -26452,6 +26725,7 @@
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz",
"integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
},
@@ -26464,6 +26738,7 @@
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
"integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -26473,6 +26748,7 @@
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=12"
},
@@ -26485,6 +26761,7 @@
"resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz",
"integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"dotenv": "^16.4.4"
},
@@ -26500,6 +26777,7 @@
"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
"integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"escape-string-regexp": "^1.0.5"
},
@@ -26515,6 +26793,7 @@
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -26529,6 +26808,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -26538,6 +26818,7 @@
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
"integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"dev": true,
+ "license": "MIT",
"bin": {
"is-docker": "cli.js"
},
@@ -26553,6 +26834,7 @@
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-docker": "^2.0.0"
},
@@ -26564,13 +26846,15 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
"integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/nx/node_modules/open": {
"version": "8.4.2",
"resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
"integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"define-lazy-prop": "^2.0.0",
"is-docker": "^2.1.1",
@@ -26588,6 +26872,7 @@
"resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz",
"integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"bl": "^4.0.3",
"chalk": "^4.1.0",
@@ -26610,6 +26895,7 @@
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
"integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"onetime": "^5.1.0",
"signal-exit": "^3.0.2"
@@ -26622,13 +26908,15 @@
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/nx/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -27293,6 +27581,7 @@
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
"integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -27685,6 +27974,7 @@
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
"integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"async": "^2.6.4",
"debug": "^3.2.7",
@@ -27699,6 +27989,7 @@
"resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
"integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lodash": "^4.17.14"
}
@@ -27708,6 +27999,7 @@
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ms": "^2.1.1"
}
@@ -27716,7 +28008,8 @@
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/possible-typed-array-names": {
"version": "1.0.0",
@@ -27759,6 +28052,7 @@
"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz",
"integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-selector-parser": "^6.0.11",
"postcss-value-parser": "^4.2.0"
@@ -27775,6 +28069,7 @@
"resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz",
"integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"browserslist": "^4.23.0",
"caniuse-api": "^3.0.0",
@@ -27793,6 +28088,7 @@
"resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz",
"integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"browserslist": "^4.23.0",
"postcss-value-parser": "^4.2.0"
@@ -27809,6 +28105,7 @@
"resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz",
"integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^14 || ^16 || >=18.0"
},
@@ -27821,6 +28118,7 @@
"resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz",
"integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^14 || ^16 || >=18.0"
},
@@ -27833,6 +28131,7 @@
"resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz",
"integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^14 || ^16 || >=18.0"
},
@@ -27845,6 +28144,7 @@
"resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz",
"integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^14 || ^16 || >=18.0"
},
@@ -27857,6 +28157,7 @@
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
"integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.0.0",
"read-cache": "^1.0.0",
@@ -27950,6 +28251,7 @@
"resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz",
"integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0",
"stylehacks": "^6.1.1"
@@ -27966,6 +28268,7 @@
"resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz",
"integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"browserslist": "^4.23.0",
"caniuse-api": "^3.0.0",
@@ -27984,6 +28287,7 @@
"resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz",
"integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -27999,6 +28303,7 @@
"resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz",
"integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"colord": "^2.9.3",
"cssnano-utils": "^4.0.2",
@@ -28016,6 +28321,7 @@
"resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz",
"integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"browserslist": "^4.23.0",
"cssnano-utils": "^4.0.2",
@@ -28033,6 +28339,7 @@
"resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz",
"integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-selector-parser": "^6.0.16"
},
@@ -28103,6 +28410,7 @@
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz",
"integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^14 || ^16 || >=18.0"
},
@@ -28115,6 +28423,7 @@
"resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz",
"integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -28130,6 +28439,7 @@
"resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz",
"integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -28145,6 +28455,7 @@
"resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz",
"integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -28160,6 +28471,7 @@
"resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz",
"integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -28175,6 +28487,7 @@
"resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz",
"integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -28190,6 +28503,7 @@
"resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz",
"integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"browserslist": "^4.23.0",
"postcss-value-parser": "^4.2.0"
@@ -28206,6 +28520,7 @@
"resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz",
"integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -28221,6 +28536,7 @@
"resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz",
"integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -28236,6 +28552,7 @@
"resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz",
"integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cssnano-utils": "^4.0.2",
"postcss-value-parser": "^4.2.0"
@@ -28252,6 +28569,7 @@
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz",
"integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"browserslist": "^4.23.0",
"caniuse-api": "^3.0.0"
@@ -28268,6 +28586,7 @@
"resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz",
"integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -28295,6 +28614,7 @@
"resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz",
"integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0",
"svgo": "^3.2.0"
@@ -28311,6 +28631,7 @@
"resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz",
"integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"postcss-selector-parser": "^6.0.16"
},
@@ -28513,7 +28834,8 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/prr": {
"version": "1.0.1",
@@ -28633,7 +28955,8 @@
"version": "9.2.1",
"resolved": "https://registry.npmjs.org/rambda/-/rambda-9.2.1.tgz",
"integrity": "sha512-6Dp+QQVQuAuhwBlbIvL2FjJVHCKF29W+n9ca/BMTVDqpj+Q7KKqUh7UAINEna8aaB2/oRvPuL5hViCTQARa70Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/ramda": {
"version": "0.26.1",
@@ -28717,6 +29040,7 @@
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"pify": "^2.3.0"
}
@@ -29266,6 +29590,7 @@
"resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
"integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"expand-tilde": "^2.0.0",
"global-modules": "^1.0.0"
@@ -29691,7 +30016,8 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz",
"integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/select": {
"version": "1.1.2",
@@ -30146,7 +30472,8 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz",
"integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/source-map": {
"version": "0.7.4",
@@ -30682,6 +31009,7 @@
"resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
"integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"date-format": "^4.0.14",
"debug": "^4.3.4",
@@ -30696,6 +31024,7 @@
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
@@ -30710,6 +31039,7 @@
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
"dev": true,
+ "license": "MIT",
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
@@ -30719,6 +31049,7 @@
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 4.0.0"
}
@@ -30897,6 +31228,7 @@
"resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz",
"integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"duplexer": "^0.1.1",
"minimist": "^1.2.0",
@@ -30930,6 +31262,7 @@
"resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz",
"integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"browserslist": "^4.23.0",
"postcss-selector-parser": "^6.0.16"
@@ -30974,6 +31307,7 @@
"resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-7.1.3.tgz",
"integrity": "sha512-TY0SKwiY7D2kMd3UxaWKSf3xHF0FFN/FAfsSqfrhxRT/koXTwffq2cgEWDkLQz7VojMu7qEEHt5TlMjkPx9UDw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-glob": "^3.2.12",
"normalize-path": "^3.0.0"
@@ -31036,6 +31370,7 @@
"resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
"integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@trysound/sax": "0.2.0",
"commander": "^7.2.0",
@@ -31061,6 +31396,7 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 10"
}
@@ -31110,6 +31446,7 @@
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"bl": "^4.0.3",
"end-of-stream": "^1.4.1",
@@ -31648,6 +31985,7 @@
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz",
"integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
"enhanced-resolve": "^5.0.0",
@@ -31668,6 +32006,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -31683,6 +32022,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -31699,6 +32039,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -31708,6 +32049,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -31776,6 +32118,7 @@
"resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.0.tgz",
"integrity": "sha512-fw/7265mIWukrSHd0i+wSwx64kYUSAKPfxRDksjKIYTxSAp9W9/xcZVBF4Kl0eqQd5eBpAQ/oQrc5RyM/0c1GQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
"enhanced-resolve": "^5.7.0",
@@ -31790,6 +32133,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -31805,6 +32149,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -31821,6 +32166,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -31830,6 +32176,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -31929,6 +32276,7 @@
"resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
"integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.6.x"
}
@@ -32401,6 +32749,7 @@
"resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
"integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4",
"yarn": "*"
@@ -32460,7 +32809,8 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
"integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/url-parse": {
"version": "1.5.10",
@@ -33512,6 +33862,7 @@
"resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz",
"integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -33994,6 +34345,7 @@
"resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz",
"integrity": "sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 4.0.0"
}
diff --git a/package.json b/package.json
index 3f555a43b..ab9b5b812 100644
--- a/package.json
+++ b/package.json
@@ -152,16 +152,16 @@
"@angular/pwa": "18.1.1",
"@nestjs/schematics": "10.0.1",
"@nestjs/testing": "10.1.3",
- "@nx/angular": "19.5.1",
- "@nx/cypress": "19.5.1",
- "@nx/eslint-plugin": "19.5.1",
- "@nx/jest": "19.5.1",
- "@nx/js": "19.5.1",
- "@nx/nest": "19.5.1",
- "@nx/node": "19.5.1",
- "@nx/storybook": "19.5.1",
- "@nx/web": "19.5.1",
- "@nx/workspace": "19.5.1",
+ "@nx/angular": "19.5.6",
+ "@nx/cypress": "19.5.6",
+ "@nx/eslint-plugin": "19.5.6",
+ "@nx/jest": "19.5.6",
+ "@nx/js": "19.5.6",
+ "@nx/nest": "19.5.6",
+ "@nx/node": "19.5.6",
+ "@nx/storybook": "19.5.6",
+ "@nx/web": "19.5.6",
+ "@nx/workspace": "19.5.6",
"@schematics/angular": "18.1.1",
"@simplewebauthn/types": "9.0.1",
"@storybook/addon-essentials": "8.2.6",
@@ -190,7 +190,7 @@
"jest": "29.7.0",
"jest-environment-jsdom": "29.7.0",
"jest-preset-angular": "14.1.0",
- "nx": "19.5.1",
+ "nx": "19.5.6",
"prettier": "3.3.3",
"prettier-plugin-organize-attributes": "1.0.0",
"react": "18.2.0",
From 41f5801b5e27923e9ca3eb4e9ed001eda274507c Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 4 Aug 2024 08:27:05 +0200
Subject: [PATCH 13/16] Feature/refactor unique asset type to asset profile
identifier (#3636)
* Refactoring
---
apps/api/src/app/admin/admin.service.ts | 59 ++++++++++---------
.../src/app/benchmark/benchmark.controller.ts | 8 ++-
.../src/app/benchmark/benchmark.service.ts | 15 +++--
apps/api/src/app/import/import.service.ts | 4 +-
apps/api/src/app/logo/logo.service.ts | 4 +-
apps/api/src/app/order/order.service.ts | 15 ++---
.../calculator/mwr/portfolio-calculator.ts | 7 ++-
.../calculator/portfolio-calculator.ts | 22 +++----
.../calculator/twr/portfolio-calculator.ts | 7 ++-
.../portfolio/current-rate.service.spec.ts | 16 ++---
.../src/app/portfolio/current-rate.service.ts | 15 +++--
.../interfaces/get-value-object.interface.ts | 4 +-
.../app/redis-cache/redis-cache.service.ts | 4 +-
.../interfaces/symbol-item.interface.ts | 7 ++-
apps/api/src/app/symbol/symbol.service.ts | 6 +-
.../data-gathering.processor.ts | 4 +-
.../data-gathering/data-gathering.service.ts | 43 +++++++++-----
.../data-provider/data-provider.service.ts | 14 ++---
.../exchange-rate-data.service.ts | 24 ++++----
.../api/src/services/interfaces/interfaces.ts | 7 ++-
.../market-data/market-data.service.ts | 16 ++---
.../symbol-profile/symbol-profile.service.ts | 12 ++--
.../admin-market-data.component.ts | 16 +++--
.../admin-market-data.service.ts | 18 +++---
.../asset-profile-dialog.component.ts | 15 +++--
.../home-holdings/home-holdings.component.ts | 4 +-
.../home-overview/home-overview.component.ts | 4 +-
.../import-activities-dialog.component.ts | 19 +++---
.../import-activities-dialog.html | 8 +--
.../allocations/allocations-page.component.ts | 6 +-
apps/client/src/app/services/admin.service.ts | 19 +++---
apps/client/src/app/services/data.service.ts | 14 ++---
libs/common/src/lib/helper.ts | 9 ++-
.../lib/interfaces/admin-data.interface.ts | 6 +-
... => asset-profile-identifier.interface.ts} | 2 +-
libs/common/src/lib/interfaces/index.ts | 4 +-
.../interfaces/responses/errors.interface.ts | 4 +-
.../src/lib/models/portfolio-snapshot.ts | 4 +-
.../activities-table.component.ts | 6 +-
.../lib/assistant/interfaces/interfaces.ts | 4 +-
.../src/lib/benchmark/benchmark.component.ts | 13 +++-
.../holdings-table.component.ts | 7 ++-
.../portfolio-proportion-chart.component.ts | 7 ++-
.../treemap-chart/treemap-chart.component.ts | 7 ++-
44 files changed, 289 insertions(+), 220 deletions(-)
rename libs/common/src/lib/interfaces/{unique-asset.interface.ts => asset-profile-identifier.interface.ts} (68%)
diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts
index b15c3efc3..50b781f54 100644
--- a/apps/api/src/app/admin/admin.service.ts
+++ b/apps/api/src/app/admin/admin.service.ts
@@ -21,9 +21,9 @@ import {
AdminMarketData,
AdminMarketDataDetails,
AdminMarketDataItem,
+ AssetProfileIdentifier,
EnhancedSymbolProfile,
- Filter,
- UniqueAsset
+ Filter
} from '@ghostfolio/common/interfaces';
import { MarketDataPreset } from '@ghostfolio/common/types';
@@ -59,7 +59,9 @@ export class AdminService {
currency,
dataSource,
symbol
- }: UniqueAsset & { currency?: string }): Promise {
+ }: AssetProfileIdentifier & { currency?: string }): Promise<
+ SymbolProfile | never
+ > {
try {
if (dataSource === 'MANUAL') {
return this.symbolProfileService.add({
@@ -96,7 +98,10 @@ export class AdminService {
}
}
- public async deleteProfileData({ dataSource, symbol }: UniqueAsset) {
+ public async deleteProfileData({
+ dataSource,
+ symbol
+ }: AssetProfileIdentifier) {
await this.marketDataService.deleteMany({ dataSource, symbol });
await this.symbolProfileService.delete({ dataSource, symbol });
}
@@ -325,7 +330,7 @@ export class AdminService {
public async getMarketDataBySymbol({
dataSource,
symbol
- }: UniqueAsset): Promise {
+ }: AssetProfileIdentifier): Promise {
let activitiesCount: EnhancedSymbolProfile['activitiesCount'] = 0;
let currency: EnhancedSymbolProfile['currency'] = '-';
let dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity'];
@@ -386,7 +391,7 @@ export class AdminService {
symbol,
symbolMapping,
url
- }: Prisma.SymbolProfileUpdateInput & UniqueAsset) {
+ }: AssetProfileIdentifier & Prisma.SymbolProfileUpdateInput) {
const symbolProfileOverrides = {
assetClass: assetClass as AssetClass,
assetSubClass: assetSubClass as AssetSubClass,
@@ -394,28 +399,28 @@ export class AdminService {
url: url as string
};
- const updatedSymbolProfile: Prisma.SymbolProfileUpdateInput & UniqueAsset =
- {
- comment,
- countries,
- currency,
- dataSource,
- holdings,
- scraperConfiguration,
- sectors,
- symbol,
- symbolMapping,
- ...(dataSource === 'MANUAL'
- ? { assetClass, assetSubClass, name, url }
- : {
- SymbolProfileOverrides: {
- upsert: {
- create: symbolProfileOverrides,
- update: symbolProfileOverrides
- }
+ const updatedSymbolProfile: AssetProfileIdentifier &
+ Prisma.SymbolProfileUpdateInput = {
+ comment,
+ countries,
+ currency,
+ dataSource,
+ holdings,
+ scraperConfiguration,
+ sectors,
+ symbol,
+ symbolMapping,
+ ...(dataSource === 'MANUAL'
+ ? { assetClass, assetSubClass, name, url }
+ : {
+ SymbolProfileOverrides: {
+ upsert: {
+ create: symbolProfileOverrides,
+ update: symbolProfileOverrides
}
- })
- };
+ }
+ })
+ };
await this.symbolProfileService.updateSymbolProfile(updatedSymbolProfile);
diff --git a/apps/api/src/app/benchmark/benchmark.controller.ts b/apps/api/src/app/benchmark/benchmark.controller.ts
index 9c6331498..ea9ba8025 100644
--- a/apps/api/src/app/benchmark/benchmark.controller.ts
+++ b/apps/api/src/app/benchmark/benchmark.controller.ts
@@ -4,9 +4,9 @@ import { getInterval } from '@ghostfolio/api/helper/portfolio.helper';
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor';
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor';
import type {
+ AssetProfileIdentifier,
BenchmarkMarketDataDetails,
- BenchmarkResponse,
- UniqueAsset
+ BenchmarkResponse
} from '@ghostfolio/common/interfaces';
import { permissions } from '@ghostfolio/common/permissions';
import type { DateRange, RequestWithUser } from '@ghostfolio/common/types';
@@ -41,7 +41,9 @@ export class BenchmarkController {
@HasPermission(permissions.accessAdminControl)
@Post()
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
- public async addBenchmark(@Body() { dataSource, symbol }: UniqueAsset) {
+ public async addBenchmark(
+ @Body() { dataSource, symbol }: AssetProfileIdentifier
+ ) {
try {
const benchmark = await this.benchmarkService.addBenchmark({
dataSource,
diff --git a/apps/api/src/app/benchmark/benchmark.service.ts b/apps/api/src/app/benchmark/benchmark.service.ts
index 27d91fd7d..e9495b44b 100644
--- a/apps/api/src/app/benchmark/benchmark.service.ts
+++ b/apps/api/src/app/benchmark/benchmark.service.ts
@@ -17,11 +17,11 @@ import {
resetHours
} from '@ghostfolio/common/helper';
import {
+ AssetProfileIdentifier,
Benchmark,
BenchmarkMarketDataDetails,
BenchmarkProperty,
- BenchmarkResponse,
- UniqueAsset
+ BenchmarkResponse
} from '@ghostfolio/common/interfaces';
import { BenchmarkTrend } from '@ghostfolio/common/types';
@@ -61,7 +61,10 @@ export class BenchmarkService {
return 0;
}
- public async getBenchmarkTrends({ dataSource, symbol }: UniqueAsset) {
+ public async getBenchmarkTrends({
+ dataSource,
+ symbol
+ }: AssetProfileIdentifier) {
const historicalData = await this.marketDataService.marketDataItems({
orderBy: {
date: 'desc'
@@ -228,7 +231,7 @@ export class BenchmarkService {
endDate?: Date;
startDate: Date;
userCurrency: string;
- } & UniqueAsset): Promise {
+ } & AssetProfileIdentifier): Promise {
const marketData: { date: string; value: number }[] = [];
const days = differenceInDays(endDate, startDate) + 1;
@@ -348,7 +351,7 @@ export class BenchmarkService {
public async addBenchmark({
dataSource,
symbol
- }: UniqueAsset): Promise> {
+ }: AssetProfileIdentifier): Promise> {
const assetProfile = await this.prismaService.symbolProfile.findFirst({
where: {
dataSource,
@@ -385,7 +388,7 @@ export class BenchmarkService {
public async deleteBenchmark({
dataSource,
symbol
- }: UniqueAsset): Promise> {
+ }: AssetProfileIdentifier): Promise> {
const assetProfile = await this.prismaService.symbolProfile.findFirst({
where: {
dataSource,
diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts
index c5809096e..69e64387d 100644
--- a/apps/api/src/app/import/import.service.ts
+++ b/apps/api/src/app/import/import.service.ts
@@ -19,7 +19,7 @@ import {
getAssetProfileIdentifier,
parseDate
} from '@ghostfolio/common/helper';
-import { UniqueAsset } from '@ghostfolio/common/interfaces';
+import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import {
AccountWithPlatform,
OrderWithAccount,
@@ -51,7 +51,7 @@ export class ImportService {
dataSource,
symbol,
userCurrency
- }: UniqueAsset & { userCurrency: string }): Promise {
+ }: AssetProfileIdentifier & { userCurrency: string }): Promise {
try {
const { firstBuyDate, historicalData, orders } =
await this.portfolioService.getPosition(dataSource, undefined, symbol);
diff --git a/apps/api/src/app/logo/logo.service.ts b/apps/api/src/app/logo/logo.service.ts
index a944900a0..908921a19 100644
--- a/apps/api/src/app/logo/logo.service.ts
+++ b/apps/api/src/app/logo/logo.service.ts
@@ -1,6 +1,6 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
-import { UniqueAsset } from '@ghostfolio/common/interfaces';
+import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import { HttpException, Injectable } from '@nestjs/common';
import { DataSource } from '@prisma/client';
@@ -17,7 +17,7 @@ export class LogoService {
public async getLogoByDataSourceAndSymbol({
dataSource,
symbol
- }: UniqueAsset) {
+ }: AssetProfileIdentifier) {
if (!DataSource[dataSource]) {
throw new HttpException(
getReasonPhrase(StatusCodes.NOT_FOUND),
diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts
index f7be3ba00..3b95211f0 100644
--- a/apps/api/src/app/order/order.service.ts
+++ b/apps/api/src/app/order/order.service.ts
@@ -11,9 +11,9 @@ import {
} from '@ghostfolio/common/config';
import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
import {
+ AssetProfileIdentifier,
EnhancedSymbolProfile,
- Filter,
- UniqueAsset
+ Filter
} from '@ghostfolio/common/interfaces';
import { OrderWithAccount } from '@ghostfolio/common/types';
@@ -51,7 +51,7 @@ export class OrderService {
symbol,
tags,
userId
- }: { tags: Tag[]; userId: string } & UniqueAsset) {
+ }: { tags: Tag[]; userId: string } & AssetProfileIdentifier) {
const orders = await this.prismaService.order.findMany({
where: {
userId,
@@ -285,7 +285,7 @@ export class OrderService {
return count;
}
- public async getLatestOrder({ dataSource, symbol }: UniqueAsset) {
+ public async getLatestOrder({ dataSource, symbol }: AssetProfileIdentifier) {
return this.prismaService.order.findFirst({
orderBy: {
date: 'desc'
@@ -464,7 +464,7 @@ export class OrderService {
this.prismaService.order.count({ where })
]);
- const uniqueAssets = uniqBy(
+ const assetProfileIdentifiers = uniqBy(
orders.map(({ SymbolProfile }) => {
return {
dataSource: SymbolProfile.dataSource,
@@ -479,8 +479,9 @@ export class OrderService {
}
);
- const assetProfiles =
- await this.symbolProfileService.getSymbolProfiles(uniqueAssets);
+ const assetProfiles = await this.symbolProfileService.getSymbolProfiles(
+ assetProfileIdentifiers
+ );
const activities = orders.map((order) => {
const assetProfile = assetProfiles.find(({ dataSource, symbol }) => {
diff --git a/apps/api/src/app/portfolio/calculator/mwr/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/mwr/portfolio-calculator.ts
index 5d168b619..1b142d8b3 100644
--- a/apps/api/src/app/portfolio/calculator/mwr/portfolio-calculator.ts
+++ b/apps/api/src/app/portfolio/calculator/mwr/portfolio-calculator.ts
@@ -1,5 +1,8 @@
import { PortfolioCalculator } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator';
-import { SymbolMetrics, UniqueAsset } from '@ghostfolio/common/interfaces';
+import {
+ AssetProfileIdentifier,
+ SymbolMetrics
+} from '@ghostfolio/common/interfaces';
import { PortfolioSnapshot, TimelinePosition } from '@ghostfolio/common/models';
export class MWRPortfolioCalculator extends PortfolioCalculator {
@@ -27,7 +30,7 @@ export class MWRPortfolioCalculator extends PortfolioCalculator {
};
start: Date;
step?: number;
- } & UniqueAsset): SymbolMetrics {
+ } & AssetProfileIdentifier): SymbolMetrics {
throw new Error('Method not implemented.');
}
}
diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts
index ec56a247c..8c9342e39 100644
--- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts
+++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts
@@ -19,12 +19,12 @@ import {
resetHours
} from '@ghostfolio/common/helper';
import {
+ AssetProfileIdentifier,
DataProviderInfo,
HistoricalDataItem,
InvestmentItem,
ResponseError,
- SymbolMetrics,
- UniqueAsset
+ SymbolMetrics
} from '@ghostfolio/common/interfaces';
import { PortfolioSnapshot, TimelinePosition } from '@ghostfolio/common/models';
import { DateRange, GroupBy } from '@ghostfolio/common/types';
@@ -356,15 +356,15 @@ export abstract class PortfolioCalculator {
dataSource: item.dataSource,
fee: item.fee,
firstBuyDate: item.firstBuyDate,
- grossPerformance: !hasErrors ? grossPerformance ?? null : null,
+ grossPerformance: !hasErrors ? (grossPerformance ?? null) : null,
grossPerformancePercentage: !hasErrors
- ? grossPerformancePercentage ?? null
+ ? (grossPerformancePercentage ?? null)
: null,
grossPerformancePercentageWithCurrencyEffect: !hasErrors
- ? grossPerformancePercentageWithCurrencyEffect ?? null
+ ? (grossPerformancePercentageWithCurrencyEffect ?? null)
: null,
grossPerformanceWithCurrencyEffect: !hasErrors
- ? grossPerformanceWithCurrencyEffect ?? null
+ ? (grossPerformanceWithCurrencyEffect ?? null)
: null,
investment: totalInvestment,
investmentWithCurrencyEffect: totalInvestmentWithCurrencyEffect,
@@ -372,15 +372,15 @@ export abstract class PortfolioCalculator {
marketSymbolMap[endDateString]?.[item.symbol]?.toNumber() ?? null,
marketPriceInBaseCurrency:
marketPriceInBaseCurrency?.toNumber() ?? null,
- netPerformance: !hasErrors ? netPerformance ?? null : null,
+ netPerformance: !hasErrors ? (netPerformance ?? null) : null,
netPerformancePercentage: !hasErrors
- ? netPerformancePercentage ?? null
+ ? (netPerformancePercentage ?? null)
: null,
netPerformancePercentageWithCurrencyEffect: !hasErrors
- ? netPerformancePercentageWithCurrencyEffect ?? null
+ ? (netPerformancePercentageWithCurrencyEffect ?? null)
: null,
netPerformanceWithCurrencyEffect: !hasErrors
- ? netPerformanceWithCurrencyEffect ?? null
+ ? (netPerformanceWithCurrencyEffect ?? null)
: null,
quantity: item.quantity,
symbol: item.symbol,
@@ -905,7 +905,7 @@ export abstract class PortfolioCalculator {
};
start: Date;
step?: number;
- } & UniqueAsset): SymbolMetrics;
+ } & AssetProfileIdentifier): SymbolMetrics;
public getTransactionPoints() {
return this.transactionPoints;
diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts
index e9f1f3fda..50550eec5 100644
--- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts
+++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts
@@ -2,7 +2,10 @@ import { PortfolioCalculator } from '@ghostfolio/api/app/portfolio/calculator/po
import { PortfolioOrderItem } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-order-item.interface';
import { getFactor } from '@ghostfolio/api/helper/portfolio.helper';
import { DATE_FORMAT } from '@ghostfolio/common/helper';
-import { SymbolMetrics, UniqueAsset } from '@ghostfolio/common/interfaces';
+import {
+ AssetProfileIdentifier,
+ SymbolMetrics
+} from '@ghostfolio/common/interfaces';
import { PortfolioSnapshot, TimelinePosition } from '@ghostfolio/common/models';
import { Logger } from '@nestjs/common';
@@ -151,7 +154,7 @@ export class TWRPortfolioCalculator extends PortfolioCalculator {
};
start: Date;
step?: number;
- } & UniqueAsset): SymbolMetrics {
+ } & AssetProfileIdentifier): SymbolMetrics {
const currentExchangeRate = exchangeRates[format(new Date(), DATE_FORMAT)];
const currentValues: { [date: string]: Big } = {};
const currentValuesWithCurrencyEffect: { [date: string]: Big } = {};
diff --git a/apps/api/src/app/portfolio/current-rate.service.spec.ts b/apps/api/src/app/portfolio/current-rate.service.spec.ts
index 9b0548522..c86dde448 100644
--- a/apps/api/src/app/portfolio/current-rate.service.spec.ts
+++ b/apps/api/src/app/portfolio/current-rate.service.spec.ts
@@ -1,7 +1,7 @@
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
-import { UniqueAsset } from '@ghostfolio/common/interfaces';
+import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import { DataSource, MarketData } from '@prisma/client';
@@ -24,32 +24,32 @@ jest.mock('@ghostfolio/api/services/market-data/market-data.service', () => {
});
},
getRange: ({
+ assetProfileIdentifiers,
dateRangeEnd,
- dateRangeStart,
- uniqueAssets
+ dateRangeStart
}: {
+ assetProfileIdentifiers: AssetProfileIdentifier[];
dateRangeEnd: Date;
dateRangeStart: Date;
- uniqueAssets: UniqueAsset[];
}) => {
return Promise.resolve([
{
createdAt: dateRangeStart,
- dataSource: uniqueAssets[0].dataSource,
+ dataSource: assetProfileIdentifiers[0].dataSource,
date: dateRangeStart,
id: '8fa48fde-f397-4b0d-adbc-fb940e830e6d',
marketPrice: 1841.823902,
state: 'CLOSE',
- symbol: uniqueAssets[0].symbol
+ symbol: assetProfileIdentifiers[0].symbol
},
{
createdAt: dateRangeEnd,
- dataSource: uniqueAssets[0].dataSource,
+ dataSource: assetProfileIdentifiers[0].dataSource,
date: dateRangeEnd,
id: '082d6893-df27-4c91-8a5d-092e84315b56',
marketPrice: 1847.839966,
state: 'CLOSE',
- symbol: uniqueAssets[0].symbol
+ symbol: assetProfileIdentifiers[0].symbol
}
]);
}
diff --git a/apps/api/src/app/portfolio/current-rate.service.ts b/apps/api/src/app/portfolio/current-rate.service.ts
index 712d07e7a..24119162d 100644
--- a/apps/api/src/app/portfolio/current-rate.service.ts
+++ b/apps/api/src/app/portfolio/current-rate.service.ts
@@ -3,9 +3,9 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { resetHours } from '@ghostfolio/common/helper';
import {
+ AssetProfileIdentifier,
DataProviderInfo,
- ResponseError,
- UniqueAsset
+ ResponseError
} from '@ghostfolio/common/interfaces';
import type { RequestWithUser } from '@ghostfolio/common/types';
@@ -80,17 +80,16 @@ export class CurrentRateService {
);
}
- const uniqueAssets: UniqueAsset[] = dataGatheringItems.map(
- ({ dataSource, symbol }) => {
+ const assetProfileIdentifiers: AssetProfileIdentifier[] =
+ dataGatheringItems.map(({ dataSource, symbol }) => {
return { dataSource, symbol };
- }
- );
+ });
promises.push(
this.marketDataService
.getRange({
- dateQuery,
- uniqueAssets
+ assetProfileIdentifiers,
+ dateQuery
})
.then((data) => {
return data.map(({ dataSource, date, marketPrice, symbol }) => {
diff --git a/apps/api/src/app/portfolio/interfaces/get-value-object.interface.ts b/apps/api/src/app/portfolio/interfaces/get-value-object.interface.ts
index 6c42d260c..34b426693 100644
--- a/apps/api/src/app/portfolio/interfaces/get-value-object.interface.ts
+++ b/apps/api/src/app/portfolio/interfaces/get-value-object.interface.ts
@@ -1,6 +1,6 @@
-import { UniqueAsset } from '@ghostfolio/common/interfaces';
+import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
-export interface GetValueObject extends UniqueAsset {
+export interface GetValueObject extends AssetProfileIdentifier {
date: Date;
marketPrice: number;
}
diff --git a/apps/api/src/app/redis-cache/redis-cache.service.ts b/apps/api/src/app/redis-cache/redis-cache.service.ts
index 53b177b4f..de41220b9 100644
--- a/apps/api/src/app/redis-cache/redis-cache.service.ts
+++ b/apps/api/src/app/redis-cache/redis-cache.service.ts
@@ -1,6 +1,6 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
-import { UniqueAsset } from '@ghostfolio/common/interfaces';
+import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import { CACHE_MANAGER } from '@nestjs/cache-manager';
import { Inject, Injectable, Logger } from '@nestjs/common';
@@ -28,7 +28,7 @@ export class RedisCacheService {
return `portfolio-snapshot-${userId}`;
}
- public getQuoteKey({ dataSource, symbol }: UniqueAsset) {
+ public getQuoteKey({ dataSource, symbol }: AssetProfileIdentifier) {
return `quote-${getAssetProfileIdentifier({ dataSource, symbol })}`;
}
diff --git a/apps/api/src/app/symbol/interfaces/symbol-item.interface.ts b/apps/api/src/app/symbol/interfaces/symbol-item.interface.ts
index 358658672..710a84144 100644
--- a/apps/api/src/app/symbol/interfaces/symbol-item.interface.ts
+++ b/apps/api/src/app/symbol/interfaces/symbol-item.interface.ts
@@ -1,6 +1,9 @@
-import { HistoricalDataItem, UniqueAsset } from '@ghostfolio/common/interfaces';
+import {
+ AssetProfileIdentifier,
+ HistoricalDataItem
+} from '@ghostfolio/common/interfaces';
-export interface SymbolItem extends UniqueAsset {
+export interface SymbolItem extends AssetProfileIdentifier {
currency: string;
historicalData: HistoricalDataItem[];
marketPrice: number;
diff --git a/apps/api/src/app/symbol/symbol.service.ts b/apps/api/src/app/symbol/symbol.service.ts
index 90259a776..2baca18dd 100644
--- a/apps/api/src/app/symbol/symbol.service.ts
+++ b/apps/api/src/app/symbol/symbol.service.ts
@@ -40,13 +40,13 @@ export class SymbolService {
const days = includeHistoricalData;
const marketData = await this.marketDataService.getRange({
- dateQuery: { gte: subDays(new Date(), days) },
- uniqueAssets: [
+ assetProfileIdentifiers: [
{
dataSource: dataGatheringItem.dataSource,
symbol: dataGatheringItem.symbol
}
- ]
+ ],
+ dateQuery: { gte: subDays(new Date(), days) }
});
historicalData = marketData.map(({ date, marketPrice: value }) => {
diff --git a/apps/api/src/services/data-gathering/data-gathering.processor.ts b/apps/api/src/services/data-gathering/data-gathering.processor.ts
index 11eda2e7a..d8a6a7644 100644
--- a/apps/api/src/services/data-gathering/data-gathering.processor.ts
+++ b/apps/api/src/services/data-gathering/data-gathering.processor.ts
@@ -7,7 +7,7 @@ import {
GATHER_HISTORICAL_MARKET_DATA_PROCESS
} from '@ghostfolio/common/config';
import { DATE_FORMAT, getStartOfUtcDate } from '@ghostfolio/common/helper';
-import { UniqueAsset } from '@ghostfolio/common/interfaces';
+import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import { Process, Processor } from '@nestjs/bull';
import { Injectable, Logger } from '@nestjs/common';
@@ -35,7 +35,7 @@ export class DataGatheringProcessor {
) {}
@Process({ concurrency: 1, name: GATHER_ASSET_PROFILE_PROCESS })
- public async gatherAssetProfile(job: Job) {
+ public async gatherAssetProfile(job: Job) {
try {
Logger.log(
`Asset profile data gathering has been started for ${job.data.symbol} (${job.data.dataSource})`,
diff --git a/apps/api/src/services/data-gathering/data-gathering.service.ts b/apps/api/src/services/data-gathering/data-gathering.service.ts
index 2bf6cc1b2..8b8c65a21 100644
--- a/apps/api/src/services/data-gathering/data-gathering.service.ts
+++ b/apps/api/src/services/data-gathering/data-gathering.service.ts
@@ -20,7 +20,10 @@ import {
getAssetProfileIdentifier,
resetHours
} from '@ghostfolio/common/helper';
-import { BenchmarkProperty, UniqueAsset } from '@ghostfolio/common/interfaces';
+import {
+ AssetProfileIdentifier,
+ BenchmarkProperty
+} from '@ghostfolio/common/interfaces';
import { InjectQueue } from '@nestjs/bull';
import { Inject, Injectable, Logger } from '@nestjs/common';
@@ -91,7 +94,7 @@ export class DataGatheringService {
});
}
- public async gatherSymbol({ dataSource, symbol }: UniqueAsset) {
+ public async gatherSymbol({ dataSource, symbol }: AssetProfileIdentifier) {
await this.marketDataService.deleteMany({ dataSource, symbol });
const dataGatheringItems = (await this.getSymbolsMax()).filter(
@@ -146,23 +149,29 @@ export class DataGatheringService {
}
}
- public async gatherAssetProfiles(aUniqueAssets?: UniqueAsset[]) {
- let uniqueAssets = aUniqueAssets?.filter((dataGatheringItem) => {
- return dataGatheringItem.dataSource !== 'MANUAL';
- });
+ public async gatherAssetProfiles(
+ aAssetProfileIdentifiers?: AssetProfileIdentifier[]
+ ) {
+ let assetProfileIdentifiers = aAssetProfileIdentifiers?.filter(
+ (dataGatheringItem) => {
+ return dataGatheringItem.dataSource !== 'MANUAL';
+ }
+ );
- if (!uniqueAssets) {
- uniqueAssets = await this.getAllAssetProfileIdentifiers();
+ if (!assetProfileIdentifiers) {
+ assetProfileIdentifiers = await this.getAllAssetProfileIdentifiers();
}
- if (uniqueAssets.length <= 0) {
+ if (assetProfileIdentifiers.length <= 0) {
return;
}
- const assetProfiles =
- await this.dataProviderService.getAssetProfiles(uniqueAssets);
- const symbolProfiles =
- await this.symbolProfileService.getSymbolProfiles(uniqueAssets);
+ const assetProfiles = await this.dataProviderService.getAssetProfiles(
+ assetProfileIdentifiers
+ );
+ const symbolProfiles = await this.symbolProfileService.getSymbolProfiles(
+ assetProfileIdentifiers
+ );
for (const [symbol, assetProfile] of Object.entries(assetProfiles)) {
const symbolMapping = symbolProfiles.find((symbolProfile) => {
@@ -248,7 +257,7 @@ export class DataGatheringService {
'DataGatheringService'
);
- if (uniqueAssets.length === 1) {
+ if (assetProfileIdentifiers.length === 1) {
throw error;
}
}
@@ -284,7 +293,9 @@ export class DataGatheringService {
);
}
- public async getAllAssetProfileIdentifiers(): Promise {
+ public async getAllAssetProfileIdentifiers(): Promise<
+ AssetProfileIdentifier[]
+ > {
const symbolProfiles = await this.prismaService.symbolProfile.findMany({
orderBy: [{ symbol: 'asc' }]
});
@@ -305,7 +316,7 @@ export class DataGatheringService {
}
private async getAssetProfileIdentifiersWithCompleteMarketData(): Promise<
- UniqueAsset[]
+ AssetProfileIdentifier[]
> {
return (
await this.prismaService.marketData.groupBy({
diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts
index 58574a3b5..e5eda2d7e 100644
--- a/apps/api/src/services/data-provider/data-provider.service.ts
+++ b/apps/api/src/services/data-provider/data-provider.service.ts
@@ -20,7 +20,7 @@ import {
getStartOfUtcDate,
isDerivedCurrency
} from '@ghostfolio/common/helper';
-import { UniqueAsset } from '@ghostfolio/common/interfaces';
+import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import type { Granularity, UserWithSettings } from '@ghostfolio/common/types';
import { Inject, Injectable, Logger } from '@nestjs/common';
@@ -75,7 +75,7 @@ export class DataProviderService {
return false;
}
- public async getAssetProfiles(items: UniqueAsset[]): Promise<{
+ public async getAssetProfiles(items: AssetProfileIdentifier[]): Promise<{
[symbol: string]: Partial;
}> {
const response: {
@@ -173,7 +173,7 @@ export class DataProviderService {
}
public async getHistorical(
- aItems: UniqueAsset[],
+ aItems: AssetProfileIdentifier[],
aGranularity: Granularity = 'month',
from: Date,
to: Date
@@ -243,7 +243,7 @@ export class DataProviderService {
from,
to
}: {
- dataGatheringItems: UniqueAsset[];
+ dataGatheringItems: AssetProfileIdentifier[];
from: Date;
to: Date;
}): Promise<{
@@ -350,7 +350,7 @@ export class DataProviderService {
useCache = true,
user
}: {
- items: UniqueAsset[];
+ items: AssetProfileIdentifier[];
requestTimeout?: number;
useCache?: boolean;
user?: UserWithSettings;
@@ -376,7 +376,7 @@ export class DataProviderService {
}
// Get items from cache
- const itemsToFetch: UniqueAsset[] = [];
+ const itemsToFetch: AssetProfileIdentifier[] = [];
for (const { dataSource, symbol } of items) {
if (useCache) {
@@ -633,7 +633,7 @@ export class DataProviderService {
dataGatheringItems
}: {
currency: string;
- dataGatheringItems: UniqueAsset[];
+ dataGatheringItems: AssetProfileIdentifier[];
}) {
return dataGatheringItems.some(({ dataSource, symbol }) => {
return (
diff --git a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts
index 29d199ed7..1f08034cd 100644
--- a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts
+++ b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts
@@ -361,13 +361,13 @@ export class ExchangeRateDataService {
const symbol = `${currencyFrom}${currencyTo}`;
const marketData = await this.marketDataService.getRange({
- dateQuery: { gte: startDate, lt: endDate },
- uniqueAssets: [
+ assetProfileIdentifiers: [
{
dataSource,
symbol
}
- ]
+ ],
+ dateQuery: { gte: startDate, lt: endDate }
});
if (marketData?.length > 0) {
@@ -392,13 +392,13 @@ export class ExchangeRateDataService {
}
} else {
const marketData = await this.marketDataService.getRange({
- dateQuery: { gte: startDate, lt: endDate },
- uniqueAssets: [
+ assetProfileIdentifiers: [
{
dataSource,
symbol: `${DEFAULT_CURRENCY}${currencyFrom}`
}
- ]
+ ],
+ dateQuery: { gte: startDate, lt: endDate }
});
for (const { date, marketPrice } of marketData) {
@@ -415,16 +415,16 @@ export class ExchangeRateDataService {
}
} else {
const marketData = await this.marketDataService.getRange({
- dateQuery: {
- gte: startDate,
- lt: endDate
- },
- uniqueAssets: [
+ assetProfileIdentifiers: [
{
dataSource,
symbol: `${DEFAULT_CURRENCY}${currencyTo}`
}
- ]
+ ],
+ dateQuery: {
+ gte: startDate,
+ lt: endDate
+ }
});
for (const { date, marketPrice } of marketData) {
diff --git a/apps/api/src/services/interfaces/interfaces.ts b/apps/api/src/services/interfaces/interfaces.ts
index b945d0945..fa7fc4d09 100644
--- a/apps/api/src/services/interfaces/interfaces.ts
+++ b/apps/api/src/services/interfaces/interfaces.ts
@@ -1,4 +1,7 @@
-import { DataProviderInfo, UniqueAsset } from '@ghostfolio/common/interfaces';
+import {
+ AssetProfileIdentifier,
+ DataProviderInfo
+} from '@ghostfolio/common/interfaces';
import { MarketState } from '@ghostfolio/common/types';
import {
@@ -34,6 +37,6 @@ export interface IDataProviderResponse {
marketState: MarketState;
}
-export interface IDataGatheringItem extends UniqueAsset {
+export interface IDataGatheringItem extends AssetProfileIdentifier {
date?: Date;
}
diff --git a/apps/api/src/services/market-data/market-data.service.ts b/apps/api/src/services/market-data/market-data.service.ts
index faf429955..09f591b9e 100644
--- a/apps/api/src/services/market-data/market-data.service.ts
+++ b/apps/api/src/services/market-data/market-data.service.ts
@@ -3,7 +3,7 @@ import { DateQuery } from '@ghostfolio/api/app/portfolio/interfaces/date-query.i
import { IDataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces';
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { resetHours } from '@ghostfolio/common/helper';
-import { UniqueAsset } from '@ghostfolio/common/interfaces';
+import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import { Injectable } from '@nestjs/common';
import {
@@ -17,7 +17,7 @@ import {
export class MarketDataService {
public constructor(private readonly prismaService: PrismaService) {}
- public async deleteMany({ dataSource, symbol }: UniqueAsset) {
+ public async deleteMany({ dataSource, symbol }: AssetProfileIdentifier) {
return this.prismaService.marketData.deleteMany({
where: {
dataSource,
@@ -40,7 +40,7 @@ export class MarketDataService {
});
}
- public async getMax({ dataSource, symbol }: UniqueAsset) {
+ public async getMax({ dataSource, symbol }: AssetProfileIdentifier) {
return this.prismaService.marketData.findFirst({
select: {
date: true,
@@ -59,11 +59,11 @@ export class MarketDataService {
}
public async getRange({
- dateQuery,
- uniqueAssets
+ assetProfileIdentifiers,
+ dateQuery
}: {
+ assetProfileIdentifiers: AssetProfileIdentifier[];
dateQuery: DateQuery;
- uniqueAssets: UniqueAsset[];
}): Promise {
return this.prismaService.marketData.findMany({
orderBy: [
@@ -76,13 +76,13 @@ export class MarketDataService {
],
where: {
dataSource: {
- in: uniqueAssets.map(({ dataSource }) => {
+ in: assetProfileIdentifiers.map(({ dataSource }) => {
return dataSource;
})
},
date: dateQuery,
symbol: {
- in: uniqueAssets.map(({ symbol }) => {
+ in: assetProfileIdentifiers.map(({ symbol }) => {
return symbol;
})
}
diff --git a/apps/api/src/services/symbol-profile/symbol-profile.service.ts b/apps/api/src/services/symbol-profile/symbol-profile.service.ts
index e0cfed292..50cb25000 100644
--- a/apps/api/src/services/symbol-profile/symbol-profile.service.ts
+++ b/apps/api/src/services/symbol-profile/symbol-profile.service.ts
@@ -1,10 +1,10 @@
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { UNKNOWN_KEY } from '@ghostfolio/common/config';
import {
+ AssetProfileIdentifier,
EnhancedSymbolProfile,
Holding,
- ScraperConfiguration,
- UniqueAsset
+ ScraperConfiguration
} from '@ghostfolio/common/interfaces';
import { Country } from '@ghostfolio/common/interfaces/country.interface';
import { Sector } from '@ghostfolio/common/interfaces/sector.interface';
@@ -23,7 +23,7 @@ export class SymbolProfileService {
return this.prismaService.symbolProfile.create({ data: assetProfile });
}
- public async delete({ dataSource, symbol }: UniqueAsset) {
+ public async delete({ dataSource, symbol }: AssetProfileIdentifier) {
return this.prismaService.symbolProfile.delete({
where: { dataSource_symbol: { dataSource, symbol } }
});
@@ -36,7 +36,7 @@ export class SymbolProfileService {
}
public async getSymbolProfiles(
- aUniqueAssets: UniqueAsset[]
+ aAssetProfileIdentifiers: AssetProfileIdentifier[]
): Promise {
return this.prismaService.symbolProfile
.findMany({
@@ -54,7 +54,7 @@ export class SymbolProfileService {
SymbolProfileOverrides: true
},
where: {
- OR: aUniqueAssets.map(({ dataSource, symbol }) => {
+ OR: aAssetProfileIdentifiers.map(({ dataSource, symbol }) => {
return {
dataSource,
symbol
@@ -140,7 +140,7 @@ export class SymbolProfileService {
symbolMapping,
SymbolProfileOverrides,
url
- }: Prisma.SymbolProfileUpdateInput & UniqueAsset) {
+ }: AssetProfileIdentifier & Prisma.SymbolProfileUpdateInput) {
return this.prismaService.symbolProfile.update({
data: {
assetClass,
diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
index e27283517..98a1d0480 100644
--- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
@@ -7,9 +7,9 @@ import {
} from '@ghostfolio/common/config';
import { getDateFormatString } from '@ghostfolio/common/helper';
import {
+ AssetProfileIdentifier,
Filter,
InfoItem,
- UniqueAsset,
User
} from '@ghostfolio/common/interfaces';
import { AdminMarketDataItem } from '@ghostfolio/common/interfaces/admin-market-data.interface';
@@ -225,7 +225,7 @@ export class AdminMarketDataComponent
});
}
- public onDeleteAssetProfile({ dataSource, symbol }: UniqueAsset) {
+ public onDeleteAssetProfile({ dataSource, symbol }: AssetProfileIdentifier) {
this.adminMarketDataService.deleteAssetProfile({ dataSource, symbol });
}
@@ -266,21 +266,27 @@ export class AdminMarketDataComponent
.subscribe(() => {});
}
- public onGatherProfileDataBySymbol({ dataSource, symbol }: UniqueAsset) {
+ public onGatherProfileDataBySymbol({
+ dataSource,
+ symbol
+ }: AssetProfileIdentifier) {
this.adminService
.gatherProfileDataBySymbol({ dataSource, symbol })
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(() => {});
}
- public onGatherSymbol({ dataSource, symbol }: UniqueAsset) {
+ public onGatherSymbol({ dataSource, symbol }: AssetProfileIdentifier) {
this.adminService
.gatherSymbol({ dataSource, symbol })
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(() => {});
}
- public onOpenAssetProfileDialog({ dataSource, symbol }: UniqueAsset) {
+ public onOpenAssetProfileDialog({
+ dataSource,
+ symbol
+ }: AssetProfileIdentifier) {
this.router.navigate([], {
queryParams: {
dataSource,
diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
index 8f3084cd8..799606293 100644
--- a/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
+++ b/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
@@ -2,8 +2,8 @@ import { AdminService } from '@ghostfolio/client/services/admin.service';
import { ghostfolioScraperApiSymbolPrefix } from '@ghostfolio/common/config';
import { getCurrencyFromSymbol, isCurrency } from '@ghostfolio/common/helper';
import {
- AdminMarketDataItem,
- UniqueAsset
+ AssetProfileIdentifier,
+ AdminMarketDataItem
} from '@ghostfolio/common/interfaces';
import { Injectable } from '@angular/core';
@@ -13,7 +13,7 @@ import { EMPTY, catchError, finalize, forkJoin, takeUntil } from 'rxjs';
export class AdminMarketDataService {
public constructor(private adminService: AdminService) {}
- public deleteAssetProfile({ dataSource, symbol }: UniqueAsset) {
+ public deleteAssetProfile({ dataSource, symbol }: AssetProfileIdentifier) {
const confirmation = confirm(
$localize`Do you really want to delete this asset profile?`
);
@@ -29,15 +29,19 @@ export class AdminMarketDataService {
}
}
- public deleteAssetProfiles(uniqueAssets: UniqueAsset[]) {
+ public deleteAssetProfiles(
+ aAssetProfileIdentifiers: AssetProfileIdentifier[]
+ ) {
const confirmation = confirm(
$localize`Do you really want to delete these profiles?`
);
if (confirmation) {
- const deleteRequests = uniqueAssets.map(({ dataSource, symbol }) => {
- return this.adminService.deleteProfileData({ dataSource, symbol });
- });
+ const deleteRequests = aAssetProfileIdentifiers.map(
+ ({ dataSource, symbol }) => {
+ return this.adminService.deleteProfileData({ dataSource, symbol });
+ }
+ );
forkJoin(deleteRequests)
.pipe(
diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
index 18b73a0cb..a24d6dc30 100644
--- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
+++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
@@ -8,7 +8,7 @@ import { ghostfolioScraperApiSymbolPrefix } from '@ghostfolio/common/config';
import { DATE_FORMAT } from '@ghostfolio/common/helper';
import {
AdminMarketDataDetails,
- UniqueAsset
+ AssetProfileIdentifier
} from '@ghostfolio/common/interfaces';
import { translate } from '@ghostfolio/ui/i18n';
@@ -175,20 +175,23 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
this.dialogRef.close();
}
- public onDeleteProfileData({ dataSource, symbol }: UniqueAsset) {
+ public onDeleteProfileData({ dataSource, symbol }: AssetProfileIdentifier) {
this.adminMarketDataService.deleteAssetProfile({ dataSource, symbol });
this.dialogRef.close();
}
- public onGatherProfileDataBySymbol({ dataSource, symbol }: UniqueAsset) {
+ public onGatherProfileDataBySymbol({
+ dataSource,
+ symbol
+ }: AssetProfileIdentifier) {
this.adminService
.gatherProfileDataBySymbol({ dataSource, symbol })
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(() => {});
}
- public onGatherSymbol({ dataSource, symbol }: UniqueAsset) {
+ public onGatherSymbol({ dataSource, symbol }: AssetProfileIdentifier) {
this.adminService
.gatherSymbol({ dataSource, symbol })
.pipe(takeUntil(this.unsubscribeSubject))
@@ -242,7 +245,7 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
}
}
- public onSetBenchmark({ dataSource, symbol }: UniqueAsset) {
+ public onSetBenchmark({ dataSource, symbol }: AssetProfileIdentifier) {
this.dataService
.postBenchmark({ dataSource, symbol })
.pipe(takeUntil(this.unsubscribeSubject))
@@ -342,7 +345,7 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
});
}
- public onUnsetBenchmark({ dataSource, symbol }: UniqueAsset) {
+ public onUnsetBenchmark({ dataSource, symbol }: AssetProfileIdentifier) {
this.dataService
.deleteBenchmark({ dataSource, symbol })
.pipe(takeUntil(this.unsubscribeSubject))
diff --git a/apps/client/src/app/components/home-holdings/home-holdings.component.ts b/apps/client/src/app/components/home-holdings/home-holdings.component.ts
index dca8bbe55..fc51796d6 100644
--- a/apps/client/src/app/components/home-holdings/home-holdings.component.ts
+++ b/apps/client/src/app/components/home-holdings/home-holdings.component.ts
@@ -2,8 +2,8 @@ import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
+ AssetProfileIdentifier,
PortfolioPosition,
- UniqueAsset,
User
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
@@ -108,7 +108,7 @@ export class HomeHoldingsComponent implements OnDestroy, OnInit {
this.initialize();
}
- public onSymbolClicked({ dataSource, symbol }: UniqueAsset) {
+ public onSymbolClicked({ dataSource, symbol }: AssetProfileIdentifier) {
if (dataSource && symbol) {
this.router.navigate([], {
queryParams: { dataSource, symbol, holdingDetailDialog: true }
diff --git a/apps/client/src/app/components/home-overview/home-overview.component.ts b/apps/client/src/app/components/home-overview/home-overview.component.ts
index d07ca91ce..9addc24b7 100644
--- a/apps/client/src/app/components/home-overview/home-overview.component.ts
+++ b/apps/client/src/app/components/home-overview/home-overview.component.ts
@@ -5,9 +5,9 @@ import { ImpersonationStorageService } from '@ghostfolio/client/services/imperso
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { NUMERICAL_PRECISION_THRESHOLD } from '@ghostfolio/common/config';
import {
+ AssetProfileIdentifier,
LineChartItem,
PortfolioPerformance,
- UniqueAsset,
User
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
@@ -26,7 +26,7 @@ import { takeUntil } from 'rxjs/operators';
export class HomeOverviewComponent implements OnDestroy, OnInit {
public dateRangeOptions = ToggleComponent.DEFAULT_DATE_RANGE_OPTIONS;
public deviceType: string;
- public errors: UniqueAsset[];
+ public errors: AssetProfileIdentifier[];
public hasError: boolean;
public hasImpersonationId: boolean;
public hasPermissionToCreateOrder: boolean;
diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
index b59994811..1848c5306 100644
--- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
@@ -38,6 +38,7 @@ import { ImportActivitiesDialogParams } from './interfaces/interfaces';
export class ImportActivitiesDialog implements OnDestroy {
public accounts: CreateAccountDto[] = [];
public activities: Activity[] = [];
+ public assetProfileForm: FormGroup;
public dataSource: MatTableDataSource;
public details: any[] = [];
public deviceType: string;
@@ -53,7 +54,6 @@ export class ImportActivitiesDialog implements OnDestroy {
public sortDirection: SortDirection = 'desc';
public stepperOrientation: StepperOrientation;
public totalItems: number;
- public uniqueAssetForm: FormGroup;
private unsubscribeSubject = new Subject();
@@ -73,8 +73,8 @@ export class ImportActivitiesDialog implements OnDestroy {
this.stepperOrientation =
this.deviceType === 'mobile' ? 'vertical' : 'horizontal';
- this.uniqueAssetForm = this.formBuilder.group({
- uniqueAsset: [undefined, Validators.required]
+ this.assetProfileForm = this.formBuilder.group({
+ assetProfileIdentifier: [undefined, Validators.required]
});
if (
@@ -85,7 +85,7 @@ export class ImportActivitiesDialog implements OnDestroy {
this.dialogTitle = $localize`Import Dividends`;
this.mode = 'DIVIDEND';
- this.uniqueAssetForm.get('uniqueAsset').disable();
+ this.assetProfileForm.get('assetProfileIdentifier').disable();
this.dataService
.fetchPortfolioHoldings({
@@ -102,7 +102,7 @@ export class ImportActivitiesDialog implements OnDestroy {
this.holdings = sortBy(holdings, ({ name }) => {
return name.toLowerCase();
});
- this.uniqueAssetForm.get('uniqueAsset').enable();
+ this.assetProfileForm.get('assetProfileIdentifier').enable();
this.isLoading = false;
@@ -167,10 +167,11 @@ export class ImportActivitiesDialog implements OnDestroy {
}
public onLoadDividends(aStepper: MatStepper) {
- this.uniqueAssetForm.get('uniqueAsset').disable();
+ this.assetProfileForm.get('assetProfileIdentifier').disable();
- const { dataSource, symbol } =
- this.uniqueAssetForm.get('uniqueAsset').value;
+ const { dataSource, symbol } = this.assetProfileForm.get(
+ 'assetProfileIdentifier'
+ ).value;
this.dataService
.fetchDividendsImport({
@@ -193,7 +194,7 @@ export class ImportActivitiesDialog implements OnDestroy {
this.details = [];
this.errorMessages = [];
this.importStep = ImportStep.SELECT_ACTIVITIES;
- this.uniqueAssetForm.get('uniqueAsset').enable();
+ this.assetProfileForm.get('assetProfileIdentifier').enable();
aStepper.reset();
}
diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html
index d8c2201f9..3bffe8aee 100644
--- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html
+++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html
@@ -25,14 +25,14 @@
@if (mode === 'DIVIDEND') {