Browse Source

Merge branch 'main' into bugfix/carry-forward-of-market-prices-between-chart-dates

pull/8009/head
Thomas Kaul 2 weeks ago
committed by GitHub
parent
commit
b64d03942d
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 6
      CHANGELOG.md
  2. 26
      apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts
  3. 94
      package-lock.json
  4. 6
      package.json

6
CHANGELOG.md

@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
### Changed
- Upgraded `@openrouter/ai-sdk-provider` from version `3.0.0` to `3.1.0`
- Upgraded `ai` from version `7.0.37` to `7.0.114`
- Upgraded `dotenv` from version `17.4.2` to `18.0.3`
### Fixed
- Fixed the portfolio calculation for holdings with historical market prices between the chart dates

26
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts

@ -39,15 +39,15 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
templateUrl: './portfolio-summary.component.html'
})
export class GfPortfolioSummaryComponent implements OnChanges {
@Input() baseCurrency: string;
@Input() deviceType: string;
@Input() hasImpersonationId: boolean;
@Input() hasPermissionToUpdateUserSettings: boolean;
@Input() isLoading: boolean;
@Input() language: string;
@Input() locale = getLocale();
@Input() summary: PortfolioSummary;
@Input() user: User;
@Input() public baseCurrency?: string;
@Input() public deviceType: string;
@Input() public hasImpersonationId: boolean;
@Input() public hasPermissionToUpdateUserSettings: boolean;
@Input() public isLoading: boolean;
@Input() public language?: string;
@Input() public locale?: string = getLocale();
@Input() public summary?: PortfolioSummary;
@Input() public user?: User;
public emergencyFundChanged = output<number>();
@ -99,11 +99,11 @@ export class GfPortfolioSummaryComponent implements OnChanges {
}
protected get hasCashBreakdown() {
return !this.isLoading && this.summary?.emergencyFund?.cash > 0;
return !this.isLoading && (this.summary?.emergencyFund?.cash ?? 0) > 0;
}
protected get hasHoldingsBreakdown() {
return !this.isLoading && this.summary?.emergencyFund?.assets > 0;
return !this.isLoading && (this.summary?.emergencyFund?.assets ?? 0) > 0;
}
protected get holdingsInBaseCurrency() {
@ -133,7 +133,7 @@ export class GfPortfolioSummaryComponent implements OnChanges {
}
return (
this.holdingsInBaseCurrency - (this.summary.emergencyFund?.assets ?? 0)
this.holdingsInBaseCurrency - (this.summary?.emergencyFund?.assets ?? 0)
);
}
@ -200,7 +200,7 @@ export class GfPortfolioSummaryComponent implements OnChanges {
this.emergencyFundChanged.emit(emergencyFund);
},
confirmLabel: $localize`Save`,
defaultValue: this.summary.emergencyFund?.total?.toString() ?? '0',
defaultValue: this.summary?.emergencyFund?.total?.toString() ?? '0',
title: $localize`Please set the amount of your emergency fund.`,
valueSuffix: this.baseCurrency
});

94
package-lock.json

