{ "name": "ghostfolio", "version": "2.96.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", "scripts": { "affected": "nx affected", "affected:apps": "nx affected:apps", "affected:build": "nx affected:build", "affected:dep-graph": "nx affected:dep-graph", "affected:e2e": "nx affected:e2e", "affected:libs": "nx affected:libs", "affected:lint": "nx affected:lint", "affected:test": "nx affected:test", "analyze:client": "nx run client:build:production --stats-json && webpack-bundle-analyzer -p 1234 dist/apps/client/en/stats.json", "angular": "node --max_old_space_size=32768 ./node_modules/@angular/cli/bin/ng", "build:production": "nx run api:copy-assets && nx run api:build:production && nx run client:copy-assets && nx run client:build:production && yarn replace-placeholders-in-build", "build:storybook": "nx run ui:build-storybook", "database:format-schema": "prisma format", "database:generate-typings": "prisma generate", "database:gui": "prisma studio", "database:gui:prod": "npx dotenv-cli -e .env.prod -- prisma studio", "database:migrate": "prisma migrate deploy", "database:push": "prisma db push", "database:seed": "prisma db seed", "database:setup": "yarn database:push && yarn database:seed", "database:validate-schema": "prisma validate", "dep-graph": "nx dep-graph", "e2e": "ng e2e", "extract-locales": "nx run client:extract-i18n --output-path ./apps/client/src/locales", "format": "nx format:write", "format:check": "nx format:check", "format:write": "nx format:write", "help": "nx help", "lint": "nx lint", "ng": "nx", "nx": "nx", "postinstall": "prisma generate", "replace-placeholders-in-build": "node ./replace.build.js", "start": "node dist/apps/api/main", "start:client": "nx run client:copy-assets && nx run client:serve --configuration=development-en --hmr -o", "start:production": "yarn database:migrate && yarn database:seed && node main", "start:server": "nx run api:copy-assets && nx run api:serve --watch", "start:storybook": "nx run ui:storybook", "test": "yarn test:api && yarn test:common", "test:api": "npx dotenv-cli -e .env.example -- nx test api", "test:common": "npx dotenv-cli -e .env.example -- nx test common", "test:single": "nx run api:test --test-file portfolio-calculator-novn-buy-and-sell.spec.ts", "ts-node": "ts-node", "update": "nx migrate latest", "watch:server": "nx run api:copy-assets && nx run api:build --watch", "watch:test": "nx test --watch", "workspace-generator": "nx workspace-generator" }, "dependencies": { "@angular/animations": "18.0.4", "@angular/cdk": "18.0.4", "@angular/common": "18.0.4", "@angular/compiler": "18.0.4", "@angular/core": "18.0.4", "@angular/forms": "18.0.4", "@angular/material": "18.0.4", "@angular/platform-browser": "18.0.4", "@angular/platform-browser-dynamic": "18.0.4", "@angular/router": "18.0.4", "@angular/service-worker": "18.0.4", "@codewithdan/observable-store": "2.2.15", "@dfinity/agent": "0.15.7", "@dfinity/auth-client": "0.15.7", "@dfinity/candid": "0.15.7", "@dfinity/identity": "0.15.7", "@dfinity/principal": "0.15.7", "@dinero.js/currencies": "2.0.0-alpha.8", "@internationalized/number": "3.5.2", "@nestjs/bull": "10.0.1", "@nestjs/cache-manager": "2.1.0", "@nestjs/common": "10.1.3", "@nestjs/config": "3.0.0", "@nestjs/core": "10.1.3", "@nestjs/event-emitter": "2.0.4", "@nestjs/jwt": "10.1.0", "@nestjs/passport": "10.0.3", "@nestjs/platform-express": "10.1.3", "@nestjs/schedule": "3.0.2", "@nestjs/serve-static": "4.0.0", "@prisma/client": "5.16.1", "@simplewebauthn/browser": "9.0.1", "@simplewebauthn/server": "9.0.3", "@stripe/stripe-js": "3.5.0", "alphavantage": "2.2.0", "big.js": "6.2.1", "body-parser": "1.20.2", "bootstrap": "4.6.0", "bull": "4.10.4", "cache-manager": "3.4.3", "cache-manager-redis-store": "2.0.0", "chart.js": "4.2.0", "chartjs-adapter-date-fns": "3.0.0", "chartjs-chart-treemap": "2.3.1", "chartjs-plugin-annotation": "2.1.2", "chartjs-plugin-datalabels": "2.2.0", "cheerio": "1.0.0-rc.12", "class-transformer": "0.5.1", "class-validator": "0.14.1", "color": "4.2.3", "countries-and-timezones": "3.4.1", "countries-list": "3.1.0", "countup.js": "2.8.0", "date-fns": "2.29.3", "envalid": "7.3.1", "google-spreadsheet": "3.2.0", "got": "11.8.6", "helmet": "7.0.0", "http-status-codes": "2.3.0", "ionicons": "7.4.0", "jsonpath": "1.1.1", "lodash": "4.17.21", "marked": "13.0.0", "ms": "3.0.0-canary.1", "ng-extract-i18n-merge": "2.12.0", "ngx-device-detector": "8.0.0", "ngx-markdown": "18.0.0", "ngx-skeleton-loader": "7.0.0", "ngx-stripe": "18.0.0", "open-color": "1.9.1", "papaparse": "5.3.1", "passport": "0.7.0", "passport-google-oauth20": "2.0.0", "passport-jwt": "4.0.1", "prisma": "5.16.1", "reflect-metadata": "0.1.13", "rxjs": "7.5.6", "stripe": "15.11.0", "svgmap": "2.6.0", "twitter-api-v2": "1.14.2", "uuid": "9.0.1", "yahoo-finance2": "2.11.3", "zone.js": "0.14.7" }, "devDependencies": { "@angular-devkit/build-angular": "18.0.5", "@angular-devkit/core": "18.0.5", "@angular-devkit/schematics": "18.0.5", "@angular-eslint/eslint-plugin": "18.0.1", "@angular-eslint/eslint-plugin-template": "18.0.1", "@angular-eslint/template-parser": "18.0.1", "@angular/cli": "18.0.5", "@angular/compiler-cli": "18.0.4", "@angular/language-service": "18.0.4", "@angular/localize": "18.0.4", "@angular/pwa": "18.0.5", "@nestjs/schematics": "10.0.1", "@nestjs/testing": "10.1.3", "@nx/angular": "19.4.3", "@nx/cypress": "19.4.3", "@nx/eslint-plugin": "19.4.3", "@nx/jest": "19.4.3", "@nx/js": "19.4.3", "@nx/nest": "19.4.3", "@nx/node": "19.4.3", "@nx/storybook": "19.4.3", "@nx/web": "19.4.3", "@nx/workspace": "19.4.3", "@schematics/angular": "18.0.3", "@simplewebauthn/types": "9.0.1", "@storybook/addon-essentials": "7.6.5", "@storybook/angular": "7.6.5", "@storybook/core-server": "7.6.5", "@trivago/prettier-plugin-sort-imports": "4.3.0", "@types/big.js": "6.2.2", "@types/body-parser": "1.19.5", "@types/cache-manager": "3.4.2", "@types/color": "3.0.3", "@types/google-spreadsheet": "3.1.5", "@types/jest": "29.4.4", "@types/lodash": "4.17.0", "@types/node": "20.14.10", "@types/papaparse": "5.3.7", "@types/passport-google-oauth20": "2.0.16", "@typescript-eslint/eslint-plugin": "6.21.0", "@typescript-eslint/parser": "6.21.0", "codelyzer": "6.0.1", "cypress": "6.2.1", "eslint": "8.56.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-cypress": "2.15.1", "eslint-plugin-import": "2.29.1", "eslint-plugin-storybook": "0.6.15", "jest": "29.4.3", "jest-environment-jsdom": "29.4.3", "jest-preset-angular": "14.1.0", "nx": "19.4.3", "prettier": "3.3.1", "prettier-plugin-organize-attributes": "1.0.0", "react": "18.2.0", "react-dom": "18.2.0", "replace-in-file": "7.0.1", "shx": "0.3.4", "storybook": "7.0.9", "ts-jest": "29.1.0", "ts-node": "10.9.2", "tslib": "2.6.0", "typescript": "5.4.4", "webpack-bundle-analyzer": "4.10.1" }, "engines": { "node": ">=20" }, "prisma": { "seed": "node prisma/seed.js" }, "resolutions": { "rxjs": "7.5.6" } }