From 75f34101b81a353f6325b743722493fd6c5ef7e3 Mon Sep 17 00:00:00 2001 From: Ken Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sat, 18 Jan 2025 16:41:16 +0700 Subject: [PATCH 01/30] Feature/switch to ESLint flat config format (#4203) * Switch to ESLint flat config format * Update changelog --- .eslintrc.json | 151 ----- CHANGELOG.md | 7 + apps/api/.eslintrc.json | 22 - apps/api/eslint.config.cjs | 31 + apps/client/.eslintrc.json | 46 -- apps/client/eslint.config.cjs | 62 ++ apps/ui-e2e/.eslintrc.json | 20 - apps/ui-e2e/eslint.config.cjs | 33 + eslint.config.cjs | 196 ++++++ libs/common/.eslintrc.json | 21 - libs/common/eslint.config.cjs | 28 + libs/ui/.eslintrc.json | 40 -- libs/ui/eslint.config.cjs | 65 ++ nx.json | 1 + package-lock.json | 1087 ++++++++++----------------------- package.json | 14 +- 16 files changed, 759 insertions(+), 1065 deletions(-) delete mode 100644 .eslintrc.json delete mode 100644 apps/api/.eslintrc.json create mode 100644 apps/api/eslint.config.cjs delete mode 100644 apps/client/.eslintrc.json create mode 100644 apps/client/eslint.config.cjs delete mode 100644 apps/ui-e2e/.eslintrc.json create mode 100644 apps/ui-e2e/eslint.config.cjs create mode 100644 eslint.config.cjs delete mode 100644 libs/common/.eslintrc.json create mode 100644 libs/common/eslint.config.cjs delete mode 100644 libs/ui/.eslintrc.json create mode 100644 libs/ui/eslint.config.cjs diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 75e362465..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "root": true, - "ignorePatterns": ["**/*"], - "plugins": ["@nx"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": { - "@nx/enforce-module-boundaries": [ - "warn", - { - "enforceBuildableLibDependency": true, - "allow": [], - "depConstraints": [ - { - "sourceTag": "*", - "onlyDependOnLibsWithTags": ["*"] - } - ] - } - ], - "@typescript-eslint/no-extra-semi": "error", - "no-extra-semi": "off" - } - }, - { - "files": ["*.ts", "*.tsx"], - "extends": ["plugin:@nx/typescript"] - }, - { - "files": ["*.js", "*.jsx"], - "extends": ["plugin:@nx/javascript"] - }, - { - "files": ["*.ts"], - "plugins": ["eslint-plugin-import", "@typescript-eslint"], - "extends": [ - "plugin:@typescript-eslint/recommended-type-checked", - "plugin:@typescript-eslint/stylistic-type-checked" - ], - "rules": { - "@typescript-eslint/consistent-indexed-object-style": "off", - "@typescript-eslint/dot-notation": "off", - "@typescript-eslint/explicit-member-accessibility": [ - "off", - { - "accessibility": "explicit" - } - ], - "@typescript-eslint/member-ordering": "warn", - "@typescript-eslint/naming-convention": [ - "off", - { - "selector": "default", - "format": ["camelCase"], - "leadingUnderscore": "allow", - "trailingUnderscore": "allow" - }, - { - "selector": ["variable", "classProperty", "typeProperty"], - "format": ["camelCase", "UPPER_CASE"], - "leadingUnderscore": "allow", - "trailingUnderscore": "allow" - }, - { - "selector": "objectLiteralProperty", - "format": null - }, - { - "selector": "enumMember", - "format": ["camelCase", "UPPER_CASE", "PascalCase"] - }, - { - "selector": "typeLike", - "format": ["PascalCase"] - } - ], - "@typescript-eslint/no-empty-interface": "warn", - "@typescript-eslint/no-inferrable-types": [ - "warn", - { - "ignoreParameters": true - } - ], - "@typescript-eslint/no-non-null-assertion": "warn", - "@typescript-eslint/no-shadow": [ - "warn", - { - "hoist": "all" - } - ], - "@typescript-eslint/unified-signatures": "error", - "@typescript-eslint/no-loss-of-precision": "warn", - "@typescript-eslint/no-var-requires": "warn", - "@typescript-eslint/ban-types": "warn", - "arrow-body-style": "off", - "constructor-super": "error", - "eqeqeq": ["error", "smart"], - "guard-for-in": "warn", - "id-blacklist": "off", - "id-match": "off", - "import/no-deprecated": "warn", - "no-bitwise": "error", - "no-caller": "error", - "no-debugger": "error", - "no-empty": "off", - "no-eval": "error", - "no-fallthrough": "error", - "no-new-wrappers": "error", - "no-restricted-imports": ["error", "rxjs/Rx"], - "no-undef-init": "error", - "no-underscore-dangle": "off", - "no-var": "error", - "radix": "error", - "no-unsafe-optional-chaining": "warn", - "no-extra-boolean-cast": "warn", - "no-empty-pattern": "warn", - "no-useless-catch": "warn", - "no-unsafe-finally": "warn", - "no-prototype-builtins": "warn", - "no-async-promise-executor": "warn", - "no-constant-condition": "warn", - - // The following rules are part of @typescript-eslint/recommended-type-checked - // and can be remove once solved - "@typescript-eslint/await-thenable": "warn", - "@typescript-eslint/ban-ts-comment": "warn", - "@typescript-eslint/no-base-to-string": "warn", - "@typescript-eslint/no-explicit-any": "warn", - "@typescript-eslint/no-floating-promises": "warn", - "@typescript-eslint/no-misused-promises": "warn", - "@typescript-eslint/no-redundant-type-constituents": "warn", - "@typescript-eslint/no-unnecessary-type-assertion": "warn", - "@typescript-eslint/no-unsafe-argument": "warn", - "@typescript-eslint/no-unsafe-assignment": "warn", - "@typescript-eslint/no-unsafe-enum-comparison": "warn", - "@typescript-eslint/no-unsafe-member-access": "warn", - "@typescript-eslint/no-unsafe-return": "warn", - "@typescript-eslint/no-unsafe-call": "warn", - "@typescript-eslint/require-await": "warn", - "@typescript-eslint/restrict-template-expressions": "warn", - "@typescript-eslint/unbound-method": "warn", - - // The following rules are part of @typescript-eslint/stylistic-type-checked - // and can be remove once solved - "@typescript-eslint/prefer-nullish-coalescing": "warn" // TODO: Requires strictNullChecks: true - } - } - ], - "extends": ["plugin:storybook/recommended"] -} diff --git a/CHANGELOG.md b/CHANGELOG.md index f97b8bc23..f3598581f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ 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 + +- Switched to _ESLint_’s flat config format +- Upgraded `eslint` dependencies + ## 2.134.0 - 2025-01-15 ### Added diff --git a/apps/api/.eslintrc.json b/apps/api/.eslintrc.json deleted file mode 100644 index 9263d0065..000000000 --- a/apps/api/.eslintrc.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "extends": "../../.eslintrc.json", - "ignorePatterns": ["!**/*"], - "rules": {}, - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "parserOptions": { - "project": ["apps/api/tsconfig.*?.json"] - }, - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/apps/api/eslint.config.cjs b/apps/api/eslint.config.cjs new file mode 100644 index 000000000..043802a0d --- /dev/null +++ b/apps/api/eslint.config.cjs @@ -0,0 +1,31 @@ +const baseConfig = require('../../eslint.config.cjs'); + +module.exports = [ + { + ignores: ['**/dist'] + }, + ...baseConfig, + { + rules: {} + }, + { + files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'], + // Override or add rules here + rules: {}, + languageOptions: { + parserOptions: { + project: ['apps/api/tsconfig.*?.json'] + } + } + }, + { + files: ['**/*.ts', '**/*.tsx'], + // Override or add rules here + rules: {} + }, + { + files: ['**/*.js', '**/*.jsx'], + // Override or add rules here + rules: {} + } +]; diff --git a/apps/client/.eslintrc.json b/apps/client/.eslintrc.json deleted file mode 100644 index fdb4f84f1..000000000 --- a/apps/client/.eslintrc.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "extends": ["../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "parserOptions": { - "project": ["apps/client/tsconfig.*?.json"] - }, - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/prefer-standalone": "off" - } - } - ], - "plugins": ["@angular-eslint/eslint-plugin", "@typescript-eslint"], - "rules": { - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "gf", - "style": "kebab-case" - } - ], - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "gf", - "style": "camelCase" - } - ] - } -} diff --git a/apps/client/eslint.config.cjs b/apps/client/eslint.config.cjs new file mode 100644 index 000000000..3130e0024 --- /dev/null +++ b/apps/client/eslint.config.cjs @@ -0,0 +1,62 @@ +const baseConfig = require('../../eslint.config.cjs'); +const angularEslintPlugin = require('@angular-eslint/eslint-plugin'); +const typescriptEslintPlugin = require('@typescript-eslint/eslint-plugin'); + +module.exports = [ + { + ignores: ['**/dist'] + }, + ...baseConfig, + { + plugins: { + '@angular-eslint': angularEslintPlugin, + '@typescript-eslint': typescriptEslintPlugin + } + }, + { + rules: { + '@angular-eslint/component-selector': [ + 'error', + { + type: 'element', + prefix: 'gf', + style: 'kebab-case' + } + ], + '@angular-eslint/directive-selector': [ + 'error', + { + type: 'attribute', + prefix: 'gf', + style: 'camelCase' + } + ] + } + }, + { + files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'], + // Override or add rules here + rules: {}, + languageOptions: { + parserOptions: { + project: ['apps/client/tsconfig.*?.json'] + } + } + }, + { + files: ['**/*.ts', '**/*.tsx'], + // Override or add rules here + rules: {} + }, + { + files: ['**/*.js', '**/*.jsx'], + // Override or add rules here + rules: {} + }, + { + files: ['**/*.ts'], + rules: { + '@angular-eslint/prefer-standalone': 'off' + } + } +]; diff --git a/apps/ui-e2e/.eslintrc.json b/apps/ui-e2e/.eslintrc.json deleted file mode 100644 index e1ff28793..000000000 --- a/apps/ui-e2e/.eslintrc.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "parserOptions": { - "project": ["apps/ui-e2e/tsconfig.json"] - }, - "rules": {} - }, - { - "files": ["src/plugins/index.js"], - "rules": { - "@typescript-eslint/no-var-requires": "off", - "no-undef": "off" - } - } - ] -} diff --git a/apps/ui-e2e/eslint.config.cjs b/apps/ui-e2e/eslint.config.cjs new file mode 100644 index 000000000..5e6707635 --- /dev/null +++ b/apps/ui-e2e/eslint.config.cjs @@ -0,0 +1,33 @@ +const { FlatCompat } = require('@eslint/eslintrc'); +const js = require('@eslint/js'); +const baseConfig = require('../../eslint.config.cjs'); + +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended +}); + +module.exports = [ + { + ignores: ['**/dist'] + }, + ...baseConfig, + ...compat.extends('plugin:cypress/recommended'), + { + files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'], + // Override or add rules here + rules: {}, + languageOptions: { + parserOptions: { + project: ['apps/ui-e2e/tsconfig.json'] + } + } + }, + { + files: ['src/plugins/index.js'], + rules: { + '@typescript-eslint/no-var-requires': 'off', + 'no-undef': 'off' + } + } +]; diff --git a/eslint.config.cjs b/eslint.config.cjs new file mode 100644 index 000000000..c7e08821c --- /dev/null +++ b/eslint.config.cjs @@ -0,0 +1,196 @@ +const { FlatCompat } = require('@eslint/eslintrc'); +const js = require('@eslint/js'); +const nxEslintPlugin = require('@nx/eslint-plugin'); +const storybook = require('eslint-plugin-storybook'); + +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended +}); + +module.exports = [ + { + ignores: ['**/dist'] + }, + ...storybook.configs['flat/recommended'], + { plugins: { '@nx': nxEslintPlugin } }, + { + files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'], + rules: { + '@nx/enforce-module-boundaries': [ + 'warn', + { + enforceBuildableLibDependency: true, + allow: [], + depConstraints: [ + { + sourceTag: '*', + onlyDependOnLibsWithTags: ['*'] + } + ] + } + ], + '@typescript-eslint/no-extra-semi': 'error', + 'no-extra-semi': 'off' + } + }, + ...compat + .config({ + extends: ['plugin:@nx/typescript'] + }) + .map((config) => ({ + ...config, + files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'], + rules: { + ...config.rules + } + })), + ...compat + .config({ + extends: ['plugin:@nx/javascript'] + }) + .map((config) => ({ + ...config, + files: ['**/*.js', '**/*.jsx', '**/*.cjs', '**/*.mjs'], + rules: { + ...config.rules + } + })), + ...compat + .config({ + plugins: ['eslint-plugin-import', '@typescript-eslint'], + extends: [ + 'plugin:@typescript-eslint/recommended-type-checked', + 'plugin:@typescript-eslint/stylistic-type-checked' + ] + }) + .map((config) => ({ + ...config, + files: ['**/*.ts'], + rules: { + ...config.rules, + '@typescript-eslint/consistent-indexed-object-style': 'off', + '@typescript-eslint/dot-notation': 'off', + '@typescript-eslint/explicit-member-accessibility': [ + 'off', + { + accessibility: 'explicit' + } + ], + '@typescript-eslint/member-ordering': 'warn', + '@typescript-eslint/naming-convention': [ + 'off', + { + selector: 'default', + format: ['camelCase'], + leadingUnderscore: 'allow', + trailingUnderscore: 'allow' + }, + { + selector: ['variable', 'classProperty', 'typeProperty'], + format: ['camelCase', 'UPPER_CASE'], + leadingUnderscore: 'allow', + trailingUnderscore: 'allow' + }, + { + selector: 'objectLiteralProperty', + format: null + }, + { + selector: 'enumMember', + format: ['camelCase', 'UPPER_CASE', 'PascalCase'] + }, + { + selector: 'typeLike', + format: ['PascalCase'] + } + ], + '@typescript-eslint/no-empty-interface': 'warn', + '@typescript-eslint/no-inferrable-types': [ + 'warn', + { + ignoreParameters: true + } + ], + '@typescript-eslint/no-non-null-assertion': 'warn', + '@typescript-eslint/no-shadow': [ + 'warn', + { + hoist: 'all' + } + ], + '@typescript-eslint/unified-signatures': 'error', + '@typescript-eslint/no-loss-of-precision': 'warn', + '@typescript-eslint/no-var-requires': 'warn', + 'arrow-body-style': 'off', + 'constructor-super': 'error', + eqeqeq: ['error', 'smart'], + 'guard-for-in': 'warn', + 'id-blacklist': 'off', + 'id-match': 'off', + 'import/no-deprecated': 'warn', + 'no-bitwise': 'error', + 'no-caller': 'error', + 'no-debugger': 'error', + 'no-empty': 'off', + 'no-eval': 'error', + 'no-fallthrough': 'error', + 'no-new-wrappers': 'error', + 'no-restricted-imports': ['error', 'rxjs/Rx'], + 'no-undef-init': 'error', + 'no-underscore-dangle': 'off', + 'no-var': 'error', + radix: 'error', + 'no-unsafe-optional-chaining': 'warn', + 'no-extra-boolean-cast': 'warn', + 'no-empty-pattern': 'warn', + 'no-useless-catch': 'warn', + 'no-unsafe-finally': 'warn', + 'no-prototype-builtins': 'warn', + 'no-async-promise-executor': 'warn', + 'no-constant-condition': 'warn', + + // The following rules are part of eslint:recommended + // and can be remove once solved + 'no-constant-binary-expression': 'warn', + 'no-loss-of-precision': 'warn', + + // The following rules are part of @typescript-eslint/recommended-type-checked + // and can be remove once solved + '@typescript-eslint/await-thenable': 'warn', + '@typescript-eslint/ban-ts-comment': 'warn', + '@typescript-eslint/no-base-to-string': 'warn', + '@typescript-eslint/no-empty-object-type': 'warn', + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/no-floating-promises': 'warn', + '@typescript-eslint/no-misused-promises': 'warn', + '@typescript-eslint/no-redundant-type-constituents': 'warn', + '@typescript-eslint/no-require-imports': 'warn', + '@typescript-eslint/no-unnecessary-type-assertion': 'warn', + '@typescript-eslint/no-unsafe-argument': 'warn', + '@typescript-eslint/no-unsafe-assignment': 'warn', + '@typescript-eslint/no-unsafe-enum-comparison': 'warn', + '@typescript-eslint/no-unsafe-function-type': 'warn', + '@typescript-eslint/no-unsafe-member-access': 'warn', + '@typescript-eslint/no-unsafe-return': 'warn', + '@typescript-eslint/no-unsafe-call': 'warn', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + caughtErrors: 'none' + } + ], + '@typescript-eslint/no-wrapper-object-types': 'warn', + '@typescript-eslint/only-throw-error': 'warn', + '@typescript-eslint/prefer-promise-reject-errors': 'warn', + '@typescript-eslint/require-await': 'warn', + '@typescript-eslint/restrict-template-expressions': 'warn', + '@typescript-eslint/unbound-method': 'warn', + + // The following rules are part of @typescript-eslint/stylistic-type-checked + // and can be remove once solved + '@typescript-eslint/prefer-nullish-coalescing': 'warn', // TODO: Requires strictNullChecks: true + '@typescript-eslint/prefer-regexp-exec': 'warn' + } + })) +]; diff --git a/libs/common/.eslintrc.json b/libs/common/.eslintrc.json deleted file mode 100644 index 69cfc2050..000000000 --- a/libs/common/.eslintrc.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "extends": ["../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "parserOptions": { - "project": ["libs/common/tsconfig.*?.json"] - }, - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/libs/common/eslint.config.cjs b/libs/common/eslint.config.cjs new file mode 100644 index 000000000..a78dde897 --- /dev/null +++ b/libs/common/eslint.config.cjs @@ -0,0 +1,28 @@ +const baseConfig = require('../../eslint.config.cjs'); + +module.exports = [ + { + ignores: ['**/dist'] + }, + ...baseConfig, + { + files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'], + // Override or add rules here + rules: {}, + languageOptions: { + parserOptions: { + project: ['libs/common/tsconfig.*?.json'] + } + } + }, + { + files: ['**/*.ts', '**/*.tsx'], + // Override or add rules here + rules: {} + }, + { + files: ['**/*.js', '**/*.jsx'], + // Override or add rules here + rules: {} + } +]; diff --git a/libs/ui/.eslintrc.json b/libs/ui/.eslintrc.json deleted file mode 100644 index edc969121..000000000 --- a/libs/ui/.eslintrc.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "extends": ["../../.eslintrc.json"], - "ignorePatterns": ["!**/*", "**/*.stories.ts"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "parserOptions": { - "project": ["libs/ui/tsconfig.*?.json"] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "gf", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "gf", - "style": "kebab-case" - } - ], - "@angular-eslint/prefer-standalone": "off" - } - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/libs/ui/eslint.config.cjs b/libs/ui/eslint.config.cjs new file mode 100644 index 000000000..ceaf43ca2 --- /dev/null +++ b/libs/ui/eslint.config.cjs @@ -0,0 +1,65 @@ +const { FlatCompat } = require('@eslint/eslintrc'); +const js = require('@eslint/js'); +const baseConfig = require('../../eslint.config.cjs'); + +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended +}); + +module.exports = [ + { + ignores: ['**/dist'] + }, + ...baseConfig, + ...compat + .config({ + extends: [ + 'plugin:@nx/angular', + 'plugin:@angular-eslint/template/process-inline-templates' + ] + }) + .map((config) => ({ + ...config, + files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'], + rules: { + ...config.rules, + '@angular-eslint/directive-selector': [ + 'error', + { + type: 'attribute', + prefix: 'gf', + style: 'camelCase' + } + ], + '@angular-eslint/component-selector': [ + 'error', + { + type: 'element', + prefix: 'gf', + style: 'kebab-case' + } + ], + '@angular-eslint/prefer-standalone': 'off' + }, + languageOptions: { + parserOptions: { + project: ['libs/ui/tsconfig.*?.json'] + } + } + })), + ...compat + .config({ + extends: ['plugin:@nx/angular-template'] + }) + .map((config) => ({ + ...config, + files: ['**/*.html'], + rules: { + ...config.rules + } + })), + { + ignores: ['**/*.stories.ts'] + } +]; diff --git a/nx.json b/nx.json index e39b5dd23..785ffa781 100644 --- a/nx.json +++ b/nx.json @@ -63,6 +63,7 @@ "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", "!{projectRoot}/**/*.stories.@(js|jsx|ts|tsx|mdx)", "!{projectRoot}/.storybook/**/*", + "!{projectRoot}/eslint.config.cjs", "!{projectRoot}/jest.config.[jt]s", "!{projectRoot}/src/test-setup.[jt]s", "!{projectRoot}/tsconfig.storybook.json", diff --git a/package-lock.json b/package-lock.json index 53d23d932..34891a9b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -104,6 +104,8 @@ "@angular/language-service": "19.0.5", "@angular/localize": "19.0.5", "@angular/pwa": "19.0.6", + "@eslint/eslintrc": "3.2.0", + "@eslint/js": "9.18.0", "@nestjs/schematics": "10.0.1", "@nestjs/testing": "10.1.3", "@nx/angular": "20.3.0", @@ -133,15 +135,15 @@ "@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", + "@typescript-eslint/eslint-plugin": "8.20.0", + "@typescript-eslint/parser": "8.20.0", "codelyzer": "6.0.1", "cypress": "6.2.1", - "eslint": "8.57.0", + "eslint": "9.18.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", + "eslint-plugin-cypress": "3.2.0", + "eslint-plugin-import": "2.31.0", + "eslint-plugin-storybook": "0.10.2", "husky": "9.1.7", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", @@ -5215,17 +5217,45 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", + "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -5233,7 +5263,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -5256,17 +5286,45 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "type-fest": "^0.20.2" + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5292,27 +5350,38 @@ "dev": true, "license": "MIT" }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/js": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz", + "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", + "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.10.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@hexagon/base64": { @@ -5321,19 +5390,42 @@ "integrity": "sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==", "license": "MIT" }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -5350,12 +5442,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@inquirer/checkbox": { "version": "4.0.4", @@ -9386,6 +9485,13 @@ "node": ">=16.0.0" } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, "node_modules/@samverschueren/stream-to-observable": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", @@ -11949,178 +12055,72 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.20.0.tgz", + "integrity": "sha512-naduuphVw5StFfqp4Gq4WhIBE2gN1GEmMUExpJYknZJdRnc+2gDzB8Z3+5+/Kv33hPQRDGzQO/0opHE72lZZ6A==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.20.0", + "@typescript-eslint/type-utils": "8.20.0", + "@typescript-eslint/utils": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^2.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.20.0.tgz", + "integrity": "sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/scope-manager": "8.20.0", + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/typescript-estree": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.20.0.tgz", + "integrity": "sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -12128,16 +12128,16 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.2.tgz", - "integrity": "sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.20.0.tgz", + "integrity": "sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.18.2", - "@typescript-eslint/utils": "8.18.2", + "@typescript-eslint/typescript-estree": "8.20.0", + "@typescript-eslint/utils": "8.20.0", "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -12151,84 +12151,10 @@ "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.2.tgz", - "integrity": "sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.18.2", - "@typescript-eslint/visitor-keys": "8.18.2", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.8.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.2.tgz", - "integrity": "sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.18.2", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/types": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.2.tgz", - "integrity": "sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.20.0.tgz", + "integrity": "sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==", "dev": true, "license": "MIT", "engines": { @@ -12240,52 +12166,36 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.20.0.tgz", + "integrity": "sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -12299,16 +12209,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.2.tgz", - "integrity": "sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.20.0.tgz", + "integrity": "sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.18.2", - "@typescript-eslint/types": "8.18.2", - "@typescript-eslint/typescript-estree": "8.18.2" + "@typescript-eslint/scope-manager": "8.20.0", + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/typescript-estree": "8.20.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -12322,59 +12232,14 @@ "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.2.tgz", - "integrity": "sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.18.2", - "@typescript-eslint/visitor-keys": "8.18.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.2.tgz", - "integrity": "sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.18.2", - "@typescript-eslint/visitor-keys": "8.18.2", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.8.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.2.tgz", - "integrity": "sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.20.0.tgz", + "integrity": "sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.18.2", + "@typescript-eslint/types": "8.20.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -12385,7 +12250,7 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-visitor-keys": { + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", @@ -12398,61 +12263,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@typescript-eslint/utils/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", - "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", - "dev": true, - "license": "ISC" - }, "node_modules/@vitejs/plugin-basic-ssl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", @@ -13151,16 +12961,6 @@ "dev": true, "license": "MIT" }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/array.prototype.findlastindex": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", @@ -13551,24 +13351,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.12", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", @@ -17759,59 +17541,63 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz", + "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.10.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.18.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { @@ -17892,16 +17678,16 @@ "license": "MIT" }, "node_modules/eslint-plugin-cypress": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz", - "integrity": "sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-3.2.0.tgz", + "integrity": "sha512-HaxMz6BoU4ay+K4WrG9ZJC1NdX06FqSlAwtRDStjM0ORFT7zCNPNuRJ+kUPc17Rt2AMUBSqeD9L0zTR3uZhPpw==", "dev": true, "license": "MIT", "dependencies": { "globals": "^13.20.0" }, "peerDependencies": { - "eslint": ">= 3.2.1" + "eslint": ">=7" } }, "node_modules/eslint-plugin-cypress/node_modules/globals": { @@ -17934,35 +17720,37 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -18019,139 +17807,23 @@ } }, "node_modules/eslint-plugin-storybook": { - "version": "0.6.15", - "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.15.tgz", - "integrity": "sha512-lAGqVAJGob47Griu29KXYowI4G7KwMoJDOkEip8ujikuDLxU+oWJ1l0WL6F2oDO4QiyUFXvtDkEkISMOPzo+7w==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.10.2.tgz", + "integrity": "sha512-iOrFJfyLgRLIbWDLbbs3J4yrknvIB+uiZ8KGqGOEXTL7/BGuBMZLiIU9Q4Pm/VYJrHN4JqmMtwCSrAemHL2nFg==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf": "^0.0.1", - "@typescript-eslint/utils": "^5.45.0", - "requireindex": "^1.1.0", + "@storybook/csf": "^0.1.11", + "@typescript-eslint/utils": "^8.8.1", "ts-dedent": "^2.2.0" }, "engines": { - "node": "12.x || 14.x || >= 16" + "node": ">= 18" }, "peerDependencies": { "eslint": ">=6" } }, - "node_modules/eslint-plugin-storybook/node_modules/@storybook/csf": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", - "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -18204,19 +17876,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -18231,9 +17890,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -18241,56 +17900,58 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/eslint/node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "type-fest": "^0.20.2" + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/json-schema-traverse": { @@ -18332,19 +17993,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -18963,16 +18611,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/filelist": { @@ -19215,34 +18863,17 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { @@ -19956,27 +19587,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/good-listener": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", @@ -29086,16 +28696,6 @@ "node": ">=0.10.0" } }, - "node_modules/requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.5" - } - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -31142,13 +30742,6 @@ "node": ">=8" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/throttleit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", @@ -31337,16 +30930,16 @@ } }, "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", + "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-dedent": { @@ -31515,10 +31108,9 @@ "license": "0BSD" }, "node_modules/tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -31531,10 +31123,10 @@ "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", + "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", - "tslib": "^1.13.0", + "tslib": "^1.8.0", "tsutils": "^2.29.0" }, "bin": { @@ -31544,7 +31136,7 @@ "node": ">=4.8.0" }, "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" + "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" } }, "node_modules/tslint/node_modules/ansi-styles": { @@ -31664,29 +31256,6 @@ "node": ">=0.6.x" } }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, "node_modules/tuf-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.0.1.tgz", diff --git a/package.json b/package.json index 8045097e3..660efb315 100644 --- a/package.json +++ b/package.json @@ -150,6 +150,8 @@ "@angular/language-service": "19.0.5", "@angular/localize": "19.0.5", "@angular/pwa": "19.0.6", + "@eslint/eslintrc": "3.2.0", + "@eslint/js": "9.18.0", "@nestjs/schematics": "10.0.1", "@nestjs/testing": "10.1.3", "@nx/angular": "20.3.0", @@ -179,15 +181,15 @@ "@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", + "@typescript-eslint/eslint-plugin": "8.20.0", + "@typescript-eslint/parser": "8.20.0", "codelyzer": "6.0.1", "cypress": "6.2.1", - "eslint": "8.57.0", + "eslint": "9.18.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", + "eslint-plugin-cypress": "3.2.0", + "eslint-plugin-import": "2.31.0", + "eslint-plugin-storybook": "0.10.2", "husky": "9.1.7", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", From 40b628e0e78136b67a98549b010c6a335441ded9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 18 Jan 2025 10:50:52 +0100 Subject: [PATCH 02/30] Feature/extend search by isin in financial modeling prep service (#4204) * Extend search by ISIN * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/symbol/symbol.controller.ts | 2 +- .../financial-modeling-prep.service.ts | 69 +++++++++++++------ 3 files changed, 51 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3598581f..07b37e80b 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 +- Extended the search by `isin` in the _Financial Modeling Prep_ service - Switched to _ESLint_’s flat config format - Upgraded `eslint` dependencies diff --git a/apps/api/src/app/symbol/symbol.controller.ts b/apps/api/src/app/symbol/symbol.controller.ts index 89cdd416c..5d9a49a29 100644 --- a/apps/api/src/app/symbol/symbol.controller.ts +++ b/apps/api/src/app/symbol/symbol.controller.ts @@ -47,7 +47,7 @@ export class SymbolController { try { return this.symbolService.lookup({ includeIndices, - query: query.toLowerCase(), + query, user: this.request.user }); } catch { diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index ed55b3c2f..edde92cbb 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -20,12 +20,13 @@ import { import { Injectable, Logger } from '@nestjs/common'; import { DataSource, SymbolProfile } from '@prisma/client'; +import { isISIN } from 'class-validator'; import { format, isAfter, isBefore, isSameDay } from 'date-fns'; @Injectable() export class FinancialModelingPrepService implements DataProviderInterface { private apiKey: string; - private readonly URL = 'https://financialmodelingprep.com/api/v3'; + private readonly URL = this.getUrl({ version: 3 }); public constructor( private readonly configurationService: ConfigurationService @@ -161,25 +162,49 @@ export class FinancialModelingPrepService implements DataProviderInterface { let items: LookupItem[] = []; try { - const result = await fetch( - `${this.URL}/search?query=${query}&apikey=${this.apiKey}`, - { - signal: AbortSignal.timeout( - this.configurationService.get('REQUEST_TIMEOUT') - ) - } - ).then((res) => res.json()); - - items = result.map(({ currency, name, symbol }) => { - return { - // TODO: Add assetClass - // TODO: Add assetSubClass - currency, - name, - symbol, - dataSource: this.getName() - }; - }); + if (isISIN(query)) { + const result = await fetch( + `${this.getUrl({ version: 4 })}/search/isin?isin=${query}&apikey=${this.apiKey}`, + { + signal: AbortSignal.timeout( + this.configurationService.get('REQUEST_TIMEOUT') + ) + } + ).then((res) => res.json()); + + items = result.map(({ companyName, currency, symbol }) => { + return { + currency, + symbol, + assetClass: undefined, // TODO + assetSubClass: undefined, // TODO + dataProviderInfo: this.getDataProviderInfo(), + dataSource: this.getName(), + name: companyName + }; + }); + } else { + const result = await fetch( + `${this.URL}/search?query=${query}&apikey=${this.apiKey}`, + { + signal: AbortSignal.timeout( + this.configurationService.get('REQUEST_TIMEOUT') + ) + } + ).then((res) => res.json()); + + items = result.map(({ currency, name, symbol }) => { + return { + currency, + name, + symbol, + assetClass: undefined, // TODO + assetSubClass: undefined, // TODO + dataProviderInfo: this.getDataProviderInfo(), + dataSource: this.getName() + }; + }); + } } catch (error) { let message = error; @@ -194,4 +219,8 @@ export class FinancialModelingPrepService implements DataProviderInterface { return { items }; } + + private getUrl({ version }: { version: number }) { + return `https://financialmodelingprep.com/api/v${version}`; + } } From 511a2d6d0de16b7b2fbb6cdfcac94bdbc2da6c4f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 18 Jan 2025 18:48:32 +0100 Subject: [PATCH 03/30] Feature/extend asset profile data in financial modeling prep service (#4206) * Extend asset profile data * Update changelog --- CHANGELOG.md | 1 + .../financial-modeling-prep.service.ts | 182 +++++++++++++++++- 2 files changed, 178 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07b37e80b..bbcbeb7db 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 +- Extended the asset profile data in the _Financial Modeling Prep_ service - Extended the search by `isin` in the _Financial Modeling Prep_ service - Switched to _ESLint_’s flat config format - Upgraded `eslint` dependencies diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index edde92cbb..af8a9e9a2 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -1,4 +1,5 @@ import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { CryptocurrencyService } from '@ghostfolio/api/services/cryptocurrency/cryptocurrency.service'; import { DataProviderInterface, GetDividendsParams, @@ -10,7 +11,6 @@ import { IDataProviderHistoricalResponse, IDataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; -import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; import { DATE_FORMAT, parseDate } from '@ghostfolio/common/helper'; import { DataProviderInfo, @@ -19,8 +19,14 @@ import { } from '@ghostfolio/common/interfaces'; import { Injectable, Logger } from '@nestjs/common'; -import { DataSource, SymbolProfile } from '@prisma/client'; +import { + AssetClass, + AssetSubClass, + DataSource, + SymbolProfile +} from '@prisma/client'; import { isISIN } from 'class-validator'; +import { countries } from 'countries-list'; import { format, isAfter, isBefore, isSameDay } from 'date-fns'; @Injectable() @@ -29,7 +35,8 @@ export class FinancialModelingPrepService implements DataProviderInterface { private readonly URL = this.getUrl({ version: 3 }); public constructor( - private readonly configurationService: ConfigurationService + private readonly configurationService: ConfigurationService, + private readonly cryptocurrencyService: CryptocurrencyService ) { this.apiKey = this.configurationService.get( 'API_KEY_FINANCIAL_MODELING_PREP' @@ -45,10 +52,152 @@ export class FinancialModelingPrepService implements DataProviderInterface { }: { symbol: string; }): Promise> { - return { + const response: Partial = { symbol, dataSource: this.getName() }; + + try { + if (this.cryptocurrencyService.isCryptocurrency(symbol)) { + const [quote] = await fetch( + `${this.URL}/quote/${symbol}?apikey=${this.apiKey}`, + { + signal: AbortSignal.timeout( + this.configurationService.get('REQUEST_TIMEOUT') + ) + } + ).then((res) => res.json()); + + response.assetClass = AssetClass.LIQUIDITY; + response.assetSubClass = AssetSubClass.CRYPTOCURRENCY; + response.currency = symbol.substring(symbol.length - 3); + response.name = quote.name; + } else { + const [assetProfile] = await fetch( + `${this.URL}/profile/${symbol}?apikey=${this.apiKey}`, + { + signal: AbortSignal.timeout( + this.configurationService.get('REQUEST_TIMEOUT') + ) + } + ).then((res) => res.json()); + + const { assetClass, assetSubClass } = + this.parseAssetClass(assetProfile); + + response.assetClass = assetClass; + response.assetSubClass = assetSubClass; + + if (assetSubClass === AssetSubClass.ETF) { + const etfCountryWeightings = await fetch( + `${this.URL}/etf-country-weightings/${symbol}?apikey=${this.apiKey}`, + { + signal: AbortSignal.timeout( + this.configurationService.get('REQUEST_TIMEOUT') + ) + } + ).then((res) => res.json()); + + response.countries = etfCountryWeightings.map( + ({ country: countryName, weightPercentage }) => { + let countryCode: string; + + for (const [code, country] of Object.entries(countries)) { + if (country.name === countryName) { + countryCode = code; + break; + } + } + + return { + code: countryCode, + weight: parseFloat(weightPercentage.slice(0, -1)) / 100 + }; + } + ); + + const [portfolioDate] = await fetch( + `${this.getUrl({ version: 4 })}/etf-holdings/portfolio-date?symbol=${symbol}&apikey=${this.apiKey}`, + { + signal: AbortSignal.timeout( + this.configurationService.get('REQUEST_TIMEOUT') + ) + } + ).then((res) => res.json()); + + if (portfolioDate) { + const etfHoldings = await fetch( + `${this.getUrl({ version: 4 })}/etf-holdings?date=${portfolioDate.date}&symbol=${symbol}&apikey=${this.apiKey}`, + { + signal: AbortSignal.timeout( + this.configurationService.get('REQUEST_TIMEOUT') + ) + } + ).then((res) => res.json()); + + const sortedTopHoldings = etfHoldings + .sort((a, b) => { + return b.pctVal - a.pctVal; + }) + .slice(0, 10); + + response.holdings = sortedTopHoldings.map(({ name, pctVal }) => { + return { name, weight: pctVal / 100 }; + }); + } + + const etfSectorWeightings = await fetch( + `${this.URL}/etf-sector-weightings/${symbol}?apikey=${this.apiKey}`, + { + signal: AbortSignal.timeout( + this.configurationService.get('REQUEST_TIMEOUT') + ) + } + ).then((res) => res.json()); + + response.sectors = etfSectorWeightings.map( + ({ sector, weightPercentage }) => { + return { + name: sector, + weight: parseFloat(weightPercentage.slice(0, -1)) / 100 + }; + } + ); + } else if (assetSubClass === AssetSubClass.STOCK) { + if (assetProfile.country) { + response.countries = [{ code: assetProfile.country, weight: 1 }]; + } + + if (assetProfile.sector) { + response.sectors = [{ name: assetProfile.sector, weight: 1 }]; + } + } + + response.currency = assetProfile.currency; + + if (assetProfile.isin) { + response.isin = assetProfile.isin; + } + + response.name = assetProfile.companyName; + + if (assetProfile.website) { + response.url = assetProfile.website; + } + } + } catch (error) { + let message = error; + + if (error?.name === 'AbortError') { + message = `RequestError: The operation to get the asset profile for ${symbol} was aborted because the request to the data provider took more than ${( + this.configurationService.get('REQUEST_TIMEOUT') / 1000 + ).toFixed(3)} seconds`; + } + + Logger.error(message, 'FinancialModelingPrepService'); + } + + return response; } public getDataProviderInfo(): DataProviderInfo { @@ -131,8 +280,10 @@ export class FinancialModelingPrepService implements DataProviderInterface { ).then((res) => res.json()); for (const { price, symbol } of quotes) { + const { currency } = await this.getAssetProfile({ symbol }); + response[symbol] = { - currency: DEFAULT_CURRENCY, + currency, dataProviderInfo: this.getDataProviderInfo(), dataSource: DataSource.FINANCIAL_MODELING_PREP, marketPrice: price, @@ -223,4 +374,25 @@ export class FinancialModelingPrepService implements DataProviderInterface { private getUrl({ version }: { version: number }) { return `https://financialmodelingprep.com/api/v${version}`; } + + public parseAssetClass(profile: any): { + assetClass: AssetClass; + assetSubClass: AssetSubClass; + } { + let assetClass: AssetClass; + let assetSubClass: AssetSubClass; + + if (profile.isEtf) { + assetClass = AssetClass.EQUITY; + assetSubClass = AssetSubClass.ETF; + } else if (profile.isFund) { + assetClass = AssetClass.EQUITY; + assetSubClass = AssetSubClass.MUTUALFUND; + } else { + assetClass = AssetClass.EQUITY; + assetSubClass = AssetSubClass.STOCK; + } + + return { assetClass, assetSubClass }; + } } From 59f84aa46f83d6a32b93d99bee7c5adece395b6d Mon Sep 17 00:00:00 2001 From: Ken Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sun, 19 Jan 2025 15:32:14 +0700 Subject: [PATCH 04/30] Feature/upgrade chart.js dependencies to the latest versions (#4209) * chore(deps): bump chartjs-chart-treemap from 2.3.1 to 3.1.0 * chore(deps): bump chartjs-plugin-annotation from 2.1.2 to 3.1.0 * chore(deps): bump chart.js from 4.2.0 to 4.4.7 * fix(ts): reinforce chart type safety * Update changelog --- CHANGELOG.md | 3 ++ .../portfolio-proportion-chart.component.ts | 8 +++--- .../treemap-chart/treemap-chart.component.ts | 2 +- package-lock.json | 28 +++++++++---------- package.json | 6 ++-- 5 files changed, 25 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbcbeb7db..8d3a23dc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Extended the asset profile data in the _Financial Modeling Prep_ service - Extended the search by `isin` in the _Financial Modeling Prep_ service - Switched to _ESLint_’s flat config format +- Upgraded `chart.js` from version `4.2.0` to `4.4.7` +- Upgraded `chartjs-chart-treemap` from version `2.3.1` to `3.1.0` +- Upgraded `chartjs-plugin-annotation` from version `2.1.2` to `3.1.0` - Upgraded `eslint` dependencies ## 2.134.0 - 2025-01-15 diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts index 7f914870b..6319c3cd7 100644 --- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts +++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts @@ -77,7 +77,7 @@ export class GfPortfolioProportionChartComponent @ViewChild('chartCanvas') chartCanvas: ElementRef; - public chart: Chart<'pie'>; + public chart: Chart<'doughnut'>; public isLoading = true; private readonly OTHER_KEY = 'OTHER'; @@ -257,7 +257,7 @@ export class GfPortfolioProportionChartComponent }); }); - const datasets: ChartConfiguration['data']['datasets'] = [ + const datasets: ChartConfiguration<'doughnut'>['data']['datasets'] = [ { backgroundColor: chartDataSorted.map(([, item]) => { return item.color; @@ -295,7 +295,7 @@ export class GfPortfolioProportionChartComponent datasets[1].data[1] = Number.MAX_SAFE_INTEGER; } - const data: ChartConfiguration['data'] = { + const data: ChartConfiguration<'doughnut'>['data'] = { datasets, labels }; @@ -308,7 +308,7 @@ export class GfPortfolioProportionChartComponent ) as unknown; this.chart.update(); } else { - this.chart = new Chart(this.chartCanvas.nativeElement, { + this.chart = new Chart<'doughnut'>(this.chartCanvas.nativeElement, { data, options: { animation: false, 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 11ee026f5..4c3167c9e 100644 --- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts +++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -196,7 +196,7 @@ export class GfTreemapChartComponent min: Math.min(...negativeNetPerformancePercents) }; - const data: ChartConfiguration['data'] = { + const data: ChartConfiguration<'treemap'>['data'] = { datasets: [ { backgroundColor: (ctx) => { diff --git a/package-lock.json b/package-lock.json index 34891a9b9..3eeef5dac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,10 +50,10 @@ "bull": "4.16.2", "cache-manager": "5.7.6", "cache-manager-redis-yet": "5.1.4", - "chart.js": "4.2.0", + "chart.js": "4.4.7", "chartjs-adapter-date-fns": "3.0.0", - "chartjs-chart-treemap": "2.3.1", - "chartjs-plugin-annotation": "2.1.2", + "chartjs-chart-treemap": "3.1.0", + "chartjs-plugin-annotation": "3.1.0", "chartjs-plugin-datalabels": "2.2.0", "cheerio": "1.0.0", "class-transformer": "0.5.1", @@ -14308,15 +14308,15 @@ "license": "MIT" }, "node_modules/chart.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.2.0.tgz", - "integrity": "sha512-wbtcV+QKeH0F7gQZaCJEIpsNriFheacouJQTVIjITi3eQA8bTlIBoknz0+dgV79aeKLNMAX+nDslIVE/nJ3rzA==", + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.7.tgz", + "integrity": "sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==", "license": "MIT", "dependencies": { "@kurkle/color": "^0.3.0" }, "engines": { - "pnpm": "^7.0.0" + "pnpm": ">=8" } }, "node_modules/chartjs-adapter-date-fns": { @@ -14330,21 +14330,21 @@ } }, "node_modules/chartjs-chart-treemap": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chartjs-chart-treemap/-/chartjs-chart-treemap-2.3.1.tgz", - "integrity": "sha512-GW+iODLICIJhNZtHbTtaOjCwRIxmXcquXRKDFMsrkXyqyDeSN1aiVfzNNj6Xjy55soopqRA+YfHqjT2S2zF7lQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/chartjs-chart-treemap/-/chartjs-chart-treemap-3.1.0.tgz", + "integrity": "sha512-0LJxj4J9sCTHmrXCFlqtoBKMJDcS7VzFeRgNBRZRwU1QSpCXJKTNk5TysPEs5/YW0XYvZoN8u44RqqLf0pAzQw==", "license": "MIT", "peerDependencies": { "chart.js": ">=3.0.0" } }, "node_modules/chartjs-plugin-annotation": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/chartjs-plugin-annotation/-/chartjs-plugin-annotation-2.1.2.tgz", - "integrity": "sha512-kmEp2WtpogwnKKnDPO3iO3mVwvVGtmG5BkZVtAEZm5YzJ9CYxojjYEgk7OTrFbJ5vU098b84UeJRe8kRfNcq5g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/chartjs-plugin-annotation/-/chartjs-plugin-annotation-3.1.0.tgz", + "integrity": "sha512-EkAed6/ycXD/7n0ShrlT1T2Hm3acnbFhgkIEJLa0X+M6S16x0zwj1Fv4suv/2bwayCT3jGPdAtI9uLcAMToaQQ==", "license": "MIT", "peerDependencies": { - "chart.js": ">=3.7.0" + "chart.js": ">=4.0.0" } }, "node_modules/chartjs-plugin-datalabels": { diff --git a/package.json b/package.json index 660efb315..e903b334a 100644 --- a/package.json +++ b/package.json @@ -96,10 +96,10 @@ "bull": "4.16.2", "cache-manager": "5.7.6", "cache-manager-redis-yet": "5.1.4", - "chart.js": "4.2.0", + "chart.js": "4.4.7", "chartjs-adapter-date-fns": "3.0.0", - "chartjs-chart-treemap": "2.3.1", - "chartjs-plugin-annotation": "2.1.2", + "chartjs-chart-treemap": "3.1.0", + "chartjs-plugin-annotation": "3.1.0", "chartjs-plugin-datalabels": "2.2.0", "cheerio": "1.0.0", "class-transformer": "0.5.1", From 4d201acdbe8ce4b8b79c31ed065aad2937d475ae Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 19 Jan 2025 09:39:05 +0100 Subject: [PATCH 05/30] Feature/extend get dividends in financial modeling prep service (#4210) * Extend get dividends * Update changelog --- CHANGELOG.md | 3 +- .../financial-modeling-prep.service.ts | 71 +++++++++++++++++-- 2 files changed, 65 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d3a23dc4..9b9c31586 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Extended the asset profile data in the _Financial Modeling Prep_ service -- Extended the search by `isin` in the _Financial Modeling Prep_ service +- Extended the _Financial Modeling Prep_ service - Switched to _ESLint_’s flat config format - Upgraded `chart.js` from version `4.2.0` to `4.4.7` - Upgraded `chartjs-chart-treemap` from version `2.3.1` to `3.1.0` diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index af8a9e9a2..386bcc8d4 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -11,6 +11,7 @@ import { IDataProviderHistoricalResponse, IDataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; import { DATE_FORMAT, parseDate } from '@ghostfolio/common/helper'; import { DataProviderInfo, @@ -27,7 +28,14 @@ import { } from '@prisma/client'; import { isISIN } from 'class-validator'; import { countries } from 'countries-list'; -import { format, isAfter, isBefore, isSameDay } from 'date-fns'; +import { + addDays, + format, + isAfter, + isBefore, + isSameDay, + parseISO +} from 'date-fns'; @Injectable() export class FinancialModelingPrepService implements DataProviderInterface { @@ -58,7 +66,10 @@ export class FinancialModelingPrepService implements DataProviderInterface { }; try { - if (this.cryptocurrencyService.isCryptocurrency(symbol)) { + if ( + symbol.endsWith(DEFAULT_CURRENCY) && + this.cryptocurrencyService.isCryptocurrency(symbol) + ) { const [quote] = await fetch( `${this.URL}/quote/${symbol}?apikey=${this.apiKey}`, { @@ -208,8 +219,54 @@ export class FinancialModelingPrepService implements DataProviderInterface { }; } - public async getDividends({}: GetDividendsParams) { - return {}; + public async getDividends({ + from, + requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'), + symbol, + to + }: GetDividendsParams) { + if (isSameDay(from, to)) { + to = addDays(to, 1); + } + + try { + const response: { + [date: string]: IDataProviderHistoricalResponse; + } = {}; + + const { historical } = await fetch( + `${this.URL}/historical-price-full/stock_dividend/${symbol}?apikey=${this.apiKey}`, + { + signal: AbortSignal.timeout(requestTimeout) + } + ).then((res) => res.json()); + + historical + .filter(({ date }) => { + return ( + (isSameDay(parseISO(date), from) || + isAfter(parseISO(date), from)) && + isBefore(parseISO(date), to) + ); + }) + .forEach(({ adjDividend, date }) => { + response[date] = { + marketPrice: adjDividend + }; + }); + + return response; + } catch (error) { + Logger.error( + `Could not get dividends for ${symbol} (${this.getName()}) from ${format( + from, + DATE_FORMAT + )} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}`, + 'FinancialModelingPrepService' + ); + + return {}; + } } public async getHistorical({ @@ -234,14 +291,14 @@ export class FinancialModelingPrepService implements DataProviderInterface { [symbol]: {} }; - for (const { close, date } of historical) { + for (const { adjClose, date } of historical) { if ( (isSameDay(parseDate(date), from) || isAfter(parseDate(date), from)) && isBefore(parseDate(date), to) ) { result[symbol][date] = { - marketPrice: close + marketPrice: adjClose }; } } @@ -375,7 +432,7 @@ export class FinancialModelingPrepService implements DataProviderInterface { return `https://financialmodelingprep.com/api/v${version}`; } - public parseAssetClass(profile: any): { + private parseAssetClass(profile: any): { assetClass: AssetClass; assetSubClass: AssetSubClass; } { From e3633aaa30b982167432214845417272bf23a354 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 19 Jan 2025 09:49:00 +0100 Subject: [PATCH 06/30] Feature/upgrade UUID to version 11.0.5 (#4201) * Upgrade uuid to version 11.0.5 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b9c31586..3179e16a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Upgraded `chartjs-chart-treemap` from version `2.3.1` to `3.1.0` - Upgraded `chartjs-plugin-annotation` from version `2.1.2` to `3.1.0` - Upgraded `eslint` dependencies +- Upgraded `uuid` from version `11.0.2` to `11.0.5` ## 2.134.0 - 2025-01-15 diff --git a/package-lock.json b/package-lock.json index 3eeef5dac..58f10cb0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -88,7 +88,7 @@ "stripe": "17.3.0", "svgmap": "2.6.0", "twitter-api-v2": "1.14.2", - "uuid": "11.0.2", + "uuid": "11.0.5", "yahoo-finance2": "2.11.3", "zone.js": "0.15.0" }, @@ -31809,9 +31809,9 @@ } }, "node_modules/uuid": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.2.tgz", - "integrity": "sha512-14FfcOJmqdjbBPdDjFQyk/SdT4NySW4eM0zcG+HqbHP5jzuH56xO3J1DGhgs/cEMCfwYi3HQI1gnTO62iaG+tQ==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.5.tgz", + "integrity": "sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" diff --git a/package.json b/package.json index e903b334a..bb9bcb1a8 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "stripe": "17.3.0", "svgmap": "2.6.0", "twitter-api-v2": "1.14.2", - "uuid": "11.0.2", + "uuid": "11.0.5", "yahoo-finance2": "2.11.3", "zone.js": "0.15.0" }, From 4e51a973c782dcf31eab84689ef77146e256de38 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 19 Jan 2025 09:57:54 +0100 Subject: [PATCH 07/30] Feature/refactor is cryptocurrency check (#4215) * Refactoring --- .../src/services/cryptocurrency/cryptocurrency.service.ts | 8 +++++++- .../financial-modeling-prep.service.ts | 6 +----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/api/src/services/cryptocurrency/cryptocurrency.service.ts b/apps/api/src/services/cryptocurrency/cryptocurrency.service.ts index db5cf0876..b814fc186 100644 --- a/apps/api/src/services/cryptocurrency/cryptocurrency.service.ts +++ b/apps/api/src/services/cryptocurrency/cryptocurrency.service.ts @@ -1,3 +1,5 @@ +import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; + import { Injectable } from '@nestjs/common'; const cryptocurrencies = require('../../assets/cryptocurrencies/cryptocurrencies.json'); @@ -9,7 +11,11 @@ export class CryptocurrencyService { public isCryptocurrency(aSymbol = '') { const cryptocurrencySymbol = aSymbol.substring(0, aSymbol.length - 3); - return this.getCryptocurrencies().includes(cryptocurrencySymbol); + + return ( + aSymbol.endsWith(DEFAULT_CURRENCY) && + this.getCryptocurrencies().includes(cryptocurrencySymbol) + ); } private getCryptocurrencies() { diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index 386bcc8d4..ac6b5822e 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -11,7 +11,6 @@ import { IDataProviderHistoricalResponse, IDataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; -import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; import { DATE_FORMAT, parseDate } from '@ghostfolio/common/helper'; import { DataProviderInfo, @@ -66,10 +65,7 @@ export class FinancialModelingPrepService implements DataProviderInterface { }; try { - if ( - symbol.endsWith(DEFAULT_CURRENCY) && - this.cryptocurrencyService.isCryptocurrency(symbol) - ) { + if (this.cryptocurrencyService.isCryptocurrency(symbol)) { const [quote] = await fetch( `${this.URL}/quote/${symbol}?apikey=${this.apiKey}`, { From 6f16e0a650860d7267bdb5bba460505614103b96 Mon Sep 17 00:00:00 2001 From: Ken Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sun, 19 Jan 2025 16:08:45 +0700 Subject: [PATCH 08/30] Feature/upgrade to NestJS 10.4 (#4213) * chore(deps): bump nestjs packages to latest v10 * chore(deps): bump bull from 4.16.2 to 4.16.4 * chore(deps-dev): bump tslib from 2.6.0 to 2.8.1 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 1043 +++++++++------------------------------------ package.json | 28 +- 3 files changed, 216 insertions(+), 856 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3179e16a6..304478425 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Upgraded `chartjs-chart-treemap` from version `2.3.1` to `3.1.0` - Upgraded `chartjs-plugin-annotation` from version `2.1.2` to `3.1.0` - Upgraded `eslint` dependencies +- Upgraded `nestjs` from version `10.1.3` to `10.4.15` - Upgraded `uuid` from version `11.0.2` to `11.0.5` ## 2.134.0 - 2025-01-15 diff --git a/package-lock.json b/package-lock.json index 58f10cb0c..0190bfeaf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,17 +29,17 @@ "@dfinity/principal": "0.15.7", "@dinero.js/currencies": "2.0.0-alpha.8", "@internationalized/number": "3.6.0", - "@nestjs/bull": "10.0.1", - "@nestjs/cache-manager": "2.2.2", - "@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/bull": "10.2.3", + "@nestjs/cache-manager": "2.3.0", + "@nestjs/common": "10.4.15", + "@nestjs/config": "3.3.0", + "@nestjs/core": "10.4.15", + "@nestjs/event-emitter": "2.1.1", + "@nestjs/jwt": "10.2.0", "@nestjs/passport": "10.0.3", - "@nestjs/platform-express": "10.1.3", - "@nestjs/schedule": "3.0.2", - "@nestjs/serve-static": "4.0.0", + "@nestjs/platform-express": "10.4.15", + "@nestjs/schedule": "4.1.2", + "@nestjs/serve-static": "4.0.2", "@prisma/client": "6.2.1", "@simplewebauthn/browser": "9.0.1", "@simplewebauthn/server": "9.0.3", @@ -47,7 +47,7 @@ "alphavantage": "2.2.0", "big.js": "6.2.2", "bootstrap": "4.6.0", - "bull": "4.16.2", + "bull": "4.16.4", "cache-manager": "5.7.6", "cache-manager-redis-yet": "5.1.4", "chart.js": "4.4.7", @@ -106,8 +106,8 @@ "@angular/pwa": "19.0.6", "@eslint/eslintrc": "3.2.0", "@eslint/js": "9.18.0", - "@nestjs/schematics": "10.0.1", - "@nestjs/testing": "10.1.3", + "@nestjs/schematics": "10.2.3", + "@nestjs/testing": "10.4.15", "@nx/angular": "20.3.0", "@nx/cypress": "20.3.0", "@nx/eslint-plugin": "20.3.0", @@ -159,7 +159,7 @@ "storybook": "8.4.7", "ts-jest": "29.1.0", "ts-node": "10.9.2", - "tslib": "2.6.0", + "tslib": "2.8.1", "typescript": "5.6.3", "webpack-bundle-analyzer": "4.10.2" }, @@ -1274,12 +1274,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@angular-devkit/build-angular/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@angular-devkit/build-angular/node_modules/webpack": { "version": "5.96.1", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", @@ -1550,12 +1544,6 @@ "@angular/core": "19.0.5" } }, - "node_modules/@angular/animations/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@angular/build": { "version": "19.0.6", "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.0.6.tgz", @@ -2094,12 +2082,6 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@angular/cdk/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@angular/cli": { "version": "19.0.6", "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.0.6.tgz", @@ -2191,12 +2173,6 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@angular/common/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@angular/compiler": { "version": "19.0.5", "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.0.5.tgz", @@ -2257,18 +2233,6 @@ "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, - "node_modules/@angular/compiler-cli/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/@angular/compiler/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@angular/core": { "version": "19.0.5", "resolved": "https://registry.npmjs.org/@angular/core/-/core-19.0.5.tgz", @@ -2285,12 +2249,6 @@ "zone.js": "~0.15.0" } }, - "node_modules/@angular/core/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@angular/forms": { "version": "19.0.5", "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.0.5.tgz", @@ -2309,12 +2267,6 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@angular/forms/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@angular/language-service": { "version": "19.0.5", "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-19.0.5.tgz", @@ -2368,12 +2320,6 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@angular/material/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@angular/platform-browser": { "version": "19.0.5", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.0.5.tgz", @@ -2414,18 +2360,6 @@ "@angular/platform-browser": "19.0.5" } }, - "node_modules/@angular/platform-browser-dynamic/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/@angular/platform-browser/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@angular/pwa": { "version": "19.0.6", "resolved": "https://registry.npmjs.org/@angular/pwa/-/pwa-19.0.6.tgz", @@ -2469,12 +2403,6 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@angular/router/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@angular/service-worker": { "version": "19.0.5", "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-19.0.5.tgz", @@ -2494,12 +2422,6 @@ "@angular/core": "19.0.5" } }, - "node_modules/@angular/service-worker/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@babel/code-frame": { "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", @@ -4722,13 +4644,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@emnapi/core/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@emnapi/runtime": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", @@ -4739,13 +4654,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@emnapi/runtime/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@emnapi/wasi-threads": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", @@ -4756,13 +4664,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@emnapi/wasi-threads/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.24.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", @@ -6740,13 +6641,13 @@ } }, "node_modules/@nestjs/bull": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@nestjs/bull/-/bull-10.0.1.tgz", - "integrity": "sha512-1GcJ8BkHDgQdBMZ7SqAqgUHiFnISXmpGvewFeTc8wf87JLk2PweiKv9j9/KQKU+NI237pCe82XB0bXzTnsdxSw==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@nestjs/bull/-/bull-10.2.3.tgz", + "integrity": "sha512-Gy90JjFCfYhWFBeoBSidc7rEEf2BNhkJ3RfK8ym589POOldwAra2xcnFBi0ZuhhOV60GcrCJBBkdrUbAMM670w==", "license": "MIT", "dependencies": { - "@nestjs/bull-shared": "^10.0.1", - "tslib": "2.6.0" + "@nestjs/bull-shared": "^10.2.3", + "tslib": "2.8.1" }, "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", @@ -6767,16 +6668,10 @@ "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0" } }, - "node_modules/@nestjs/bull-shared/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@nestjs/cache-manager": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@nestjs/cache-manager/-/cache-manager-2.2.2.tgz", - "integrity": "sha512-+n7rpU1QABeW2WV17Dl1vZCG3vWjJU1MaamWgZvbGxYE9EeCM0lVLfw3z7acgDTNwOy+K68xuQPoIMxD0bhjlA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@nestjs/cache-manager/-/cache-manager-2.3.0.tgz", + "integrity": "sha512-pxeBp9w/s99HaW2+pezM1P3fLiWmUEnTUoUMLa9UYViCtjj0E0A19W/vaT5JFACCzFIeNrwH4/16jkpAhQ25Vw==", "license": "MIT", "peerDependencies": { "@nestjs/common": "^9.0.0 || ^10.0.0", @@ -6786,13 +6681,13 @@ } }, "node_modules/@nestjs/common": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.1.3.tgz", - "integrity": "sha512-xSyXBwgcmiFwQqek1Urw/AL3pRPq9bp/tpgfTxmnJg3gP6XNUbx1fDr0de50irXgZYzFKfVFo9ptC3b2du5YKA==", + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.4.15.tgz", + "integrity": "sha512-vaLg1ZgwhG29BuLDxPA9OAcIlgqzp9/N8iG0wGapyUNTf4IY4O6zAHgN6QalwLhFxq7nOI021vdRojR1oF3bqg==", "license": "MIT", "dependencies": { "iterare": "1.2.1", - "tslib": "2.6.1", + "tslib": "2.8.1", "uid": "2.0.2" }, "funding": { @@ -6802,7 +6697,7 @@ "peerDependencies": { "class-transformer": "*", "class-validator": "*", - "reflect-metadata": "^0.1.12", + "reflect-metadata": "^0.1.12 || ^0.2.0", "rxjs": "^7.1.0" }, "peerDependenciesMeta": { @@ -6814,61 +6709,45 @@ } } }, - "node_modules/@nestjs/common/node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "license": "0BSD" - }, "node_modules/@nestjs/config": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.0.0.tgz", - "integrity": "sha512-fzASk1Uv6AjdE6uA1na8zpqRCXAhRpcfgpCVv3SAKlgJ3VR3bEjcI4G17WHLgLBsmPzI1ofdkSI451WLD1F1Rw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.3.0.tgz", + "integrity": "sha512-pdGTp8m9d0ZCrjTpjkUbZx6gyf2IKf+7zlkrPNMsJzYZ4bFRRTpXrnj+556/5uiI6AfL5mMrJc2u7dB6bvM+VA==", "license": "MIT", "dependencies": { - "dotenv": "16.1.4", + "dotenv": "16.4.5", "dotenv-expand": "10.0.0", - "lodash": "4.17.21", - "uuid": "9.0.0" + "lodash": "4.17.21" }, "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "reflect-metadata": "^0.1.13" + "rxjs": "^7.1.0" } }, "node_modules/@nestjs/config/node_modules/dotenv": { - "version": "16.1.4", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.1.4.tgz", - "integrity": "sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "license": "BSD-2-Clause", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/@nestjs/config/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "url": "https://dotenvx.com" } }, "node_modules/@nestjs/core": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.1.3.tgz", - "integrity": "sha512-VzK54TuacC3Vmq3b5xTyMVTlDNJeKbjpKfV9fNqm4TbIBm8ZPo3FC0osJAbAK4XwbVvv2Flq1yA3CutasupVjw==", + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.4.15.tgz", + "integrity": "sha512-UBejmdiYwaH6fTsz2QFBlC1cJHM+3UDeLZN+CiP9I1fRv2KlBZsmozGLbV5eS1JAVWJB4T5N5yQ0gjN8ZvcS2w==", "hasInstallScript": true, "license": "MIT", "dependencies": { "@nuxtjs/opencollective": "0.3.2", "fast-safe-stringify": "2.1.1", "iterare": "1.2.1", - "path-to-regexp": "3.2.0", - "tslib": "2.6.1", + "path-to-regexp": "3.3.0", + "tslib": "2.8.1", "uid": "2.0.2" }, "funding": { @@ -6880,7 +6759,7 @@ "@nestjs/microservices": "^10.0.0", "@nestjs/platform-express": "^10.0.0", "@nestjs/websockets": "^10.0.0", - "reflect-metadata": "^0.1.12", + "reflect-metadata": "^0.1.12 || ^0.2.0", "rxjs": "^7.1.0" }, "peerDependenciesMeta": { @@ -6896,21 +6775,15 @@ } }, "node_modules/@nestjs/core/node_modules/path-to-regexp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", - "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", "license": "MIT" }, - "node_modules/@nestjs/core/node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "license": "0BSD" - }, "node_modules/@nestjs/event-emitter": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nestjs/event-emitter/-/event-emitter-2.0.4.tgz", - "integrity": "sha512-quMiw8yOwoSul0pp3mOonGz8EyXWHSBTqBy8B0TbYYgpnG1Ix2wGUnuTksLWaaBiiOTDhciaZ41Y5fJZsSJE1Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@nestjs/event-emitter/-/event-emitter-2.1.1.tgz", + "integrity": "sha512-6L6fBOZTyfFlL7Ih/JDdqlCzZeCW0RjCX28wnzGyg/ncv5F/EOeT1dfopQr1loBRQ3LTgu8OWM7n4zLN4xigsg==", "license": "MIT", "dependencies": { "eventemitter2": "6.4.9" @@ -6921,13 +6794,13 @@ } }, "node_modules/@nestjs/jwt": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.1.0.tgz", - "integrity": "sha512-iLwCGS25ybUxGS7i5j/Mwuyzvp/WxJftHlm8aLEBv5GV92apz6L1QVjxLdZrqXbzo++C8gdJauhzil8qitY+6w==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.2.0.tgz", + "integrity": "sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g==", "license": "MIT", "dependencies": { - "@types/jsonwebtoken": "9.0.2", - "jsonwebtoken": "9.0.0" + "@types/jsonwebtoken": "9.0.5", + "jsonwebtoken": "9.0.2" }, "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0" @@ -6944,16 +6817,16 @@ } }, "node_modules/@nestjs/platform-express": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.1.3.tgz", - "integrity": "sha512-RSf7ooCrxiWJlWl3CLfpaYmAf3U0tRsN7pJakujWdvzVJU2EzVZTLcy1MtnSg/HBm9/Rvg98VI5QI6oOhOpt+A==", + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.4.15.tgz", + "integrity": "sha512-63ZZPkXHjoDyO7ahGOVcybZCRa7/Scp6mObQKjcX/fTEq1YJeU75ELvMsuQgc8U2opMGOBD7GVuc4DV0oeDHoA==", "license": "MIT", "dependencies": { - "body-parser": "1.20.2", + "body-parser": "1.20.3", "cors": "2.8.5", - "express": "4.18.2", + "express": "4.21.2", "multer": "1.4.4-lts.1", - "tslib": "2.6.1" + "tslib": "2.8.1" }, "funding": { "type": "opencollective", @@ -6964,209 +6837,44 @@ "@nestjs/core": "^10.0.0" } }, - "node_modules/@nestjs/platform-express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@nestjs/platform-express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@nestjs/platform-express/node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.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/@nestjs/platform-express/node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/@nestjs/platform-express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@nestjs/platform-express/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@nestjs/platform-express/node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "license": "MIT" - }, - "node_modules/@nestjs/platform-express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/@nestjs/platform-express/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==", - "license": "MIT" - }, - "node_modules/@nestjs/platform-express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@nestjs/platform-express/node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/@nestjs/platform-express/node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "license": "0BSD" - }, "node_modules/@nestjs/schedule": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-3.0.2.tgz", - "integrity": "sha512-INhpzkyquosLbVrXx4v+rfAnomwBTgKQvs7e9BZ2LSZdWQOqCQD2PmvWDiu8c4wdJIH6wcWQh98w5KxIcKuVBA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-4.1.2.tgz", + "integrity": "sha512-hCTQ1lNjIA5EHxeu8VvQu2Ed2DBLS1GSC6uKPYlBiQe6LL9a7zfE9iVSK+zuK8E2odsApteEBmfAQchc8Hx0Gg==", "license": "MIT", "dependencies": { - "cron": "2.4.0", - "uuid": "9.0.0" + "cron": "3.2.1", + "uuid": "11.0.3" }, "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0", - "reflect-metadata": "^0.1.12" + "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0" } }, "node_modules/@nestjs/schedule/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", + "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/@nestjs/schematics": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.0.1.tgz", - "integrity": "sha512-buxpYtSwOmWyf0nUJWJCkCkYITwbOfIEKHTnGS7sDbcfaajrOFXb5pPAGD2E1CUb3C1+NkQIURPKzs0IouZTQg==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.2.3.tgz", + "integrity": "sha512-4e8gxaCk7DhBxVUly2PjYL4xC2ifDFexCqq1/u4TtivLGXotVk0wHdYuPYe1tHTHuR1lsOkRbfOCpkdTnigLVg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "comment-json": "4.2.3", - "jsonc-parser": "3.2.0", + "@angular-devkit/core": "17.3.11", + "@angular-devkit/schematics": "17.3.11", + "comment-json": "4.2.5", + "jsonc-parser": "3.3.1", "pluralize": "8.0.0" }, "peerDependencies": { @@ -7174,20 +6882,21 @@ } }, "node_modules/@nestjs/schematics/node_modules/@angular-devkit/core": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", - "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.11.tgz", + "integrity": "sha512-vTNDYNsLIWpYk2I969LMQFH29GTsLzxNk/0cLw5q56ARF0v5sIWfHYwGTS88jdDqIpuuettcSczbxeA7EuAmqQ==", "dev": true, "license": "MIT", "dependencies": { "ajv": "8.12.0", "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", "rxjs": "7.8.1", "source-map": "0.7.4" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -7200,25 +6909,39 @@ } } }, + "node_modules/@nestjs/schematics/node_modules/@angular-devkit/core/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true, + "license": "MIT" + }, "node_modules/@nestjs/schematics/node_modules/@angular-devkit/schematics": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", - "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.11.tgz", + "integrity": "sha512-I5wviiIqiFwar9Pdk30Lujk8FczEEc18i22A5c6Z9lbmhPQdTroDnEQdsfXjy404wPe8H62s0I15o4pmMGfTYQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "16.1.0", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", + "@angular-devkit/core": "17.3.11", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.8", "ora": "5.4.1", "rxjs": "7.8.1" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, + "node_modules/@nestjs/schematics/node_modules/@angular-devkit/schematics/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true, + "license": "MIT" + }, "node_modules/@nestjs/schematics/node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -7278,16 +7001,34 @@ "node": ">= 6" } }, + "node_modules/@nestjs/schematics/node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nestjs/schematics/node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@nestjs/schematics/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -7308,6 +7049,21 @@ "node": ">=8.10.0" } }, + "node_modules/@nestjs/schematics/node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@nestjs/schematics/node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", @@ -7329,15 +7085,15 @@ } }, "node_modules/@nestjs/serve-static": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/serve-static/-/serve-static-4.0.0.tgz", - "integrity": "sha512-8cTrNV2ngdHIjiLNsXePnw0+KY1ThrZGz/WeyAG5gIvmZNDbnZBOrPoYlKL+MOzlXlQStxR5jKLYmn+nJeoncQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@nestjs/serve-static/-/serve-static-4.0.2.tgz", + "integrity": "sha512-cT0vdWN5ar7jDI2NKbhf4LcwJzU4vS5sVpMkVrHuyLcltbrz6JdGi1TfIMMatP2pNiq5Ie/uUdPSFDVaZX/URQ==", "license": "MIT", "dependencies": { "path-to-regexp": "0.2.5" }, "peerDependencies": { - "@fastify/static": "^6.5.0", + "@fastify/static": "^6.5.0 || ^7.0.0", "@nestjs/common": "^9.0.0 || ^10.0.0", "@nestjs/core": "^9.0.0 || ^10.0.0", "express": "^4.18.1", @@ -7362,13 +7118,13 @@ "license": "MIT" }, "node_modules/@nestjs/testing": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.1.3.tgz", - "integrity": "sha512-zMrO9xLPYnKtC6q1diWubuMshIp0v2aGHa58jcIfZaAlJlU/6RKsgCOiFQ42aFzxUEBRWF0LBF0aiwt04LKMyQ==", + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.4.15.tgz", + "integrity": "sha512-eGlWESkACMKti+iZk1hs6FUY/UqObmMaa8HAN9JLnaYkoLf1Jeh+EuHlGnfqo/Rq77oznNLIyaA3PFjrFDlNUg==", "dev": true, "license": "MIT", "dependencies": { - "tslib": "2.6.1" + "tslib": "2.8.1" }, "funding": { "type": "opencollective", @@ -7389,13 +7145,6 @@ } } }, - "node_modules/@nestjs/testing/node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -7730,13 +7479,6 @@ "@napi-rs/nice": "^1.0.1" } }, - "node_modules/@nx/angular/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nx/angular/node_modules/webpack-merge": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", @@ -7775,13 +7517,6 @@ } } }, - "node_modules/@nx/cypress/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nx/devkit": { "version": "20.3.0", "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.3.0.tgz", @@ -7818,13 +7553,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nx/devkit/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nx/eslint": { "version": "20.3.0", "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-20.3.0.tgz", @@ -7889,20 +7617,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/eslint-plugin/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@nx/eslint/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nx/jest": { "version": "20.3.0", "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-20.3.0.tgz", @@ -7943,13 +7657,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nx/jest/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nx/js": { "version": "20.3.0", "resolved": "https://registry.npmjs.org/@nx/js/-/js-20.3.0.tgz", @@ -8159,13 +7866,6 @@ } } }, - "node_modules/@nx/js/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nx/js/node_modules/validate-npm-package-name": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", @@ -8361,13 +8061,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/@nx/module-federation/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nx/module-federation/node_modules/webpack": { "version": "5.88.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.0.tgz", @@ -8602,13 +8295,6 @@ "node": ">= 8" } }, - "node_modules/@nx/nest/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nx/node": { "version": "20.3.0", "resolved": "https://registry.npmjs.org/@nx/node/-/node-20.3.0.tgz", @@ -8623,13 +8309,6 @@ "tslib": "^2.3.0" } }, - "node_modules/@nx/node/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nx/nx-darwin-arm64": { "version": "20.3.0", "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.3.0.tgz", @@ -8663,13 +8342,6 @@ "tslib": "^2.3.0" } }, - "node_modules/@nx/storybook/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nx/web": { "version": "20.3.0", "resolved": "https://registry.npmjs.org/@nx/web/-/web-20.3.0.tgz", @@ -8685,13 +8357,6 @@ "tslib": "^2.3.0" } }, - "node_modules/@nx/web/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nx/webpack": { "version": "20.3.0", "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-20.3.0.tgz", @@ -8917,13 +8582,6 @@ "node": ">=10.13.0" } }, - "node_modules/@nx/webpack/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@nx/webpack/node_modules/webpack-dev-server": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.0.tgz", @@ -9021,13 +8679,6 @@ "yargs-parser": "21.1.1" } }, - "node_modules/@nx/workspace/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@parcel/watcher": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz", @@ -9095,12 +8746,6 @@ "tslib": "^2.8.1" } }, - "node_modules/@peculiar/asn1-android/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@peculiar/asn1-ecc": { "version": "2.3.15", "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.3.15.tgz", @@ -9113,12 +8758,6 @@ "tslib": "^2.8.1" } }, - "node_modules/@peculiar/asn1-ecc/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@peculiar/asn1-rsa": { "version": "2.3.15", "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.3.15.tgz", @@ -9131,12 +8770,6 @@ "tslib": "^2.8.1" } }, - "node_modules/@peculiar/asn1-rsa/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@peculiar/asn1-schema": { "version": "2.3.15", "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.15.tgz", @@ -9148,12 +8781,6 @@ "tslib": "^2.8.1" } }, - "node_modules/@peculiar/asn1-schema/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@peculiar/asn1-x509": { "version": "2.3.15", "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.3.15.tgz", @@ -9166,12 +8793,6 @@ "tslib": "^2.8.1" } }, - "node_modules/@peculiar/asn1-x509/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@peculiar/json-schema": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", @@ -9202,13 +8823,6 @@ "node": ">=10.12.0" } }, - "node_modules/@peculiar/webcrypto/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true - }, "node_modules/@phenomnomnominal/tsquery": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz", @@ -10730,12 +10344,6 @@ "tslib": "^2.8.0" } }, - "node_modules/@swc/helpers/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/@testing-library/dom": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", @@ -11107,13 +10715,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@tybys/wasm-util/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", @@ -11582,30 +11183,15 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jsonwebtoken/node_modules/@types/node": { - "version": "22.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", - "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", + "node_modules/@types/jsonwebtoken": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", + "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "@types/node": "*" } }, - "node_modules/@types/jsonwebtoken/node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "license": "MIT" - }, "node_modules/@types/lodash": { "version": "4.17.7", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz", @@ -11613,6 +11199,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/luxon": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", + "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", + "license": "MIT" + }, "node_modules/@types/mdast": { "version": "3.0.15", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", @@ -12540,13 +12132,6 @@ "node": ">=18.12.0" } }, - "node_modules/@yarnpkg/parsers/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@zkochan/js-yaml": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", @@ -13075,12 +12660,6 @@ "node": ">=12.0.0" } }, - "node_modules/asn1js/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -13663,9 +13242,9 @@ "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -13676,7 +13255,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -13915,16 +13494,16 @@ } }, "node_modules/bull": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/bull/-/bull-4.16.2.tgz", - "integrity": "sha512-VCy33UdPGiIoZHDTrslGXKXWxcIUHNH5Z82pihr8HicbIfAH4SHug1HxlwKEbibVv85hq8rJ9tKAW/cuxv2T0A==", + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/bull/-/bull-4.16.4.tgz", + "integrity": "sha512-CF+nGsJyfsCC9MJL8hFxqXzbwq+jGBXhaz1j15G+5N/XtKIPFUUy5O1mfWWKbKunfuH/x+UV4NYRQDHSkjCOgA==", "license": "MIT", "dependencies": { "cron-parser": "^4.2.1", "get-port": "^5.1.1", "ioredis": "^5.3.2", "lodash": "^4.17.21", - "msgpackr": "^1.10.1", + "msgpackr": "^1.11.2", "semver": "^7.5.2", "uuid": "^8.3.0" }, @@ -14176,13 +13755,6 @@ "tslib": "^2.0.3" } }, - "node_modules/camel-case/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "devOptional": true, - "license": "0BSD" - }, "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -14930,9 +14502,9 @@ "license": "MIT" }, "node_modules/comment-json": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", - "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", "dev": true, "license": "MIT", "dependencies": { @@ -15372,12 +14944,13 @@ "license": "MIT" }, "node_modules/cron": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/cron/-/cron-2.4.0.tgz", - "integrity": "sha512-Cx77ic1TyIAtUggr0oAhtS8MLzPBUqGNIvdDM7jE3oFIxfe8LXWI9q3iQN/H2CebAiMir53LQKWOhEKnzkJTAQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/cron/-/cron-3.2.1.tgz", + "integrity": "sha512-w2n5l49GMmmkBFEsH9FIDhjZ1n1QgTMOCMGuQtOXs5veNiosZmso6bQGuqOJSYAXXrG84WQFVneNk+Yt0Ua9iw==", "license": "MIT", "dependencies": { - "luxon": "^3.2.1" + "@types/luxon": "~3.4.0", + "luxon": "~3.5.0" } }, "node_modules/cron-parser": { @@ -16930,13 +16503,6 @@ "tslib": "^2.0.3" } }, - "node_modules/dot-case/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "devOptional": true, - "license": "0BSD" - }, "node_modules/dotenv": { "version": "16.4.7", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", @@ -17091,6 +16657,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -18255,30 +17822,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -18297,39 +17840,12 @@ "node": ">= 0.8" } }, - "node_modules/express/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/express/node_modules/send": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", @@ -22808,15 +22324,21 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "license": "MIT", "dependencies": { "jws": "^3.2.2", - "lodash": "^4.17.21", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "engines": { "node": ">=12", @@ -23106,12 +22628,6 @@ "source-map": "~0.6.0" } }, - "node_modules/less/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -24138,13 +23654,6 @@ "tslib": "^2.0.3" } }, - "node_modules/lower-case/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "devOptional": true, - "license": "0BSD" - }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -25403,12 +24912,6 @@ "@angular/core": "^19.0.0" } }, - "node_modules/ngx-device-detector/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/ngx-markdown": { "version": "19.0.0", "resolved": "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-19.0.0.tgz", @@ -25433,12 +24936,6 @@ "zone.js": "~0.15.0" } }, - "node_modules/ngx-markdown/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/ngx-skeleton-loader": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/ngx-skeleton-loader/-/ngx-skeleton-loader-9.0.0.tgz", @@ -25452,12 +24949,6 @@ "@angular/core": ">=16.0.0" } }, - "node_modules/ngx-skeleton-loader/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/ngx-stripe": { "version": "19.0.0", "resolved": "https://registry.npmjs.org/ngx-stripe/-/ngx-stripe-19.0.0.tgz", @@ -25472,12 +24963,6 @@ "@stripe/stripe-js": ">=5.0.0 <6.0.0" } }, - "node_modules/ngx-stripe/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -25489,13 +24974,6 @@ "tslib": "^2.0.3" } }, - "node_modules/no-case/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "devOptional": true, - "license": "0BSD" - }, "node_modules/node-abort-controller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", @@ -26092,13 +25570,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/nx/node_modules/yaml": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", @@ -26645,13 +26116,6 @@ "tslib": "^2.0.3" } }, - "node_modules/param-case/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "devOptional": true, - "license": "0BSD" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -26790,13 +26254,6 @@ "tslib": "^2.0.3" } }, - "node_modules/pascal-case/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "devOptional": true, - "license": "0BSD" - }, "node_modules/passport": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz", @@ -26847,34 +26304,6 @@ "passport-strategy": "^1.0.0" } }, - "node_modules/passport-jwt/node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "license": "MIT", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/passport-jwt/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "node_modules/passport-oauth2": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.8.0.tgz", @@ -28062,12 +27491,6 @@ "tslib": "^2.8.1" } }, - "node_modules/pvtsutils/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/pvutils": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", @@ -28078,12 +27501,12 @@ } }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -28977,12 +28400,6 @@ "tslib": "^2.1.0" } }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/sade": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", @@ -29193,51 +28610,6 @@ "semver": "bin/semver" } }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -31102,9 +30474,9 @@ } }, "node_modules/tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/tslint": { @@ -32557,13 +31929,6 @@ "tslib": "^2.7.0" } }, - "node_modules/webcrypto-core/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true - }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -32822,12 +32187,6 @@ "tslib": "2" } }, - "node_modules/webpack-dev-middleware/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/webpack-dev-server": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.1.0.tgz", diff --git a/package.json b/package.json index bb9bcb1a8..c75b630c8 100644 --- a/package.json +++ b/package.json @@ -75,17 +75,17 @@ "@dfinity/principal": "0.15.7", "@dinero.js/currencies": "2.0.0-alpha.8", "@internationalized/number": "3.6.0", - "@nestjs/bull": "10.0.1", - "@nestjs/cache-manager": "2.2.2", - "@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/bull": "10.2.3", + "@nestjs/cache-manager": "2.3.0", + "@nestjs/common": "10.4.15", + "@nestjs/config": "3.3.0", + "@nestjs/core": "10.4.15", + "@nestjs/event-emitter": "2.1.1", + "@nestjs/jwt": "10.2.0", "@nestjs/passport": "10.0.3", - "@nestjs/platform-express": "10.1.3", - "@nestjs/schedule": "3.0.2", - "@nestjs/serve-static": "4.0.0", + "@nestjs/platform-express": "10.4.15", + "@nestjs/schedule": "4.1.2", + "@nestjs/serve-static": "4.0.2", "@prisma/client": "6.2.1", "@simplewebauthn/browser": "9.0.1", "@simplewebauthn/server": "9.0.3", @@ -93,7 +93,7 @@ "alphavantage": "2.2.0", "big.js": "6.2.2", "bootstrap": "4.6.0", - "bull": "4.16.2", + "bull": "4.16.4", "cache-manager": "5.7.6", "cache-manager-redis-yet": "5.1.4", "chart.js": "4.4.7", @@ -152,8 +152,8 @@ "@angular/pwa": "19.0.6", "@eslint/eslintrc": "3.2.0", "@eslint/js": "9.18.0", - "@nestjs/schematics": "10.0.1", - "@nestjs/testing": "10.1.3", + "@nestjs/schematics": "10.2.3", + "@nestjs/testing": "10.4.15", "@nx/angular": "20.3.0", "@nx/cypress": "20.3.0", "@nx/eslint-plugin": "20.3.0", @@ -205,7 +205,7 @@ "storybook": "8.4.7", "ts-jest": "29.1.0", "ts-node": "10.9.2", - "tslib": "2.6.0", + "tslib": "2.8.1", "typescript": "5.6.3", "webpack-bundle-analyzer": "4.10.2" }, From 2e4ad7b0eadccb93bc4d026f82f6711e82638795 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 19 Jan 2025 10:15:34 +0100 Subject: [PATCH 09/30] Feature/move language localization for Polski from experimental to general availability (#4200) * Move language localization for Polski from experimental to general availability * Update changelog --- CHANGELOG.md | 1 + apps/api/src/assets/sitemap.xml | 10 ++++------ .../user-account-settings/user-account-settings.html | 10 ++++------ apps/client/src/app/pages/features/features-page.html | 7 +++---- 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 304478425..cced37c04 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 +- Moved the language localization for Polski (`pl`) from experimental to general availability - Extended the _Financial Modeling Prep_ service - Switched to _ESLint_’s flat config format - Upgraded `chart.js` from version `4.2.0` to `4.4.7` diff --git a/apps/api/src/assets/sitemap.xml b/apps/api/src/assets/sitemap.xml index 9fd989f4e..a422ff31a 100644 --- a/apps/api/src/assets/sitemap.xml +++ b/apps/api/src/assets/sitemap.xml @@ -504,12 +504,10 @@ https://ghostfol.io/pl/o-ghostfolio ${currentDate}T00:00:00+00:00 - + + https://ghostfol.io/pl/open + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/pl/rynki ${currentDate}T00:00:00+00:00 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 b0b8c227e..8bd2efd1f 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 @@ -100,12 +100,10 @@ >Nederlands (Community) - @if (user?.settings?.isExperimentalFeatures) { - Polski (Community) - } + Polski (Community) Português (Community)Multi-Language

Use Ghostfolio in multiple languages: English, - + - Dutch, French, German, Italian, - - Portuguese, Spanish and Turkish + Dutch, French, German, Italian, Polish, Portuguese, Spanish + and Turkish are currently supported.

From 7481296e768ccfe16e1008b52533f0f250f6a3ad Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 19 Jan 2025 10:27:11 +0100 Subject: [PATCH 10/30] Feature/upgrade nx to version 20.3.2 (#4208) * Upgrade nx to version 20.3.2 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 989 ++++++++++++++++++++++++++-------------------- package.json | 24 +- 3 files changed, 579 insertions(+), 435 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cced37c04..e7ceee5cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Upgraded `chartjs-plugin-annotation` from version `2.1.2` to `3.1.0` - Upgraded `eslint` dependencies - Upgraded `nestjs` from version `10.1.3` to `10.4.15` +- Upgraded `Nx` from version `20.3.0` to `20.3.2` - Upgraded `uuid` from version `11.0.2` to `11.0.5` ## 2.134.0 - 2025-01-15 diff --git a/package-lock.json b/package-lock.json index 0190bfeaf..a1d2e16da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -108,17 +108,17 @@ "@eslint/js": "9.18.0", "@nestjs/schematics": "10.2.3", "@nestjs/testing": "10.4.15", - "@nx/angular": "20.3.0", - "@nx/cypress": "20.3.0", - "@nx/eslint-plugin": "20.3.0", - "@nx/jest": "20.3.0", - "@nx/js": "20.3.0", - "@nx/module-federation": "20.3.0", - "@nx/nest": "20.3.0", - "@nx/node": "20.3.0", - "@nx/storybook": "20.3.0", - "@nx/web": "20.3.0", - "@nx/workspace": "20.3.0", + "@nx/angular": "20.3.2", + "@nx/cypress": "20.3.2", + "@nx/eslint-plugin": "20.3.2", + "@nx/jest": "20.3.2", + "@nx/js": "20.3.2", + "@nx/module-federation": "20.3.2", + "@nx/nest": "20.3.2", + "@nx/node": "20.3.2", + "@nx/storybook": "20.3.2", + "@nx/web": "20.3.2", + "@nx/workspace": "20.3.2", "@schematics/angular": "19.0.6", "@simplewebauthn/types": "9.0.1", "@storybook/addon-essentials": "8.4.7", @@ -148,7 +148,7 @@ "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jest-preset-angular": "14.4.2", - "nx": "20.3.0", + "nx": "20.3.2", "prettier": "3.4.2", "prettier-plugin-organize-attributes": "1.0.0", "prisma": "6.2.1", @@ -6345,26 +6345,26 @@ } }, "node_modules/@module-federation/bridge-react-webpack-plugin": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.7.6.tgz", - "integrity": "sha512-eD1JZDQ+h5WLdA58MmAE1DzLwvFaGJeeam3Tswc/sEUb4QGT86X4Fme+dMTBRYRoAq/tRYql3DlVTFhdmrUVzg==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.8.9.tgz", + "integrity": "sha512-gM5fnWvFfTEfh5UjSmNod1H/np/pUUjvJnnN31ucKcZ21mL6wJo0A+Vfj8a5gv34S+1n5lWR1b6eVv9CofwgDQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/sdk": "0.7.6", + "@module-federation/sdk": "0.8.9", "@types/semver": "7.5.8", "semver": "7.6.3" } }, "node_modules/@module-federation/data-prefetch": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-0.7.6.tgz", - "integrity": "sha512-AMpfnuIAK/Y5M682BUsnc13ARCEKhEvb0tXF4S+l7jfL08oE9gyo+G/nk0LIzZBO2mLDz5g2AydAERanM6gswQ==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-0.8.9.tgz", + "integrity": "sha512-doUzJ5uuLPrN5e/NMvKuyUE/lqiZFgGzFITwBF90/KKqOq7R2ZWh43R4RJgkUYfs/F119AYXZ9jxrSphIh+cjg==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.7.6", - "@module-federation/sdk": "0.7.6", + "@module-federation/runtime": "0.8.9", + "@module-federation/sdk": "0.8.9", "fs-extra": "9.1.0" }, "peerDependencies": { @@ -6373,16 +6373,16 @@ } }, "node_modules/@module-federation/dts-plugin": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.7.6.tgz", - "integrity": "sha512-K8T8+Ip+fCQkTOxAQbAW47drphN36+WcvcOusn/fsIT+1exdhyvqxSCj8V7MLCtjA9kGDi0jHIGN6MN4p2cV0Q==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.8.9.tgz", + "integrity": "sha512-Q40yqdQvTV8QRoegjUquTejhLl2gZoPv623hc8MWmGuP2vXLBIJJ9iV849LkFLeE8xaUgtwmn2uCQeBh2aJNjg==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.7.6", - "@module-federation/managers": "0.7.6", - "@module-federation/sdk": "0.7.6", - "@module-federation/third-party-dts-extractor": "0.7.6", + "@module-federation/error-codes": "0.8.9", + "@module-federation/managers": "0.8.9", + "@module-federation/sdk": "0.8.9", + "@module-federation/third-party-dts-extractor": "0.8.9", "adm-zip": "^0.5.10", "ansi-colors": "^4.1.3", "axios": "^1.7.4", @@ -6420,35 +6420,82 @@ "node": ">=8" } }, + "node_modules/@module-federation/enhanced": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.8.9.tgz", + "integrity": "sha512-feZUhznCyFkyivWNSFPN+FHMZmyrxlKBhWW8ldWsp/LlKIzWI75vMLimpiydBWnWTZgnOhQDBZGZVxSlfnfKHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/bridge-react-webpack-plugin": "0.8.9", + "@module-federation/data-prefetch": "0.8.9", + "@module-federation/dts-plugin": "0.8.9", + "@module-federation/error-codes": "0.8.9", + "@module-federation/inject-external-runtime-core-plugin": "0.8.9", + "@module-federation/managers": "0.8.9", + "@module-federation/manifest": "0.8.9", + "@module-federation/rspack": "0.8.9", + "@module-federation/runtime-tools": "0.8.9", + "@module-federation/sdk": "0.8.9", + "btoa": "^1.2.1", + "upath": "2.0.1" + }, + "peerDependencies": { + "typescript": "^4.9.0 || ^5.0.0", + "vue-tsc": ">=1.0.24", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue-tsc": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, "node_modules/@module-federation/error-codes": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.7.6.tgz", - "integrity": "sha512-XVzX/sRFj1h5JvOOVMoFppxq0t1t3o/AlEICHgWX+dybIwJgz9g4gihZOWVZfz5/xsKGcUwdH5X7Z2nkuYhJEw==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.8.9.tgz", + "integrity": "sha512-yUA3GZjOy8Ll6l193faXir2veexDaUiLdmptbzC9tIee/iSQiSwIlibdTafCfqaJ62cLZaytOUdmAFAKLv8QQw==", "dev": true, "license": "MIT" }, + "node_modules/@module-federation/inject-external-runtime-core-plugin": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.8.9.tgz", + "integrity": "sha512-F3s/3Iny20c0Y0CaXgOZdgl7PzgXj6ftCiT5FO6QWmyhzfl2R0o3KFuv54BmwtoimSFky1ShuC/jPluz4EGG1g==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@module-federation/runtime-tools": "0.8.9" + } + }, "node_modules/@module-federation/managers": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.7.6.tgz", - "integrity": "sha512-NW0LJ6TL13oN004D9e50EalcGZyTYHHgyaeKOc90Omb/HMeHxjyhHx7wl1TLRwVN2E5Rk+IO0JrwgrdlNMfAzg==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.8.9.tgz", + "integrity": "sha512-Fb28sa2iAqwSSSgiPBoL5Kp0RB9ZKJvdwLAEwZBV2c2LyZUqJCdTjmYuB5Q2sWB9wsudd/ijV6WWNK/nVoJxdA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/sdk": "0.7.6", + "@module-federation/sdk": "0.8.9", "find-pkg": "2.0.0", "fs-extra": "9.1.0" } }, "node_modules/@module-federation/manifest": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.7.6.tgz", - "integrity": "sha512-xBrFwLjDMUjKRnp+P4X29ZNyhgXSsp+SfrBxVsKJpEESOHalDoNClbo6gXvZAvkBZyo9sY3SJhAwduDwNkg04w==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.8.9.tgz", + "integrity": "sha512-48jIv50l0tTx+CVzs2JKMlTO0mcUvFRDxqO79nJaL1DLfpRQoCRQjCA8sXUp5PPIyJ8MHQqkHK/dnaal4NlR/A==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/dts-plugin": "0.7.6", - "@module-federation/managers": "0.7.6", - "@module-federation/sdk": "0.7.6", + "@module-federation/dts-plugin": "0.8.9", + "@module-federation/managers": "0.8.9", + "@module-federation/sdk": "0.8.9", "chalk": "3.0.0", "find-pkg": "2.0.0" } @@ -6467,21 +6514,55 @@ "node": ">=8" } }, + "node_modules/@module-federation/node": { + "version": "2.6.22", + "resolved": "https://registry.npmjs.org/@module-federation/node/-/node-2.6.22.tgz", + "integrity": "sha512-KlBJXakBO0KMCLTv7622aQNQk3JLfUqXJtd28nUt7xJNV9OZclHvRmKS83zHGEV/6hBKuLtYlP/+S4LMoMKiOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/enhanced": "0.8.9", + "@module-federation/runtime": "0.8.9", + "@module-federation/sdk": "0.8.9", + "@module-federation/utilities": "3.1.40", + "btoa": "1.2.1", + "encoding": "^0.1.13", + "node-fetch": "2.7.0" + }, + "peerDependencies": { + "react": "^16||^17||^18", + "react-dom": "^16||^17||^18", + "webpack": "^5.40.0" + }, + "peerDependenciesMeta": { + "next": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/@module-federation/rspack": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.7.6.tgz", - "integrity": "sha512-alfX85C+2AQLXGrtpa08ImwhHIGwFIkJ/6i/XhxpYL5iFu0mC0xRIJPJUw0tiBWdFpP4p+Ykij3hP3FqfvaiKg==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.8.9.tgz", + "integrity": "sha512-wuHRx+aUYhsrAQzU5yKQksaOJ8pwhuQJDl8I86xmzkEsnxcWsZcn49xIR4t7v1HcYAqjBXLNXSoQwkIMH9zu2w==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.7.6", - "@module-federation/dts-plugin": "0.7.6", - "@module-federation/managers": "0.7.6", - "@module-federation/manifest": "0.7.6", - "@module-federation/runtime-tools": "0.7.6", - "@module-federation/sdk": "0.7.6" + "@module-federation/bridge-react-webpack-plugin": "0.8.9", + "@module-federation/dts-plugin": "0.8.9", + "@module-federation/inject-external-runtime-core-plugin": "0.8.9", + "@module-federation/managers": "0.8.9", + "@module-federation/manifest": "0.8.9", + "@module-federation/runtime-tools": "0.8.9", + "@module-federation/sdk": "0.8.9" }, "peerDependencies": { + "@rspack/core": ">=0.7", "typescript": "^4.9.0 || ^5.0.0", "vue-tsc": ">=1.0.24" }, @@ -6495,41 +6576,53 @@ } }, "node_modules/@module-federation/runtime": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.7.6.tgz", - "integrity": "sha512-TEEDbGwaohZ2dMa+Sk/Igq8XpcyfjqJfbL20mdAZeifSFVZYRSCaTd/xIXP7pEw8+5BaCMc4YfCf/XcjFAUrVA==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.8.9.tgz", + "integrity": "sha512-i+a+/hoT/c+EE52mT+gJrbA6DhL86PY9cd/dIv/oKpLz9i+yYBlG+RA+puc7YsUEO4irbFLvnIMq6AGDUKVzYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/error-codes": "0.8.9", + "@module-federation/runtime-core": "0.6.17", + "@module-federation/sdk": "0.8.9" + } + }, + "node_modules/@module-federation/runtime-core": { + "version": "0.6.17", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.6.17.tgz", + "integrity": "sha512-PXFN/TT9f64Un6NQYqH1Z0QLhpytW15jkZvTEOV8W7Ed319BECFI0Rv4xAsAGa8zJGFoaM/c7QOQfdFXtKj5Og==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.7.6", - "@module-federation/sdk": "0.7.6" + "@module-federation/error-codes": "0.8.9", + "@module-federation/sdk": "0.8.9" } }, "node_modules/@module-federation/runtime-tools": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.7.6.tgz", - "integrity": "sha512-SvokF6gn2sNrTEPG51H0LrowHnf3iNfznO2PzKpxAhZOBdb1pm0wJPwWSMHYrjMdDpjr7bzaqAywnkHdA6lqeQ==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.8.9.tgz", + "integrity": "sha512-xBUGx1oOZNuxXjPGdTMrLtAIDrbrN6jE2Mgb9w1qr2mQ4AW9b5TOlxbARBoX4q98xt9oFCGU6Q0eW5XJpsl8AQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.7.6", - "@module-federation/webpack-bundler-runtime": "0.7.6" + "@module-federation/runtime": "0.8.9", + "@module-federation/webpack-bundler-runtime": "0.8.9" } }, "node_modules/@module-federation/sdk": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.7.6.tgz", - "integrity": "sha512-MFE+RtsHnutZOCp2eKpa3A/yzZ8tOPmjX7QRdVnB2qqR9JA2SH3ZP5+cYq76tzFQZvU1BCWAQVNMvqGOW2yVZQ==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.8.9.tgz", + "integrity": "sha512-QJ60itWC/SPjqduT7wDiF8UGwVU/yJ/Sz+QbnoxB9b7gNLzvI//swAXTo9eOtKsCy/V2BMwjt0F3eOcfnaqllA==", "dev": true, "license": "MIT", "dependencies": { - "isomorphic-rslog": "0.0.6" + "isomorphic-rslog": "0.0.7" } }, "node_modules/@module-federation/third-party-dts-extractor": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.7.6.tgz", - "integrity": "sha512-JME76/rgr41AKXG6kUTQXdQJiMCypN3qHOgPv4VuIag10UdLo/0gdeN6PYronvYmvPOQMfYev80GcEwl4l531A==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.8.9.tgz", + "integrity": "sha512-53v6B5zfhGlAPpH0SrlJDp9B6kcOcZaUPi6J4L/7ie5F0YVe0vq/mJGOOzAStN9ggJjSrjBZLFT3gFmBYM3Z9A==", "dev": true, "license": "MIT", "dependencies": { @@ -6556,15 +6649,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/@module-federation/utilities": { + "version": "3.1.40", + "resolved": "https://registry.npmjs.org/@module-federation/utilities/-/utilities-3.1.40.tgz", + "integrity": "sha512-/Oa0jtNCEEfQhXIV0/H/pm+PEfYy4QUfCIcgTr5TJ1QB3OR1D+tBYRFGYYJaTeMRzS4PI4Rh1vv/egzQ9pbgSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/sdk": "0.8.9" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18", + "react-dom": "^16 || ^17 || ^18", + "webpack": "^5.40.0" + }, + "peerDependenciesMeta": { + "next": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/@module-federation/webpack-bundler-runtime": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.7.6.tgz", - "integrity": "sha512-kB9hQ0BfwNAcQWGskDEOxYP2z2bB/1ABXKr8MDomCFl2mbW3vvfYMQrb8UhJmJvE3rbGI/iXhJUdgBLNREnjUg==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.8.9.tgz", + "integrity": "sha512-DYLvVi4b2MUYu/B4g5wIC5SHxiODboKHkYGHYapOhCcqOchca/N16gtiAI8eSNjJPc+fgUXUGIyGiB18IlFEeQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.7.6", - "@module-federation/sdk": "0.7.6" + "@module-federation/runtime": "0.8.9", + "@module-federation/sdk": "0.8.9" } }, "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { @@ -7412,24 +7531,24 @@ } }, "node_modules/@nx/angular": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-20.3.0.tgz", - "integrity": "sha512-QdgHkOza4f3brmyepHoMvpMKFyPXTGvp5R4zImq0hkwX4UguZyKgSEQV5ldOPsDxe9HOAgypXZnGo/CfQAdhmQ==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-20.3.2.tgz", + "integrity": "sha512-8waa4ZSu94us116+7e/qnRBzF8FcwXx91NLbWCz2YBidfuJ54hbs/nPABfJv6zcoWVNW2/j+kD1AZK5fXlObRA==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "20.3.0", - "@nx/eslint": "20.3.0", - "@nx/js": "20.3.0", - "@nx/module-federation": "20.3.0", - "@nx/web": "20.3.0", - "@nx/webpack": "20.3.0", - "@nx/workspace": "20.3.0", + "@nx/devkit": "20.3.2", + "@nx/eslint": "20.3.2", + "@nx/js": "20.3.2", + "@nx/module-federation": "20.3.2", + "@nx/web": "20.3.2", + "@nx/webpack": "20.3.2", + "@nx/workspace": "20.3.2", "@phenomnomnominal/tsquery": "~5.0.1", "@typescript-eslint/type-utils": "^8.0.0", - "chalk": "^4.1.0", "magic-string": "~0.30.2", "minimatch": "9.0.3", + "picocolors": "^1.1.0", "piscina": "^4.4.0", "semver": "^7.5.3", "tslib": "^2.3.0", @@ -7495,15 +7614,15 @@ } }, "node_modules/@nx/cypress": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-20.3.0.tgz", - "integrity": "sha512-Fi4HOhz8JYPLrnmFDxgVK1lNTBb6ZZC0EiibFxqCeFdPOQFJx36VyzMNIdfGHI50TCBUsSzK5eWD/8NHSBuFUg==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-20.3.2.tgz", + "integrity": "sha512-rUPUGdZkt2XrlqEUJmbQkzXB741l+DD4foB8q/CDNaA99beE/TSalbiPdMe7dGvwfJWCQ7N7eoR7liHwvgwAIA==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "20.3.0", - "@nx/eslint": "20.3.0", - "@nx/js": "20.3.0", + "@nx/devkit": "20.3.2", + "@nx/eslint": "20.3.2", + "@nx/js": "20.3.2", "@phenomnomnominal/tsquery": "~5.0.1", "detect-port": "^1.5.1", "tslib": "^2.3.0" @@ -7518,9 +7637,9 @@ } }, "node_modules/@nx/devkit": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.3.0.tgz", - "integrity": "sha512-u9oRd2F33DLNWPbzpYGW7xuMEYUAOwO9DLP9nGYpxbZXy6Z4AdoKeqhN+KBTyg8+DyQGuKUSEXcWriDyLLgcHw==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.3.2.tgz", + "integrity": "sha512-VhbxEsSTCZlOVgjuQC+6HQmb9Oz9VoHUeo4001Pw6BFBcSXZUi5q37C/lxbAgQPnMKLkFcLva3WKZ+fOLwhGIg==", "dev": true, "license": "MIT", "dependencies": { @@ -7554,14 +7673,14 @@ } }, "node_modules/@nx/eslint": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-20.3.0.tgz", - "integrity": "sha512-QhApF0HAcMm0tc7kXna4XuFUuO3oroWvGmvzGqBSa3GyuXbAz1VJ1RFWYkyQzjAsltaBcMUFCA+ORUM+PN1sWA==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-20.3.2.tgz", + "integrity": "sha512-vWvMmJ4aU/CjqomTVLuMlmhxKj/Q2wlhu9tQhZlDexDGfGF4QMidrbb25Rqog9NSeeI5hhBp57TQjfDyEF8HhQ==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "20.3.0", - "@nx/js": "20.3.0", + "@nx/devkit": "20.3.2", + "@nx/js": "20.3.2", "semver": "^7.5.3", "tslib": "^2.3.0", "typescript": "~5.6.2" @@ -7577,14 +7696,14 @@ } }, "node_modules/@nx/eslint-plugin": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-20.3.0.tgz", - "integrity": "sha512-U9DvbR7quyfnWk8ZCJlwKbIInZ5gd4be93X5gii966vM81n3lbWLc7y4avU4r3732X2pnpFGJqBgP8ov8JE/fw==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-20.3.2.tgz", + "integrity": "sha512-m3gWjOY9Cn4lujMZITfxuD+T7iPf0MOqfiTU8gnlybGpqxOL2F6roHtVRX3aas2cKtSTY/Kk+fIalIJVSxfSoQ==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "20.3.0", - "@nx/js": "20.3.0", + "@nx/devkit": "20.3.2", + "@nx/js": "20.3.2", "@typescript-eslint/type-utils": "^8.0.0", "@typescript-eslint/utils": "^8.0.0", "chalk": "^4.1.0", @@ -7618,23 +7737,23 @@ } }, "node_modules/@nx/jest": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-20.3.0.tgz", - "integrity": "sha512-szkmlq8Zgx1J04yq34HfbC1jGrELVXcJTfo76SnFonL9crnbBsLS2mPrvCe431Zm9Xs1PYNvxZLeIbxf6bVXcQ==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-20.3.2.tgz", + "integrity": "sha512-YW+KVoQEZi1Otm1wBAu0Bf3uq1Kp7ighPW73e8bL0SQPTdp6Afdn/52HZfrOGvBjdHLrZ50N817IJLUpApJ82g==", "dev": true, "license": "MIT", "dependencies": { "@jest/reporters": "^29.4.1", "@jest/test-result": "^29.4.1", - "@nx/devkit": "20.3.0", - "@nx/js": "20.3.0", + "@nx/devkit": "20.3.2", + "@nx/js": "20.3.2", "@phenomnomnominal/tsquery": "~5.0.1", - "chalk": "^4.1.0", "identity-obj-proxy": "3.0.0", "jest-config": "^29.4.1", "jest-resolve": "^29.4.1", "jest-util": "^29.4.1", "minimatch": "9.0.3", + "picocolors": "^1.1.0", "resolve.exports": "2.0.3", "semver": "^7.5.3", "tslib": "^2.3.0", @@ -7658,9 +7777,9 @@ } }, "node_modules/@nx/js": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/js/-/js-20.3.0.tgz", - "integrity": "sha512-hnO1jzJUvO7+bBsC2uaUElpX9gpMiSA3wdt34V8nnPcIBWtdMrjKX7yRFSwZKimeNauesiX0uorTJf+z28R2bg==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/js/-/js-20.3.2.tgz", + "integrity": "sha512-t2mLCogVc/DWpkJ1SW4pFgeyWAmuy7EI4IPyShtF4s9mhqyIDfd29fGYsocuv84skX6y4JMOw3O+c+LXdQ9QWw==", "dev": true, "license": "MIT", "dependencies": { @@ -7671,8 +7790,8 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.22.5", "@babel/runtime": "^7.22.6", - "@nx/devkit": "20.3.0", - "@nx/workspace": "20.3.0", + "@nx/devkit": "20.3.2", + "@nx/workspace": "20.3.2", "@zkochan/js-yaml": "0.0.7", "babel-plugin-const-enum": "^1.0.1", "babel-plugin-macros": "^2.8.0", @@ -7877,18 +7996,18 @@ } }, "node_modules/@nx/module-federation": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/module-federation/-/module-federation-20.3.0.tgz", - "integrity": "sha512-txb3Gs9BkxnCo0Xo0EYqs8dRyScue4p6AcIxHHaTne469JS1qKzr0rGSpkL3j6KH5PAjfDpp8XZHtQg4Yd3TsQ==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/module-federation/-/module-federation-20.3.2.tgz", + "integrity": "sha512-i7Ze1Sjk68eE5qgsvMPXZlJuLHvwp3s/nWlDmJzcEdbiq2szRGgZ/NOLrZJYvSTkIe0YosCQ0PtY6wfGXwWjbQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/enhanced": "0.7.6", - "@module-federation/node": "2.6.11", - "@module-federation/sdk": "0.7.6", - "@nx/devkit": "20.3.0", - "@nx/js": "20.3.0", - "@nx/web": "20.3.0", + "@module-federation/enhanced": "^0.8.8", + "@module-federation/node": "^2.6.21", + "@module-federation/sdk": "^0.8.8", + "@nx/devkit": "20.3.2", + "@nx/js": "20.3.2", + "@nx/web": "20.3.2", "@rspack/core": "^1.1.5", "express": "^4.19.2", "http-proxy-middleware": "^3.0.3", @@ -7897,99 +8016,6 @@ "webpack": "5.88.0" } }, - "node_modules/@nx/module-federation/node_modules/@module-federation/enhanced": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.7.6.tgz", - "integrity": "sha512-ivTVuRKhew/25fiblAW22RybYzyacQsvnQG3y9zSNsYbwcj+0u7THWMmsK8vNKxDUpjxuQulCK07BEycDjoB5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.7.6", - "@module-federation/data-prefetch": "0.7.6", - "@module-federation/dts-plugin": "0.7.6", - "@module-federation/managers": "0.7.6", - "@module-federation/manifest": "0.7.6", - "@module-federation/rspack": "0.7.6", - "@module-federation/runtime-tools": "0.7.6", - "@module-federation/sdk": "0.7.6", - "btoa": "^1.2.1", - "upath": "2.0.1" - }, - "peerDependencies": { - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "vue-tsc": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/@nx/module-federation/node_modules/@module-federation/node": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/@module-federation/node/-/node-2.6.11.tgz", - "integrity": "sha512-ytCNML9Q9dQ7Xi/pTYp4Y+yP/YUiFyyCa8BEKnSt5Ipiqtu4QMxj46EkOIgvLv0nSlK+xOVgAzqtXLI89SfhCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@module-federation/enhanced": "0.7.6", - "@module-federation/runtime": "0.7.6", - "@module-federation/sdk": "0.7.6", - "@module-federation/utilities": "3.1.29", - "btoa": "1.2.1", - "encoding": "^0.1.13", - "node-fetch": "2.7.0" - }, - "peerDependencies": { - "react": "^16||^17||^18", - "react-dom": "^16||^17||^18", - "webpack": "^5.40.0" - }, - "peerDependenciesMeta": { - "next": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@nx/module-federation/node_modules/@module-federation/utilities": { - "version": "3.1.29", - "resolved": "https://registry.npmjs.org/@module-federation/utilities/-/utilities-3.1.29.tgz", - "integrity": "sha512-yhHOgm3mkZBvQzT4HoBJAVhGIa7Nfhpd4Zdc11g0vYEMapU6lfN5HHipUFdj6bLUzHhDyrY6CaF3syqTuabAfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@module-federation/sdk": "0.7.6" - }, - "peerDependencies": { - "react": "^16 || ^17 || ^18", - "react-dom": "^16 || ^17 || ^18", - "webpack": "^5.40.0" - }, - "peerDependenciesMeta": { - "next": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, "node_modules/@nx/module-federation/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -8110,17 +8136,17 @@ } }, "node_modules/@nx/nest": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/nest/-/nest-20.3.0.tgz", - "integrity": "sha512-z7yjlS0Z0TNxEUU+pVkIRCFkrtRnvKjmOwIzj4DfHR8/SoF+0x06IPo+ZFHFOLe/DDjZuNOqjqzOQmQY1VhINw==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nest/-/nest-20.3.2.tgz", + "integrity": "sha512-+/6xWf2Sdt0+8Bca1pBRDFT5XcGFBi5XUeHypJyoHPAxxoPsw3ZWQtKeSMDqVwghWvmz6GGGM6GynbHF9h8X6A==", "dev": true, "license": "MIT", "dependencies": { "@nestjs/schematics": "^9.1.0", - "@nx/devkit": "20.3.0", - "@nx/eslint": "20.3.0", - "@nx/js": "20.3.0", - "@nx/node": "20.3.0", + "@nx/devkit": "20.3.2", + "@nx/eslint": "20.3.2", + "@nx/js": "20.3.2", + "@nx/node": "20.3.2", "tslib": "^2.3.0" } }, @@ -8296,23 +8322,23 @@ } }, "node_modules/@nx/node": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/node/-/node-20.3.0.tgz", - "integrity": "sha512-6tHufkw92acIdcdLGARUJOTpjx7x4+Bu+rmM8rnugkZ4aGj62/IdI32rNBjSltYKcSo38HJyCSzmp0REdXsrbg==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/node/-/node-20.3.2.tgz", + "integrity": "sha512-JvYXPjoPho+RJKXgg2b0/hQ2SivccfGG+vkoQ4XcwBLW7qUjKUjxmkgSHD4XaAgf9Fe9L9Pqni58CriwzNfaFg==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "20.3.0", - "@nx/eslint": "20.3.0", - "@nx/jest": "20.3.0", - "@nx/js": "20.3.0", + "@nx/devkit": "20.3.2", + "@nx/eslint": "20.3.2", + "@nx/jest": "20.3.2", + "@nx/js": "20.3.2", "tslib": "^2.3.0" } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.3.0.tgz", - "integrity": "sha512-9PqSe1Sh7qNqA4GL0cZH0t3S0EZzb2Xn14XY9au7yf0+eoxyag1oETjjULrxLeUmSoXW2hDxzNtoqKFE9zF07Q==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.3.2.tgz", + "integrity": "sha512-lQOXMIPmE9o36TuZ+SX6iq7PPWa3s1fjNRqCujlviExX69245NNCMxd754gXlLrsxC1onrx/zmJciKmmEWDIiw==", "cpu": [ "arm64" ], @@ -8326,31 +8352,184 @@ "node": ">= 10" } }, + "node_modules/@nx/nx-darwin-x64": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.3.2.tgz", + "integrity": "sha512-RvvSz4QYVOYOfC8sUE63b6dy8iHk2AEI0r1FF5FCQuqE1DdTeTjPETY2sY35tRqF+mO/6oLGp2+m9ti/ysRoTg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-freebsd-x64": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.3.2.tgz", + "integrity": "sha512-KBDTyGn1evlZ17pupwRUDh2wrCMuHhP2j8cOCdgF5cl7vRki8BOK9yyL6jD11d/d/6DgXzy1jmQEX4Xx+AGCug==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.3.2.tgz", + "integrity": "sha512-mW+OcOnJEMvs7zD3aSwEG3z5M9bI4CuUU5Q/ePmnNzWIucRHpoAMNt/Sd+yu6L4+QttvoUf967uwcMsX8l4nrw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.3.2.tgz", + "integrity": "sha512-hbXpZqUvGY5aeEWvh0SNsiYjP1ytSM30XOT6qN6faLO2CL/7j9D2UB69SKOqF3TJOvuNU6cweFgZCxyGfXBYIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.3.2.tgz", + "integrity": "sha512-HXthtN7adXCNVWs2F4wIqq2f7BcKTjsEnqg2LWV5lm4hRYvMfEvPftb0tECsEhcSQQYcvIJnLfv3vtu9HZSfVA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.3.2.tgz", + "integrity": "sha512-HhgHqOUT05H45zuQL+XPywQbRNFttd7Rkkr7dZnpCRdp4W8GDjfyKCoCS5qVyowAyNh9Vc7VEq9qmiLMlvf6Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.3.2.tgz", + "integrity": "sha512-NrZ8L9of2GmYEM8GMJX6QRrLJlAwM+ds2rhdY1bxwpiyCNcD3IO/gzJlBs+kG4ly05F1u/X4k/FI5dXPpjUSgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.3.2.tgz", + "integrity": "sha512-yLjacZND7C1XmsC0jfRLSgeLWZUw2Oz+u3nXNvj5JX6YHtYTVLFnRbTAcI+pG2Y6v0Otf2GKb3VT5d1mQb8JvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.3.2.tgz", + "integrity": "sha512-oDhcctfk0UB1V+Otp1161VKNMobzkFQxGyiEIjp0CjCBa2eRHC1r35L695F1Hj0bvLQPSni9XIe9evh2taeAkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@nx/storybook": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/storybook/-/storybook-20.3.0.tgz", - "integrity": "sha512-H1ngnqg9JIwh1UB/PfPMHZS0L6YQbCPPL7gXr1NUcjbkXX2D+sZiBvqFwjIi0eglSM+1US7fy6/n2j3pwfQVQA==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/storybook/-/storybook-20.3.2.tgz", + "integrity": "sha512-gminOP6SssVZsHSBfpnmk9MDn1miMPF0zTO2KUx6V4pzQAC9yrV5MNv9ai6wNxTOfTzAAzr6uQCftjBs3kXaRQ==", "dev": true, "license": "MIT", "dependencies": { - "@nx/cypress": "20.3.0", - "@nx/devkit": "20.3.0", - "@nx/eslint": "20.3.0", - "@nx/js": "20.3.0", + "@nx/cypress": "20.3.2", + "@nx/devkit": "20.3.2", + "@nx/eslint": "20.3.2", + "@nx/js": "20.3.2", "@phenomnomnominal/tsquery": "~5.0.1", "semver": "^7.5.3", "tslib": "^2.3.0" } }, "node_modules/@nx/web": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/web/-/web-20.3.0.tgz", - "integrity": "sha512-MKmXI9uAX+fdLY0GfF/3rH4EXrEjyLI6FSt3kUuF1/UzAUUUqww6owoM+9EaC1mRcCYDd0nwN7piblVz/wIVLw==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/web/-/web-20.3.2.tgz", + "integrity": "sha512-Kw8is78c3zo4M2bPCVgF2XJev3oCPyl9wyTuexzc5y3praF/r0Dc1jlGiHqwdeGBKpNNDaZns4WZe5KUaIc/Qg==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "20.3.0", - "@nx/js": "20.3.0", + "@nx/devkit": "20.3.2", + "@nx/js": "20.3.2", "detect-port": "^1.5.1", "http-server": "^14.1.0", "picocolors": "^1.1.0", @@ -8358,15 +8537,15 @@ } }, "node_modules/@nx/webpack": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-20.3.0.tgz", - "integrity": "sha512-KW04Ge8cQtv5RmezWV6bsIptLwXNhq5d6Ew3GigL5h6BKYPEmyMes5yMSUsNqNGC1SPI5nNPwzRkTxW18b+jnA==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-20.3.2.tgz", + "integrity": "sha512-/3N4cRCbwHSZsJDHukV0QrIBZxFJpGjZFEPLswkAn8B+9AQVkp8ZieZYgu08XixXVj/9oTK4sbOh143/eu+93g==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.23.2", - "@nx/devkit": "20.3.0", - "@nx/js": "20.3.0", + "@nx/devkit": "20.3.2", + "@nx/js": "20.3.2", "@phenomnomnominal/tsquery": "~5.0.1", "ajv": "^8.12.0", "autoprefixer": "^10.4.9", @@ -8443,27 +8622,6 @@ "source-map": "~0.6.0" } }, - "node_modules/@nx/webpack/node_modules/less-loader": { - "version": "11.1.0", - "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" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, "node_modules/@nx/webpack/node_modules/parse5": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", @@ -8507,66 +8665,6 @@ "tslib": "^2.1.0" } }, - "node_modules/@nx/webpack/node_modules/sass": { - "version": "1.83.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.0.tgz", - "integrity": "sha512-qsSxlayzoOjdvXMVLkzF84DJFc2HZEL/rFyGIKbbilYtAvlCxyuzUeff9LawTn4btVnLKg75Z8MMr1lxU1lfGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, - "node_modules/@nx/webpack/node_modules/sass-loader": { - "version": "12.6.0", - "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" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, "node_modules/@nx/webpack/node_modules/tsconfig-paths-webpack-plugin": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.0.tgz", @@ -8665,16 +8763,16 @@ } }, "node_modules/@nx/workspace": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-20.3.0.tgz", - "integrity": "sha512-z8NSAo5SiLEMPuwasDvLdCCtaTGdINh1cSZMCom8HeLbT8F7risbR0IlHVqVrKj9FPKqrAIsH+4knVb4dHHCnQ==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-20.3.2.tgz", + "integrity": "sha512-Dj2AbG9X8Uo6k3XhcuNOblDgR/U8u5+x41hMNKHSG9Pi3CyAJ24didtn1SMf78GElzPOV94KJZmioGHw3rKyCg==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "20.3.0", + "@nx/devkit": "20.3.2", "chalk": "^4.1.0", "enquirer": "~2.3.6", - "nx": "20.3.0", + "nx": "20.3.2", "tslib": "^2.3.0", "yargs-parser": "21.1.1" } @@ -12214,6 +12312,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "deprecated": "package has been renamed to acorn-import-attributes", "dev": true, "license": "MIT", "peerDependencies": { @@ -12546,6 +12645,19 @@ "dev": true, "license": "MIT" }, + "node_modules/array-union": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/array.prototype.findlastindex": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", @@ -14777,53 +14889,6 @@ "webpack": "^5.1.0" } }, - "node_modules/copy-webpack-plugin/node_modules/array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "12.2.0", - "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", - "fast-glob": "^3.2.7", - "ignore": "^5.1.9", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/core-js-compat": { "version": "3.39.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", @@ -19103,6 +19168,40 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/globby": { + "version": "12.2.0", + "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", + "fast-glob": "^3.2.7", + "ignore": "^5.1.9", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/good-listener": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", @@ -20924,9 +21023,9 @@ } }, "node_modules/isomorphic-rslog": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/isomorphic-rslog/-/isomorphic-rslog-0.0.6.tgz", - "integrity": "sha512-HM0q6XqQ93psDlqvuViNs/Ea3hAyGDkIdVAHlrEocjjAwGrs1fZ+EdQjS9eUPacnYB7Y8SoDdSY3H8p3ce205A==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/isomorphic-rslog/-/isomorphic-rslog-0.0.7.tgz", + "integrity": "sha512-n6/XnKnZ5eLEj6VllG4XmamXG7/F69nls8dcynHyhcTpsPUYgcgx4ifEaCo4lQJ2uzwfmIT+F0KBGwBcMKmt5g==", "dev": true, "license": "MIT", "engines": { @@ -22628,6 +22727,27 @@ "source-map": "~0.6.0" } }, + "node_modules/less-loader": { + "version": "11.1.0", + "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" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -25361,9 +25481,9 @@ "license": "MIT" }, "node_modules/nx": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/nx/-/nx-20.3.0.tgz", - "integrity": "sha512-Nzi4k7tV22zwO2iBLk+pHxorLEWPJpPrVCACtz0SQ63j/LiAgfhoqruJO+VU+V+E9qdyPsvmqIL/Iaf/GRQlqA==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-20.3.2.tgz", + "integrity": "sha512-VWUHX0uCn8ACFbpBTpgucDzwe4q/a/UU3AYOhzKCvTzb3kQiyvoxLjORSze93ZNEqgor0PMkCQgcoMBUjxJfzQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -25408,16 +25528,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "20.3.0", - "@nx/nx-darwin-x64": "20.3.0", - "@nx/nx-freebsd-x64": "20.3.0", - "@nx/nx-linux-arm-gnueabihf": "20.3.0", - "@nx/nx-linux-arm64-gnu": "20.3.0", - "@nx/nx-linux-arm64-musl": "20.3.0", - "@nx/nx-linux-x64-gnu": "20.3.0", - "@nx/nx-linux-x64-musl": "20.3.0", - "@nx/nx-win32-arm64-msvc": "20.3.0", - "@nx/nx-win32-x64-msvc": "20.3.0" + "@nx/nx-darwin-arm64": "20.3.2", + "@nx/nx-darwin-x64": "20.3.2", + "@nx/nx-freebsd-x64": "20.3.2", + "@nx/nx-linux-arm-gnueabihf": "20.3.2", + "@nx/nx-linux-arm64-gnu": "20.3.2", + "@nx/nx-linux-arm64-musl": "20.3.2", + "@nx/nx-linux-x64-gnu": "20.3.2", + "@nx/nx-linux-x64-musl": "20.3.2", + "@nx/nx-win32-arm64-msvc": "20.3.2", + "@nx/nx-win32-x64-msvc": "20.3.2" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -25571,9 +25691,9 @@ } }, "node_modules/nx/node_modules/yaml": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", - "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", "dev": true, "license": "ISC", "bin": { @@ -27542,9 +27662,9 @@ "license": "MIT" }, "node_modules/rambda": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/rambda/-/rambda-9.4.1.tgz", - "integrity": "sha512-awZe9AzmPI8XqizJz+NlaRbAdjhWKvuIaPikqRH6r41/ui9UTUQY5jTVdgQwnVrv1HnSMB6IBAAnNYs8HoVvZg==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/rambda/-/rambda-9.4.2.tgz", + "integrity": "sha512-++euMfxnl7OgaEKwXh9QqThOjMeta2HH001N1v4mYQzBjJBnmXBh2BCK6dZAbICFVXOFUVD3xFG0R3ZPU0mxXw==", "dev": true, "license": "MIT" }, @@ -28497,6 +28617,45 @@ "@parcel/watcher": "^2.4.1" } }, + "node_modules/sass-loader": { + "version": "12.6.0", + "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" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, "node_modules/sax": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", @@ -30369,9 +30528,9 @@ } }, "node_modules/ts-loader": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", - "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", "dev": true, "license": "MIT", "dependencies": { @@ -30941,22 +31100,6 @@ "node": ">= 0.8.0" } }, - "node_modules/union/node_modules/qs": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", - "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/unique-filename": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", diff --git a/package.json b/package.json index c75b630c8..131324222 100644 --- a/package.json +++ b/package.json @@ -154,17 +154,17 @@ "@eslint/js": "9.18.0", "@nestjs/schematics": "10.2.3", "@nestjs/testing": "10.4.15", - "@nx/angular": "20.3.0", - "@nx/cypress": "20.3.0", - "@nx/eslint-plugin": "20.3.0", - "@nx/jest": "20.3.0", - "@nx/js": "20.3.0", - "@nx/module-federation": "20.3.0", - "@nx/nest": "20.3.0", - "@nx/node": "20.3.0", - "@nx/storybook": "20.3.0", - "@nx/web": "20.3.0", - "@nx/workspace": "20.3.0", + "@nx/angular": "20.3.2", + "@nx/cypress": "20.3.2", + "@nx/eslint-plugin": "20.3.2", + "@nx/jest": "20.3.2", + "@nx/js": "20.3.2", + "@nx/module-federation": "20.3.2", + "@nx/nest": "20.3.2", + "@nx/node": "20.3.2", + "@nx/storybook": "20.3.2", + "@nx/web": "20.3.2", + "@nx/workspace": "20.3.2", "@schematics/angular": "19.0.6", "@simplewebauthn/types": "9.0.1", "@storybook/addon-essentials": "8.4.7", @@ -194,7 +194,7 @@ "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jest-preset-angular": "14.4.2", - "nx": "20.3.0", + "nx": "20.3.2", "prettier": "3.4.2", "prettier-plugin-organize-attributes": "1.0.0", "prisma": "6.2.1", From 663cee9a05338d2a903f62375465278911338aac Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 19 Jan 2025 10:39:05 +0100 Subject: [PATCH 11/30] Feature/change wording in data providers of admin settings (#4207) * Change wording --- .../components/admin-settings/admin-settings.component.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.html b/apps/client/src/app/components/admin-settings/admin-settings.component.html index f9a6084cc..305d6ce49 100644 --- a/apps/client/src/app/components/admin-settings/admin-settings.component.html +++ b/apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -12,7 +12,9 @@ [href]="pricingUrl" > @if (isGhostfolioApiKeyValid === false) { - NEW + Early Access } Ghostfolio Premium Date: Sun, 19 Jan 2025 10:48:49 +0100 Subject: [PATCH 12/30] Feature/upgrade reflect metadata to version 0.2.2 (#4202) * Upgrade reflect-metadata to version 0.2.2 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7ceee5cb..2262ce56a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Upgraded `eslint` dependencies - Upgraded `nestjs` from version `10.1.3` to `10.4.15` - Upgraded `Nx` from version `20.3.0` to `20.3.2` +- Upgraded `reflect-metadata` from version `0.1.13` to `0.2.2` - Upgraded `uuid` from version `11.0.2` to `11.0.5` ## 2.134.0 - 2025-01-15 diff --git a/package-lock.json b/package-lock.json index a1d2e16da..07894898c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -83,7 +83,7 @@ "passport-google-oauth20": "2.0.0", "passport-headerapikey": "1.2.2", "passport-jwt": "4.0.1", - "reflect-metadata": "0.1.13", + "reflect-metadata": "0.2.2", "rxjs": "7.5.6", "stripe": "17.3.0", "svgmap": "2.6.0", @@ -27883,9 +27883,9 @@ } }, "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, "node_modules/reflect.getprototypeof": { diff --git a/package.json b/package.json index 131324222..a0f432b43 100644 --- a/package.json +++ b/package.json @@ -129,7 +129,7 @@ "passport-google-oauth20": "2.0.0", "passport-headerapikey": "1.2.2", "passport-jwt": "4.0.1", - "reflect-metadata": "0.1.13", + "reflect-metadata": "0.2.2", "rxjs": "7.5.6", "stripe": "17.3.0", "svgmap": "2.6.0", From c72d2192460d5fb6f372da8a74985ee885a4b164 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 19 Jan 2025 10:51:12 +0100 Subject: [PATCH 13/30] Release 2.135.0 (#4216) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2262ce56a..ce7dedbff 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.135.0 - 2025-01-19 ### Changed diff --git a/package-lock.json b/package-lock.json index 07894898c..1969a8201 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.134.0", + "version": "2.135.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.134.0", + "version": "2.135.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index a0f432b43..1e2996761 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.134.0", + "version": "2.135.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From fc0f2e30c0f302d76316a998646179be83db0b0a Mon Sep 17 00:00:00 2001 From: Serhii Serdiuk <130998461+SerhiiSerdiukDev@users.noreply.github.com> Date: Mon, 20 Jan 2025 18:20:14 +0200 Subject: [PATCH 14/30] Feature/improve language localization for Ukrainian (uk) (#4226) * Improve language localization for Ukrainian (uk) * Update changelog --- CHANGELOG.md | 6 ++ apps/client/src/locales/messages.ca.xlf | 78 +++++++------- apps/client/src/locales/messages.de.xlf | 78 +++++++------- apps/client/src/locales/messages.es.xlf | 78 +++++++------- apps/client/src/locales/messages.fr.xlf | 78 +++++++------- apps/client/src/locales/messages.it.xlf | 78 +++++++------- apps/client/src/locales/messages.nl.xlf | 78 +++++++------- apps/client/src/locales/messages.pl.xlf | 78 +++++++------- apps/client/src/locales/messages.pt.xlf | 78 +++++++------- apps/client/src/locales/messages.tr.xlf | 78 +++++++------- apps/client/src/locales/messages.uk.xlf | 136 ++++++++++++------------ apps/client/src/locales/messages.xlf | 76 ++++++------- apps/client/src/locales/messages.zh.xlf | 78 +++++++------- 13 files changed, 502 insertions(+), 496 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce7dedbff..a2cbf3cfa 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 Ukrainian (`uk`) + ## 2.135.0 - 2025-01-19 ### Changed diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 35cdf2a8c..77636d9e8 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -334,23 +334,23 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 105 + 104 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 108 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 112 apps/client/src/app/components/user-account-settings/user-account-settings.html - 119 + 117 apps/client/src/app/pages/features/features-page.html - 261 + 260 @@ -2203,7 +2203,7 @@ Plataformes apps/client/src/app/components/admin-settings/admin-settings.component.html - 79 + 81 @@ -2211,7 +2211,7 @@ Etiquetes apps/client/src/app/components/admin-settings/admin-settings.component.html - 85 + 87 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2831,7 +2831,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 257 + 255 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -3303,7 +3303,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 230 + 228 @@ -3459,7 +3459,7 @@ Locale apps/client/src/app/components/user-account-settings/user-account-settings.html - 129 + 127 @@ -3467,7 +3467,7 @@ Date and number format apps/client/src/app/components/user-account-settings/user-account-settings.html - 131 + 129 @@ -3475,7 +3475,7 @@ Appearance apps/client/src/app/components/user-account-settings/user-account-settings.html - 154 + 152 @@ -3483,7 +3483,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.html - 168 + 166 @@ -3491,7 +3491,7 @@ Light apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 167 @@ -3499,7 +3499,7 @@ Dark apps/client/src/app/components/user-account-settings/user-account-settings.html - 170 + 168 @@ -3507,7 +3507,7 @@ Zen Mode apps/client/src/app/components/user-account-settings/user-account-settings.html - 179 + 177 apps/client/src/app/pages/features/features-page.html @@ -3519,7 +3519,7 @@ Distraction-free experience for turbulent times apps/client/src/app/components/user-account-settings/user-account-settings.html - 180 + 178 @@ -3527,7 +3527,7 @@ Biometric Authentication apps/client/src/app/components/user-account-settings/user-account-settings.html - 196 + 194 @@ -3535,7 +3535,7 @@ Sign in with fingerprint apps/client/src/app/components/user-account-settings/user-account-settings.html - 197 + 195 @@ -3543,7 +3543,7 @@ Experimental Features apps/client/src/app/components/user-account-settings/user-account-settings.html - 213 + 211 @@ -3551,7 +3551,7 @@ Sneak peek at upcoming functionality apps/client/src/app/components/user-account-settings/user-account-settings.html - 214 + 212 @@ -3559,7 +3559,7 @@ Export Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 238 + 236 @@ -3567,7 +3567,7 @@ Danger Zone apps/client/src/app/components/user-account-settings/user-account-settings.html - 250 + 248 @@ -3575,7 +3575,7 @@ Close Account apps/client/src/app/components/user-account-settings/user-account-settings.html - 285 + 283 @@ -4087,7 +4087,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 280 + 279 @@ -4095,7 +4095,7 @@ Get Started apps/client/src/app/pages/features/features-page.html - 305 + 304 apps/client/src/app/pages/public/public-page.html @@ -6731,7 +6731,7 @@ Valid until apps/client/src/app/components/admin-settings/admin-settings.component.html - 26 + 28 libs/ui/src/lib/membership-card/membership-card.component.html @@ -7334,20 +7334,12 @@ 4 - - NEW - NEW - - apps/client/src/app/components/admin-settings/admin-settings.component.html - 15 - - Set API key Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 68 + 70 @@ -7469,7 +7461,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 40 + 42 @@ -7477,7 +7469,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 44 @@ -7485,7 +7477,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 56 + 58 @@ -7664,6 +7656,14 @@ 64 + + Early Access + Early Access + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 16 + + diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index b0dd8d4f4..343ae2f53 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -1026,7 +1026,7 @@ Registrieren apps/client/src/app/pages/features/features-page.html - 305 + 304 apps/client/src/app/pages/public/public-page.html @@ -1090,7 +1090,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 257 + 255 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -1354,7 +1354,7 @@ Tags apps/client/src/app/components/admin-settings/admin-settings.component.html - 85 + 87 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1770,7 +1770,7 @@ Lokalität apps/client/src/app/components/user-account-settings/user-account-settings.html - 129 + 127 @@ -1778,7 +1778,7 @@ Datums- und Zahlenformat apps/client/src/app/components/user-account-settings/user-account-settings.html - 131 + 129 @@ -1786,7 +1786,7 @@ Zen Modus apps/client/src/app/components/user-account-settings/user-account-settings.html - 179 + 177 apps/client/src/app/pages/features/features-page.html @@ -1798,7 +1798,7 @@ Einloggen mit Fingerabdruck apps/client/src/app/components/user-account-settings/user-account-settings.html - 197 + 195 @@ -1810,7 +1810,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 230 + 228 @@ -2910,7 +2910,7 @@ Experimentelle Funktionen apps/client/src/app/components/user-account-settings/user-account-settings.html - 213 + 211 @@ -2958,7 +2958,7 @@ Aussehen apps/client/src/app/components/user-account-settings/user-account-settings.html - 154 + 152 @@ -2966,7 +2966,7 @@ Automatisch apps/client/src/app/components/user-account-settings/user-account-settings.html - 168 + 166 @@ -2974,7 +2974,7 @@ Hell apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 167 @@ -2982,7 +2982,7 @@ Dunkel apps/client/src/app/components/user-account-settings/user-account-settings.html - 170 + 168 @@ -3270,23 +3270,23 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 105 + 104 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 108 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 112 apps/client/src/app/components/user-account-settings/user-account-settings.html - 119 + 117 apps/client/src/app/pages/features/features-page.html - 261 + 260 @@ -3450,7 +3450,7 @@ Gültig bis apps/client/src/app/components/admin-settings/admin-settings.component.html - 26 + 28 libs/ui/src/lib/membership-card/membership-card.component.html @@ -3518,7 +3518,7 @@ Unbeschwertes Erlebnis für turbulente Zeiten apps/client/src/app/components/user-account-settings/user-account-settings.html - 180 + 178 @@ -3526,7 +3526,7 @@ Vorschau auf kommende Funktionalität apps/client/src/app/components/user-account-settings/user-account-settings.html - 214 + 212 @@ -4010,7 +4010,7 @@ Plattformen apps/client/src/app/components/admin-settings/admin-settings.component.html - 79 + 81 @@ -4358,7 +4358,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 280 + 279 @@ -4766,7 +4766,7 @@ Biometrische Authentifizierung apps/client/src/app/components/user-account-settings/user-account-settings.html - 196 + 194 @@ -4850,7 +4850,7 @@ Daten exportieren apps/client/src/app/components/user-account-settings/user-account-settings.html - 238 + 236 @@ -6659,7 +6659,7 @@ Gefahrenzone apps/client/src/app/components/user-account-settings/user-account-settings.html - 250 + 248 @@ -6667,7 +6667,7 @@ Konto schliessen apps/client/src/app/components/user-account-settings/user-account-settings.html - 285 + 283 @@ -7334,20 +7334,12 @@ 4 - - NEW - NEU - - apps/client/src/app/components/admin-settings/admin-settings.component.html - 15 - - Set API key API-Schlüssel setzen apps/client/src/app/components/admin-settings/admin-settings.component.html - 68 + 70 @@ -7469,7 +7461,7 @@ von apps/client/src/app/components/admin-settings/admin-settings.component.html - 40 + 42 @@ -7477,7 +7469,7 @@ täglichen Anfragen apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 44 @@ -7485,7 +7477,7 @@ API-Schlüssel löschen apps/client/src/app/components/admin-settings/admin-settings.component.html - 56 + 58 @@ -7664,6 +7656,14 @@ 64 + + Early Access + Early Access + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 16 + + diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 9277735af..f3ea374e3 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -1027,7 +1027,7 @@ Empezar apps/client/src/app/pages/features/features-page.html - 305 + 304 apps/client/src/app/pages/public/public-page.html @@ -1091,7 +1091,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 257 + 255 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -1355,7 +1355,7 @@ Etiquetas apps/client/src/app/components/admin-settings/admin-settings.component.html - 85 + 87 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1771,7 +1771,7 @@ Ubicación apps/client/src/app/components/user-account-settings/user-account-settings.html - 129 + 127 @@ -1779,7 +1779,7 @@ Formato de fecha y número apps/client/src/app/components/user-account-settings/user-account-settings.html - 131 + 129 @@ -1787,7 +1787,7 @@ Modo Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 179 + 177 apps/client/src/app/pages/features/features-page.html @@ -1799,7 +1799,7 @@ Iniciar sesión con huella digital apps/client/src/app/components/user-account-settings/user-account-settings.html - 197 + 195 @@ -1811,7 +1811,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 230 + 228 @@ -2911,7 +2911,7 @@ Funcionalidades experimentales apps/client/src/app/components/user-account-settings/user-account-settings.html - 213 + 211 @@ -2959,7 +2959,7 @@ Apariencia apps/client/src/app/components/user-account-settings/user-account-settings.html - 154 + 152 @@ -2967,7 +2967,7 @@ Automático apps/client/src/app/components/user-account-settings/user-account-settings.html - 168 + 166 @@ -2975,7 +2975,7 @@ Claro apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 167 @@ -2983,7 +2983,7 @@ Oscuro apps/client/src/app/components/user-account-settings/user-account-settings.html - 170 + 168 @@ -3271,23 +3271,23 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 105 + 104 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 108 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 112 apps/client/src/app/components/user-account-settings/user-account-settings.html - 119 + 117 apps/client/src/app/pages/features/features-page.html - 261 + 260 @@ -3451,7 +3451,7 @@ Válido hasta apps/client/src/app/components/admin-settings/admin-settings.component.html - 26 + 28 libs/ui/src/lib/membership-card/membership-card.component.html @@ -3519,7 +3519,7 @@ Experiencia sin distracciones para tiempos turbulentos apps/client/src/app/components/user-account-settings/user-account-settings.html - 180 + 178 @@ -3527,7 +3527,7 @@ Un adelanto de las próximas funciones apps/client/src/app/components/user-account-settings/user-account-settings.html - 214 + 212 @@ -4011,7 +4011,7 @@ Platforms apps/client/src/app/components/admin-settings/admin-settings.component.html - 79 + 81 @@ -4359,7 +4359,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 280 + 279 @@ -4767,7 +4767,7 @@ Biometric Authentication apps/client/src/app/components/user-account-settings/user-account-settings.html - 196 + 194 @@ -4851,7 +4851,7 @@ Export Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 238 + 236 @@ -6660,7 +6660,7 @@ Zona peligrosa apps/client/src/app/components/user-account-settings/user-account-settings.html - 250 + 248 @@ -6668,7 +6668,7 @@ Eliminar cuenta apps/client/src/app/components/user-account-settings/user-account-settings.html - 285 + 283 @@ -7335,20 +7335,12 @@ 4 - - NEW - NEW - - apps/client/src/app/components/admin-settings/admin-settings.component.html - 15 - - Set API key Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 68 + 70 @@ -7470,7 +7462,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 40 + 42 @@ -7478,7 +7470,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 44 @@ -7486,7 +7478,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 56 + 58 @@ -7665,6 +7657,14 @@ 64 + + Early Access + Early Access + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 16 + + diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 245337d67..c2ea4d6f7 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -966,7 +966,7 @@ Étiquettes apps/client/src/app/components/admin-settings/admin-settings.component.html - 85 + 87 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1450,7 +1450,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 257 + 255 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -2066,23 +2066,23 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 105 + 104 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 108 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 112 apps/client/src/app/components/user-account-settings/user-account-settings.html - 119 + 117 apps/client/src/app/pages/features/features-page.html - 261 + 260 @@ -2090,7 +2090,7 @@ Paramètres régionaux apps/client/src/app/components/user-account-settings/user-account-settings.html - 129 + 127 @@ -2098,7 +2098,7 @@ Format de date et d’heure apps/client/src/app/components/user-account-settings/user-account-settings.html - 131 + 129 @@ -2106,7 +2106,7 @@ Apparence apps/client/src/app/components/user-account-settings/user-account-settings.html - 154 + 152 @@ -2114,7 +2114,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.html - 168 + 166 @@ -2122,7 +2122,7 @@ Clair apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 167 @@ -2130,7 +2130,7 @@ Sombre apps/client/src/app/components/user-account-settings/user-account-settings.html - 170 + 168 @@ -2138,7 +2138,7 @@ Mode Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 179 + 177 apps/client/src/app/pages/features/features-page.html @@ -2150,7 +2150,7 @@ Se connecter avec empreinte apps/client/src/app/components/user-account-settings/user-account-settings.html - 197 + 195 @@ -2158,7 +2158,7 @@ Fonctionnalités expérimentales apps/client/src/app/components/user-account-settings/user-account-settings.html - 213 + 211 @@ -2170,7 +2170,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 230 + 228 @@ -2910,7 +2910,7 @@ Démarrer apps/client/src/app/pages/features/features-page.html - 305 + 304 apps/client/src/app/pages/public/public-page.html @@ -3450,7 +3450,7 @@ Valide jusqu’au apps/client/src/app/components/admin-settings/admin-settings.component.html - 26 + 28 libs/ui/src/lib/membership-card/membership-card.component.html @@ -3518,7 +3518,7 @@ Expérience sans distraction pour les périodes tumultueuses apps/client/src/app/components/user-account-settings/user-account-settings.html - 180 + 178 @@ -3526,7 +3526,7 @@ Avant-première de fonctionnalités futures apps/client/src/app/components/user-account-settings/user-account-settings.html - 214 + 212 @@ -4010,7 +4010,7 @@ Platformes apps/client/src/app/components/admin-settings/admin-settings.component.html - 79 + 81 @@ -4358,7 +4358,7 @@ Logiciel Open Source apps/client/src/app/pages/features/features-page.html - 280 + 279 @@ -4766,7 +4766,7 @@ Authentication biométrique apps/client/src/app/components/user-account-settings/user-account-settings.html - 196 + 194 @@ -4850,7 +4850,7 @@ Exporter les Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 238 + 236 @@ -6659,7 +6659,7 @@ Zone de danger apps/client/src/app/components/user-account-settings/user-account-settings.html - 250 + 248 @@ -6667,7 +6667,7 @@ Supprimer le compte apps/client/src/app/components/user-account-settings/user-account-settings.html - 285 + 283 @@ -7334,20 +7334,12 @@ 4 - - NEW - NEW - - apps/client/src/app/components/admin-settings/admin-settings.component.html - 15 - - Set API key Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 68 + 70 @@ -7469,7 +7461,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 40 + 42 @@ -7477,7 +7469,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 44 @@ -7485,7 +7477,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 56 + 58 @@ -7664,6 +7656,14 @@ 64 + + Early Access + Early Access + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 16 + + diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index acb9b8e44..70b0ec374 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -1027,7 +1027,7 @@ Inizia apps/client/src/app/pages/features/features-page.html - 305 + 304 apps/client/src/app/pages/public/public-page.html @@ -1091,7 +1091,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 257 + 255 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -1355,7 +1355,7 @@ Tag apps/client/src/app/components/admin-settings/admin-settings.component.html - 85 + 87 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1771,7 +1771,7 @@ Locale apps/client/src/app/components/user-account-settings/user-account-settings.html - 129 + 127 @@ -1779,7 +1779,7 @@ Formato data e numero apps/client/src/app/components/user-account-settings/user-account-settings.html - 131 + 129 @@ -1787,7 +1787,7 @@ Modalità Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 179 + 177 apps/client/src/app/pages/features/features-page.html @@ -1799,7 +1799,7 @@ Accesso con impronta digitale apps/client/src/app/components/user-account-settings/user-account-settings.html - 197 + 195 @@ -1811,7 +1811,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 230 + 228 @@ -2911,7 +2911,7 @@ Funzionalità sperimentali apps/client/src/app/components/user-account-settings/user-account-settings.html - 213 + 211 @@ -2959,7 +2959,7 @@ Aspetto apps/client/src/app/components/user-account-settings/user-account-settings.html - 154 + 152 @@ -2967,7 +2967,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.html - 168 + 166 @@ -2975,7 +2975,7 @@ Chiaro apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 167 @@ -2983,7 +2983,7 @@ Scuro apps/client/src/app/components/user-account-settings/user-account-settings.html - 170 + 168 @@ -3271,23 +3271,23 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 105 + 104 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 108 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 112 apps/client/src/app/components/user-account-settings/user-account-settings.html - 119 + 117 apps/client/src/app/pages/features/features-page.html - 261 + 260 @@ -3451,7 +3451,7 @@ Valido fino a apps/client/src/app/components/admin-settings/admin-settings.component.html - 26 + 28 libs/ui/src/lib/membership-card/membership-card.component.html @@ -3519,7 +3519,7 @@ Esperienza priva di distrazioni per i periodi più turbolenti apps/client/src/app/components/user-account-settings/user-account-settings.html - 180 + 178 @@ -3527,7 +3527,7 @@ Un’anteprima delle funzionalità in arrivo apps/client/src/app/components/user-account-settings/user-account-settings.html - 214 + 212 @@ -4011,7 +4011,7 @@ Piattaforme apps/client/src/app/components/admin-settings/admin-settings.component.html - 79 + 81 @@ -4359,7 +4359,7 @@ Software open source apps/client/src/app/pages/features/features-page.html - 280 + 279 @@ -4767,7 +4767,7 @@ Autenticazione biometrica apps/client/src/app/components/user-account-settings/user-account-settings.html - 196 + 194 @@ -4851,7 +4851,7 @@ Esporta dati apps/client/src/app/components/user-account-settings/user-account-settings.html - 238 + 236 @@ -6660,7 +6660,7 @@ Zona di Pericolo apps/client/src/app/components/user-account-settings/user-account-settings.html - 250 + 248 @@ -6668,7 +6668,7 @@ Chiudi l'account apps/client/src/app/components/user-account-settings/user-account-settings.html - 285 + 283 @@ -7335,20 +7335,12 @@ 4 - - NEW - NUOVO - - apps/client/src/app/components/admin-settings/admin-settings.component.html - 15 - - Set API key Imposta API Key apps/client/src/app/components/admin-settings/admin-settings.component.html - 68 + 70 @@ -7470,7 +7462,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 40 + 42 @@ -7478,7 +7470,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 44 @@ -7486,7 +7478,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 56 + 58 @@ -7665,6 +7657,14 @@ 64 + + Early Access + Early Access + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 16 + + diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 92da1fbca..18cf83bb3 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -1026,7 +1026,7 @@ Aan de slag apps/client/src/app/pages/features/features-page.html - 305 + 304 apps/client/src/app/pages/public/public-page.html @@ -1090,7 +1090,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 257 + 255 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -1354,7 +1354,7 @@ Tags apps/client/src/app/components/admin-settings/admin-settings.component.html - 85 + 87 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1770,7 +1770,7 @@ Locatie apps/client/src/app/components/user-account-settings/user-account-settings.html - 129 + 127 @@ -1778,7 +1778,7 @@ Datum- en getalnotatie apps/client/src/app/components/user-account-settings/user-account-settings.html - 131 + 129 @@ -1786,7 +1786,7 @@ Zen-modus apps/client/src/app/components/user-account-settings/user-account-settings.html - 179 + 177 apps/client/src/app/pages/features/features-page.html @@ -1798,7 +1798,7 @@ Aanmelden met vingerafdruk apps/client/src/app/components/user-account-settings/user-account-settings.html - 197 + 195 @@ -1810,7 +1810,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 230 + 228 @@ -2910,7 +2910,7 @@ Experimentele functies apps/client/src/app/components/user-account-settings/user-account-settings.html - 213 + 211 @@ -2958,7 +2958,7 @@ Weergave apps/client/src/app/components/user-account-settings/user-account-settings.html - 154 + 152 @@ -2966,7 +2966,7 @@ Automatisch apps/client/src/app/components/user-account-settings/user-account-settings.html - 168 + 166 @@ -2974,7 +2974,7 @@ Licht apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 167 @@ -2982,7 +2982,7 @@ Donker apps/client/src/app/components/user-account-settings/user-account-settings.html - 170 + 168 @@ -3270,23 +3270,23 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 105 + 104 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 108 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 112 apps/client/src/app/components/user-account-settings/user-account-settings.html - 119 + 117 apps/client/src/app/pages/features/features-page.html - 261 + 260 @@ -3450,7 +3450,7 @@ Geldig tot apps/client/src/app/components/admin-settings/admin-settings.component.html - 26 + 28 libs/ui/src/lib/membership-card/membership-card.component.html @@ -3518,7 +3518,7 @@ Afleidingsvrije ervaring voor roerige tijden apps/client/src/app/components/user-account-settings/user-account-settings.html - 180 + 178 @@ -3526,7 +3526,7 @@ Voorproefje van nieuwe functionaliteit apps/client/src/app/components/user-account-settings/user-account-settings.html - 214 + 212 @@ -4010,7 +4010,7 @@ Platforms apps/client/src/app/components/admin-settings/admin-settings.component.html - 79 + 81 @@ -4358,7 +4358,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 280 + 279 @@ -4766,7 +4766,7 @@ Biometrische authenticatie apps/client/src/app/components/user-account-settings/user-account-settings.html - 196 + 194 @@ -4850,7 +4850,7 @@ Exporteer Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 238 + 236 @@ -6659,7 +6659,7 @@ Danger Zone apps/client/src/app/components/user-account-settings/user-account-settings.html - 250 + 248 @@ -6667,7 +6667,7 @@ Close Account apps/client/src/app/components/user-account-settings/user-account-settings.html - 285 + 283 @@ -7334,20 +7334,12 @@ 4 - - NEW - NEW - - apps/client/src/app/components/admin-settings/admin-settings.component.html - 15 - - Set API key Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 68 + 70 @@ -7469,7 +7461,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 40 + 42 @@ -7477,7 +7469,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 44 @@ -7485,7 +7477,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 56 + 58 @@ -7664,6 +7656,14 @@ 64 + + Early Access + Early Access + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 16 + + diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 2935020dd..38b8fe231 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -751,23 +751,23 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 105 + 104 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 108 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 112 apps/client/src/app/components/user-account-settings/user-account-settings.html - 119 + 117 apps/client/src/app/pages/features/features-page.html - 261 + 260 @@ -2031,7 +2031,7 @@ Platformy apps/client/src/app/components/admin-settings/admin-settings.component.html - 79 + 81 @@ -2039,7 +2039,7 @@ Tagi apps/client/src/app/components/admin-settings/admin-settings.component.html - 85 + 87 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2479,7 +2479,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 257 + 255 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -3159,7 +3159,7 @@ Ustawienia Regionalne apps/client/src/app/components/user-account-settings/user-account-settings.html - 129 + 127 @@ -3167,7 +3167,7 @@ Format daty i liczb apps/client/src/app/components/user-account-settings/user-account-settings.html - 131 + 129 @@ -3175,7 +3175,7 @@ Wygląd (tryb) apps/client/src/app/components/user-account-settings/user-account-settings.html - 154 + 152 @@ -3183,7 +3183,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.html - 168 + 166 @@ -3191,7 +3191,7 @@ Jasny apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 167 @@ -3199,7 +3199,7 @@ Ciemny apps/client/src/app/components/user-account-settings/user-account-settings.html - 170 + 168 @@ -3207,7 +3207,7 @@ Tryb Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 179 + 177 apps/client/src/app/pages/features/features-page.html @@ -3219,7 +3219,7 @@ Doświadczenie bez zakłóceń w niespokojnych czasach apps/client/src/app/components/user-account-settings/user-account-settings.html - 180 + 178 @@ -3227,7 +3227,7 @@ Uwierzytelnianie Biometryczne apps/client/src/app/components/user-account-settings/user-account-settings.html - 196 + 194 @@ -3235,7 +3235,7 @@ Logowanie za pomocą linii papilarnych apps/client/src/app/components/user-account-settings/user-account-settings.html - 197 + 195 @@ -3243,7 +3243,7 @@ Funkcje Eksperymentalne apps/client/src/app/components/user-account-settings/user-account-settings.html - 213 + 211 @@ -3251,7 +3251,7 @@ Podgląd nadchodzących funkcjonalności apps/client/src/app/components/user-account-settings/user-account-settings.html - 214 + 212 @@ -3263,7 +3263,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 230 + 228 @@ -3271,7 +3271,7 @@ Eksportuj Dane apps/client/src/app/components/user-account-settings/user-account-settings.html - 238 + 236 @@ -3711,7 +3711,7 @@ Oprogramowanie Open Source apps/client/src/app/pages/features/features-page.html - 280 + 279 @@ -3719,7 +3719,7 @@ Rozpocznij apps/client/src/app/pages/features/features-page.html - 305 + 304 apps/client/src/app/pages/public/public-page.html @@ -6127,7 +6127,7 @@ Ważność do apps/client/src/app/components/admin-settings/admin-settings.component.html - 26 + 28 libs/ui/src/lib/membership-card/membership-card.component.html @@ -6659,7 +6659,7 @@ Strefa Zagrożenia apps/client/src/app/components/user-account-settings/user-account-settings.html - 250 + 248 @@ -6667,7 +6667,7 @@ Zamknij Konto apps/client/src/app/components/user-account-settings/user-account-settings.html - 285 + 283 @@ -7334,20 +7334,12 @@ 4 - - NEW - NOWOŚĆ - - apps/client/src/app/components/admin-settings/admin-settings.component.html - 15 - - Set API key Skonfiguruj klucz API apps/client/src/app/components/admin-settings/admin-settings.component.html - 68 + 70 @@ -7469,7 +7461,7 @@ z apps/client/src/app/components/admin-settings/admin-settings.component.html - 40 + 42 @@ -7477,7 +7469,7 @@ codzienne żądania apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 44 @@ -7485,7 +7477,7 @@ Usuń klucz API apps/client/src/app/components/admin-settings/admin-settings.component.html - 56 + 58 @@ -7664,6 +7656,14 @@ 64 + + Early Access + Early Access + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 16 + + diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 3aa493ece..61ff18a29 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -1326,7 +1326,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 257 + 255 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -1662,7 +1662,7 @@ Marcadores apps/client/src/app/components/admin-settings/admin-settings.component.html - 85 + 87 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2034,7 +2034,7 @@ Localidade apps/client/src/app/components/user-account-settings/user-account-settings.html - 129 + 127 @@ -2042,7 +2042,7 @@ Formato de números e datas apps/client/src/app/components/user-account-settings/user-account-settings.html - 131 + 129 @@ -2050,7 +2050,7 @@ Modo Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 179 + 177 apps/client/src/app/pages/features/features-page.html @@ -2062,7 +2062,7 @@ Aparência apps/client/src/app/components/user-account-settings/user-account-settings.html - 154 + 152 @@ -2070,7 +2070,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.html - 168 + 166 @@ -2078,7 +2078,7 @@ Claro apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 167 @@ -2086,7 +2086,7 @@ Escuro apps/client/src/app/components/user-account-settings/user-account-settings.html - 170 + 168 @@ -2094,7 +2094,7 @@ Iniciar sessão com impressão digital apps/client/src/app/components/user-account-settings/user-account-settings.html - 197 + 195 @@ -2102,7 +2102,7 @@ Funcionalidades Experimentais apps/client/src/app/components/user-account-settings/user-account-settings.html - 213 + 211 @@ -2114,7 +2114,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 230 + 228 @@ -2806,7 +2806,7 @@ Começar apps/client/src/app/pages/features/features-page.html - 305 + 304 apps/client/src/app/pages/public/public-page.html @@ -3314,23 +3314,23 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 105 + 104 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 108 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 112 apps/client/src/app/components/user-account-settings/user-account-settings.html - 119 + 117 apps/client/src/app/pages/features/features-page.html - 261 + 260 @@ -3450,7 +3450,7 @@ Válido até apps/client/src/app/components/admin-settings/admin-settings.component.html - 26 + 28 libs/ui/src/lib/membership-card/membership-card.component.html @@ -3518,7 +3518,7 @@ Experiência sem distrações para tempos turbulentos apps/client/src/app/components/user-account-settings/user-account-settings.html - 180 + 178 @@ -3526,7 +3526,7 @@ Acesso antecipado a funcionalidades futuras apps/client/src/app/components/user-account-settings/user-account-settings.html - 214 + 212 @@ -4010,7 +4010,7 @@ Plataformas apps/client/src/app/components/admin-settings/admin-settings.component.html - 79 + 81 @@ -4358,7 +4358,7 @@ Software de código aberto apps/client/src/app/pages/features/features-page.html - 280 + 279 @@ -4766,7 +4766,7 @@ Autenticação biométrica apps/client/src/app/components/user-account-settings/user-account-settings.html - 196 + 194 @@ -4850,7 +4850,7 @@ Exportar dados apps/client/src/app/components/user-account-settings/user-account-settings.html - 238 + 236 @@ -6659,7 +6659,7 @@ Danger Zone apps/client/src/app/components/user-account-settings/user-account-settings.html - 250 + 248 @@ -6667,7 +6667,7 @@ Close Account apps/client/src/app/components/user-account-settings/user-account-settings.html - 285 + 283 @@ -7334,20 +7334,12 @@ 4 - - NEW - NEW - - apps/client/src/app/components/admin-settings/admin-settings.component.html - 15 - - Set API key Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 68 + 70 @@ -7469,7 +7461,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 40 + 42 @@ -7477,7 +7469,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 44 @@ -7485,7 +7477,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 56 + 58 @@ -7664,6 +7656,14 @@ 64 + + Early Access + Early Access + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 16 + + diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 7734dae5b..a598fd6d1 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -727,23 +727,23 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 105 + 104 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 108 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 112 apps/client/src/app/components/user-account-settings/user-account-settings.html - 119 + 117 apps/client/src/app/pages/features/features-page.html - 261 + 260 @@ -1779,7 +1779,7 @@ Etiketler apps/client/src/app/components/admin-settings/admin-settings.component.html - 85 + 87 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1943,7 +1943,7 @@ Platformlar apps/client/src/app/components/admin-settings/admin-settings.component.html - 79 + 81 @@ -2331,7 +2331,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 257 + 255 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -3239,7 +3239,7 @@ Zen Modu apps/client/src/app/components/user-account-settings/user-account-settings.html - 179 + 177 apps/client/src/app/pages/features/features-page.html @@ -3275,7 +3275,7 @@ Açık Kaynak Yazılım apps/client/src/app/pages/features/features-page.html - 280 + 279 @@ -3283,7 +3283,7 @@ Başla apps/client/src/app/pages/features/features-page.html - 305 + 304 apps/client/src/app/pages/public/public-page.html @@ -4995,7 +4995,7 @@ Geçerli tarih apps/client/src/app/components/admin-settings/admin-settings.component.html - 26 + 28 libs/ui/src/lib/membership-card/membership-card.component.html @@ -5067,7 +5067,7 @@ Yerel Ayarlar apps/client/src/app/components/user-account-settings/user-account-settings.html - 129 + 127 @@ -5075,7 +5075,7 @@ Tarih ve Sayı Formatları apps/client/src/app/components/user-account-settings/user-account-settings.html - 131 + 129 @@ -5083,7 +5083,7 @@ Görünüm apps/client/src/app/components/user-account-settings/user-account-settings.html - 154 + 152 @@ -5091,7 +5091,7 @@ Otomatik apps/client/src/app/components/user-account-settings/user-account-settings.html - 168 + 166 @@ -5099,7 +5099,7 @@ Açık apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 167 @@ -5107,7 +5107,7 @@ Koyu apps/client/src/app/components/user-account-settings/user-account-settings.html - 170 + 168 @@ -5115,7 +5115,7 @@ Çalkantılı zamanlar için dikkat dağıtmayan bir deneyim apps/client/src/app/components/user-account-settings/user-account-settings.html - 180 + 178 @@ -5123,7 +5123,7 @@ Biyometrik Kimlik Doğrulama apps/client/src/app/components/user-account-settings/user-account-settings.html - 196 + 194 @@ -5131,7 +5131,7 @@ Parmak iziyle oturum aç apps/client/src/app/components/user-account-settings/user-account-settings.html - 197 + 195 @@ -5139,7 +5139,7 @@ Deneysel Özellikler apps/client/src/app/components/user-account-settings/user-account-settings.html - 213 + 211 @@ -5147,7 +5147,7 @@ Gelecek özelliklere göz atın apps/client/src/app/components/user-account-settings/user-account-settings.html - 214 + 212 @@ -5159,7 +5159,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 230 + 228 @@ -5167,7 +5167,7 @@ Verileri Dışa Aktar apps/client/src/app/components/user-account-settings/user-account-settings.html - 238 + 236 @@ -6659,7 +6659,7 @@ Danger Zone apps/client/src/app/components/user-account-settings/user-account-settings.html - 250 + 248 @@ -6667,7 +6667,7 @@ Close Account apps/client/src/app/components/user-account-settings/user-account-settings.html - 285 + 283 @@ -7334,20 +7334,12 @@ 4 - - NEW - NEW - - apps/client/src/app/components/admin-settings/admin-settings.component.html - 15 - - Set API key Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 68 + 70 @@ -7469,7 +7461,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 40 + 42 @@ -7477,7 +7469,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 44 @@ -7485,7 +7477,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 56 + 58 @@ -7664,6 +7656,14 @@ 64 + + Early Access + Early Access + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 16 + + diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 5988b6e7c..cb2cbb57d 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -334,23 +334,23 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 105 + 104 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 108 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 112 apps/client/src/app/components/user-account-settings/user-account-settings.html - 119 + 117 apps/client/src/app/pages/features/features-page.html - 261 + 260 @@ -2194,20 +2194,12 @@ 4 - - NEW - НОВИЙ - - apps/client/src/app/components/admin-settings/admin-settings.component.html - 15 - - Valid until Дійсне до apps/client/src/app/components/admin-settings/admin-settings.component.html - 26 + 28 libs/ui/src/lib/membership-card/membership-card.component.html @@ -2219,7 +2211,7 @@ з apps/client/src/app/components/admin-settings/admin-settings.component.html - 40 + 42 @@ -2227,7 +2219,7 @@ щоденних запитів apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 44 @@ -2235,7 +2227,7 @@ Вилучити ключ API apps/client/src/app/components/admin-settings/admin-settings.component.html - 56 + 58 @@ -2243,7 +2235,7 @@ Встановити ключ API apps/client/src/app/components/admin-settings/admin-settings.component.html - 68 + 70 @@ -2251,7 +2243,7 @@ Платформи apps/client/src/app/components/admin-settings/admin-settings.component.html - 79 + 81 @@ -2259,7 +2251,7 @@ Теги apps/client/src/app/components/admin-settings/admin-settings.component.html - 85 + 87 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2456,7 +2448,7 @@ Performance - Продуктивність + Прибутковість apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html 6 @@ -2648,7 +2640,7 @@ Change with currency effect Change - Зміна з урахуванням валютного ефекту Змінити + Зміна з урахуванням валютного ефекту Зміна apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 50 @@ -2656,7 +2648,7 @@ Performance with currency effect Performance - Продуктивність з урахуванням валютного ефекту валюти Продуктивність + Прибутковість з урахуванням валютного ефекту валюти Прибутковість apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 69 @@ -2704,7 +2696,7 @@ Investment - Інвестиція + Інвестиції apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 152 @@ -2716,7 +2708,7 @@ Dividend - Дивіденд + Дивіденди apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 165 @@ -2892,7 +2884,7 @@ Record your investment activities to keep your portfolio up to date. - Записуйте ваші інвестиційні активності, щоб підтримувати актуальність вашого портфеля. + Записуйте ваші інвестиційні дії, щоб підтримувати актуальність вашого портфеля. apps/client/src/app/components/home-overview/home-overview.html 26 @@ -2936,7 +2928,7 @@ Summary - Резюме + Зведення apps/client/src/app/components/home-summary/home-summary.html 2 @@ -2967,7 +2959,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 257 + 255 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -3024,7 +3016,7 @@ {VAR_PLURAL, plural, =1 {activity} other {activities}} - {VAR_PLURAL, plural, =1 {актив} other {активи}} + {VAR_PLURAL, plural, =1 {дія} other {дій}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 14 @@ -3032,7 +3024,7 @@ Buy - Купити + Купівля apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 31 @@ -3040,7 +3032,7 @@ Sell - Продати + Продаж apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 43 @@ -3048,7 +3040,7 @@ Absolute Gross Performance - Абсолютна валова продуктивність + Абсолютний валовий дохід apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 70 @@ -3056,7 +3048,7 @@ Absolute Net Performance - Абсолютна чиста продуктивність + Абсолютний чистий прибуток apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 102 @@ -3064,7 +3056,7 @@ Net Performance - Чиста продуктивність + Чистий прибуток apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 117 @@ -3148,7 +3140,7 @@ Net Worth - Чистий капітал + Чиста вартість apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 273 @@ -3156,7 +3148,7 @@ Annualized Performance - Річна продуктивність + Річна доходність apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 285 @@ -3487,7 +3479,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 230 + 228 @@ -3715,7 +3707,7 @@ Локалізація apps/client/src/app/components/user-account-settings/user-account-settings.html - 129 + 127 @@ -3723,7 +3715,7 @@ Формат дати та чисел apps/client/src/app/components/user-account-settings/user-account-settings.html - 131 + 129 @@ -3731,7 +3723,7 @@ Зовнішній вигляд apps/client/src/app/components/user-account-settings/user-account-settings.html - 154 + 152 @@ -3739,7 +3731,7 @@ Автоматичний apps/client/src/app/components/user-account-settings/user-account-settings.html - 168 + 166 @@ -3747,7 +3739,7 @@ Світлий apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 167 @@ -3755,7 +3747,7 @@ Темний apps/client/src/app/components/user-account-settings/user-account-settings.html - 170 + 168 @@ -3763,7 +3755,7 @@ Режим дзен apps/client/src/app/components/user-account-settings/user-account-settings.html - 179 + 177 apps/client/src/app/pages/features/features-page.html @@ -3775,7 +3767,7 @@ Досвід без відволікань для неспокійних часів apps/client/src/app/components/user-account-settings/user-account-settings.html - 180 + 178 @@ -3783,7 +3775,7 @@ Біометрична аутентифікація apps/client/src/app/components/user-account-settings/user-account-settings.html - 196 + 194 @@ -3791,7 +3783,7 @@ Увійти з відбитком пальця apps/client/src/app/components/user-account-settings/user-account-settings.html - 197 + 195 @@ -3799,7 +3791,7 @@ Експериментальні функції apps/client/src/app/components/user-account-settings/user-account-settings.html - 213 + 211 @@ -3807,7 +3799,7 @@ Попередній перегляд майбутніх функцій apps/client/src/app/components/user-account-settings/user-account-settings.html - 214 + 212 @@ -3815,7 +3807,7 @@ Експортувати дані apps/client/src/app/components/user-account-settings/user-account-settings.html - 238 + 236 @@ -3823,7 +3815,7 @@ Зона небезпеки apps/client/src/app/components/user-account-settings/user-account-settings.html - 250 + 248 @@ -3831,7 +3823,7 @@ Закрити обліковий запис apps/client/src/app/components/user-account-settings/user-account-settings.html - 285 + 283 @@ -4335,7 +4327,7 @@ Програмне забезпечення з відкритим кодом apps/client/src/app/pages/features/features-page.html - 280 + 279 @@ -4343,7 +4335,7 @@ Почати apps/client/src/app/pages/features/features-page.html - 305 + 304 apps/client/src/app/pages/public/public-page.html @@ -4372,7 +4364,7 @@ Summary - Резюме + Зведення apps/client/src/app/pages/home/home-page-routing.module.ts 33 @@ -5352,7 +5344,7 @@ Dividend - Дивіденд + Дивіденди apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts 41 @@ -5364,7 +5356,7 @@ Investment - Інвестиція + Інвестиції apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts 46 @@ -5404,7 +5396,7 @@ Absolute Asset Performance - Абсолютна продуктивність активів + Абсолютна прибутковість активів apps/client/src/app/pages/portfolio/analysis/analysis-page.html 60 @@ -5412,7 +5404,7 @@ Asset Performance - Продуктивність активів + Прибутковість активів apps/client/src/app/pages/portfolio/analysis/analysis-page.html 81 @@ -5420,7 +5412,7 @@ Absolute Currency Performance - Абсолютна продуктивність валюти + Абсолютна прибутковість валюти apps/client/src/app/pages/portfolio/analysis/analysis-page.html 103 @@ -5428,7 +5420,7 @@ Currency Performance - Продуктивність валюти + Прибутковість валюти apps/client/src/app/pages/portfolio/analysis/analysis-page.html 127 @@ -5436,7 +5428,7 @@ Absolute Net Performance - Абсолютна чиста продуктивність + Абсолютна чиста прибутковість apps/client/src/app/pages/portfolio/analysis/analysis-page.html 150 @@ -5444,7 +5436,7 @@ Net Performance - Чиста продуктивність + Чиста прибутковість apps/client/src/app/pages/portfolio/analysis/analysis-page.html 169 @@ -5676,7 +5668,7 @@ Portfolio Performance - Продуктивність портфеля + Прибутковість портфеля apps/client/src/app/pages/pricing/pricing-page.html 53 @@ -6854,7 +6846,7 @@ Change from All Time High - Зміна від рекордного максимуму + Зміна від Історичного Максимуму libs/ui/src/lib/benchmark/benchmark.component.html 81 @@ -6862,7 +6854,7 @@ from ATH - від РМ + від ІМ libs/ui/src/lib/benchmark/benchmark.component.html 83 @@ -6954,7 +6946,7 @@ Allocation - Алоція + Розподіл libs/ui/src/lib/holdings-table/holdings-table.component.html 98 @@ -7018,7 +7010,7 @@ Buy and sell - Купити та продати + Купівля та продаж libs/ui/src/lib/i18n.ts 8 @@ -7664,6 +7656,14 @@ 27 + + Early Access + Ранній доступ + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 16 + + diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index bf686e325..0b7afdfa9 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -729,23 +729,23 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 105 + 104 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 108 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 112 apps/client/src/app/components/user-account-settings/user-account-settings.html - 119 + 117 apps/client/src/app/pages/features/features-page.html - 261 + 260 @@ -1929,14 +1929,14 @@ Platforms apps/client/src/app/components/admin-settings/admin-settings.component.html - 79 + 81 Tags apps/client/src/app/components/admin-settings/admin-settings.component.html - 85 + 87 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2330,7 +2330,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 257 + 255 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -2945,49 +2945,49 @@ Locale apps/client/src/app/components/user-account-settings/user-account-settings.html - 129 + 127 Date and number format apps/client/src/app/components/user-account-settings/user-account-settings.html - 131 + 129 Appearance apps/client/src/app/components/user-account-settings/user-account-settings.html - 154 + 152 Auto apps/client/src/app/components/user-account-settings/user-account-settings.html - 168 + 166 Light apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 167 Dark apps/client/src/app/components/user-account-settings/user-account-settings.html - 170 + 168 Zen Mode apps/client/src/app/components/user-account-settings/user-account-settings.html - 179 + 177 apps/client/src/app/pages/features/features-page.html @@ -2998,35 +2998,35 @@ Distraction-free experience for turbulent times apps/client/src/app/components/user-account-settings/user-account-settings.html - 180 + 178 Biometric Authentication apps/client/src/app/components/user-account-settings/user-account-settings.html - 196 + 194 Sign in with fingerprint apps/client/src/app/components/user-account-settings/user-account-settings.html - 197 + 195 Experimental Features apps/client/src/app/components/user-account-settings/user-account-settings.html - 213 + 211 Sneak peek at upcoming functionality apps/client/src/app/components/user-account-settings/user-account-settings.html - 214 + 212 @@ -3037,14 +3037,14 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 230 + 228 Export Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 238 + 236 @@ -3440,14 +3440,14 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 280 + 279 Get Started apps/client/src/app/pages/features/features-page.html - 305 + 304 apps/client/src/app/pages/public/public-page.html @@ -5636,7 +5636,7 @@ Valid until apps/client/src/app/components/admin-settings/admin-settings.component.html - 26 + 28 libs/ui/src/lib/membership-card/membership-card.component.html @@ -6044,7 +6044,7 @@ Close Account apps/client/src/app/components/user-account-settings/user-account-settings.html - 285 + 283 @@ -6058,7 +6058,7 @@ Danger Zone apps/client/src/app/components/user-account-settings/user-account-settings.html - 250 + 248 @@ -6653,7 +6653,7 @@ Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 68 + 70 @@ -6663,13 +6663,6 @@ 24 - - NEW - - apps/client/src/app/components/admin-settings/admin-settings.component.html - 15 - - Data Providers @@ -6769,7 +6762,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 40 + 42 @@ -6797,14 +6790,14 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 56 + 58 daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 44 @@ -6933,6 +6926,13 @@ 64 + + Early Access + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 16 + + diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 451040520..9aaa47267 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -752,23 +752,23 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 105 + 104 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 108 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 112 apps/client/src/app/components/user-account-settings/user-account-settings.html - 119 + 117 apps/client/src/app/pages/features/features-page.html - 261 + 260 @@ -2048,7 +2048,7 @@ 平台 apps/client/src/app/components/admin-settings/admin-settings.component.html - 79 + 81 @@ -2056,7 +2056,7 @@ 标签 apps/client/src/app/components/admin-settings/admin-settings.component.html - 85 + 87 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2496,7 +2496,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 257 + 255 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -3176,7 +3176,7 @@ 语言环境 apps/client/src/app/components/user-account-settings/user-account-settings.html - 129 + 127 @@ -3184,7 +3184,7 @@ 日期和数字格式 apps/client/src/app/components/user-account-settings/user-account-settings.html - 131 + 129 @@ -3192,7 +3192,7 @@ 外貌 apps/client/src/app/components/user-account-settings/user-account-settings.html - 154 + 152 @@ -3200,7 +3200,7 @@ 自动 apps/client/src/app/components/user-account-settings/user-account-settings.html - 168 + 166 @@ -3208,7 +3208,7 @@ 明亮 apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 167 @@ -3216,7 +3216,7 @@ 黑暗 apps/client/src/app/components/user-account-settings/user-account-settings.html - 170 + 168 @@ -3224,7 +3224,7 @@ 极简模式 apps/client/src/app/components/user-account-settings/user-account-settings.html - 179 + 177 apps/client/src/app/pages/features/features-page.html @@ -3236,7 +3236,7 @@ 动荡时期的无干扰体验 apps/client/src/app/components/user-account-settings/user-account-settings.html - 180 + 178 @@ -3244,7 +3244,7 @@ 生物识别认证 apps/client/src/app/components/user-account-settings/user-account-settings.html - 196 + 194 @@ -3252,7 +3252,7 @@ 使用指纹登录 apps/client/src/app/components/user-account-settings/user-account-settings.html - 197 + 195 @@ -3260,7 +3260,7 @@ 实验性功能 apps/client/src/app/components/user-account-settings/user-account-settings.html - 213 + 211 @@ -3268,7 +3268,7 @@ 预览即将推出的功能 apps/client/src/app/components/user-account-settings/user-account-settings.html - 214 + 212 @@ -3280,7 +3280,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 230 + 228 @@ -3288,7 +3288,7 @@ 导出数据 apps/client/src/app/components/user-account-settings/user-account-settings.html - 238 + 236 @@ -3728,7 +3728,7 @@ 开源软件 apps/client/src/app/pages/features/features-page.html - 280 + 279 @@ -3736,7 +3736,7 @@ 立即开始 apps/client/src/app/pages/features/features-page.html - 305 + 304 apps/client/src/app/pages/public/public-page.html @@ -6192,7 +6192,7 @@ 有效期至 apps/client/src/app/components/admin-settings/admin-settings.component.html - 26 + 28 libs/ui/src/lib/membership-card/membership-card.component.html @@ -6660,7 +6660,7 @@ Danger Zone apps/client/src/app/components/user-account-settings/user-account-settings.html - 250 + 248 @@ -6668,7 +6668,7 @@ Close Account apps/client/src/app/components/user-account-settings/user-account-settings.html - 285 + 283 @@ -7335,20 +7335,12 @@ 4 - - NEW - NEW - - apps/client/src/app/components/admin-settings/admin-settings.component.html - 15 - - Set API key Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 68 + 70 @@ -7470,7 +7462,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 40 + 42 @@ -7478,7 +7470,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 44 @@ -7486,7 +7478,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 56 + 58 @@ -7665,6 +7657,14 @@ 64 + + Early Access + Early Access + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 16 + + From b6f202c94e358c2ab2f35b7547c149d0fa4e5980 Mon Sep 17 00:00:00 2001 From: Ken Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Tue, 21 Jan 2025 01:45:23 +0700 Subject: [PATCH 15/30] Feature/upgrade to RxJS 7.8.1 (#4223) * chore(deps): bump rxjs from 7.5.6 to 7.8.1 * fix(deps): remove rxjs resolutions * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 74 +++-------------------------------------------- package.json | 5 +--- 3 files changed, 6 insertions(+), 74 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2cbf3cfa..90fc50422 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 language localization for Ukrainian (`uk`) +- Upgraded `rxjs` from version `7.5.6` to `7.8.1` ## 2.135.0 - 2025-01-19 diff --git a/package-lock.json b/package-lock.json index 1969a8201..089626e67 100644 --- a/package-lock.json +++ b/package-lock.json @@ -84,7 +84,7 @@ "passport-headerapikey": "1.2.2", "passport-jwt": "4.0.1", "reflect-metadata": "0.2.2", - "rxjs": "7.5.6", + "rxjs": "7.8.1", "stripe": "17.3.0", "svgmap": "2.6.0", "twitter-api-v2": "1.14.2", @@ -202,15 +202,6 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/architect/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular-devkit/build-angular": { "version": "19.0.6", "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.0.6.tgz", @@ -1195,15 +1186,6 @@ } } }, - "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular-devkit/build-angular/node_modules/sass-loader": { "version": "16.0.3", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.3.tgz", @@ -1370,15 +1352,6 @@ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", "license": "MIT" }, - "node_modules/@angular-devkit/core/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular-devkit/core/node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -1421,15 +1394,6 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/@angular-devkit/schematics/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular-eslint/bundled-angular-compiler": { "version": "19.0.2", "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.0.2.tgz", @@ -7183,16 +7147,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@nestjs/schematics/node_modules/rxjs": { - "version": "7.8.1", - "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" - } - }, "node_modules/@nestjs/schematics/node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -8301,16 +8255,6 @@ "node": ">=8.10.0" } }, - "node_modules/@nx/nest/node_modules/rxjs": { - "version": "7.8.1", - "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" - } - }, "node_modules/@nx/nest/node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -8655,16 +8599,6 @@ "node": ">=8.10.0" } }, - "node_modules/@nx/webpack/node_modules/rxjs": { - "version": "7.8.1", - "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" - } - }, "node_modules/@nx/webpack/node_modules/tsconfig-paths-webpack-plugin": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.0.tgz", @@ -28512,9 +28446,9 @@ "optional": true }, "node_modules/rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" diff --git a/package.json b/package.json index 1e2996761..d000f38dd 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "passport-headerapikey": "1.2.2", "passport-jwt": "4.0.1", "reflect-metadata": "0.2.2", - "rxjs": "7.5.6", + "rxjs": "7.8.1", "stripe": "17.3.0", "svgmap": "2.6.0", "twitter-api-v2": "1.14.2", @@ -214,8 +214,5 @@ }, "prisma": { "seed": "node prisma/seed.js" - }, - "resolutions": { - "rxjs": "7.5.6" } } From 04d7792b8b1e75f52104c30ac3db6e838ee3c0f4 Mon Sep 17 00:00:00 2001 From: Ken Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Tue, 21 Jan 2025 23:29:21 +0700 Subject: [PATCH 16/30] Feature/upgrade to date-fns version 4 (#4222) * chore(deps): bump date-fns from 3.6.0 to 4.1.0 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 90fc50422..3aaa47b74 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 language localization for Ukrainian (`uk`) +- Upgraded `date-fns` from version `3.6.0` to `4.1.0` - Upgraded `rxjs` from version `7.5.6` to `7.8.1` ## 2.135.0 - 2025-01-19 diff --git a/package-lock.json b/package-lock.json index 089626e67..875c3cf74 100644 --- a/package-lock.json +++ b/package-lock.json @@ -62,7 +62,7 @@ "countries-and-timezones": "3.7.2", "countries-list": "3.1.1", "countup.js": "2.8.0", - "date-fns": "3.6.0", + "date-fns": "4.1.0", "envalid": "8.0.0", "google-spreadsheet": "3.2.0", "helmet": "7.0.0", @@ -16004,9 +16004,9 @@ } }, "node_modules/date-fns": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", - "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", "license": "MIT", "funding": { "type": "github", diff --git a/package.json b/package.json index d000f38dd..e45b1f665 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "countries-and-timezones": "3.7.2", "countries-list": "3.1.1", "countup.js": "2.8.0", - "date-fns": "3.6.0", + "date-fns": "4.1.0", "envalid": "8.0.0", "google-spreadsheet": "3.2.0", "helmet": "7.0.0", From 39ac6f352fe45bc93362c943c5369928fde6a30a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 22 Jan 2025 19:32:59 +0100 Subject: [PATCH 17/30] Feature/extend get historical in financial modeling prep service (#4229) * Extend get historical * Update changelog --- CHANGELOG.md | 1 + .../financial-modeling-prep.service.ts | 57 ++++++++++++------- 2 files changed, 37 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3aaa47b74..f75a63fc6 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 +- Extended the _Financial Modeling Prep_ service - Improved the language localization for Ukrainian (`uk`) - Upgraded `date-fns` from version `3.6.0` to `4.1.0` - Upgraded `rxjs` from version `7.5.6` to `7.8.1` diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index ac6b5822e..c7550080b 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -29,6 +29,7 @@ import { isISIN } from 'class-validator'; import { countries } from 'countries-list'; import { addDays, + addYears, format, isAfter, isBefore, @@ -273,30 +274,44 @@ export class FinancialModelingPrepService implements DataProviderInterface { }: GetHistoricalParams): Promise<{ [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; }> { + const MAX_YEARS_PER_REQUEST = 5; + const result: { + [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + } = { + [symbol]: {} + }; + + let currentFrom = from; + try { - const { historical } = await fetch( - `${this.URL}/historical-price-full/${symbol}?apikey=${this.apiKey}`, - { - signal: AbortSignal.timeout(requestTimeout) - } - ).then((res) => res.json()); + while (isBefore(currentFrom, to) || isSameDay(currentFrom, to)) { + const currentTo = isBefore( + addYears(currentFrom, MAX_YEARS_PER_REQUEST), + to + ) + ? addYears(currentFrom, MAX_YEARS_PER_REQUEST) + : to; + + const { historical } = await fetch( + `${this.URL}/historical-price-full/${symbol}?apikey=${this.apiKey}&from=${format(currentFrom, DATE_FORMAT)}&to=${format(currentTo, DATE_FORMAT)}`, + { + signal: AbortSignal.timeout(requestTimeout) + } + ).then((res) => res.json()); - const result: { - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; - } = { - [symbol]: {} - }; - - for (const { adjClose, date } of historical) { - if ( - (isSameDay(parseDate(date), from) || - isAfter(parseDate(date), from)) && - isBefore(parseDate(date), to) - ) { - result[symbol][date] = { - marketPrice: adjClose - }; + for (const { adjClose, date } of historical) { + if ( + (isSameDay(parseDate(date), currentFrom) || + isAfter(parseDate(date), currentFrom)) && + isBefore(parseDate(date), currentTo) + ) { + result[symbol][date] = { + marketPrice: adjClose + }; + } } + + currentFrom = addYears(currentFrom, MAX_YEARS_PER_REQUEST); } return result; From 553c10ac91ebdfa27ddfbd945d62f225f1c1d388 Mon Sep 17 00:00:00 2001 From: Miguel Borges de Freitas Date: Wed, 22 Jan 2025 18:55:09 +0000 Subject: [PATCH 18/30] Bugfix/fix issue with MIME type detection in scraper configuration (#4237) * Fix issue with MIME type detection in scraper configuration * Update changelog --- CHANGELOG.md | 4 ++++ apps/api/src/services/data-provider/manual/manual.service.ts | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f75a63fc6..bd9c29aea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Upgraded `date-fns` from version `3.6.0` to `4.1.0` - Upgraded `rxjs` from version `7.5.6` to `7.8.1` +### Fixed + +- Fixed an issue with the MIME type detection in the scraper configuration + ## 2.135.0 - 2025-01-19 ### Changed diff --git a/apps/api/src/services/data-provider/manual/manual.service.ts b/apps/api/src/services/data-provider/manual/manual.service.ts index 108ccbf89..dfda922c6 100644 --- a/apps/api/src/services/data-provider/manual/manual.service.ts +++ b/apps/api/src/services/data-provider/manual/manual.service.ts @@ -282,7 +282,7 @@ export class ManualService implements DataProviderInterface { ) }); - if (response.headers['content-type']?.includes('application/json')) { + if (response.headers.get('content-type')?.includes('application/json')) { const data = await response.json(); const value = String( From 59f0307dcf5badb05f3945112e9657ffabea03c8 Mon Sep 17 00:00:00 2001 From: Ken Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Fri, 24 Jan 2025 02:10:44 +0700 Subject: [PATCH 19/30] Feature/set up GitHub action to extract locales (#4239) * Set up a GitHub action to extract locales when main branch changes * Update changelog --- .github/workflows/extract-locales.yml | 40 +++++++++++++++++++++++++++ CHANGELOG.md | 4 +++ 2 files changed, 44 insertions(+) create mode 100644 .github/workflows/extract-locales.yml diff --git a/.github/workflows/extract-locales.yml b/.github/workflows/extract-locales.yml new file mode 100644 index 000000000..c17eac5b6 --- /dev/null +++ b/.github/workflows/extract-locales.yml @@ -0,0 +1,40 @@ +name: Extract locales + +on: + push: + branches: + - main + +permissions: + contents: write + pull-requests: write + +jobs: + extract_locales: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install dependencies + run: npm ci + + - name: Extract locales + run: npm run extract-locales + + - name: Check changes + id: verify-changed-files + uses: tj-actions/verify-changed-files@v20 + + - name: Create pull request + if: steps.verify-changed-files.outputs.files_changed == 'true' + uses: peter-evans/create-pull-request@v7 + with: + author: 'github-actions[bot] ' + branch: 'feature/update-locales' + commit-message: 'Update locales' + delete-branch: true + title: 'Feature/update locales' + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md index bd9c29aea..047f5a452 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 + +- Set up a _GitHub Action_ to automatically extract locales when the `main` branch changes + ### Changed - Extended the _Financial Modeling Prep_ service From cca26040bf4d5981364c43a10fcd7c3041387647 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 23 Jan 2025 20:53:50 +0100 Subject: [PATCH 20/30] Feature/extend get asset profile in financial modeling prep service (#4230) * Extend get asset profile by ETF website --- .../financial-modeling-prep.service.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index c7550080b..2d42fe21c 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -124,6 +124,19 @@ export class FinancialModelingPrepService implements DataProviderInterface { } ); + const [etfInformation] = await fetch( + `${this.getUrl({ version: 4 })}/etf-info?symbol=${symbol}&apikey=${this.apiKey}`, + { + signal: AbortSignal.timeout( + this.configurationService.get('REQUEST_TIMEOUT') + ) + } + ).then((res) => res.json()); + + if (etfInformation.website) { + response.url = etfInformation.website; + } + const [portfolioDate] = await fetch( `${this.getUrl({ version: 4 })}/etf-holdings/portfolio-date?symbol=${symbol}&apikey=${this.apiKey}`, { From 4b65b6277eaccaa1bfea1ea5a27a30dd485fad4b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 23 Jan 2025 21:43:09 +0100 Subject: [PATCH 21/30] Feature/refresh cryptocurrencies list 20250123 (#4245) * Update cryptocurrencies.json * Update changelog --- CHANGELOG.md | 1 + .../cryptocurrencies/cryptocurrencies.json | 148 +++++++++++++++--- 2 files changed, 129 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 047f5a452..f7d54d785 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Extended the _Financial Modeling Prep_ service - Improved the language localization for Ukrainian (`uk`) +- Refreshed the cryptocurrencies list - Upgraded `date-fns` from version `3.6.0` to `4.1.0` - Upgraded `rxjs` from version `7.5.6` to `7.8.1` diff --git a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json index f77297d07..7d414ef11 100644 --- a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json +++ b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json @@ -41,6 +41,7 @@ "0xVPN": "0xVPN.org", "1-UP": "1-UP", "1000SATS": "SATS", + "1000X": "1000x by Virtuals", "10SET": "Tenset", "1ART": "ArtWallet", "1CAT": "Bitcoin Cats", @@ -212,6 +213,7 @@ "ACM": "AC Milan Fan Token", "ACN": "AvonCoin", "ACOIN": "ACoin", + "ACOLYT": "Acolyte by Virtuals", "ACP": "Anarchists Prime", "ACPT": "Crypto Accept", "ACQ": "Acquire.Fi", @@ -332,6 +334,7 @@ "AGIL": "Agility LSD", "AGIV1": "SingularityNET v1", "AGIX": "SingularityNET", + "AGIXBT": "AGIXBT by Virtuals", "AGLA": "Angola", "AGLD": "Adventure Gold", "AGM": "Argoneum", @@ -363,12 +366,13 @@ "AIBCOIN": "AIBLOCK", "AIBK": "AIB Utility Token", "AIBU": "AIBUZZ TOKEN", - "AIC": "AI Crypto", + "AIC": "AI Companions", "AICELL": "AICell", "AICH": "AIChain", "AICO": "AICON", "AICODE": "AI CODE", "AICORE": "AICORE", + "AICRYPTO": "AI Crypto", "AID": "AidCoin", "AIDA": "Ai-Da robot", "AIDI": "Aidi Inu", @@ -405,6 +409,7 @@ "AINU": "Ainu Token", "AION": "Aion", "AIONE": "AiONE", + "AIOS": "INT OS", "AIOT": "AIOT Token", "AIOZ": "AIOZ Network", "AIPAD": "AIPAD", @@ -438,6 +443,7 @@ "AITRA": "Aitra", "AITT": "AITrading", "AIUS": "Arbius", + "AIVIA": "AI Virtual Agents", "AIWALLET": "AiWallet Token", "AIX": "Aigang", "AIXBT": "aixbt by Virtuals", @@ -617,6 +623,7 @@ "ANDYBSC": "ANDY", "ANDYMAN": "ANDYMAN", "ANDYSOL": "Andy on SOL", + "ANEX": "AstroNexus", "ANGEL": "Crypto Angel", "ANGL": "Angel Token", "ANGLE": "ANGLE", @@ -743,13 +750,14 @@ "ARBS": "Arbswap", "ARBT": "ARBITRAGE", "ARBUZ": "ARBUZ", - "ARC": "Arc", + "ARC": "AI Rig Complex", "ARCA": "Legend of Arcadia", "ARCAD": "Arcadeum", "ARCADE": "ARCADE", "ARCADECITY": "Arcade City", "ARCADEF": "arcadefi", "ARCADEN": "ArcadeNetwork", + "ARCAI": "ARCAI", "ARCANE": "Arcane Token", "ARCAS": "Arcas", "ARCH": "Archway", @@ -757,6 +765,7 @@ "ARCHCOIN": "ArchCoin", "ARCHE": "Archean", "ARCHIVE": "Chainback", + "ARCINTEL": "Arc", "ARCO": "AquariusCoin", "ARCONA": "Arcona", "ARCT": "ArbitrageCT", @@ -1272,6 +1281,7 @@ "BASEDP": "Based Pepe", "BASEDR": "Based Rabbit", "BASEDS": "BasedSwap", + "BASEDTURBO": "Based Turbo", "BASEDV1": "Based Money v1", "BASEHEROES": "Baseheroes", "BASEPROTOCOL": "Base Protocol", @@ -1393,6 +1403,7 @@ "BDID": "BDID", "BDL": "Bitdeal", "BDOG": "Bulldog Token", + "BDOGITO": "BullDogito", "BDOT": "Binance Wrapped DOT", "BDP": "Big Data Protocol", "BDPI": "Interest Bearing Defi Pulse Index", @@ -1513,6 +1524,7 @@ "BFT": "BF Token", "BFTB": "Brazil Fan Token", "BFTC": "BITS FACTOR", + "BFWOG": "Based Fwog (basedfwog.info)", "BFX": "BitFinex Tokens", "BG": "BunnyPark Game", "BGB": "Bitget token", @@ -1591,7 +1603,7 @@ "BINS": "Bitsense", "BINTEX": "Bintex Futures", "BINU": "Blast Inu", - "BIO": "BITONE", + "BIO": "Bio Protocol", "BIOB": "BioBar", "BIOC": "BioCrypt", "BIOCOIN": "Biocoin", @@ -1646,6 +1658,7 @@ "BITNEW": "BitNewChain", "BITO": "BitoPro Exchange Token", "BITOK": "BitOKX", + "BITONE": "BITONE", "BITORB": "BitOrbit", "BITRA": "Bitratoken", "BITRADIO": "Bitradio", @@ -2015,6 +2028,7 @@ "BOSU": "Bosu Inu", "BOT": "Bot Planet", "BOTC": "BotChain", + "BOTIFY": "BOTIFY", "BOTS": "ArkDAO", "BOTTO": "Botto", "BOTX": "BOTXCOIN", @@ -2144,6 +2158,7 @@ "BROTHER": "BROTHER", "BROWN": "BrowniesSwap", "BROZ": "Brozinkerbell", + "BRP": "BananaRepublic", "BRRR": "Burrow", "BRS": "Broovs Projects", "BRT": "Bikerush", @@ -2288,6 +2303,7 @@ "BTNYX": "BitOnyx Token", "BTO": "Bottos", "BTOP": "Botopia.Finance", + "BTORO": "Bitoro Network", "BTP": "Bitpaid", "BTPL": "Bitcoin Planet", "BTQ": "BitQuark", @@ -2577,6 +2593,7 @@ "CATELON": "CatElonMars", "CATEX": "CATEX", "CATFISH": "Catfish", + "CATG": "Crypto Agent Trading", "CATGAME": "Cookie Cat Game", "CATGIRL": "Catgirl", "CATGOKU": "Catgoku", @@ -2789,6 +2806,7 @@ "CHAT": "Solchat", "CHATAI": "ChatAI Token", "CHATGPT": "AI Dragon", + "CHATOSHI": "chAtoshI", "CHATTY": "ChatGPT's Mascot", "CHB": "COINHUB TOKEN", "CHBR": "CryptoHub", @@ -2993,6 +3011,7 @@ "CLU": "CluCoin", "CLUB": "ClubCoin", "CLUD": "CludCoin", + "CLUSTR": "Clustr Labs", "CLV": "Clover Finance", "CLVA": "Clever DeFi", "CLVX": "Calvex", @@ -3337,6 +3356,7 @@ "CROWD": "CrowdCoin", "CROWDWIZ": "Crowdwiz", "CROWN": "Crown by Third Time Games", + "CROWWITH": "crow with knife", "CROX": "CroxSwap", "CRP": "Crypton", "CRPS": "CryptoPennies", @@ -3793,6 +3813,7 @@ "DEER": "ToxicDeer Finance", "DEEX": "DEEX", "DEEZ": "DEEZ NUTS", + "DEFAI": "DeFAI", "DEFC": "Defi Coin", "DEFEND": "Blockdefend AI", "DEFI": "DeFi", @@ -3980,6 +4001,7 @@ "DIGI": "Digiverse", "DIGIC": "DigiCube", "DIGIF": "DigiFel", + "DIGIMON": "Digimon", "DIGIT": "Digital Asset Rights Token", "DIGITAL": "Digital Reserve Currency", "DIGITS": "Digits DAO", @@ -4327,6 +4349,7 @@ "DRS": "Digital Rupees", "DRT": "DomRaider", "DRUGS": "Big Pharmai", + "DRV": "Derive", "DRXNE": "Droxne", "DRZ": "Droidz", "DS": "DeStorage", @@ -4386,6 +4409,7 @@ "DUC": "DucatusCoin", "DUCATO": "Ducato Protocol Token", "DUCK": "Unit Protocol New", + "DUCKAI": "Duck AI", "DUCKC": "DuckCoin", "DUCKD": "DuckDuckCoin", "DUCKER": "Ducker", @@ -4463,6 +4487,7 @@ "DYAD": "Dyad Stable", "DYC": "Dycoin", "DYDX": "dYdX", + "DYDXV1": "dYdX v1", "DYM": "Dymension", "DYN": "Dynamic", "DYNA": "Dynamix", @@ -4622,7 +4647,8 @@ "EGI": "eGame", "EGL": "The Eagle Of Truth", "EGLD": "eGold", - "EGO": "EGOcoin", + "EGO": "Paysenger EGO", + "EGOCOIN": "EGOcoin", "EGOD": "EgodCoin", "EGOLD": "EGOLD", "EGON": "EgonCoin", @@ -4722,7 +4748,6 @@ "ELUSKMON": "Elusk Mon", "ELV": "Elvantis", "ELVN": "11Minutes", - "ELX": "Energy Ledger", "ELY": "Elysian", "ELYS": "Elys Network", "ELYSIUM": "Elysium", @@ -4773,6 +4798,7 @@ "ENE": "EneCoin", "ENEAR": "Near (Energiswap)", "ENEDEX": "Enedex", + "ENERGYLEDGER": "Energy Ledger", "ENERGYX": "Safe Energy", "ENG": "Enigma", "ENGT": "Engagement Token", @@ -5003,6 +5029,7 @@ "EVAI": "EVA Intelligence", "EVAN": "Evanesco Network", "EVAULT": "EthereumVault", + "EVAV1": "Evadore v1", "EVC": "Eventchain", "EVCC": "Eco Value Coin", "EVCOIN": "EverestCoin", @@ -5111,10 +5138,11 @@ "FADO": "FADO Go", "FAG": "PoorFag", "FAH": "Falcons", - "FAI": "Fairum", + "FAI": "Freysa AI", "FAIR": "FairCoin", "FAIRC": "Faireum Token", "FAIRG": "FairGame", + "FAIRUM": "Fairum", "FAKE": "FAKE COIN", "FAKEAI": "DeepFakeAI", "FAKT": "Medifakt", @@ -5633,7 +5661,8 @@ "FUBAO": "FUBAO", "FUCK": "Fuck Token", "FUD": "FUD.finance", - "FUEL": "Jetfuel Finance", + "FUEGO": "FUEGO", + "FUEL": "Fuel Network", "FUELX": "Fuel", "FUFU": "Fufu Token", "FUG": "FUG", @@ -5754,6 +5783,7 @@ "GAMEST": "GameStop Coin", "GAMESTARS": "Game Stars", "GAMESTO": "GameStop", + "GAMESTOP": "GameStop", "GAMESTUMP": "GAMESTUMP", "GAMET": "GAME Token", "GAMEX": "GameX", @@ -5978,6 +6008,7 @@ "GINGER": "GINGER", "GINNAN": "Ginnan The Cat", "GINOA": "Ginoa", + "GINU": "Green Shiba Inu", "GINUX": "Green Shiba Inu", "GINZA": "GINZA NETWORK", "GIO": "Graviocoin", @@ -6546,6 +6577,9 @@ "HEM": "Hemera", "HEMAN": "HE-MAN", "HEMULE": "Hemule", + "HENG": "HengCoin", + "HENLO": "Henlo", + "HENLOV1": "Henlo v1", "HEP": "Health Potion", "HER": "Hero Node", "HERA": "Hero Arena", @@ -6652,6 +6686,8 @@ "HLINK": "Chainlink (Harmony One Bridge)", "HLM": "Helium", "HLN": "Holonus", + "HLO": "Halo", + "HLOV1": "Halo v1", "HLP": "Purpose Coin", "HLPR": "HELPER COIN", "HLPT": "HLP Token", @@ -6777,6 +6813,7 @@ "HSAI": "HealthSci.AI", "HSC": "HashCoin", "HSF": "Hillstone Finance", + "HSK": "HashKey Platform Token", "HSN": "Hyper Speed Network", "HSP": "Horse Power", "HSS": "Hashshare", @@ -6792,6 +6829,7 @@ "HTDF": "Orient Walt", "HTE": "Hepton", "HTER": "Biogen", + "HTERM": "Hiero Terminal", "HTK": "Hard To Kill", "HTM": "Hatom", "HTML": "HTML Coin", @@ -6816,6 +6854,7 @@ "HUM": "Humanscape", "HUMAI": "Humanoid AI", "HUMP": "Hump", + "HUMV1": "Humanscape v1", "HUND": "HUND MEME COIN", "HUNDRED": "HUNDRED", "HUNNY": "Pancake Hunny", @@ -6952,6 +6991,7 @@ "IDO": "Idexo", "IDOL": "IDOLINU", "IDORU": "Vip2Fan", + "IDRISS": "IDRISS", "IDRT": "Rupiah Token", "IDRX": "IDRX", "IDT": "InvestDigital", @@ -7309,10 +7349,12 @@ "JET": "Jet Protocol", "JETCAT": "Jetcat", "JETCOIN": "Jetcoin", + "JETFUEL": "Jetfuel Finance", "JETTON": "JetTon Game", "JEUR": "Jarvis Synthetic Euro", "JEW": "Shekel", "JEWEL": "DeFi Kingdoms", + "JEWELRY": "Jewelry Token", "JEX": "JEX Token", "JF": "Jswap.Finance", "JFI": "JackPool.finance", @@ -7347,6 +7389,7 @@ "JMT": "JMTIME", "JMZ": "Jimizz", "JNB": "Jinbi Token", + "JNFTC": "Jumbo Blockchain", "JNGL": "Jungle Labz", "JNS": "Janus", "JNT": "Jibrel Network Token", @@ -7358,6 +7401,7 @@ "JOE": "JOE", "JOEB": "Joe Biden", "JOEBIDEN2024 ": "JOEBIDEN2024", + "JOECOIN": "Joe Coin", "JOEY": "Joey Inu", "JOGECO": "Jogecodog", "JOHM": "Johm lemmon", @@ -7556,6 +7600,7 @@ "KEK": "KekCoin", "KEKE": "KEK", "KEKEC": "THE BALKAN DWARF", + "KEKIUS": "Kekius Maximus", "KEL": "KelVPN", "KELP": "KELP", "KELPE": "Kelp Earned Points", @@ -7576,6 +7621,9 @@ "KET": "KET", "KETAMINE": "Ketamine", "KETAN": "Ketan", + "KEVIN": "Kevin (kevinonbase.xyz)", + "KEVINTOKENME": "KEVIN (kevintoken.me)", + "KEVINTOKENNET": "Kevin", "KEX": "Kira Network", "KEXCOIN": "KexCoin", "KEY": "SelfKey", @@ -7605,6 +7653,7 @@ "KICKS": "GetKicks", "KIDEN": "RoboKiden", "KIF": "KittenFinance", + "KIKI": "Kiki Flaminki", "KIKO": "KIKO", "KILLA": "The Bitcoin Killa", "KILLER": "Fat Cat Killer", @@ -7724,6 +7773,7 @@ "KOGE": "BNB48 Club Token", "KOGECOIN": "KogeCoin.io", "KOI": "Koi", + "KOII": "Koii", "KOIN": "Koinos", "KOINB": "KoinBülteni Token", "KOINETWORK": "Koi Network", @@ -7823,6 +7873,7 @@ "KUBE": "KubeCoin", "KUBO": "KUBO", "KUBOS": "KubosCoin", + "KUDAI": "Kudai", "KUE": "Kuende", "KUJI": "Kujira", "KUKU": "KuKu", @@ -7867,6 +7918,7 @@ "KZC": "KZCash", "KZEN": "Kaizen", "L": "L inu", + "L1": "Lamina1", "L2": "Leverj Gluon", "L2DAO": "Layer2DAO", "L3": "Layer3", @@ -7928,7 +7980,8 @@ "LATX": "Latium", "LAUGHCOIN": "Laughcoin", "LAUNCH": "Launchblock.com", - "LAVA": "Lavaswap", + "LAVA": "Lava Network", + "LAVASWAP": "Lavaswap", "LAVAX": "LavaX Labs", "LAVE": "Lavandos", "LAVITA": "Lavita AI", @@ -7992,6 +8045,7 @@ "LEE": "Love Earn Enjoy", "LEET": "LeetSwap", "LEG": "Legia Warsaw Fan Token", + "LEGEND": "Legend", "LEGION": "LEGION", "LEGO": "Lego Coin", "LEIA": "Leia", @@ -8093,6 +8147,7 @@ "LIGHTSPEED": "LightSpeedCoin", "LIGMA": "Ligma Node", "LIGO": "Ligo", + "LIHUA": "LIHUA", "LIKE": "Only1", "LIKEC": "LikeCoin", "LILA": "LiquidLayer", @@ -8100,6 +8155,7 @@ "LILFLOKI": "Lil Floki", "LILPUMP": "lilpump", "LILY": "LILY-The Gold Digger", + "LIMBO": "Limbo", "LIME": "iMe Lab", "LIMEX": "Limestone Network", "LIMITEDCOIN": "Limited Coin", @@ -8167,6 +8223,7 @@ "LLAND": "Lyfe Land", "LLG": "Loligo", "LLION": "Lydian Lion", + "LLM": "Large Language Model Based", "LLT": "LILLIUS", "LM": "LeisureMeta", "LMAO": "LMAO Finance", @@ -8366,6 +8423,7 @@ "LUFFY": "Luffy", "LUFFYG": "Luffy G5", "LUFFYOLD": "Luffy", + "LUFFYV1": "Luffy v1", "LUIGI": "Luigi Inu", "LUIS": "Tongue Cat", "LULU": "LULU", @@ -8394,7 +8452,8 @@ "LUSH": "Lush AI", "LUT": "Cinemadrom", "LUTETIUM": "Lutetium Coin", - "LUX": "LUXCoin", + "LUX": "Lux Token", + "LUXCOIN": "LUXCoin", "LUXO": "Luxo", "LUXU": "Luxury Travel Token", "LUXY": "Luxy", @@ -8449,6 +8508,7 @@ "MADAGASCARTOKEN": "Madagascar Token", "MADANA": "MADANA", "MADC": "MadCoin", + "MADCOIN": "MAD", "MADH": "Madhouse", "MADOG": "MarvelDoge", "MADP": "Mad Penguin", @@ -8456,13 +8516,14 @@ "MAEP": "Maester Protocol", "MAF": "MetaMAFIA", "MAG": "Magnify Cash", - "MAGA": "MAGA Hat", + "MAGA": "MAGA", "MAGA2024": "MAGA2024", "MAGAA": "MAGA AGAIN", "MAGAC": "MAGA CAT", "MAGACA": "MAGA CAT", "MAGACAT": "MAGACAT", "MAGADOGE": "MAGA DOGE", + "MAGAHAT": "MAGA Hat", "MAGAIBA": "Magaiba", "MAGAN": "Maganomics On Solana", "MAGANOMICS": "Maganomics", @@ -8577,6 +8638,7 @@ "MATAR": "MATAR AI", "MATCH": "Matching Game", "MATE": "Mate", + "MATES": "MATES", "MATH": "MATH", "MATIC": "Polygon", "MATICX": "Stader MaticX", @@ -8607,6 +8669,7 @@ "MAZI": "MaziMatic", "MAZZE": "Mazze", "MB": "MineBee", + "MB28": "MBridge28", "MB4": "Matthew Box 404", "MB8": "MB8 Coin", "MBAG": "MoonBag", @@ -8741,7 +8804,8 @@ "MEI": "Mei Solutions", "MEIZHU": "GUANGZHOU ZOO NEW BABY PANDA", "MEL": "MELX", - "MELANIA": "Melania Trump", + "MELANIA": "Melania Meme", + "MELANIATRUMP": "Melania Trump", "MELB": "Minelab", "MELD": "MELD", "MELI": "Meli Games", @@ -8819,6 +8883,7 @@ "METAF": "MetaFastest", "METAG": "MetagamZ", "METAGEAR": "MetaGear", + "METAIVERSE": "MetAIverse", "METAL": "Metal Blockchain", "METALCOIN": "MetalCoin", "METAMEME": "met a meta metameme", @@ -9732,6 +9797,7 @@ "NEXXO": "Nexxo", "NEZHA": "NezhaToken", "NFAI": "Not Financial Advice", + "NFAIV1": "Not Financial Advice v1", "NFCR": "NFCore", "NFD": "Feisty Doge NFT", "NFE": "Edu3Labs", @@ -9857,6 +9923,7 @@ "NOBS": "No BS Crypto", "NOCHILL": "AVAX HAS NO CHILL", "NODE": "Whole Network", + "NODESYNAPSE": "NodeSynapse", "NODIDDY": "NODIDDY", "NODIS": "Nodis", "NODL": "Nodle Network", @@ -9928,7 +9995,7 @@ "NRV": "Nerve Finance", "NRVE": "Narrative", "NRX": "Neironix", - "NS": "NodeSynapse", + "NS": "SuiNS Token", "NS2DRP": "New Silver Series 2 DROP", "NSBT": "Neutrino Token", "NSD": "Nasdacoin", @@ -10620,7 +10687,8 @@ "PEGAMAGA": "Pepe Maga", "PEGG": "PokPok Golden Egg", "PEGS": "PegShares", - "PEIPEI": "PEIPEI", + "PEIPEI": "PeiPei", + "PEIPEICN": "PEIPEI", "PEKA": "PEKA", "PEKC": "Peacock Coin", "PEKINU": "PEKI INU", @@ -10891,6 +10959,7 @@ "PLANET": "PLANET", "PLANETCOIN": "PlanetCoin", "PLANETS": "PlanetWatch", + "PLANT": "Plant", "PLASTIK": "Plastiks", "PLAT": "BitGuild PLAT", "PLATC": "PlatinCoin", @@ -10941,6 +11010,7 @@ "PLU": "Pluton", "PLUG": "PL^Gnet", "PLUGCN": "Plug Chain", + "PLUME": "Plume", "PLUP": "PoolUp", "PLURA": "PluraCoin", "PLUS1": "PlusOneCoin", @@ -11118,6 +11188,7 @@ "PPAY": "Plasma Finance", "PPBLZ": "Pepemon Pepeballs", "PPC": "PeerCoin", + "PPCOIN": "Project Plutus", "PPFT": "Papparico Finance", "PPI": "Primpy", "PPIZZA": "P Pizza", @@ -11285,6 +11356,7 @@ "PUMP": "PUMP", "PUMPBTC": "pumpBTC", "PUMPFUNBAN": "Pump Fun Ban", + "PUMPTRUMP": "PUMP TRUMP", "PUN": "Punkko", "PUNCH": "PUNCHWORD", "PUNDIX": "Pundi X", @@ -11360,6 +11432,7 @@ "PYRV1": "Vulcan Forged v1", "PYT": "Payther", "PYTH": "Pyth Network", + "PYTHIA": "Pythia", "PYUSD": "PayPal USD", "PZETH": "pzETH", "PZM": "Prizm", @@ -11683,6 +11756,7 @@ "RENQ": "Renq Finance", "RENS": "Rens", "RENT": "Rent AI", + "RENTA": "Renta Network", "RENTBE": "Rentberry", "REP": "Augur", "REPE": "Resistance Pepe", @@ -11766,6 +11840,7 @@ "RIDEMY": "Ride My Car", "RIF": "RIF Token", "RIF3": "MetaTariffv3", + "RIFA": "Rifampicin", "RIFI": "Rikkei Finance", "RIGEL": "Rigel Finance", "RIK": "RIKEZA", @@ -11952,6 +12027,7 @@ "RSUN": "RisingSun", "RSUSHI": "Sushi (Rainbow Bridge)", "RSV": "Reserve", + "RSVV1": "Reserve v1", "RSWETH": "Restaked Swell Ethereum", "RT2": "RotoCoin", "RTB": "AB-CHAIN", @@ -11999,6 +12075,8 @@ "RUX": "Gacrux NFT", "RVC": "Revenue Coin", "RVF": "RocketX exchange", + "RVFV1": "RocketX exchange v1", + "RVFV2": "RocketX exchange v2", "RVL": "Revolotto", "RVLNG": "RevolutionGames", "RVLT": "Revolt 2 Earn", @@ -12170,7 +12248,7 @@ "SBTC": "Super Bitcoin", "SC": "Siacoin", "SC20": "Shine Chain", - "SCA": "SiaClassic", + "SCA": "Scallop", "SCALE": "Scalia Infrastructure", "SCAM": "Scam Coin", "SCAMP": "ScamPump", @@ -12244,8 +12322,10 @@ "SDAO": "SingularityDAO", "SDC": "ShadowCash", "SDCRV": "Stake DAO CRV", + "SDEUSD": "Staked deUSD", "SDEX": "SmarDex", "SDL": "Saddle Finance", + "SDM": "Shieldeum", "SDME": "SDME", "SDN": "Shiden Network", "SDO": "TheSolanDAO", @@ -12311,6 +12391,7 @@ "SENSOV1": "SENSO v1", "SENSUS": "Sensus", "SENT": "Sentinel", + "SENTAI": "SentAI", "SENTI": "Sentinel Bot Ai", "SENTR": "Sentre Protocol", "SEON": "Seedon", @@ -12519,6 +12600,7 @@ "SHX": "Stronghold Token", "SHYTCOIN": "ShytCoin", "SI": "Siren", + "SIACLASSIC": "SiaClassic", "SIB": "SibCoin", "SIBA": "SibaInu", "SIC": "Swisscoin", @@ -12552,6 +12634,7 @@ "SILVERSTAND": "Silver Standard", "SILVERWAY": "Silverway", "SIM": "Simpson", + "SIMBA": "SIMBA The Sloth", "SIMP": "SO-COL", "SIMPLE": "SimpleChain", "SIMPS": "Simpson MAGA", @@ -12715,6 +12798,7 @@ "SMLY": "SmileyCoin", "SMM": "TrendingTool.io", "SMOG": "Smog", + "SMOK": "Smoking Chicken Fish", "SMOKE": "Smoke", "SMOL": "Smolcoin", "SMOLE": "smolecoin", @@ -12741,6 +12825,7 @@ "SNA": "SUKUYANA", "SNAC": "SnackboxAI", "SNACK": "Crypto Snack", + "SNAI": "SwarmNode.ai", "SNAIL": "SnailBrook", "SNAKE": "snake", "SNAKES": "Snakes Game", @@ -12817,7 +12902,8 @@ "SOFTCO": "SOFT COQ INU", "SOH": "Stohn Coin", "SOHOT": "SOHOTRN", - "SOIL": "SoilCoin", + "SOIL": "Soil", + "SOILCOIN": "SoilCoin", "SOJ": "Sojourn Coin", "SOK": "shoki", "SOKU": "Soku Swap", @@ -12877,6 +12963,7 @@ "SOLSPONGE": "Solsponge", "SOLT": "Soltalk AI", "SOLTR": "SolTrump", + "SOLV": "Solv Protocol", "SOLVBTC": "Solv Protocol SolvBTC", "SOLVBTCBBN": "Solv Protocol SolvBTC.BBN", "SOLVBTCCORE": "Solv Protocol SolvBTC.CORE", @@ -12971,6 +13058,7 @@ "SPENDC": "SpendCoin", "SPENT": "Espento", "SPEPE": "SolanaPepe", + "SPERG": "Bloomsperg Terminal", "SPEX": "StepEx", "SPF": "SportyCo", "SPFC": "São Paulo FC Fan Token", @@ -13040,6 +13128,7 @@ "SPY": "Smarty Pay", "SPYRO": "SPYRO", "SQAT": "Syndiqate", + "SQD": "SQD", "SQG": "Squid Token", "SQGROW": "SquidGrow", "SQL": "Squall Coin", @@ -13296,6 +13385,7 @@ "SUIA": "SUIA", "SUIAI": "SUI Agents", "SUIB": "Suiba Inu", + "SUIDEPIN": "Sui DePIN", "SUIJAK": "Suijak", "SUILAMA": "Suilama", "SUIMAN": "Suiman", @@ -13385,6 +13475,7 @@ "SWAPP": "SWAPP Protocol", "SWAPZ": "SWAPZ.app", "SWARM": "SwarmCoin", + "SWARMS": "Swarms", "SWASH": "Swash", "SWAY": "Sway Social", "SWBTC": "Swell Restaked BTC", @@ -13449,6 +13540,7 @@ "SYLO": "Sylo", "SYLV": "Sylvester", "SYM": "SymVerse", + "SYMP": "Sympson AI", "SYN": "Synapse", "SYNC": "Syncus", "SYNCC": "SyncCoin", @@ -13462,7 +13554,8 @@ "SYNR": "MOBLAND", "SYNT": "Synthetix Network", "SYNTE": "Synternet", - "SYNTH": "Synthswap", + "SYNTH": "SYNTHR", + "SYNTHSWAP": "Synthswap", "SYNX": "Syndicate", "SYPOOL": "Sypool", "SYRUP": "Syrup", @@ -13679,7 +13772,6 @@ "THAVAGE": "Mike Tython", "THC": "The Hempcoin", "THD": "Trump Harris Debate", - "THE": "The Protocol", "THE9": "THE9", "THEAICOIN": "AI", "THEB": "The Boys Club", @@ -13697,7 +13789,9 @@ "THEN": "THENA", "THEO": "Theopetra", "THEOS": "Theos", + "THEP": "The Protocol", "THES": "The Standard Protocol (USDS)", + "THESTANDARD": "Standard Token", "THETA": "Theta Network", "THETAN": "Thetan Coin", "THETRIBE": "The Tribe", @@ -13751,7 +13845,8 @@ "TIM": "TIMTIM GAMES", "TIME": "Chrono.tech", "TIMES": "DARKTIMES", - "TIMI": "Timicoin", + "TIMI": "This Is My Iguana", + "TIMICOIN": "Timicoin", "TIN": "Token IN", "TINC": "Tiny Coin", "TINKU": "TinkuCoin", @@ -14023,7 +14118,7 @@ "TRUM": "TrumpBucks", "TRUMAGA": "TrumpMAGA", "TRUMATIC": "TruFin Staked MATIC", - "TRUMP": "MAGA", + "TRUMP": "OFFICIAL TRUMP", "TRUMP2": "Trump2024", "TRUMP2024": "Donald Trump", "TRUMP3": "Trump MP3", @@ -14048,7 +14143,8 @@ "TRUMPHAT": "Trump Hat", "TRUMPINU": "Trump Inu", "TRUMPJ": "TRUMPJR", - "TRUMPJR": "TrumpJr", + "TRUMPJR": "OFFICIAL TRUMP JR", + "TRUMPJRVIP": "TrumpJr", "TRUMPM": "TRUMP MAGA PRESIDENT", "TRUMPMA": "TRUMP MAGA SUPER", "TRUMPMAGA": "President Trump MAGA", @@ -14094,6 +14190,7 @@ "TSLT": "Tamkin", "TSN": "Tsunami Exchange Token", "TSR": "Tesra", + "TST": "Teleport System Token", "TSUBASAUT": "TSUBASA Utility Token", "TSUGT": "Captain Tsubasa", "TSUJI": "Tsutsuji", @@ -14234,6 +14331,7 @@ "UETL": "Useless Eth Token Lite", "UFARM": "UniFarm", "UFC": "Union Fair Coin", + "UFD": "Unicorn Fart Dust", "UFFYI": "Unlimited FiscusFYI", "UFI": "PureFi", "UFO": "UFO Gaming", @@ -14306,6 +14404,7 @@ "UNICORN": "UNICORN Token", "UNIDEXAI": "UniDexAI", "UNIDX": "UniDex", + "UNIDXV1": "UniDex v1", "UNIE": "Uniswap Protocol Token (Avalanche Bridge)", "UNIETH": "Universal ETH", "UNIFY": "Unify", @@ -14376,6 +14475,7 @@ "USCC": "USC", "USCOIN": "USCoin", "USD0": "Usual", + "USD1": "USD1", "USD3": "Web 3 Dollar", "USDA": "USDA", "USDAP": "Bond Appetite USD", @@ -14447,6 +14547,7 @@ "USTCW": "TerraClassicUSD Wormhole", "USTX": "UpStableToken", "USUAL": "Usual", + "USUALX": "USUALx", "USV": "Universal Store of Value", "USX": "USX Quantum", "USYC": "Hashnote USYC", @@ -15194,6 +15295,7 @@ "WORX": "Worx", "WOS": "Wolf Of Solana", "WOT": "World Of Trump", + "WOULD": "would", "WOW": "WOWswap", "WOWS": "Wolves of Wall Street", "WOZX": "Efforce", @@ -15241,6 +15343,7 @@ "WSTORV1": "StorageChain v1", "WSTR": "Wrapped Star", "WSTUSDT": "wstUSDT", + "WSTUSR": "Resolv wstUSR", "WSX": "WeAreSatoshi", "WT": "WeToken", "WTAO": "Wrapped TAO", @@ -15260,6 +15363,7 @@ "WUF": "WUFFI", "WUK": "WUKONG", "WUKONG": "Sun Wukong", + "WULFY": "Wulfy", "WUSD": "Worldwide USD", "WUST": "Wrapped UST Token", "WVG0": "Wrapped Virgin Gen-0 CryptoKittties", @@ -15721,6 +15825,8 @@ "YIELD": "Yield Protocol", "YIELDX": "Yield Finance", "YIKES": "Yikes Dog", + "YILONG": "Yi Long Ma", + "YILONGMA": "Chinese Elon Musk", "YIN": "YIN Finance", "YINBI": "Yinbi", "YLAY": "Yelay", @@ -15729,6 +15835,7 @@ "YLDY": "Yieldly", "YMC": "YamahaCoin", "YMS": "Yeni Malatyaspor Token", + "YNE": "yesnoerror", "YNETH": "YieldNest Restaked ETH", "YO": "Yobit Token", "YOBASE": "All Your Base", @@ -15920,6 +16027,7 @@ "ZKDX": "ZKDX", "ZKE": "zkEra Finance", "ZKEVM": "zkEVMChain (BSC)", + "ZKEX": "zkExchange", "ZKF": "ZKFair", "ZKGROK": "ZKGROK", "ZKGUN": "zkGUN", From 512b84016c6a8dda0844b549780c7d73f7c0b298 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Tom=C3=A1s=20Fern=C3=A1ndez=20Mart=C3=ADn?= Date: Fri, 24 Jan 2025 19:39:24 +0100 Subject: [PATCH 22/30] Bugfix/fix issue with detection of thousand separator by locale (#4243) * Fix issue with detection of thousand separator by locale * Update changelog --- CHANGELOG.md | 1 + libs/common/src/lib/helper.spec.ts | 82 +++++++++++++++++++++++++++++- libs/common/src/lib/helper.ts | 4 +- 3 files changed, 85 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7d54d785..684b9d647 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Fixed an issue with the detection of the thousand separator by locale - Fixed an issue with the MIME type detection in the scraper configuration ## 2.135.0 - 2025-01-19 diff --git a/libs/common/src/lib/helper.spec.ts b/libs/common/src/lib/helper.spec.ts index 1126c3573..25779cf39 100644 --- a/libs/common/src/lib/helper.spec.ts +++ b/libs/common/src/lib/helper.spec.ts @@ -1,4 +1,7 @@ -import { extractNumberFromString } from '@ghostfolio/common/helper'; +import { + extractNumberFromString, + getNumberFormatGroup +} from '@ghostfolio/common/helper'; describe('Helper', () => { describe('Extract number from string', () => { @@ -32,8 +35,85 @@ describe('Helper', () => { ).toEqual(99999.99); }); + it('Get decimal number (comma notation) for locale where currency is not grouped by default', () => { + expect( + extractNumberFromString({ locale: 'es-ES', value: '999,99' }) + ).toEqual(999.99); + }); + it('Not a number', () => { expect(extractNumberFromString({ value: 'X' })).toEqual(NaN); }); }); + + describe('Get number format group', () => { + let languageGetter: jest.SpyInstance; + + beforeEach(() => { + languageGetter = jest.spyOn(window.navigator, 'language', 'get'); + }); + + it('Get de-CH number format group', () => { + expect(getNumberFormatGroup('de-CH')).toEqual('’'); + }); + + it('Get de-CH number format group when it is default', () => { + languageGetter.mockReturnValue('de-CH'); + expect(getNumberFormatGroup()).toEqual('’'); + }); + + it('Get de-DE number format group', () => { + expect(getNumberFormatGroup('de-DE')).toEqual('.'); + }); + + it('Get de-DE number format group when it is default', () => { + languageGetter.mockReturnValue('de-DE'); + expect(getNumberFormatGroup()).toEqual('.'); + }); + + it('Get en-GB number format group', () => { + expect(getNumberFormatGroup('en-GB')).toEqual(','); + }); + + it('Get en-GB number format group when it is default', () => { + languageGetter.mockReturnValue('en-GB'); + expect(getNumberFormatGroup()).toEqual(','); + }); + + it('Get en-US number format group', () => { + expect(getNumberFormatGroup('en-US')).toEqual(','); + }); + + it('Get en-US number format group when it is default', () => { + languageGetter.mockReturnValue('en-US'); + expect(getNumberFormatGroup()).toEqual(','); + }); + + it('Get es-ES number format group', () => { + expect(getNumberFormatGroup('es-ES')).toEqual('.'); + }); + + it('Get es-ES number format group when it is default', () => { + languageGetter.mockReturnValue('es-ES'); + expect(getNumberFormatGroup()).toEqual('.'); + }); + + it('Get ru-RU number format group', () => { + expect(getNumberFormatGroup('ru-RU')).toEqual(' '); + }); + + it('Get ru-RU number format group when it is default', () => { + languageGetter.mockReturnValue('ru-RU'); + expect(getNumberFormatGroup()).toEqual(' '); + }); + + it('Get zh-CN number format group', () => { + expect(getNumberFormatGroup('zh-CN')).toEqual(','); + }); + + it('Get zh-CN number format group when it is default', () => { + languageGetter.mockReturnValue('zh-CN'); + expect(getNumberFormatGroup()).toEqual(','); + }); + }); }); diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index dd07c23fa..bd0c74189 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -251,7 +251,9 @@ export function getNumberFormatDecimal(aLocale?: string) { } export function getNumberFormatGroup(aLocale = getLocale()) { - const formatObject = new Intl.NumberFormat(aLocale).formatToParts(9999.99); + const formatObject = new Intl.NumberFormat(aLocale, { + useGrouping: true + }).formatToParts(9999.99); return formatObject.find((object) => { return object.type === 'group'; From 4cb4375514f20174198fa1be7a9fa96aa6da2edd Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 24 Jan 2025 19:47:50 +0100 Subject: [PATCH 23/30] Bugfix/fix issue with holdings and sectors while using symbol profile overrides (#4234) * Fix issue with holdings and sectors while using symbol profile overrides * Update changelog --- CHANGELOG.md | 1 + .../symbol-profile/symbol-profile.service.ts | 64 +++++++++++-------- .../src/lib/interfaces/holding.interface.ts | 2 +- 3 files changed, 39 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 684b9d647..b60940bd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed an issue with the detection of the thousand separator by locale +- Fixed an issue with holdings and sectors while using symbol profile overrides - Fixed an issue with the MIME type detection in the scraper configuration ## 2.135.0 - 2025-01-19 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 eb8778c34..df0526d9f 100644 --- a/apps/api/src/services/symbol-profile/symbol-profile.service.ts +++ b/apps/api/src/services/symbol-profile/symbol-profile.service.ts @@ -177,9 +177,13 @@ export class SymbolProfileService { symbolProfile?.countries as unknown as Prisma.JsonArray ), dateOfFirstActivity: undefined as Date, - holdings: this.getHoldings(symbolProfile), + holdings: this.getHoldings( + symbolProfile?.holdings as unknown as Prisma.JsonArray + ), scraperConfiguration: this.getScraperConfiguration(symbolProfile), - sectors: this.getSectors(symbolProfile), + sectors: this.getSectors( + symbolProfile?.sectors as unknown as Prisma.JsonArray + ), symbolMapping: this.getSymbolMapping(symbolProfile) }; @@ -209,8 +213,9 @@ export class SymbolProfileService { (item.SymbolProfileOverrides.holdings as unknown as Holding[]) ?.length > 0 ) { - item.holdings = item.SymbolProfileOverrides - .holdings as unknown as Holding[]; + item.holdings = this.getHoldings( + item.SymbolProfileOverrides?.holdings as unknown as Prisma.JsonArray + ); } item.name = item.SymbolProfileOverrides?.name ?? item.name; @@ -219,8 +224,9 @@ export class SymbolProfileService { (item.SymbolProfileOverrides.sectors as unknown as Sector[])?.length > 0 ) { - item.sectors = item.SymbolProfileOverrides - .sectors as unknown as Sector[]; + item.sectors = this.getSectors( + item.SymbolProfileOverrides?.sectors as unknown as Prisma.JsonArray + ); } item.url = item.SymbolProfileOverrides?.url ?? item.url; @@ -249,18 +255,20 @@ export class SymbolProfileService { }); } - private getHoldings(symbolProfile: SymbolProfile): Holding[] { - return ((symbolProfile?.holdings as Prisma.JsonArray) ?? []).map( - (holding) => { - const { name, weight } = holding as Prisma.JsonObject; + private getHoldings(aHoldings: Prisma.JsonArray = []): Holding[] { + if (aHoldings === null) { + return []; + } + + return aHoldings.map((holding) => { + const { name, weight } = holding as Prisma.JsonObject; - return { - allocationInPercentage: weight as number, - name: (name as string) ?? UNKNOWN_KEY, - valueInBaseCurrency: undefined - }; - } - ); + return { + allocationInPercentage: weight as number, + name: (name as string) ?? UNKNOWN_KEY, + valueInBaseCurrency: undefined + }; + }); } private getScraperConfiguration( @@ -285,17 +293,19 @@ export class SymbolProfileService { return null; } - private getSectors(symbolProfile: SymbolProfile): Sector[] { - return ((symbolProfile?.sectors as Prisma.JsonArray) ?? []).map( - (sector) => { - const { name, weight } = sector as Prisma.JsonObject; + private getSectors(aSectors: Prisma.JsonArray = []): Sector[] { + if (aSectors === null) { + return []; + } - return { - name: (name as string) ?? UNKNOWN_KEY, - weight: weight as number - }; - } - ); + return aSectors.map((sector) => { + const { name, weight } = sector as Prisma.JsonObject; + + return { + name: (name as string) ?? UNKNOWN_KEY, + weight: weight as number + }; + }); } private getSymbolMapping(symbolProfile: SymbolProfile) { diff --git a/libs/common/src/lib/interfaces/holding.interface.ts b/libs/common/src/lib/interfaces/holding.interface.ts index 5a0df62f6..e963bc5a7 100644 --- a/libs/common/src/lib/interfaces/holding.interface.ts +++ b/libs/common/src/lib/interfaces/holding.interface.ts @@ -1,5 +1,5 @@ export interface Holding { - allocationInPercentage?: number; + allocationInPercentage: number; name: string; valueInBaseCurrency: number; } From 6533f00bae06d63ea64725fddd03d32177227cfc Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 24 Jan 2025 19:51:01 +0100 Subject: [PATCH 24/30] Release 2.136.0 (#4246) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b60940bd0..6f462e9fb 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.136.0 - 2025-01-24 ### Added diff --git a/package-lock.json b/package-lock.json index 875c3cf74..6966dc315 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.135.0", + "version": "2.136.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.135.0", + "version": "2.136.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index e45b1f665..6d406f1a1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.135.0", + "version": "2.136.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 5ce8a7ab5cd0c902d0a0ded9d11599a98fbd4a10 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 25 Jan 2025 10:37:31 +0100 Subject: [PATCH 25/30] Feature/upgrade prettier-plugin-sort-imports to version 5.2.1 (#4217) * Upgrade @trivago/prettier-plugin-sort-imports to version 5.2.1 * Update changelog --- CHANGELOG.md | 6 ++ package-lock.json | 213 +++++----------------------------------------- package.json | 2 +- 3 files changed, 28 insertions(+), 193 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f462e9fb..cf35ac4f0 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 `@trivago/prettier-plugin-sort-imports` from version `4.3.0` to `5.2.1` + ## 2.136.0 - 2025-01-24 ### Added diff --git a/package-lock.json b/package-lock.json index 6966dc315..3dd2edf14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -125,7 +125,7 @@ "@storybook/addon-interactions": "8.4.7", "@storybook/angular": "8.4.7", "@storybook/core-server": "8.4.7", - "@trivago/prettier-plugin-sort-imports": "4.3.0", + "@trivago/prettier-plugin-sort-imports": "5.2.1", "@types/big.js": "6.2.2", "@types/cache-manager": "4.0.6", "@types/color": "4.2.0", @@ -2588,46 +2588,6 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", @@ -10508,161 +10468,40 @@ } }, "node_modules/@trivago/prettier-plugin-sort-imports": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz", - "integrity": "sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-5.2.1.tgz", + "integrity": "sha512-NDZndt0fmVThIx/8cExuJHLZagUVzfGCoVrwH9x6aZvwfBdkrDFTYujecek6X2WpG4uUFsVaPg5+aNQPSyjcmw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@babel/generator": "7.17.7", - "@babel/parser": "^7.20.5", - "@babel/traverse": "7.23.2", - "@babel/types": "7.17.0", - "javascript-natural-sort": "0.7.1", + "@babel/generator": "^7.26.2", + "@babel/parser": "^7.26.2", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "javascript-natural-sort": "^0.7.1", "lodash": "^4.17.21" }, + "engines": { + "node": ">18.12" + }, "peerDependencies": { "@vue/compiler-sfc": "3.x", - "prettier": "2.x - 3.x" + "prettier": "2.x - 3.x", + "prettier-plugin-svelte": "3.x", + "svelte": "4.x || 5.x" }, "peerDependenciesMeta": { "@vue/compiler-sfc": { "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + }, + "svelte": { + "optional": true } } }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/generator/node_modules/@babel/types": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", - "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", - "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.3", - "@babel/types": "^7.26.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/traverse/node_modules/@babel/types": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", - "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/traverse/node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -30295,16 +30134,6 @@ "devOptional": true, "license": "BSD-3-Clause" }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", diff --git a/package.json b/package.json index 6d406f1a1..7836976ba 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "@storybook/addon-interactions": "8.4.7", "@storybook/angular": "8.4.7", "@storybook/core-server": "8.4.7", - "@trivago/prettier-plugin-sort-imports": "4.3.0", + "@trivago/prettier-plugin-sort-imports": "5.2.1", "@types/big.js": "6.2.2", "@types/cache-manager": "4.0.6", "@types/color": "4.2.0", From 38178c774bae00203ba37163b554a6e6dc90b187 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 26 Jan 2025 19:17:21 +0100 Subject: [PATCH 26/30] Feature/upgrade ng-extract-i18n-merge to version 2.14.0 (#4249) * Upgrade ng-extract-i18n-merge to version 2.14.0 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf35ac4f0..004ade436 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 - Upgraded `@trivago/prettier-plugin-sort-imports` from version `4.3.0` to `5.2.1` +- Upgraded `ng-extract-i18n-merge` from version `2.13.1` to `2.14.0` ## 2.136.0 - 2025-01-24 diff --git a/package-lock.json b/package-lock.json index 3dd2edf14..e82af58da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,7 +72,7 @@ "lodash": "4.17.21", "marked": "15.0.4", "ms": "3.0.0-canary.1", - "ng-extract-i18n-merge": "2.13.1", + "ng-extract-i18n-merge": "2.14.0", "ngx-device-detector": "9.0.0", "ngx-markdown": "19.0.0", "ngx-skeleton-loader": "9.0.0", @@ -24774,9 +24774,9 @@ "license": "MIT" }, "node_modules/ng-extract-i18n-merge": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-2.13.1.tgz", - "integrity": "sha512-aU+shz0VSe0qqKYmlpg42P2C6Ol6eQ+DZDTYzQM4PTMfEBWJNFtl+c7B+MA68/AzdpcNPKu0BWJLZchCdZtjhQ==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-2.14.0.tgz", + "integrity": "sha512-KiLvxu6KvXkRqqLHUh7TQ0rVJys+S8sQEW4rJWRNuLSfHALT7CJ4h6jDJ9iDCSiow+KXHnZx7Iq+Z6CUc031tw==", "license": "MIT", "dependencies": { "@angular-devkit/architect": "^0.1301.0 || ^0.1401.0 || ^0.1501.0 || ^0.1601.0 || ^0.1700.0 || ^0.1800.0 || ^0.1900.0", diff --git a/package.json b/package.json index 7836976ba..90700eb85 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "lodash": "4.17.21", "marked": "15.0.4", "ms": "3.0.0-canary.1", - "ng-extract-i18n-merge": "2.13.1", + "ng-extract-i18n-merge": "2.14.0", "ngx-device-detector": "9.0.0", "ngx-markdown": "19.0.0", "ngx-skeleton-loader": "9.0.0", From 657cb510d8ab37c61b9361896bacde40395db045 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 27 Jan 2025 19:52:25 +0100 Subject: [PATCH 27/30] Feature/upgrade ng-extract-i18n-merge to version 2.14.1 (#4250) * Upgrade ng-extract-i18n-merge to version 2.14.1 * Update changelog --- CHANGELOG.md | 2 +- package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 004ade436..6c321b133 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Upgraded `@trivago/prettier-plugin-sort-imports` from version `4.3.0` to `5.2.1` -- Upgraded `ng-extract-i18n-merge` from version `2.13.1` to `2.14.0` +- Upgraded `ng-extract-i18n-merge` from version `2.13.1` to `2.14.1` ## 2.136.0 - 2025-01-24 diff --git a/package-lock.json b/package-lock.json index e82af58da..7176c0b70 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,7 +72,7 @@ "lodash": "4.17.21", "marked": "15.0.4", "ms": "3.0.0-canary.1", - "ng-extract-i18n-merge": "2.14.0", + "ng-extract-i18n-merge": "2.14.1", "ngx-device-detector": "9.0.0", "ngx-markdown": "19.0.0", "ngx-skeleton-loader": "9.0.0", @@ -24774,9 +24774,9 @@ "license": "MIT" }, "node_modules/ng-extract-i18n-merge": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-2.14.0.tgz", - "integrity": "sha512-KiLvxu6KvXkRqqLHUh7TQ0rVJys+S8sQEW4rJWRNuLSfHALT7CJ4h6jDJ9iDCSiow+KXHnZx7Iq+Z6CUc031tw==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-2.14.1.tgz", + "integrity": "sha512-hymcJcjfXJ+0r3EQShaSGmsST0AV3usgJuNMf6l04X+nIsgUPLMrXPBB/hVVVlAOjRcEB7RamKnfmexa5Rq1tw==", "license": "MIT", "dependencies": { "@angular-devkit/architect": "^0.1301.0 || ^0.1401.0 || ^0.1501.0 || ^0.1601.0 || ^0.1700.0 || ^0.1800.0 || ^0.1900.0", diff --git a/package.json b/package.json index 90700eb85..d38d667dd 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "lodash": "4.17.21", "marked": "15.0.4", "ms": "3.0.0-canary.1", - "ng-extract-i18n-merge": "2.14.0", + "ng-extract-i18n-merge": "2.14.1", "ngx-device-detector": "9.0.0", "ngx-markdown": "19.0.0", "ngx-skeleton-loader": "9.0.0", From eb26707e8cf01240524380c861212dcb2de830bb Mon Sep 17 00:00:00 2001 From: Ken Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Tue, 28 Jan 2025 02:24:30 +0700 Subject: [PATCH 28/30] Feature/migrate seed.js to TypeScript (#4248) * feat(db): migrate seed.js to typescript * feat(db): change seed command * Update changelog --- CHANGELOG.md | 1 + package.json | 2 +- prisma/{seed.js => seed.ts} | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) rename prisma/{seed.js => seed.ts} (87%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c321b133..b744e52d9 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 +- Migrated the database seeding to _TypeScript_ - Upgraded `@trivago/prettier-plugin-sort-imports` from version `4.3.0` to `5.2.1` - Upgraded `ng-extract-i18n-merge` from version `2.13.1` to `2.14.1` diff --git a/package.json b/package.json index d38d667dd..b3612bedf 100644 --- a/package.json +++ b/package.json @@ -213,6 +213,6 @@ "node": ">=20" }, "prisma": { - "seed": "node prisma/seed.js" + "seed": "ts-node --compiler-options {\"module\":\"CommonJS\"} prisma/seed.ts" } } diff --git a/prisma/seed.js b/prisma/seed.ts similarity index 87% rename from prisma/seed.js rename to prisma/seed.ts index beafbed44..f68f8375b 100644 --- a/prisma/seed.js +++ b/prisma/seed.ts @@ -1,4 +1,5 @@ -const { PrismaClient } = require('@prisma/client'); +import { PrismaClient } from '@prisma/client'; + const prisma = new PrismaClient(); async function main() { From fa27a05bcf9b105ac614808537222e3182fcc7cf Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 28 Jan 2025 19:32:34 +0100 Subject: [PATCH 29/30] Feature/upgrade bull to version 4.16.5 (#4218) * Upgrade bull to version 4.16.5 * Update changelog --- CHANGELOG.md | 2 ++ package-lock.json | 10 +++++----- package.json | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b744e52d9..2b6592701 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 - Migrated the database seeding to _TypeScript_ - Upgraded `@trivago/prettier-plugin-sort-imports` from version `4.3.0` to `5.2.1` +- Upgraded `bull` from version `4.16.4` to `4.16.5` - Upgraded `ng-extract-i18n-merge` from version `2.13.1` to `2.14.1` ## 2.136.0 - 2025-01-24 @@ -40,6 +41,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Moved the language localization for Polski (`pl`) from experimental to general availability - Extended the _Financial Modeling Prep_ service - Switched to _ESLint_’s flat config format +- Upgraded `bull` from version `4.16.2` to `4.16.4` - Upgraded `chart.js` from version `4.2.0` to `4.4.7` - Upgraded `chartjs-chart-treemap` from version `2.3.1` to `3.1.0` - Upgraded `chartjs-plugin-annotation` from version `2.1.2` to `3.1.0` diff --git a/package-lock.json b/package-lock.json index 7176c0b70..087d945c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,7 +47,7 @@ "alphavantage": "2.2.0", "big.js": "6.2.2", "bootstrap": "4.6.0", - "bull": "4.16.4", + "bull": "4.16.5", "cache-manager": "5.7.6", "cache-manager-redis-yet": "5.1.4", "chart.js": "4.4.7", @@ -13379,12 +13379,12 @@ } }, "node_modules/bull": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/bull/-/bull-4.16.4.tgz", - "integrity": "sha512-CF+nGsJyfsCC9MJL8hFxqXzbwq+jGBXhaz1j15G+5N/XtKIPFUUy5O1mfWWKbKunfuH/x+UV4NYRQDHSkjCOgA==", + "version": "4.16.5", + "resolved": "https://registry.npmjs.org/bull/-/bull-4.16.5.tgz", + "integrity": "sha512-lDsx2BzkKe7gkCYiT5Acj02DpTwDznl/VNN7Psn7M3USPG7Vs/BaClZJJTAG+ufAR9++N1/NiUTdaFBWDIl5TQ==", "license": "MIT", "dependencies": { - "cron-parser": "^4.2.1", + "cron-parser": "^4.9.0", "get-port": "^5.1.1", "ioredis": "^5.3.2", "lodash": "^4.17.21", diff --git a/package.json b/package.json index b3612bedf..e808eccd5 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "alphavantage": "2.2.0", "big.js": "6.2.2", "bootstrap": "4.6.0", - "bull": "4.16.4", + "bull": "4.16.5", "cache-manager": "5.7.6", "cache-manager-redis-yet": "5.1.4", "chart.js": "4.4.7", From 954cf765b8fb6bb1000a2b5662795547b48ba8f6 Mon Sep 17 00:00:00 2001 From: Ken Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Thu, 30 Jan 2025 02:22:44 +0700 Subject: [PATCH 30/30] Bugfix/dynamic numerical precision for cryptocurrencies in holding detail dialog (#4255) * fix(ui): dynamic numerical precision of quantity for cryptocurrencies * Update changelog --- CHANGELOG.md | 4 ++++ .../holding-detail-dialog/holding-detail-dialog.component.ts | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b6592701..10a290ae7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Upgraded `bull` from version `4.16.4` to `4.16.5` - Upgraded `ng-extract-i18n-merge` from version `2.13.1` to `2.14.1` +### Fixed + +- Fixed the dynamic numerical precision for cryptocurrencies in the holding detail dialog + ## 2.136.0 - 2025-01-24 ### Added 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 94d5bd915..d13158898 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 @@ -296,7 +296,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { if (Number.isInteger(this.quantity)) { this.quantityPrecision = 0; - } else if (this.SymbolProfile?.assetSubClass === 'CRYPTOCURRENCY') { + } else if (SymbolProfile?.assetSubClass === 'CRYPTOCURRENCY') { if (this.quantity < 1) { this.quantityPrecision = 7; } else if (this.quantity < 1000) {