@ -46,13 +46,13 @@
"@nestjs/schedule": "6.1.3",
"@nestjs/serve-static": "5.0.5",
"@nestjs/throttler": "6.5.0",
"@openrouter/ai-sdk-provider": "3.0.0",
"@openrouter/ai-sdk-provider": "3.1.0",
"@prisma/adapter-pg": "7.10.0",
"@prisma/client": "7.10.0",
"@rekog/mcp-nest": "2.0.7",
"@simplewebauthn/browser": "13.3.0",
"@simplewebauthn/server": "13.3.1",
"ai": "7.0.37",
"ai": "7.0.114",
"alphavantage": "2.2.0",
"big.js": "7.0.1",
"bootstrap": "4.6.2",
@ -71,7 +71,7 @@
"countries-list": "3.4.1",
"countup.js": "2.10.1",
"date-fns": "4.4.0",
"dotenv": "17.4.2",
"dotenv": "18.0.3",
"dotenv-expand": "13.0.0",
"envalid": "8.2.0",
"express": "5.2.1",
@ -189,13 +189,13 @@
"license": "MIT"
},
"node_modules/@ai-sdk/gateway": {
"version": "4.0.28",
"resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-4.0.28.tgz",
"integrity": "sha512-ee9TsNO3mkgHDWmTmJ8Fvltr6PFh52zhrV2+FaKJY3F3iu7kWZi5tCRJCR1HVhhlpj6lHniUb28nLQdPHkA/1Q==",
"version": "4.0.92",
"resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-4.0.92.tgz",
"integrity": "sha512-awX24+QedfcIDTAdwkCUNG08vPJjkQI9KZLGh4Ua+vNbgeaNFJre96OIbBefOD9XPHSVpdXjwqtWmo4Yh7oczw==",
"license": "Apache-2.0",
"dependencies": {
"@ai-sdk/provider": "4.0.3",
"@ai-sdk/provider-utils": "5.0.12",
"@ai-sdk/provider": "4.0.18",
"@ai-sdk/provider-utils": "5.0.47",
"@vercel/oidc": "3.2.0"
},
"engines": {
@ -206,9 +206,9 @@
}
},
"node_modules/@ai-sdk/provider": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-4.0.3.tgz",
"integrity": "sha512-e0CpNWJUY7OxAFAnCZkw+ri9QOHWwTs1tXP42782KFGCU07qt8NiXCrCVowyCB5dP2r5/Uls+g2oPd8kOJn9dw==",
"version": "4.0.18",
"resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-4.0.18.tgz",
"integrity": "sha512-+GZJIgz1jk86pwEbb3f1BD2bdoSKyWE4Jg4YUc7NMnMozbWemSKYZcw2F4nMaO5qwsL5A8RmioAKW81YktRpIQ==",
"license": "Apache-2.0",
"dependencies": {
"json-schema": "^0.4.0"
@ -218,15 +218,16 @@
}
},
"node_modules/@ai-sdk/provider-utils": {
"version": "5.0.12",
"resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-5.0.12.tgz",
"integrity": "sha512-bbhlOgHeYwrIGheLkM6fhS8hVger8uFPmcOLg+kxc9EFh7y30XYorWhthlYAgpadO3SJhFZrIcEknN7qEqEVvA==",
"version": "5.0.47",
"resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-5.0.47.tgz",
"integrity": "sha512-NZQ1hMxY6Hd4ZiinjpU5HUOsyCHiTFkHw7AiM1EVN+Cd3kNTi47flZWNvFwGqnBojntB1+2eBRTeHRuVLtPhEg==",
"license": "Apache-2.0",
"dependencies": {
"@ai-sdk/provider": "4.0.3",
"@ai-sdk/provider": "4.0.18",
"@standard-schema/spec": "^1.1.0",
"@workflow/serde": "4.1.0",
"eventsource-parser": "^3.0.8"
"eventsource-parser": "^3.0.8",
"undici": "^7.29.0"
},
"engines": {
"node": ">=22"
@ -235,6 +236,15 @@
"zod": "^3.25.76 || ^4.1.8"
}
},
"node_modules/@ai-sdk/provider-utils/node_modules/undici": {
"version": "7.30.0",
"resolved": "https://registry.npmjs.org/undici/-/undici-7.30.0.tgz",
"integrity": "sha512-dkrQXeHSaoamnItlYbmzG0wFYrM0ZwDxCIg0A7aKjTyyhh9svRzCNFEzV+Vm05/yehjCzjDZ31KXfGEjYSztDQ==",
"license": "MIT",
"engines": {
"node": ">=20.18.1"
}
},
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
@ -11951,9 +11961,9 @@
}
},
"node_modules/@openrouter/ai-sdk-provider": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@openrouter/ai-sdk-provider/-/ai-sdk-provider-3.0.0.tgz",
"integrity": "sha512-m9XTSWoODH2RM5OsZpaGiN7QRR8cdP5paBWq699Tu3JVmGPBKT8xF8XwV0ZBVVsjikD/JgWfak4VSsTR4wAVbg==",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@openrouter/ai-sdk-provider/-/ai-sdk-provider-3.1.0.tgz",
"integrity": "sha512-BQy1TA9fKrh47s9ivsO6FY5QimN7GUF0i8Qon3pkxQclEgShso0dClpcWn8OIyPLEZZPFaFKgI8TW4S/O0p0Dw==",
"license": "Apache-2.0",
"engines": {
"node": ">=22"
@ -16840,14 +16850,14 @@
}
},
"node_modules/ai": {
"version": "7.0.37",
"resolved": "https://registry.npmjs.org/ai/-/ai-7.0.37.tgz",
"integrity": "sha512-stF+SEQJgKY3Qfe3FwNzqUrehHviOp2l7LemoI8YMOa0Zk5PxKsRNgUk3cHXz0RAue9RRyCAis2fz6LSCP6EKw==",
"version": "7.0.114",
"resolved": "https://registry.npmjs.org/ai/-/ai-7.0.114.tgz",
"integrity": "sha512-jRMOw7tPMWVYomoHWY5xHBXPQDyKTY1Pn3BX0Rh39UOP6y9FYq6xCIB6khgIC/b9CRg4+IxadwIbie+Eu7yU3g==",
"license": "Apache-2.0",
"dependencies": {
"@ai-sdk/gateway": "4.0.28",
"@ai-sdk/provider": "4.0.3",
"@ai-sdk/provider-utils": "5.0.12"
"@ai-sdk/gateway": "4.0.92",
"@ai-sdk/provider": "4.0.18",
"@ai-sdk/provider-utils": "5.0.47"
},
"engines": {
"node": ">=22"
@ -18022,6 +18032,19 @@
"devOptional": true,
"license": "MIT"
},
"node_modules/c12/node_modules/dotenv": {
"version": "17.4.2",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz",
"integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==",
"devOptional": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/c12/node_modules/jiti": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
@ -20710,10 +20733,13 @@
}
},
"node_modules/dotenv": {
"version": "17.4.2",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz",
"integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==",
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-18.0.3.tgz",
"integrity": "sha512-/8CJTyL817qPnfbQrJgOEcrU3fDrJkRIoXBE566wHuvIXKOCHUZhPqGPbCPi9SogjdGnreF0TlvnTgK6J/8zpA==",
"license": "BSD-2-Clause",
"bin": {
"dotenv": "dist/index.cjs"
},
"engines": {
"node": ">=12"
},
@ -20736,6 +20762,18 @@
"url": "https://dotenvx.com"
}
},
"node_modules/dotenv-expand/node_modules/dotenv": {
"version": "17.4.2",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz",
"integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",

6
package.json

@ -90,13 +90,13 @@
"@nestjs/schedule": "6.1.3",
"@nestjs/serve-static": "5.0.5",
"@nestjs/throttler": "6.5.0",
"@openrouter/ai-sdk-provider": "3.0.0",
"@openrouter/ai-sdk-provider": "3.1.0",
"@prisma/adapter-pg": "7.10.0",
"@prisma/client": "7.10.0",
"@rekog/mcp-nest": "2.0.7",
"@simplewebauthn/browser": "13.3.0",
"@simplewebauthn/server": "13.3.1",
"ai": "7.0.37",
"ai": "7.0.114",
"alphavantage": "2.2.0",
"big.js": "7.0.1",
"bootstrap": "4.6.2",
@ -115,7 +115,7 @@
"countries-list": "3.4.1",
"countup.js": "2.10.1",
"date-fns": "4.4.0",
"dotenv": "17.4.2",
"dotenv": "18.0.3",
"dotenv-expand": "13.0.0",
"envalid": "8.2.0",
"express": "5.2.1",

Loading…
Cancel
Save