diff --git a/frontend/CLAUDE.md b/frontend/CLAUDE.md index 9118452ad..dead28afa 100644 --- a/frontend/CLAUDE.md +++ b/frontend/CLAUDE.md @@ -255,7 +255,7 @@ Custom launcher `ChromeHeadlessCustom` is configured for CI with flags `--no-san ### Analytics & Monitoring - **Angulartics2** with Amplitude integration -- **@sentry/angular-ivy** for error monitoring +- **@sentry/angular** for error monitoring - **Hotjar** for user behavior tracking (demo accounts) - **Intercom** for customer support diff --git a/frontend/angular.json b/frontend/angular.json index 740de4c9a..2d3bc56d6 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -1,202 +1,205 @@ { - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "dissendium-v0": { - "projectType": "application", - "schematics": {}, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist/dissendium-v0", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.app.json", - "assets": [ - "src/favicon.ico", - "src/assets", - "src/config.json", - { - "glob": "**/*", - "input": "./node_modules/monaco-editor/min", - "output": "./assets/monaco" - } - ], - "styles": [ - "src/custom-theme.scss", - "src/styles.scss" - ], - "stylePreprocessorOptions": { - "includePaths": ["node_modules/@brumeilde/ngx-theme/presets/material"] - }, - "scripts": [ - ], - "vendorChunk": true, - "extractLicenses": false, - "buildOptimizer": false, - "sourceMap": true, - "optimization": false, - "namedChunks": true - }, - "configurations": { - "production": { - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "optimization": true, - "outputHashing": "all", - "sourceMap": true, - "namedChunks": false, - "extractLicenses": true, - "vendorChunk": false, - "buildOptimizer": true, - "budgets": [ - { - "type": "initial", - "maximumWarning": "2mb", - "maximumError": "5mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "10kb", - "maximumError": "20kb" - } - ] - }, - "development": { - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.dev.ts" - } - ], - "optimization": false, - "outputHashing": "all", - "sourceMap": true, - "namedChunks": false, - "extractLicenses": true, - "vendorChunk": false, - "buildOptimizer": false - }, - "saas": { - "index": { - "input": "src/index.saas.html", - "output": "index.html" - }, - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.saas-prod.ts" - } - ] - }, - "saas-production": { - "index": { - "input": "src/index.saas.html", - "output": "index.html" - }, - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.saas-prod.ts" - } - ], - "optimization": true, - "outputHashing": "all", - "sourceMap": true, - "namedChunks": false, - "extractLicenses": true, - "vendorChunk": false, - "buildOptimizer": true, - "budgets": [ - { - "type": "initial", - "maximumWarning": "2mb", - "maximumError": "5mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "10kb", - "maximumError": "20kb" - } - ] - } - }, - "defaultConfiguration": "" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "options": { - "buildTarget": "dissendium-v0:build", - "host": "127.0.0.1", - "proxyConfig": "src/proxy.conf.json" - }, - "configurations": { - "production": { - "buildTarget": "dissendium-v0:build:production" - }, - "saas": { - "buildTarget": "dissendium-v0:build:saas" - }, - "development": { - "buildTarget": "dissendium-v0:build:development" - } - } - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "dissendium-v0:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "src/test.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.spec.json", - "karmaConfig": "karma.conf.js", - "assets": [ - "src/favicon.ico", - "src/assets", - "src/config.json" - ], - "styles": [ - "src/custom-theme.scss", - "src/styles.scss" - ], - "stylePreprocessorOptions": { - "includePaths": ["node_modules/@brumeilde/ngx-theme/presets/material"] - }, - "scripts": [] - } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": [ - "tsconfig.app.json", - "tsconfig.spec.json", - "e2e/tsconfig.json" - ], - "exclude": [ - "**/node_modules/**" - ] - } - } - } - } - }, - "cli": { - "analytics": false - } + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "dissendium-v0": { + "projectType": "application", + "schematics": {}, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": { + "base": "dist/dissendium-v0" + }, + "index": "src/index.html", + "polyfills": ["src/polyfills.ts"], + "tsConfig": "tsconfig.app.json", + "assets": [ + "src/favicon.ico", + "src/assets", + "src/config.json", + { + "glob": "**/*", + "input": "./node_modules/monaco-editor/min", + "output": "./assets/monaco" + } + ], + "styles": ["src/custom-theme.scss", "src/styles.scss"], + "stylePreprocessorOptions": { + "includePaths": ["node_modules/@brumeilde/ngx-theme/presets/material"] + }, + "scripts": [], + "extractLicenses": false, + "sourceMap": true, + "optimization": false, + "namedChunks": true, + "browser": "src/main.ts" + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": true, + "namedChunks": false, + "extractLicenses": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "10kb", + "maximumError": "20kb" + } + ] + }, + "development": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.dev.ts" + } + ], + "optimization": false, + "outputHashing": "all", + "sourceMap": true, + "namedChunks": false, + "extractLicenses": true + }, + "saas": { + "index": { + "input": "src/index.saas.html", + "output": "index.html" + }, + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.saas-prod.ts" + } + ] + }, + "saas-production": { + "index": { + "input": "src/index.saas.html", + "output": "index.html" + }, + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.saas-prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": true, + "namedChunks": false, + "extractLicenses": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "10kb", + "maximumError": "20kb" + } + ] + } + }, + "defaultConfiguration": "" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "buildTarget": "dissendium-v0:build", + "host": "127.0.0.1", + "proxyConfig": "src/proxy.conf.json" + }, + "configurations": { + "production": { + "buildTarget": "dissendium-v0:build:production" + }, + "saas": { + "buildTarget": "dissendium-v0:build:saas" + }, + "development": { + "buildTarget": "dissendium-v0:build:development" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "dissendium-v0:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "assets": ["src/favicon.ico", "src/assets", "src/config.json"], + "styles": ["src/custom-theme.scss", "src/styles.scss"], + "stylePreprocessorOptions": { + "includePaths": ["node_modules/@brumeilde/ngx-theme/presets/material"] + }, + "scripts": [] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": ["tsconfig.app.json", "tsconfig.spec.json", "e2e/tsconfig.json"], + "exclude": ["**/node_modules/**"] + } + } + } + } + }, + "cli": { + "analytics": false + }, + "schematics": { + "@schematics/angular:component": { + "type": "component" + }, + "@schematics/angular:directive": { + "type": "directive" + }, + "@schematics/angular:service": { + "type": "service" + }, + "@schematics/angular:guard": { + "typeSeparator": "." + }, + "@schematics/angular:interceptor": { + "typeSeparator": "." + }, + "@schematics/angular:module": { + "typeSeparator": "." + }, + "@schematics/angular:pipe": { + "typeSeparator": "." + }, + "@schematics/angular:resolver": { + "typeSeparator": "." + } + } } diff --git a/frontend/browserslist b/frontend/browserslist index 5bffe97ca..86881426c 100644 --- a/frontend/browserslist +++ b/frontend/browserslist @@ -1,3 +1,6 @@ -> 0.25% -not ie 11 -not op_mini all +last 2 Chrome versions +last 2 Firefox versions +last 2 Safari versions +last 2 Edge versions +last 2 iOS versions +not dead diff --git a/frontend/package.json b/frontend/package.json index 3e7fcbaa3..0e18ab341 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,22 +15,21 @@ }, "private": true, "dependencies": { - "@angular/animations": "~19.2.14", - "@angular/cdk": "~19.2.14", - "@angular/common": "~19.2.14", - "@angular/compiler": "~19.2.14", - "@angular/core": "~19.2.14", - "@angular/forms": "~19.2.14", - "@angular/material": "~19.2.14", - "@angular/platform-browser": "~19.2.14", - "@angular/platform-browser-dynamic": "~19.2.14", - "@angular/router": "~19.2.14", + "@angular/animations": "~20.3.16", + "@angular/cdk": "~20.2.14", + "@angular/common": "~20.3.16", + "@angular/compiler": "~20.3.16", + "@angular/core": "~20.3.16", + "@angular/forms": "~20.3.16", + "@angular/material": "~20.2.14", + "@angular/platform-browser": "~20.3.16", + "@angular/platform-browser-dynamic": "~20.3.16", + "@angular/router": "~20.3.16", "@brumeilde/ngx-theme": "^1.2.1", "@jsonurl/jsonurl": "^1.1.8", "@ngstack/code-editor": "^9.0.0", "@sentry-internal/rrweb": "^2.31.0", - "@sentry/angular-ivy": "^7.116.0", - "@sentry/tracing": "^7.116.0", + "@sentry/angular": "^10.33.0", "@stripe/stripe-js": "^5.3.0", "@types/google-one-tap": "^1.2.6", "@types/lodash": "^4.17.13", @@ -65,10 +64,10 @@ "zone.js": "~0.15.0" }, "devDependencies": { - "@angular-devkit/build-angular": "~19.2.19", - "@angular/cli": "~19.0.5", - "@angular/compiler-cli": "~19.0.4", - "@angular/language-service": "~19.0.4", + "@angular-devkit/build-angular": "20", + "@angular/cli": "~20.3.14", + "@angular/compiler-cli": "~20.3.16", + "@angular/language-service": "~20.3.16", "@sentry-internal/rrweb": "^2.16.0", "@types/jasmine": "~5.1.5", "@types/jasminewd2": "~2.0.13", @@ -82,7 +81,7 @@ "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "^2.1.0", "ts-node": "~10.9.2", - "typescript": "~5.6.0" + "typescript": "~5.9.3" }, "resolutions": { "mermaid": "^11.10.0" diff --git a/frontend/src/app/app.component.css b/frontend/src/app/app.component.css index 736de31db..b8d6362ef 100644 --- a/frontend/src/app/app.component.css +++ b/frontend/src/app/app.component.css @@ -1,237 +1,238 @@ .main-menu-container { - display: flex; - flex-direction: column; - height: 100vh; + display: flex; + flex-direction: column; + height: 100vh; } @media (prefers-color-scheme: light) { - .main-menu-container { - --mat-sidenav-content-background-color: #fff; - } + .main-menu-container { + --mat-sidenav-content-background-color: #fff; + } } @media (prefers-color-scheme: dark) { - .main-menu-container { - --mat-sidenav-content-background-color: #191919; - --mat-sidenav-container-background-color: #191919; - --mat-sidenav-container-divider-color: #303030; - } + .main-menu-container { + --mat-sidenav-content-background-color: #191919; + --mat-sidenav-container-background-color: #191919; + --mat-sidenav-container-divider-color: #303030; + } } .main-menu-sidenav { - width: 60vw; + width: 60vw; } .nav-bar { - position: sticky; - top: 0; - flex-shrink: 0; - background-color: #212121; - z-index: 3; + position: sticky; + top: 0; + flex-shrink: 0; + background-color: #212121; + z-index: 3; } @media (prefers-color-scheme: dark) { - .nav-bar { - border-bottom: 1px solid #303030; - } + .nav-bar { + border-bottom: 1px solid #303030; + } } .nav-bar_home { - display: flex; - align-items: center; - justify-content: space-between; + display: flex; + align-items: center; + justify-content: space-between; } .nav-bar_connection { - display: grid; - grid-template-columns: repeat(3, 1fr); - z-index: 3; + display: grid; + grid-template-columns: repeat(3, 1fr); + z-index: 3; } @media (width <= 600px) { - .nav-bar { - display: flex; - justify-content: space-between; - } + .nav-bar { + display: flex; + justify-content: space-between; + } } .nav-bar__slash { - color: #fff; - margin-bottom: -4px; + color: #fff; + margin-bottom: -4px; } -.nav-bar__button{ - --mdc-text-button-label-text-color: rgba(255, 255, 255, 1) !important; - --mat-mdc-button-persistent-ripple-color: transparent !important; +.nav-bar__button { + --mat-button-text-label-text-color: rgba(255, 255, 255, 1) !important; + --mat-mdc-button-persistent-ripple-color: transparent !important; - font-weight: 400 !important; - outline: 2px solid transparent; - transition: outline 0.2s; + font-weight: 400 !important; + outline: 2px solid transparent; + transition: outline 0.2s; } .nav-bar__button[disabled="true"] { - --mdc-text-button-disabled-label-text-color: #fff; + --mat-button-text-disabled-label-text-color: #fff; } - @media (prefers-color-scheme: dark) { - .nav-bar__button { - color: #fff; - } + .nav-bar__button { + color: #fff; + } } .nav-bar__buttonConnectionsMenu { - margin-bottom: -4px; + margin-bottom: -4px; } .nav-bar__account-button ::ng-deep .mat-badge-content { - top: 14px; - left: 32px; - color: var(--color-accentedPalette); - height: 7px !important; - width: 7px !important; - z-index: 1; + top: 14px; + left: 32px; + color: var(--color-accentedPalette); + height: 7px !important; + width: 7px !important; + z-index: 1; } .nav-menu__list-link-icon ::ng-deep .mat-badge-content { - top: 6px; - left: 26px; - color: var(--color-accentedPalette); - height: 7px !important; - width: 7px !important; + top: 6px; + left: 26px; + color: var(--color-accentedPalette); + height: 7px !important; + width: 7px !important; } .nav-bar__button_active { - --mdc-text-button-label-text-color: var(--color-accentedPalette-500) !important; - font-weight: 500 !important; + --mat-button-text-label-text-color: var(--color-accentedPalette-500) !important; + font-weight: 500 !important; } @media screen and (max-width: 600px) { - .nav-bar__button_active { - color: inherit; - font-weight: 600; - } + .nav-bar__button_active { + color: inherit; + font-weight: 600; + } } .nav-bar__upgrade-button { - /* --mdc-filled-button-label-text-color: #424242; */ - /* --mdc-filled-button-label-text-color: #fff !important; */ - --mdc-filled-button-container-height: 28px; + /* --mat-button-filled-label-text-color: #424242; */ + /* --mat-button-filled-label-text-color: #fff !important; */ + --mat-button-filled-container-height: 28px; - margin-right: -8px; + margin-right: -8px; } .nav-bar__account-button { - color: #fff; + color: #fff; } .logo-box { - display: flex; - align-items: center; + display: flex; + align-items: center; } .logo { - display: flex; - align-items: center; - color: #fff; - text-decoration: none; + display: flex; + align-items: center; + color: #fff; + text-decoration: none; } .logo__image { - height: 24px; - margin-right: 12px; + height: 24px; + margin-right: 12px; } .logo__demo-mark { - background: var(--color-accentedPalette-700); - font-size: 12px; - line-height: 20px; - margin-bottom: -2px; - padding: 0 8px; + background: var(--color-accentedPalette-700); + font-size: 12px; + line-height: 20px; + margin-bottom: -2px; + padding: 0 8px; } .connection_active { - background: var(--color-accentedPalette-100); + background: var(--color-accentedPalette-100); } @media (prefers-color-scheme: dark) { - .connection_active { - background: var(--color-accentedPalette-800); - } + .connection_active { + background: var(--color-accentedPalette-800); + } } .menu { - display: flex; - align-items: center; - justify-content: center; - gap: 4px; - text-align: center; + display: flex; + align-items: center; + justify-content: center; + gap: 4px; + text-align: center; } .menu-button { - color: #fff; + color: #fff; } @media screen and (min-width: 600px) { - .menu-button { - display: none; - } + .menu-button { + display: none; + } } .actions { - display: flex; - align-items: center; - justify-content: flex-end; - gap: 20px; + display: flex; + align-items: center; + justify-content: flex-end; + gap: 20px; } .actions .action { - --mdc-outlined-button-outline-color: #fff; - --mat-toolbar-container-text-color: #fff; - width: 96px; + --mat-button-outlined-outline-color: #fff; + --mat-toolbar-container-text-color: #fff; + width: 96px; } .actions .action { - margin-left: 0.5em; + margin-left: 0.5em; } @media screen and (max-width: 600px) { - .menu, - .actions_auth { - display: none; - } - - .connection-navigation { - display: flex; - flex-direction: column; - align-items: flex-start; - border-top: var(--mat-table-row-item-outline-width, 1px) solid var(--mat-table-row-item-outline-color, rgba(0, 0, 0, 0.12)); - border-bottom: var(--mat-table-row-item-outline-width, 1px) solid var(--mat-table-row-item-outline-color, rgba(0, 0, 0, 0.12)); - margin-left: 8px; - margin-bottom: 12px; - padding: 8px 0; - width: calc(100% - 16px); - } - - .connection-navigation__item_user { - margin-top: -12px !important; - } - - .connection-navigation__icon { - --mdc-list-list-item-leading-icon-color: var(--mdc-list-list-item-label-text-color); - - margin-right: 12px !important; - } - - .connection-navigation__icon_account { - margin-top: 24px !important; - } - - .connection-navigation__upgrade-button { - margin-top: 8px; - margin-left: 8px; - width: calc(100% - 16px); - } + .menu, + .actions_auth { + display: none; + } + + .connection-navigation { + display: flex; + flex-direction: column; + align-items: flex-start; + border-top: var(--mat-table-row-item-outline-width, 1px) solid + var(--mat-table-row-item-outline-color, rgba(0, 0, 0, 0.12)); + border-bottom: var(--mat-table-row-item-outline-width, 1px) solid + var(--mat-table-row-item-outline-color, rgba(0, 0, 0, 0.12)); + margin-left: 8px; + margin-bottom: 12px; + padding: 8px 0; + width: calc(100% - 16px); + } + + .connection-navigation__item_user { + margin-top: -12px !important; + } + + .connection-navigation__icon { + --mat-list-list-item-leading-icon-color: var(--mat-list-list-item-label-text-color); + + margin-right: 12px !important; + } + + .connection-navigation__icon_account { + margin-top: 24px !important; + } + + .connection-navigation__upgrade-button { + margin-top: 8px; + margin-left: 8px; + width: calc(100% - 16px); + } } /* .breadcrumbs { @@ -256,106 +257,106 @@ } */ .connection-name { - position: absolute; - top: 6px; - left: 8px; - max-width: calc((100vw - 980px) / 2); - overflow: hidden; - text-overflow: ellipsis; + position: absolute; + top: 6px; + left: 8px; + max-width: calc((100vw - 980px) / 2); + overflow: hidden; + text-overflow: ellipsis; } .tab-icon { - margin-right: 8px; + margin-right: 8px; } .main-menu-content { - flex-grow: 1; - display: flex; - flex-direction: column; + flex-grow: 1; + display: flex; + flex-direction: column; } .main-menu-content_interior { - --mat-toolbar-standard-height: 44px !important; + --mat-toolbar-standard-height: 44px !important; } .main-menu-content_exterior { - --mat-toolbar-standard-height: 56px !important; + --mat-toolbar-standard-height: 56px !important; } .tab-content-wrapper { - flex: 1 0 auto; + flex: 1 0 auto; } .content { - display: grid; - grid-template-rows: 0 100%; - height: 100%; + display: grid; + grid-template-rows: 0 100%; + height: 100%; } .helpContainer { - position: fixed; - right: 16px; - bottom: 16px; - z-index: 100; + position: fixed; + right: 16px; + bottom: 16px; + z-index: 100; } .footer { - flex-shrink: 0; - display: flex; - align-items: center; - justify-content: center; - background: transparent; - height: 60px; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + background: transparent; + height: 60px; } @media (prefers-color-scheme: dark) { - .footer { - background: #212121; - border-top: 1px solid #303030; - } + .footer { + background: #212121; + border-top: 1px solid #303030; + } } .footer__text { - color: rgba(0,0,0,0.5); - font-size: 0.875em; + color: rgba(0, 0, 0, 0.5); + font-size: 0.875em; } @media (prefers-color-scheme: dark) { - .footer__text { - color: #fff; - } + .footer__text { + color: #fff; + } } ::ng-deep .visually-hidden { position: absolute !important; clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ clip: rect(1px, 1px, 1px, 1px); - padding:0 !important; - border:0 !important; + padding: 0 !important; + border: 0 !important; height: 1px !important; width: 1px !important; overflow: hidden; } .nav-bar__button-logout { - display: flex; - align-items: center; - gap: 4px; + display: flex; + align-items: center; + gap: 4px; } .logout-button { - font-size: inherit; - font-weight: inherit; - margin: 4px 0; + font-size: inherit; + font-weight: inherit; + margin: 4px 0; } .user-email { - color: rgba(0, 0, 0, 0.54); - font-size: 12px; + color: rgba(0, 0, 0, 0.54); + font-size: 12px; } @media (prefers-color-scheme: dark) { - .user-email { - color: rgba(255, 255, 255, 0.7); - } -} \ No newline at end of file + .user-email { + color: rgba(255, 255, 255, 0.7); + } +} diff --git a/frontend/src/app/app.component.ts b/frontend/src/app/app.component.ts index 8a9a78ccb..f5b9053a4 100644 --- a/frontend/src/app/app.component.ts +++ b/frontend/src/app/app.component.ts @@ -1,371 +1,401 @@ -import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; -import { Angulartics2, Angulartics2Amplitude, Angulartics2OnModule } from 'angulartics2'; -import { ChangeDetectorRef, Component, } from '@angular/core'; -import { filter, } from 'rxjs/operators'; - -import { AuthService } from './services/auth.service'; import { CommonModule } from '@angular/common'; -import { CompanyService } from './services/company.service'; -import { Connection } from './models/connection'; -import { ConnectionsService } from './services/connections.service'; -import { DomSanitizer } from '@angular/platform-browser'; -import { FeatureNotificationComponent } from './components/feature-notification/feature-notification.component'; +import { ChangeDetectorRef, Component } from '@angular/core'; import { MatBadgeModule } from '@angular/material/badge'; import { MatButtonModule } from '@angular/material/button'; -import { MatIconModule } from '@angular/material/icon'; -import { MatIconRegistry } from '@angular/material/icon'; +import { MatIconModule, MatIconRegistry } from '@angular/material/icon'; import { MatListModule } from '@angular/material/list'; import { MatMenuModule } from '@angular/material/menu'; import { MatSidenavModule } from '@angular/material/sidenav'; import { MatTabsModule } from '@angular/material/tabs'; import { MatToolbarModule } from '@angular/material/toolbar'; import { MatTooltipModule } from '@angular/material/tooltip'; -import { RouterModule } from '@angular/router'; +import { DomSanitizer } from '@angular/platform-browser'; +import { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router'; +import { User } from '@sentry/angular'; +import amplitude from 'amplitude-js'; +import { Angulartics2, Angulartics2Amplitude, Angulartics2OnModule } from 'angulartics2'; +import { differenceInMilliseconds } from 'date-fns'; import { Subject } from 'rxjs'; +import { filter } from 'rxjs/operators'; +import { environment } from '../environments/environment'; +import { FeatureNotificationComponent } from './components/feature-notification/feature-notification.component'; +import { Connection } from './models/connection'; +import { AuthService } from './services/auth.service'; +import { CompanyService } from './services/company.service'; +import { ConnectionsService } from './services/connections.service'; import { TablesService } from './services/tables.service'; import { UiSettingsService } from './services/ui-settings.service'; -import { User } from '@sentry/angular-ivy'; import { UserService } from './services/user.service'; -import amplitude from 'amplitude-js'; -import { differenceInMilliseconds } from 'date-fns'; -import { environment } from '../environments/environment'; import { version } from './version'; //@ts-expect-error window.amplitude = amplitude; -amplitude.getInstance().init("9afd282be91f94da735c11418d5ff4f5"); +amplitude.getInstance().init('9afd282be91f94da735c11418d5ff4f5'); @Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.css'], - imports: [ - CommonModule, - RouterModule, - MatTabsModule, - MatSidenavModule, - MatToolbarModule, - MatListModule, - MatIconModule, - MatButtonModule, - MatBadgeModule, - MatMenuModule, - MatTooltipModule, - Angulartics2OnModule, - FeatureNotificationComponent - ], + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'], + imports: [ + CommonModule, + RouterModule, + MatTabsModule, + MatSidenavModule, + MatToolbarModule, + MatListModule, + MatIconModule, + MatButtonModule, + MatBadgeModule, + MatMenuModule, + MatTooltipModule, + Angulartics2OnModule, + FeatureNotificationComponent, + ], }) - export class AppComponent { - - public isSaas = (environment as any).saas; - public appVersion = version; - userActivity; - userInactive: Subject = new Subject(); - currentFeatureNotificationId: string = 'saved-filters'; - isFeatureNotificationShown: boolean = false; - - userLoggedIn = null; - isDemo = false; - redirect_uri = `${location.origin}/loader`; - token = null; - routePathParam; - authBarTheme; - activeLink: string; - navigationTabs: object; - currentUser: User; - page: string; - whiteLabelSettingsLoaded = false; - whiteLabelSettings: { - logo: string, - favicon: string, - } = { - logo: '', - favicon: '' - } - public connections: Connection[] = []; - - constructor ( - public changeDetector: ChangeDetectorRef, - // private ngZone: NgZone, - public route: ActivatedRoute, - public router: Router, - public _connections: ConnectionsService, - public _company: CompanyService, - public _user: UserService, - public _auth: AuthService,_tables: TablesService, - private _uiSettings: UiSettingsService, - angulartics2Amplitude: Angulartics2Amplitude, - private angulartics2: Angulartics2, - private domSanitizer: DomSanitizer, - private matIconRegistry: MatIconRegistry, - ) { - this.matIconRegistry.addSvgIcon("mysql", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/db-logos/mysql_logo.svg")); - this.matIconRegistry.addSvgIcon("mssql", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/db-logos/mssql_logo.svg")); - this.matIconRegistry.addSvgIcon("oracledb", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/db-logos/oracle_logo.svg")); - this.matIconRegistry.addSvgIcon("postgres", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/db-logos/postgres_logo.svg")); - this.matIconRegistry.addSvgIcon("mongodb", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/db-logos/mongodb_logo.svg")); - this.matIconRegistry.addSvgIcon("dynamodb", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/db-logos/dynamodb_logo.svg")); - this.matIconRegistry.addSvgIcon("ibmdb2", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/db-logos/db2_logo.svg")); - this.matIconRegistry.addSvgIcon("cassandra", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/db-logos/сassandra_logo.svg")); - this.matIconRegistry.addSvgIcon("redis", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/db-logos/redis_logo.svg")); - this.matIconRegistry.addSvgIcon("elasticsearch", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/db-logos/elasticsearch_logo.svg")); - this.matIconRegistry.addSvgIcon("clickhouse", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/db-logos/clickhouse_logo.svg")); - this.matIconRegistry.addSvgIcon("github", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/github.svg")); - this.matIconRegistry.addSvgIcon("google", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/google.svg")); - this.matIconRegistry.addSvgIcon("ai_rocket", this.domSanitizer.bypassSecurityTrustResourceUrl("/assets/icons/ai-rocket.svg")); - angulartics2Amplitude.startTracking(); - } - - ngOnInit() { - this.router.events - .pipe( - filter(event => event instanceof NavigationEnd) - ) - .subscribe(() => { - this.page = this.router.routerState.snapshot.url.split('?')[0]; - - console.log('Navigated to page:', this.page); - - if (this.router.routerState.snapshot.root.queryParams.mode === 'demo') { - console.log('App component, demo mode search params found'); - this._auth.loginToDemoAccount().subscribe( () => { - this.angulartics2.eventTrack.next({ - action: 'Demo account is logged in', - }); - }); - } - }) - - const expirationDateFromURL = new URLSearchParams(location.search).get('expires'); - - if (expirationDateFromURL) { - const expirationDateString = new Date(parseInt(expirationDateFromURL, 10)); - localStorage.setItem('token_expiration', expirationDateString.toString()); - }; - - let expirationToken = localStorage.getItem('token_expiration'); - - if (!expirationToken) { - this.setUserLoggedIn(false); - } - - this.navigationTabs = { - 'dashboard': { - caption: 'Tables' - }, - 'audit': { - caption: 'Audit' - }, - 'permissions': { - caption: 'Permissions' - }, - 'connection-settings': { - caption: 'Connection settings' - }, - 'edit-db': { - caption: 'Edit connection' - }, - } - - document.cookie = "G_AUTH2_MIGRATION=informational"; - this._auth.cast.subscribe( res => { - // app initialization after user logs in - if (!res.isTemporary && res.expires) { - const expirationTime = new Date(res.expires); - if (expirationTime) { - localStorage.setItem('token_expiration', expirationTime.toISOString()); - expirationToken = expirationTime.toISOString(); - } - - this.router.navigate(['/connections-list']); - - console.log('App component, user logged in, initializing app'); - this.initializeUserSession(); - - const expirationInterval = differenceInMilliseconds(expirationTime, new Date()); - setTimeout(() => { - this.logOut(true); - this.router.navigate(['/login']); - }, expirationInterval); - - } - // app initialization if user is logged in (session restoration) - else if (expirationToken) { - const expirationTime = expirationToken ? new Date(expirationToken) : null; - const currantTime = new Date(); - - if (expirationTime && currantTime) { - const expirationInterval = differenceInMilliseconds(expirationTime, currantTime); - console.log('expirationInterval', expirationInterval); - if (expirationInterval > 0) { - console.log('App component, session restoration'); - this.initializeUserSession(); - - setTimeout(() => { - if (this.userLoggedIn) this.logOut(true); - this.router.navigate(['/login']); - }, expirationInterval); - } else { - if (this.userLoggedIn) this.logOut(true); - this.router.navigate(['/login']); - } - } - } - }); - - this._user.cast.subscribe( arg => { - if (arg === 'delete') { - this.logOut(true); - } - }) - } - - get isCustomAccentedColor() { - return this._connections.isCustomAccentedColor; - } - - get connectionID() { - return this._connections.connectionID; - } - - get currentConnectionName() { - return this._connections.currentConnectionName; - } - - get isTestConnection() { - return this._connections.currentConnection?.isTestConnection || false; - } - - get visibleTabs() { - return this._connections.visibleTabs; - } - - get currentTab() { - return this._connections.currentTab; - } - - get ownUserConnections() { - return this._connections.ownConnectionsList; - } - - initializeUserSession() { - this._user.fetchUser() - .subscribe((res: User) => { - this.currentUser = res; - this.isDemo = this.currentUser.email.startsWith('demo_') && this.currentUser.email.endsWith('@rocketadmin.com'); - this._user.setIsDemo(this.isDemo); - this.setUserLoggedIn(true); - // @ts-expect-error - if (typeof window.Intercom !== 'undefined') window.Intercom("boot", { - // @ts-expect-error - ...window.intercomSettings, - user_hash: res.intercom_hash, - user_id: res.id, - email: res.email - }); - - //@ts-expect-error - if (this.isDemo) window.hj?.('identify', this.currentUser.id, { - 'mode': 'demo' - }); - - // this._connections.fetchConnections() - // .subscribe((res: any) => { - // this.connections = res.filter(connectionItem => !connectionItem.isTestConnection); - // }) - - this._connections.cast.subscribe( () => { - this._connections.fetchConnections().subscribe(); - }); - - this._company.getWhiteLabelProperties(res.company.id).subscribe( whiteLabelSettings => { - this.whiteLabelSettings.logo = whiteLabelSettings.logo; - this.whiteLabelSettingsLoaded = true; - - if (whiteLabelSettings.favicon) { - const link: HTMLLinkElement | null = document.querySelector("link[rel*='icon']"); - if (link) { - link.href = whiteLabelSettings.favicon; - } else { - const newLink = document.createElement('link'); - newLink.rel = 'icon'; - newLink.href = whiteLabelSettings.favicon; - document.head.appendChild(newLink); - } - } else { - const faviconIco = document.createElement('link'); - faviconIco.rel = 'icon'; - faviconIco.type = 'image/x-icon'; - faviconIco.href = 'assets/favicon.ico'; - - const favicon16 = document.createElement('link'); - favicon16.rel = 'icon'; - favicon16.type = 'image/png'; - favicon16.setAttribute('sizes', '16x16'); - favicon16.href = 'assets/favicon-16x16.png'; - - const favicon32 = document.createElement('link'); - favicon32.rel = 'icon'; - favicon32.type = 'image/png'; - favicon32.setAttribute('sizes', '32x32'); - favicon32.href = 'assets/favicon-32x32.png'; - - document.head.appendChild(favicon16); - document.head.appendChild(favicon32); - } - }) - this._uiSettings.getUiSettings().subscribe(settings => { - this.isFeatureNotificationShown = (settings?.globalSettings?.lastFeatureNotificationId !== this.currentFeatureNotificationId) - }); - } - ); - } - - dismissFeatureNotification() { - this._uiSettings.updateGlobalSetting('lastFeatureNotificationId', this.currentFeatureNotificationId) - this.isFeatureNotificationShown = false; - } - - setUserLoggedIn(state) { - this.userLoggedIn = state; - this.changeDetector.detectChanges(); - } - - logoutAndRedirectToRegistration() { - this._auth.logOutUser().subscribe(() => { - this.setUserLoggedIn(false); - this.isDemo = false; - this._user.setIsDemo(false); - this.currentUser = null; - localStorage.removeItem('token_expiration'); - this.router.navigate(['/registration']); - } - ); - } - - logOut(isTokenExpired?: boolean) { - try { - // @ts-expect-error - google.accounts.id.revoke(this.currentUser.email, done => { - console.log('consent revoked'); - console.log(done); - console.log(this.currentUser.email); - }); - } catch(error) { - console.log('google error'); - console.log(error); - } - - this._auth.logOutUser().subscribe(() => { - this.setUserLoggedIn(null); - localStorage.removeItem('token_expiration'); - - if (this.isSaas) { - if (!isTokenExpired) window.location.href="https://rocketadmin.com/"; - } else { - this.router.navigate(['/login']) - } - }); - } + public isSaas = (environment as any).saas; + public appVersion = version; + userActivity; + userInactive: Subject = new Subject(); + currentFeatureNotificationId: string = 'saved-filters'; + isFeatureNotificationShown: boolean = false; + + userLoggedIn = null; + isDemo = false; + redirect_uri = `${location.origin}/loader`; + token = null; + routePathParam; + authBarTheme; + activeLink: string; + navigationTabs: object; + currentUser: User; + page: string; + whiteLabelSettingsLoaded = false; + whiteLabelSettings: { + logo: string; + favicon: string; + } = { + logo: '', + favicon: '', + }; + public connections: Connection[] = []; + + constructor( + public changeDetector: ChangeDetectorRef, + // private ngZone: NgZone, + public route: ActivatedRoute, + public router: Router, + public _connections: ConnectionsService, + public _company: CompanyService, + public _user: UserService, + public _auth: AuthService, + _tables: TablesService, + private _uiSettings: UiSettingsService, + angulartics2Amplitude: Angulartics2Amplitude, + private angulartics2: Angulartics2, + private domSanitizer: DomSanitizer, + private matIconRegistry: MatIconRegistry, + ) { + this.matIconRegistry.addSvgIcon( + 'mysql', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/db-logos/mysql_logo.svg'), + ); + this.matIconRegistry.addSvgIcon( + 'mssql', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/db-logos/mssql_logo.svg'), + ); + this.matIconRegistry.addSvgIcon( + 'oracledb', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/db-logos/oracle_logo.svg'), + ); + this.matIconRegistry.addSvgIcon( + 'postgres', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/db-logos/postgres_logo.svg'), + ); + this.matIconRegistry.addSvgIcon( + 'mongodb', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/db-logos/mongodb_logo.svg'), + ); + this.matIconRegistry.addSvgIcon( + 'dynamodb', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/db-logos/dynamodb_logo.svg'), + ); + this.matIconRegistry.addSvgIcon( + 'ibmdb2', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/db-logos/db2_logo.svg'), + ); + this.matIconRegistry.addSvgIcon( + 'cassandra', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/db-logos/сassandra_logo.svg'), + ); + this.matIconRegistry.addSvgIcon( + 'redis', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/db-logos/redis_logo.svg'), + ); + this.matIconRegistry.addSvgIcon( + 'elasticsearch', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/db-logos/elasticsearch_logo.svg'), + ); + this.matIconRegistry.addSvgIcon( + 'clickhouse', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/db-logos/clickhouse_logo.svg'), + ); + this.matIconRegistry.addSvgIcon( + 'github', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/github.svg'), + ); + this.matIconRegistry.addSvgIcon( + 'google', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/google.svg'), + ); + this.matIconRegistry.addSvgIcon( + 'ai_rocket', + this.domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/ai-rocket.svg'), + ); + angulartics2Amplitude.startTracking(); + } + + ngOnInit() { + this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => { + this.page = this.router.routerState.snapshot.url.split('?')[0]; + + console.log('Navigated to page:', this.page); + + if (this.router.routerState.snapshot.root.queryParams.mode === 'demo') { + console.log('App component, demo mode search params found'); + this._auth.loginToDemoAccount().subscribe(() => { + this.angulartics2.eventTrack.next({ + action: 'Demo account is logged in', + }); + }); + } + }); + + const expirationDateFromURL = new URLSearchParams(location.search).get('expires'); + + if (expirationDateFromURL) { + const expirationDateString = new Date(parseInt(expirationDateFromURL, 10)); + localStorage.setItem('token_expiration', expirationDateString.toString()); + } + + let expirationToken = localStorage.getItem('token_expiration'); + + if (!expirationToken) { + this.setUserLoggedIn(false); + } + + this.navigationTabs = { + dashboard: { + caption: 'Tables', + }, + audit: { + caption: 'Audit', + }, + permissions: { + caption: 'Permissions', + }, + 'connection-settings': { + caption: 'Connection settings', + }, + 'edit-db': { + caption: 'Edit connection', + }, + }; + + document.cookie = 'G_AUTH2_MIGRATION=informational'; + this._auth.cast.subscribe((res) => { + // app initialization after user logs in + if (!res.isTemporary && res.expires) { + const expirationTime = new Date(res.expires); + if (expirationTime) { + localStorage.setItem('token_expiration', expirationTime.toISOString()); + expirationToken = expirationTime.toISOString(); + } + + this.router.navigate(['/connections-list']); + + console.log('App component, user logged in, initializing app'); + this.initializeUserSession(); + + const expirationInterval = differenceInMilliseconds(expirationTime, new Date()); + setTimeout(() => { + this.logOut(true); + this.router.navigate(['/login']); + }, expirationInterval); + } + // app initialization if user is logged in (session restoration) + else if (expirationToken) { + const expirationTime = expirationToken ? new Date(expirationToken) : null; + const currantTime = new Date(); + + if (expirationTime && currantTime) { + const expirationInterval = differenceInMilliseconds(expirationTime, currantTime); + console.log('expirationInterval', expirationInterval); + if (expirationInterval > 0) { + console.log('App component, session restoration'); + this.initializeUserSession(); + + setTimeout(() => { + if (this.userLoggedIn) this.logOut(true); + this.router.navigate(['/login']); + }, expirationInterval); + } else { + if (this.userLoggedIn) this.logOut(true); + this.router.navigate(['/login']); + } + } + } + }); + + this._user.cast.subscribe((arg) => { + if (arg === 'delete') { + this.logOut(true); + } + }); + } + + get isCustomAccentedColor() { + return this._connections.isCustomAccentedColor; + } + + get connectionID() { + return this._connections.connectionID; + } + + get currentConnectionName() { + return this._connections.currentConnectionName; + } + + get isTestConnection() { + return this._connections.currentConnection?.isTestConnection || false; + } + + get visibleTabs() { + return this._connections.visibleTabs; + } + + get currentTab() { + return this._connections.currentTab; + } + + get ownUserConnections() { + return this._connections.ownConnectionsList; + } + + initializeUserSession() { + this._user.fetchUser().subscribe((res: User) => { + this.currentUser = res; + this.isDemo = this.currentUser.email.startsWith('demo_') && this.currentUser.email.endsWith('@rocketadmin.com'); + this._user.setIsDemo(this.isDemo); + this.setUserLoggedIn(true); + if (typeof window.Intercom !== 'undefined') + window.Intercom('boot', { + ...window.intercomSettings, + user_hash: res.intercom_hash, + user_id: res.id, + email: res.email, + }); + + if (this.isDemo) + window.hj?.('identify', this.currentUser.id, { + mode: 'demo', + }); + + // this._connections.fetchConnections() + // .subscribe((res: any) => { + // this.connections = res.filter(connectionItem => !connectionItem.isTestConnection); + // }) + + this._connections.cast.subscribe(() => { + this._connections.fetchConnections().subscribe(); + }); + + this._company.getWhiteLabelProperties(res.company.id).subscribe((whiteLabelSettings) => { + this.whiteLabelSettings.logo = whiteLabelSettings.logo; + this.whiteLabelSettingsLoaded = true; + + if (whiteLabelSettings.favicon) { + const link: HTMLLinkElement | null = document.querySelector("link[rel*='icon']"); + if (link) { + link.href = whiteLabelSettings.favicon; + } else { + const newLink = document.createElement('link'); + newLink.rel = 'icon'; + newLink.href = whiteLabelSettings.favicon; + document.head.appendChild(newLink); + } + } else { + const faviconIco = document.createElement('link'); + faviconIco.rel = 'icon'; + faviconIco.type = 'image/x-icon'; + faviconIco.href = 'assets/favicon.ico'; + + const favicon16 = document.createElement('link'); + favicon16.rel = 'icon'; + favicon16.type = 'image/png'; + favicon16.setAttribute('sizes', '16x16'); + favicon16.href = 'assets/favicon-16x16.png'; + + const favicon32 = document.createElement('link'); + favicon32.rel = 'icon'; + favicon32.type = 'image/png'; + favicon32.setAttribute('sizes', '32x32'); + favicon32.href = 'assets/favicon-32x32.png'; + + document.head.appendChild(favicon16); + document.head.appendChild(favicon32); + } + }); + this._uiSettings.getUiSettings().subscribe((settings) => { + this.isFeatureNotificationShown = + settings?.globalSettings?.lastFeatureNotificationId !== this.currentFeatureNotificationId; + }); + }); + } + + dismissFeatureNotification() { + this._uiSettings.updateGlobalSetting('lastFeatureNotificationId', this.currentFeatureNotificationId); + this.isFeatureNotificationShown = false; + } + + setUserLoggedIn(state) { + this.userLoggedIn = state; + this.changeDetector.detectChanges(); + } + + logoutAndRedirectToRegistration() { + this._auth.logOutUser().subscribe(() => { + this.setUserLoggedIn(false); + this.isDemo = false; + this._user.setIsDemo(false); + this.currentUser = null; + localStorage.removeItem('token_expiration'); + this.router.navigate(['/registration']); + }); + } + + logOut(isTokenExpired?: boolean) { + try { + // @ts-expect-error + google.accounts.id.revoke(this.currentUser.email, (done) => { + console.log('consent revoked'); + console.log(done); + console.log(this.currentUser.email); + }); + } catch (error) { + console.log('google error'); + console.log(error); + } + + this._auth.logOutUser().subscribe(() => { + this.setUserLoggedIn(null); + localStorage.removeItem('token_expiration'); + + if (this.isSaas) { + if (!isTokenExpired) window.location.href = 'https://rocketadmin.com/'; + } else { + this.router.navigate(['/login']); + } + }); + } } diff --git a/frontend/src/app/components/audit/audit.component.ts b/frontend/src/app/components/audit/audit.component.ts index a598c3d6e..63b8746b0 100644 --- a/frontend/src/app/components/audit/audit.component.ts +++ b/frontend/src/app/components/audit/audit.component.ts @@ -1,145 +1,142 @@ import { AsyncPipe, NgClass, NgForOf, NgIf } from '@angular/common'; import { Component, OnInit, ViewChild } from '@angular/core'; -import { merge } from 'rxjs'; -import { take, tap } from 'rxjs/operators'; - -import { Angulartics2OnModule } from 'angulartics2'; -import { AuditDataSource } from './audit-data-source'; -import { BannerComponent } from '../ui-components/banner/banner.component'; -import { CompanyService } from 'src/app/services/company.service'; -import { ConnectionsService } from 'src/app/services/connections.service'; import { FormsModule } from '@angular/forms'; -import { InfoDialogComponent } from './info-dialog/info-dialog.component'; -import { Log } from 'src/app/models/logs'; import { MatButtonModule } from '@angular/material/button'; import { MatDialog } from '@angular/material/dialog'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatPaginator } from '@angular/material/paginator'; -import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator'; import { MatSelectModule } from '@angular/material/select'; import { MatTableModule } from '@angular/material/table'; -import { PlaceholderTableDataComponent } from '../skeletons/placeholder-table-data/placeholder-table-data.component'; +import { Title } from '@angular/platform-browser'; import { RouterModule } from '@angular/router'; +import { User } from '@sentry/angular'; +import { Angulartics2OnModule } from 'angulartics2'; +import { merge } from 'rxjs'; +import { take, tap } from 'rxjs/operators'; +import { normalizeTableName } from 'src/app/lib/normalize'; import { ServerError } from 'src/app/models/alert'; +import { Log } from 'src/app/models/logs'; import { TableProperties } from 'src/app/models/table'; +import { CompanyService } from 'src/app/services/company.service'; +import { ConnectionsService } from 'src/app/services/connections.service'; import { TablesService } from 'src/app/services/tables.service'; -import { Title } from '@angular/platform-browser'; -import { User } from '@sentry/angular-ivy'; import { UsersService } from 'src/app/services/users.service'; import { environment } from 'src/environments/environment'; -import { normalizeTableName } from 'src/app/lib/normalize'; +import { PlaceholderTableDataComponent } from '../skeletons/placeholder-table-data/placeholder-table-data.component'; +import { BannerComponent } from '../ui-components/banner/banner.component'; +import { AuditDataSource } from './audit-data-source'; +import { InfoDialogComponent } from './info-dialog/info-dialog.component'; @Component({ - selector: 'app-audit', - standalone: true, - imports: [ - NgIf, - NgForOf, - NgClass, - AsyncPipe, - MatFormFieldModule, - MatSelectModule, - MatButtonModule, - MatTableModule, - MatPaginatorModule, - FormsModule, - RouterModule, - Angulartics2OnModule, - BannerComponent, - PlaceholderTableDataComponent - ], - templateUrl: './audit.component.html', - styleUrls: ['./audit.component.css'] + selector: 'app-audit', + standalone: true, + imports: [ + NgIf, + NgForOf, + NgClass, + AsyncPipe, + MatFormFieldModule, + MatSelectModule, + MatButtonModule, + MatTableModule, + MatPaginatorModule, + FormsModule, + RouterModule, + Angulartics2OnModule, + BannerComponent, + PlaceholderTableDataComponent, + ], + templateUrl: './audit.component.html', + styleUrls: ['./audit.component.css'], }) export class AuditComponent implements OnInit { - public isSaas = (environment as any).saas; - public connectionID: string; - public accesLevel: string; - public columns: string[]; - public dataColumns: string[]; - public tablesList: TableProperties[] = null; - public tableName: string = 'showAll'; - public usersList: User[]; - public userEmail: string = 'showAll'; - public isServerError: boolean = false; - public serverError: ServerError; - public noTablesError: boolean = false; + public isSaas = (environment as any).saas; + public connectionID: string; + public accesLevel: string; + public columns: string[]; + public dataColumns: string[]; + public tablesList: TableProperties[] = null; + public tableName: string = 'showAll'; + public usersList: User[]; + public userEmail: string = 'showAll'; + public isServerError: boolean = false; + public serverError: ServerError; + public noTablesError: boolean = false; - public dataSource: AuditDataSource = null; + public dataSource: AuditDataSource = null; - @ViewChild(MatPaginator) paginator: MatPaginator; + @ViewChild(MatPaginator) paginator: MatPaginator; - constructor( - private _connections: ConnectionsService, - private _tables: TablesService, - private _users: UsersService, - private _companyService: CompanyService, - public dialog: MatDialog, - private title: Title - ) { } + constructor( + private _connections: ConnectionsService, + private _tables: TablesService, + private _users: UsersService, + private _companyService: CompanyService, + public dialog: MatDialog, + private title: Title, + ) {} - ngAfterViewInit() { - this.dataSource.paginator = this.paginator; + ngAfterViewInit() { + this.dataSource.paginator = this.paginator; - merge(this.paginator.page) - .pipe( - tap(() => this.loadLogsPage()) - ) - .subscribe(); - } + merge(this.paginator.page) + .pipe(tap(() => this.loadLogsPage())) + .subscribe(); + } - ngOnInit(): void { - this._companyService.getCurrentTabTitle() - .pipe(take(1)) - .subscribe(tabTitle => { - this.title.setTitle(`Connections | ${tabTitle || 'Rocketadmin'}`); - }); - this.connectionID = this._connections.currentConnectionID; - this.accesLevel = this._connections.currentConnectionAccessLevel; - this.columns = ['Table', 'User', 'Action', 'Date', 'Status', 'Details']; - this.dataColumns = ['Table', 'User', 'Action', 'Date', 'Status']; - this.dataSource = new AuditDataSource(this._connections); - this.loadLogsPage(); + ngOnInit(): void { + this._companyService + .getCurrentTabTitle() + .pipe(take(1)) + .subscribe((tabTitle) => { + this.title.setTitle(`Connections | ${tabTitle || 'Rocketadmin'}`); + }); + this.connectionID = this._connections.currentConnectionID; + this.accesLevel = this._connections.currentConnectionAccessLevel; + this.columns = ['Table', 'User', 'Action', 'Date', 'Status', 'Details']; + this.dataColumns = ['Table', 'User', 'Action', 'Date', 'Status']; + this.dataSource = new AuditDataSource(this._connections); + this.loadLogsPage(); - this._tables.fetchTables(this.connectionID) - .subscribe( - res => { - if (res.length) { - this.tablesList = res.map((tableItem: TableProperties) => { - if (tableItem.display_name) return {...tableItem} - else return {...tableItem, normalizedTableName: normalizeTableName(tableItem.table)} - }); - }; - this.noTablesError = (res.length === 0) - }, - (err) => { - this.isServerError = true; - this.serverError = {abstract: err.error.message, details: err.error.originalMessage}; - }) + this._tables.fetchTables(this.connectionID).subscribe( + (res) => { + if (res.length) { + this.tablesList = res.map((tableItem: TableProperties) => { + if (tableItem.display_name) return { ...tableItem }; + else return { ...tableItem, normalizedTableName: normalizeTableName(tableItem.table) }; + }); + } + this.noTablesError = res.length === 0; + }, + (err) => { + this.isServerError = true; + this.serverError = { abstract: err.error.message, details: err.error.originalMessage }; + }, + ); - if (this.accesLevel !== 'none') this._users.fetchConnectionUsers(this.connectionID) - .subscribe(res => { - this.usersList = res; - }) - } + if (this.accesLevel !== 'none') + this._users.fetchConnectionUsers(this.connectionID).subscribe((res) => { + this.usersList = res; + }); + } - loadLogsPage() { - this.dataSource.fetchLogs({ - connectionID: this.connectionID, - tableName: this.tableName, - userEmail: this.userEmail - }); - } + loadLogsPage() { + this.dataSource.fetchLogs({ + connectionID: this.connectionID, + tableName: this.tableName, + userEmail: this.userEmail, + }); + } - openInfoLogDialog(log: Log) { - this.dialog.open(InfoDialogComponent, { - width: '50em', - data: log - }) - } + openInfoLogDialog(log: Log) { + this.dialog.open(InfoDialogComponent, { + width: '50em', + data: log, + }); + } - openIntercome() { - // @ts-expect-error - Intercom('show'); - } + openIntercome() { + // @ts-expect-error + Intercom('show'); + } } diff --git a/frontend/src/app/components/company/company.component.spec.ts b/frontend/src/app/components/company/company.component.spec.ts index 13c2becc2..ee433e8d7 100644 --- a/frontend/src/app/components/company/company.component.spec.ts +++ b/frontend/src/app/components/company/company.component.spec.ts @@ -1,291 +1,301 @@ -import { Company, CompanyMember, CompanyMemberRole } from 'src/app/models/company'; +import { provideHttpClient } from '@angular/common/http'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; import { MatDialog, MatDialogModule } from '@angular/material/dialog'; - -import { Angulartics2Module } from 'angulartics2'; +import { MatInputModule } from '@angular/material/input'; +import { MatSnackBarModule } from '@angular/material/snack-bar'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { CompanyComponent } from './company.component'; +import { provideRouter } from '@angular/router'; +import { Angulartics2Module } from 'angulartics2'; +import { of } from 'rxjs'; +import { Company, CompanyMember, CompanyMemberRole } from 'src/app/models/company'; +import { SubscriptionPlans } from 'src/app/models/user'; import { CompanyService } from 'src/app/services/company.service'; +import { UserService } from 'src/app/services/user.service'; +import { CompanyComponent } from './company.component'; import { DeleteMemberDialogComponent } from './delete-member-dialog/delete-member-dialog.component'; -import { FormsModule } from '@angular/forms'; import { InviteMemberDialogComponent } from './invite-member-dialog/invite-member-dialog.component'; -import { MatInputModule } from '@angular/material/input'; -import { MatSnackBarModule } from '@angular/material/snack-bar'; import { RevokeInvitationDialogComponent } from './revoke-invitation-dialog/revoke-invitation-dialog.component'; -import { SubscriptionPlans } from 'src/app/models/user'; -import { UserService } from 'src/app/services/user.service'; -import { of } from 'rxjs'; -import { provideHttpClient } from '@angular/common/http'; -import { provideRouter } from '@angular/router'; describe('CompanyComponent', () => { - let component: CompanyComponent; - let fixture: ComponentFixture; - let dialog: MatDialog; - - let fakeCompanyService = jasmine.createSpyObj('CompanyService', ['isCustomDomain', 'fetchCompany', 'fetchCompanyMembers', 'getCustomDomain', 'updateCompanyName', 'updateCompanyMemberRole', 'cast']); - let fakeUserService = jasmine.createSpyObj('UserService', ['cast']); - - const mockCompany: Company = { - "id": "company-12345678", - "name": "My company", - "additional_info": null, - "portal_link": "https://payments.rocketadmin.com/p/session/123455", - "subscriptionLevel": SubscriptionPlans.free, - "is_payment_method_added": true, - "address": {}, - "connections": [ - { - "id": "12345678", - "createdAt": "2024-02-12T16:54:56.482Z", - "updatedAt": "2024-02-12T17:08:12.643Z", - "title": "Test DB", - "author": { - "id": "author-1", - "isActive": false, - "email": "author1@test.com", - "createdAt": "2024-01-06T21:11:36.746Z", - "name": "John Smith", - "is_2fa_enabled": false, - "role": "ADMIN" - }, - "groups": [ - { - "id": "0955923f-9101-4fa9-95ca-b003a5c7ce89", - "isMain": true, - "title": "Admin", - "users": [ - { - "id": "a06ee7bf-e6c9-4c1a-a5aa-e9ba09e3e8a1", - "isActive": false, - "email": "author1@test.com", - "createdAt": "2024-01-06T21:11:36.746Z", - "name": null, - "is_2fa_enabled": false, - "role": CompanyMemberRole.CAO - } - ] - }, - ] - }, - ], - "invitations": [ - { - "id": "invitation1", - "verification_string": "verification_string_12345678", - "groupId": null, - "inviterId": "user1", - "invitedUserEmail": "admin1@test.com", - "role": CompanyMemberRole.CAO, - } - ], - show_test_connections: false - } - - const mockMembers = [ - { - "id": "61582cb5-5577-43d2-811f-900668ecfff1", - "isActive": true, - "email": "user1@test.com", - "createdAt": "2024-02-05T09:41:08.199Z", - "name": "User 3333", - "is_2fa_enabled": false, - "role": "USER" - }, - { - "id": "a06ee7bf-e6c9-4c1a-a5aa-e9ba09e3e8a1", - "isActive": false, - "email": "admin0@test.com", - "createdAt": "2024-01-06T21:11:36.746Z", - "name": null, - "is_2fa_enabled": false, - "role": "ADMIN" - } - ] - - const mockCompanyDomain = { - "success": false, - "domain_info": null - } - - fakeCompanyService.cast = of(''); - fakeCompanyService.fetchCompany.and.returnValue(of(mockCompany)); - fakeCompanyService.fetchCompanyMembers.and.returnValue(of(mockMembers)); - fakeCompanyService.getCustomDomain.and.returnValue(of(mockCompanyDomain)); - fakeCompanyService.updateCompanyName.and.returnValue(of({})); - fakeCompanyService.updateCompanyMemberRole.and.returnValue(of({})); - fakeCompanyService.getCurrentTabTitle = jasmine.createSpy().and.returnValue(of('Rocketadmin')); - fakeUserService.cast = of(mockMembers[1]); - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ - MatSnackBarModule, - MatDialogModule, - Angulartics2Module.forRoot(), - FormsModule, - MatInputModule, - BrowserAnimationsModule, - CompanyComponent - ], - providers: [ - provideRouter([]), - provideHttpClient(), - { provide: CompanyService, useValue: fakeCompanyService }, - { provide: UserService, useValue: fakeUserService } - ] -}) - .compileComponents(); - - fixture = TestBed.createComponent(CompanyComponent); - component = fixture.componentInstance; - dialog = TestBed.get(MatDialog); - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - it('should set initial values and call functions to define plan and receive company members', () => { - const fakeSetCompanyPlan = spyOn(component, 'setCompanyPlan'); - spyOn(fakeCompanyService.cast, 'subscribe'); - - component.ngOnInit(); - fixture.detectChanges(); - - expect(component.company).toEqual(mockCompany); - expect(fakeSetCompanyPlan).toHaveBeenCalledWith(mockCompany.subscriptionLevel); - expect(fakeCompanyService.fetchCompanyMembers).toHaveBeenCalledWith(mockCompany.id); - expect(fakeCompanyService.cast.subscribe).toHaveBeenCalled(); - }); - - it('should receive company info and members when invitation was sent', () => { - fakeCompanyService.cast = of('invited'); - - component.ngOnInit(); - fixture.detectChanges(); - - expect(fakeCompanyService.fetchCompany).toHaveBeenCalledWith(); - expect(fakeCompanyService.fetchCompanyMembers).toHaveBeenCalledWith(mockCompany.id); - }); - - it('should receive company members when a member was deleted', () => { - fakeCompanyService.cast = of('deleted'); - - component.ngOnInit(); - fixture.detectChanges(); - - expect(fakeCompanyService.fetchCompanyMembers).toHaveBeenCalledWith(mockCompany.id); - }); - - it('should get company members and mix it with invitation, and set the value', () => { - fakeCompanyService.cast = of('deleted'); - - component.getCompanyMembers('company-12345678'); - - expect(component.members).toEqual([ - { - "id": "a06ee7bf-e6c9-4c1a-a5aa-e9ba09e3e8a1", - "isActive": false, - "email": "admin0@test.com", - "createdAt": "2024-01-06T21:11:36.746Z", - "name": null, - "is_2fa_enabled": false, - "role": "ADMIN" - }, - { - "id": "61582cb5-5577-43d2-811f-900668ecfff1", - "isActive": true, - "email": "user1@test.com", - "createdAt": "2024-02-05T09:41:08.199Z", - "name": "User 3333", - "is_2fa_enabled": false, - "role": "USER" - }, - { - "id": "invitation1", - "verification_string": "verification_string_12345678", - "groupId": null, - "inviterId": "user1", - "invitedUserEmail": "admin1@test.com", - "role": CompanyMemberRole.CAO, - "pending": true, - email: "admin1@test.com" - } - ]); - expect(component.adminsCount).toBe(1); - expect(component.usersCount).toBe(3); - }); - - it('should set company plan to team if TEAM_PLAN', () => { - component.setCompanyPlan(SubscriptionPlans.team); - - expect(component.currentPlan).toBe('team'); - }); - - it('should set company plan to free if nothing is in subscriptionLevel', () => { - component.setCompanyPlan(null); - - expect(component.currentPlan).toBe('free'); - }); - - it('should open Add member dialog and pass company id and name', () => { - const fakeAddMemberDialogOpen = spyOn(dialog, 'open'); - component.company = mockCompany; - - component.handleAddMemberDialogOpen(); - expect(fakeAddMemberDialogOpen).toHaveBeenCalledOnceWith(InviteMemberDialogComponent, { - width: '25em', - data: mockCompany - }); - }); - - it('should open Delete member dialog and pass company id and member', () => { - const fakeDeleteMemberDialogOpen = spyOn(dialog, 'open'); - component.company.id = 'company-12345678'; - const fakeMember: CompanyMember = { - "id": "61582cb5-5577-43d2-811f-900668ecfff1", - "isActive": true, - "email": "user1@test.com", - "name": "User 3333", - "is_2fa_enabled": false, - "role": CompanyMemberRole.Member, - "has_groups": false - } - - component.handleDeleteMemberDialogOpen(fakeMember); - expect(fakeDeleteMemberDialogOpen).toHaveBeenCalledOnceWith(DeleteMemberDialogComponent, { - width: '25em', - data: {companyId: 'company-12345678', user: fakeMember} - }); - }); - - it('should open Revoke invitation dialog and pass company id and member email', () => { - const fakeRevokeInvitationDialogOpen = spyOn(dialog, 'open'); - component.company.id = 'company-12345678'; - - component.handleRevokeInvitationDialogOpen('user1@test.com'); - expect(fakeRevokeInvitationDialogOpen).toHaveBeenCalledOnceWith(RevokeInvitationDialogComponent, { - width: '25em', - data: {companyId: 'company-12345678', userEmail: 'user1@test.com'} - }); - }); - - it('should call update company name', () => { - component.company.id = 'company-12345678'; - component.company.name = 'New company name'; - - component.changeCompanyName(); - expect(fakeCompanyService.updateCompanyName).toHaveBeenCalledOnceWith('company-12345678', 'New company name'); - }); - - it('should call update company member role to ADMIN and request company members list', () => { - component.company.id = 'company-12345678'; - component.company.name = 'New company name'; - - component.updateRole('user-12345678', CompanyMemberRole.CAO); - expect(fakeCompanyService.updateCompanyMemberRole).toHaveBeenCalledOnceWith('company-12345678', 'user-12345678', 'ADMIN'); - expect(fakeCompanyService.fetchCompanyMembers).toHaveBeenCalledWith('company-12345678'); - }); + let component: CompanyComponent; + let fixture: ComponentFixture; + let dialog: MatDialog; + + let fakeCompanyService = jasmine.createSpyObj('CompanyService', [ + 'isCustomDomain', + 'fetchCompany', + 'fetchCompanyMembers', + 'getCustomDomain', + 'updateCompanyName', + 'updateCompanyMemberRole', + 'cast', + ]); + let fakeUserService = jasmine.createSpyObj('UserService', ['cast']); + + const mockCompany: Company = { + id: 'company-12345678', + name: 'My company', + additional_info: null, + portal_link: 'https://payments.rocketadmin.com/p/session/123455', + subscriptionLevel: SubscriptionPlans.free, + is_payment_method_added: true, + address: {}, + connections: [ + { + id: '12345678', + createdAt: '2024-02-12T16:54:56.482Z', + updatedAt: '2024-02-12T17:08:12.643Z', + title: 'Test DB', + author: { + id: 'author-1', + isActive: false, + email: 'author1@test.com', + createdAt: '2024-01-06T21:11:36.746Z', + name: 'John Smith', + is_2fa_enabled: false, + role: 'ADMIN', + }, + groups: [ + { + id: '0955923f-9101-4fa9-95ca-b003a5c7ce89', + isMain: true, + title: 'Admin', + users: [ + { + id: 'a06ee7bf-e6c9-4c1a-a5aa-e9ba09e3e8a1', + isActive: false, + email: 'author1@test.com', + createdAt: '2024-01-06T21:11:36.746Z', + name: null, + is_2fa_enabled: false, + role: CompanyMemberRole.CAO, + }, + ], + }, + ], + }, + ], + invitations: [ + { + id: 'invitation1', + verification_string: 'verification_string_12345678', + groupId: null, + inviterId: 'user1', + invitedUserEmail: 'admin1@test.com', + role: CompanyMemberRole.CAO, + }, + ], + show_test_connections: false, + }; + + const mockMembers = [ + { + id: '61582cb5-5577-43d2-811f-900668ecfff1', + isActive: true, + email: 'user1@test.com', + createdAt: '2024-02-05T09:41:08.199Z', + name: 'User 3333', + is_2fa_enabled: false, + role: 'USER', + }, + { + id: 'a06ee7bf-e6c9-4c1a-a5aa-e9ba09e3e8a1', + isActive: false, + email: 'admin0@test.com', + createdAt: '2024-01-06T21:11:36.746Z', + name: null, + is_2fa_enabled: false, + role: 'ADMIN', + }, + ]; + + const mockCompanyDomain = { + success: false, + domain_info: null, + }; + + fakeCompanyService.cast = of(''); + fakeCompanyService.fetchCompany.and.returnValue(of(mockCompany)); + fakeCompanyService.fetchCompanyMembers.and.returnValue(of(mockMembers)); + fakeCompanyService.getCustomDomain.and.returnValue(of(mockCompanyDomain)); + fakeCompanyService.updateCompanyName.and.returnValue(of({})); + fakeCompanyService.updateCompanyMemberRole.and.returnValue(of({})); + fakeCompanyService.getCurrentTabTitle = jasmine.createSpy().and.returnValue(of('Rocketadmin')); + fakeUserService.cast = of(mockMembers[1]); + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + MatSnackBarModule, + MatDialogModule, + Angulartics2Module.forRoot(), + FormsModule, + MatInputModule, + BrowserAnimationsModule, + CompanyComponent, + ], + providers: [ + provideRouter([]), + provideHttpClient(), + { provide: CompanyService, useValue: fakeCompanyService }, + { provide: UserService, useValue: fakeUserService }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(CompanyComponent); + component = fixture.componentInstance; + dialog = TestBed.inject(MatDialog); + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should set initial values and call functions to define plan and receive company members', () => { + const fakeSetCompanyPlan = spyOn(component, 'setCompanyPlan'); + spyOn(fakeCompanyService.cast, 'subscribe'); + + component.ngOnInit(); + fixture.detectChanges(); + + expect(component.company).toEqual(mockCompany); + expect(fakeSetCompanyPlan).toHaveBeenCalledWith(mockCompany.subscriptionLevel); + expect(fakeCompanyService.fetchCompanyMembers).toHaveBeenCalledWith(mockCompany.id); + expect(fakeCompanyService.cast.subscribe).toHaveBeenCalled(); + }); + + it('should receive company info and members when invitation was sent', () => { + fakeCompanyService.cast = of('invited'); + + component.ngOnInit(); + fixture.detectChanges(); + + expect(fakeCompanyService.fetchCompany).toHaveBeenCalledWith(); + expect(fakeCompanyService.fetchCompanyMembers).toHaveBeenCalledWith(mockCompany.id); + }); + + it('should receive company members when a member was deleted', () => { + fakeCompanyService.cast = of('deleted'); + + component.ngOnInit(); + fixture.detectChanges(); + + expect(fakeCompanyService.fetchCompanyMembers).toHaveBeenCalledWith(mockCompany.id); + }); + + it('should get company members and mix it with invitation, and set the value', () => { + fakeCompanyService.cast = of('deleted'); + + component.getCompanyMembers('company-12345678'); + + expect(component.members).toEqual([ + { + id: 'a06ee7bf-e6c9-4c1a-a5aa-e9ba09e3e8a1', + isActive: false, + email: 'admin0@test.com', + createdAt: '2024-01-06T21:11:36.746Z', + name: null, + is_2fa_enabled: false, + role: 'ADMIN', + }, + { + id: '61582cb5-5577-43d2-811f-900668ecfff1', + isActive: true, + email: 'user1@test.com', + createdAt: '2024-02-05T09:41:08.199Z', + name: 'User 3333', + is_2fa_enabled: false, + role: 'USER', + }, + { + id: 'invitation1', + verification_string: 'verification_string_12345678', + groupId: null, + inviterId: 'user1', + invitedUserEmail: 'admin1@test.com', + role: CompanyMemberRole.CAO, + pending: true, + email: 'admin1@test.com', + }, + ]); + expect(component.adminsCount).toBe(1); + expect(component.usersCount).toBe(3); + }); + + it('should set company plan to team if TEAM_PLAN', () => { + component.setCompanyPlan(SubscriptionPlans.team); + + expect(component.currentPlan).toBe('team'); + }); + + it('should set company plan to free if nothing is in subscriptionLevel', () => { + component.setCompanyPlan(null); + + expect(component.currentPlan).toBe('free'); + }); + + it('should open Add member dialog and pass company id and name', () => { + const fakeAddMemberDialogOpen = spyOn(dialog, 'open'); + component.company = mockCompany; + + component.handleAddMemberDialogOpen(); + expect(fakeAddMemberDialogOpen).toHaveBeenCalledOnceWith(InviteMemberDialogComponent, { + width: '25em', + data: mockCompany, + }); + }); + + it('should open Delete member dialog and pass company id and member', () => { + const fakeDeleteMemberDialogOpen = spyOn(dialog, 'open'); + component.company.id = 'company-12345678'; + const fakeMember: CompanyMember = { + id: '61582cb5-5577-43d2-811f-900668ecfff1', + isActive: true, + email: 'user1@test.com', + name: 'User 3333', + is_2fa_enabled: false, + role: CompanyMemberRole.Member, + has_groups: false, + }; + + component.handleDeleteMemberDialogOpen(fakeMember); + expect(fakeDeleteMemberDialogOpen).toHaveBeenCalledOnceWith(DeleteMemberDialogComponent, { + width: '25em', + data: { companyId: 'company-12345678', user: fakeMember }, + }); + }); + + it('should open Revoke invitation dialog and pass company id and member email', () => { + const fakeRevokeInvitationDialogOpen = spyOn(dialog, 'open'); + component.company.id = 'company-12345678'; + + component.handleRevokeInvitationDialogOpen('user1@test.com'); + expect(fakeRevokeInvitationDialogOpen).toHaveBeenCalledOnceWith(RevokeInvitationDialogComponent, { + width: '25em', + data: { companyId: 'company-12345678', userEmail: 'user1@test.com' }, + }); + }); + + it('should call update company name', () => { + component.company.id = 'company-12345678'; + component.company.name = 'New company name'; + + component.changeCompanyName(); + expect(fakeCompanyService.updateCompanyName).toHaveBeenCalledOnceWith('company-12345678', 'New company name'); + }); + + it('should call update company member role to ADMIN and request company members list', () => { + component.company.id = 'company-12345678'; + component.company.name = 'New company name'; + + component.updateRole('user-12345678', CompanyMemberRole.CAO); + expect(fakeCompanyService.updateCompanyMemberRole).toHaveBeenCalledOnceWith( + 'company-12345678', + 'user-12345678', + 'ADMIN', + ); + expect(fakeCompanyService.fetchCompanyMembers).toHaveBeenCalledWith('company-12345678'); + }); }); diff --git a/frontend/src/app/components/connect-db/connect-db.component.spec.ts b/frontend/src/app/components/connect-db/connect-db.component.spec.ts index b8243b6cd..17b023625 100644 --- a/frontend/src/app/components/connect-db/connect-db.component.spec.ts +++ b/frontend/src/app/components/connect-db/connect-db.component.spec.ts @@ -1,243 +1,259 @@ -import { AlertActionType, AlertType } from 'src/app/models/alert'; +import { provideHttpClient } from '@angular/common/http'; +import { forwardRef } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ConnectionType, DBtype } from 'src/app/models/connection'; -import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms'; import { MatDialog, MatDialogModule } from '@angular/material/dialog'; - -import { Angulartics2Module } from 'angulartics2'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { ConnectDBComponent } from './connect-db.component'; -import { ConnectionsService } from 'src/app/services/connections.service'; -import { DbConnectionConfirmDialogComponent } from './db-connection-confirm-dialog/db-connection-confirm-dialog.component'; -import { DbConnectionDeleteDialogComponent } from './db-connection-delete-dialog/db-connection-delete-dialog.component'; import { MatInputModule } from '@angular/material/input'; import { MatRadioModule } from '@angular/material/radio'; import { MatSelectModule } from '@angular/material/select'; import { MatSnackBarModule } from '@angular/material/snack-bar'; -import { NotificationsService } from 'src/app/services/notifications.service'; -import { forwardRef } from '@angular/core'; -import { of } from 'rxjs'; -import { provideHttpClient } from '@angular/common/http'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { provideRouter } from '@angular/router'; +import { Angulartics2Module } from 'angulartics2'; +import { of } from 'rxjs'; +import { AlertActionType, AlertType } from 'src/app/models/alert'; +import { ConnectionType, DBtype } from 'src/app/models/connection'; +import { ConnectionsService } from 'src/app/services/connections.service'; +import { NotificationsService } from 'src/app/services/notifications.service'; +import { ConnectDBComponent } from './connect-db.component'; +import { DbConnectionConfirmDialogComponent } from './db-connection-confirm-dialog/db-connection-confirm-dialog.component'; +import { DbConnectionDeleteDialogComponent } from './db-connection-delete-dialog/db-connection-delete-dialog.component'; describe('ConnectDBComponent', () => { - let component: ConnectDBComponent; - let fixture: ComponentFixture; - let dialog: MatDialog; - - let fakeNotifications = jasmine.createSpyObj('NotificationsService', ['showErrorSnackbar', 'showSuccessSnackbar', 'showAlert', 'dismissAlert']); - let fakeConnectionsService = jasmine.createSpyObj('ConnectionsService', [ - 'currentConnection', 'currentConnectionAccessLevel', 'testConnection', - 'createConnection', 'updateConnection', 'getCurrentConnectionTitle' - ], {currentConnectionID: '9d5f6d0f-9516-4598-91c4-e4fe6330b4d4'}); - - const connectionCredsApp = { - "title": "Test connection via SSH tunnel to mySQL", - "masterEncryption": false, - "type": DBtype.MySQL, - "host": "database-2.cvfuxe8nltiq.us-east-2.rds.amazonaws.com", - "port": "3306", - "username": "admin", - "database": "testDB", - "schema": null, - "sid": null, - "id": "9d5f6d0f-9516-4598-91c4-e4fe6330b4d4", - "ssh": true, - "sshHost": "3.134.99.192", - "sshPort": '22', - "sshUsername": "ubuntu", - "ssl": false, - "cert": null, - "connectionType": ConnectionType.Direct, - "azure_encryption": false, - "signing_key": '' - } - - beforeEach(async() => { - await TestBed.configureTestingModule({ - imports: [ - MatSnackBarModule, - FormsModule, - MatSelectModule, - MatRadioModule, - MatInputModule, - MatDialogModule, - BrowserAnimationsModule, - Angulartics2Module.forRoot({}), - ConnectDBComponent - ], - providers: [ - provideHttpClient(), - provideRouter([]), - { - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => ConnectDBComponent), - multi: true - }, - { provide: NotificationsService, useValue: fakeNotifications }, - { provide: ConnectionsService, useValue: fakeConnectionsService }, - ] -}) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(ConnectDBComponent); - component = fixture.componentInstance; - dialog = TestBed.get(MatDialog); - - // @ts-expect-error - global.window.fbq = jasmine.createSpy(); - // @ts-expect-error - global.window.Intercom = jasmine.createSpy(); - - fakeConnectionsService.currentConnection.and.returnValue(connectionCredsApp); - fakeConnectionsService.getCurrentConnectionTitle.and.returnValue(of('Test connection via SSH tunnel to mySQL')); - // fakeConnectionsService.currentConnectionAccessLevel.and.returnValue('edit'); - - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - it('should show Success snackbar if test passes successfully', () => { - fakeConnectionsService.testConnection.and.returnValue(of({ - result: true - })); - - component.testConnection(); - expect(fakeNotifications.showSuccessSnackbar).toHaveBeenCalledOnceWith('Connection is live') - - fakeNotifications.showSuccessSnackbar.calls.reset(); - }); - - it('should show Error alert if test passes unsuccessfully', () => { - fakeConnectionsService.testConnection.and.returnValue(of({ - result: false, - message: 'Error in hostname.' - })); - - component.testConnection(); - expect(fakeNotifications.showAlert).toHaveBeenCalledWith(AlertType.Error, 'Error in hostname.', [jasmine.objectContaining({ - type: AlertActionType.Button, - caption: 'Dismiss', - })]); - - fakeNotifications.showAlert.calls.reset(); - }); - - it('should set 1521 port for Oracle db type', () => { - component.db.type = DBtype.Oracle; - component.dbTypeChange(); - - expect(component.db.port).toEqual('1521'); - }); - - it('should show Copy message', () => { - component.showCopyNotification('Connection token was copied to clipboard.'); - expect(fakeNotifications.showSuccessSnackbar).toHaveBeenCalledOnceWith('Connection token was copied to clipboard.') - - fakeNotifications.showSuccessSnackbar.calls.reset(); - }); - - it('should generate password if toggle is enabled', () => { - component.generatePassword(true); - expect(component.masterKey).toBeDefined(); - }); - - xit('should open delete connection dialog', () => { - const fakeDialogOpen = spyOn(dialog, 'open'); - const event = jasmine.createSpyObj('event', [ 'preventDefault', 'stopImmediatePropagation' ]); - - component.confirmDeleteConnection(connectionCredsApp, event); - expect(fakeDialogOpen).toHaveBeenCalledOnceWith(DbConnectionDeleteDialogComponent, { - width: '32em', - data: connectionCredsApp - }); - }); - - it('should create direct connection', () => { - fakeConnectionsService.createConnection.and.returnValue(of(connectionCredsApp)); - spyOnProperty(component, "db", "get").and.returnValue(connectionCredsApp); - component.createConnectionRequest(); - - expect(component.connectionID).toEqual('9d5f6d0f-9516-4598-91c4-e4fe6330b4d4'); - }) - - it('should create agent connection and set token', () => { - const dbApp = { - id: null, - title: "Agent connection", - type: DBtype.Oracle, - port: '5432', - connectionType: ConnectionType.Agent - } as any; - - const dbRes = { - id: "9d5f6d0f-9516-4598-91c4-e4fe6330b4d4", - title: "Agent connection", - type: 'agent_oracle', - port: 5432, - token: '1234-abcd-0987' - }; - - fakeConnectionsService.createConnection.and.returnValue(of(dbRes)); - spyOnProperty(component, "db", "get").and.returnValue(dbApp); - component.createConnectionRequest(); - - expect(component.connectionID).toEqual('9d5f6d0f-9516-4598-91c4-e4fe6330b4d4'); - expect(component.connectionToken).toEqual('1234-abcd-0987'); - }) - - xit('should update direct connection', () => { - fakeConnectionsService.updateConnection.and.returnValue(of(connectionCredsApp)); - spyOnProperty(component, "db", "get").and.returnValue(connectionCredsApp); - component.updateConnectionRequest(); - - // expect(routerSpy.navigate).toHaveBeenCalledWith(['/dashboard/9d5f6d0f-9516-4598-91c4-e4fe6330b4d4']); - }) - - it('should update agent connection and set token', () => { - const dbApp = { - id: null, - title: "Agent connection", - type: DBtype.Oracle, - port: '5432', - connectionType: ConnectionType.Agent - } as any; - - const dbRes = { - connection: { - id: "9d5f6d0f-9516-4598-91c4-e4fe6330b4d4", - title: "Agent connection", - type: 'agent_oracle', - port: 5432, - token: '1234-abcd-0987' - } - }; - - fakeConnectionsService.updateConnection.and.returnValue(of(dbRes)); - spyOnProperty(component, "db", "get").and.returnValue(dbApp); - component.updateConnectionRequest(); - - expect(component.connectionToken).toEqual('1234-abcd-0987'); - }) - - xit('should open dialog on test error', () => { - const fakeDialogOpen = spyOn(dialog, 'open'); - spyOnProperty(component, "db", "get").and.returnValue(connectionCredsApp); - component.masterKey = "master_password_12345678" - component.handleConnectionError('Hostname is invalid'); - - expect(fakeDialogOpen).toHaveBeenCalledOnceWith(DbConnectionConfirmDialogComponent, { - width: '25em', - data: { - dbCreds: connectionCredsApp, - masterKey: 'master_password_12345678', - errorMessage: 'Hostname is invalid' - } - }); - }) + let component: ConnectDBComponent; + let fixture: ComponentFixture; + let dialog: MatDialog; + + let fakeNotifications = jasmine.createSpyObj('NotificationsService', [ + 'showErrorSnackbar', + 'showSuccessSnackbar', + 'showAlert', + 'dismissAlert', + ]); + let fakeConnectionsService = jasmine.createSpyObj( + 'ConnectionsService', + [ + 'currentConnection', + 'currentConnectionAccessLevel', + 'testConnection', + 'createConnection', + 'updateConnection', + 'getCurrentConnectionTitle', + ], + { currentConnectionID: '9d5f6d0f-9516-4598-91c4-e4fe6330b4d4' }, + ); + + const connectionCredsApp = { + title: 'Test connection via SSH tunnel to mySQL', + masterEncryption: false, + type: DBtype.MySQL, + host: 'database-2.cvfuxe8nltiq.us-east-2.rds.amazonaws.com', + port: '3306', + username: 'admin', + database: 'testDB', + schema: null, + sid: null, + id: '9d5f6d0f-9516-4598-91c4-e4fe6330b4d4', + ssh: true, + sshHost: '3.134.99.192', + sshPort: '22', + sshUsername: 'ubuntu', + ssl: false, + cert: null, + connectionType: ConnectionType.Direct, + azure_encryption: false, + signing_key: '', + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + MatSnackBarModule, + FormsModule, + MatSelectModule, + MatRadioModule, + MatInputModule, + MatDialogModule, + BrowserAnimationsModule, + Angulartics2Module.forRoot({}), + ConnectDBComponent, + ], + providers: [ + provideHttpClient(), + provideRouter([]), + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => ConnectDBComponent), + multi: true, + }, + { provide: NotificationsService, useValue: fakeNotifications }, + { provide: ConnectionsService, useValue: fakeConnectionsService }, + ], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ConnectDBComponent); + component = fixture.componentInstance; + dialog = TestBed.inject(MatDialog); + + // @ts-expect-error + global.window.fbq = jasmine.createSpy(); + global.window.Intercom = jasmine.createSpy(); + + fakeConnectionsService.currentConnection.and.returnValue(connectionCredsApp); + fakeConnectionsService.getCurrentConnectionTitle.and.returnValue(of('Test connection via SSH tunnel to mySQL')); + // fakeConnectionsService.currentConnectionAccessLevel.and.returnValue('edit'); + + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should show Success snackbar if test passes successfully', () => { + fakeConnectionsService.testConnection.and.returnValue( + of({ + result: true, + }), + ); + + component.testConnection(); + expect(fakeNotifications.showSuccessSnackbar).toHaveBeenCalledOnceWith('Connection is live'); + + fakeNotifications.showSuccessSnackbar.calls.reset(); + }); + + it('should show Error alert if test passes unsuccessfully', () => { + fakeConnectionsService.testConnection.and.returnValue( + of({ + result: false, + message: 'Error in hostname.', + }), + ); + + component.testConnection(); + expect(fakeNotifications.showAlert).toHaveBeenCalledWith(AlertType.Error, 'Error in hostname.', [ + jasmine.objectContaining({ + type: AlertActionType.Button, + caption: 'Dismiss', + }), + ]); + + fakeNotifications.showAlert.calls.reset(); + }); + + it('should set 1521 port for Oracle db type', () => { + component.db.type = DBtype.Oracle; + component.dbTypeChange(); + + expect(component.db.port).toEqual('1521'); + }); + + it('should show Copy message', () => { + component.showCopyNotification('Connection token was copied to clipboard.'); + expect(fakeNotifications.showSuccessSnackbar).toHaveBeenCalledOnceWith('Connection token was copied to clipboard.'); + + fakeNotifications.showSuccessSnackbar.calls.reset(); + }); + + it('should generate password if toggle is enabled', () => { + component.generatePassword(true); + expect(component.masterKey).toBeDefined(); + }); + + xit('should open delete connection dialog', () => { + const fakeDialogOpen = spyOn(dialog, 'open'); + const event = jasmine.createSpyObj('event', ['preventDefault', 'stopImmediatePropagation']); + + component.confirmDeleteConnection(connectionCredsApp, event); + expect(fakeDialogOpen).toHaveBeenCalledOnceWith(DbConnectionDeleteDialogComponent, { + width: '32em', + data: connectionCredsApp, + }); + }); + + it('should create direct connection', () => { + fakeConnectionsService.createConnection.and.returnValue(of(connectionCredsApp)); + spyOnProperty(component, 'db', 'get').and.returnValue(connectionCredsApp); + component.createConnectionRequest(); + + expect(component.connectionID).toEqual('9d5f6d0f-9516-4598-91c4-e4fe6330b4d4'); + }); + + it('should create agent connection and set token', () => { + const dbApp = { + id: null, + title: 'Agent connection', + type: DBtype.Oracle, + port: '5432', + connectionType: ConnectionType.Agent, + } as any; + + const dbRes = { + id: '9d5f6d0f-9516-4598-91c4-e4fe6330b4d4', + title: 'Agent connection', + type: 'agent_oracle', + port: 5432, + token: '1234-abcd-0987', + }; + + fakeConnectionsService.createConnection.and.returnValue(of(dbRes)); + spyOnProperty(component, 'db', 'get').and.returnValue(dbApp); + component.createConnectionRequest(); + + expect(component.connectionID).toEqual('9d5f6d0f-9516-4598-91c4-e4fe6330b4d4'); + expect(component.connectionToken).toEqual('1234-abcd-0987'); + }); + + xit('should update direct connection', () => { + fakeConnectionsService.updateConnection.and.returnValue(of(connectionCredsApp)); + spyOnProperty(component, 'db', 'get').and.returnValue(connectionCredsApp); + component.updateConnectionRequest(); + + // expect(routerSpy.navigate).toHaveBeenCalledWith(['/dashboard/9d5f6d0f-9516-4598-91c4-e4fe6330b4d4']); + }); + + it('should update agent connection and set token', () => { + const dbApp = { + id: null, + title: 'Agent connection', + type: DBtype.Oracle, + port: '5432', + connectionType: ConnectionType.Agent, + } as any; + + const dbRes = { + connection: { + id: '9d5f6d0f-9516-4598-91c4-e4fe6330b4d4', + title: 'Agent connection', + type: 'agent_oracle', + port: 5432, + token: '1234-abcd-0987', + }, + }; + + fakeConnectionsService.updateConnection.and.returnValue(of(dbRes)); + spyOnProperty(component, 'db', 'get').and.returnValue(dbApp); + component.updateConnectionRequest(); + + expect(component.connectionToken).toEqual('1234-abcd-0987'); + }); + + xit('should open dialog on test error', () => { + const fakeDialogOpen = spyOn(dialog, 'open'); + spyOnProperty(component, 'db', 'get').and.returnValue(connectionCredsApp); + component.masterKey = 'master_password_12345678'; + component.handleConnectionError('Hostname is invalid'); + + expect(fakeDialogOpen).toHaveBeenCalledOnceWith(DbConnectionConfirmDialogComponent, { + width: '25em', + data: { + dbCreds: connectionCredsApp, + masterKey: 'master_password_12345678', + errorMessage: 'Hostname is invalid', + }, + }); + }); }); diff --git a/frontend/src/app/components/connections-list/own-connections/own-connections.component.ts b/frontend/src/app/components/connections-list/own-connections/own-connections.component.ts index a139e4776..d6f5ba87c 100644 --- a/frontend/src/app/components/connections-list/own-connections/own-connections.component.ts +++ b/frontend/src/app/components/connections-list/own-connections/own-connections.component.ts @@ -1,53 +1,46 @@ -import { Component, Input } from '@angular/core'; -import { supportedDatabasesTitles, supportedOrderedDatabases } from 'src/app/consts/databases'; - import { CommonModule } from '@angular/common'; -import { ConnectionItem } from 'src/app/models/connection'; +import { Component, Input } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; import { RouterModule } from '@angular/router'; +import { User } from '@sentry/angular'; +import { supportedDatabasesTitles, supportedOrderedDatabases } from 'src/app/consts/databases'; +import { ConnectionItem } from 'src/app/models/connection'; import { UiSettings } from 'src/app/models/ui-settings'; import { UiSettingsService } from 'src/app/services/ui-settings.service'; -import { User } from '@sentry/angular-ivy'; @Component({ - selector: 'app-own-connections', - imports: [ - CommonModule, - RouterModule, - MatIconModule, - MatButtonModule, - ], - templateUrl: './own-connections.component.html', - styleUrl: './own-connections.component.css' + selector: 'app-own-connections', + imports: [CommonModule, RouterModule, MatIconModule, MatButtonModule], + templateUrl: './own-connections.component.html', + styleUrl: './own-connections.component.css', }) export class OwnConnectionsComponent { - @Input() currentUser: User; - @Input() connections: ConnectionItem[] = null; - @Input() isDemo: boolean = false; + @Input() currentUser: User; + @Input() connections: ConnectionItem[] = null; + @Input() isDemo: boolean = false; - public displayedCardCount: number = 3; - public connectionsListCollapsed: boolean; - public supportedDatabasesTitles = supportedDatabasesTitles; - public supportedOrderedDatabases = supportedOrderedDatabases; + public displayedCardCount: number = 3; + public connectionsListCollapsed: boolean; + public supportedDatabasesTitles = supportedDatabasesTitles; + public supportedOrderedDatabases = supportedOrderedDatabases; - constructor(private _uiSettings: UiSettingsService) {} + constructor(private _uiSettings: UiSettingsService) {} - ngOnInit() { - this._uiSettings.getUiSettings() - .subscribe( (settings: UiSettings) => { - this.connectionsListCollapsed = settings?.globalSettings?.connectionsListCollapsed; - this.displayedCardCount = this.connectionsListCollapsed ? 3 : this.connections.length; - }); - } + ngOnInit() { + this._uiSettings.getUiSettings().subscribe((settings: UiSettings) => { + this.connectionsListCollapsed = settings?.globalSettings?.connectionsListCollapsed; + this.displayedCardCount = this.connectionsListCollapsed ? 3 : this.connections.length; + }); + } - showMore() { - this.displayedCardCount = this.connections.length; - this._uiSettings.updateGlobalSetting('connectionsListCollapsed', false); - } + showMore() { + this.displayedCardCount = this.connections.length; + this._uiSettings.updateGlobalSetting('connectionsListCollapsed', false); + } - showLess() { - this.displayedCardCount = 3; - this._uiSettings.updateGlobalSetting('connectionsListCollapsed', true); - } + showLess() { + this.displayedCardCount = 3; + this._uiSettings.updateGlobalSetting('connectionsListCollapsed', true); + } } diff --git a/frontend/src/app/components/dashboard/db-table-view/db-table-actions/db-table-actions.component.css b/frontend/src/app/components/dashboard/db-table-view/db-table-actions/db-table-actions.component.css index 55f0643b5..81d1971f2 100644 --- a/frontend/src/app/components/dashboard/db-table-view/db-table-actions/db-table-actions.component.css +++ b/frontend/src/app/components/dashboard/db-table-view/db-table-actions/db-table-actions.component.css @@ -1,31 +1,31 @@ .drawer { - height: 100%; + height: 100%; } .mat-drawer { - padding-bottom: 16px; - width: clamp(200px, 18%, 320px); + padding-bottom: 16px; + width: clamp(200px, 18%, 320px); } .drawer-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 16px 16px 0; + display: flex; + align-items: center; + justify-content: space-between; + padding: 16px 16px 0; } .drawer-header .mat-h1 { - margin: 0; + margin: 0; } .no-actions { - display: flex; - flex-direction: column; - align-items: center; - gap: 12px; - color: rgba(0,0,0,0.5); - padding: 1rem 0; - text-align: center; + display: flex; + flex-direction: column; + align-items: center; + gap: 12px; + color: rgba(0, 0, 0, 0.5); + padding: 1rem 0; + text-align: center; } /* .new-action-input { @@ -41,280 +41,281 @@ } */ .new-action-input { - background-color: transparent; - margin-left: 16px; - min-width: 220px; - width: calc(100% - 32px); + background-color: transparent; + margin-left: 16px; + min-width: 220px; + width: calc(100% - 32px); } .new-action-input ::ng-deep * { - background-color: transparent !important; + background-color: transparent !important; } .new-action-input ::ng-deep .mdc-text-field { - padding: 0 !important; + padding: 0 !important; } .new-action-input ::ng-deep .mat-mdc-form-field-infix { - min-height: 0; + min-height: 0; } -.new-action-input ::ng-deep .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix { - padding-top: 8px; - padding-bottom: 8px; +.new-action-input + ::ng-deep + .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) + .mat-mdc-form-field-infix { + padding-top: 8px; + padding-bottom: 8px; } .new-action-input ::ng-deep .mat-mdc-icon-button.mat-mdc-button-base { - width: 36px; - height: 36px; - padding: 6px; + width: 36px; + height: 36px; + padding: 6px; } .action-error { - position: absolute; - top: 44px; - left: 0; - color: #e53935; - font-size: 0.75em; - width: 100%; + position: absolute; + top: 44px; + left: 0; + color: #e53935; + font-size: 0.75em; + width: 100%; } .mat-drawer-content { - display: flex; - flex-direction: column; - padding: 20px 24px; + display: flex; + flex-direction: column; + padding: 20px 24px; } .rule { - flex-grow: 1; - display: flex; - align-items: stretch; - gap: 24px; - margin-top: 20px; + flex-grow: 1; + display: flex; + align-items: stretch; + gap: 24px; + margin-top: 20px; } .rule-settings { - display: flex; - flex-direction: column; - gap: 4px; - /* min-width: 420px; */ - width: 100%; + display: flex; + flex-direction: column; + gap: 4px; + /* min-width: 420px; */ + width: 100%; } .rule-name { - width: 50%; + width: 50%; } ::ng-deep .mat-menu-content { - padding: 16px !important; + padding: 16px !important; } .text_highlighted { - background: var(--color-accentedPalette-100); - color: var(--color-accentedPalette-100-contrast); - margin-bottom: 0 !important; - padding: 4px; + background: var(--color-accentedPalette-100); + color: var(--color-accentedPalette-100-contrast); + margin-bottom: 0 !important; + padding: 4px; } @media (prefers-color-scheme: dark) { - .text_highlighted { - background: var(--color-accentedPalette-800); - color: var(--color-accentedPalette-800-contrast); - } + .text_highlighted { + background: var(--color-accentedPalette-800); + color: var(--color-accentedPalette-800-contrast); + } } - .event { - display: flex; - align-items: center; - flex-wrap: wrap; - gap: 12px; - margin-top: 24px; + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 12px; + margin-top: 24px; } .custom-event { - display: flex; - flex-direction: column; - /* padding-left: 128px; */ - padding-top: 20px; - padding-bottom: 32px; + display: flex; + flex-direction: column; + /* padding-left: 128px; */ + padding-top: 20px; + padding-bottom: 32px; } .custom-event__row { - display: flex; - align-items: center; - gap: 24px; + display: flex; + align-items: center; + gap: 24px; } .list-action-list-item ::ng-deep .mdc-list-item__primary-text { - display: flex; - justify-content: space-between; - align-items: center; + display: flex; + justify-content: space-between; + align-items: center; } - .list-action-list-item_active { - --mdc-list-list-item-label-text-color: var(--color-accentedPalette-500); - --mdc-list-list-item-hover-label-text-color: var(--color-accentedPalette-500); - --mdc-list-list-item-focus-label-text-color: var(--color-accentedPalette-500); + --mat-list-list-item-label-text-color: var(--color-accentedPalette-500); + --mat-list-list-item-hover-label-text-color: var(--color-accentedPalette-500); + --mat-list-list-item-focus-label-text-color: var(--color-accentedPalette-500); } .radio-button_first { - margin-left: 16px; + margin-left: 16px; } .radio-button_second { - margin-left: 8px; + margin-left: 8px; } .action__actions { - margin-top: auto; - display: flex; - justify-content: space-between; + margin-top: auto; + display: flex; + justify-content: space-between; } .code-snippet-box { - position: relative; - border: 1px solid #b0b0b0; - margin-top: 8px; - margin-bottom: 20px; - max-width: 1100px; - padding: 8px 12px; + position: relative; + border: 1px solid #b0b0b0; + margin-top: 8px; + margin-bottom: 20px; + max-width: 1100px; + padding: 8px 12px; } .copy-button { - position: absolute; - right: 32px; - top: 32px; - background-color: #fff; - z-index: 5; + position: absolute; + right: 32px; + top: 32px; + background-color: #fff; + z-index: 5; } @media (prefers-color-scheme: dark) { - .code-snippet-box { - border-color: rgba(255,255,255,0.12); - background-color: #202020; - } + .code-snippet-box { + border-color: rgba(255, 255, 255, 0.12); + background-color: #202020; + } - .copy-button { - background-color: #202020; - } + .copy-button { + background-color: #202020; + } } @media screen and (max-width: 1400px) { - .copy-button { - right: 20px; - top: 100px; - } + .copy-button { + right: 20px; + top: 100px; + } } .confirmation-checkbox, .icon-picker { - margin-top: -16px; + margin-top: -16px; } .event { - display: flex; - align-items: center; - gap: 8px; + display: flex; + align-items: center; + gap: 8px; } .event__or { - margin-top: -22px !important; + margin-top: -22px !important; } .event__removeButton { - margin-top: -22px; + margin-top: -22px; } .rule-action { - display: flex; - align-items: center; - gap: 16px; + display: flex; + align-items: center; + gap: 16px; } .rule-action__label { - display: inline-block; - margin-top: -16px !important; + display: inline-block; + margin-top: -16px !important; } .rule-action__param { - width: 50%; + width: 50%; } .empty-state { - display: flex; - flex-direction: column; - align-items: center; - gap: 32px; - margin: 32px auto 0; - width: clamp(300px, 80vw, 1020px); + display: flex; + flex-direction: column; + align-items: center; + gap: 32px; + margin: 32px auto 0; + width: clamp(300px, 80vw, 1020px); } .actions-hint { - display: flex; - flex-direction: column; - align-items: center; - margin-top: 40px !important; + display: flex; + flex-direction: column; + align-items: center; + margin-top: 40px !important; } .actions-hint__title { - display: inline-block; - font-size: 1.25em; - margin-bottom: 4px; + display: inline-block; + font-size: 1.25em; + margin-bottom: 4px; } .actions-hint__text { - color: rgba(0, 0, 0, 0.64); + color: rgba(0, 0, 0, 0.64); } @media (prefers-color-scheme: dark) { - .actions-hint__text { - color: rgba(255, 255, 255, 0.64); - } + .actions-hint__text { + color: rgba(255, 255, 255, 0.64); + } } .rules-examples { - display: grid; - grid-template-columns: repeat(3, minmax(300px, 1fr)); - grid-gap: 20px; - width: 100%; + display: grid; + grid-template-columns: repeat(3, minmax(300px, 1fr)); + grid-gap: 20px; + width: 100%; } .rule-example { - display: flex; - flex-direction: column; - align-items: flex-start; - gap: 16px; - border: 1px solid rgba(0,0,0,0.12); - border-radius: 4px; - padding: 16px; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 16px; + border: 1px solid rgba(0, 0, 0, 0.12); + border-radius: 4px; + padding: 16px; } @media (prefers-color-scheme: dark) { - .rule-example { - border-color: rgba(255,255,255,0.12); - background-color: #202020; - } + .rule-example { + border-color: rgba(255, 255, 255, 0.12); + background-color: #202020; + } } .rule-example__row { - display: flex; - align-items: center; - gap: 24px; + display: flex; + align-items: center; + gap: 24px; } .rule-example__value { - display: flex; - align-items: center; - background-color: rgba(0,0,0,0.04); - color: rgba(0,0,0,0.64); - padding: 8px 16px; + display: flex; + align-items: center; + background-color: rgba(0, 0, 0, 0.04); + color: rgba(0, 0, 0, 0.64); + padding: 8px 16px; } @media (prefers-color-scheme: dark) { - .rule-example__value { - background-color: rgba(255,255,255,0.08); - color: rgba(255,255,255,0.64); - } -} \ No newline at end of file + .rule-example__value { + background-color: rgba(255, 255, 255, 0.08); + color: rgba(255, 255, 255, 0.64); + } +} diff --git a/frontend/src/app/components/dashboard/db-table-view/db-table-actions/db-table-actions.component.spec.ts b/frontend/src/app/components/dashboard/db-table-view/db-table-actions/db-table-actions.component.spec.ts index 28918707d..708d3ce75 100644 --- a/frontend/src/app/components/dashboard/db-table-view/db-table-actions/db-table-actions.component.spec.ts +++ b/frontend/src/app/components/dashboard/db-table-view/db-table-actions/db-table-actions.component.spec.ts @@ -1,376 +1,377 @@ +import { provideHttpClient } from '@angular/common/http'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatDialog, MatDialogModule } from '@angular/material/dialog'; - -import { ActionDeleteDialogComponent } from './action-delete-dialog/action-delete-dialog.component'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { CustomActionMethod, } from 'src/app/models/table'; -import { DbTableActionsComponent } from './db-table-actions.component'; import { MatSnackBarModule } from '@angular/material/snack-bar'; -import { NotificationsService } from 'src/app/services/notifications.service'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; -import { TablesService } from 'src/app/services/tables.service'; -import { of } from 'rxjs'; import { Angulartics2Module } from 'angulartics2'; -import { provideHttpClient } from '@angular/common/http'; +import { of } from 'rxjs'; +import { CustomActionMethod } from 'src/app/models/table'; +import { NotificationsService } from 'src/app/services/notifications.service'; +import { TablesService } from 'src/app/services/tables.service'; +import { ActionDeleteDialogComponent } from './action-delete-dialog/action-delete-dialog.component'; +import { DbTableActionsComponent } from './db-table-actions.component'; describe('DbTableActionsComponent', () => { - let component: DbTableActionsComponent; - let fixture: ComponentFixture; - let tablesService: TablesService; - let dialog: MatDialog; - let fakeNotifications; - - - beforeEach(async () => { - fakeNotifications = jasmine.createSpyObj('NotificationsService', ['showSuccessSnackbar']); - - await TestBed.configureTestingModule({ - imports: [ - RouterTestingModule, - MatDialogModule, - MatSnackBarModule, - BrowserAnimationsModule, - Angulartics2Module.forRoot(), - DbTableActionsComponent - ], - providers: [ - provideHttpClient(), - { - provide: NotificationsService, - useValue: fakeNotifications - } - ], - }).compileComponents(); - - fixture = TestBed.createComponent(DbTableActionsComponent); - tablesService = TestBed.inject(TablesService); - dialog = TestBed.get(MatDialog); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - it('should set selected rule', () => { - const rule = { - id: 'rule_12345678', - title: 'rule 1', - table_name: 'user', - events: [ - { - event: null - } - ], - table_actions: [] - } - component.setSelectedRule(rule) - expect(component.selectedRule).toEqual(rule); - expect(component.selectedRuleTitle).toEqual('rule 1'); - }); - - it('should switch between rules on rules list click', () => { - const rule = { - id: 'rule_12345678', - title: 'rule 1', - table_name: 'user', - events: [], - table_actions: [] - } - const mockSetSelectedAction = spyOn(component, 'setSelectedRule'); - - component.switchRulesView(rule) - - expect(mockSetSelectedAction).toHaveBeenCalledOnceWith(rule) - }); - - it('should set the new rule', () => { - component.tableName = 'user'; - component.addNewRule() - - expect(component.newRule).toEqual({ - id: '', - title: '', - table_name: 'user', - events: [ - { - event: null - } - ], - table_actions: [ - { - method: CustomActionMethod.URL, - emails: [], - url: '', - } - ] - }) - }); - - it('should set an error if user try to add rule with empty name to the list', () => { - component.newRule = { - id: '', - title: '', - table_name: 'user', - events: [ - { - event: null - } - ], - table_actions: [ - { - method: CustomActionMethod.URL, - emails: [], - url: '', - } - ] - } - component.handleAddNewRule() - - expect(component.actionNameError).toEqual('The name cannot be empty.'); - }); - - it('should set an error if user try to add rule with the same name to the list', () => { - component.rules = [{ - id: '', - title: 'rule 1', - table_name: 'user', - events: [], - table_actions: [] - }] - component.newRule = { - id: '', - title: 'rule 1', - table_name: 'user', - events: [], - table_actions: [] - } - - component.handleAddNewRule() - - expect(component.actionNameError).toEqual('You already have an action with this name.'); - }); - - it('should add new rule to the list and switch to selected rule', () => { - const mockNewRule = { - id: '', - title: 'rule 2', - table_name: 'user', - events: [], - table_actions: [] - } - - component.rules = [{ - id: 'rule_12345678', - title: 'rule 1', - table_name: 'user', - events: [], - table_actions: [] - }] - - component.newRule = mockNewRule; - - component.handleAddNewRule() - - expect(component.selectedRule).toEqual(mockNewRule); - expect(component.selectedRuleTitle).toEqual('rule 2'); - expect(component.rules).toEqual([ - { - id: 'rule_12345678', - title: 'rule 1', - table_name: 'user', - events: [], - table_actions: [] - }, - { - id: '', - title: 'rule 2', - table_name: 'user', - events: [], - table_actions: [] - } - ]); - expect(component.newRule).toBeNull(); - }); - - it('should remove rule if it is not saved and if it is not in the list yet and the list is empty', () => { - component.newRule = { - id: '', - title: 'rule 2', - table_name: 'user', - events: [], - table_actions: [] - } - - component.rules = []; - - component.undoRule(); - - expect(component.selectedRule).toBeNull(); - expect(component.newRule).toBeNull(); - }); - - it('should remove rule if it is not saved and if it is not in the list yet and switch to the first rule in the list', () => { - const mockRule = { - id: 'rule_12345678', - title: 'rule 1', - table_name: 'user', - events: [ - { - event: null - } - ], - table_actions: [] - }; - component.newRule = { - id: '', - title: 'rule 2', - table_name: 'user', - events: [ - { - event: null - } - ], - table_actions: [] - } - component.rules = [ mockRule ]; - - component.undoRule(); - - expect(component.selectedRule).toEqual(mockRule); - expect(component.newRule).toBeNull(); - }); - - it('should call remove action from the list when it is not saved', () => { - component.selectedRule = { - id: '', - title: 'rule 1', - table_name: 'user', - events: [], - table_actions: [] - }; - const mockRemoveRuleFromLocalList = spyOn(component, 'removeRuleFromLocalList'); - - component.handleRemoveRule(); - - expect(mockRemoveRuleFromLocalList).toHaveBeenCalledOnceWith('rule 1'); - }); - - it('should call open delete confirm dialog when action is saved', () => { - component.selectedRule = { - id: 'rule_12345678', - title: 'rule 1', - table_name: 'user', - events: [], - table_actions: [] - }; - const mockOpenDeleteRuleDialog = spyOn(component, 'openDeleteRuleDialog'); - - component.handleRemoveRule(); - - expect(mockOpenDeleteRuleDialog).toHaveBeenCalledOnceWith(); - }); - - it('should remove rule from the list if it is not saved and if it is only one actions in the list', () => { - component.rules = [ - { - id: 'rule_12345678', - title: 'rule 1', - table_name: 'user', - events: [], - table_actions: [] - } - ]; - - component.removeRuleFromLocalList('rule 1'); - - expect(component.selectedRule).toBeNull(); - expect(component.rules).toEqual([]); - }); - - it('should remove rule from the list if it is not saved and make active the first rule in the list', () => { - const mockRule = { - id: '', - title: 'rule 2', - table_name: 'user', - events: [ - { - event: null - } - ], - table_actions: [] - }; - component.rules = [ - { - id: '', - title: 'rule 1', - table_name: 'user', - events: [ - { - event: null - } - ], - table_actions: [] - }, - mockRule - ]; - - component.removeRuleFromLocalList('rule 1') - - expect(component.selectedRule).toEqual(mockRule); - expect(component.rules).toEqual([mockRule]); - }); - - it('should save rule', () => { - component.tableName = 'users'; - const mockRule = { - id: '', - title: 'rule 2', - table_name: '', - events: [], - table_actions: [] - }; - component.connectionID = '12345678'; - component.selectedRule = mockRule; - const fakeSaveAction = spyOn(tablesService, 'saveRule').and.returnValue(of()); - - - component.addRule(); - - expect(fakeSaveAction).toHaveBeenCalledOnceWith('12345678', 'users', mockRule); - }); - - xit('should open dialog for delete action confirmation', () => { - const fakeConfirmationDialog = spyOn(dialog, 'open'); - - const mockRule = { - id: '', - title: 'rule 2', - table_name: 'user', - events: [], - table_actions: [] - }; - component.connectionID = '12345678'; - component.tableName = 'users'; - component.selectedRule = mockRule; - - component.openDeleteRuleDialog(); - - expect(fakeConfirmationDialog).toHaveBeenCalledOnceWith(ActionDeleteDialogComponent, { - width: '25em', - data: { - connectionID: '12345678', - tableName: 'users', - rule: mockRule - } - }); - }); - - it('should show Copy message', () => { - component.showCopyNotification('PHP code snippet was copied to clipboard.'); - expect(fakeNotifications.showSuccessSnackbar).toHaveBeenCalledOnceWith('PHP code snippet was copied to clipboard.') - - fakeNotifications.showSuccessSnackbar.calls.reset(); - }); + let component: DbTableActionsComponent; + let fixture: ComponentFixture; + let tablesService: TablesService; + let dialog: MatDialog; + let fakeNotifications; + + beforeEach(async () => { + fakeNotifications = jasmine.createSpyObj('NotificationsService', ['showSuccessSnackbar']); + + await TestBed.configureTestingModule({ + imports: [ + RouterTestingModule, + MatDialogModule, + MatSnackBarModule, + BrowserAnimationsModule, + Angulartics2Module.forRoot(), + DbTableActionsComponent, + ], + providers: [ + provideHttpClient(), + { + provide: NotificationsService, + useValue: fakeNotifications, + }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(DbTableActionsComponent); + tablesService = TestBed.inject(TablesService); + dialog = TestBed.inject(MatDialog); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should set selected rule', () => { + const rule = { + id: 'rule_12345678', + title: 'rule 1', + table_name: 'user', + events: [ + { + event: null, + }, + ], + table_actions: [], + }; + component.setSelectedRule(rule); + expect(component.selectedRule).toEqual(rule); + expect(component.selectedRuleTitle).toEqual('rule 1'); + }); + + it('should switch between rules on rules list click', () => { + const rule = { + id: 'rule_12345678', + title: 'rule 1', + table_name: 'user', + events: [], + table_actions: [], + }; + const mockSetSelectedAction = spyOn(component, 'setSelectedRule'); + + component.switchRulesView(rule); + + expect(mockSetSelectedAction).toHaveBeenCalledOnceWith(rule); + }); + + it('should set the new rule', () => { + component.tableName = 'user'; + component.addNewRule(); + + expect(component.newRule).toEqual({ + id: '', + title: '', + table_name: 'user', + events: [ + { + event: null, + }, + ], + table_actions: [ + { + method: CustomActionMethod.URL, + emails: [], + url: '', + }, + ], + }); + }); + + it('should set an error if user try to add rule with empty name to the list', () => { + component.newRule = { + id: '', + title: '', + table_name: 'user', + events: [ + { + event: null, + }, + ], + table_actions: [ + { + method: CustomActionMethod.URL, + emails: [], + url: '', + }, + ], + }; + component.handleAddNewRule(); + + expect(component.actionNameError).toEqual('The name cannot be empty.'); + }); + + it('should set an error if user try to add rule with the same name to the list', () => { + component.rules = [ + { + id: '', + title: 'rule 1', + table_name: 'user', + events: [], + table_actions: [], + }, + ]; + component.newRule = { + id: '', + title: 'rule 1', + table_name: 'user', + events: [], + table_actions: [], + }; + + component.handleAddNewRule(); + + expect(component.actionNameError).toEqual('You already have an action with this name.'); + }); + + it('should add new rule to the list and switch to selected rule', () => { + const mockNewRule = { + id: '', + title: 'rule 2', + table_name: 'user', + events: [], + table_actions: [], + }; + + component.rules = [ + { + id: 'rule_12345678', + title: 'rule 1', + table_name: 'user', + events: [], + table_actions: [], + }, + ]; + + component.newRule = mockNewRule; + + component.handleAddNewRule(); + + expect(component.selectedRule).toEqual(mockNewRule); + expect(component.selectedRuleTitle).toEqual('rule 2'); + expect(component.rules).toEqual([ + { + id: 'rule_12345678', + title: 'rule 1', + table_name: 'user', + events: [], + table_actions: [], + }, + { + id: '', + title: 'rule 2', + table_name: 'user', + events: [], + table_actions: [], + }, + ]); + expect(component.newRule).toBeNull(); + }); + + it('should remove rule if it is not saved and if it is not in the list yet and the list is empty', () => { + component.newRule = { + id: '', + title: 'rule 2', + table_name: 'user', + events: [], + table_actions: [], + }; + + component.rules = []; + + component.undoRule(); + + expect(component.selectedRule).toBeNull(); + expect(component.newRule).toBeNull(); + }); + + it('should remove rule if it is not saved and if it is not in the list yet and switch to the first rule in the list', () => { + const mockRule = { + id: 'rule_12345678', + title: 'rule 1', + table_name: 'user', + events: [ + { + event: null, + }, + ], + table_actions: [], + }; + component.newRule = { + id: '', + title: 'rule 2', + table_name: 'user', + events: [ + { + event: null, + }, + ], + table_actions: [], + }; + component.rules = [mockRule]; + + component.undoRule(); + + expect(component.selectedRule).toEqual(mockRule); + expect(component.newRule).toBeNull(); + }); + + it('should call remove action from the list when it is not saved', () => { + component.selectedRule = { + id: '', + title: 'rule 1', + table_name: 'user', + events: [], + table_actions: [], + }; + const mockRemoveRuleFromLocalList = spyOn(component, 'removeRuleFromLocalList'); + + component.handleRemoveRule(); + + expect(mockRemoveRuleFromLocalList).toHaveBeenCalledOnceWith('rule 1'); + }); + + it('should call open delete confirm dialog when action is saved', () => { + component.selectedRule = { + id: 'rule_12345678', + title: 'rule 1', + table_name: 'user', + events: [], + table_actions: [], + }; + const mockOpenDeleteRuleDialog = spyOn(component, 'openDeleteRuleDialog'); + + component.handleRemoveRule(); + + expect(mockOpenDeleteRuleDialog).toHaveBeenCalledOnceWith(); + }); + + it('should remove rule from the list if it is not saved and if it is only one actions in the list', () => { + component.rules = [ + { + id: 'rule_12345678', + title: 'rule 1', + table_name: 'user', + events: [], + table_actions: [], + }, + ]; + + component.removeRuleFromLocalList('rule 1'); + + expect(component.selectedRule).toBeNull(); + expect(component.rules).toEqual([]); + }); + + it('should remove rule from the list if it is not saved and make active the first rule in the list', () => { + const mockRule = { + id: '', + title: 'rule 2', + table_name: 'user', + events: [ + { + event: null, + }, + ], + table_actions: [], + }; + component.rules = [ + { + id: '', + title: 'rule 1', + table_name: 'user', + events: [ + { + event: null, + }, + ], + table_actions: [], + }, + mockRule, + ]; + + component.removeRuleFromLocalList('rule 1'); + + expect(component.selectedRule).toEqual(mockRule); + expect(component.rules).toEqual([mockRule]); + }); + + it('should save rule', () => { + component.tableName = 'users'; + const mockRule = { + id: '', + title: 'rule 2', + table_name: '', + events: [], + table_actions: [], + }; + component.connectionID = '12345678'; + component.selectedRule = mockRule; + const fakeSaveAction = spyOn(tablesService, 'saveRule').and.returnValue(of()); + + component.addRule(); + + expect(fakeSaveAction).toHaveBeenCalledOnceWith('12345678', 'users', mockRule); + }); + + xit('should open dialog for delete action confirmation', () => { + const fakeConfirmationDialog = spyOn(dialog, 'open'); + + const mockRule = { + id: '', + title: 'rule 2', + table_name: 'user', + events: [], + table_actions: [], + }; + component.connectionID = '12345678'; + component.tableName = 'users'; + component.selectedRule = mockRule; + + component.openDeleteRuleDialog(); + + expect(fakeConfirmationDialog).toHaveBeenCalledOnceWith(ActionDeleteDialogComponent, { + width: '25em', + data: { + connectionID: '12345678', + tableName: 'users', + rule: mockRule, + }, + }); + }); + + it('should show Copy message', () => { + component.showCopyNotification('PHP code snippet was copied to clipboard.'); + expect(fakeNotifications.showSuccessSnackbar).toHaveBeenCalledOnceWith('PHP code snippet was copied to clipboard.'); + + fakeNotifications.showSuccessSnackbar.calls.reset(); + }); }); diff --git a/frontend/src/app/components/dashboard/db-table-view/db-table-row-view/db-table-row-view.component.css b/frontend/src/app/components/dashboard/db-table-view/db-table-row-view/db-table-row-view.component.css index fb231442d..4e72a45c8 100644 --- a/frontend/src/app/components/dashboard/db-table-view/db-table-row-view/db-table-row-view.component.css +++ b/frontend/src/app/components/dashboard/db-table-view/db-table-row-view/db-table-row-view.component.css @@ -1,122 +1,125 @@ .row-preview-sidebar { - opacity: 0; - transform: translateX(100%); - min-height: 100%; - max-height: calc(100vh - 60px - 56px); - width: 0; - overflow-y: auto; - transition: width 400ms ease, transform 400ms ease, opacity 400ms ease; + opacity: 0; + transform: translateX(100%); + min-height: 100%; + max-height: calc(100vh - 60px - 56px); + width: 0; + overflow-y: auto; + transition: + width 400ms ease, + transform 400ms ease, + opacity 400ms ease; } .row-preview-sidebar_open { - background-color: var(--mat-sidenav-content-background-color); - border-left: solid 1px rgba(0, 0, 0, 0.12); - opacity: 1; - transform: translateX(0); - width: clamp(200px, 22vw, 400px); + background-color: var(--mat-sidenav-content-background-color); + border-left: solid 1px rgba(0, 0, 0, 0.12); + opacity: 1; + transform: translateX(0); + width: clamp(200px, 22vw, 400px); } @media (prefers-color-scheme: dark) { - .row-preview-sidebar_open { - border-left: 1px solid var(--mat-sidenav-container-divider-color); - background-color: #202020; - } + .row-preview-sidebar_open { + border-left: 1px solid var(--mat-sidenav-container-divider-color); + background-color: #202020; + } } @media (width <= 600px) { - .row-preview-sidebar_open { - position: fixed; - top: 44px; - bottom: 0; - left: 0; - min-height: initial; - max-height: initial; - width: 100vw; - z-index: 2; - } + .row-preview-sidebar_open { + position: fixed; + top: 44px; + bottom: 0; + left: 0; + min-height: initial; + max-height: initial; + width: 100vw; + z-index: 2; + } } .row-preview-sidebar__header { - display: flex; - align-items: center; - justify-content: space-between; - padding-top: 20px; - padding-left: 16px; - padding-right: 16px; + display: flex; + align-items: center; + justify-content: space-between; + padding-top: 20px; + padding-left: 16px; + padding-right: 16px; } .row-preview-sidebar__title { - margin-bottom: 0 !important; + margin-bottom: 0 !important; } .row-preview-sidebar__actions { - display: flex; - gap: 4px; - margin-right: auto; - margin-left: 12px; + display: flex; + gap: 4px; + margin-right: auto; + margin-left: 12px; } .row-preview-sidebar__field { - display: flex; - flex-direction: column; - align-items: flex-start; - gap: 4px; - padding: 12px 16px; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 4px; + padding: 12px 16px; } .row-preview-sidebar__field:not(:last-child) { - border-bottom: solid 1px rgba(0, 0, 0, 0.12); + border-bottom: solid 1px rgba(0, 0, 0, 0.12); } @media (prefers-color-scheme: dark) { - .row-preview-sidebar__field:not(:last-child) { - border-bottom: solid 1px rgba(255, 255, 255, 0.04); - } + .row-preview-sidebar__field:not(:last-child) { + border-bottom: solid 1px rgba(255, 255, 255, 0.04); + } } .row-preview-sidebar__value:has(app-json-editor-record-view), .row-preview-sidebar__value:has(app-code-record-view) { - width: 100%; + width: 100%; } .related-records-panel { - margin-left: 4px; - width: calc(100% - 8px); + margin-left: 4px; + width: calc(100% - 8px); } .related-records-panel__header { - height: 36px !important; - padding: 0 12px 0 8px; + height: 36px !important; + padding: 0 12px 0 8px; } .related-records-panel ::ng-deep .mat-expansion-panel-body { - padding: 0; + padding: 0; } .related-records__header { - padding: 0 12px 0 8px; + padding: 0 12px 0 8px; } .related-records__table-name { - flex: 1 0 auto; + flex: 1 0 auto; } .related-records__actions { - flex-grow: 0; - justify-content: flex-end; + flex-grow: 0; + justify-content: flex-end; } .related-record { - --mdc-list-list-item-two-line-container-height: 60px; + --mat-list-list-item-two-line-container-height: 60px; - padding-left: 8px; - padding-right: 8px; + padding-left: 8px; + padding-right: 8px; } .related-record ::ng-deep .mdc-list-item__primary-text::before { - height: 24px; + height: 24px; } .related-records__panel ::ng-deep .mat-expansion-panel-body { - padding: 0 8px; + padding: 0 8px; } diff --git a/frontend/src/app/components/dashboard/db-table-view/db-table-view.component.css b/frontend/src/app/components/dashboard/db-table-view/db-table-view.component.css index 4a4673591..dc52580b0 100644 --- a/frontend/src/app/components/dashboard/db-table-view/db-table-view.component.css +++ b/frontend/src/app/components/dashboard/db-table-view/db-table-view.component.css @@ -1,282 +1,285 @@ .hidden { - display: none; + display: none; } .db-table-header { - display: flex; - justify-content: flex-end; - flex-wrap: wrap; - margin-top: 16px; - width: 100%; + display: flex; + justify-content: flex-end; + flex-wrap: wrap; + margin-top: 16px; + width: 100%; } @media (width <= 600px) { - .db-table-header { - flex-direction: column; - margin-bottom: 16px; - } + .db-table-header { + flex-direction: column; + margin-bottom: 16px; + } } .db-table-title { - flex-grow: 50; - display: flex; - align-items: center; - margin-right: auto; - z-index: 1; + flex-grow: 50; + display: flex; + align-items: center; + margin-right: auto; + z-index: 1; } @media (width <= 600px) { - .db-table-title { - flex-grow: 1; - margin-right: 0; - justify-content: space-between; - } + .db-table-title { + flex-grow: 1; + margin-right: 0; + justify-content: space-between; + } } .table-name { - margin-bottom: 0 !important; - margin-right: 8px !important; + margin-bottom: 0 !important; + margin-right: 8px !important; } @media (width <= 600px) { - .table-name { - display: none; - } + .table-name { + display: none; + } } .table-switcher { - display: none; + display: none; } @media (width <= 600px) { - .table-switcher { - display: initial; - margin-top: 12px; - } + .table-switcher { + display: initial; + margin-top: 12px; + } } .table-switcher-option ::ng-deep .mdc-list-item__primary-text { - width: 100%; + width: 100%; } .table-switcher-link { - display: inline-block; - color: inherit; - line-height: 48px; - text-decoration: none; - width: 100%; + display: inline-block; + color: inherit; + line-height: 48px; + text-decoration: none; + width: 100%; } .db-table-bulk-actions { - display: flex; - align-items: center; - height: 62.6px; + display: flex; + align-items: center; + height: 62.6px; } @media (width <= 600px) { - .db-table-bulk-actions { - height: 124px; - } + .db-table-bulk-actions { + height: 124px; + } } .search-input { - background-color: transparent; - /* margin-top: -12px; */ - min-width: 220px; + background-color: transparent; + /* margin-top: -12px; */ + min-width: 220px; } .search-input ::ng-deep * { - background-color: transparent !important; + background-color: transparent !important; } .search-input ::ng-deep .mdc-text-field { - padding: 0 !important; + padding: 0 !important; } .search-input ::ng-deep .mat-mdc-form-field-infix { - min-height: 0; + min-height: 0; } -.search-input ::ng-deep .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix { - padding-top: 8px; - padding-bottom: 8px; +.search-input + ::ng-deep + .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) + .mat-mdc-form-field-infix { + padding-top: 8px; + padding-bottom: 8px; } .search-input ::ng-deep .mat-mdc-icon-button.mat-mdc-button-base { - width: 40px; - height: 40px; - padding: 8px; + width: 40px; + height: 40px; + padding: 8px; } .db-table-actions { - flex-grow: 1; - display: flex; - align-items: center; - justify-content: space-between; - gap: 4px; + flex-grow: 1; + display: flex; + align-items: center; + justify-content: space-between; + gap: 4px; } @media (width <= 600px) { - .db-table-actions { - flex-direction: column; - align-items: flex-start; - } + .db-table-actions { + flex-direction: column; + align-items: flex-start; + } } .actions { - display: flex; - align-items: center; - gap: 8px; - margin-top: -16px; + display: flex; + align-items: center; + gap: 8px; + margin-top: -16px; } @media (width <= 600px) { - .actions { - flex-wrap: wrap; - gap: 8px; - } + .actions { + flex-wrap: wrap; + gap: 8px; + } } .action_active { - position: relative; + position: relative; } .action_active::after { - content: ''; - position: absolute; - top: 9px; - right: 3px; - display: block; - background: rgba(0, 0, 0, 0.87); - border-radius: 50%; - height: 5px; - width: 5px; + content: ""; + position: absolute; + top: 9px; + right: 3px; + display: block; + background: rgba(0, 0, 0, 0.87); + border-radius: 50%; + height: 5px; + width: 5px; } .action-button_disabled { - --mdc-theme-text-disabled-on-background: rgba(0, 0, 0, 0.78); + --mat-theme-text-disabled-on-background: rgba(0, 0, 0, 0.78); - pointer-events: none; + pointer-events: none; } @media (prefers-color-scheme: light) { - .ai-insights-button { - background: var(--color-accentedPalette-50); - } + .ai-insights-button { + background: var(--color-accentedPalette-50); + } - .ai-insights-button:hover { - background: var(--color-accentedPalette-100) !important; - } + .ai-insights-button:hover { + background: var(--color-accentedPalette-100) !important; + } } @media (prefers-color-scheme: dark) { - .ai-insights-button { - background: var(--color-accentedPalette-900); - } + .ai-insights-button { + background: var(--color-accentedPalette-900); + } - .ai-insights-button:hover { - background: var(--color-accentedPalette-800) !important; - } + .ai-insights-button:hover { + background: var(--color-accentedPalette-800) !important; + } } @media (prefers-color-scheme: dark) { - .ai-icon ::ng-deep svg path { - fill: #fff; - } + .ai-icon ::ng-deep svg path { + fill: #fff; + } } .db-table-manage-columns-button { - display: inline-block; + display: inline-block; } .db-table-manage-columns-button__count { - margin-left: 2px; + margin-left: 2px; } @media (prefers-color-scheme: dark) { - .db-table-manage-columns-button__count { - color: rgba(255, 255, 255, 0.56); - } + .db-table-manage-columns-button__count { + color: rgba(255, 255, 255, 0.56); + } } @media (prefers-color-scheme: light) { - .db-table-manage-columns-button__count { - color: rgba(0, 0, 0, 0.52); - } + .db-table-manage-columns-button__count { + color: rgba(0, 0, 0, 0.52); + } } .active-filters { - display: flex; - align-items: center; - flex-wrap: wrap; - gap: 8px; - margin-bottom: 12px; + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 8px; + margin-bottom: 12px; } .db-table-active-filter-chip ::ng-deep .mdc-evolution-chip__text-label { - max-width: 300px; - overflow: hidden; + max-width: 300px; + overflow: hidden; } .empty-table-message { - display: inline-block; - margin-top: 40px; - text-align: center; - width: 100%; + display: inline-block; + margin-top: 40px; + text-align: center; + width: 100%; } .table-wrapper { - position: relative; - min-height: 100px; - width: calc(86vw - 4rem); - transition: width 400ms; + position: relative; + min-height: 100px; + width: calc(86vw - 4rem); + transition: width 400ms; } @media (width <= 600px) { - .table-wrapper { - width: calc(98vw - 292px); - } + .table-wrapper { + width: calc(98vw - 292px); + } } .table-surface { - margin-bottom: 24px; + margin-bottom: 24px; } @media (prefers-color-scheme: dark) { - .table-surface { - --mat-table-background-color: #202020; - --mat-paginator-container-background-color: #202020; - } + .table-surface { + --mat-table-background-color: #202020; + --mat-paginator-container-background-color: #202020; + } } .table-box { - overflow-x: auto; - width: 100%; + overflow-x: auto; + width: 100%; } .db-table { - display: grid; - width: 100%; + display: grid; + width: 100%; } @media (width <= 600px) { - .db-table { - grid-template-columns: minmax(0, 120px) 1fr !important; - } + .db-table { + grid-template-columns: minmax(0, 120px) 1fr !important; + } - .db-table ::ng-deep tbody { - display: grid; - grid-template-columns: subgrid; - grid-column: 1 / 3; - } + .db-table ::ng-deep tbody { + display: grid; + grid-template-columns: subgrid; + grid-column: 1 / 3; + } } .db-table_withActions { - grid-template-columns: 48px repeat(var(--colCount), fit-content(100%)) minmax(var(--lastColumnWidth), auto); + grid-template-columns: 48px repeat(var(--colCount), fit-content(100%)) minmax(var(--lastColumnWidth), auto); } .db-table_withoutActions { - grid-template-columns: repeat(var(--colCount), auto) !important; + grid-template-columns: repeat(var(--colCount), auto) !important; } /* .db-table ::ng-deep .mat-mdc-row:nth-child(even) { @@ -284,116 +287,115 @@ } */ .db-table ::ng-deep .db-table-row { - cursor: pointer; + cursor: pointer; } .db-table ::ng-deep .db-table-row:hover { - background-color: var(--hover-color) !important; + background-color: var(--hover-color) !important; } - @media (prefers-color-scheme: dark) { - .db-table ::ng-deep .db-table-row:hover { - --hover-color: var(--color-primaryPalette-900); - } + .db-table ::ng-deep .db-table-row:hover { + --hover-color: var(--color-primaryPalette-900); + } } @media (prefers-color-scheme: light) { - .db-table ::ng-deep .db-table-row:hover { - --hover-color: var(--color-primaryPalette-50); - } + .db-table ::ng-deep .db-table-row:hover { + --hover-color: var(--color-primaryPalette-50); + } } .db-table-row_selected { - background-color: var(--selected-color); + background-color: var(--selected-color); } @media (prefers-color-scheme: dark) { - .db-table-row_selected { - --selected-color: var(--color-primaryPalette-900); - } + .db-table-row_selected { + --selected-color: var(--color-primaryPalette-900); + } } @media (prefers-color-scheme: light) { - .db-table-row_selected { - --selected-color: var(--color-primaryPalette-100); - } + .db-table-row_selected { + --selected-color: var(--color-primaryPalette-100); + } } @media (width <= 600px) { - .db-table-row_selected { - background-color: initial; - } + .db-table-row_selected { + background-color: initial; + } } .db-table-row, .db-table-header-row, .db-table ::ng-deep .mat-mdc-footer-row { - display: contents; - min-height: 0; + display: contents; + min-height: 0; } @media (width <= 600px) { - .db-table-row { - position: relative; - display: grid; - grid-template-columns: subgrid; - grid-column: 1 / 3; - grid-gap: 12px 28px; - border-bottom-color: var(--mat-table-row-item-outline-color, rgba(0, 0, 0, 0.12)); - border-bottom-width: var(--mat-table-row-item-outline-width, 1px); - border-bottom-style: solid; - height: auto; - padding: 8px 0; - } - - .db-table-header-row { - display: none; - } + .db-table-row { + position: relative; + display: grid; + grid-template-columns: subgrid; + grid-column: 1 / 3; + grid-gap: 12px 28px; + border-bottom-color: var(--mat-table-row-item-outline-color, rgba(0, 0, 0, 0.12)); + border-bottom-width: var(--mat-table-row-item-outline-width, 1px); + border-bottom-style: solid; + height: auto; + padding: 8px 0; + } + + .db-table-header-row { + display: none; + } } .db-table-cell, .db-table ::ng-deep .mat-mdc-header-cell, .db-table ::ng-deep .mat-mdc-footer-cell { - border-bottom-width: 1px; - border-bottom-style: solid; - border-bottom-color: var(--mat-table-row-item-outline-color); - padding-right: 24px; - min-height: 36px; + border-bottom-width: 1px; + border-bottom-style: solid; + border-bottom-color: var(--mat-table-row-item-outline-color); + padding-right: 24px; + min-height: 36px; } @media (width <= 600px) { - .db-table-cell { - display: grid; - grid-template-columns: subgrid; - grid-column: 1 / 3; - align-items: flex-start; - border-bottom: none; - } - - .db-table-cell::before { - content: attr(data-label); - display: inline-block; - font-weight: bold; - white-space: wrap; - } + .db-table-cell { + display: grid; + grid-template-columns: subgrid; + grid-column: 1 / 3; + align-items: flex-start; + border-bottom: none; + } + + .db-table-cell::before { + content: attr(data-label); + display: inline-block; + font-weight: bold; + white-space: wrap; + } } .db-table ::ng-deep .db-table-cell:first-of-type, .db-table ::ng-deep .mat-mdc-header-cell:first-of-type, .db-table ::ng-deep .mat-mdc-footer-cell:first-of-type { - padding-left: 16px; - padding-right: 8px; + padding-left: 16px; + padding-right: 8px; } @media (width <= 600px) { - .db-table ::ng-deep .db-table-cell:first-of-type, - .db-table ::ng-deep .mat-mdc-header-cell:first-of-type, - .db-table ::ng-deep .mat-mdc-footer-cell:first-of-type { - border-bottom: none; - } + .db-table ::ng-deep .db-table-cell:first-of-type, + .db-table ::ng-deep .mat-mdc-header-cell:first-of-type, + .db-table ::ng-deep .mat-mdc-footer-cell:first-of-type { + border-bottom: none; + } - /* .db-table-cell { + /* .db-table-cell { display: grid; grid-template-columns: subgrid; grid-column: 1 / 3; @@ -410,144 +412,147 @@ } .db-table_withActions ::ng-deep .mat-column-select { - padding-top: 2px; - padding-left: 4px !important; - padding-right: 4px !important; + padding-top: 2px; + padding-left: 4px !important; + padding-right: 4px !important; } .db-table_withActions ::ng-deep .mat-header-row .mat-column-select { - padding-top: 18px; + padding-top: 18px; } -th.mat-header-cell, td.mat-cell { - padding-right: 20px; +th.mat-header-cell, +td.mat-cell { + padding-right: 20px; } .db-table ::ng-deep .mat-mdc-header-cell .mat-sort-header-content { - text-align: left; + text-align: left; } .db-table-cell-checkbox { - display: flex; - align-items: center; + display: flex; + align-items: center; } @media (prefers-color-scheme: light) { - .db-table-cell-actions { - color: rgba(0,0,0,0.64); - } + .db-table-cell-actions { + color: rgba(0, 0, 0, 0.64); + } } @media (prefers-color-scheme: dark) { - .db-table-cell-actions { - color: rgba(255,255,255,0.64); - } + .db-table-cell-actions { + color: rgba(255, 255, 255, 0.64); + } } @media (width <= 600px) { - .db-table-cell-checkbox { - position: absolute; - top: 10px; - left: 8px; - border-bottom: none; - z-index: 2; - } + .db-table-cell-checkbox { + position: absolute; + top: 10px; + left: 8px; + border-bottom: none; + z-index: 2; + } - .db-table-checkbox { - transform: scale(1.25); - } + .db-table-checkbox { + transform: scale(1.25); + } - .db-table-cell-actions { - grid-row: 1; - grid-column: 1 / span 2; - justify-content: flex-end; - gap: 4px; - border-bottom: none; - padding-left: 40px; - } + .db-table-cell-actions { + grid-row: 1; + grid-column: 1 / span 2; + justify-content: flex-end; + gap: 4px; + border-bottom: none; + padding-left: 40px; + } } -.db-table-cell-actions, .db-table-header-actions { - justify-content: flex-end; +.db-table-cell-actions, +.db-table-header-actions { + justify-content: flex-end; } .db-table-cell-action-button { - --mdc-icon-button-state-layer-size: 30px !important; - --mdc-icon-button-icon-size: 20px !important; + --mat-icon-button-state-layer-size: 30px !important; + --mat-icon-button-icon-size: 20px !important; } .db-table-cell-action-button ::ng-deep .mat-icon { - font-size: 20px; - height: 20px; - width: 20px; + font-size: 20px; + height: 20px; + width: 20px; } .table-cell-content { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + width: 100%; } @media (width <= 600px) { - .table-cell-content { - white-space: wrap; - max-height: 5lh; - } + .table-cell-content { + white-space: wrap; + max-height: 5lh; + } } @media (prefers-color-scheme: light) { - .table-cell-content { - color: rgba(0, 0, 0, 0.64) - } + .table-cell-content { + color: rgba(0, 0, 0, 0.64); + } } @media (prefers-color-scheme: dark) { - .table-cell-content { - color: rgba(255, 255, 255, 0.64) - } + .table-cell-content { + color: rgba(255, 255, 255, 0.64); + } } .db-table-cell:hover .field-value-copy-button { - display: initial; + display: initial; } tr.mat-row:hover { - background: rgba(0, 0, 0, 0.04); + background: rgba(0, 0, 0, 0.04); } .mat-mdc-table-sticky { - padding-left: 16px; - padding-right: 16px !important; + padding-left: 16px; + padding-right: 16px !important; } .spinner-wrapper { - position: absolute; - top: 76px; left: 0; - display: flex; - justify-content: center; - background: rgba(255, 255, 255, 0.9); - height: 500px; - width: 100%; - z-index: 2; + position: absolute; + top: 76px; + left: 0; + display: flex; + justify-content: center; + background: rgba(255, 255, 255, 0.9); + height: 500px; + width: 100%; + z-index: 2; } .spinner-wrapper ::ng-deep.mat-spinner { - position: relative; - top: 40px; + position: relative; + top: 40px; } .empty-table { - display: flex; - flex-direction: column; - align-items: center; - padding: 24px 0 8px; - width: 100%; + display: flex; + flex-direction: column; + align-items: center; + padding: 24px 0 8px; + width: 100%; } .empty-table .mat-button { - border-radius: 0; - margin: -20px 0; - padding: 8px 0; - width: 100%; + border-radius: 0; + margin: -20px 0; + padding: 8px 0; + width: 100%; } diff --git a/frontend/src/app/components/dashboard/db-table-view/db-table-widgets/db-table-widgets.component.spec.ts b/frontend/src/app/components/dashboard/db-table-view/db-table-widgets/db-table-widgets.component.spec.ts index 4401eceb8..2ccc4fc33 100644 --- a/frontend/src/app/components/dashboard/db-table-view/db-table-widgets/db-table-widgets.component.spec.ts +++ b/frontend/src/app/components/dashboard/db-table-view/db-table-widgets/db-table-widgets.component.spec.ts @@ -1,243 +1,235 @@ +import { provideHttpClient } from '@angular/common/http'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; - -import { Angulartics2Module } from 'angulartics2'; +import { MatSnackBarModule } from '@angular/material/snack-bar'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { Angulartics2Module } from 'angulartics2'; +import { of } from 'rxjs'; import { ConnectionsService } from 'src/app/services/connections.service'; +import { TablesService } from 'src/app/services/tables.service'; import { DashboardComponent } from '../../dashboard.component'; import { DbTableWidgetsComponent } from './db-table-widgets.component'; -import { MatSnackBarModule } from '@angular/material/snack-bar'; -import { RouterTestingModule } from '@angular/router/testing'; -import { TablesService } from 'src/app/services/tables.service'; import { WidgetDeleteDialogComponent } from './widget-delete-dialog/widget-delete-dialog.component'; -import { of } from 'rxjs'; -import { provideHttpClient } from '@angular/common/http'; describe('DbTableWidgetsComponent', () => { - let component: DbTableWidgetsComponent; - let fixture: ComponentFixture; - let tablesService: TablesService; - let connectionsService: ConnectionsService; - let dialog: MatDialog; - let dialogRefSpyObj = jasmine.createSpyObj({ afterClosed : of('delete'), close: null }); - dialogRefSpyObj.componentInstance = { deleteWidget: of('user_name') }; - - const fakeFirstName = { - "column_name": "FirstName", - "column_default": null, - "data_type": "varchar", - "isExcluded": false, - "isSearched": false, - "auto_increment": false, - "allow_null": false, - "character_maximum_length": 30 - }; - const fakeId = { - "column_name": "Id", - "column_default": "auto_increment", - "data_type": "int", - "isExcluded": false, - "isSearched": false, - "auto_increment": true, - "allow_null": false, - "character_maximum_length": null - }; - const fakeBool = { - "column_name": "bool", - "column_default": null, - "data_type": "tinyint", - "isExcluded": false, - "isSearched": false, - "auto_increment": false, - "allow_null": true, - "character_maximum_length": 1 - }; - - const mockTableStructure = { - "structure": [ - fakeFirstName, - fakeId, - fakeBool - ], - "primaryColumns": [ - { - "data_type": "int", - "column_name": "Id" - } - ], - "foreignKeys": [ - { - "referenced_column_name": "CustomerId", - "referenced_table_name": "Customers", - "constraint_name": "Orders_ibfk_2", - "column_name": "Id" - } - ], - "readonly_fields": [], - "table_widgets": [] - } - - const tableWidgetsNetwork = [ - { - "id": "a57e0c7f-a348-4aae-9ec4-fdbec0c0d0b6", - "field_name": "email", - "widget_type": "Textarea", - "widget_params": '', - "name": "user email", - "description": "" - } - ] - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ - RouterTestingModule.withRoutes([ - { path: 'dashboard/:connection-id/:table-name', component: DashboardComponent } - ]), - MatSnackBarModule, - MatDialogModule, - BrowserAnimationsModule, - Angulartics2Module.forRoot(), - DbTableWidgetsComponent - ], - providers: [ - provideHttpClient(), - { provide: MatDialogRef, useValue: {} }, - ] - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(DbTableWidgetsComponent); - component = fixture.componentInstance; - tablesService = TestBed.inject(TablesService); - connectionsService = TestBed.inject(ConnectionsService); - dialog = TestBed.get(MatDialog); - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - it('should set connection id and table name', () => { - spyOnProperty(connectionsService, 'currentConnectionID').and.returnValue('12345678'); - spyOnProperty(tablesService, 'currentTableName').and.returnValue('Users'); - spyOn(tablesService, 'fetchTableStructure').and.returnValue(of(mockTableStructure)); - spyOn(tablesService, 'fetchTableWidgets').and.returnValue(of(tableWidgetsNetwork)); - - component.ngOnInit(); - fixture.detectChanges(); - - expect(component.connectionID).toEqual('12345678'); - expect(component.tableName).toEqual('Users'); - expect(component.fields).toEqual(['FirstName', 'Id', 'bool']); - expect(component.widgets).toEqual(tableWidgetsNetwork); - }); - - it('should add new empty widget to widgets array', () => { - component.widgets = [ - { - field_name: 'user_id', - widget_type: 'textarea', - widget_params: '', - name: '', - description: '' - } - ]; - - component.addNewWidget(); - - expect(component.widgets).toEqual([ - { - field_name: 'user_id', - widget_type: 'textarea', - widget_params: '', - name: '', - description: '' - }, - { - field_name: '', - widget_type: 'Default', - widget_params: '// No settings required', - name: '', - description: '' - } - ]) - }); - - it('should exclude field from lields list when it is added the list of widgets', () => { - component.fields = ['user_id', 'first_name', 'last_name', 'email']; - component.selectWidgetField('first_name'); - - expect(component.fields).toEqual(['user_id', 'last_name', 'email']); - }); - - xit('should open dialog to confirm deletion of widget', () => { - component.fields = ['user_age']; - component.widgets = [ - { - field_name: 'user_id', - widget_type: 'textarea', - widget_params: '', - name: '', - description: '' - }, - { - field_name: 'user_name', - widget_type: 'Default', - widget_params: '', - name: 'name', - description: '' - } - ]; - - const fakeDialog = spyOn(dialog, 'open').and.returnValue(dialogRefSpyObj); - component.openDeleteWidgetDialog('user_name'); - - expect(fakeDialog).toHaveBeenCalledOnceWith(WidgetDeleteDialogComponent, { - width: '25em', - data: 'user_name' - }); - - expect(component.fields).toEqual(['user_age', 'user_name']); - expect(component.widgets).toEqual([ - { - field_name: 'user_id', - widget_type: 'textarea', - widget_params: '', - name: '', - description: '' - } - ]); - }); - - it('should update widgets', () => { - component.connectionID = '12345678'; - component.tableName = 'users'; - component.widgets = [ - { - field_name: "email", - widget_type: "Textarea", - widget_params: '', - name: "user email", - description: "" - } - ]; - const fakeUpdateTableWidgets = spyOn(tablesService, 'updateTableWidgets').and.returnValue(of()); - // const fakeFatchWidgets = spyOn(tablesService, 'fetchTableWidgets').and.returnValue(of(tableWidgetsNetwork)); - - component.updateWidgets(); - - expect(fakeUpdateTableWidgets).toHaveBeenCalledOnceWith('12345678', 'users', [ - { - field_name: "email", - widget_type: "Textarea", - widget_params: '', - name: "user email", - description: "" - } - ]); - expect(component.submitting).toBeFalse(); - }); + let component: DbTableWidgetsComponent; + let fixture: ComponentFixture; + let tablesService: TablesService; + let connectionsService: ConnectionsService; + let dialog: MatDialog; + let dialogRefSpyObj = jasmine.createSpyObj({ afterClosed: of('delete'), close: null }); + dialogRefSpyObj.componentInstance = { deleteWidget: of('user_name') }; + + const fakeFirstName = { + column_name: 'FirstName', + column_default: null, + data_type: 'varchar', + isExcluded: false, + isSearched: false, + auto_increment: false, + allow_null: false, + character_maximum_length: 30, + }; + const fakeId = { + column_name: 'Id', + column_default: 'auto_increment', + data_type: 'int', + isExcluded: false, + isSearched: false, + auto_increment: true, + allow_null: false, + character_maximum_length: null, + }; + const fakeBool = { + column_name: 'bool', + column_default: null, + data_type: 'tinyint', + isExcluded: false, + isSearched: false, + auto_increment: false, + allow_null: true, + character_maximum_length: 1, + }; + + const mockTableStructure = { + structure: [fakeFirstName, fakeId, fakeBool], + primaryColumns: [ + { + data_type: 'int', + column_name: 'Id', + }, + ], + foreignKeys: [ + { + referenced_column_name: 'CustomerId', + referenced_table_name: 'Customers', + constraint_name: 'Orders_ibfk_2', + column_name: 'Id', + }, + ], + readonly_fields: [], + table_widgets: [], + }; + + const tableWidgetsNetwork = [ + { + id: 'a57e0c7f-a348-4aae-9ec4-fdbec0c0d0b6', + field_name: 'email', + widget_type: 'Textarea', + widget_params: '', + name: 'user email', + description: '', + }, + ]; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + RouterTestingModule.withRoutes([ + { path: 'dashboard/:connection-id/:table-name', component: DashboardComponent }, + ]), + MatSnackBarModule, + MatDialogModule, + BrowserAnimationsModule, + Angulartics2Module.forRoot(), + DbTableWidgetsComponent, + ], + providers: [provideHttpClient(), { provide: MatDialogRef, useValue: {} }], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DbTableWidgetsComponent); + component = fixture.componentInstance; + tablesService = TestBed.inject(TablesService); + connectionsService = TestBed.inject(ConnectionsService); + dialog = TestBed.inject(MatDialog); + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should set connection id and table name', () => { + spyOnProperty(connectionsService, 'currentConnectionID').and.returnValue('12345678'); + spyOnProperty(tablesService, 'currentTableName').and.returnValue('Users'); + spyOn(tablesService, 'fetchTableStructure').and.returnValue(of(mockTableStructure)); + spyOn(tablesService, 'fetchTableWidgets').and.returnValue(of(tableWidgetsNetwork)); + + component.ngOnInit(); + fixture.detectChanges(); + + expect(component.connectionID).toEqual('12345678'); + expect(component.tableName).toEqual('Users'); + expect(component.fields).toEqual(['FirstName', 'Id', 'bool']); + expect(component.widgets).toEqual(tableWidgetsNetwork); + }); + + it('should add new empty widget to widgets array', () => { + component.widgets = [ + { + field_name: 'user_id', + widget_type: 'textarea', + widget_params: '', + name: '', + description: '', + }, + ]; + + component.addNewWidget(); + + expect(component.widgets).toEqual([ + { + field_name: 'user_id', + widget_type: 'textarea', + widget_params: '', + name: '', + description: '', + }, + { + field_name: '', + widget_type: 'Default', + widget_params: '// No settings required', + name: '', + description: '', + }, + ]); + }); + + it('should exclude field from lields list when it is added the list of widgets', () => { + component.fields = ['user_id', 'first_name', 'last_name', 'email']; + component.selectWidgetField('first_name'); + + expect(component.fields).toEqual(['user_id', 'last_name', 'email']); + }); + + xit('should open dialog to confirm deletion of widget', () => { + component.fields = ['user_age']; + component.widgets = [ + { + field_name: 'user_id', + widget_type: 'textarea', + widget_params: '', + name: '', + description: '', + }, + { + field_name: 'user_name', + widget_type: 'Default', + widget_params: '', + name: 'name', + description: '', + }, + ]; + + const fakeDialog = spyOn(dialog, 'open').and.returnValue(dialogRefSpyObj); + component.openDeleteWidgetDialog('user_name'); + + expect(fakeDialog).toHaveBeenCalledOnceWith(WidgetDeleteDialogComponent, { + width: '25em', + data: 'user_name', + }); + + expect(component.fields).toEqual(['user_age', 'user_name']); + expect(component.widgets).toEqual([ + { + field_name: 'user_id', + widget_type: 'textarea', + widget_params: '', + name: '', + description: '', + }, + ]); + }); + + it('should update widgets', () => { + component.connectionID = '12345678'; + component.tableName = 'users'; + component.widgets = [ + { + field_name: 'email', + widget_type: 'Textarea', + widget_params: '', + name: 'user email', + description: '', + }, + ]; + const fakeUpdateTableWidgets = spyOn(tablesService, 'updateTableWidgets').and.returnValue(of()); + // const fakeFatchWidgets = spyOn(tablesService, 'fetchTableWidgets').and.returnValue(of(tableWidgetsNetwork)); + + component.updateWidgets(); + + expect(fakeUpdateTableWidgets).toHaveBeenCalledOnceWith('12345678', 'users', [ + { + field_name: 'email', + widget_type: 'Textarea', + widget_params: '', + name: 'user email', + description: '', + }, + ]); + expect(component.submitting).toBeFalse(); + }); }); diff --git a/frontend/src/app/components/dashboard/db-table-view/db-table-widgets/widget/widget.component.css b/frontend/src/app/components/dashboard/db-table-view/db-table-widgets/widget/widget.component.css index 06134d524..a163e493c 100644 --- a/frontend/src/app/components/dashboard/db-table-view/db-table-widgets/widget/widget.component.css +++ b/frontend/src/app/components/dashboard/db-table-view/db-table-widgets/widget/widget.component.css @@ -1,47 +1,47 @@ .widget-field-name { - align-self: baseline; - margin-top: 8px; - word-break: break-all; + align-self: baseline; + margin-top: 8px; + word-break: break-all; } .widget-type ::ng-deep .mat-mdc-form-field-hint-wrapper { - --mdc-outlined-button-container-height: 24px; - --mat-outlined-button-horizontal-padding: 12px; + --mat-button-outlined-container-height: 24px; + --mat-button-outlined-horizontal-padding: 12px; - padding: 8px 4px; + padding: 8px 4px; } .code-editor-box { - display: block; - border: 1px solid rgba(0, 0, 0, 0.38); - border-radius: 4px; - margin-bottom: 20px; - overflow-y: auto; - resize: vertical; + display: block; + border: 1px solid rgba(0, 0, 0, 0.38); + border-radius: 4px; + margin-bottom: 20px; + overflow-y: auto; + resize: vertical; } .code-editor-box ::ng-deep .ngs-code-editor { - height: 100%; + height: 100%; } .widget-params__label { - position: absolute; - top: 8px; - right: 8px; - font-size: 12px; - font-weight: 600; + position: absolute; + top: 8px; + right: 8px; + font-size: 12px; + font-weight: 600; } .widget-params__shutter { - position: absolute; - top: 0; - left: 0; - background: rgba(255, 255, 255, 0.5); - cursor: not-allowed; - height: 100%; - width: 100%; + position: absolute; + top: 0; + left: 0; + background: rgba(255, 255, 255, 0.5); + cursor: not-allowed; + height: 100%; + width: 100%; } .widget-delete-button { - margin-top: 4px; -} \ No newline at end of file + margin-top: 4px; +} diff --git a/frontend/src/app/components/dashboard/db-table-view/saved-filters-panel/saved-filters-panel.component.css b/frontend/src/app/components/dashboard/db-table-view/saved-filters-panel/saved-filters-panel.component.css index 9f34a7fdf..f8adcd240 100644 --- a/frontend/src/app/components/dashboard/db-table-view/saved-filters-panel/saved-filters-panel.component.css +++ b/frontend/src/app/components/dashboard/db-table-view/saved-filters-panel/saved-filters-panel.component.css @@ -37,31 +37,31 @@ } /* .saved-filters-tabs { - --mdc-chip-container-shape-radius: 4px; + --mat-chip-container-shape-radius: 4px; } */ .saved-filters-tabs ::ng-deep .mat-mdc-standard-chip { - --mdc-chip-container-shape-radius: 4px; - --mdc-chip-outline-width: 1px; - --mdc-chip-elevated-container-color: transparent !important; - --mdc-chip-elevated-selected-container-color: var(--color-accentedPalette-500) !important; - --mdc-chip-container-height: 32px; - --mdc-chip-label-text-color: rgba(0, 0, 0, 0.64); + --mat-chip-container-shape-radius: 4px; + --mat-chip-outline-width: 1px; + --mat-chip-elevated-container-color: transparent !important; + --mat-chip-elevated-selected-container-color: var(--color-accentedPalette-500) !important; + --mat-chip-container-height: 32px; + --mat-chip-label-text-color: rgba(0, 0, 0, 0.64); } @media (prefers-color-scheme: light) { .saved-filters-tabs ::ng-deep .mat-mdc-standard-chip { - --mdc-chip-outline-color: rgba(0, 0, 0, 0.24); - --mdc-chip-elevated-selected-container-color: var(--color-accentedPalette-500) !important; - --mdc-chip-label-text-color: rgba(0, 0, 0, 0.64); + --mat-chip-outline-color: rgba(0, 0, 0, 0.24); + --mat-chip-elevated-selected-container-color: var(--color-accentedPalette-500) !important; + --mat-chip-label-text-color: rgba(0, 0, 0, 0.64); } } @media (prefers-color-scheme: dark) { .saved-filters-tabs ::ng-deep .mat-mdc-standard-chip { - --mdc-chip-outline-color: rgba(255, 255, 255, 0.24); - --mdc-chip-elevated-selected-container-color: var(--color-accentedPalette-500) !important; - --mdc-chip-label-text-color: rgba(255, 255, 255, 0.64); + --mat-chip-outline-color: rgba(255, 255, 255, 0.24); + --mat-chip-elevated-selected-container-color: var(--color-accentedPalette-500) !important; + --mat-chip-label-text-color: rgba(255, 255, 255, 0.64); } } diff --git a/frontend/src/app/components/db-table-row-edit/db-table-row-edit.component.css b/frontend/src/app/components/db-table-row-edit/db-table-row-edit.component.css index a3e072d8d..0cf057427 100644 --- a/frontend/src/app/components/db-table-row-edit/db-table-row-edit.component.css +++ b/frontend/src/app/components/db-table-row-edit/db-table-row-edit.component.css @@ -1,79 +1,79 @@ .page { - display: flex; - height: 100%; + display: flex; + height: 100%; } .wrapper { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - padding: 36px 0 16px; - width: 100vw; + position: relative; + display: flex; + flex-direction: column; + align-items: center; + padding: 36px 0 16px; + width: 100vw; } @media (width <= 600px) { - .wrapper { - padding: 36px 9vw 16px; - width: 100vw; - } + .wrapper { + padding: 36px 9vw 16px; + width: 100vw; + } } .wrapper_shifted { - margin-left: calc(clamp(-400px, -22vw, -200px) - 24px); + margin-left: calc(clamp(-400px, -22vw, -200px) - 24px); } .row-edit-header { - display: flex; - align-items: center; - gap: 16px; + display: flex; + align-items: center; + gap: 16px; } @media (width <= 600px) { - .row-edit-header { - flex-direction: column; - align-items: flex-start; - gap: 8px; - width: 100%; - } + .row-edit-header { + flex-direction: column; + align-items: flex-start; + gap: 8px; + width: 100%; + } } .row-actions { - display: flex; - align-items: center; + display: flex; + align-items: center; } .custom-actions_desktop { - display: flex; - align-items: center; - gap: 4px; + display: flex; + align-items: center; + gap: 4px; } @media (width <= 600px) { - .custom-actions_desktop { - display: none; - } + .custom-actions_desktop { + display: none; + } } .custom-actions_mobile { - display: none; + display: none; } @media (width <= 600px) { - .custom-actions_mobile { - display: flex; - flex-wrap: wrap; - gap: 8px; - } + .custom-actions_mobile { + display: flex; + flex-wrap: wrap; + gap: 8px; + } } .form { - display: flex; - flex-direction: column; - margin: 24px auto 40px; - max-width: 520px; - min-width: 300px; - width: 100%; + display: flex; + flex-direction: column; + margin: 24px auto 40px; + max-width: 520px; + min-width: 300px; + width: 100%; } /* @media (width <= 600px) { @@ -83,128 +83,128 @@ } */ .related-views { - position: absolute; - top: calc(52px + 40px); - right: 0; - display: flex; - flex-direction: column; - margin: 0 auto 0; - height: calc(100vh - 52px - 64px - 96px); - max-width: 520px; - min-width: 300px; - overflow: auto; - padding-right: 20px; - width: max(calc(45vw - 260px), 2%); + position: absolute; + top: calc(52px + 40px); + right: 0; + display: flex; + flex-direction: column; + margin: 0 auto 0; + height: calc(100vh - 52px - 64px - 96px); + max-width: 520px; + min-width: 300px; + overflow: auto; + padding-right: 20px; + width: max(calc(45vw - 260px), 2%); } @media (width <= 1280px) { - .related-views { - position: initial; - height: auto; - margin: 12px 0 4px; - padding: 4px 2px; - width: 100%; - } + .related-views { + position: initial; + height: auto; + margin: 12px 0 4px; + padding: 4px 2px; + width: 100%; + } - .related-views__title { - padding: 0 10px; - } + .related-views__title { + padding: 0 10px; + } } .related-records__table-name { - flex: 1 0 auto; + flex: 1 0 auto; } .related-records__actions { - flex-grow: 0; - justify-content: flex-end; + flex-grow: 0; + justify-content: flex-end; } .related-record { - --mdc-list-list-item-two-line-container-height: 60px; + --mat-list-list-item-two-line-container-height: 60px; } .related-record ::ng-deep .mdc-list-item__primary-text::before { - height: 24px; + height: 24px; } .related-records__panel ::ng-deep .mat-expansion-panel-body { - padding: 0 8px 16px; + padding: 0 8px 16px; } .related-record__fields { - margin-left: -4px; + margin-left: -4px; } .related-record__field { - margin-left: 8px; + margin-left: 8px; } .related-record__fieldName { - margin-right: 4px; + margin-right: 4px; } .widget { - display: grid; - grid-template-columns: 0 1fr 36px; + display: grid; + grid-template-columns: 0 1fr 36px; } .widget-info { - margin-left: auto; - margin-top: 12px; + margin-left: auto; + margin-top: 12px; } .widget-info_centered { - align-self: center; - margin-top: -18px; + align-self: center; + margin-top: -18px; } .actions { - position: fixed; - left: 0; - bottom: 0; - display: flex; - align-items: center; - /* justify-content: space-between; */ - background-color: var(--mat-sidenav-content-background-color); - box-shadow: var(--shadow); - height: 64px; - padding: 0 max(calc(50vw - 260px), 2%); - width: 100vw; + position: fixed; + left: 0; + bottom: 0; + display: flex; + align-items: center; + /* justify-content: space-between; */ + background-color: var(--mat-sidenav-content-background-color); + box-shadow: var(--shadow); + height: 64px; + padding: 0 max(calc(50vw - 260px), 2%); + width: 100vw; } .actions-box { - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; } .wrapper_shifted .actions { - left: calc(clamp(-400px, -22vw, -200px)); + left: calc(clamp(-400px, -22vw, -200px)); } .wrapper_shifted .actions-box { - margin-left: -24px; + margin-left: -24px; } @media (prefers-color-scheme: dark) { - .actions { - --shadow: 0 3px 1px -2px rgba(0,0,0,.5),0 2px 2px 0 rgba(0,0,0,.64),0 1px 5px 0 rgba(0,0,0,0.85); - } + .actions { + --shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.5), 0 2px 2px 0 rgba(0, 0, 0, 0.64), 0 1px 5px 0 rgba(0, 0, 0, 0.85); + } } @media (prefers-color-scheme: light) { - .actions { - --shadow: 0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12); - } + .actions { + --shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + } } .actions__continue { - margin-left: auto; - margin-right: 20px; + margin-left: auto; + margin-right: 20px; } .error-details { - margin-top: 8px; + margin-top: 8px; } diff --git a/frontend/src/app/components/login/login.component.css b/frontend/src/app/components/login/login.component.css index 608d0ec25..4a5c61f92 100644 --- a/frontend/src/app/components/login/login.component.css +++ b/frontend/src/app/components/login/login.component.css @@ -1,351 +1,354 @@ .wrapper { - height: calc(100vh - 56px); - padding: 16px; + height: calc(100vh - 56px); + padding: 16px; } @media (width <= 600px) { - .wrapper { - padding: 0; - width: 100vw; - } + .wrapper { + padding: 0; + width: 100vw; + } } .login-page { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100%; } @media (width <= 600px) { - .login-page { - justify-content: flex-start; - } + .login-page { + justify-content: flex-start; + } } .login-form { - display: grid; - grid-template-columns: 360px 52px 360px; - grid-template-rows: auto 64px 64px 64px auto; - justify-items: center; + display: grid; + grid-template-columns: 360px 52px 360px; + grid-template-rows: auto 64px 64px 64px auto; + justify-items: center; } .login-form--native-login { - display: flex; - flex-direction: column; - align-items: center; - width: clamp(360px, 30%, 600px); + display: flex; + flex-direction: column; + align-items: center; + width: clamp(360px, 30%, 600px); } @media (width <= 600px) { - .login-form { - display: flex; - flex-direction: column; - align-items: center; - gap: 8px; - padding: 40px 9vw; - width: 100%; - } + .login-form { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + padding: 40px 9vw; + width: 100%; + } } .login-header { - grid-column: 1 / span 3; - display: flex; - flex-direction: column; - align-items: center; - padding-bottom: 40px; + grid-column: 1 / span 3; + display: flex; + flex-direction: column; + align-items: center; + padding-bottom: 40px; } @media (width <= 600px) { - .login-header { - padding-bottom: 0; - } + .login-header { + padding-bottom: 0; + } } .login-header__logo { - margin-bottom: 36px; - width: 44px; + margin-bottom: 36px; + width: 44px; } @media (width <= 600px) { - .login-header__logo { - margin-bottom: 12px; - } + .login-header__logo { + margin-bottom: 12px; + } } @media (prefers-color-scheme: dark) { - .login-header__logo path { - fill: white; - } + .login-header__logo path { + fill: white; + } } .loginTitle { - font-weight: 600 !important; - margin-bottom: 40px !important; - text-align: center !important; + font-weight: 600 !important; + margin-bottom: 40px !important; + text-align: center !important; } .loginTitle__emphasis { - color: var(--color-accentedPalette-500); + color: var(--color-accentedPalette-500); } @media (width <= 600px) { - .login-header__directions { - display: none; - } + .login-header__directions { + display: none; + } } -[hidden] { display: none !important;} +[hidden] { + display: none !important; +} .login-form__email { - grid-column: 1; - grid-row: 2; - width: 100%; + grid-column: 1; + grid-row: 2; + width: 100%; } @media (width <= 600px) { - .login-form__email { - order: 1; - } + .login-form__email { + order: 1; + } } .login-form__companies { - width: 100%; + width: 100%; } @media (width <= 600px) { - .login-form__companies { - order: 2; - } + .login-form__companies { + order: 2; + } } .login-form__password { - /* grid-column: 1; + /* grid-column: 1; grid-row: 3; */ - width: 100%; + width: 100%; } @media (width <= 600px) { - .login-form__password { - order: 3; - } + .login-form__password { + order: 3; + } } .login-form__login-button { - grid-column: 1 / span 3; - grid-row: 5; - width: 360px; - margin-top: 40px; + grid-column: 1 / span 3; + grid-row: 5; + width: 360px; + margin-top: 40px; } @media (width <= 600px) { - .login-form__login-button { - order: 4; - margin-top: 0; - width: 100%; - } + .login-form__login-button { + order: 4; + margin-top: 0; + width: 100%; + } } .login-form__google-button { - grid-column: 3; - grid-row: 2; + grid-column: 3; + grid-row: 2; } @media (width <= 600px) { - .login-form__google-button { - order: 6; - margin: 4px 0; - } + .login-form__google-button { + order: 6; + margin: 4px 0; + } } .login-form__github-button-box { - grid-column: 3; - grid-row: 3; - width: 100%; + grid-column: 3; + grid-row: 3; + width: 100%; } @media (width <= 600px) { - .login-form__github-button-box { - order: 7; - margin: 4px 0; - } + .login-form__github-button-box { + order: 7; + margin: 4px 0; + } } .login-form__github-button { - height: 40px; - width: 100%; + height: 40px; + width: 100%; } .login-form__github-button ::ng-deep .mdc-button__label { - display: flex; - justify-content: space-between; - width: 100%; + display: flex; + justify-content: space-between; + width: 100%; } .login-form__github-caption { - flex: 1 0 auto; - text-align: center; + flex: 1 0 auto; + text-align: center; } .login-form__github-icon { - --mat-outlined-button-icon-spacing: 0; - --mat-outlined-button-icon-offset: 0; + --mat-button-outlined-icon-spacing: 0; + --mat-button-outlined-icon-offset: 0; } .login-form__github-button:disabled .login-form__github-icon { - filter: invert(0.85); + filter: invert(0.85); } @media (prefers-color-scheme: dark) { - .login-form__github-icon ::ng-deep svg path { - fill: #fff; - } + .login-form__github-icon ::ng-deep svg path { + fill: #fff; + } } .login-form__sso-button-box { - grid-column: 3; - grid-row: 4; - width: 100%; + grid-column: 3; + grid-row: 4; + width: 100%; } @media (width <= 600px) { - .login-form__sso-button-box { - order: 8; - margin: 4px 0; - } + .login-form__sso-button-box { + order: 8; + margin: 4px 0; + } } .login-form__sso-button { - height: 40px; - width: 100%; + height: 40px; + width: 100%; } .login-form__sso-button ::ng-deep .mdc-button__label { - display: flex; - justify-content: space-between; - width: 100%; + display: flex; + justify-content: space-between; + width: 100%; } .login-form__sso-caption { - flex: 1 0 auto; - text-align: center; + flex: 1 0 auto; + text-align: center; } .login-form__sso-icon { - height: 18px; - width: 18px; + height: 18px; + width: 18px; } .login-form__sso-button:disabled .login-form__sso-icon { - filter: invert(0.85); + filter: invert(0.85); } .login-form__link { - grid-column: 1 / span 3; - grid-row: 6; - color: var(--color-accentedPalette-500); - margin-top: 48px; - text-decoration: none; + grid-column: 1 / span 3; + grid-row: 6; + color: var(--color-accentedPalette-500); + margin-top: 48px; + text-decoration: none; } @media (width <= 600px) { - .login-form__link { - order: 9; - } + .login-form__link { + order: 9; + } } .divider { - grid-column: 2; - grid-row: 2 / span 3; - align-self: center; - position: relative; - background-color: #E8E8E8; - margin: 36px 0; - height: 100%; - width: 1px; + grid-column: 2; + grid-row: 2 / span 3; + align-self: center; + position: relative; + background-color: #e8e8e8; + margin: 36px 0; + height: 100%; + width: 1px; } @media (width <= 600px) { - .divider { - order: 5; - height: 1px; - margin: 28px 0 8px; - width: 100%; - } + .divider { + order: 5; + height: 1px; + margin: 28px 0 8px; + width: 100%; + } } .divider__label { - position: absolute; - top: 50%; left: 50%; - transform: translate(-50%, -50%); - background-color: var(--mat-sidenav-content-background-color); - font-size: 14px; - padding: 0 16px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-color: var(--mat-sidenav-content-background-color); + font-size: 14px; + padding: 0 16px; } .qr-verification { - display: flex; - flex-direction: column; - width: 400px; + display: flex; + flex-direction: column; + width: 400px; } .qr-verification__title { - text-align: center; - margin-bottom: 32px; + text-align: center; + margin-bottom: 32px; } .companiesRadioGroup { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: 12px; + display: flex; + flex-direction: column; + align-items: flex-start; + margin-bottom: 12px; } .login-form__field-loader { - position: relative; - background-color: rgba(0, 0, 0, 0.06); - overflow: hidden; - height: 44px; - width: 100%; + position: relative; + background-color: rgba(0, 0, 0, 0.06); + overflow: hidden; + height: 44px; + width: 100%; } @media (width <= 600px) { - .login-form__field-loader { - order: 2; - } + .login-form__field-loader { + order: 2; + } } .login-form__field-loader::after { - content: ''; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - transform: translateX(-100%); - background-image: linear-gradient( - 90deg, - transparent 40%, - var(--mat-sidenav-content-background-color, #fff), - transparent 60% - ); - animation: shimmer 800ms ease-in-out infinite alternate; + content: ""; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + transform: translateX(-100%); + background-image: linear-gradient( + 90deg, + transparent 40%, + var(--mat-sidenav-content-background-color, #fff), + transparent 60% + ); + animation: shimmer 800ms ease-in-out infinite alternate; } @media (prefers-color-scheme: dark) { - .login-form__field-loader::after { - background-image: linear-gradient( - 90deg, - transparent 40%, - var(--mat-sidenav-content-background-color, #303030), - transparent 60% - ); - } + .login-form__field-loader::after { + background-image: linear-gradient( + 90deg, + transparent 40%, + var(--mat-sidenav-content-background-color, #303030), + transparent 60% + ); + } } @keyframes shimmer { - 100% { - transform: translateX(100%); - } -} \ No newline at end of file + 100% { + transform: translateX(100%); + } +} diff --git a/frontend/src/app/components/registration/registration.component.css b/frontend/src/app/components/registration/registration.component.css index e24bc9413..c40b1d8e1 100644 --- a/frontend/src/app/components/registration/registration.component.css +++ b/frontend/src/app/components/registration/registration.component.css @@ -1,202 +1,200 @@ .wrapper { - display: grid; - grid-template-columns: auto 62.5%; - grid-column-gap: 24px; - height: 100%; - padding: 40px 24px; + display: grid; + grid-template-columns: auto 62.5%; + grid-column-gap: 24px; + height: 100%; + padding: 40px 24px; } @media (width <= 600px) { - .wrapper { - display: flex; - flex-direction: column; - padding: 0; - } + .wrapper { + display: flex; + flex-direction: column; + padding: 0; + } } .registrationTitle { - font-weight: 700 !important; - margin-top: -4px !important; - margin-bottom: 32px !important; + font-weight: 700 !important; + margin-top: -4px !important; + margin-bottom: 32px !important; } .registrationTitle_mobile { - display: none; + display: none; } @media (width <= 600px) { - .registrationTitle_desktop { - display: none; - } + .registrationTitle_desktop { + display: none; + } - .registrationTitle_mobile { - display: initial; - } + .registrationTitle_mobile { + display: initial; + } } - - - .registrationTitle__emphasis { - color: var(--color-accentedPalette-500) + color: var(--color-accentedPalette-500); } .register-form-box { - display: flex; - flex-direction: column; - /* justify-content: space-between; */ - padding-bottom: 20px; + display: flex; + flex-direction: column; + /* justify-content: space-between; */ + padding-bottom: 20px; } @media (width <= 600px) { - .register-form-box { - height: 100%; - } + .register-form-box { + height: 100%; + } } .register-form { - display: flex; - flex-direction: column; - height: 100%; - margin: auto; - padding: 0 48px; - width: 496px; + display: flex; + flex-direction: column; + height: 100%; + margin: auto; + padding: 0 48px; + width: 496px; } @media (width <= 600px) { - .register-form { - padding: 40px 9vw 0; - width: 100%; - } + .register-form { + padding: 40px 9vw 0; + width: 100%; + } } .mat-h1 { - align-self: center; - margin-top: 20px; - font-weight: 500; - text-align: center; - width: 75%; + align-self: center; + margin-top: 20px; + font-weight: 500; + text-align: center; + width: 75%; } @media screen and (max-width: 600px) { - .mat-h1 { - margin-top: 32px; - margin-bottom: 32px; - width: 100%; - } + .mat-h1 { + margin-top: 32px; + margin-bottom: 32px; + width: 100%; + } } .divider { - position: relative; - background-color: #E8E8E8; - height: 1px; - margin: 24px 0; - width: 100% + position: relative; + background-color: #e8e8e8; + height: 1px; + margin: 24px 0; + width: 100%; } .divider__label { - position: absolute; - top: 50%; left: 50%; - transform: translate(-50%, -50%); - background-color: var(--mat-sidenav-content-background-color); - font-size: 14px; - padding: 0 16px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-color: var(--mat-sidenav-content-background-color); + font-size: 14px; + padding: 0 16px; } @media screen and (max-width: 600px) { - #google_registration_button ::ng-deep iframe { - width: 100% !important; - } + #google_registration_button ::ng-deep iframe { + width: 100% !important; + } } .password-field { - margin-top: 8px; + margin-top: 8px; } .submit-button { - margin-top: 64px; + margin-top: 64px; } .register-image-box { - display: flex; - justify-content: flex-end; - align-items: flex-end; - background-color: var(--image-box-bg); - border-radius: 12px; - height: calc(100vh - 120px); - overflow: hidden; - padding-top: 3vw; + display: flex; + justify-content: flex-end; + align-items: flex-end; + background-color: var(--image-box-bg); + border-radius: 12px; + height: calc(100vh - 120px); + overflow: hidden; + padding-top: 3vw; } @media (prefers-color-scheme: light) { - .register-image-box { - --image-box-bg: #E8F1EA; - } + .register-image-box { + --image-box-bg: #e8f1ea; + } } @media (prefers-color-scheme: dark) { - .register-image-box { - --image-box-bg: #636363; - } + .register-image-box { + --image-box-bg: #636363; + } } @media screen and (max-width: 600px) { - .register-image-box { - display: none; - } + .register-image-box { + display: none; + } } .password-visibility-button { - cursor: pointer; + cursor: pointer; } .register-image { - height: 85vh; - margin-bottom: -5px; + height: 85vh; + margin-bottom: -5px; } .register-form .agreement { - margin-top: auto !important; + margin-top: auto !important; } .link { - color: var(--color-accentedPalette-500); + color: var(--color-accentedPalette-500); } .register-form__github-button { - background-color: #24292f; - margin-top: 20px; - padding: 6px; - width: 400px; + background-color: #24292f; + margin-top: 20px; + padding: 6px; + width: 400px; } @media (width <= 600px) { - .register-form__github-button { - width: auto; - } + .register-form__github-button { + width: auto; + } } .register-form__github-button ::ng-deep .mdc-button__label { - display: flex; - justify-content: space-between; - width: 100%; + display: flex; + justify-content: space-between; + width: 100%; } .register-form__github-caption { - flex: 1 0 auto; - color: #fff; - margin-top: 2px; - text-align: center; + flex: 1 0 auto; + color: #fff; + margin-top: 2px; + text-align: center; } .register-form__github-icon { - --mat-outlined-button-icon-spacing: 0; - --mat-outlined-button-icon-offset: 0; + --mat-button-outlined-icon-spacing: 0; + --mat-button-outlined-icon-offset: 0; - height: 24px !important; - width: 24px !important; + height: 24px !important; + width: 24px !important; } .register-form__github-icon ::ng-deep svg path { - fill: #fff; + fill: #fff; } diff --git a/frontend/src/app/components/ui-components/filter-fields/boolean/boolean.component.css b/frontend/src/app/components/ui-components/filter-fields/boolean/boolean.component.css index b913fd0b7..ef61e81a4 100644 --- a/frontend/src/app/components/ui-components/filter-fields/boolean/boolean.component.css +++ b/frontend/src/app/components/ui-components/filter-fields/boolean/boolean.component.css @@ -1,11 +1,11 @@ .radio-line { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 20px; + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; } .radio-line ::ng-deep .mat-button-toggle-appearance-standard.mat-button-toggle-checked { - --mat-standard-button-toggle-selected-state-text-color: var(--color-accentedPalette-500-contrast); - --mat-standard-button-toggle-selected-state-background-color: var(--color-accentedPalette-500); + --mat-button-toggle-selected-state-text-color: var(--color-accentedPalette-500-contrast); + --mat-button-toggle-selected-state-background-color: var(--color-accentedPalette-500); } diff --git a/frontend/src/app/components/ui-components/record-edit-fields/boolean/boolean.component.css b/frontend/src/app/components/ui-components/record-edit-fields/boolean/boolean.component.css index b6ed95462..cd69ee3a8 100644 --- a/frontend/src/app/components/ui-components/record-edit-fields/boolean/boolean.component.css +++ b/frontend/src/app/components/ui-components/record-edit-fields/boolean/boolean.component.css @@ -1,24 +1,23 @@ .radio-line { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 20px; + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; } .radio-line ::ng-deep .mat-button-toggle-appearance-standard.mat-button-toggle-checked { - --mat-standard-button-toggle-selected-state-text-color: var(--color-accentedPalette-500-contrast); - --mat-standard-button-toggle-selected-state-background-color: var(--color-accentedPalette-500); + --mat-button-toggle-selected-state-text-color: var(--color-accentedPalette-500-contrast); + --mat-button-toggle-selected-state-background-color: var(--color-accentedPalette-500); } - /* .radio-line ::ng-deep .mat-button-toggle-appearance-standard.mat-button-toggle-checked { - --mat-standard-button-toggle-selected-state-text-color: var(--color-primaryPalette-500-contrast); - --mat-standard-button-toggle-selected-state-background-color: var(--color-primaryPalette-500); + --mat-button-toggle-selected-state-text-color: var(--color-primaryPalette-500-contrast); + --mat-button-toggle-selected-state-background-color: var(--color-primaryPalette-500); } @media (prefers-color-scheme: dark) { .radio-line ::ng-deep .mat-button-toggle-appearance-standard.mat-button-toggle-checked { - --mat-standard-button-toggle-selected-state-text-color: var(--color-whitePalette-500-contrast); - --mat-standard-button-toggle-selected-state-background-color: var(--color-whitePalette-500); + --mat-button-toggle-selected-state-text-color: var(--color-whitePalette-500-contrast); + --mat-button-toggle-selected-state-background-color: var(--color-whitePalette-500); } } */ diff --git a/frontend/src/app/components/ui-components/record-view-fields/range/range.component.css b/frontend/src/app/components/ui-components/record-view-fields/range/range.component.css index bc99e1d74..0c680164f 100644 --- a/frontend/src/app/components/ui-components/record-view-fields/range/range.component.css +++ b/frontend/src/app/components/ui-components/record-view-fields/range/range.component.css @@ -1,64 +1,64 @@ .range-display-container { - display: flex; - flex-direction: column; - gap: 4px; - padding: 4px 0; + display: flex; + flex-direction: column; + gap: 4px; + padding: 4px 0; } .range-value-label { - font-size: 14px; - color: rgba(0, 0, 0, 0.87); - font-weight: 500; + font-size: 14px; + color: rgba(0, 0, 0, 0.87); + font-weight: 500; } .range-progress-bar { - height: 8px; - border-radius: 4px; - min-width: 160px; + height: 8px; + border-radius: 4px; + min-width: 160px; } /* Material progress bar specific styles */ .range-progress-bar.mat-mdc-progress-bar { - height: 8px; + height: 8px; } /* Light theme progress bar styles */ .range-progress-bar { - --mdc-linear-progress-active-indicator-color: var(--color-accentedPalette-300); - --mdc-linear-progress-track-color: #e0e0e0; - --mdc-linear-progress-active-indicator-height: 8px; - --mdc-linear-progress-track-height: 8px; + --mat-progress-bar-active-indicator-color: var(--color-accentedPalette-300); + --mat-progress-bar-track-color: #e0e0e0; + --mat-progress-bar-active-indicator-height: 8px; + --mat-progress-bar-track-height: 8px; } /* Override Material default styles */ .range-progress-bar ::ng-deep .mdc-linear-progress { - height: 8px !important; + height: 8px !important; } .range-progress-bar ::ng-deep .mdc-linear-progress__bar { - height: 8px !important; + height: 8px !important; } .range-progress-bar ::ng-deep .mdc-linear-progress__bar-inner { - border-top-width: 8px !important; + border-top-width: 8px !important; } .range-progress-bar ::ng-deep .mdc-linear-progress__buffer { - height: 8px !important; + height: 8px !important; } .range-progress-bar ::ng-deep .mdc-linear-progress__buffer-bar { - height: 8px !important; + height: 8px !important; } /* Dark theme styles */ @media (prefers-color-scheme: dark) { - .range-value-label { - color: rgba(255, 255, 255, 0.87); - } + .range-value-label { + color: rgba(255, 255, 255, 0.87); + } - .range-progress-bar { - --mdc-linear-progress-active-indicator-color: var(--color-accentedPalette-700); - --mdc-linear-progress-track-color: rgba(255, 255, 255, 0.12); - } -} \ No newline at end of file + .range-progress-bar { + --mat-progress-bar-active-indicator-color: var(--color-accentedPalette-700); + --mat-progress-bar-track-color: rgba(255, 255, 255, 0.12); + } +} diff --git a/frontend/src/app/components/ui-components/table-display-fields/range/range.component.css b/frontend/src/app/components/ui-components/table-display-fields/range/range.component.css index b897a7ac8..8a428ec78 100644 --- a/frontend/src/app/components/ui-components/table-display-fields/range/range.component.css +++ b/frontend/src/app/components/ui-components/table-display-fields/range/range.component.css @@ -1,63 +1,63 @@ .range-display-container { - display: flex; - flex-direction: column; - gap: 4px; - padding: 4px 0; + display: flex; + flex-direction: column; + gap: 4px; + padding: 4px 0; } .range-value-label { - font-size: 14px; - color: rgba(0, 0, 0, 0.87); - font-weight: 500; + font-size: 14px; + color: rgba(0, 0, 0, 0.87); + font-weight: 500; } .range-progress-bar { - height: 8px; - border-radius: 4px; + height: 8px; + border-radius: 4px; } /* Material progress bar specific styles */ .range-progress-bar.mat-mdc-progress-bar { - height: 8px; + height: 8px; } /* Light theme progress bar styles */ .range-progress-bar { - --mdc-linear-progress-active-indicator-color: var(--color-accentedPalette-300); - --mdc-linear-progress-track-color: #e0e0e0; - --mdc-linear-progress-active-indicator-height: 8px; - --mdc-linear-progress-track-height: 8px; + --mat-progress-bar-active-indicator-color: var(--color-accentedPalette-300); + --mat-progress-bar-track-color: #e0e0e0; + --mat-progress-bar-active-indicator-height: 8px; + --mat-progress-bar-track-height: 8px; } /* Override Material default styles */ .range-progress-bar ::ng-deep .mdc-linear-progress { - height: 8px !important; + height: 8px !important; } .range-progress-bar ::ng-deep .mdc-linear-progress__bar { - height: 8px !important; + height: 8px !important; } .range-progress-bar ::ng-deep .mdc-linear-progress__bar-inner { - border-top-width: 8px !important; + border-top-width: 8px !important; } .range-progress-bar ::ng-deep .mdc-linear-progress__buffer { - height: 8px !important; + height: 8px !important; } .range-progress-bar ::ng-deep .mdc-linear-progress__buffer-bar { - height: 8px !important; + height: 8px !important; } /* Dark theme styles */ @media (prefers-color-scheme: dark) { - .range-value-label { - color: rgba(255, 255, 255, 0.87); - } - - .range-progress-bar { - --mdc-linear-progress-active-indicator-color: var(--color-accentedPalette-700); - --mdc-linear-progress-track-color: rgba(255, 255, 255, 0.12); - } -} \ No newline at end of file + .range-value-label { + color: rgba(255, 255, 255, 0.87); + } + + .range-progress-bar { + --mat-progress-bar-active-indicator-color: var(--color-accentedPalette-700); + --mat-progress-bar-track-color: rgba(255, 255, 255, 0.12); + } +} diff --git a/frontend/src/app/components/upgrade/upgrade.component.css b/frontend/src/app/components/upgrade/upgrade.component.css index 06fb04043..128998579 100644 --- a/frontend/src/app/components/upgrade/upgrade.component.css +++ b/frontend/src/app/components/upgrade/upgrade.component.css @@ -1,179 +1,184 @@ .upgrade-box { - margin-top: 53px; + margin-top: 53px; } .upgrade-box__title { - margin-bottom: 20px; - text-align: center; + margin-bottom: 20px; + text-align: center; } .page { - padding: 16px; + padding: 16px; } .plans { - margin: 2em auto; - width: clamp(300px, 90%, 840px); + margin: 2em auto; + width: clamp(300px, 90%, 840px); } .header { - display: grid; - grid-template-columns: 0 7fr repeat(3, 6fr); - grid-column-gap: 12px; - margin-bottom: 1em; + display: grid; + grid-template-columns: 0 7fr repeat(3, 6fr); + grid-column-gap: 12px; + margin-bottom: 1em; } .mat-h1 { - margin: 0; + margin: 0; } .mat-table { - width: 100%; + width: 100%; } .mat-header-cell { - width: 25%; + width: 25%; } .cell_centered { - padding: 0 4px 0 16px !important; - text-align: center; + padding: 0 4px 0 16px !important; + text-align: center; } .cell_current { - background: linear-gradient(to right, transparent 12px, rgba(0, 0, 0, 0.04) 12px, rgba(0, 0, 0, 0.04)); + background: linear-gradient(to right, transparent 12px, rgba(0, 0, 0, 0.04) 12px, rgba(0, 0, 0, 0.04)); } @media (prefers-color-scheme: dark) { - .cell_current { - background: linear-gradient(to right, transparent 12px, var(--color-primaryPalette-800) 12px, var(--color-primaryPalette-800));; - } + .cell_current { + background: linear-gradient( + to right, + transparent 12px, + var(--color-primaryPalette-800) 12px, + var(--color-primaryPalette-800) + ); + } } .plan-header { - display: flex; - flex-direction: column; - align-items: flex-start; - border-radius: 12px; - color: var(--mat-sidenav-content-text-color); - padding: 1.5em; + display: flex; + flex-direction: column; + align-items: flex-start; + border-radius: 12px; + color: var(--mat-sidenav-content-text-color); + padding: 1.5em; } @media (prefers-color-scheme: dark) { - .plan-header { - background-color: #202020; - } + .plan-header { + background-color: #202020; + } - .plan-header_current { - background-color: var(--color-primaryPalette-800); - } + .plan-header_current { + background-color: var(--color-primaryPalette-800); + } } .plan-header-name { - display: flex; - justify-content: space-between; - margin-bottom: 16px; - width: 100%; + display: flex; + justify-content: space-between; + margin-bottom: 16px; + width: 100%; } .plan-header h3 { - margin-bottom: 0; + margin-bottom: 0; } .plan-badge { - --mdc-chip-label-text-size: 0.75em; + --mat-chip-label-text-size: 0.75em; - background-color: var(--color-primaryPalette-100) !important; - border-radius: 4px; - opacity: 1 !important; - height: 20px; + background-color: var(--color-primaryPalette-100) !important; + border-radius: 4px; + opacity: 1 !important; + height: 20px; } .plan-badge ::ng-deep .mdc-evolution-chip__action--primary { - padding-left: 4px !important; - padding-right: 4px !important; + padding-left: 4px !important; + padding-right: 4px !important; } .plan-badge ::ng-deep .mat-mdc-chip-action-label { - color: var(--color-primaryPalette-200-contrast) !important; + color: var(--color-primaryPalette-200-contrast) !important; } .price { - font-size: 2em; + font-size: 2em; } .per { - color: var(--color-value); + color: var(--color-value); } @media (prefers-color-scheme: dark) { - .per { - --color-value: rgba(255, 255, 255, 0.46); - } + .per { + --color-value: rgba(255, 255, 255, 0.46); + } } @media (prefers-color-scheme: light) { - .per { - --color-value: rgba(0, 0, 0, 0.54); - } + .per { + --color-value: rgba(0, 0, 0, 0.54); + } } .users { - font-weight: 400; - margin-top: 0.25em; - margin-bottom: 2em; + font-weight: 400; + margin-top: 0.25em; + margin-bottom: 2em; } .users__value { - color: var(--color-value); + color: var(--color-value); } @media (prefers-color-scheme: dark) { - .users__value { - --color-value: #fff; - } + .users__value { + --color-value: #fff; + } } @media (prefers-color-scheme: light) { - .users__value { - --color-value: #333; - } + .users__value { + --color-value: #333; + } } .current { - background: transparent !important; - margin-left: -16px; + background: transparent !important; + margin-left: -16px; } .plansTable { - --mat-table-header-container-height: 28px; - --mat-table-header-headline-size: 12px; - --mat-table-header-headline-color: rgba(0,0,0,0.64); + --mat-table-header-container-height: 28px; + --mat-table-header-headline-size: 12px; + --mat-table-header-headline-color: rgba(0, 0, 0, 0.64); - border-radius: 12px; - overflow: hidden; - margin-top: -8px; - margin-bottom: 20px; + border-radius: 12px; + overflow: hidden; + margin-top: -8px; + margin-bottom: 20px; } @media (prefers-color-scheme: dark) { - .plansTable { - --mat-table-header-headline-color: rgba(255,255,255,0.64); - } + .plansTable { + --mat-table-header-headline-color: rgba(255, 255, 255, 0.64); + } } .databases-header-cell__users { - text-align: center; + text-align: center; } .person-icon { - font-size: 20px; - height: 20px; - margin-bottom: -6px; - margin-left: 2px; - width: 20px; + font-size: 20px; + height: 20px; + margin-bottom: -6px; + margin-left: 2px; + width: 20px; } /* .plansTable :ng-deep.mdc-data-table__cell { padding: 0 0 0 16px !important; -} */ \ No newline at end of file +} */ diff --git a/frontend/src/app/components/upgrade/upgrade.component.spec.ts b/frontend/src/app/components/upgrade/upgrade.component.spec.ts index bcf9ada39..c0692f1b1 100644 --- a/frontend/src/app/components/upgrade/upgrade.component.spec.ts +++ b/frontend/src/app/components/upgrade/upgrade.component.spec.ts @@ -1,85 +1,80 @@ +import { provideHttpClient } from '@angular/common/http'; import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { UpgradeComponent } from './upgrade.component'; import { MatSnackBarModule } from '@angular/material/snack-bar'; -import { UserService } from 'src/app/services/user.service'; import { RouterTestingModule } from '@angular/router/testing'; -import { provideHttpClient } from '@angular/common/http'; +import { UserService } from 'src/app/services/user.service'; +import { UpgradeComponent } from './upgrade.component'; describe('UpgradeComponent', () => { - let component: UpgradeComponent; - let fixture: ComponentFixture; - let _userService: UserService; + let component: UpgradeComponent; + let fixture: ComponentFixture; + let _userService: UserService; - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ - RouterTestingModule, - MatSnackBarModule, - UpgradeComponent - ], - providers: [provideHttpClient()] - }).compileComponents(); - }); + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RouterTestingModule, MatSnackBarModule, UpgradeComponent], + providers: [provideHttpClient()], + }).compileComponents(); + }); - beforeEach(() => { - fixture = TestBed.createComponent(UpgradeComponent); - component = fixture.componentInstance; - _userService = TestBed.get(UserService); - fixture.detectChanges(); - }); + beforeEach(() => { + fixture = TestBed.createComponent(UpgradeComponent); + component = fixture.componentInstance; + _userService = TestBed.inject(UserService); + fixture.detectChanges(); + }); - it('should create', () => { - expect(component).toBeTruthy(); - }); + it('should create', () => { + expect(component).toBeTruthy(); + }); - // it('should define ANNUAL_ENTERPRISE_PLAN as annuale enterprise plan', () => { - // const fakeUser = { - // "id": "12345678", - // "isActive": true, - // "email": "test.user@email.com", - // "createdAt": "2021-11-17T16:07:13.955Z", - // "portal_link": "https://billing.stripe.com/session/live_YWNjdF8xSk04RkJGdEhkZGExVHNCLF9LdHlWbVdQYWFZTWRHSWFST2xUUmZVZ1E0UVFoMjBX0100erRIau3Y", - // "subscriptionLevel": "ANNUAL_ENTERPRISE_PLAN" - // } + // it('should define ANNUAL_ENTERPRISE_PLAN as annuale enterprise plan', () => { + // const fakeUser = { + // "id": "12345678", + // "isActive": true, + // "email": "test.user@email.com", + // "createdAt": "2021-11-17T16:07:13.955Z", + // "portal_link": "https://billing.stripe.com/session/live_YWNjdF8xSk04RkJGdEhkZGExVHNCLF9LdHlWbVdQYWFZTWRHSWFST2xUUmZVZ1E0UVFoMjBX0100erRIau3Y", + // "subscriptionLevel": "ANNUAL_ENTERPRISE_PLAN" + // } - // component.setUser(fakeUser); + // component.setUser(fakeUser); - // expect(component.isAnnually).toBeTrue(); - // expect(component.currentPlan).toEqual('enterprise'); - // }); + // expect(component.isAnnually).toBeTrue(); + // expect(component.currentPlan).toEqual('enterprise'); + // }); - // it('should define TEAM_PLAN as not annuale team plan', () => { - // const fakeUser = { - // "id": "12345678", - // "isActive": true, - // "email": "test.user@email.com", - // "createdAt": "2021-11-17T16:07:13.955Z", - // "portal_link": "https://billing.stripe.com/session/live_YWNjdF8xSk04RkJGdEhkZGExVHNCLF9LdHlWbVdQYWFZTWRHSWFST2xUUmZVZ1E0UVFoMjBX0100erRIau3Y", - // "subscriptionLevel": "TEAM_PLAN" - // } + // it('should define TEAM_PLAN as not annuale team plan', () => { + // const fakeUser = { + // "id": "12345678", + // "isActive": true, + // "email": "test.user@email.com", + // "createdAt": "2021-11-17T16:07:13.955Z", + // "portal_link": "https://billing.stripe.com/session/live_YWNjdF8xSk04RkJGdEhkZGExVHNCLF9LdHlWbVdQYWFZTWRHSWFST2xUUmZVZ1E0UVFoMjBX0100erRIau3Y", + // "subscriptionLevel": "TEAM_PLAN" + // } - // component.setUser(fakeUser); + // component.setUser(fakeUser); - // expect(component.isAnnually).toBeFalse(); - // expect(component.currentPlan).toEqual('team'); - // }); + // expect(component.isAnnually).toBeFalse(); + // expect(component.currentPlan).toEqual('team'); + // }); - // it('should call upgrage plan service for monthly team plan', () => { - // const fakeUpgradeUser = spyOn(userService, 'upgradeUser').and.returnValue(of('')); - // const fakeFetchUser = spyOn(userService, 'fetchUser').and.returnValue(of('')); + // it('should call upgrage plan service for monthly team plan', () => { + // const fakeUpgradeUser = spyOn(userService, 'upgradeUser').and.returnValue(of('')); + // const fakeFetchUser = spyOn(userService, 'fetchUser').and.returnValue(of('')); - // component.upgradePlan('team', false); - // expect(fakeUpgradeUser).toHaveBeenCalledOnceWith('TEAM_PLAN'); - // expect(fakeFetchUser).toHaveBeenCalled(); - // }); + // component.upgradePlan('team', false); + // expect(fakeUpgradeUser).toHaveBeenCalledOnceWith('TEAM_PLAN'); + // expect(fakeFetchUser).toHaveBeenCalled(); + // }); - // it('should call upgrage plan service and add ANNUAL_ if subscription is annual', () => { - // const fakeUpgradeUser = spyOn(userService, 'upgradeUser').and.returnValue(of('')); - // const fakeFetchUser = spyOn(userService, 'fetchUser').and.returnValue(of('')); + // it('should call upgrage plan service and add ANNUAL_ if subscription is annual', () => { + // const fakeUpgradeUser = spyOn(userService, 'upgradeUser').and.returnValue(of('')); + // const fakeFetchUser = spyOn(userService, 'fetchUser').and.returnValue(of('')); - // component.upgradePlan('team', true); - // expect(fakeUpgradeUser).toHaveBeenCalledOnceWith('ANNUAL_TEAM_PLAN'); - // expect(fakeFetchUser).toHaveBeenCalled(); - // }); + // component.upgradePlan('team', true); + // expect(fakeUpgradeUser).toHaveBeenCalledOnceWith('ANNUAL_TEAM_PLAN'); + // expect(fakeFetchUser).toHaveBeenCalled(); + // }); }); diff --git a/frontend/src/app/components/user-settings/account-delete-dialog/account-delete-dialog.component.spec.ts b/frontend/src/app/components/user-settings/account-delete-dialog/account-delete-dialog.component.spec.ts index c881af2d8..e7ac1248f 100644 --- a/frontend/src/app/components/user-settings/account-delete-dialog/account-delete-dialog.component.spec.ts +++ b/frontend/src/app/components/user-settings/account-delete-dialog/account-delete-dialog.component.spec.ts @@ -1,68 +1,66 @@ +import { provideHttpClient } from '@angular/common/http'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; - -import { AccountDeleteConfirmationComponent } from '../account-delete-confirmation/account-delete-confirmation.component'; -import { AccountDeleteDialogComponent } from './account-delete-dialog.component'; -import { FormsModule } from '@angular/forms'; import { MatRadioModule } from '@angular/material/radio'; import { MatSnackBarModule } from '@angular/material/snack-bar'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { provideHttpClient } from '@angular/common/http'; import { Angulartics2Module } from 'angulartics2'; +import { AccountDeleteConfirmationComponent } from '../account-delete-confirmation/account-delete-confirmation.component'; +import { AccountDeleteDialogComponent } from './account-delete-dialog.component'; describe('AccountDeleteDialogComponent', () => { - let component: AccountDeleteDialogComponent; - let fixture: ComponentFixture; - let dialog: MatDialog; + let component: AccountDeleteDialogComponent; + let fixture: ComponentFixture; + let dialog: MatDialog; - const mockDialogRef = { - close: () => { } - }; + const mockDialogRef = { + close: () => {}, + }; - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ - MatDialogModule, - MatSnackBarModule, - FormsModule, - MatRadioModule, - BrowserAnimationsModule, - Angulartics2Module.forRoot(), - AccountDeleteDialogComponent - ], - providers: [ - provideHttpClient(), - { provide: MAT_DIALOG_DATA, useValue: {} }, - { provide: MatDialogRef, useValue: mockDialogRef } - ] -}) - .compileComponents(); - }); + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + MatDialogModule, + MatSnackBarModule, + FormsModule, + MatRadioModule, + BrowserAnimationsModule, + Angulartics2Module.forRoot(), + AccountDeleteDialogComponent, + ], + providers: [ + provideHttpClient(), + { provide: MAT_DIALOG_DATA, useValue: {} }, + { provide: MatDialogRef, useValue: mockDialogRef }, + ], + }).compileComponents(); + }); - beforeEach(() => { - fixture = TestBed.createComponent(AccountDeleteDialogComponent); - dialog = TestBed.get(MatDialog); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + beforeEach(() => { + fixture = TestBed.createComponent(AccountDeleteDialogComponent); + dialog = TestBed.inject(MatDialog); + component = fixture.componentInstance; + fixture.detectChanges(); + }); - it('should create', () => { - expect(component).toBeTruthy(); - }); + it('should create', () => { + expect(component).toBeTruthy(); + }); - xit('should open dialog for delete account confirmation', () => { - component.reason = 'technical-issues'; - component.message = 'I cannot add connection'; + xit('should open dialog for delete account confirmation', () => { + component.reason = 'technical-issues'; + component.message = 'I cannot add connection'; - const fakeDeleteUserDialogOpen = spyOn(dialog, 'open'); - component.openDeleteConfirmation(); + const fakeDeleteUserDialogOpen = spyOn(dialog, 'open'); + component.openDeleteConfirmation(); - expect(fakeDeleteUserDialogOpen).toHaveBeenCalledOnceWith(AccountDeleteConfirmationComponent, { - width: '20em', - data: { - reason: 'technical-issues', - message: 'I cannot add connection' - } - }); - }); + expect(fakeDeleteUserDialogOpen).toHaveBeenCalledOnceWith(AccountDeleteConfirmationComponent, { + width: '20em', + data: { + reason: 'technical-issues', + message: 'I cannot add connection', + }, + }); + }); }); diff --git a/frontend/src/app/components/user-settings/user-settings.component.spec.ts b/frontend/src/app/components/user-settings/user-settings.component.spec.ts index 380d7f45c..ffcfa2ba0 100644 --- a/frontend/src/app/components/user-settings/user-settings.component.spec.ts +++ b/frontend/src/app/components/user-settings/user-settings.component.spec.ts @@ -1,102 +1,103 @@ +import { provideHttpClient } from '@angular/common/http'; +import { forwardRef } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms'; import { MatDialog, MatDialogModule } from '@angular/material/dialog'; - -import { AccountDeleteDialogComponent } from './account-delete-dialog/account-delete-dialog.component'; -import { Angulartics2Module } from 'angulartics2'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { CompanyMemberRole } from 'src/app/models/company'; import { MatInputModule } from '@angular/material/input'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { MatSnackBarModule } from '@angular/material/snack-bar'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; +import { Angulartics2Module } from 'angulartics2'; +import { of } from 'rxjs'; +import { CompanyMemberRole } from 'src/app/models/company'; import { SubscriptionPlans } from 'src/app/models/user'; import { UserService } from 'src/app/services/user.service'; +import { AccountDeleteDialogComponent } from './account-delete-dialog/account-delete-dialog.component'; import { UserSettingsComponent } from './user-settings.component'; -import { forwardRef } from '@angular/core'; -import { of } from 'rxjs'; -import { provideHttpClient } from '@angular/common/http'; describe('UserSettingsComponent', () => { - let component: UserSettingsComponent; - let fixture: ComponentFixture; - let userService: UserService; - let dialog: MatDialog; + let component: UserSettingsComponent; + let fixture: ComponentFixture; + let userService: UserService; + let dialog: MatDialog; - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ - RouterTestingModule, - FormsModule, - MatInputModule, - MatSlideToggleModule, - MatDialogModule, - MatSnackBarModule, - BrowserAnimationsModule, - Angulartics2Module.forRoot(), - UserSettingsComponent - ], - providers: [ - provideHttpClient(), - { - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => UserSettingsComponent), - multi: true - }, - ] - }).compileComponents(); - }); + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + RouterTestingModule, + FormsModule, + MatInputModule, + MatSlideToggleModule, + MatDialogModule, + MatSnackBarModule, + BrowserAnimationsModule, + Angulartics2Module.forRoot(), + UserSettingsComponent, + ], + providers: [ + provideHttpClient(), + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => UserSettingsComponent), + multi: true, + }, + ], + }).compileComponents(); + }); - beforeEach(() => { - fixture = TestBed.createComponent(UserSettingsComponent); - component = fixture.componentInstance; - userService = TestBed.inject(UserService); - dialog = TestBed.get(MatDialog); - fixture.detectChanges(); - }); + beforeEach(() => { + fixture = TestBed.createComponent(UserSettingsComponent); + component = fixture.componentInstance; + userService = TestBed.inject(UserService); + dialog = TestBed.inject(MatDialog); + fixture.detectChanges(); + }); - it('should create', () => { - expect(component).toBeTruthy(); - }); + it('should create', () => { + expect(component).toBeTruthy(); + }); - it('should request email change', () => { - const fakeRequestEmailChange = spyOn(userService, 'requestEmailChange').and.returnValue(of({message: 'requested'})); + it('should request email change', () => { + const fakeRequestEmailChange = spyOn(userService, 'requestEmailChange').and.returnValue( + of({ message: 'requested' }), + ); - component.changeEmail(); - expect(fakeRequestEmailChange).toHaveBeenCalled(); - }); + component.changeEmail(); + expect(fakeRequestEmailChange).toHaveBeenCalled(); + }); - xit('should open delete account dialog', () => { - const fakeDeleteAccountOpen = spyOn(dialog, 'open'); - component.currentUser = { - id: 'user-12345678', - "createdAt": "2021-10-01T13:43:02.034Z", - "isActive": true, - "email": "user@test.com", - "portal_link": "stripe.link", - "subscriptionLevel": SubscriptionPlans.free, - "is_2fa_enabled": false, - role: CompanyMemberRole.Member, - externalRegistrationProvider: null, - company: { - id: 'company_123', - } - } + xit('should open delete account dialog', () => { + const fakeDeleteAccountOpen = spyOn(dialog, 'open'); + component.currentUser = { + id: 'user-12345678', + createdAt: '2021-10-01T13:43:02.034Z', + isActive: true, + email: 'user@test.com', + portal_link: 'stripe.link', + subscriptionLevel: SubscriptionPlans.free, + is_2fa_enabled: false, + role: CompanyMemberRole.Member, + externalRegistrationProvider: null, + company: { + id: 'company_123', + }, + }; - component.confirmDeleteAccount(); - expect(fakeDeleteAccountOpen).toHaveBeenCalledOnceWith(AccountDeleteDialogComponent, { - width: '32em', - data: { - id: 'user-12345678', - "createdAt": "2021-10-01T13:43:02.034Z", - "isActive": true, - "email": "user@test.com", - "portal_link": "stripe.link", - "subscriptionLevel": SubscriptionPlans.free, - "is_2fa_enabled": false, - role: CompanyMemberRole.Member, - externalRegistrationProvider: null - } - }); - }); + component.confirmDeleteAccount(); + expect(fakeDeleteAccountOpen).toHaveBeenCalledOnceWith(AccountDeleteDialogComponent, { + width: '32em', + data: { + id: 'user-12345678', + createdAt: '2021-10-01T13:43:02.034Z', + isActive: true, + email: 'user@test.com', + portal_link: 'stripe.link', + subscriptionLevel: SubscriptionPlans.free, + is_2fa_enabled: false, + role: CompanyMemberRole.Member, + externalRegistrationProvider: null, + }, + }); + }); }); diff --git a/frontend/src/app/components/zapier/zapier.component.ts b/frontend/src/app/components/zapier/zapier.component.ts index aa042c74c..6540565cc 100644 --- a/frontend/src/app/components/zapier/zapier.component.ts +++ b/frontend/src/app/components/zapier/zapier.component.ts @@ -1,28 +1,23 @@ -import { CUSTOM_ELEMENTS_SCHEMA, Component } from '@angular/core'; +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; -import { User } from '@sentry/angular-ivy'; +import { User } from '@sentry/angular'; import { UserService } from 'src/app/services/user.service'; @Component({ - selector: 'app-zapier', - imports: [ - MatIconModule, - MatButtonModule - ], - templateUrl: './zapier.component.html', - styleUrl: './zapier.component.css', - schemas: [CUSTOM_ELEMENTS_SCHEMA], + selector: 'app-zapier', + imports: [MatIconModule, MatButtonModule], + templateUrl: './zapier.component.html', + styleUrl: './zapier.component.css', + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class ZapierComponent { - public currentUser: User; + public currentUser: User; - constructor( - private _userService: UserService - ) {} + constructor(private _userService: UserService) {} - ngOnInit(): void { - this._userService.cast.subscribe(user => this.currentUser = user); - } + ngOnInit(): void { + this._userService.cast.subscribe((user) => (this.currentUser = user)); + } } diff --git a/frontend/src/app/models/company.ts b/frontend/src/app/models/company.ts index d04ade042..5c3a8fd7b 100644 --- a/frontend/src/app/models/company.ts +++ b/frontend/src/app/models/company.ts @@ -1,80 +1,79 @@ -import { SubscriptionPlans, UserGroup } from "./user" - -import { User } from "@sentry/angular-ivy" +import { User } from '@sentry/angular'; +import { SubscriptionPlans, UserGroup } from './user'; export interface Address { - street: string, - number: string, - complement: string, - neighborhood: string, - city: string, - state: string, - country: string, - zipCode: string, + street: string; + number: string; + complement: string; + neighborhood: string; + city: string; + state: string; + country: string; + zipCode: string; } export interface CompanyConnection { - id: string, - createdAt: string, - updatedAt: string, - title: string, - author: User, - groups: UserGroup[], + id: string; + createdAt: string; + updatedAt: string; + title: string; + author: User; + groups: UserGroup[]; } export interface Company { - id: string, - additional_info?: string, - name: string, - address: Address | {}, - portal_link: string, - subscriptionLevel: SubscriptionPlans, - connections: CompanyConnection[], - invitations: CompanyMemberInvitation[], - is_payment_method_added: boolean, - show_test_connections: boolean + id: string; + additional_info?: string; + name: string; + address: Address | {}; + portal_link: string; + subscriptionLevel: SubscriptionPlans; + connections: CompanyConnection[]; + invitations: CompanyMemberInvitation[]; + is_payment_method_added: boolean; + show_test_connections: boolean; } export interface CompanyMember { - id: string, - isActive: boolean, - name: string, - email: string, - is_2fa_enabled: boolean, - role: CompanyMemberRole, - has_groups: boolean + id: string; + isActive: boolean; + name: string; + email: string; + is_2fa_enabled: boolean; + role: CompanyMemberRole; + has_groups: boolean; } export enum CompanyMemberRole { - CAO = 'ADMIN', - SystemAdmin = 'DB_ADMIN', - Member = 'USER', + CAO = 'ADMIN', + SystemAdmin = 'DB_ADMIN', + Member = 'USER', } export interface CompanyMemberInvitation { - id: string, - verification_string: string, - groupId: string, - inviterId: string, - invitedUserEmail: string, - role: CompanyMemberRole + id: string; + verification_string: string; + groupId: string; + inviterId: string; + invitedUserEmail: string; + role: CompanyMemberRole; } export interface SamlConfig { - id?: string; - name: string; - entryPoint: string; - issuer: string; - callbackUrl: string; - cert: string; - signatureAlgorithm: string; - digestAlgorithm: "sha256", - active: true, - authnResponseSignedValidation: boolean, - assertionsSignedValidation: boolean, - allowedDomains: string[], - displayName: string, - logoUrl: string, - expectedIssuer: string, - slug: string + id?: string; + name: string; + entryPoint: string; + issuer: string; + callbackUrl: string; + cert: string; + signatureAlgorithm: string; + digestAlgorithm: 'sha256'; + active: true; + authnResponseSignedValidation: boolean; + assertionsSignedValidation: boolean; + allowedDomains: string[]; + displayName: string; + logoUrl: string; + expectedIssuer: string; + slug: string; } diff --git a/frontend/src/app/services/auth.service.ts b/frontend/src/app/services/auth.service.ts index 61c0c3c95..daae9dca7 100644 --- a/frontend/src/app/services/auth.service.ts +++ b/frontend/src/app/services/auth.service.ts @@ -1,297 +1,331 @@ -import * as Sentry from "@sentry/angular-ivy"; - -import { AlertActionType, AlertType } from '../models/alert'; +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import * as Sentry from '@sentry/angular'; import { BehaviorSubject, EMPTY } from 'rxjs'; -import { ExistingAuthUser, NewAuthUser } from '../models/user'; import { catchError, map } from 'rxjs/operators'; - +import { environment } from 'src/environments/environment'; +import { AlertActionType, AlertType } from '../models/alert'; +import { ExistingAuthUser, NewAuthUser } from '../models/user'; import { ConfigurationService } from './configuration.service'; -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; import { NotificationsService } from './notifications.service'; -import { environment } from 'src/environments/environment'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class AuthService { - private auth = new BehaviorSubject(''); - public cast = this.auth.asObservable(); + private auth = new BehaviorSubject(''); + public cast = this.auth.asObservable(); - constructor( - private _http: HttpClient, - private _notifications: NotificationsService, - private _configuration: ConfigurationService - ) { } + constructor( + private _http: HttpClient, + private _notifications: NotificationsService, + private _configuration: ConfigurationService, + ) {} - signUpUser(userData: NewAuthUser) { - const config = this._configuration.getConfig(); - return this._http.post(config.saasURL + '/saas/user/register', userData) - .pipe( - map(res => { - if ((environment as any).saas) { - // @ts-expect-error - window.fbq?.('trackCustom', 'Signup'); - } - this._notifications.showSuccessSnackbar(`Confirmation email has been sent to you.`); - this.auth.next(res); - return res - }), - catchError((err) => { - console.log(err); - this._notifications.showAlert(AlertType.Error, {abstract: err.error.message, details: err.error.originalMessage}, [ - { - type: AlertActionType.Button, - caption: 'Dismiss', - action: () => this._notifications.dismissAlert() - } - ]); - return EMPTY; - }) - ) - } + signUpUser(userData: NewAuthUser) { + const config = this._configuration.getConfig(); + return this._http.post(config.saasURL + '/saas/user/register', userData).pipe( + map((res) => { + if ((environment as any).saas) { + // @ts-expect-error + window.fbq?.('trackCustom', 'Signup'); + } + this._notifications.showSuccessSnackbar(`Confirmation email has been sent to you.`); + this.auth.next(res); + return res; + }), + catchError((err) => { + console.log(err); + this._notifications.showAlert( + AlertType.Error, + { abstract: err.error.message, details: err.error.originalMessage }, + [ + { + type: AlertActionType.Button, + caption: 'Dismiss', + action: () => this._notifications.dismissAlert(), + }, + ], + ); + return EMPTY; + }), + ); + } - signUpWithGoogle(token: string) { - const config = this._configuration.getConfig(); + signUpWithGoogle(token: string) { + const config = this._configuration.getConfig(); - return this._http.post(config.saasURL + '/saas/user/google/register', {token}) - .pipe( - map(res => { - this.auth.next(res); - return res - }), - catchError((err) => { - console.log(err); - Sentry.captureException(err); - this._notifications.showAlert(AlertType.Error, {abstract: err.error.message, details: err.error.originalMessage}, [ - { - type: AlertActionType.Button, - caption: 'Dismiss', - action: (_id: number) => this._notifications.dismissAlert() - } - ]); - return EMPTY; - }) - ); - } + return this._http.post(config.saasURL + '/saas/user/google/register', { token }).pipe( + map((res) => { + this.auth.next(res); + return res; + }), + catchError((err) => { + console.log(err); + Sentry.captureException(err); + this._notifications.showAlert( + AlertType.Error, + { abstract: err.error.message, details: err.error.originalMessage }, + [ + { + type: AlertActionType.Button, + caption: 'Dismiss', + action: (_id: number) => this._notifications.dismissAlert(), + }, + ], + ); + return EMPTY; + }), + ); + } - signUpWithGithub() { - const config = this._configuration.getConfig(); + signUpWithGithub() { + const config = this._configuration.getConfig(); - location.assign(config.saasURL + '/saas/user/github/registration/request'); - } + location.assign(config.saasURL + '/saas/user/github/registration/request'); + } - loginUser(userData: ExistingAuthUser) { - if (userData.companyId === '') { - delete userData.companyId; - } - return this._http.post('/user/login', userData) - .pipe( - map(res => { - this.auth.next(res); - return res - }), - catchError((err) => { - console.log(err); - this._notifications.showAlert(AlertType.Error, {abstract: err.error.message || err.message, details: err.error.originalMessage}, [ - { - type: AlertActionType.Button, - caption: 'Dismiss', - action: () => this._notifications.dismissAlert() - } - ]); - return EMPTY; - }) - ); - } + loginUser(userData: ExistingAuthUser) { + if (userData.companyId === '') { + delete userData.companyId; + } + return this._http.post('/user/login', userData).pipe( + map((res) => { + this.auth.next(res); + return res; + }), + catchError((err) => { + console.log(err); + this._notifications.showAlert( + AlertType.Error, + { abstract: err.error.message || err.message, details: err.error.originalMessage }, + [ + { + type: AlertActionType.Button, + caption: 'Dismiss', + action: () => this._notifications.dismissAlert(), + }, + ], + ); + return EMPTY; + }), + ); + } - loginWith2FA(code: string) { - return this._http.post('/user/otp/login', {otpToken: code}) - .pipe( - map(res => { - this.auth.next(res); - return res - }), - catchError((err) => { - console.log(err); - this._notifications.showAlert(AlertType.Error, {abstract: err.error.message, details: err.error.originalMessage}, [ - { - type: AlertActionType.Button, - caption: 'Dismiss', - action: () => this._notifications.dismissAlert() - } - ]); - return EMPTY; - }) - ); - } + loginWith2FA(code: string) { + return this._http.post('/user/otp/login', { otpToken: code }).pipe( + map((res) => { + this.auth.next(res); + return res; + }), + catchError((err) => { + console.log(err); + this._notifications.showAlert( + AlertType.Error, + { abstract: err.error.message, details: err.error.originalMessage }, + [ + { + type: AlertActionType.Button, + caption: 'Dismiss', + action: () => this._notifications.dismissAlert(), + }, + ], + ); + return EMPTY; + }), + ); + } - loginWithGoogle(token: string) { - const config = this._configuration.getConfig(); + loginWithGoogle(token: string) { + const config = this._configuration.getConfig(); - return this._http.post(config.saasURL + '/saas/user/google/login', {token}) - .pipe( - map(res => { - this.auth.next(res); - return res - }), - catchError((err) => { - console.log(err); - Sentry.captureException(err); - this._notifications.showAlert(AlertType.Error, {abstract: err.error.message, details: err.error.originalMessage}, [ - { - type: AlertActionType.Button, - caption: 'Dismiss', - action: (_id: number) => this._notifications.dismissAlert() - } - ]); - return EMPTY; - }) - ); - } + return this._http.post(config.saasURL + '/saas/user/google/login', { token }).pipe( + map((res) => { + this.auth.next(res); + return res; + }), + catchError((err) => { + console.log(err); + Sentry.captureException(err); + this._notifications.showAlert( + AlertType.Error, + { abstract: err.error.message, details: err.error.originalMessage }, + [ + { + type: AlertActionType.Button, + caption: 'Dismiss', + action: (_id: number) => this._notifications.dismissAlert(), + }, + ], + ); + return EMPTY; + }), + ); + } - loginWithGithub() { - const config = this._configuration.getConfig(); + loginWithGithub() { + const config = this._configuration.getConfig(); - location.assign(config.saasURL + '/saas/user/github/login/request'); - } + location.assign(config.saasURL + '/saas/user/github/login/request'); + } - requestEmailVerifications() { - return this._http.get('/user/email/verify/request') - .pipe( - map(res => { - this._notifications.showSuccessSnackbar('Confirmation email has been sent.'); - return res - }), - catchError((err) => { - console.log(err); - this._notifications.showAlert(AlertType.Error, {abstract: err.error.message, details: err.error.originalMessage}, [ - { - type: AlertActionType.Button, - caption: 'Dismiss', - action: () => this._notifications.dismissAlert() - } - ]); - return EMPTY; - }) - ); - } + requestEmailVerifications() { + return this._http.get('/user/email/verify/request').pipe( + map((res) => { + this._notifications.showSuccessSnackbar('Confirmation email has been sent.'); + return res; + }), + catchError((err) => { + console.log(err); + this._notifications.showAlert( + AlertType.Error, + { abstract: err.error.message, details: err.error.originalMessage }, + [ + { + type: AlertActionType.Button, + caption: 'Dismiss', + action: () => this._notifications.dismissAlert(), + }, + ], + ); + return EMPTY; + }), + ); + } - verifyEmail(token: string) { - return this._http.get(`/user/email/verify/${token}`) - .pipe( - map(res => { - this._notifications.showSuccessSnackbar('Your email is verified.'); - this.auth.next(res); - return res - }), - catchError((err) => { - console.log(err); - this._notifications.showAlert(AlertType.Error, {abstract: err.error.message, details: err.error.originalMessage}, [ - { - type: AlertActionType.Button, - caption: 'Dismiss', - action: () => this._notifications.dismissAlert() - } - ]); - return EMPTY; - }) - ); - } + verifyEmail(token: string) { + return this._http.get(`/user/email/verify/${token}`).pipe( + map((res) => { + this._notifications.showSuccessSnackbar('Your email is verified.'); + this.auth.next(res); + return res; + }), + catchError((err) => { + console.log(err); + this._notifications.showAlert( + AlertType.Error, + { abstract: err.error.message, details: err.error.originalMessage }, + [ + { + type: AlertActionType.Button, + caption: 'Dismiss', + action: () => this._notifications.dismissAlert(), + }, + ], + ); + return EMPTY; + }), + ); + } - fetchUserCompanies(email: string) { - return this._http.get(`/company/my/email/${email}`) - .pipe( - map(res => res), - catchError((err) => { - console.log(err); - this._notifications.showAlert(AlertType.Error, {abstract: err.error.message, details: err.error.originalMessage}, [ - { - type: AlertActionType.Button, - caption: 'Dismiss', - action: () => this._notifications.dismissAlert() - } - ]); - return EMPTY; - }) - ); - } + fetchUserCompanies(email: string) { + return this._http.get(`/company/my/email/${email}`).pipe( + map((res) => res), + catchError((err) => { + console.log(err); + this._notifications.showAlert( + AlertType.Error, + { abstract: err.error.message, details: err.error.originalMessage }, + [ + { + type: AlertActionType.Button, + caption: 'Dismiss', + action: () => this._notifications.dismissAlert(), + }, + ], + ); + return EMPTY; + }), + ); + } - checkInvitationAvailability(token: string) { - return this._http.get(`/company/invite/verify/${token}`) - .pipe( - map(res => {return res}), - catchError((err) => { - console.log(err); - this._notifications.showAlert(AlertType.Error, {abstract: err.error.message, details: err.error.originalMessage}, [ - { - type: AlertActionType.Button, - caption: 'Dismiss', - action: () => this._notifications.dismissAlert() - } - ]); - return EMPTY; - }) - ); - }; + checkInvitationAvailability(token: string) { + return this._http.get(`/company/invite/verify/${token}`).pipe( + map((res) => { + return res; + }), + catchError((err) => { + console.log(err); + this._notifications.showAlert( + AlertType.Error, + { abstract: err.error.message, details: err.error.originalMessage }, + [ + { + type: AlertActionType.Button, + caption: 'Dismiss', + action: () => this._notifications.dismissAlert(), + }, + ], + ); + return EMPTY; + }), + ); + } - acceptCompanyInvitation(token: string, password: string, userName: string) { - return this._http.post(`/company/invite/verify/${token}`, { - password, - userName - }) - .pipe( - map(res => { - this.auth.next(res); - return res; - }), - catchError((err) => { - console.log(err); - this._notifications.showAlert(AlertType.Error, {abstract: err.error.message, details: err.error.originalMessage}, [ - { - type: AlertActionType.Button, - caption: 'Dismiss', - action: (_id: number) => this._notifications.dismissAlert() - } - ]); - return EMPTY; - }) - ); - } + acceptCompanyInvitation(token: string, password: string, userName: string) { + return this._http + .post(`/company/invite/verify/${token}`, { + password, + userName, + }) + .pipe( + map((res) => { + this.auth.next(res); + return res; + }), + catchError((err) => { + console.log(err); + this._notifications.showAlert( + AlertType.Error, + { abstract: err.error.message, details: err.error.originalMessage }, + [ + { + type: AlertActionType.Button, + caption: 'Dismiss', + action: (_id: number) => this._notifications.dismissAlert(), + }, + ], + ); + return EMPTY; + }), + ); + } - logOutUser() { - return this._http.post('/user/logout', undefined) - .pipe( - map(() => { - this._notifications.showSuccessSnackbar('User is logged out.'); - }), - catchError((err) => { - console.log(err); - this._notifications.showErrorSnackbar(err.error.message); - return EMPTY; - }) - ); - } + logOutUser() { + return this._http.post('/user/logout', undefined).pipe( + map(() => { + this._notifications.showSuccessSnackbar('User is logged out.'); + }), + catchError((err) => { + console.log(err); + this._notifications.showErrorSnackbar(err.error.message); + return EMPTY; + }), + ); + } - loginToDemoAccount() { - const config = this._configuration.getConfig(); - return this._http.post(config.saasURL + '/saas/user/demo/register', undefined) - .pipe( - map(res => { - this.auth.next(res); - return res - }), - catchError((err) => { - console.log(err); - this._notifications.showAlert(AlertType.Error, {abstract: err.error.message || err.message, details: err.error.originalMessage}, [ - { - type: AlertActionType.Button, - caption: 'Dismiss', - action: () => this._notifications.dismissAlert() - } - ]); - return EMPTY; - }) - ); - } + loginToDemoAccount() { + const config = this._configuration.getConfig(); + return this._http.post(config.saasURL + '/saas/user/demo/register', undefined).pipe( + map((res) => { + this.auth.next(res); + return res; + }), + catchError((err) => { + console.log(err); + this._notifications.showAlert( + AlertType.Error, + { abstract: err.error.message || err.message, details: err.error.originalMessage }, + [ + { + type: AlertActionType.Button, + caption: 'Dismiss', + action: () => this._notifications.dismissAlert(), + }, + ], + ); + return EMPTY; + }), + ); + } } diff --git a/frontend/src/app/services/master-password.service.spec.ts b/frontend/src/app/services/master-password.service.spec.ts index ea6ecdd9b..9eaeaa2d6 100644 --- a/frontend/src/app/services/master-password.service.spec.ts +++ b/frontend/src/app/services/master-password.service.spec.ts @@ -5,62 +5,62 @@ import { MasterPasswordDialogComponent } from '../components/master-password-dia import { MasterPasswordService } from './master-password.service'; describe('MasterPasswordService', () => { - let service: MasterPasswordService; - let dialog: MatDialog; - let mockLocalStorage; + let service: MasterPasswordService; + let dialog: MatDialog; + let mockLocalStorage; - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ MatDialogModule ] - }); + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [MatDialogModule], + }); - let store = {}; - mockLocalStorage = { - getItem: (key: string): string => { - return key in store ? store[key] : null; - }, - setItem: (key: string, value: string) => { - store[key] = `${value}`; - }, - removeItem: (key: string) => { - delete store[key]; - }, - clear: () => { - store = {}; - } - }; + let store = {}; + mockLocalStorage = { + getItem: (key: string): string => { + return key in store ? store[key] : null; + }, + setItem: (key: string, value: string) => { + store[key] = `${value}`; + }, + removeItem: (key: string) => { + delete store[key]; + }, + clear: () => { + store = {}; + }, + }; - service = TestBed.get(MasterPasswordService); - dialog = TestBed.get(MatDialog); - }); + service = TestBed.inject(MasterPasswordService); + dialog = TestBed.inject(MatDialog); + }); - it('should be created', () => { - expect(service).toBeTruthy(); - }); + it('should be created', () => { + expect(service).toBeTruthy(); + }); - it('should show Master password dialog', () => { - const fakeDialog = spyOn(dialog, 'open'); - service.showMasterPasswordDialog(); - // !!!!!!! MasterPasswordDialogComponent should be mocked !!!!!!!!!! - expect(fakeDialog).toHaveBeenCalledOnceWith(MasterPasswordDialogComponent, { - width: '24em', - disableClose: true - }); - }); + it('should show Master password dialog', () => { + const fakeDialog = spyOn(dialog, 'open'); + service.showMasterPasswordDialog(); + // !!!!!!! MasterPasswordDialogComponent should be mocked !!!!!!!!!! + expect(fakeDialog).toHaveBeenCalledOnceWith(MasterPasswordDialogComponent, { + width: '24em', + disableClose: true, + }); + }); - it('should write master key in localstorage if masterEncryption is turned on', () => { - spyOn(localStorage, 'setItem').and.callFake(mockLocalStorage.setItem); + it('should write master key in localstorage if masterEncryption is turned on', () => { + spyOn(localStorage, 'setItem').and.callFake(mockLocalStorage.setItem); - service.checkMasterPassword(true, '12345678', 'abcd-0987654321'); + service.checkMasterPassword(true, '12345678', 'abcd-0987654321'); - expect(localStorage.setItem).toHaveBeenCalledOnceWith('12345678__masterKey', 'abcd-0987654321'); - }) + expect(localStorage.setItem).toHaveBeenCalledOnceWith('12345678__masterKey', 'abcd-0987654321'); + }); - it('should remove master key in localstorage if masterEncryption is turned off', () => { - spyOn(localStorage, 'removeItem').and.callFake(mockLocalStorage.removeItem); + it('should remove master key in localstorage if masterEncryption is turned off', () => { + spyOn(localStorage, 'removeItem').and.callFake(mockLocalStorage.removeItem); - service.checkMasterPassword(false, '12345678', 'abcd-0987654321'); + service.checkMasterPassword(false, '12345678', 'abcd-0987654321'); - expect(localStorage.removeItem).toHaveBeenCalledOnceWith('12345678__masterKey'); - }) + expect(localStorage.removeItem).toHaveBeenCalledOnceWith('12345678__masterKey'); + }); }); diff --git a/frontend/src/custom-theme.scss b/frontend/src/custom-theme.scss index 697e8e938..53746aae6 100644 --- a/frontend/src/custom-theme.scss +++ b/frontend/src/custom-theme.scss @@ -2,7 +2,8 @@ @use 'generate-material-palette' as palette; // @import '@angular/material/theming'; -@include mat.core(); +@include mat.elevation-classes(); +@include mat.app-background(); $md-app-primary-color: palette.createpalette('primaryPalette'); $md-app-accented-color: palette.createpalette('accentedPalette'); @@ -18,11 +19,11 @@ $custom-palette-white: mat.m2-define-palette($md-app-white-color); $custom-palette-warn-dark: mat.m2-define-palette($md-app-warn-dark-color); html { - --mdc-shape-small: 0px !important; - --mdc-filled-button-container-shape: 4px; - --mdc-outlined-button-container-shape: 4px; - --mdc-text-button-container-shape: 4px; - --mdc-outlined-text-field-container-shape: 4px !important; + --mat-shape-small: 0px !important; + --mat-button-filled-container-shape: 4px; + --mat-button-outlined-container-shape: 4px; + --mat-button-text-container-shape: 4px; + --mat-form-field-outlined-container-shape: 4px !important; } @media (prefers-color-scheme: dark) { @@ -39,7 +40,7 @@ html { } // .main-menu-container_native .mat-mdc-unelevated-button.mat-accent { -// --mdc-filled-button-label-text-color: #fff !important; +// --mat-button-filled-label-text-color: #fff !important; // } @media (prefers-color-scheme: light) { @@ -49,47 +50,47 @@ html { } .main-menu-container_native .mat-mdc-unelevated-button.mat-accent { - --mdc-filled-button-label-text-color: #fff !important; + --mat-button-filled-label-text-color: #fff !important; } body .mat-mdc-flat-button.mat-primary, body .mat-mdc-unelevated-button.mat-primary { --mat-mdc-button-persistent-ripple-color: var(--color-primaryPalette-500-contrast) !important; - --mdc-protected-button-label-text-color: var(--color-primaryPalette-500-contrast) !important; - --mdc-filled-button-label-text-color: var(--color-primaryPalette-500-contrast) !important; + --mat-button-protected-label-text-color: var(--color-primaryPalette-500-contrast) !important; + --mat-button-filled-label-text-color: var(--color-primaryPalette-500-contrast) !important; --mat-mdc-button-ripple-color: rgba(255, 255, 255, 0.1) !important; } body .mat-mdc-flat-button.mat-accent, body .mat-mdc-unelevated-button.mat-accent { --mat-mdc-button-persistent-ripple-color: var(--color-accentedPalette-500-contrast) !important; - --mdc-protected-button-label-text-color: var(--color-accentedPalette-500-contrast) !important; - --mdc-filled-button-label-text-color: var(--color-accentedPalette-500-contrast) !important; + --mat-button-protected-label-text-color: var(--color-accentedPalette-500-contrast) !important; + --mat-button-filled-label-text-color: var(--color-accentedPalette-500-contrast) !important; --mat-mdc-button-ripple-color: rgba(255, 255, 255, 0.1) !important; } body .mat-mdc-flat-button.mat-warn, body .mat-mdc-unelevated-button.mat-warn { --mat-mdc-button-persistent-ripple-color: var(--color-warnPalette-500-contrast) !important; - --mdc-protected-button-label-text-color: var(--color-warnPalette-500-contrast) !important; - --mdc-filled-button-label-text-color: var(--color-warnPalette-500-contrast) !important; + --mat-button-protected-label-text-color: var(--color-warnPalette-500-contrast) !important; + --mat-button-filled-label-text-color: var(--color-warnPalette-500-contrast) !important; --mat-mdc-button-ripple-color: rgba(255, 255, 255, 0.1) !important; } } // @media (prefers-color-scheme: dark) { // body .mat-mdc-outlined-button:not(:disabled) { -// --mdc-outlined-button-label-text-color: #fff !important; +// --mat-button-outlined-label-text-color: #fff !important; // } // // body .mat-mdc-button:not(:disabled) { -// // --mdc-text-button-label-text-color: #fff !important; +// // --mat-button-text-label-text-color: #fff !important; // // } // } // .mat-mdc-checkbox .mdc-form-field { -// --mdc-checkbox-selected-checkmark-color: var(--color-accentedPalette-500-contrast) !important; +// --mat-checkbox-selected-checkmark-color: var(--color-accentedPalette-500-contrast) !important; // } .mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background .mdc-checkbox__checkmark { - --mdc-checkbox-selected-checkmark-color: var(--color-accentedPalette-500-contrast) !important; + --mat-checkbox-selected-checkmark-color: var(--color-accentedPalette-500-contrast) !important; } .mat-elevation-z4 { diff --git a/frontend/src/main.ts b/frontend/src/main.ts index f11a21dc7..b7d358a21 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -1,120 +1,142 @@ -import * as Sentry from "@sentry/angular-ivy"; - +import { ClipboardModule } from '@angular/cdk/clipboard'; +import { DragDropModule } from '@angular/cdk/drag-drop'; +import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; import { APP_INITIALIZER, ErrorHandler, enableProdMode, importProvidersFrom } from '@angular/core'; -import { BrowserModule, Title, bootstrapApplication } from "@angular/platform-browser"; -import { FormsModule, ReactiveFormsModule } from "@angular/forms"; -import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from "@angular/common/http"; -import { IColorConfig, NgxThemeModule } from "@brumeilde/ngx-theme"; -import { MarkdownModule, provideMarkdown } from "ngx-markdown"; -import { Router, RouterModule } from "@angular/router"; - -import { Angulartics2Module } from "angulartics2"; -import { AppComponent } from "./app/app.component"; -import { AppRoutingModule } from "./app/app-routing.module"; -import { ClipboardModule } from "@angular/cdk/clipboard"; -import { provideCodeEditor } from "@ngstack/code-editor"; -import { ConfigModule } from "./app/modules/config.module"; -import { ConnectionsService } from "./app/services/connections.service"; -import { CookieService } from "ngx-cookie-service"; -import { DragDropModule } from "@angular/cdk/drag-drop"; -import { DynamicModule } from "ng-dynamic-component"; -import { EncodeUrlParamsSafelyInterceptor } from "./app/services/url-params.interceptor"; -import { NgxStripeModule } from "ngx-stripe"; -import { NotificationsService } from "./app/services/notifications.service"; -import { TablesService } from "./app/services/tables.service"; -import { TokenInterceptor } from "./app/services/token.interceptor"; -import { UsersService } from "./app/services/users.service"; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { BrowserModule, bootstrapApplication, Title } from '@angular/platform-browser'; +import { provideAnimations } from '@angular/platform-browser/animations'; +import { Router, RouterModule } from '@angular/router'; +import { IColorConfig, NgxThemeModule } from '@brumeilde/ngx-theme'; +import { provideCodeEditor } from '@ngstack/code-editor'; +import * as Sentry from '@sentry/angular'; +import { Angulartics2Module } from 'angulartics2'; +import { DynamicModule } from 'ng-dynamic-component'; +import { CookieService } from 'ngx-cookie-service'; +import { MarkdownModule, provideMarkdown } from 'ngx-markdown'; +import { NgxStripeModule } from 'ngx-stripe'; +import { AppComponent } from './app/app.component'; +import { AppRoutingModule } from './app/app-routing.module'; +import { ConfigModule } from './app/modules/config.module'; +import { ConnectionsService } from './app/services/connections.service'; +import { NotificationsService } from './app/services/notifications.service'; +import { TablesService } from './app/services/tables.service'; +import { TokenInterceptor } from './app/services/token.interceptor'; +import { EncodeUrlParamsSafelyInterceptor } from './app/services/url-params.interceptor'; +import { UsersService } from './app/services/users.service'; import { environment } from './environments/environment'; -import { provideAnimations } from "@angular/platform-browser/animations"; -const saasExtraProviders = (environment as any).saas ? [ - { - provide: Sentry.TraceService, - deps: [Router], - }, - { - provide: ErrorHandler, - useValue: Sentry.createErrorHandler({ - showDialog: true, - }), - }, -] : []; +const saasExtraProviders = (environment as any).saas + ? [ + { + provide: Sentry.TraceService, + deps: [Router], + }, + { + provide: ErrorHandler, + useValue: Sentry.createErrorHandler({ + showDialog: true, + }), + }, + ] + : []; const colorConfig: IColorConfig = { - palettes: { primaryPalette: '#212121', accentedPalette: '#C177FC', warnPalette: '#B71C1C', whitePalette: '#FFFFFF', warnDarkPalette: '#E53935' }, - simpleColors: { myColorName: '#2e959a' }, + palettes: { + primaryPalette: '#212121', + accentedPalette: '#C177FC', + warnPalette: '#B71C1C', + whitePalette: '#FFFFFF', + warnDarkPalette: '#E53935', + }, + simpleColors: { myColorName: '#2e959a' }, +}; +type Palettes = { + primaryPalette: string; + accentedPalette: string; + warnPalette: string; + whitePalette: string; + warnDarkPalette: string; }; -type Palettes = { primaryPalette: string, accentedPalette: string, warnPalette: string, whitePalette: string, warnDarkPalette: string }; type Colors = { myColorName: string }; -const stripeKey = location.host === environment.stagingHost ? 'pk_test_51JM8FBFtHdda1TsBTjVNBFMIAA8cXLNWTmZCF22FCS5swdJIFqMk82ZEeZpvTys7oxlDekdcYIGaQ5MEFz6lWa2s000r6RziCg' : 'pk_live_51JM8FBFtHdda1TsBR7nieMFVFigZAUXbPhQTNvaSyLynIW1lbfzO6rfqqIUn0JAGJRq9mrwKwrVCsDDFOs84M7pE006xDqNgHk' - +const stripeKey = + location.host === environment.stagingHost + ? 'pk_test_51JM8FBFtHdda1TsBTjVNBFMIAA8cXLNWTmZCF22FCS5swdJIFqMk82ZEeZpvTys7oxlDekdcYIGaQ5MEFz6lWa2s000r6RziCg' + : 'pk_live_51JM8FBFtHdda1TsBR7nieMFVFigZAUXbPhQTNvaSyLynIW1lbfzO6rfqqIUn0JAGJRq9mrwKwrVCsDDFOs84M7pE006xDqNgHk'; if (environment.production) { - enableProdMode(); + enableProdMode(); } if ((environment as any).saas) { - Sentry.init({ - dsn: "https://4d774c4c2c8a8f733cb4d43599cc0dc6@o4506084700389376.ingest.sentry.io/4506084702486528", - integrations: [ - new Sentry.BrowserTracing({ - // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled - tracePropagationTargets: ["localhost", /^https:\/\/app\.rocketadmin\.com\/api/], - routingInstrumentation: Sentry.routingInstrumentation, - }), - ], - // Performance Monitoring - tracesSampleRate: 1.0, // Capture 100% of the transactions - // Session Replay - replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production. - replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. - }); + Sentry.init({ + dsn: 'https://4d774c4c2c8a8f733cb4d43599cc0dc6@o4506084700389376.ingest.sentry.io/4506084702486528', + integrations: [Sentry.browserTracingIntegration()], + // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled + tracePropagationTargets: ['localhost', /^https:\/\/app\.rocketadmin\.com\/api/], + // Performance Monitoring + tracesSampleRate: 1.0, // Capture 100% of the transactions + // Session Replay + replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production. + replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. + }); } bootstrapApplication(AppComponent, { - providers: [ - importProvidersFrom(BrowserModule, AppRoutingModule, FormsModule, ReactiveFormsModule, RouterModule, DynamicModule, Angulartics2Module.forRoot(), ClipboardModule, DragDropModule, MarkdownModule.forRoot(), - // ...saasExtraModules, - NgxThemeModule.forRoot(colorConfig, { - frameworks: ['material'], // optional, default : ['tailwind', 'material'] - }), NgxStripeModule.forRoot(stripeKey), ConfigModule.buildForConfigUrl('/config.json')), - provideCodeEditor({ - baseUrl: 'assets/monaco' - }), - ConnectionsService, - UsersService, - NotificationsService, - TablesService, - CookieService, - provideMarkdown(), - Title, - { - provide: HTTP_INTERCEPTORS, - useClass: TokenInterceptor, - multi: true - }, - { - provide: HTTP_INTERCEPTORS, - useClass: EncodeUrlParamsSafelyInterceptor, - multi: true - }, - { - provide: APP_INITIALIZER, - useFactory: () => () => { }, - deps: (environment as any).saas ? [Sentry.TraceService] : [], - multi: true, - }, - { - provide: 'COLOR_CONFIG', - useValue: colorConfig - }, - { - provide: 'THEME_OPTIONS', - useValue: { frameworks: ['material'] } - }, - ...saasExtraProviders, - provideHttpClient(withInterceptorsFromDi()), - provideAnimations() - ] -}) - .catch(err => console.error(err)); + providers: [ + importProvidersFrom( + BrowserModule, + AppRoutingModule, + FormsModule, + ReactiveFormsModule, + RouterModule, + DynamicModule, + Angulartics2Module.forRoot(), + ClipboardModule, + DragDropModule, + MarkdownModule.forRoot(), + // ...saasExtraModules, + NgxThemeModule.forRoot(colorConfig, { + frameworks: ['material'], // optional, default : ['tailwind', 'material'] + }), + NgxStripeModule.forRoot(stripeKey), + ConfigModule.buildForConfigUrl('/config.json'), + ), + provideCodeEditor({ + baseUrl: 'assets/monaco', + }), + ConnectionsService, + UsersService, + NotificationsService, + TablesService, + CookieService, + provideMarkdown(), + Title, + { + provide: HTTP_INTERCEPTORS, + useClass: TokenInterceptor, + multi: true, + }, + { + provide: HTTP_INTERCEPTORS, + useClass: EncodeUrlParamsSafelyInterceptor, + multi: true, + }, + { + provide: APP_INITIALIZER, + useFactory: () => () => {}, + deps: (environment as any).saas ? [Sentry.TraceService] : [], + multi: true, + }, + { + provide: 'COLOR_CONFIG', + useValue: colorConfig, + }, + { + provide: 'THEME_OPTIONS', + useValue: { frameworks: ['material'] }, + }, + ...saasExtraProviders, + provideHttpClient(withInterceptorsFromDi()), + provideAnimations(), + ], +}).catch((err) => console.error(err)); diff --git a/frontend/src/types/globals.d.ts b/frontend/src/types/globals.d.ts new file mode 100644 index 000000000..f65bdd9e0 --- /dev/null +++ b/frontend/src/types/globals.d.ts @@ -0,0 +1,9 @@ +declare global { + interface Window { + Intercom?: (command: string, options?: Record) => void; + intercomSettings?: Record; + hj?: (command: string, userId: string | number, options?: Record) => void; + } +} + +export {}; diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 85ae6e11f..925e6b187 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -1,29 +1,23 @@ { - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "esModuleInterop": true, - "experimentalDecorators": true, - "module": "esnext", - "moduleResolution": "node", - "importHelpers": true, - "target": "es2022", - "resolveJsonModule": true, - "typeRoots": [ - "node_modules/@types" - ], - "lib": [ - "es2023", - "dom" - ], - "skipLibCheck": true - }, - "angularCompilerOptions": { - "fullTemplateTypeCheck": true, - "strictInjectionParameters": true - } + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "esModuleInterop": true, + "experimentalDecorators": true, + "module": "esnext", + "moduleResolution": "bundler", + "importHelpers": true, + "target": "es2022", + "resolveJsonModule": true, + "typeRoots": ["node_modules/@types"], + "lib": ["es2023", "dom"], + "skipLibCheck": true + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true + } } diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 70a0ea860..c0728fbd2 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -5,6 +5,160 @@ __metadata: version: 6 cacheKey: 8 +"@algolia/abtesting@npm:1.1.0": + version: 1.1.0 + resolution: "@algolia/abtesting@npm:1.1.0" + dependencies: + "@algolia/client-common": 5.35.0 + "@algolia/requester-browser-xhr": 5.35.0 + "@algolia/requester-fetch": 5.35.0 + "@algolia/requester-node-http": 5.35.0 + checksum: 9a90853dc47c0661c8e656de882debd5ea6385a3e7075b8503b8a32f5a0e07d2c4a53418d0a99acf65c1b843e5cddd1a414a9a5789adf87d2729dbfaf52e0301 + languageName: node + linkType: hard + +"@algolia/client-abtesting@npm:5.35.0": + version: 5.35.0 + resolution: "@algolia/client-abtesting@npm:5.35.0" + dependencies: + "@algolia/client-common": 5.35.0 + "@algolia/requester-browser-xhr": 5.35.0 + "@algolia/requester-fetch": 5.35.0 + "@algolia/requester-node-http": 5.35.0 + checksum: eda3764df732480948cbc36cc20f6dbee23c182226c543b090187e90992c7538b85c92927c3715a7993e475580f8bf4fd52bf8dbd67025045e54e84c1fb7c1b7 + languageName: node + linkType: hard + +"@algolia/client-analytics@npm:5.35.0": + version: 5.35.0 + resolution: "@algolia/client-analytics@npm:5.35.0" + dependencies: + "@algolia/client-common": 5.35.0 + "@algolia/requester-browser-xhr": 5.35.0 + "@algolia/requester-fetch": 5.35.0 + "@algolia/requester-node-http": 5.35.0 + checksum: 2596ef61517658d60f1acab8ff1d690ba95094ad83db9a15ae70212e559086cf6171caa2215124b55875725233f248a6909ba07696062b5f9a69e364305a55f7 + languageName: node + linkType: hard + +"@algolia/client-common@npm:5.35.0": + version: 5.35.0 + resolution: "@algolia/client-common@npm:5.35.0" + checksum: 4a1e00dd24db8a97a67c644a146d80429b05cdc9f4c2b0fab7c898c4d2bbf635fab88b8bdb0b3068195cd3e5ce397a079783e9b613dced4d081dd20e70de8847 + languageName: node + linkType: hard + +"@algolia/client-insights@npm:5.35.0": + version: 5.35.0 + resolution: "@algolia/client-insights@npm:5.35.0" + dependencies: + "@algolia/client-common": 5.35.0 + "@algolia/requester-browser-xhr": 5.35.0 + "@algolia/requester-fetch": 5.35.0 + "@algolia/requester-node-http": 5.35.0 + checksum: cde81c35fc66ca233296a472ebcec2912fdb19de0b4320ec06f2165695752ff3b49f0e5bc805413602e1a7d9de672325d8b732a7c6687ddf235813d366d683e3 + languageName: node + linkType: hard + +"@algolia/client-personalization@npm:5.35.0": + version: 5.35.0 + resolution: "@algolia/client-personalization@npm:5.35.0" + dependencies: + "@algolia/client-common": 5.35.0 + "@algolia/requester-browser-xhr": 5.35.0 + "@algolia/requester-fetch": 5.35.0 + "@algolia/requester-node-http": 5.35.0 + checksum: d4d0b962d6f113f350698f7ab5ee37fba6c198d37877bcd2d7b6bd5502e6783f0e52b5e61f9abe903ab5af99ad569b6ce971c5bbe7d62a906246c66e5c3353a1 + languageName: node + linkType: hard + +"@algolia/client-query-suggestions@npm:5.35.0": + version: 5.35.0 + resolution: "@algolia/client-query-suggestions@npm:5.35.0" + dependencies: + "@algolia/client-common": 5.35.0 + "@algolia/requester-browser-xhr": 5.35.0 + "@algolia/requester-fetch": 5.35.0 + "@algolia/requester-node-http": 5.35.0 + checksum: 8e686030e657ab04155763662df57a9d7325a7fea95caa339cd9f91a133e91eabe200fae926ede6fa37f90015ccfd2bde3e3dc3b438384e914eb7c0277520539 + languageName: node + linkType: hard + +"@algolia/client-search@npm:5.35.0": + version: 5.35.0 + resolution: "@algolia/client-search@npm:5.35.0" + dependencies: + "@algolia/client-common": 5.35.0 + "@algolia/requester-browser-xhr": 5.35.0 + "@algolia/requester-fetch": 5.35.0 + "@algolia/requester-node-http": 5.35.0 + checksum: 50238dfd1ac6340f1bbc004d9ac83fcf92472b7c28adee1a31f9abb2cc30533e60edb5a1cb675bb46df2b706339a478299c41d1b764297f7654ad8de4e69a984 + languageName: node + linkType: hard + +"@algolia/ingestion@npm:1.35.0": + version: 1.35.0 + resolution: "@algolia/ingestion@npm:1.35.0" + dependencies: + "@algolia/client-common": 5.35.0 + "@algolia/requester-browser-xhr": 5.35.0 + "@algolia/requester-fetch": 5.35.0 + "@algolia/requester-node-http": 5.35.0 + checksum: 6c31fada6c332b2daa056fdcb7102f2a87c4f152e4f49abee5f9083856b09d29e19a395acd8e4df353ecede47c4bd55d9fa25bc9c10d426aa9fa7e0dfb187c85 + languageName: node + linkType: hard + +"@algolia/monitoring@npm:1.35.0": + version: 1.35.0 + resolution: "@algolia/monitoring@npm:1.35.0" + dependencies: + "@algolia/client-common": 5.35.0 + "@algolia/requester-browser-xhr": 5.35.0 + "@algolia/requester-fetch": 5.35.0 + "@algolia/requester-node-http": 5.35.0 + checksum: b1e71dee4618ea5aac6af3ae24974da52bf15a19c42f104a466cc0029f467e66d7bbc310903d968ec92b4155a77c49555ed513532c0f4c9e70970d98c0f6193c + languageName: node + linkType: hard + +"@algolia/recommend@npm:5.35.0": + version: 5.35.0 + resolution: "@algolia/recommend@npm:5.35.0" + dependencies: + "@algolia/client-common": 5.35.0 + "@algolia/requester-browser-xhr": 5.35.0 + "@algolia/requester-fetch": 5.35.0 + "@algolia/requester-node-http": 5.35.0 + checksum: 0d3e6c1eaf2f59efebdc7eddb8633f5f0281c1e5660db1f87809b038b6edfbbf020c212fbf42b578f4233d38f921dc6762510fe6ca8ea87d81864de2e05b2b01 + languageName: node + linkType: hard + +"@algolia/requester-browser-xhr@npm:5.35.0": + version: 5.35.0 + resolution: "@algolia/requester-browser-xhr@npm:5.35.0" + dependencies: + "@algolia/client-common": 5.35.0 + checksum: fe5e6c022577fc8267c961814b5b90550a7f115da69ad2ec37855c5f20639e843b8faeeda4ac9f50fc4bd1a414e97c90fd77617d54eaaba9ca11ebbf1fd31c0a + languageName: node + linkType: hard + +"@algolia/requester-fetch@npm:5.35.0": + version: 5.35.0 + resolution: "@algolia/requester-fetch@npm:5.35.0" + dependencies: + "@algolia/client-common": 5.35.0 + checksum: cf5fbf4a13e70dd4fa3aaccecb10d354fc1de34f8f4d45d2f1885c7ecb8c7a2fc23d499e7f9fc7f34d0b2016a4e5707bed60fe760d2d1f8dc4cfa8ec39506582 + languageName: node + linkType: hard + +"@algolia/requester-node-http@npm:5.35.0": + version: 5.35.0 + resolution: "@algolia/requester-node-http@npm:5.35.0" + dependencies: + "@algolia/client-common": 5.35.0 + checksum: d2fac5cc9bb69f35fb5439f46a1efc9ad2953f97562fd9d1b843f3ef301b421ce1d3a83ea3e70c43dd161e124df4449a1ea9be399c9ec5549424c48de3f53367 + languageName: node + linkType: hard + "@alloc/quick-lru@npm:^5.2.0": version: 5.2.0 resolution: "@alloc/quick-lru@npm:5.2.0" @@ -64,112 +218,102 @@ __metadata: languageName: node linkType: hard -"@angular-devkit/architect@npm:0.1900.5": - version: 0.1900.5 - resolution: "@angular-devkit/architect@npm:0.1900.5" +"@angular-devkit/architect@npm:0.2003.14": + version: 0.2003.14 + resolution: "@angular-devkit/architect@npm:0.2003.14" dependencies: - "@angular-devkit/core": 19.0.5 - rxjs: 7.8.1 - dependenciesMeta: - esbuild: - built: true - puppeteer: - built: true - checksum: ac308530209e15eddd88541476eab5512ef30f7d436fc057cd8521525dd15dd1719951bdf6a885648a020a7100f676f299f1759367f911d689c6b22d9397fd8a + "@angular-devkit/core": 20.3.14 + rxjs: 7.8.2 + checksum: 9666ee0db0e09856b48c8448f497779966192d8ba219f36143b613aa830617dcbf4413a97832a1e290a21a0b8d0a8074d49e01d629308f4464ac7d8fb0d3d35e languageName: node linkType: hard -"@angular-devkit/architect@npm:0.1902.19": - version: 0.1902.19 - resolution: "@angular-devkit/architect@npm:0.1902.19" - dependencies: - "@angular-devkit/core": 19.2.19 - rxjs: 7.8.1 - checksum: ee641256d5ed69af65fe74322bfdc2601e72e74d6784d4ad509dcc231baf3aec7baa1b6f543ed7f3e35d834f3cc9377a7379343f1cf355c6303d1c24ff8e08aa - languageName: node - linkType: hard - -"@angular-devkit/build-angular@npm:~19.2.19": - version: 19.2.19 - resolution: "@angular-devkit/build-angular@npm:19.2.19" +"@angular-devkit/build-angular@npm:20": + version: 20.3.14 + resolution: "@angular-devkit/build-angular@npm:20.3.14" dependencies: "@ampproject/remapping": 2.3.0 - "@angular-devkit/architect": 0.1902.19 - "@angular-devkit/build-webpack": 0.1902.19 - "@angular-devkit/core": 19.2.19 - "@angular/build": 19.2.19 - "@babel/core": 7.26.10 - "@babel/generator": 7.26.10 - "@babel/helper-annotate-as-pure": 7.25.9 + "@angular-devkit/architect": 0.2003.14 + "@angular-devkit/build-webpack": 0.2003.14 + "@angular-devkit/core": 20.3.14 + "@angular/build": 20.3.14 + "@babel/core": 7.28.3 + "@babel/generator": 7.28.3 + "@babel/helper-annotate-as-pure": 7.27.3 "@babel/helper-split-export-declaration": 7.24.7 - "@babel/plugin-transform-async-generator-functions": 7.26.8 - "@babel/plugin-transform-async-to-generator": 7.25.9 - "@babel/plugin-transform-runtime": 7.26.10 - "@babel/preset-env": 7.26.9 - "@babel/runtime": 7.26.10 + "@babel/plugin-transform-async-generator-functions": 7.28.0 + "@babel/plugin-transform-async-to-generator": 7.27.1 + "@babel/plugin-transform-runtime": 7.28.3 + "@babel/preset-env": 7.28.3 + "@babel/runtime": 7.28.3 "@discoveryjs/json-ext": 0.6.3 - "@ngtools/webpack": 19.2.19 - "@vitejs/plugin-basic-ssl": 1.2.0 + "@ngtools/webpack": 20.3.14 ansi-colors: 4.1.3 - autoprefixer: 10.4.20 - babel-loader: 9.2.1 + autoprefixer: 10.4.21 + babel-loader: 10.0.0 browserslist: ^4.21.5 - copy-webpack-plugin: 12.0.2 + copy-webpack-plugin: 13.0.1 css-loader: 7.1.2 - esbuild: 0.25.4 - esbuild-wasm: 0.25.4 + esbuild: 0.25.9 + esbuild-wasm: 0.25.9 fast-glob: 3.3.3 http-proxy-middleware: 3.0.5 istanbul-lib-instrument: 6.0.3 jsonc-parser: 3.3.1 karma-source-map-support: 1.4.0 - less: 4.2.2 - less-loader: 12.2.0 + less: 4.4.0 + less-loader: 12.3.0 license-webpack-plugin: 4.0.2 loader-utils: 3.3.1 - mini-css-extract-plugin: 2.9.2 - open: 10.1.0 - ora: 5.4.1 - picomatch: 4.0.2 - piscina: 4.8.0 - postcss: 8.5.2 + mini-css-extract-plugin: 2.9.4 + open: 10.2.0 + ora: 8.2.0 + picomatch: 4.0.3 + piscina: 5.1.3 + postcss: 8.5.6 postcss-loader: 8.1.1 resolve-url-loader: 5.0.0 - rxjs: 7.8.1 - sass: 1.85.0 + rxjs: 7.8.2 + sass: 1.90.0 sass-loader: 16.0.5 - semver: 7.7.1 + semver: 7.7.2 source-map-loader: 5.0.0 source-map-support: 0.5.21 - terser: 5.39.0 + terser: 5.43.1 tree-kill: 1.2.2 tslib: 2.8.1 - webpack: 5.98.0 + webpack: 5.101.2 webpack-dev-middleware: 7.4.2 webpack-dev-server: 5.2.2 webpack-merge: 6.0.1 webpack-subresource-integrity: 5.1.0 peerDependencies: - "@angular/compiler-cli": ^19.0.0 || ^19.2.0-next.0 - "@angular/localize": ^19.0.0 || ^19.2.0-next.0 - "@angular/platform-server": ^19.0.0 || ^19.2.0-next.0 - "@angular/service-worker": ^19.0.0 || ^19.2.0-next.0 - "@angular/ssr": ^19.2.19 + "@angular/compiler-cli": ^20.0.0 + "@angular/core": ^20.0.0 + "@angular/localize": ^20.0.0 + "@angular/platform-browser": ^20.0.0 + "@angular/platform-server": ^20.0.0 + "@angular/service-worker": ^20.0.0 + "@angular/ssr": ^20.3.14 "@web/test-runner": ^0.20.0 browser-sync: ^3.0.2 - jest: ^29.5.0 - jest-environment-jsdom: ^29.5.0 + jest: ^29.5.0 || ^30.2.0 + jest-environment-jsdom: ^29.5.0 || ^30.2.0 karma: ^6.3.0 - ng-packagr: ^19.0.0 || ^19.2.0-next.0 + ng-packagr: ^20.0.0 protractor: ^7.0.0 tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 - typescript: ">=5.5 <5.9" + typescript: ">=5.8 <6.0" dependenciesMeta: esbuild: optional: true peerDependenciesMeta: + "@angular/core": + optional: true "@angular/localize": optional: true + "@angular/platform-browser": + optional: true "@angular/platform-server": optional: true "@angular/service-worker": @@ -192,146 +336,124 @@ __metadata: optional: true tailwindcss: optional: true - checksum: f9d8bb608f20e6be48b940ea107b4b4970ea0652deb53a0f99505053838727b7708635cc689c6ca7dfae9f5bfa5c7a43f9692149f58f533acc4dfaed30e7fe2f + checksum: c8f44b5d3dcabecb948ad7d8200e47305108bfe6fcb2cb8f1fda2796f47a1739984ce29f9782be97c5a35d040cdc38d4133a8a08255242a5f03e8aebfd14401a languageName: node linkType: hard -"@angular-devkit/build-webpack@npm:0.1902.19": - version: 0.1902.19 - resolution: "@angular-devkit/build-webpack@npm:0.1902.19" +"@angular-devkit/build-webpack@npm:0.2003.14": + version: 0.2003.14 + resolution: "@angular-devkit/build-webpack@npm:0.2003.14" dependencies: - "@angular-devkit/architect": 0.1902.19 - rxjs: 7.8.1 + "@angular-devkit/architect": 0.2003.14 + rxjs: 7.8.2 peerDependencies: webpack: ^5.30.0 webpack-dev-server: ^5.0.2 - checksum: cada09b99bce7112ebabbf1e0dfe9ee2f1b193f5326f86d9cb531ce026b54389cdb00156d92ae275d48e5106d55606429e3068ea94dc94bb088097cdc8dbdf54 - languageName: node - linkType: hard - -"@angular-devkit/core@npm:19.0.5": - version: 19.0.5 - resolution: "@angular-devkit/core@npm:19.0.5" - dependencies: - ajv: 8.17.1 - ajv-formats: 3.0.1 - jsonc-parser: 3.3.1 - picomatch: 4.0.2 - rxjs: 7.8.1 - source-map: 0.7.4 - peerDependencies: - chokidar: ^4.0.0 - dependenciesMeta: - esbuild: - built: true - puppeteer: - built: true - peerDependenciesMeta: - chokidar: - optional: true - checksum: 1e12d73a699a50fda2ec45e1c593b73b82829f9481f2a0397eb3119701f47ac43386b04a5ab7f2418d8fa11e57280729c1d32d2e0f56f06417c3ab3d6e520010 + checksum: 85c03f1719f4c371012c1b8df8b2e5cbc1d375a7ca5b8caf9d38a8433c61d1c2f84ab237ff89341377be767e94e636b96141c59e1308414037135ed705034628 languageName: node linkType: hard -"@angular-devkit/core@npm:19.2.19": - version: 19.2.19 - resolution: "@angular-devkit/core@npm:19.2.19" +"@angular-devkit/core@npm:20.3.14": + version: 20.3.14 + resolution: "@angular-devkit/core@npm:20.3.14" dependencies: ajv: 8.17.1 ajv-formats: 3.0.1 jsonc-parser: 3.3.1 - picomatch: 4.0.2 - rxjs: 7.8.1 - source-map: 0.7.4 + picomatch: 4.0.3 + rxjs: 7.8.2 + source-map: 0.7.6 peerDependencies: chokidar: ^4.0.0 peerDependenciesMeta: chokidar: optional: true - checksum: 5196f221e8f8e731f80b64d070341511c8db6552b1360b1b608d9ddb30e032948c67645747254c665a8c0ed1e9a5abadb397b3a3752b4a02d25d05da58bf32eb + checksum: c7cc749a9ab082588ca74732d4928c58e0f38671cc22d8423b3b95c58016d6bc65e397b0e200b4f27f609573429594925cd27654aeaee234da9eea4974620c22 languageName: node linkType: hard -"@angular-devkit/schematics@npm:19.0.5": - version: 19.0.5 - resolution: "@angular-devkit/schematics@npm:19.0.5" +"@angular-devkit/schematics@npm:20.3.14": + version: 20.3.14 + resolution: "@angular-devkit/schematics@npm:20.3.14" dependencies: - "@angular-devkit/core": 19.0.5 + "@angular-devkit/core": 20.3.14 jsonc-parser: 3.3.1 - magic-string: 0.30.12 - ora: 5.4.1 - rxjs: 7.8.1 - dependenciesMeta: - esbuild: - built: true - puppeteer: - built: true - checksum: 33769bd4238d623694b3dc8181860e2d451b720b515f78d30a334fbdb1574b409297b5b57f7f785c094cd6d8d841b9abd74b9edb1fcded45c40640c94ce7d9ed + magic-string: 0.30.17 + ora: 8.2.0 + rxjs: 7.8.2 + checksum: fc662ae29f3bd82e5be4beef4ecbf74767bbbfb624d85df11b6e6078d3df82a4857ed89a0210bf38a084343cd6efb6be0ebb8684d9a92f6249649bde94a00cd3 languageName: node linkType: hard -"@angular/animations@npm:~19.2.14": - version: 19.2.14 - resolution: "@angular/animations@npm:19.2.14" +"@angular/animations@npm:~20.3.16": + version: 20.3.16 + resolution: "@angular/animations@npm:20.3.16" dependencies: tslib: ^2.3.0 peerDependencies: - "@angular/common": 19.2.14 - "@angular/core": 19.2.14 - checksum: d9e1831037b53dcbff7950f0ca5d8916d9a0d2bc6bc9f1d2cd02cd9b56f87a7e3a6f0be4a7b91d9c0fe5ba7f5351092b628393f0f7159f97c1793bee1930dd70 + "@angular/core": 20.3.16 + checksum: 766d54fde2015dbdaf42c621307d49ae1f4bf90dfcf62ed5d1c46bf993d8bdb5d75858d7302948c1bd823dabb5901f1dda8c797cba2541a630dfcbf7e348fe09 languageName: node linkType: hard -"@angular/build@npm:19.2.19": - version: 19.2.19 - resolution: "@angular/build@npm:19.2.19" +"@angular/build@npm:20.3.14": + version: 20.3.14 + resolution: "@angular/build@npm:20.3.14" dependencies: "@ampproject/remapping": 2.3.0 - "@angular-devkit/architect": 0.1902.19 - "@babel/core": 7.26.10 - "@babel/helper-annotate-as-pure": 7.25.9 + "@angular-devkit/architect": 0.2003.14 + "@babel/core": 7.28.3 + "@babel/helper-annotate-as-pure": 7.27.3 "@babel/helper-split-export-declaration": 7.24.7 - "@babel/plugin-syntax-import-attributes": 7.26.0 - "@inquirer/confirm": 5.1.6 - "@vitejs/plugin-basic-ssl": 1.2.0 - beasties: 0.3.2 + "@inquirer/confirm": 5.1.14 + "@vitejs/plugin-basic-ssl": 2.1.0 + beasties: 0.3.5 browserslist: ^4.23.0 - esbuild: 0.25.4 - fast-glob: 3.3.3 + esbuild: 0.25.9 https-proxy-agent: 7.0.6 istanbul-lib-instrument: 6.0.3 - listr2: 8.2.5 - lmdb: 3.2.6 + jsonc-parser: 3.3.1 + listr2: 9.0.1 + lmdb: 3.4.2 magic-string: 0.30.17 mrmime: 2.0.1 - parse5-html-rewriting-stream: 7.0.0 - picomatch: 4.0.2 - piscina: 4.8.0 - rollup: 4.34.8 - sass: 1.85.0 - semver: 7.7.1 + parse5-html-rewriting-stream: 8.0.0 + picomatch: 4.0.3 + piscina: 5.1.3 + rollup: 4.52.3 + sass: 1.90.0 + semver: 7.7.2 source-map-support: 0.5.21 - vite: 6.4.1 - watchpack: 2.4.2 - peerDependencies: - "@angular/compiler": ^19.0.0 || ^19.2.0-next.0 - "@angular/compiler-cli": ^19.0.0 || ^19.2.0-next.0 - "@angular/localize": ^19.0.0 || ^19.2.0-next.0 - "@angular/platform-server": ^19.0.0 || ^19.2.0-next.0 - "@angular/service-worker": ^19.0.0 || ^19.2.0-next.0 - "@angular/ssr": ^19.2.19 + tinyglobby: 0.2.14 + vite: 7.1.11 + watchpack: 2.4.4 + peerDependencies: + "@angular/compiler": ^20.0.0 + "@angular/compiler-cli": ^20.0.0 + "@angular/core": ^20.0.0 + "@angular/localize": ^20.0.0 + "@angular/platform-browser": ^20.0.0 + "@angular/platform-server": ^20.0.0 + "@angular/service-worker": ^20.0.0 + "@angular/ssr": ^20.3.14 karma: ^6.4.0 less: ^4.2.0 - ng-packagr: ^19.0.0 || ^19.2.0-next.0 + ng-packagr: ^20.0.0 postcss: ^8.4.0 tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 - typescript: ">=5.5 <5.9" + tslib: ^2.3.0 + typescript: ">=5.8 <6.0" + vitest: ^3.1.1 dependenciesMeta: lmdb: optional: true peerDependenciesMeta: + "@angular/core": + optional: true "@angular/localize": optional: true + "@angular/platform-browser": + optional: true "@angular/platform-server": optional: true "@angular/service-worker": @@ -348,130 +470,136 @@ __metadata: optional: true tailwindcss: optional: true - checksum: e8e2c4765ebc7e3b71451c9698f7849c09a33c7bd5dbf68de5e40e1b6889364431e78992e09a2a45d68eb97ce16f1484315d6a3dc6d12a4838c0de3d27d1b007 + vitest: + optional: true + checksum: b53a07e68a89fccca57fee9b5a7059bf88d18b95ce264510e5fe81cc31703bfb4b513448004287c4a60248439df8f3a7f59ce57f83f438a68a91c1fdcb232b89 languageName: node linkType: hard -"@angular/cdk@npm:~19.2.14": - version: 19.2.19 - resolution: "@angular/cdk@npm:19.2.19" +"@angular/cdk@npm:~20.2.14": + version: 20.2.14 + resolution: "@angular/cdk@npm:20.2.14" dependencies: - parse5: ^7.1.2 + parse5: ^8.0.0 tslib: ^2.3.0 peerDependencies: - "@angular/common": ^19.0.0 || ^20.0.0 - "@angular/core": ^19.0.0 || ^20.0.0 + "@angular/common": ^20.0.0 || ^21.0.0 + "@angular/core": ^20.0.0 || ^21.0.0 rxjs: ^6.5.3 || ^7.4.0 - checksum: 7728a7ebf34fa1a7d97135b96be91d07d69d7e76adc86427f6683e783b7b124266074f6fc78ee9b065e6e1891be793afef963493011a1c645fd27a6ace6f070a + checksum: 5c2f178fe019a97b8e878ff245eb41676f1a687910a93f698ecef041d8353dc6eaddaf29361dabbdc06a264f9c3256bf50786629e6ba5a024d0d65c3a58498e5 languageName: node linkType: hard -"@angular/cli@npm:~19.0.5": - version: 19.0.5 - resolution: "@angular/cli@npm:19.0.5" +"@angular/cli@npm:~20.3.14": + version: 20.3.14 + resolution: "@angular/cli@npm:20.3.14" dependencies: - "@angular-devkit/architect": 0.1900.5 - "@angular-devkit/core": 19.0.5 - "@angular-devkit/schematics": 19.0.5 - "@inquirer/prompts": 7.1.0 - "@listr2/prompt-adapter-inquirer": 2.0.18 - "@schematics/angular": 19.0.5 + "@angular-devkit/architect": 0.2003.14 + "@angular-devkit/core": 20.3.14 + "@angular-devkit/schematics": 20.3.14 + "@inquirer/prompts": 7.8.2 + "@listr2/prompt-adapter-inquirer": 3.0.1 + "@modelcontextprotocol/sdk": 1.25.2 + "@schematics/angular": 20.3.14 "@yarnpkg/lockfile": 1.1.0 + algoliasearch: 5.35.0 ini: 5.0.0 jsonc-parser: 3.3.1 - listr2: 8.2.5 - npm-package-arg: 12.0.0 - npm-pick-manifest: 10.0.0 - pacote: 20.0.0 - resolve: 1.22.8 - semver: 7.6.3 - symbol-observable: 4.0.0 - yargs: 17.7.2 - dependenciesMeta: - esbuild: - built: true - puppeteer: - built: true + listr2: 9.0.1 + npm-package-arg: 13.0.0 + pacote: 21.0.0 + resolve: 1.22.10 + semver: 7.7.2 + yargs: 18.0.0 + zod: 4.1.13 bin: ng: bin/ng.js - checksum: cb02fb86da98361baabe91c762cec686f4e9b881840f70e96a6a40ab00ee029f228d8a2380127647d87d2e3c3cf2b72c22e98dbeb38506f5b62fa731cc30774c + checksum: e716fda10b3fa06556c69f5566e2e09616694ff2b5012572aa5b08a0d3339be67a8f8a9a3dec84f4d85fa20365a349e561416df734d1a61fb0dc7c30785f22cb languageName: node linkType: hard -"@angular/common@npm:~19.2.14": - version: 19.2.14 - resolution: "@angular/common@npm:19.2.14" +"@angular/common@npm:~20.3.16": + version: 20.3.16 + resolution: "@angular/common@npm:20.3.16" dependencies: tslib: ^2.3.0 peerDependencies: - "@angular/core": 19.2.14 + "@angular/core": 20.3.16 rxjs: ^6.5.3 || ^7.4.0 - checksum: 5682a7b8af9ff7911b2bdded657b7aec4317942a3b299c2c14ff3c1edfd591dd6ecb4f73ed0b0d23053747fcf6693a431dfee6c6cd1554639b8f208e39de5960 + checksum: 4a9ee48712d7cca94ab9e56bfd2fc0f221fb94f57368feb4a83394acf062d67fdd000c363d21154e0d1afa31c8b8cf5468decdd0fc7aec9bacb93fd6dfc23ecb languageName: node linkType: hard -"@angular/compiler-cli@npm:~19.0.4": - version: 19.0.4 - resolution: "@angular/compiler-cli@npm:19.0.4" +"@angular/compiler-cli@npm:~20.3.16": + version: 20.3.16 + resolution: "@angular/compiler-cli@npm:20.3.16" dependencies: - "@babel/core": 7.26.0 + "@babel/core": 7.28.3 "@jridgewell/sourcemap-codec": ^1.4.14 chokidar: ^4.0.0 convert-source-map: ^1.5.1 reflect-metadata: ^0.2.0 semver: ^7.0.0 tslib: ^2.3.0 - yargs: ^17.2.1 + yargs: ^18.0.0 peerDependencies: - "@angular/compiler": 19.0.4 - typescript: ">=5.5 <5.7" + "@angular/compiler": 20.3.16 + typescript: ">=5.8 <6.0" + peerDependenciesMeta: + typescript: + optional: true bin: ng-xi18n: bundles/src/bin/ng_xi18n.js ngc: bundles/src/bin/ngc.js - ngcc: bundles/ngcc/index.js - checksum: 6552d86d90648ad28407868bc4e4ad576d50351c0bbec0f88074b3f3a67cdd1ab71171d0ad4c9605e05a1d1d3d1f86993a9ecdc878bfa50306e0e0eb3d74b0a1 + checksum: 32d40c1740aba3cc707a1e41e33fdf558668d2718b91f7352ceb31d4f14fbc28bb2775d1fd45dd5459c50f01d6aa0fdf7d9cdc46605323c65f728c6e4a6b8762 languageName: node linkType: hard -"@angular/compiler@npm:~19.2.14": - version: 19.2.14 - resolution: "@angular/compiler@npm:19.2.14" +"@angular/compiler@npm:~20.3.16": + version: 20.3.16 + resolution: "@angular/compiler@npm:20.3.16" dependencies: tslib: ^2.3.0 - checksum: f8b22a5e0fbb0c0ded681ae237a05216fa07111d341ac7c1b5a18f868bb737d433501a4a9fbbee22ca0035296b389208c7996e936ed5b79db483e079b914469a + checksum: 41355354b4f0f00242d6a4c9dda37636adf91bffe50840dda8e5133c23be797bb1db5fef6ac7b8aec7a58b49737c71de599b6fce264bdc460505bb16a9d881f3 languageName: node linkType: hard -"@angular/core@npm:~19.2.14": - version: 19.2.14 - resolution: "@angular/core@npm:19.2.14" +"@angular/core@npm:~20.3.16": + version: 20.3.16 + resolution: "@angular/core@npm:20.3.16" dependencies: tslib: ^2.3.0 peerDependencies: + "@angular/compiler": 20.3.16 rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 - checksum: 047889284990838718b5277f927292c44eef4c5e69aa48b7cd933709cfb4f9f979a6708be9deaaf032a45b25e1c560c64395ce9f9d1a7315139ffa6a2de2faae + peerDependenciesMeta: + "@angular/compiler": + optional: true + zone.js: + optional: true + checksum: aeaeb532dd45b50b55a380d596ad4f9205e61da84bc58d9a194f54433c4e867aecfd96f485001efd3267ea4dd40aadb53a43b981c9bbc95a1cbf7e676cf3051e languageName: node linkType: hard -"@angular/forms@npm:~19.2.14": - version: 19.2.14 - resolution: "@angular/forms@npm:19.2.14" +"@angular/forms@npm:~20.3.16": + version: 20.3.16 + resolution: "@angular/forms@npm:20.3.16" dependencies: tslib: ^2.3.0 peerDependencies: - "@angular/common": 19.2.14 - "@angular/core": 19.2.14 - "@angular/platform-browser": 19.2.14 + "@angular/common": 20.3.16 + "@angular/core": 20.3.16 + "@angular/platform-browser": 20.3.16 rxjs: ^6.5.3 || ^7.4.0 - checksum: 0180e7a0908cea08bd7d2d99ea75f4bb6283bcb1babf9faceb2cbd5a8c5e2aa8d9fd315dbb953fe12087d30537038ed5d5cd5a626032b422328c1492dd2bee92 + checksum: 68fe60972c7a53b241861ff8720cdb4665ab43b8ebbd3cfad2f8a2ffa56e9a2e98227cf2cea93f0d4f2803c65ab411eee34e32cb5b011663bf5be47d659ce855 languageName: node linkType: hard -"@angular/language-service@npm:~19.0.4": - version: 19.0.4 - resolution: "@angular/language-service@npm:19.0.4" - checksum: 315334a1431a4cf7fd6f086de0d7fbc0e1f56b78ac72c0607825a0dfced75234ba893684620b2a33c95829618f8bc5b07e9eea14d925f5088f2c669acff0fee7 +"@angular/language-service@npm:~20.3.16": + version: 20.3.16 + resolution: "@angular/language-service@npm:20.3.16" + checksum: 2bec0543118c51cbfa971e807d8600d22e8e82c6cf69a10d858204da61c14284a2bad45eb5515426a00176234c2f976ab2867306881bfd37c84a4db4630e3a39 languageName: node linkType: hard @@ -492,63 +620,63 @@ __metadata: languageName: node linkType: hard -"@angular/material@npm:~19.2.14": - version: 19.2.19 - resolution: "@angular/material@npm:19.2.19" +"@angular/material@npm:~20.2.14": + version: 20.2.14 + resolution: "@angular/material@npm:20.2.14" dependencies: tslib: ^2.3.0 peerDependencies: - "@angular/cdk": 19.2.19 - "@angular/common": ^19.0.0 || ^20.0.0 - "@angular/core": ^19.0.0 || ^20.0.0 - "@angular/forms": ^19.0.0 || ^20.0.0 - "@angular/platform-browser": ^19.0.0 || ^20.0.0 + "@angular/cdk": 20.2.14 + "@angular/common": ^20.0.0 || ^21.0.0 + "@angular/core": ^20.0.0 || ^21.0.0 + "@angular/forms": ^20.0.0 || ^21.0.0 + "@angular/platform-browser": ^20.0.0 || ^21.0.0 rxjs: ^6.5.3 || ^7.4.0 - checksum: c1591501736f3ee61e2452682c7dcafd8dfb89a680a478d518f0df565ee8fc096dabfaa51f5bd620c12b91173f42dc0be2dbc08aa2b1ee237349b58c1513b51c + checksum: 3042cc2180244881e7e734d864b65130ed1b0f7bc52394e5b2ca22119594c54b962dc5d0cfc490fbb24a5751786b116acd470c4994d5c1faf9200fd2367ee58d languageName: node linkType: hard -"@angular/platform-browser-dynamic@npm:~19.2.14": - version: 19.2.14 - resolution: "@angular/platform-browser-dynamic@npm:19.2.14" +"@angular/platform-browser-dynamic@npm:~20.3.16": + version: 20.3.16 + resolution: "@angular/platform-browser-dynamic@npm:20.3.16" dependencies: tslib: ^2.3.0 peerDependencies: - "@angular/common": 19.2.14 - "@angular/compiler": 19.2.14 - "@angular/core": 19.2.14 - "@angular/platform-browser": 19.2.14 - checksum: 1988ff2a1dcaf850f0df092959f516358161f038cee65606fc74991d0ffebef556df92ccca73b22e345550c269475ef4380780d86411b456a29daf5e9c8c9ece + "@angular/common": 20.3.16 + "@angular/compiler": 20.3.16 + "@angular/core": 20.3.16 + "@angular/platform-browser": 20.3.16 + checksum: be7886290158e676f618461cc86c2cd6954707a2fe8b1af080d94800c9852b1511d3eb2f03259a54b7807813435b6f77477dde0df47fcd3d05dea8705cfe7852 languageName: node linkType: hard -"@angular/platform-browser@npm:~19.2.14": - version: 19.2.14 - resolution: "@angular/platform-browser@npm:19.2.14" +"@angular/platform-browser@npm:~20.3.16": + version: 20.3.16 + resolution: "@angular/platform-browser@npm:20.3.16" dependencies: tslib: ^2.3.0 peerDependencies: - "@angular/animations": 19.2.14 - "@angular/common": 19.2.14 - "@angular/core": 19.2.14 + "@angular/animations": 20.3.16 + "@angular/common": 20.3.16 + "@angular/core": 20.3.16 peerDependenciesMeta: "@angular/animations": optional: true - checksum: 0b327016542b0d1b3ac37bdd0c536ec338befeb4313e3b4790fee1225d612240e6ee110daa517b90833e381d926bcca3852ae55d93e54fada80dd3a5cf85e65c + checksum: f65f3596f92da336f1218101ae4abf90e83821f2f5300085981498c42b771321e116eb3c1abace68b4c678dcf9c685256a402e1eed7e0aa8da754affe9b1a766 languageName: node linkType: hard -"@angular/router@npm:~19.2.14": - version: 19.2.14 - resolution: "@angular/router@npm:19.2.14" +"@angular/router@npm:~20.3.16": + version: 20.3.16 + resolution: "@angular/router@npm:20.3.16" dependencies: tslib: ^2.3.0 peerDependencies: - "@angular/common": 19.2.14 - "@angular/core": 19.2.14 - "@angular/platform-browser": 19.2.14 + "@angular/common": 20.3.16 + "@angular/core": 20.3.16 + "@angular/platform-browser": 20.3.16 rxjs: ^6.5.3 || ^7.4.0 - checksum: c121e745b671d2fb8d2f23928b70feaf37b420d7ddff7db790f02a026eecffccf69648f41b9bfdd92f4a3283cb6589f2c3c4705a0cfcb45f6b572a379effb587 + checksum: 9dc94a00f277c9333918088da6334a61082604d62d592f3c7a6faf949b684aa32288360665919d552c0d10e61bc6bfd8f10a7ece4a80c7c0ab909c0b2b882851 languageName: node linkType: hard @@ -591,21 +719,55 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.9": +"@babel/code-frame@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/code-frame@npm:7.28.6" + dependencies: + "@babel/helper-validator-identifier": ^7.28.5 + js-tokens: ^4.0.0 + picocolors: ^1.1.1 + checksum: 6e98e47fd324b41c1919ff6d0fbf6fa5e991e5beff6b55803d9adaff9e11f4bc432803e52165f7b0d49af0f718209c3138a9b2fd51ff624b19d47704f11f8287 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.25.9": version: 7.26.3 resolution: "@babel/compat-data@npm:7.26.3" checksum: 85c5a9fb365231688c7faeb977f1d659da1c039e17b416f8ef11733f7aebe11fe330dce20c1844cacf243766c1d643d011df1d13cac9eda36c46c6c475693d21 languageName: node linkType: hard -"@babel/compat-data@npm:^7.26.8, @babel/compat-data@npm:^7.27.2": - version: 7.28.0 - resolution: "@babel/compat-data@npm:7.28.0" - checksum: 37a40d4ea10a32783bc24c4ad374200f5db864c8dfa42f82e76f02b8e84e4c65e6a017fc014d165b08833f89333dff4cb635fce30f03c333ea3525ea7e20f0a2 +"@babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.0, @babel/compat-data@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/compat-data@npm:7.28.6" + checksum: 599b316aa0e3981aa9165ac34609ef5f29ebf5cecc04784e8b4932dd355aaa3599eaa222ff46a2fcfff52f083b8fd212650a52d8af57c4c217c81a100fefba09 languageName: node linkType: hard -"@babel/core@npm:7.26.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9": +"@babel/core@npm:7.28.3": + version: 7.28.3 + resolution: "@babel/core@npm:7.28.3" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.27.1 + "@babel/generator": ^7.28.3 + "@babel/helper-compilation-targets": ^7.27.2 + "@babel/helper-module-transforms": ^7.28.3 + "@babel/helpers": ^7.28.3 + "@babel/parser": ^7.28.3 + "@babel/template": ^7.27.2 + "@babel/traverse": ^7.28.3 + "@babel/types": ^7.28.2 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: d09132cd752730d219bdd29dbd65cb647151105bef6e615cfb6d57249f71a3d1aaf8a5beaa1c7ec54ad927962e4913ebc660f7f0c3e65c39bc171bc386285e50 + languageName: node + linkType: hard + +"@babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9": version: 7.26.0 resolution: "@babel/core@npm:7.26.0" dependencies: @@ -628,39 +790,16 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:7.26.10": - version: 7.26.10 - resolution: "@babel/core@npm:7.26.10" - dependencies: - "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.26.2 - "@babel/generator": ^7.26.10 - "@babel/helper-compilation-targets": ^7.26.5 - "@babel/helper-module-transforms": ^7.26.0 - "@babel/helpers": ^7.26.10 - "@babel/parser": ^7.26.10 - "@babel/template": ^7.26.9 - "@babel/traverse": ^7.26.10 - "@babel/types": ^7.26.10 - convert-source-map: ^2.0.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.3 - semver: ^6.3.1 - checksum: 0217325bd46fb9c828331c14dbe3f015ee13d9aecec423ef5acc0ce8b51a3d2a2d55f2ede252b99d0ab9b2f1a06e2881694a890f92006aeac9ebe5be2914c089 - languageName: node - linkType: hard - -"@babel/generator@npm:7.26.10": - version: 7.26.10 - resolution: "@babel/generator@npm:7.26.10" +"@babel/generator@npm:7.28.3": + version: 7.28.3 + resolution: "@babel/generator@npm:7.28.3" dependencies: - "@babel/parser": ^7.26.10 - "@babel/types": ^7.26.10 - "@jridgewell/gen-mapping": ^0.3.5 - "@jridgewell/trace-mapping": ^0.3.25 + "@babel/parser": ^7.28.3 + "@babel/types": ^7.28.2 + "@jridgewell/gen-mapping": ^0.3.12 + "@jridgewell/trace-mapping": ^0.3.28 jsesc: ^3.0.2 - checksum: b047378cb4fdb54adae53a7e9648f1585c2e3ddd3a4019e36bf4b4554029c84872891234fc9c9519570448a1cb47430b2bf46524cf618c94d6d09985cf6428e1 + checksum: e2202bf2b9c8a94f7e7a0a049fda0ee037d055c46922e85afa3bbc53309113f859b8193894f991045d7865226028b8f4f06152ed315ab414451932016dba5e42 languageName: node linkType: hard @@ -677,7 +816,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.26.10, @babel/generator@npm:^7.28.0": +"@babel/generator@npm:^7.28.0": version: 7.28.0 resolution: "@babel/generator@npm:7.28.0" dependencies: @@ -690,16 +829,20 @@ __metadata: languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:7.25.9, @babel/helper-annotate-as-pure@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" +"@babel/generator@npm:^7.28.3, @babel/generator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/generator@npm:7.28.6" dependencies: - "@babel/types": ^7.25.9 - checksum: 41edda10df1ae106a9b4fe617bf7c6df77db992992afd46192534f5cff29f9e49a303231733782dd65c5f9409714a529f215325569f14282046e9d3b7a1ffb6c + "@babel/parser": ^7.28.6 + "@babel/types": ^7.28.6 + "@jridgewell/gen-mapping": ^0.3.12 + "@jridgewell/trace-mapping": ^0.3.28 + jsesc: ^3.0.2 + checksum: 74f62f140e301c8c21652f7db3bc275008708272c0395f178ba6953297af50c4ea484874a44b3f292d242ce8a977fd3f31d9d3a3501c3aaca9cd46e3b1cded01 languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.27.1": +"@babel/helper-annotate-as-pure@npm:7.27.3, @babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": version: 7.27.3 resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" dependencies: @@ -708,7 +851,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.9": +"@babel/helper-annotate-as-pure@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" + dependencies: + "@babel/types": ^7.25.9 + checksum: 41edda10df1ae106a9b4fe617bf7c6df77db992992afd46192534f5cff29f9e49a303231733782dd65c5f9409714a529f215325569f14282046e9d3b7a1ffb6c + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-compilation-targets@npm:7.25.9" dependencies: @@ -721,37 +873,37 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.26.5": - version: 7.27.2 - resolution: "@babel/helper-compilation-targets@npm:7.27.2" +"@babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2, @babel/helper-compilation-targets@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-compilation-targets@npm:7.28.6" dependencies: - "@babel/compat-data": ^7.27.2 + "@babel/compat-data": ^7.28.6 "@babel/helper-validator-option": ^7.27.1 browserslist: ^4.24.0 lru-cache: ^5.1.1 semver: ^6.3.1 - checksum: 7b95328237de85d7af1dea010a4daa28e79f961dda48b652860d5893ce9b136fc8b9ea1f126d8e0a24963b09ba5c6631dcb907b4ce109b04452d34a6ae979807 + checksum: 8151e36b74eb1c5e414fe945c189436421f7bfa011884de5be3dd7fd77f12f1f733ff7c982581dfa0a49d8af724450243c2409427114b4a6cfeb8333259d001c languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-create-class-features-plugin@npm:7.25.9" +"@babel/helper-create-class-features-plugin@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-create-class-features-plugin@npm:7.28.6" dependencies: - "@babel/helper-annotate-as-pure": ^7.25.9 - "@babel/helper-member-expression-to-functions": ^7.25.9 - "@babel/helper-optimise-call-expression": ^7.25.9 - "@babel/helper-replace-supers": ^7.25.9 - "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 - "@babel/traverse": ^7.25.9 + "@babel/helper-annotate-as-pure": ^7.27.3 + "@babel/helper-member-expression-to-functions": ^7.28.5 + "@babel/helper-optimise-call-expression": ^7.27.1 + "@babel/helper-replace-supers": ^7.28.6 + "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 + "@babel/traverse": ^7.28.6 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 91dd5f203ed04568c70b052e2f26dfaac7c146447196c00b8ecbb6d3d2f3b517abadb985d3321a19d143adaed6fe17f7f79f8f50e0c20e9d8ad83e1027b42424 + checksum: f886ab302a83f8e410384aa635806b22374897fd9e3387c737ab9d91d1214bf9f7e57ae92619bd25dea63c9c0a49b25b44eb807873332e0eb9549219adc73639 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.25.9": +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6": version: 7.26.3 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.26.3" dependencies: @@ -764,18 +916,31 @@ __metadata: languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.6.3": - version: 0.6.3 - resolution: "@babel/helper-define-polyfill-provider@npm:0.6.3" +"@babel/helper-create-regexp-features-plugin@npm:^7.27.1, @babel/helper-create-regexp-features-plugin@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.28.5" dependencies: - "@babel/helper-compilation-targets": ^7.22.6 - "@babel/helper-plugin-utils": ^7.22.5 - debug: ^4.1.1 + "@babel/helper-annotate-as-pure": ^7.27.3 + regexpu-core: ^6.3.1 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: de202103e6ff8cd8da0d62eb269fcceb29857f3fa16173f0ff38188fd514e9ad4901aef1d590ff8ba25381644b42eaf70ad9ba91fda59fe7aa6a5e694cdde267 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.6.5": + version: 0.6.5 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.5" + dependencies: + "@babel/helper-compilation-targets": ^7.27.2 + "@babel/helper-plugin-utils": ^7.27.1 + debug: ^4.4.1 lodash.debounce: ^4.0.8 - resolve: ^1.14.2 + resolve: ^1.22.10 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 710e6d8a5391736b9f53f09d0494575c2e03de199ad8d1349bc8e514cb85251ea1f1842c2ff44830849d482052ddb42ae931101002a87a263b12f649c2e57c01 + checksum: 9fd3b09b209c8ed0d3d8bc1f494f1368b9e1f6e46195af4ce948630fe97d7dafde4882eedace270b319bf6555ddf35e220c77505f6d634f621766cdccbba0aae languageName: node linkType: hard @@ -786,13 +951,13 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-member-expression-to-functions@npm:7.25.9" +"@babel/helper-member-expression-to-functions@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-member-expression-to-functions@npm:7.28.5" dependencies: - "@babel/traverse": ^7.25.9 - "@babel/types": ^7.25.9 - checksum: 8e2f1979b6d596ac2a8cbf17f2cf709180fefc274ac3331408b48203fe19134ed87800774ef18838d0275c3965130bae22980d90caed756b7493631d4b2cf961 + "@babel/traverse": ^7.28.5 + "@babel/types": ^7.28.5 + checksum: 447d385233bae2eea713df1785f819b5a5ca272950740da123c42d23f491045120f0fbbb5609c091f7a9bbd40f289a442846dde0cb1bf0c59440fa093690cf7c languageName: node linkType: hard @@ -816,7 +981,17 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.25.9, @babel/helper-module-transforms@npm:^7.26.0": +"@babel/helper-module-imports@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-imports@npm:7.28.6" + dependencies: + "@babel/traverse": ^7.28.6 + "@babel/types": ^7.28.6 + checksum: 437513aa029898b588a38f7991d7656c539b22f595207d85d0c407240c9e3f2aff8b9d0d7115fdedc91e7fdce4465100549a052024e2fba6a810bcbb7584296b + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.26.0": version: 7.26.0 resolution: "@babel/helper-module-transforms@npm:7.26.0" dependencies: @@ -842,39 +1017,46 @@ __metadata: languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-optimise-call-expression@npm:7.25.9" +"@babel/helper-module-transforms@npm:^7.28.3, @babel/helper-module-transforms@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-transforms@npm:7.28.6" dependencies: - "@babel/types": ^7.25.9 - checksum: f09d0ad60c0715b9a60c31841b3246b47d67650c512ce85bbe24a3124f1a4d66377df793af393273bc6e1015b0a9c799626c48e53747581c1582b99167cc65dc + "@babel/helper-module-imports": ^7.28.6 + "@babel/helper-validator-identifier": ^7.28.5 + "@babel/traverse": ^7.28.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 522f7d1d08b5e2ccd4ec912aca879bd1506af78d1fb30f46e3e6b4bb69c6ae6ab4e379a879723844230d27dc6d04a55b03f5215cd3141b7a2b40bb4a02f71a9f languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.9": +"@babel/helper-optimise-call-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" + dependencies: + "@babel/types": ^7.27.1 + checksum: 0fb7ee824a384529d6b74f8a58279f9b56bfe3cce332168067dddeab2552d8eeb56dc8eaf86c04a3a09166a316cb92dfc79c4c623cd034ad4c563952c98b464f + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.18.6": version: 7.25.9 resolution: "@babel/helper-plugin-utils@npm:7.25.9" checksum: e19ec8acf0b696756e6d84531f532c5fe508dce57aa68c75572a77798bd04587a844a9a6c8ea7d62d673e21fdc174d091c9097fb29aea1c1b49f9c6eaa80f022 languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.26.5, @babel/helper-plugin-utils@npm:^7.27.1": +"@babel/helper-plugin-utils@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-plugin-utils@npm:7.27.1" checksum: 5d715055301badab62bdb2336075a77f8dc8bd290cad2bc1b37ea3bf1b3efc40594d308082229f239deb4d6b5b80b0a73bce000e595ea74416e0339c11037047 languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-remap-async-to-generator@npm:7.25.9" - dependencies: - "@babel/helper-annotate-as-pure": ^7.25.9 - "@babel/helper-wrap-function": ^7.25.9 - "@babel/traverse": ^7.25.9 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: ea37ad9f8f7bcc27c109963b8ebb9d22bac7a5db2a51de199cb560e251d5593fe721e46aab2ca7d3e7a24b0aa4aff0eaf9c7307af9c2fd3a1d84268579073052 +"@babel/helper-plugin-utils@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-plugin-utils@npm:7.28.6" + checksum: a0b4caab5e2180b215faa4d141ceac9e82fad9d446b8023eaeb8d82a6e62024726675b07fe8e616dd12f34e2bb59747e8d57aa8adab3e0717d1b8d691b118379 languageName: node linkType: hard @@ -891,26 +1073,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-replace-supers@npm:7.25.9" +"@babel/helper-replace-supers@npm:^7.27.1, @babel/helper-replace-supers@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-replace-supers@npm:7.28.6" dependencies: - "@babel/helper-member-expression-to-functions": ^7.25.9 - "@babel/helper-optimise-call-expression": ^7.25.9 - "@babel/traverse": ^7.25.9 + "@babel/helper-member-expression-to-functions": ^7.28.5 + "@babel/helper-optimise-call-expression": ^7.27.1 + "@babel/traverse": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: 84f40e12520b7023e52d289bf9d569a06284879fe23bbbacad86bec5d978b2669769f11b073fcfeb1567d8c547168323005fda88607a4681ecaeb4a5cdd48bb9 - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.9" - dependencies: - "@babel/traverse": ^7.25.9 - "@babel/types": ^7.25.9 - checksum: fdbb5248932198bc26daa6abf0d2ac42cab9c2dbb75b7e9f40d425c8f28f09620b886d40e7f9e4e08ffc7aaa2cefe6fc2c44be7c20e81f7526634702fb615bdc + checksum: aa6530a52010883b6be88465e3b9e789509786a40203650a23a51c315f7442b196e5925fb8e2d66d1e3dc2c604cdc817bd8c5c170dbb322ab5ebc7486fd8a022 languageName: node linkType: hard @@ -961,6 +1133,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-validator-identifier@npm:7.28.5" + checksum: 5a251a6848e9712aea0338f659a1a3bd334d26219d5511164544ca8ec20774f098c3a6661e9da65a0d085c745c00bb62c8fada38a62f08fa1f8053bc0aeb57e4 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-validator-option@npm:7.25.9" @@ -975,17 +1154,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-wrap-function@npm:7.25.9" - dependencies: - "@babel/template": ^7.25.9 - "@babel/traverse": ^7.25.9 - "@babel/types": ^7.25.9 - checksum: 8ec1701e60ae004415800c4a7a188f5564c73b4e4f3fdf58dd3f34a3feaa9753173f39bbd6d02e7ecc974f48155efc7940e62584435b3092c07728ee46a604ea - languageName: node - linkType: hard - "@babel/helper-wrap-function@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-wrap-function@npm:7.27.1" @@ -997,7 +1165,7 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.26.0, @babel/helpers@npm:^7.26.10": +"@babel/helpers@npm:^7.26.0": version: 7.28.2 resolution: "@babel/helpers@npm:7.28.2" dependencies: @@ -1007,6 +1175,16 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.28.3": + version: 7.28.6 + resolution: "@babel/helpers@npm:7.28.6" + dependencies: + "@babel/template": ^7.28.6 + "@babel/types": ^7.28.6 + checksum: 4f3d555ec20dde40a2fcb244c86bfd9ec007b57ec9b30a9d04334c1ea2c1670bb82c151024124e1ab27ccf0b1f5ad30167633457a7c9ffbf4064fad2643f12fc + languageName: node + linkType: hard + "@babel/parser@npm:^7.14.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.3": version: 7.26.3 resolution: "@babel/parser@npm:7.26.3" @@ -1018,7 +1196,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.26.10, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.0": +"@babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.0": version: 7.28.0 resolution: "@babel/parser@npm:7.28.0" dependencies: @@ -1029,62 +1207,73 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.9" +"@babel/parser@npm:^7.28.3, @babel/parser@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/parser@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 - "@babel/traverse": ^7.25.9 + "@babel/types": ^7.28.6 + bin: + parser: ./bin/babel-parser.js + checksum: 2a35319792ceef9bc918f0ff854449bef0120707798fe147ef988b0606de226e2fbc3a562ba687148bfe5336c6c67358fb27e71a94e425b28482dcaf0b172fd6 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": + version: 7.28.5 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/traverse": ^7.28.5 peerDependencies: "@babel/core": ^7.0.0 - checksum: b33d37dacf98a9c74f53959999adc37a258057668b62dba557e6865689433c53764673109eaba9102bf73b2ac4db162f0d9b89a6cca6f1b71d12f5908ec11da9 + checksum: 749b40a963d5633f554cad0336245cb6c1c1393c70a3fddcf302d86a1a42b35efdd2ed62056b88db66f3900887ae1cee9a3eeec89799c22e0cf65059f0dfd142 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.9" +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: d3e14ab1cb9cb50246d20cab9539f2fbd1e7ef1ded73980c8ad7c0561b4d5e0b144d362225f0976d47898e04cbd40f2000e208b0913bd788346cf7791b96af91 + checksum: eb7f4146dc01f1198ce559a90b077e58b951a07521ec414e3c7d4593bf6c4ab5c2af22242a7e9fec085e20299e0ba6ea97f44a45e84ab148141bf9eb959ad25e languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.9" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: a9d1ee3fd100d3eb6799a2f2bbd785296f356c531d75c9369f71541811fa324270258a374db103ce159156d006da2f33370330558d0133e6f7584152c34997ca + checksum: 621cfddfcc99a81e74f8b6f9101fd260b27500cb1a568e3ceae9cc8afe9aee45ac3bca3900a2b66c612b1a2366d29ef67d4df5a1c975be727eaad6906f98c2c6 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.25.9" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 - "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 - "@babel/plugin-transform-optional-chaining": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 + "@babel/plugin-transform-optional-chaining": ^7.27.1 peerDependencies: "@babel/core": ^7.13.0 - checksum: 5b298b28e156f64de51cdb03a2c5b80c7f978815ef1026f3ae8b9fc48d28bf0a83817d8fbecb61ef8fb94a7201f62cca5103cc6e7b9e8f28e38f766d7905b378 + checksum: f07aa80272bd7a46b7ba11a4644da6c9b6a5a64e848dfaffdad6f02663adefd512e1aaebe664c4dd95f7ed4f80c872c7f8db8d8e34b47aae0930b412a28711a0 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.9" +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.28.3": + version: 7.28.6 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 - "@babel/traverse": ^7.25.9 + "@babel/helper-plugin-utils": ^7.28.6 + "@babel/traverse": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: c684593952ab1b40dfa4e64e98a07e7227c6db175c21bd0e6d71d2ad5d240fef4e4a984d56f05a494876542a022244fe1c1098f4116109fd90d06615e8a269b1 + checksum: f1341f829f809c8685d839669953a478f8a40d1d53f4f5e1972bf39ff4e1ece148319340292d6e0c3641157268b435cbb99b3ac2f3cefe9fca9e81b8f62d6d71 languageName: node linkType: hard @@ -1097,25 +1286,25 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.26.0" +"@babel/plugin-syntax-import-assertions@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b58f2306df4a690ca90b763d832ec05202c50af787158ff8b50cdf3354359710bce2e1eb2b5135fcabf284756ac8eadf09ca74764aa7e76d12a5cac5f6b21e67 + checksum: 25017235e1e2c4ed892aa327a3fa10f4209cc618c6dd7806fc40c07d8d7d24a39743d3d5568b8d1c8f416cffe03c174e78874ded513c9338b07a7ab1dcbab050 languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:7.26.0, @babel/plugin-syntax-import-attributes@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" +"@babel/plugin-syntax-import-attributes@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c122aa577166c80ee67f75aebebeef4150a132c4d3109d25d7fc058bf802946f883e330f20b78c1d3e3a5ada631c8780c263d2d01b5dbaecc69efefeedd42916 + checksum: 6c8c6a5988dbb9799d6027360d1a5ba64faabf551f2ef11ba4eade0c62253b5c85d44ddc8eb643c74b9acb2bcaa664a950bd5de9a5d4aef291c4f2a48223bb4b languageName: node linkType: hard @@ -1131,57 +1320,70 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.9" +"@babel/plugin-transform-arrow-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c29f081224859483accf55fb4d091db2aac0dcd0d7954bac5ca889030cc498d3f771aa20eb2e9cd8310084ec394d85fa084b97faf09298b6bc9541182b3eb5bb + checksum: 62c2cc0ae2093336b1aa1376741c5ed245c0987d9e4b4c5313da4a38155509a7098b5acce582b6781cc0699381420010da2e3086353344abe0a6a0ec38961eb7 languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:7.26.8": - version: 7.26.8 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.26.8" +"@babel/plugin-transform-async-generator-functions@npm:7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.28.0" dependencies: - "@babel/helper-plugin-utils": ^7.26.5 - "@babel/helper-remap-async-to-generator": ^7.25.9 - "@babel/traverse": ^7.26.8 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-remap-async-to-generator": ^7.27.1 + "@babel/traverse": ^7.28.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10424a1bbfbc7ffdb13cef1e832f76bb2d393a9fbfaa1eaa3091a8f6ec3e2ac0b66cf04fca9cb3fb4dbf3d1bd404d72dfce4a3742b4ef21f6271aca7076a65ef + checksum: 174aaccd7a8386fd7f32240c3f65a93cf60dcc5f6a2123cfbff44c0d22b424cd41de3a0c6d136b6a2fa60a8ca01550c261677284cb18a0daeab70730b2265f1d languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.26.8": - version: 7.28.0 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.28.0" +"@babel/plugin-transform-async-generator-functions@npm:^7.28.0": + version: 7.28.6 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": ^7.28.6 + "@babel/helper-remap-async-to-generator": ^7.27.1 + "@babel/traverse": ^7.28.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0c9e362039c7b0d6620845021b8f576908063a4bfd5857feba59d6097204d405c693d9a6f21b6f5cd846a2722cabd898a1e680dc976abc3e0c4b6edae623854e + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.27.1" dependencies: + "@babel/helper-module-imports": ^7.27.1 "@babel/helper-plugin-utils": ^7.27.1 "@babel/helper-remap-async-to-generator": ^7.27.1 - "@babel/traverse": ^7.28.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 174aaccd7a8386fd7f32240c3f65a93cf60dcc5f6a2123cfbff44c0d22b424cd41de3a0c6d136b6a2fa60a8ca01550c261677284cb18a0daeab70730b2265f1d + checksum: d79d7a7ae7d416f6a48200017d027a6ba94c09c7617eea8b4e9c803630f00094c1a4fc32bf20ce3282567824ce3fcbda51653aac4003c71ea4e681b331338979 languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:7.25.9, @babel/plugin-transform-async-to-generator@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.9" +"@babel/plugin-transform-async-to-generator@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.28.6" dependencies: - "@babel/helper-module-imports": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 - "@babel/helper-remap-async-to-generator": ^7.25.9 + "@babel/helper-module-imports": ^7.28.6 + "@babel/helper-plugin-utils": ^7.28.6 + "@babel/helper-remap-async-to-generator": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b3ad50fb93c171644d501864620ed23952a46648c4df10dc9c62cc9ad08031b66bd272cfdd708faeee07c23b6251b16f29ce0350473e4c79f0c32178d38ce3a6 + checksum: bca5774263ec01dd2bf71c74bbaf7baa183bf03576636b7826c3346be70c8c8cb15cff549112f2983c36885131a0afde6c443591278c281f733ee17f455aa9b1 languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.26.5": +"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" dependencies: @@ -1192,493 +1394,507 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-block-scoping@npm:7.25.9" +"@babel/plugin-transform-block-scoping@npm:^7.28.0": + version: 7.28.6 + resolution: "@babel/plugin-transform-block-scoping@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e869500cfb1995e06e64c9608543b56468639809febfcdd6fcf683bc0bf1be2431cacf2981a168a1a14f4766393e37bc9f7c96d25bc5b5f39a64a8a8ad0bf8e0 + checksum: cb4f71ac4fc7b32c2e3cc167eb9e7a1a11562127d702e3b5093567750e9a4eb11a29ae5a917f62741bf9d5792bfe3022cbcdcc7bb927ddb6f627b6749a38c118 languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-class-properties@npm:7.25.9" +"@babel/plugin-transform-class-properties@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-class-properties@npm:7.28.6" dependencies: - "@babel/helper-create-class-features-plugin": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-create-class-features-plugin": ^7.28.6 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a8d69e2c285486b63f49193cbcf7a15e1d3a5f632c1c07d7a97f65306df7f554b30270b7378dde143f8b557d1f8f6336c643377943dec8ec405e4cd11e90b9ea + checksum: 200f30d44b36a768fa3a8cf690db9e333996af2ad14d9fa1b4c91a427ed9302907873b219b4ce87517ca1014a810eb2e929a6a66be68473f72b546fc64d04fbc languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/plugin-transform-class-static-block@npm:7.26.0" +"@babel/plugin-transform-class-static-block@npm:^7.28.3": + version: 7.28.6 + resolution: "@babel/plugin-transform-class-static-block@npm:7.28.6" dependencies: - "@babel/helper-create-class-features-plugin": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-create-class-features-plugin": ^7.28.6 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.12.0 - checksum: d779d4d3a6f8d363f67fcbd928c15baa72be8d3b86c6d05e0300b50e66e2c4be9e99398b803d13064bc79d90ae36e37a505e3dc8af11904459804dec07660246 + checksum: 3db326156f73a0c0d1e2ea4d73e082b9ace2f6a9c965db1c2e51f3a186751b8b91bafb184d05e046bf970b50ecfde1f74862dd895f9a5ea0fad328369d74cfc4 languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-classes@npm:7.25.9" +"@babel/plugin-transform-classes@npm:^7.28.3": + version: 7.28.6 + resolution: "@babel/plugin-transform-classes@npm:7.28.6" dependencies: - "@babel/helper-annotate-as-pure": ^7.25.9 - "@babel/helper-compilation-targets": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 - "@babel/helper-replace-supers": ^7.25.9 - "@babel/traverse": ^7.25.9 - globals: ^11.1.0 + "@babel/helper-annotate-as-pure": ^7.27.3 + "@babel/helper-compilation-targets": ^7.28.6 + "@babel/helper-globals": ^7.28.0 + "@babel/helper-plugin-utils": ^7.28.6 + "@babel/helper-replace-supers": ^7.28.6 + "@babel/traverse": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d12584f72125314cc0fa8c77586ece2888d677788ac75f7393f5da574dfe4e45a556f7e3488fab29c8777ab3e5856d7a2d79f6df02834083aaa9d766440e3c68 + checksum: bddeefbfd1966272e5da6a0844d68369a0f43c286816c8b379dfd576cf835b8bc652089ef337b0334ff3ae6c9652d56d8332b78a7d29176534265c39856e4822 languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-computed-properties@npm:7.25.9" +"@babel/plugin-transform-computed-properties@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-computed-properties@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 - "@babel/template": ^7.25.9 + "@babel/helper-plugin-utils": ^7.28.6 + "@babel/template": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f77fa4bc0c1e0031068172df28852388db6b0f91c268d037905f459607cf1e8ebab00015f9f179f4ad96e11c5f381b635cd5dc4e147a48c7ac79d195ae7542de + checksum: fd1fcc55003a2584c7461bf214ae9e9fce370ad09339319e99e29e5e55a8a3bd485d10805b3d69636a738208761b3a5b0dafdd023534396be45a36409082b014 languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-destructuring@npm:7.25.9" +"@babel/plugin-transform-destructuring@npm:^7.28.0, @babel/plugin-transform-destructuring@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-transform-destructuring@npm:7.28.5" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/traverse": ^7.28.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 965f63077a904828f4adee91393f83644098533442b8217d5a135c23a759a4c252c714074c965676a60d2c33f610f579a4eeb59ffd783724393af61c0ca45fef + checksum: 74a06e55e715cfda0fdd8be53d2655d64dfdc28dffaede329d42548fd5b1449ad26a4ce43a24c3fd277b96f8b2010c7b3915afa8297911cda740cc5cc3a81f38 languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.25.9" +"@babel/plugin-transform-dotall-regex@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.28.6" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-create-regexp-features-plugin": ^7.28.5 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8bdf1bb9e6e3a2cc8154ae88a3872faa6dc346d6901994505fb43ac85f858728781f1219f40b67f7bb0687c507450236cb7838ac68d457e65637f98500aa161b + checksum: 866ffbbdee77fa955063b37c75593db8dbbe46b1ebb64cc788ea437e3a9aa41cb7b9afcee617c678a32b6705baa0892ec8e5d4b8af3bbb0ab1b254514ccdbd37 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.25.9" +"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b553eebc328797ead6be5ba5bdaf2f1222cea8a5bd33fb4ed625975d4f9b510bfb0d688d97e314cd4b4a48b279bea7b3634ad68c1b41ee143c3082db0ae74037 + checksum: ef2112d658338e3ff0827f39a53c0cfa211f1cbbe60363bca833a5269df389598ec965e7283600b46533c39cdca82307d0d69c0f518290ec5b00bb713044715b languageName: node linkType: hard -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.9" +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.28.6" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-create-regexp-features-plugin": ^7.28.5 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: f7233cf596be8c6843d31951afaf2464a62a610cb89c72c818c044765827fab78403ab8a7d3a6386f838c8df574668e2a48f6c206b1d7da965aff9c6886cb8e6 + checksum: 3f2e2b85199adfdc3297983412c2ecdacc0004bc5ac3263d29909219b8c5afa2ca49e3b6efc11ce67034d5780eef27882a94873444cf27d841d7fa7f01d7dcff languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.9" +"@babel/plugin-transform-dynamic-import@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: aaca1ccda819be9b2b85af47ba08ddd2210ff2dbea222f26e4cd33f97ab020884bf81a66197e50872721e9daf36ceb5659502c82199884ea74d5d75ecda5c58b + checksum: 7a9fbc8d17148b7f11a1d1ca3990d2c2cd44bd08a45dcaf14f20a017721235b9044b20e6168b6940282bb1b48fb78e6afbdfb9dd9d82fde614e15baa7d579932 languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.26.3": - version: 7.27.1 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.27.1" +"@babel/plugin-transform-explicit-resource-management@npm:^7.28.0": + version: 7.28.6 + resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-plugin-utils": ^7.28.6 + "@babel/plugin-transform-destructuring": ^7.28.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4ff4a0f30babc457a5ae8564deda209599627c2ce647284a0e8e66f65b44f6d968cf77761a4cc31b45b61693f0810479248c79e681681d8ccb39d0c52944c1fd + checksum: be65403694d360793b1b626ac0dfa7c120cfe4dd1c95a81a30b6e7426dc317643e60a486d642e318a4d3d9a7193e72fdb36e2ec140c25c773dcb9c3b1e2854ef languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.9" +"@babel/plugin-transform-exponentiation-operator@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4dfe8df86c5b1d085d591290874bb2d78a9063090d71567ed657a418010ad333c3f48af2c974b865f53bbb718987a065f89828d43279a7751db1a56c9229078d + checksum: b232152499370435c7cd4bf3321f58e189150e35ca3722ea16533d33434b97294df1342f5499671ec48e62b71c34cdea0ca8cf317ad12594a10f6fc670315e62 languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.26.9": +"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": version: 7.27.1 - resolution: "@babel/plugin-transform-for-of@npm:7.27.1" + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" dependencies: "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c9224e08de5d80b2c834383d4359aa9e519db434291711434dd996a4f86b7b664ad67b45d65459b7ec11fa582e3e11a3c769b8a8ca71594bdd4e2f0503f84126 + checksum: 85082923eca317094f08f4953d8ea2a6558b3117826c0b740676983902b7236df1f4213ad844cb38c2dae104753dbe8f1cc51f01567835d476d32f5f544a4385 languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-function-name@npm:7.25.9" +"@babel/plugin-transform-for-of@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-for-of@npm:7.27.1" dependencies: - "@babel/helper-compilation-targets": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 - "@babel/traverse": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a8d7c8d019a6eb57eab5ca1be3e3236f175557d55b1f3b11f8ad7999e3fbb1cf37905fd8cb3a349bffb4163a558e9f33b63f631597fdc97c858757deac1b2fd7 + checksum: c9224e08de5d80b2c834383d4359aa9e519db434291711434dd996a4f86b7b664ad67b45d65459b7ec11fa582e3e11a3c769b8a8ca71594bdd4e2f0503f84126 languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-json-strings@npm:7.25.9" +"@babel/plugin-transform-function-name@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-function-name@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-compilation-targets": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/traverse": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e2498d84761cfd05aaea53799933d55af309c9d6204e66b38778792d171e4d1311ad34f334259a3aa3407dd0446f6bd3e390a1fcb8ce2e42fe5aabed0e41bee1 + checksum: 26a2a183c3c52a96495967420a64afc5a09f743a230272a131668abf23001e393afa6371e6f8e6c60f4182bea210ed31d1caf866452d91009c1daac345a52f23 languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-literals@npm:7.25.9" +"@babel/plugin-transform-json-strings@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-json-strings@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3cca75823a38aab599bc151b0fa4d816b5e1b62d6e49c156aa90436deb6e13649f5505973151a10418b64f3f9d1c3da53e38a186402e0ed7ad98e482e70c0c14 + checksum: 69d82a1a0a72ed6e6f7969e09cf330516599d79b2b4e680e9dd3c57616a8c6af049b5103456e370ab56642815e80e46ed88bb81e9e059304a85c5fe0bf137c29 languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.9" +"@babel/plugin-transform-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-literals@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8c6febb4ac53852314d28b5e2c23d5dbbff7bf1e57d61f9672e0d97531ef7778b3f0ad698dcf1179f5486e626c77127508916a65eb846a89e98a92f70ed3537b + checksum: 0a76d12ab19f32dd139964aea7da48cecdb7de0b75e207e576f0f700121fe92367d788f328bf4fb44b8261a0f605c97b44e62ae61cddbb67b14e94c88b411f95 languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.9" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: db92041ae87b8f59f98b50359e0bb172480f6ba22e5e76b13bdfe07122cbf0daa9cd8ad2e78dcb47939938fed88ad57ab5989346f64b3a16953fc73dea3a9b1f + checksum: 36095d5d1cfc680e95298b5389a16016da800ae3379b130dabf557e94652c47b06610407e9fa44aaa03e9b0a5aa7b4b93348123985d44a45e369bf5f3497d149 languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-modules-amd@npm:7.25.9" +"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" dependencies: - "@babel/helper-module-transforms": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: baad1f6fd0e0d38e9a9c1086a06abdc014c4c653fd452337cadfe23fb5bd8bf4368d1bc433a5ac8e6421bc0732ebb7c044cf3fb39c1b7ebe967d66e26c4e5cec + checksum: 804121430a6dcd431e6ffe99c6d1fbbc44b43478113b79c677629e7f877b4f78a06b69c6bfb2747fd84ee91879fe2eb32e4620b53124603086cf5b727593ebe8 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.26.3": +"@babel/plugin-transform-modules-amd@npm:^7.27.1": version: 7.27.1 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.27.1" + resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" dependencies: "@babel/helper-module-transforms": ^7.27.1 "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bc45c1beff9b145c982bd6a614af338893d38bce18a9df7d658c9084e0d8114b286dcd0e015132ae7b15dd966153cb13321e4800df9766d0ddd892d22bf09d2a + checksum: 8bb36d448e438d5d30f4faf19120e8c18aa87730269e65d805bf6032824d175ed738057cc392c2c8a650028f1ae0f346cad8d6b723f31a037b586e2092a7be18 languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.9" +"@babel/plugin-transform-modules-commonjs@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.28.6" dependencies: - "@babel/helper-module-transforms": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 - "@babel/helper-validator-identifier": ^7.25.9 - "@babel/traverse": ^7.25.9 + "@babel/helper-module-transforms": ^7.28.6 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bf446202f372ba92dc0db32b24b56225b6e3ad3b227e31074de8b86fdec01c273ae2536873e38dbe3ceb1cd0894209343adeaa37df208e3fa88c0c7dffec7924 + checksum: b48cab26fda72894c7002a9c783befbc8a643d827c52bdcc5adf83e418ca93224a15aaf7ed2d1e6284627be55913696cfa2119242686cfa77a473bf79314df26 languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-modules-umd@npm:7.25.9" +"@babel/plugin-transform-modules-systemjs@npm:^7.27.1": + version: 7.28.5 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.28.5" dependencies: - "@babel/helper-module-transforms": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-module-transforms": ^7.28.3 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-validator-identifier": ^7.28.5 + "@babel/traverse": ^7.28.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 946db66be5f04ab9ee56c424b00257276ec094aa2f148508927e6085239f76b00304fa1e33026d29eccdbe312efea15ca3d92e74a12689d7f0cdd9a7ba1a6c54 + checksum: 646748dcf968c107fedfbff38aa37f7a9ebf2ccdf51fd9f578c6cd323371db36bbc5fe0d995544db168f39be9bca32a85fbf3bfff4742d2bed22e21c2847fa46 languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.9" +"@babel/plugin-transform-modules-umd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-module-transforms": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: - "@babel/core": ^7.0.0 - checksum: 434346ba05cf74e3f4704b3bdd439287b95cd2a8676afcdc607810b8c38b6f4798cd69c1419726b2e4c7204e62e4a04d31b0360e91ca57a930521c9211e07789 + "@babel/core": ^7.0.0-0 + checksum: b007dd89231f2eeccf1c71a85629bcb692573303977a4b1c5f19a835ea6b5142c18ef07849bc6d752b874a11bc0ddf3c67468b77c8ee8310290b688a4f01ef31 languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-new-target@npm:7.25.9" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-create-regexp-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f8113539919aafce52f07b2bd182c771a476fe1d5d96d813460b33a16f173f038929369c595572cadc1f7bd8cb816ce89439d056e007770ddd7b7a0878e7895f + "@babel/core": ^7.0.0 + checksum: a711c92d9753df26cefc1792481e5cbff4fe4f32b383d76b25e36fa865d8023b1b9aa6338cf18f5c0e864c71a7fbe8115e840872ccd61a914d9953849c68de7d languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.26.6": +"@babel/plugin-transform-new-target@npm:^7.27.1": version: 7.27.1 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.27.1" + resolution: "@babel/plugin-transform-new-target@npm:7.27.1" dependencies: "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1c6b3730748782d2178cc30f5cc37be7d7666148260f3f2dfc43999908bdd319bdfebaaf19cf04ac1f9dee0f7081093d3fa730cda5ae1b34bcd73ce406a78be7 + checksum: 32c8078d843bda001244509442d68fd3af088d7348ba883f45c262b2c817a27ffc553b0d78e7f7a763271b2ece7fac56151baad7a91fb21f5bb1d2f38e5acad7 languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.9" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 0528ef041ed88e8c3f51624ee87b8182a7f246fe4013f0572788e0727d20795b558f2b82e3989b5dd416cbd339500f0d88857de41b6d3b6fdacb1d5344bcc5b1 + checksum: 1cdd3ca48a8fffa13dbb9949748d3dd2183cf24110cd55d702da4549205611fc12978b49886be809ec1929ff6304ac4eecc747a33dca2484f9dc655928ab5a89 languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.9" +"@babel/plugin-transform-numeric-separator@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.28.6" dependencies: - "@babel/helper-compilation-targets": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 - "@babel/plugin-transform-parameters": ^7.25.9 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a8ff73e1c46a03056b3a2236bafd6b3a4b83da93afe7ee24a50d0a8088150bf85bc5e5977daa04e66ff5fb7613d02d63ad49b91ebb64cf3f3022598d722e3a7a + checksum: 4b5ca60e481e22f0842761a3badca17376a230b5a7e5482338604eb95836c2d0c9c9bde53bdc5c2de1c6a12ae6c12de7464d098bf74b0943f85905ca358f0b68 languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-object-super@npm:7.25.9" +"@babel/plugin-transform-object-rest-spread@npm:^7.28.0": + version: 7.28.6 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 - "@babel/helper-replace-supers": ^7.25.9 + "@babel/helper-compilation-targets": ^7.28.6 + "@babel/helper-plugin-utils": ^7.28.6 + "@babel/plugin-transform-destructuring": ^7.28.5 + "@babel/plugin-transform-parameters": ^7.27.7 + "@babel/traverse": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1817b5d8b80e451ae1ad9080cca884f4f16df75880a158947df76a2ed8ab404d567a7dce71dd8051ef95f90fbe3513154086a32aba55cc76027f6cbabfbd7f98 + checksum: ab85b1321f86db91aba22ad9d8e6ab65448c983214998012229f5302468527d27b908ad6b14755991c317e35d2f54ec8459a2a094a755999651fe0ac9bd2e9a6 languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.9" +"@babel/plugin-transform-object-super@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-object-super@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-replace-supers": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b46a8d1e91829f3db5c252583eb00d05a779b4660abeea5500fda0f8ffa3584fd18299443c22f7fddf0ed9dfdb73c782c43b445dc468d4f89803f2356963b406 + checksum: 46b819cb9a6cd3cfefe42d07875fee414f18d5e66040366ae856116db560ad4e16f3899a0a7fddd6773e0d1458444f94b208b67c0e3b6977a27ea17a5c13dbf6 languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.9" +"@babel/plugin-transform-optional-catch-binding@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 - "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f1642a7094456067e82b176e1e9fd426fda7ed9df54cb6d10109fc512b622bf4b3c83acc5875125732b8622565107fdbe2d60fe3ec8685e1d1c22c38c1b57782 + checksum: ee24a17defec056eb9ef01824d7e4a1f65d531af6b4b79acfd0bcb95ce0b47926e80c61897f36f8c01ce733b069c9acdb1c9ce5ec07a729d0dbf9e8d859fe992 languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-parameters@npm:7.25.9" +"@babel/plugin-transform-optional-chaining@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.28.6 + "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d7ba2a7d05edbc85aed741289b0ff3d6289a1c25d82ac4be32c565f88a66391f46631aad59ceeed40824037f7eeaa7a0de1998db491f50e65a565cd964f78786 + checksum: a40dbe709671a436bb69e14524805e10af81b44c422e4fc5dc905cb91adb92d650c9d266c3c2c0da0d410dea89ce784995d4118b7ab6a7544f4923e61590b386 languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-private-methods@npm:7.25.9" +"@babel/plugin-transform-parameters@npm:^7.27.7": + version: 7.27.7 + resolution: "@babel/plugin-transform-parameters@npm:7.27.7" dependencies: - "@babel/helper-create-class-features-plugin": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6e3671b352c267847c53a170a1937210fa8151764d70d25005e711ef9b21969aaf422acc14f9f7fb86bc0e4ec43e7aefcc0ad9196ae02d262ec10f509f126a58 + checksum: d51f195e1d6ac5d9fce583e9a70a5bfe403e62386e5eb06db9fbc6533f895a98ff7e7c3dcaa311a8e6fa7a9794466e81cdabcba6af9f59d787fb767bfe7868b4 languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.9" +"@babel/plugin-transform-private-methods@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-private-methods@npm:7.28.6" dependencies: - "@babel/helper-annotate-as-pure": ^7.25.9 - "@babel/helper-create-class-features-plugin": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-create-class-features-plugin": ^7.28.6 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9ce3e983fea9b9ba677c192aa065c0b42ebdc7774be4c02135df09029ad92a55c35b004650c75952cb64d650872ed18f13ab64422c6fc891d06333762caa8a0a + checksum: b80179b28f6a165674d0b0d6c6349b13a01dd282b18f56933423c0a33c23fc0626c8f011f859fc20737d021fe966eb8474a5233e4596401482e9ee7fb00e2aa2 languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-property-literals@npm:7.25.9" +"@babel/plugin-transform-private-property-in-object@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-annotate-as-pure": ^7.27.3 + "@babel/helper-create-class-features-plugin": ^7.28.6 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 436046ab07d54a9b44a384eeffec701d4e959a37a7547dda72e069e751ca7ff753d1782a8339e354b97c78a868b49ea97bf41bf5a44c6d7a3c0a05ad40eeb49c + checksum: 32a935e44872e90607851be5bc2cd3365f29c0e0e3853ef3e2b6a7da4d08c647379bf2f2dc4f14a9064d7d72e2cf75da85e55baeeec1ffc25cf6088fe24422f7 languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-regenerator@npm:7.25.9" +"@babel/plugin-transform-property-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 - regenerator-transform: ^0.15.2 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1c09e8087b476c5967282c9790fb8710e065eda77c60f6cb5da541edd59ded9d003d96f8ef640928faab4a0b35bf997673499a194973da4f0c97f0935807a482 + checksum: 7caec27d5ed8870895c9faf4f71def72745d69da0d8e77903146a4e135fd7bed5778f5f9cebb36c5fba86338e6194dd67a08c033fc84b4299b7eceab6d9630cb languageName: node linkType: hard -"@babel/plugin-transform-regexp-modifiers@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.26.0" +"@babel/plugin-transform-regenerator@npm:^7.28.3": + version: 7.28.6 + resolution: "@babel/plugin-transform-regenerator@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": ^7.28.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1c1e3149a14e2cb695483f69f4ec18d1b820b23fe3b766a1e2efdbc2af0ed8acea6ea9438e8bc1496aab51e598a824428cec28431f1c1ea21d9599b46bf4aa24 + languageName: node + linkType: hard + +"@babel/plugin-transform-regexp-modifiers@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.28.6" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-create-regexp-features-plugin": ^7.28.5 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: 726deca486bbd4b176f8a966eb0f4aabc19d9def3b8dabb8b3a656778eca0df1fda3f3c92b213aa5a184232fdafd5b7bd73b4e24ca4345c498ef6baff2bda4e1 + checksum: 5aacc570034c085afa0165137bb9a04cd4299b86eb9092933a96dcc1132c8f591d9d534419988f5f762b2f70d43a3c719a6b8fa05fdd3b2b1820d01cf85500da languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-reserved-words@npm:7.25.9" +"@babel/plugin-transform-reserved-words@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8beda04481b25767acbd1f6b9ef7b3a9c12fbd9dcb24df45a6ad120e1dc4b247c073db60ac742f9093657d6d8c050501fc0606af042f81a3bb6a3ff862cddc47 + checksum: dea0b66742d2863b369c06c053e11e15ba785892ea19cccf7aef3c1bdaa38b6ab082e19984c5ea7810d275d9445c5400fcc385ad71ce707ed9256fadb102af3b languageName: node linkType: hard -"@babel/plugin-transform-runtime@npm:7.26.10": - version: 7.26.10 - resolution: "@babel/plugin-transform-runtime@npm:7.26.10" +"@babel/plugin-transform-runtime@npm:7.28.3": + version: 7.28.3 + resolution: "@babel/plugin-transform-runtime@npm:7.28.3" dependencies: - "@babel/helper-module-imports": ^7.25.9 - "@babel/helper-plugin-utils": ^7.26.5 - babel-plugin-polyfill-corejs2: ^0.4.10 - babel-plugin-polyfill-corejs3: ^0.11.0 - babel-plugin-polyfill-regenerator: ^0.6.1 + "@babel/helper-module-imports": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 + babel-plugin-polyfill-corejs2: ^0.4.14 + babel-plugin-polyfill-corejs3: ^0.13.0 + babel-plugin-polyfill-regenerator: ^0.6.5 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f50096ebea8c6106db2906b4b73955139c7c338d86f4940ed329703b49848843cf7a1308cafd6f23f9fc9f35f5e835daba2bb56be991b91d2a4a8092c4a9943b + checksum: 63d2fc05d5bfcb96f31be54b095d72a89f0a03c8de10f5d742b18b174e2731bcdc27292e8deec66c2e88cebf8298393123d5e767526f6fffbc75cb8144ef66c6 languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.9" +"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f774995d58d4e3a992b732cf3a9b8823552d471040e280264dd15e0735433d51b468fef04d75853d061309389c66bda10ce1b298297ce83999220eb0ad62741d + checksum: fbba6e2aef0b69681acb68202aa249c0598e470cc0853d7ff5bd0171fd6a7ec31d77cfabcce9df6360fc8349eded7e4a65218c32551bd3fc0caaa1ac899ac6d4 languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-spread@npm:7.25.9" +"@babel/plugin-transform-spread@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-spread@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 - "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + "@babel/helper-plugin-utils": ^7.28.6 + "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2403a5d49171b7714d5e5ecb1f598c61575a4dbe5e33e5a5f08c0ea990b75e693ca1ea983b6a96b2e3e5e7da48c8238333f525e47498c53b577c5d094d964c06 + checksum: e4782578904df68f7d2b3e865f20701c71d6aba0027c4794c1dc08a2f805a12892a078dab483714552398a689ad4ff6786cdf4e088b073452aee7db67e37a09c languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.9" +"@babel/plugin-transform-sticky-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7454b00844dbe924030dd15e2b3615b36e196500c4c47e98dabc6b37a054c5b1038ecd437e910aabf0e43bf56b973cb148d3437d50f6e2332d8309568e3e979b + checksum: e1414a502efba92c7974681767e365a8cda6c5e9e5f33472a9eaa0ce2e75cea0a9bef881ff8dda37c7810ad902f98d3c00ead92a3ac3b73a79d011df85b5a189 languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.26.8": +"@babel/plugin-transform-template-literals@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" dependencies: @@ -1689,7 +1905,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.26.7": +"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" dependencies: @@ -1700,129 +1916,130 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.25.9" +"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: be067e07488d804e3e82d7771f23666539d2ae5af03bf6eb8480406adf3dabd776e60c1fd5c6078dc5714b73cd80bbaca70e71d4f5d154c5c57200581602ca2f + checksum: d817154bc10758ddd85b716e0bc1af1a1091e088400289ab6b78a1a4d609907ce3d2f1fd51a6fd0e0c8ecbb5f8e3aab4957e0747776d132d2379e85c3ef0520a languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.25.9" +"@babel/plugin-transform-unicode-property-regex@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.28.6" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-create-regexp-features-plugin": ^7.28.5 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 201f6f46c1beb399e79aa208b94c5d54412047511795ce1e790edcd189cef73752e6a099fdfc01b3ad12205f139ae344143b62f21f44bbe02338a95e8506a911 + checksum: d14e8c51aa73f592575c1543400fd67d96df6410d75c9dc10dd640fd7eecb37366a2f2368bbdd7529842532eda4af181c921bda95146c6d373c64ea59c6e9991 languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.9" +"@babel/plugin-transform-unicode-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-create-regexp-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e8baae867526e179467c6ef5280d70390fa7388f8763a19a27c21302dd59b121032568be080749514b097097ceb9af716bf4b90638f1b3cf689aa837ba20150f + checksum: a34d89a2b75fb78e66d97c3dc90d4877f7e31f43316b52176f95a5dee20e9bb56ecf158eafc42a001676ddf7b393d9e67650bad6b32f5405780f25fb83cd68e3 languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.9" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.28.6" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-create-regexp-features-plugin": ^7.28.5 + "@babel/helper-plugin-utils": ^7.28.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: 4445ef20de687cb4dcc95169742a8d9013d680aa5eee9186d8e25875bbfa7ee5e2de26a91177ccf70b1db518e36886abcd44750d28db5d7a9539f0efa6839f4b + checksum: 423971fe2eef9d18782b1c30f5f42613ee510e5b9c08760c5538a0997b36c34495acce261e0e37a27831f81330359230bd1f33c2e1822de70241002b45b7d68e languageName: node linkType: hard -"@babel/preset-env@npm:7.26.9": - version: 7.26.9 - resolution: "@babel/preset-env@npm:7.26.9" +"@babel/preset-env@npm:7.28.3": + version: 7.28.3 + resolution: "@babel/preset-env@npm:7.28.3" dependencies: - "@babel/compat-data": ^7.26.8 - "@babel/helper-compilation-targets": ^7.26.5 - "@babel/helper-plugin-utils": ^7.26.5 - "@babel/helper-validator-option": ^7.25.9 - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.25.9 - "@babel/plugin-bugfix-safari-class-field-initializer-scope": ^7.25.9 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.25.9 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.25.9 - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.25.9 + "@babel/compat-data": ^7.28.0 + "@babel/helper-compilation-targets": ^7.27.2 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-validator-option": ^7.27.1 + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.27.1 + "@babel/plugin-bugfix-safari-class-field-initializer-scope": ^7.27.1 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.27.1 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.27.1 + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.28.3 "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 - "@babel/plugin-syntax-import-assertions": ^7.26.0 - "@babel/plugin-syntax-import-attributes": ^7.26.0 + "@babel/plugin-syntax-import-assertions": ^7.27.1 + "@babel/plugin-syntax-import-attributes": ^7.27.1 "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 - "@babel/plugin-transform-arrow-functions": ^7.25.9 - "@babel/plugin-transform-async-generator-functions": ^7.26.8 - "@babel/plugin-transform-async-to-generator": ^7.25.9 - "@babel/plugin-transform-block-scoped-functions": ^7.26.5 - "@babel/plugin-transform-block-scoping": ^7.25.9 - "@babel/plugin-transform-class-properties": ^7.25.9 - "@babel/plugin-transform-class-static-block": ^7.26.0 - "@babel/plugin-transform-classes": ^7.25.9 - "@babel/plugin-transform-computed-properties": ^7.25.9 - "@babel/plugin-transform-destructuring": ^7.25.9 - "@babel/plugin-transform-dotall-regex": ^7.25.9 - "@babel/plugin-transform-duplicate-keys": ^7.25.9 - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ^7.25.9 - "@babel/plugin-transform-dynamic-import": ^7.25.9 - "@babel/plugin-transform-exponentiation-operator": ^7.26.3 - "@babel/plugin-transform-export-namespace-from": ^7.25.9 - "@babel/plugin-transform-for-of": ^7.26.9 - "@babel/plugin-transform-function-name": ^7.25.9 - "@babel/plugin-transform-json-strings": ^7.25.9 - "@babel/plugin-transform-literals": ^7.25.9 - "@babel/plugin-transform-logical-assignment-operators": ^7.25.9 - "@babel/plugin-transform-member-expression-literals": ^7.25.9 - "@babel/plugin-transform-modules-amd": ^7.25.9 - "@babel/plugin-transform-modules-commonjs": ^7.26.3 - "@babel/plugin-transform-modules-systemjs": ^7.25.9 - "@babel/plugin-transform-modules-umd": ^7.25.9 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.25.9 - "@babel/plugin-transform-new-target": ^7.25.9 - "@babel/plugin-transform-nullish-coalescing-operator": ^7.26.6 - "@babel/plugin-transform-numeric-separator": ^7.25.9 - "@babel/plugin-transform-object-rest-spread": ^7.25.9 - "@babel/plugin-transform-object-super": ^7.25.9 - "@babel/plugin-transform-optional-catch-binding": ^7.25.9 - "@babel/plugin-transform-optional-chaining": ^7.25.9 - "@babel/plugin-transform-parameters": ^7.25.9 - "@babel/plugin-transform-private-methods": ^7.25.9 - "@babel/plugin-transform-private-property-in-object": ^7.25.9 - "@babel/plugin-transform-property-literals": ^7.25.9 - "@babel/plugin-transform-regenerator": ^7.25.9 - "@babel/plugin-transform-regexp-modifiers": ^7.26.0 - "@babel/plugin-transform-reserved-words": ^7.25.9 - "@babel/plugin-transform-shorthand-properties": ^7.25.9 - "@babel/plugin-transform-spread": ^7.25.9 - "@babel/plugin-transform-sticky-regex": ^7.25.9 - "@babel/plugin-transform-template-literals": ^7.26.8 - "@babel/plugin-transform-typeof-symbol": ^7.26.7 - "@babel/plugin-transform-unicode-escapes": ^7.25.9 - "@babel/plugin-transform-unicode-property-regex": ^7.25.9 - "@babel/plugin-transform-unicode-regex": ^7.25.9 - "@babel/plugin-transform-unicode-sets-regex": ^7.25.9 + "@babel/plugin-transform-arrow-functions": ^7.27.1 + "@babel/plugin-transform-async-generator-functions": ^7.28.0 + "@babel/plugin-transform-async-to-generator": ^7.27.1 + "@babel/plugin-transform-block-scoped-functions": ^7.27.1 + "@babel/plugin-transform-block-scoping": ^7.28.0 + "@babel/plugin-transform-class-properties": ^7.27.1 + "@babel/plugin-transform-class-static-block": ^7.28.3 + "@babel/plugin-transform-classes": ^7.28.3 + "@babel/plugin-transform-computed-properties": ^7.27.1 + "@babel/plugin-transform-destructuring": ^7.28.0 + "@babel/plugin-transform-dotall-regex": ^7.27.1 + "@babel/plugin-transform-duplicate-keys": ^7.27.1 + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ^7.27.1 + "@babel/plugin-transform-dynamic-import": ^7.27.1 + "@babel/plugin-transform-explicit-resource-management": ^7.28.0 + "@babel/plugin-transform-exponentiation-operator": ^7.27.1 + "@babel/plugin-transform-export-namespace-from": ^7.27.1 + "@babel/plugin-transform-for-of": ^7.27.1 + "@babel/plugin-transform-function-name": ^7.27.1 + "@babel/plugin-transform-json-strings": ^7.27.1 + "@babel/plugin-transform-literals": ^7.27.1 + "@babel/plugin-transform-logical-assignment-operators": ^7.27.1 + "@babel/plugin-transform-member-expression-literals": ^7.27.1 + "@babel/plugin-transform-modules-amd": ^7.27.1 + "@babel/plugin-transform-modules-commonjs": ^7.27.1 + "@babel/plugin-transform-modules-systemjs": ^7.27.1 + "@babel/plugin-transform-modules-umd": ^7.27.1 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.27.1 + "@babel/plugin-transform-new-target": ^7.27.1 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.27.1 + "@babel/plugin-transform-numeric-separator": ^7.27.1 + "@babel/plugin-transform-object-rest-spread": ^7.28.0 + "@babel/plugin-transform-object-super": ^7.27.1 + "@babel/plugin-transform-optional-catch-binding": ^7.27.1 + "@babel/plugin-transform-optional-chaining": ^7.27.1 + "@babel/plugin-transform-parameters": ^7.27.7 + "@babel/plugin-transform-private-methods": ^7.27.1 + "@babel/plugin-transform-private-property-in-object": ^7.27.1 + "@babel/plugin-transform-property-literals": ^7.27.1 + "@babel/plugin-transform-regenerator": ^7.28.3 + "@babel/plugin-transform-regexp-modifiers": ^7.27.1 + "@babel/plugin-transform-reserved-words": ^7.27.1 + "@babel/plugin-transform-shorthand-properties": ^7.27.1 + "@babel/plugin-transform-spread": ^7.27.1 + "@babel/plugin-transform-sticky-regex": ^7.27.1 + "@babel/plugin-transform-template-literals": ^7.27.1 + "@babel/plugin-transform-typeof-symbol": ^7.27.1 + "@babel/plugin-transform-unicode-escapes": ^7.27.1 + "@babel/plugin-transform-unicode-property-regex": ^7.27.1 + "@babel/plugin-transform-unicode-regex": ^7.27.1 + "@babel/plugin-transform-unicode-sets-regex": ^7.27.1 "@babel/preset-modules": 0.1.6-no-external-plugins - babel-plugin-polyfill-corejs2: ^0.4.10 - babel-plugin-polyfill-corejs3: ^0.11.0 - babel-plugin-polyfill-regenerator: ^0.6.1 - core-js-compat: ^3.40.0 + babel-plugin-polyfill-corejs2: ^0.4.14 + babel-plugin-polyfill-corejs3: ^0.13.0 + babel-plugin-polyfill-regenerator: ^0.6.5 + core-js-compat: ^3.43.0 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7a657f947d069b7a27b02258012ce3ceb9383a8c10c249d4a3565c486294c3fe63ed08128ca3d124444d17eb821cfbf64a91fe8160af2e39f70d5cd2232f079e + checksum: c4e70f69b727d21eedd4de201ac082e951482f2d28a388e401e7937fd6f15bc1a49a63c12f59e87a18d237ac037a5b29d983f3bb82f1196d6444ae5b605ac6e2 languageName: node linkType: hard @@ -1839,7 +2056,14 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:7.26.10, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.8.4": +"@babel/runtime@npm:7.28.3": + version: 7.28.3 + resolution: "@babel/runtime@npm:7.28.3" + checksum: dd22662b9e02b6e66cfb061d6f9730eb0aa3b3a390a7bd70fe9a64116d86a3704df6d54ab978cb4acc13b58dbf63a3d7dd4616b0b87030eb14a22835e0aa602d + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.21.0": version: 7.26.10 resolution: "@babel/runtime@npm:7.26.10" dependencies: @@ -1859,7 +2083,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.26.9, @babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2": +"@babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2": version: 7.27.2 resolution: "@babel/template@npm:7.27.2" dependencies: @@ -1870,6 +2094,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/template@npm:7.28.6" + dependencies: + "@babel/code-frame": ^7.28.6 + "@babel/parser": ^7.28.6 + "@babel/types": ^7.28.6 + checksum: 8ab6383053e226025d9491a6e795293f2140482d14f60c1244bece6bf53610ed1e251d5e164de66adab765629881c7d9416e1e540c716541d2fd0f8f36a013d7 + languageName: node + linkType: hard + "@babel/traverse@npm:^7.25.9": version: 7.26.4 resolution: "@babel/traverse@npm:7.26.4" @@ -1885,7 +2120,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.26.10, @babel/traverse@npm:^7.26.8, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0": +"@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0": version: 7.28.0 resolution: "@babel/traverse@npm:7.28.0" dependencies: @@ -1900,6 +2135,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.28.3, @babel/traverse@npm:^7.28.5, @babel/traverse@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/traverse@npm:7.28.6" + dependencies: + "@babel/code-frame": ^7.28.6 + "@babel/generator": ^7.28.6 + "@babel/helper-globals": ^7.28.0 + "@babel/parser": ^7.28.6 + "@babel/template": ^7.28.6 + "@babel/types": ^7.28.6 + debug: ^4.3.1 + checksum: 07bc23b720d111a20382fcdba776b800a7c1f94e35f8e4f417869f6769ba67c2b9573c8240924ca3b0ee5a88fa7ed048efb289e8b324f5cb4971e771174a0d32 + languageName: node + linkType: hard + "@babel/types@npm:^7.24.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.3, @babel/types@npm:^7.4.4": version: 7.26.3 resolution: "@babel/types@npm:7.26.3" @@ -1910,7 +2160,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.26.10, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.0, @babel/types@npm:^7.28.2": +"@babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.0, @babel/types@npm:^7.28.2": version: 7.28.2 resolution: "@babel/types@npm:7.28.2" dependencies: @@ -1920,6 +2170,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.28.5, @babel/types@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/types@npm:7.28.6" + dependencies: + "@babel/helper-string-parser": ^7.27.1 + "@babel/helper-validator-identifier": ^7.28.5 + checksum: f76556cda59be337cc10dc68b2a9a947c10de018998bab41076e7b7e4489b28dd53299f98f22eec0774264c989515e6fdc56de91c73e3aa396367bb953200a6a + languageName: node + linkType: hard + "@braintree/sanitize-url@npm:^7.1.1": version: 7.1.1 resolution: "@braintree/sanitize-url@npm:7.1.1" @@ -2047,13 +2307,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/aix-ppc64@npm:0.25.4" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/aix-ppc64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/aix-ppc64@npm:0.25.8" @@ -2061,10 +2314,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/android-arm64@npm:0.25.4" - conditions: os=android & cpu=arm64 +"@esbuild/aix-ppc64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/aix-ppc64@npm:0.25.9" + conditions: os=aix & cpu=ppc64 languageName: node linkType: hard @@ -2075,10 +2328,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/android-arm@npm:0.25.4" - conditions: os=android & cpu=arm +"@esbuild/android-arm64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/android-arm64@npm:0.25.9" + conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -2089,10 +2342,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/android-x64@npm:0.25.4" - conditions: os=android & cpu=x64 +"@esbuild/android-arm@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/android-arm@npm:0.25.9" + conditions: os=android & cpu=arm languageName: node linkType: hard @@ -2103,10 +2356,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/darwin-arm64@npm:0.25.4" - conditions: os=darwin & cpu=arm64 +"@esbuild/android-x64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/android-x64@npm:0.25.9" + conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -2117,10 +2370,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/darwin-x64@npm:0.25.4" - conditions: os=darwin & cpu=x64 +"@esbuild/darwin-arm64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/darwin-arm64@npm:0.25.9" + conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -2131,10 +2384,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/freebsd-arm64@npm:0.25.4" - conditions: os=freebsd & cpu=arm64 +"@esbuild/darwin-x64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/darwin-x64@npm:0.25.9" + conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -2145,10 +2398,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/freebsd-x64@npm:0.25.4" - conditions: os=freebsd & cpu=x64 +"@esbuild/freebsd-arm64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/freebsd-arm64@npm:0.25.9" + conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -2159,10 +2412,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/linux-arm64@npm:0.25.4" - conditions: os=linux & cpu=arm64 +"@esbuild/freebsd-x64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/freebsd-x64@npm:0.25.9" + conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -2173,10 +2426,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/linux-arm@npm:0.25.4" - conditions: os=linux & cpu=arm +"@esbuild/linux-arm64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/linux-arm64@npm:0.25.9" + conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -2187,10 +2440,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/linux-ia32@npm:0.25.4" - conditions: os=linux & cpu=ia32 +"@esbuild/linux-arm@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/linux-arm@npm:0.25.9" + conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -2201,10 +2454,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/linux-loong64@npm:0.25.4" - conditions: os=linux & cpu=loong64 +"@esbuild/linux-ia32@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/linux-ia32@npm:0.25.9" + conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -2215,10 +2468,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/linux-mips64el@npm:0.25.4" - conditions: os=linux & cpu=mips64el +"@esbuild/linux-loong64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/linux-loong64@npm:0.25.9" + conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -2229,10 +2482,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/linux-ppc64@npm:0.25.4" - conditions: os=linux & cpu=ppc64 +"@esbuild/linux-mips64el@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/linux-mips64el@npm:0.25.9" + conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -2243,10 +2496,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/linux-riscv64@npm:0.25.4" - conditions: os=linux & cpu=riscv64 +"@esbuild/linux-ppc64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/linux-ppc64@npm:0.25.9" + conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -2257,10 +2510,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/linux-s390x@npm:0.25.4" - conditions: os=linux & cpu=s390x +"@esbuild/linux-riscv64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/linux-riscv64@npm:0.25.9" + conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -2271,10 +2524,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/linux-x64@npm:0.25.4" - conditions: os=linux & cpu=x64 +"@esbuild/linux-s390x@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/linux-s390x@npm:0.25.9" + conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -2285,10 +2538,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-arm64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/netbsd-arm64@npm:0.25.4" - conditions: os=netbsd & cpu=arm64 +"@esbuild/linux-x64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/linux-x64@npm:0.25.9" + conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -2299,10 +2552,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/netbsd-x64@npm:0.25.4" - conditions: os=netbsd & cpu=x64 +"@esbuild/netbsd-arm64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/netbsd-arm64@npm:0.25.9" + conditions: os=netbsd & cpu=arm64 languageName: node linkType: hard @@ -2313,10 +2566,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/openbsd-arm64@npm:0.25.4" - conditions: os=openbsd & cpu=arm64 +"@esbuild/netbsd-x64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/netbsd-x64@npm:0.25.9" + conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -2327,10 +2580,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/openbsd-x64@npm:0.25.4" - conditions: os=openbsd & cpu=x64 +"@esbuild/openbsd-arm64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/openbsd-arm64@npm:0.25.9" + conditions: os=openbsd & cpu=arm64 languageName: node linkType: hard @@ -2341,6 +2594,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/openbsd-x64@npm:0.25.9" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openharmony-arm64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/openharmony-arm64@npm:0.25.8" @@ -2348,10 +2608,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/sunos-x64@npm:0.25.4" - conditions: os=sunos & cpu=x64 +"@esbuild/openharmony-arm64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/openharmony-arm64@npm:0.25.9" + conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard @@ -2362,10 +2622,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/win32-arm64@npm:0.25.4" - conditions: os=win32 & cpu=arm64 +"@esbuild/sunos-x64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/sunos-x64@npm:0.25.9" + conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -2376,10 +2636,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/win32-ia32@npm:0.25.4" - conditions: os=win32 & cpu=ia32 +"@esbuild/win32-arm64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/win32-arm64@npm:0.25.9" + conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -2390,10 +2650,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.25.4": - version: 0.25.4 - resolution: "@esbuild/win32-x64@npm:0.25.4" - conditions: os=win32 & cpu=x64 +"@esbuild/win32-ia32@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/win32-ia32@npm:0.25.9" + conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -2404,6 +2664,22 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.25.9": + version: 0.25.9 + resolution: "@esbuild/win32-x64@npm:0.25.9" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@hono/node-server@npm:^1.19.7": + version: 1.19.8 + resolution: "@hono/node-server@npm:1.19.8" + peerDependencies: + hono: ^4 + checksum: cac312f99a25408aac8fcb0852817a807afc326ea670e7a6cbfcf12c6ea891bd131b07465512c8212771faf41bf53d517925cde4aff95a258fb36a017c9f903d + languageName: node + linkType: hard + "@iconify/types@npm:^2.0.0": version: 2.0.0 resolution: "@iconify/types@npm:2.0.0" @@ -2427,244 +2703,269 @@ __metadata: languageName: node linkType: hard -"@inquirer/checkbox@npm:^4.0.2": - version: 4.0.3 - resolution: "@inquirer/checkbox@npm:4.0.3" - dependencies: - "@inquirer/core": ^10.1.1 - "@inquirer/figures": ^1.0.8 - "@inquirer/type": ^3.0.1 - ansi-escapes: ^4.3.2 - yoctocolors-cjs: ^2.1.2 - peerDependencies: - "@types/node": ">=18" - checksum: 109417dfec9a8a8d6f049468e5d5cb885f564ec186f4853c7a44230805d6ced509fa8a055f63042834bd9813129a6d20c8eaabc64b89f942ff4eb28325b164b3 +"@inquirer/ansi@npm:^1.0.2": + version: 1.0.2 + resolution: "@inquirer/ansi@npm:1.0.2" + checksum: d1496e573a63ee6752bcf3fc93375cdabc55b0d60f0588fe7902282c710b223252ad318ff600ee904e48555634663b53fda517f5b29ce9fbda90bfae18592fbc languageName: node linkType: hard -"@inquirer/confirm@npm:5.1.6": - version: 5.1.6 - resolution: "@inquirer/confirm@npm:5.1.6" +"@inquirer/checkbox@npm:^4.2.1": + version: 4.3.2 + resolution: "@inquirer/checkbox@npm:4.3.2" dependencies: - "@inquirer/core": ^10.1.7 - "@inquirer/type": ^3.0.4 + "@inquirer/ansi": ^1.0.2 + "@inquirer/core": ^10.3.2 + "@inquirer/figures": ^1.0.15 + "@inquirer/type": ^3.0.10 + yoctocolors-cjs: ^2.1.3 peerDependencies: "@types/node": ">=18" peerDependenciesMeta: "@types/node": optional: true - checksum: 445314a5472a4df2a95f8e44a0d214ed89b13344077433e29b28933f6d360fda567bed4b7cbdb32a97fca52be2ad2f655f4103f6aaa43c37a40ab53b150251e8 + checksum: cc632a15a6bab120aecba9dfbdd80b2f6a20875cc6f145918adf5b7a4c77fd778eb6fc620157640992d1c09f70e265a75caf0beb8b4b605adb830d936cbb5287 languageName: node linkType: hard -"@inquirer/confirm@npm:^5.0.2": - version: 5.1.0 - resolution: "@inquirer/confirm@npm:5.1.0" +"@inquirer/confirm@npm:5.1.14": + version: 5.1.14 + resolution: "@inquirer/confirm@npm:5.1.14" dependencies: - "@inquirer/core": ^10.1.1 - "@inquirer/type": ^3.0.1 + "@inquirer/core": ^10.1.15 + "@inquirer/type": ^3.0.8 peerDependencies: "@types/node": ">=18" - checksum: b38187a61c4dd8f1784c6807dbef1022fb476fe36a7fa843b53abfac8919da7d63a1946ae0797b8471318c57aab8549ac3d54f1db1db559b79e4a0a3470f0931 + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 18e56ca1a46bd7b03064cc01b467f9c699d0c27abdccafb14174192875d7a39a1802eb968386f33668303a28b0b1859dac07ac0323422c35a62f5a80a0987a7a languageName: node linkType: hard -"@inquirer/core@npm:^10.1.1": - version: 10.1.1 - resolution: "@inquirer/core@npm:10.1.1" +"@inquirer/confirm@npm:^5.1.14": + version: 5.1.21 + resolution: "@inquirer/confirm@npm:5.1.21" dependencies: - "@inquirer/figures": ^1.0.8 - "@inquirer/type": ^3.0.1 - ansi-escapes: ^4.3.2 - cli-width: ^4.1.0 - mute-stream: ^2.0.0 - signal-exit: ^4.1.0 - strip-ansi: ^6.0.1 - wrap-ansi: ^6.2.0 - yoctocolors-cjs: ^2.1.2 - checksum: e9863a99fe09580f24275863d0fc5a70b831e3354af80cbb1e04f026c9f2ddc7caf5a5b67b9ab9e5aefe1ad0067b39784b2cabee53a96811002462e10a59940b + "@inquirer/core": ^10.3.2 + "@inquirer/type": ^3.0.10 + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: a107aa0073965ea510affb9e5b55baf40333503d600970c458c07770cd4e0eee01efc4caba66f0409b0fadc9550d127329622efb543cffcabff3ad0e7f865372 languageName: node linkType: hard -"@inquirer/core@npm:^10.1.7": - version: 10.1.15 - resolution: "@inquirer/core@npm:10.1.15" +"@inquirer/core@npm:^10.1.15, @inquirer/core@npm:^10.3.2": + version: 10.3.2 + resolution: "@inquirer/core@npm:10.3.2" dependencies: - "@inquirer/figures": ^1.0.13 - "@inquirer/type": ^3.0.8 - ansi-escapes: ^4.3.2 + "@inquirer/ansi": ^1.0.2 + "@inquirer/figures": ^1.0.15 + "@inquirer/type": ^3.0.10 cli-width: ^4.1.0 mute-stream: ^2.0.0 signal-exit: ^4.1.0 wrap-ansi: ^6.2.0 - yoctocolors-cjs: ^2.1.2 + yoctocolors-cjs: ^2.1.3 peerDependencies: "@types/node": ">=18" peerDependenciesMeta: "@types/node": optional: true - checksum: 84b262dcdb7c4c800e65d79aa87b1c6449b2ccade5797a53e6e2d07d1f54db8bc4e3a529c87dfb20b5bb69f0dd46077582b2394aed1a44f3b79a67b402c990d3 + checksum: ca820e798e02b1d4aff2ad4a8057739abf4140918592ff8ab179f774cdbe51916f24267631e86741a85a48cfa1a08666149785b5e2437ca4b18ef10938486017 languageName: node linkType: hard -"@inquirer/editor@npm:^4.1.0": - version: 4.2.0 - resolution: "@inquirer/editor@npm:4.2.0" +"@inquirer/editor@npm:^4.2.17": + version: 4.2.23 + resolution: "@inquirer/editor@npm:4.2.23" dependencies: - "@inquirer/core": ^10.1.1 - "@inquirer/type": ^3.0.1 - external-editor: ^3.1.0 + "@inquirer/core": ^10.3.2 + "@inquirer/external-editor": ^1.0.3 + "@inquirer/type": ^3.0.10 peerDependencies: "@types/node": ">=18" - checksum: 59bf05c54625b0082f27cdf4c4deaa2fd99508fa800dff29be6a5bc27037f022341e1b56ff88f5414666f30fafaca9dc15b1c92556faa4ed896715e00898027b + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 1b533213f89feae3b1ef9fe2b6c2345de812a6b4196462555fcb8f657ee9383341a5ec71c4ea1c61c7ad39738f60622ccea496b29340aa16bd3821860c2b55c0 languageName: node linkType: hard -"@inquirer/expand@npm:^4.0.2": - version: 4.0.3 - resolution: "@inquirer/expand@npm:4.0.3" +"@inquirer/expand@npm:^4.0.17": + version: 4.0.23 + resolution: "@inquirer/expand@npm:4.0.23" dependencies: - "@inquirer/core": ^10.1.1 - "@inquirer/type": ^3.0.1 - yoctocolors-cjs: ^2.1.2 + "@inquirer/core": ^10.3.2 + "@inquirer/type": ^3.0.10 + yoctocolors-cjs: ^2.1.3 peerDependencies: "@types/node": ">=18" - checksum: 81999766350baee07f6eea74a81bac6023e41d4adfc6d27784146c85d21ecd95fbcef1b845a7ae9a906302b9cc25e445a790d769290c20ff8a1bcb959c871dc3 + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 73ad1d6376e5efe2a452c33494d6d16ee2670c638ae470a795fdff4acb59a8e032e38e141f87b603b6e96320977519b375dac6471d86d5e3087a9c1db40e3111 languageName: node linkType: hard -"@inquirer/figures@npm:^1.0.13": - version: 1.0.13 - resolution: "@inquirer/figures@npm:1.0.13" - checksum: 1042cbefad8c69b004396ce6be2d0b135c303317d870ddd0cee75bac429fc7c7f577bac9e3c1ec1cd3668a709f49a591edb2f714193778e7d7b140a622f2a1ef +"@inquirer/external-editor@npm:^1.0.3": + version: 1.0.3 + resolution: "@inquirer/external-editor@npm:1.0.3" + dependencies: + chardet: ^2.1.1 + iconv-lite: ^0.7.0 + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 9bd7a05247a00408c194648c74046d8a212df1e6b9fe0879b945ebfc35c2524e995e43f7ecd83f14d0bd4e31f985d18819efc31c27810e2c2b838ded7261431f languageName: node linkType: hard -"@inquirer/figures@npm:^1.0.8": - version: 1.0.8 - resolution: "@inquirer/figures@npm:1.0.8" - checksum: 24c5c70f49a5f0e9d38f5552fb6936c258d2fc545f6a4944b17ba357c9ca4a729e8cffd77666971554ebc2a57948cfe5003331271a259c406b3f2de0e9c559b7 +"@inquirer/figures@npm:^1.0.15": + version: 1.0.15 + resolution: "@inquirer/figures@npm:1.0.15" + checksum: bd87a578ab667236cb72bdbb900cb144017dbc306d60e9dc7e665cd7d6b3097e9464cb4d8fe215315083a7820530caf86d7af59e7c41a35a555fb22a881913ad languageName: node linkType: hard -"@inquirer/input@npm:^4.0.2": - version: 4.1.0 - resolution: "@inquirer/input@npm:4.1.0" +"@inquirer/input@npm:^4.2.1": + version: 4.3.1 + resolution: "@inquirer/input@npm:4.3.1" dependencies: - "@inquirer/core": ^10.1.1 - "@inquirer/type": ^3.0.1 + "@inquirer/core": ^10.3.2 + "@inquirer/type": ^3.0.10 peerDependencies: "@types/node": ">=18" - checksum: f0c379d6e941cff1e89da27d5ae4578d19e6ae73e980987c8e6d146b363abac3785abfc0bb54ebaa401528e9449784fdaca75a7f69b2f1fe81a024388efc49f5 + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 41956840a8b2832db6557d14e80bff2c7baf733bbd6c583b5caf10dbe7f3a11578c1a5478d2fa82f38dd53c81277a0cfaa48e634288730540043d02c80ac4556 languageName: node linkType: hard -"@inquirer/number@npm:^3.0.2": - version: 3.0.3 - resolution: "@inquirer/number@npm:3.0.3" +"@inquirer/number@npm:^3.0.17": + version: 3.0.23 + resolution: "@inquirer/number@npm:3.0.23" dependencies: - "@inquirer/core": ^10.1.1 - "@inquirer/type": ^3.0.1 + "@inquirer/core": ^10.3.2 + "@inquirer/type": ^3.0.10 peerDependencies: "@types/node": ">=18" - checksum: c8f159e0b6ddfdda18a00a6a41cff53d45a047a83841036c305432ec793bcc106458d6adfaee58cf3618deaca505626d063e6221cfae42b9e90b669e34da6d32 + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 747db315fce9a95495f50dad38efa7041112caf78bcdfaa62529063dd87b839446acdcf5c8fdf64fc55dd4f80919aa6196813c145ca8e05112723f0cf2312ef7 languageName: node linkType: hard -"@inquirer/password@npm:^4.0.2": - version: 4.0.3 - resolution: "@inquirer/password@npm:4.0.3" +"@inquirer/password@npm:^4.0.17": + version: 4.0.23 + resolution: "@inquirer/password@npm:4.0.23" dependencies: - "@inquirer/core": ^10.1.1 - "@inquirer/type": ^3.0.1 - ansi-escapes: ^4.3.2 + "@inquirer/ansi": ^1.0.2 + "@inquirer/core": ^10.3.2 + "@inquirer/type": ^3.0.10 peerDependencies: "@types/node": ">=18" - checksum: 7bfd97746d66fe7f75755604eabb72b011fa903a4640d428bf7c2d877bf98445a6171da35521aed5ee9f9df8de0bfa4fc50431520a8589c092ab60c84d057c88 + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 97364970b01c85946a4a50ad876c53ef0c1857a9144e24fad65e5dfa4b4e5dd42564fbcdfa2b49bb049a25d127efbe0882cb18afcdd47b166ebd01c6c4b5e825 languageName: node linkType: hard -"@inquirer/prompts@npm:7.1.0": - version: 7.1.0 - resolution: "@inquirer/prompts@npm:7.1.0" - dependencies: - "@inquirer/checkbox": ^4.0.2 - "@inquirer/confirm": ^5.0.2 - "@inquirer/editor": ^4.1.0 - "@inquirer/expand": ^4.0.2 - "@inquirer/input": ^4.0.2 - "@inquirer/number": ^3.0.2 - "@inquirer/password": ^4.0.2 - "@inquirer/rawlist": ^4.0.2 - "@inquirer/search": ^3.0.2 - "@inquirer/select": ^4.0.2 +"@inquirer/prompts@npm:7.8.2": + version: 7.8.2 + resolution: "@inquirer/prompts@npm:7.8.2" + dependencies: + "@inquirer/checkbox": ^4.2.1 + "@inquirer/confirm": ^5.1.14 + "@inquirer/editor": ^4.2.17 + "@inquirer/expand": ^4.0.17 + "@inquirer/input": ^4.2.1 + "@inquirer/number": ^3.0.17 + "@inquirer/password": ^4.0.17 + "@inquirer/rawlist": ^4.1.5 + "@inquirer/search": ^3.1.0 + "@inquirer/select": ^4.3.1 peerDependencies: "@types/node": ">=18" - checksum: b44f4b3ce923bb1824be37676aa85a54fe921bc1147ffa57df9a8b83d0b0bc2a9e257109170e216121add82f4d45a4556f37360ede0083f3e7e553fc93b26b77 + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 17e51e8d55bc9df117a24da77e52e48cc16123fcdf55a320d1b9cb54609766a8a13daffc5799229024caf6675d40ee118188d40ca8d065915be78d566773a950 languageName: node linkType: hard -"@inquirer/rawlist@npm:^4.0.2": - version: 4.0.3 - resolution: "@inquirer/rawlist@npm:4.0.3" +"@inquirer/rawlist@npm:^4.1.5": + version: 4.1.11 + resolution: "@inquirer/rawlist@npm:4.1.11" dependencies: - "@inquirer/core": ^10.1.1 - "@inquirer/type": ^3.0.1 - yoctocolors-cjs: ^2.1.2 + "@inquirer/core": ^10.3.2 + "@inquirer/type": ^3.0.10 + yoctocolors-cjs: ^2.1.3 peerDependencies: "@types/node": ">=18" - checksum: 47c33bd1d33859aeaca21e1f54bc306d08c1c78cb974895bfd4370724051c0ef6f6c0c31de6c4859ec603e379d5e5c52839c67db7d691a2919f8b95f6a9b2830 + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 0d8f6484cfc20749190e95eecfb2d034bafb3644ec4907b84b1673646f5dd71730e38e35565ea98dfd240d8851e3cff653edafcc4e0af617054b127b407e3229 languageName: node linkType: hard -"@inquirer/search@npm:^3.0.2": - version: 3.0.3 - resolution: "@inquirer/search@npm:3.0.3" +"@inquirer/search@npm:^3.1.0": + version: 3.2.2 + resolution: "@inquirer/search@npm:3.2.2" dependencies: - "@inquirer/core": ^10.1.1 - "@inquirer/figures": ^1.0.8 - "@inquirer/type": ^3.0.1 - yoctocolors-cjs: ^2.1.2 + "@inquirer/core": ^10.3.2 + "@inquirer/figures": ^1.0.15 + "@inquirer/type": ^3.0.10 + yoctocolors-cjs: ^2.1.3 peerDependencies: "@types/node": ">=18" - checksum: b470a48abbc8fc51f4a5f1a4f1a0fac489d896e30dee20a59b55bd2cda2fdb0af8c8a03d4e65abe4310cd6e78ad0d976fed37876997c1695568566789aa4414d + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 8259262fdd6f438d73721197b0338bc3807c55ce4fb348949240a2ed650d86e58223c6d4869cbf326078711cf952b0e8babb9b328cb35b7058f72a4f1d1a4eee languageName: node linkType: hard -"@inquirer/select@npm:^4.0.2": - version: 4.0.3 - resolution: "@inquirer/select@npm:4.0.3" +"@inquirer/select@npm:^4.3.1": + version: 4.4.2 + resolution: "@inquirer/select@npm:4.4.2" dependencies: - "@inquirer/core": ^10.1.1 - "@inquirer/figures": ^1.0.8 - "@inquirer/type": ^3.0.1 - ansi-escapes: ^4.3.2 - yoctocolors-cjs: ^2.1.2 + "@inquirer/ansi": ^1.0.2 + "@inquirer/core": ^10.3.2 + "@inquirer/figures": ^1.0.15 + "@inquirer/type": ^3.0.10 + yoctocolors-cjs: ^2.1.3 peerDependencies: "@types/node": ">=18" - checksum: acc1c7753efe7d63c0f9da18243703a95eb30a70aef8631ea3a375120cd8d4440ffd8de29472b2493f84e36010551eb6057f542573bfd0a31cd3dfd3d81d43bb - languageName: node - linkType: hard - -"@inquirer/type@npm:^1.5.5": - version: 1.5.5 - resolution: "@inquirer/type@npm:1.5.5" - dependencies: - mute-stream: ^1.0.0 - checksum: 6cada82bb14519f3c71f455b08dc03c1064046fe0469aa5fce44c7ebf88a3a3d67a0cf852b0a7339476fec3b02874167f46d2c5b0964218d00273ab27ff861c5 + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 645bb274d71a5a1a913efd4c742f9c76665c17f5cf6b04e0c08dcd925bc86fdbe0d42218b58211cfd6d3749a71020db0fa83257aa0afb7295f859ae2648a31c6 languageName: node linkType: hard -"@inquirer/type@npm:^3.0.1": - version: 3.0.1 - resolution: "@inquirer/type@npm:3.0.1" +"@inquirer/type@npm:^3.0.10, @inquirer/type@npm:^3.0.7": + version: 3.0.10 + resolution: "@inquirer/type@npm:3.0.10" peerDependencies: "@types/node": ">=18" - checksum: af412f1e7541d43554b02199ae71a2039a1bff5dc51ceefd87de9ece55b199682733b28810fb4b6cb3ed4a159af4cc4a26d4bb29c58dd127e7d9dbda0797d8e7 + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 57d113a9db7abc73326491e29bedc88ef362e53779f9f58a1b61225e0be068ce0c54e33cd65f4a13ca46131676fb72c3ef488463c4c9af0aa89680684c55d74c languageName: node linkType: hard -"@inquirer/type@npm:^3.0.4, @inquirer/type@npm:^3.0.8": +"@inquirer/type@npm:^3.0.8": version: 3.0.8 resolution: "@inquirer/type@npm:3.0.8" peerDependencies: @@ -2676,6 +2977,22 @@ __metadata: languageName: node linkType: hard +"@isaacs/balanced-match@npm:^4.0.1": + version: 4.0.1 + resolution: "@isaacs/balanced-match@npm:4.0.1" + checksum: 102fbc6d2c0d5edf8f6dbf2b3feb21695a21bc850f11bc47c4f06aa83bd8884fde3fe9d6d797d619901d96865fdcb4569ac2a54c937992c48885c5e3d9967fe8 + languageName: node + linkType: hard + +"@isaacs/brace-expansion@npm:^5.0.0": + version: 5.0.0 + resolution: "@isaacs/brace-expansion@npm:5.0.0" + dependencies: + "@isaacs/balanced-match": ^4.0.1 + checksum: d7a3b8b0ddbf0ccd8eeb1300e29dd0a0c02147e823d8138f248375a365682360620895c66d113e05ee02389318c654379b0e538b996345b83c914941786705b1 + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -2834,55 +3151,63 @@ __metadata: languageName: node linkType: hard -"@listr2/prompt-adapter-inquirer@npm:2.0.18": - version: 2.0.18 - resolution: "@listr2/prompt-adapter-inquirer@npm:2.0.18" +"@listr2/prompt-adapter-inquirer@npm:3.0.1": + version: 3.0.1 + resolution: "@listr2/prompt-adapter-inquirer@npm:3.0.1" dependencies: - "@inquirer/type": ^1.5.5 + "@inquirer/type": ^3.0.7 peerDependencies: "@inquirer/prompts": ">= 3 < 8" - checksum: 2e813dfb27d907a0f5078991ecd7645d79a2f99ded2e4af976da4e7bffba1d7ca9df93ac62b2c33e1180140e0e53e560befc6fb9998fb1da491eca84ed1ff21f + listr2: 9.0.1 + checksum: 4c6058b5860cc75729074be8dde515a98729e1e638ca3c3bab8723067b38a73a5e63cc99a120439e2b583d4230cc2f4ccf08ad5c01646c7cdf59e5253c7449f0 languageName: node linkType: hard -"@lmdb/lmdb-darwin-arm64@npm:3.2.6": - version: 3.2.6 - resolution: "@lmdb/lmdb-darwin-arm64@npm:3.2.6" +"@lmdb/lmdb-darwin-arm64@npm:3.4.2": + version: 3.4.2 + resolution: "@lmdb/lmdb-darwin-arm64@npm:3.4.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@lmdb/lmdb-darwin-x64@npm:3.2.6": - version: 3.2.6 - resolution: "@lmdb/lmdb-darwin-x64@npm:3.2.6" +"@lmdb/lmdb-darwin-x64@npm:3.4.2": + version: 3.4.2 + resolution: "@lmdb/lmdb-darwin-x64@npm:3.4.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@lmdb/lmdb-linux-arm64@npm:3.2.6": - version: 3.2.6 - resolution: "@lmdb/lmdb-linux-arm64@npm:3.2.6" +"@lmdb/lmdb-linux-arm64@npm:3.4.2": + version: 3.4.2 + resolution: "@lmdb/lmdb-linux-arm64@npm:3.4.2" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@lmdb/lmdb-linux-arm@npm:3.2.6": - version: 3.2.6 - resolution: "@lmdb/lmdb-linux-arm@npm:3.2.6" +"@lmdb/lmdb-linux-arm@npm:3.4.2": + version: 3.4.2 + resolution: "@lmdb/lmdb-linux-arm@npm:3.4.2" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@lmdb/lmdb-linux-x64@npm:3.2.6": - version: 3.2.6 - resolution: "@lmdb/lmdb-linux-x64@npm:3.2.6" +"@lmdb/lmdb-linux-x64@npm:3.4.2": + version: 3.4.2 + resolution: "@lmdb/lmdb-linux-x64@npm:3.4.2" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@lmdb/lmdb-win32-x64@npm:3.2.6": - version: 3.2.6 - resolution: "@lmdb/lmdb-win32-x64@npm:3.2.6" +"@lmdb/lmdb-win32-arm64@npm:3.4.2": + version: 3.4.2 + resolution: "@lmdb/lmdb-win32-arm64@npm:3.4.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@lmdb/lmdb-win32-x64@npm:3.4.2": + version: 3.4.2 + resolution: "@lmdb/lmdb-win32-x64@npm:3.4.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -2896,6 +3221,38 @@ __metadata: languageName: node linkType: hard +"@modelcontextprotocol/sdk@npm:1.25.2": + version: 1.25.2 + resolution: "@modelcontextprotocol/sdk@npm:1.25.2" + dependencies: + "@hono/node-server": ^1.19.7 + ajv: ^8.17.1 + ajv-formats: ^3.0.1 + content-type: ^1.0.5 + cors: ^2.8.5 + cross-spawn: ^7.0.5 + eventsource: ^3.0.2 + eventsource-parser: ^3.0.0 + express: ^5.0.1 + express-rate-limit: ^7.5.0 + jose: ^6.1.1 + json-schema-typed: ^8.0.2 + pkce-challenge: ^5.0.0 + raw-body: ^3.0.0 + zod: ^3.25 || ^4.0 + zod-to-json-schema: ^3.25.0 + peerDependencies: + "@cfworker/json-schema": ^4.1.1 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + "@cfworker/json-schema": + optional: true + zod: + optional: false + checksum: 24c600de2da3478e5ce8a6ae3a00744a3d8a08e9291e6ebb236ca563d5a8d69bee759223950914ef19329ce26b24946639438cc6a7bf33839180348055be5eb9 + languageName: node + linkType: hard + "@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.3": version: 3.0.3 resolution: "@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.3" @@ -2938,138 +3295,146 @@ __metadata: languageName: node linkType: hard -"@napi-rs/nice-android-arm-eabi@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-android-arm-eabi@npm:1.0.1" +"@napi-rs/nice-android-arm-eabi@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-android-arm-eabi@npm:1.1.1" conditions: os=android & cpu=arm languageName: node linkType: hard -"@napi-rs/nice-android-arm64@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-android-arm64@npm:1.0.1" +"@napi-rs/nice-android-arm64@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-android-arm64@npm:1.1.1" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@napi-rs/nice-darwin-arm64@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-darwin-arm64@npm:1.0.1" +"@napi-rs/nice-darwin-arm64@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-darwin-arm64@npm:1.1.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@napi-rs/nice-darwin-x64@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-darwin-x64@npm:1.0.1" +"@napi-rs/nice-darwin-x64@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-darwin-x64@npm:1.1.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@napi-rs/nice-freebsd-x64@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-freebsd-x64@npm:1.0.1" +"@napi-rs/nice-freebsd-x64@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-freebsd-x64@npm:1.1.1" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@napi-rs/nice-linux-arm-gnueabihf@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-linux-arm-gnueabihf@npm:1.0.1" +"@napi-rs/nice-linux-arm-gnueabihf@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-arm-gnueabihf@npm:1.1.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@napi-rs/nice-linux-arm64-gnu@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-linux-arm64-gnu@npm:1.0.1" +"@napi-rs/nice-linux-arm64-gnu@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-arm64-gnu@npm:1.1.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@napi-rs/nice-linux-arm64-musl@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-linux-arm64-musl@npm:1.0.1" +"@napi-rs/nice-linux-arm64-musl@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-arm64-musl@npm:1.1.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@napi-rs/nice-linux-ppc64-gnu@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-linux-ppc64-gnu@npm:1.0.1" +"@napi-rs/nice-linux-ppc64-gnu@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-ppc64-gnu@npm:1.1.1" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@napi-rs/nice-linux-riscv64-gnu@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-linux-riscv64-gnu@npm:1.0.1" +"@napi-rs/nice-linux-riscv64-gnu@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-riscv64-gnu@npm:1.1.1" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@napi-rs/nice-linux-s390x-gnu@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-linux-s390x-gnu@npm:1.0.1" +"@napi-rs/nice-linux-s390x-gnu@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-s390x-gnu@npm:1.1.1" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@napi-rs/nice-linux-x64-gnu@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-linux-x64-gnu@npm:1.0.1" +"@napi-rs/nice-linux-x64-gnu@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-x64-gnu@npm:1.1.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@napi-rs/nice-linux-x64-musl@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-linux-x64-musl@npm:1.0.1" +"@napi-rs/nice-linux-x64-musl@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-x64-musl@npm:1.1.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@napi-rs/nice-win32-arm64-msvc@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-win32-arm64-msvc@npm:1.0.1" +"@napi-rs/nice-openharmony-arm64@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-openharmony-arm64@npm:1.1.1" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@napi-rs/nice-win32-arm64-msvc@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-win32-arm64-msvc@npm:1.1.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@napi-rs/nice-win32-ia32-msvc@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-win32-ia32-msvc@npm:1.0.1" +"@napi-rs/nice-win32-ia32-msvc@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-win32-ia32-msvc@npm:1.1.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@napi-rs/nice-win32-x64-msvc@npm:1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice-win32-x64-msvc@npm:1.0.1" +"@napi-rs/nice-win32-x64-msvc@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-win32-x64-msvc@npm:1.1.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@napi-rs/nice@npm:^1.0.1": - version: 1.0.1 - resolution: "@napi-rs/nice@npm:1.0.1" - dependencies: - "@napi-rs/nice-android-arm-eabi": 1.0.1 - "@napi-rs/nice-android-arm64": 1.0.1 - "@napi-rs/nice-darwin-arm64": 1.0.1 - "@napi-rs/nice-darwin-x64": 1.0.1 - "@napi-rs/nice-freebsd-x64": 1.0.1 - "@napi-rs/nice-linux-arm-gnueabihf": 1.0.1 - "@napi-rs/nice-linux-arm64-gnu": 1.0.1 - "@napi-rs/nice-linux-arm64-musl": 1.0.1 - "@napi-rs/nice-linux-ppc64-gnu": 1.0.1 - "@napi-rs/nice-linux-riscv64-gnu": 1.0.1 - "@napi-rs/nice-linux-s390x-gnu": 1.0.1 - "@napi-rs/nice-linux-x64-gnu": 1.0.1 - "@napi-rs/nice-linux-x64-musl": 1.0.1 - "@napi-rs/nice-win32-arm64-msvc": 1.0.1 - "@napi-rs/nice-win32-ia32-msvc": 1.0.1 - "@napi-rs/nice-win32-x64-msvc": 1.0.1 +"@napi-rs/nice@npm:^1.0.4": + version: 1.1.1 + resolution: "@napi-rs/nice@npm:1.1.1" + dependencies: + "@napi-rs/nice-android-arm-eabi": 1.1.1 + "@napi-rs/nice-android-arm64": 1.1.1 + "@napi-rs/nice-darwin-arm64": 1.1.1 + "@napi-rs/nice-darwin-x64": 1.1.1 + "@napi-rs/nice-freebsd-x64": 1.1.1 + "@napi-rs/nice-linux-arm-gnueabihf": 1.1.1 + "@napi-rs/nice-linux-arm64-gnu": 1.1.1 + "@napi-rs/nice-linux-arm64-musl": 1.1.1 + "@napi-rs/nice-linux-ppc64-gnu": 1.1.1 + "@napi-rs/nice-linux-riscv64-gnu": 1.1.1 + "@napi-rs/nice-linux-s390x-gnu": 1.1.1 + "@napi-rs/nice-linux-x64-gnu": 1.1.1 + "@napi-rs/nice-linux-x64-musl": 1.1.1 + "@napi-rs/nice-openharmony-arm64": 1.1.1 + "@napi-rs/nice-win32-arm64-msvc": 1.1.1 + "@napi-rs/nice-win32-ia32-msvc": 1.1.1 + "@napi-rs/nice-win32-x64-msvc": 1.1.1 dependenciesMeta: "@napi-rs/nice-android-arm-eabi": optional: true @@ -3097,13 +3462,15 @@ __metadata: optional: true "@napi-rs/nice-linux-x64-musl": optional: true + "@napi-rs/nice-openharmony-arm64": + optional: true "@napi-rs/nice-win32-arm64-msvc": optional: true "@napi-rs/nice-win32-ia32-msvc": optional: true "@napi-rs/nice-win32-x64-msvc": optional: true - checksum: 96f189e4fe8be068ae5296fc585731a518e93e2809d37afa2dadb9f5ef06c12b60a5b0f249a9c48a29af847b095bd09c94db071de3d722b885c33569b5a27aff + checksum: f9b72d10511c6ee9e36723a1876ef8152b0f8f5d35e60b3adae2d3fd05a22f0941552cd0403404fd040ef73924bbf7ed3d356c414da2491c65a988e700af73d3 languageName: node linkType: hard @@ -3130,14 +3497,14 @@ __metadata: languageName: node linkType: hard -"@ngtools/webpack@npm:19.2.19": - version: 19.2.19 - resolution: "@ngtools/webpack@npm:19.2.19" +"@ngtools/webpack@npm:20.3.14": + version: 20.3.14 + resolution: "@ngtools/webpack@npm:20.3.14" peerDependencies: - "@angular/compiler-cli": ^19.0.0 || ^19.2.0-next.0 - typescript: ">=5.5 <5.9" + "@angular/compiler-cli": ^20.0.0 + typescript: ">=5.8 <6.0" webpack: ^5.54.0 - checksum: 033b247720a6ed28d29b6ffc223e435b9a2e6e63cd4b4ff5b9de4b28775ccf1385fc31aa857e3e97dc38cf7f59810ea00d95f07a4d1943b9bf9a914aeaec82ff + checksum: 8a8a35d894245c1e7e7801bbeecbc5c2b64addb5b6be4fd402595eb42aefbe8177213cb0a8f10198b06cec68ebf2fc976d94d1eedfd0db48cccc07d3d804e8fd languageName: node linkType: hard @@ -3581,329 +3948,381 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.34.8" +"@rollup/rollup-android-arm-eabi@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.52.3" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.52.5" +"@rollup/rollup-android-arm-eabi@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.55.1" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-android-arm64@npm:4.34.8" +"@rollup/rollup-android-arm64@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-android-arm64@npm:4.52.3" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-android-arm64@npm:4.52.5" +"@rollup/rollup-android-arm64@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-android-arm64@npm:4.55.1" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-darwin-arm64@npm:4.34.8" +"@rollup/rollup-darwin-arm64@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-darwin-arm64@npm:4.52.3" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-darwin-arm64@npm:4.52.5" +"@rollup/rollup-darwin-arm64@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.55.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-darwin-x64@npm:4.34.8" +"@rollup/rollup-darwin-x64@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-darwin-x64@npm:4.52.3" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-darwin-x64@npm:4.52.5" +"@rollup/rollup-darwin-x64@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.55.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.34.8" +"@rollup/rollup-freebsd-arm64@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.52.3" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.52.5" +"@rollup/rollup-freebsd-arm64@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.55.1" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-freebsd-x64@npm:4.34.8" +"@rollup/rollup-freebsd-x64@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-freebsd-x64@npm:4.52.3" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-freebsd-x64@npm:4.52.5" +"@rollup/rollup-freebsd-x64@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.55.1" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.34.8" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.52.3" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.52.5" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.55.1" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.34.8" +"@rollup/rollup-linux-arm-musleabihf@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.52.3" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.52.5" +"@rollup/rollup-linux-arm-musleabihf@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.55.1" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.34.8" +"@rollup/rollup-linux-arm64-gnu@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.52.3" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.52.5" +"@rollup/rollup-linux-arm64-gnu@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.55.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.34.8" +"@rollup/rollup-linux-arm64-musl@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.52.3" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.52.5" +"@rollup/rollup-linux-arm64-musl@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.55.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-loong64-gnu@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.52.5" +"@rollup/rollup-linux-loong64-gnu@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.52.3" conditions: os=linux & cpu=loong64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-loongarch64-gnu@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.34.8" +"@rollup/rollup-linux-loong64-gnu@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.55.1" conditions: os=linux & cpu=loong64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.34.8" +"@rollup/rollup-linux-loong64-musl@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.55.1" + conditions: os=linux & cpu=loong64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-gnu@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.52.3" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-ppc64-gnu@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.52.5" +"@rollup/rollup-linux-ppc64-gnu@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.55.1" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.34.8" +"@rollup/rollup-linux-ppc64-musl@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.55.1" + conditions: os=linux & cpu=ppc64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.52.3" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.52.5" +"@rollup/rollup-linux-riscv64-gnu@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.55.1" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-musl@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.52.5" +"@rollup/rollup-linux-riscv64-musl@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.52.3" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.34.8" +"@rollup/rollup-linux-riscv64-musl@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.55.1" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.52.3" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.52.5" +"@rollup/rollup-linux-s390x-gnu@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.55.1" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.34.8" +"@rollup/rollup-linux-x64-gnu@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.52.3" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.52.5" +"@rollup/rollup-linux-x64-gnu@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.55.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.34.8" +"@rollup/rollup-linux-x64-musl@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.52.3" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.52.5" +"@rollup/rollup-linux-x64-musl@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.55.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-openharmony-arm64@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-openharmony-arm64@npm:4.52.5" +"@rollup/rollup-openbsd-x64@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-openbsd-x64@npm:4.55.1" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-openharmony-arm64@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.52.3" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.34.8" +"@rollup/rollup-openharmony-arm64@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.55.1" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.52.3" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.52.5" +"@rollup/rollup-win32-arm64-msvc@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.55.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.34.8" +"@rollup/rollup-win32-ia32-msvc@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.52.3" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.52.5" +"@rollup/rollup-win32-ia32-msvc@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.55.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-gnu@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-win32-x64-gnu@npm:4.52.5" +"@rollup/rollup-win32-x64-gnu@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.52.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-gnu@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.55.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.34.8": - version: 4.34.8 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.34.8" +"@rollup/rollup-win32-x64-msvc@npm:4.52.3": + version: 4.52.3 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.52.3" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.52.5": - version: 4.52.5 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.52.5" +"@rollup/rollup-win32-x64-msvc@npm:4.55.1": + version: 4.55.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.55.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@schematics/angular@npm:19.0.5": - version: 19.0.5 - resolution: "@schematics/angular@npm:19.0.5" +"@schematics/angular@npm:20.3.14": + version: 20.3.14 + resolution: "@schematics/angular@npm:20.3.14" dependencies: - "@angular-devkit/core": 19.0.5 - "@angular-devkit/schematics": 19.0.5 + "@angular-devkit/core": 20.3.14 + "@angular-devkit/schematics": 20.3.14 jsonc-parser: 3.3.1 - dependenciesMeta: - esbuild: - built: true - puppeteer: - built: true - checksum: 56386cfe8bb6ca0d7eb92fbed180d1b4330f3652145d6389ad4ad842f8418d6c8a60536ba6a68165d404323a731807e57c9566b117b3c750eb3553de90a275c0 + checksum: 13ab04bd05ec07a2972dca224773dae5040ecd58e4691be81428b87cbffae047f4acd6ea105d953e9190b0d8111747af581293833ee99b976b8449f764cf5fbc + languageName: node + linkType: hard + +"@sentry-internal/browser-utils@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry-internal/browser-utils@npm:10.33.0" + dependencies: + "@sentry/core": 10.33.0 + checksum: 46c548a35baedc111b7f199d495ea717037b0e0f67ba9182d6e00fe1cb73d98d93df0ada4f14e9589c4aff3bf285473039e33cc0b6c444c8d6136a77d935d1c6 + languageName: node + linkType: hard + +"@sentry-internal/feedback@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry-internal/feedback@npm:10.33.0" + dependencies: + "@sentry/core": 10.33.0 + checksum: 6bb34af60344b109ec001f709af0f7332d84a4cf3bab9edfb9c3113deea03035156eb44e62c372a5bd6a3430edfdee19370dc7e37a030c26ca1c3e16dfde5e8a languageName: node linkType: hard -"@sentry-internal/feedback@npm:7.120.2": - version: 7.120.2 - resolution: "@sentry-internal/feedback@npm:7.120.2" +"@sentry-internal/replay-canvas@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry-internal/replay-canvas@npm:10.33.0" dependencies: - "@sentry/core": 7.120.2 - "@sentry/types": 7.120.2 - "@sentry/utils": 7.120.2 - checksum: 4e29da8c916ab6fe5562c93b21b3edc9ee7ae6c805e1ca3ae23677f18a7e4694eeebb266415c55222c7c1ec4fb600c13f0c1a36397710c4cb1bd019c28350781 + "@sentry-internal/replay": 10.33.0 + "@sentry/core": 10.33.0 + checksum: c17acfd2b950641acbe3e841a9013d6ceb3ee2ed6c1f93b05424479d1b9b61c19e0063decf006d391d341ff4344d2e90754a2999c3fb816b073b967831bcce73 languageName: node linkType: hard -"@sentry-internal/replay-canvas@npm:7.120.2": - version: 7.120.2 - resolution: "@sentry-internal/replay-canvas@npm:7.120.2" +"@sentry-internal/replay@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry-internal/replay@npm:10.33.0" dependencies: - "@sentry/core": 7.120.2 - "@sentry/replay": 7.120.2 - "@sentry/types": 7.120.2 - "@sentry/utils": 7.120.2 - checksum: 6d8ab86e764d17761b1004b0e62b60d61143823227a59994b6bc1225c7a86a15ca1bdfb101d609678ff273a5e40af8f0dacdfa076045ef717a66ef49f6f6f327 + "@sentry-internal/browser-utils": 10.33.0 + "@sentry/core": 10.33.0 + checksum: eace75ce40fc5d917a5bf436625340fc2b5d5143ff6669edd46f90f1e64e6838846f2488a4246aeb8542ce976a65329ed5e38afc573e20d951cf4be5837ed245 languageName: node linkType: hard @@ -3949,107 +4368,39 @@ __metadata: languageName: node linkType: hard -"@sentry-internal/tracing@npm:7.120.2": - version: 7.120.2 - resolution: "@sentry-internal/tracing@npm:7.120.2" - dependencies: - "@sentry/core": 7.120.2 - "@sentry/types": 7.120.2 - "@sentry/utils": 7.120.2 - checksum: 7019ba1dee310d6238bade9611b434cc41b1ab128763365535d152ddaadd064d6c4331e4553685d639a97e3bd4d5f052912e2106a046a51ac2fac62836ec92e8 - languageName: node - linkType: hard - -"@sentry/angular-ivy@npm:^7.116.0": - version: 7.120.2 - resolution: "@sentry/angular-ivy@npm:7.120.2" +"@sentry/angular@npm:^10.33.0": + version: 10.33.0 + resolution: "@sentry/angular@npm:10.33.0" dependencies: - "@sentry/browser": 7.120.2 - "@sentry/core": 7.120.2 - "@sentry/types": 7.120.2 - "@sentry/utils": 7.120.2 + "@sentry/browser": 10.33.0 + "@sentry/core": 10.33.0 tslib: ^2.4.1 peerDependencies: - "@angular/common": ">= 12.x <= 17.x" - "@angular/core": ">= 12.x <= 17.x" - "@angular/router": ">= 12.x <= 17.x" + "@angular/common": ">= 14.x <= 21.x" + "@angular/core": ">= 14.x <= 21.x" + "@angular/router": ">= 14.x <= 21.x" rxjs: ^6.5.5 || ^7.x - checksum: 0e3a6454f9495e15538ed95d7189d7249ffe16189aff92d80449dc7be4ecdcc685e51f56ddb4eceacba89ed320f6a2ef07b0d5e50f6c09a0a8e67a38d4efd7dd - languageName: node - linkType: hard - -"@sentry/browser@npm:7.120.2": - version: 7.120.2 - resolution: "@sentry/browser@npm:7.120.2" - dependencies: - "@sentry-internal/feedback": 7.120.2 - "@sentry-internal/replay-canvas": 7.120.2 - "@sentry-internal/tracing": 7.120.2 - "@sentry/core": 7.120.2 - "@sentry/integrations": 7.120.2 - "@sentry/replay": 7.120.2 - "@sentry/types": 7.120.2 - "@sentry/utils": 7.120.2 - checksum: ea2ef24fb4692e5b32a4084cd188174edb229e2194127a23813b9994e2c73e96bbf840c86762aa5b843bc7ccd570206bfaa79272b22255e261b07294b8d24066 - languageName: node - linkType: hard - -"@sentry/core@npm:7.120.2": - version: 7.120.2 - resolution: "@sentry/core@npm:7.120.2" - dependencies: - "@sentry/types": 7.120.2 - "@sentry/utils": 7.120.2 - checksum: ffb0881fd62d780282bfca233c18bb3d5128995ab951fca8ec23d95e4cef20711b998974404620a2536296786d2bb4cddf92731e77882f8bdfc297334b3cc390 - languageName: node - linkType: hard - -"@sentry/integrations@npm:7.120.2": - version: 7.120.2 - resolution: "@sentry/integrations@npm:7.120.2" - dependencies: - "@sentry/core": 7.120.2 - "@sentry/types": 7.120.2 - "@sentry/utils": 7.120.2 - localforage: ^1.8.1 - checksum: 912e7c24206156db527d0c1c2c6f5a73eb08f4ff3528a7b65bee470addb27795efc9dca00caa11fa7313f0192bc91a84f71183605ee537477a7d1eb01b5728f2 - languageName: node - linkType: hard - -"@sentry/replay@npm:7.120.2": - version: 7.120.2 - resolution: "@sentry/replay@npm:7.120.2" - dependencies: - "@sentry-internal/tracing": 7.120.2 - "@sentry/core": 7.120.2 - "@sentry/types": 7.120.2 - "@sentry/utils": 7.120.2 - checksum: 97e0e1163ec4042b7af5af8390cd1c0399992fe46e41d52173193af3a1ecefea78118af3f766f35ca7269d6056f8e529c891809bca0c04aecfda2e7e08fa84c1 + checksum: 5b24bdcf4687857bd2111c7cbb5cb440b94cc662cbe35ec25b1caf34dfcef4963a8346a1f675a1b37a1ae81a275fbb120b9a5c327b0ec0c7a0c554446af69f07 languageName: node linkType: hard -"@sentry/tracing@npm:^7.116.0": - version: 7.120.2 - resolution: "@sentry/tracing@npm:7.120.2" +"@sentry/browser@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry/browser@npm:10.33.0" dependencies: - "@sentry-internal/tracing": 7.120.2 - checksum: b18ec9fe0ddb8f11bfbc9b59846302aaf55794586d370bb0e019ce2d26678ae0e524bd2e13cfd689666022e89de98ec7e00748a3d949f3d8ba7bf2628f440269 - languageName: node - linkType: hard - -"@sentry/types@npm:7.120.2": - version: 7.120.2 - resolution: "@sentry/types@npm:7.120.2" - checksum: 45a46cd13f2b7a0590439c0b98e14b50cd1a0a610d8b5d977934a82336ad88a9fd0efb6a93c86063ae25ae2e587994b6b7ad122e808c82110d71c132cc55b02b + "@sentry-internal/browser-utils": 10.33.0 + "@sentry-internal/feedback": 10.33.0 + "@sentry-internal/replay": 10.33.0 + "@sentry-internal/replay-canvas": 10.33.0 + "@sentry/core": 10.33.0 + checksum: 92d9c98671fc7783b8a787f22706a36545166871b752704df2be4fbb0161dd7025567ccd0f510b592f77162b4f26b51b519bd3a3aa40ffe5d4b8197d5aab7d33 languageName: node linkType: hard -"@sentry/utils@npm:7.120.2": - version: 7.120.2 - resolution: "@sentry/utils@npm:7.120.2" - dependencies: - "@sentry/types": 7.120.2 - checksum: 294f7f4d9763a11617d3ee471a4d0ebca26c31d39d4a4beface432fff948bc669b5573c5303041e9fc3e01f77cac96839d7518fd237f3c348959aad8f4325b54 +"@sentry/core@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry/core@npm:10.33.0" + checksum: 25eb49f6f4277889e2823e1a09c5ae1a4c6d1361365d31fecc7ead630dd9304fab80c71aad46ac001158cfdbd11852668f75384b86186fd0b0431b3ff00ace95 languageName: node linkType: hard @@ -4111,13 +4462,6 @@ __metadata: languageName: node linkType: hard -"@sindresorhus/merge-streams@npm:^2.1.0": - version: 2.3.0 - resolution: "@sindresorhus/merge-streams@npm:2.3.0" - checksum: e989d53dee68d7e49b4ac02ae49178d561c461144cea83f66fa91ff012d981ad0ad2340cbd13f2fdb57989197f5c987ca22a74eb56478626f04e79df84291159 - languageName: node - linkType: hard - "@socket.io/component-emitter@npm:~3.1.0": version: 3.1.2 resolution: "@socket.io/component-emitter@npm:3.1.2" @@ -4546,14 +4890,14 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:1.0.6, @types/estree@npm:^1.0.6": +"@types/estree@npm:*": version: 1.0.6 resolution: "@types/estree@npm:1.0.6" checksum: 8825d6e729e16445d9a1dd2fb1db2edc5ed400799064cd4d028150701031af012ba30d6d03fe9df40f4d7a437d0de6d2b256020152b7b09bde9f2e420afdffd9 languageName: node linkType: hard -"@types/estree@npm:1.0.8": +"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.8": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" checksum: bd93e2e415b6f182ec4da1074e1f36c480f1d26add3e696d54fb30c09bc470897e41361c8fd957bf0985024f8fbf1e6e2aff977d79352ef7eb93a5c6dcff6c11 @@ -4654,7 +4998,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 @@ -4778,12 +5122,12 @@ __metadata: languageName: node linkType: hard -"@vitejs/plugin-basic-ssl@npm:1.2.0": - version: 1.2.0 - resolution: "@vitejs/plugin-basic-ssl@npm:1.2.0" +"@vitejs/plugin-basic-ssl@npm:2.1.0": + version: 2.1.0 + resolution: "@vitejs/plugin-basic-ssl@npm:2.1.0" peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 - checksum: 0a2d1fb8147783238a8308a3736a7d4b38026bc4223220701859bf05564ab91a35ff6cfddf75527a60611756a89ef60f3687f644e87f01eb2275cf0b887033f7 + vite: ^6.0.0 || ^7.0.0 + checksum: 3435dd1f80214c61fdaa2e8af7a378583130b79288ab0fc142a5a110c44f9107640e2cea555eaf37d2c780b788493c678a5d63aa3a53399dffa360ea9d899f04 languageName: node linkType: hard @@ -4989,6 +5333,16 @@ __metadata: languageName: node linkType: hard +"accepts@npm:^2.0.0": + version: 2.0.0 + resolution: "accepts@npm:2.0.0" + dependencies: + mime-types: ^3.0.0 + negotiator: ^1.0.0 + checksum: 49fe6c050cb6f6ff4e771b4d88324fca4d3127865f2473872e818dca127d809ba3aa8fdfc7acb51dd3c5bade7311ca6b8cfff7015ea6db2f7eb9c8444d223a4f + languageName: node + linkType: hard + "accepts@npm:~1.3.4, accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" @@ -4999,6 +5353,15 @@ __metadata: languageName: node linkType: hard +"acorn-import-phases@npm:^1.0.3": + version: 1.0.4 + resolution: "acorn-import-phases@npm:1.0.4" + peerDependencies: + acorn: ^8.14.0 + checksum: e669cccfb6711af305150fcbfddcf4485fffdc4547a0ecabebe94103b47124cc02bfd186240061c00ac954cfb0461b4ecc3e203e138e43042b7af32063fa9510 + languageName: node + linkType: hard + "acorn-walk@npm:^8.1.1": version: 8.3.4 resolution: "acorn-walk@npm:8.3.4" @@ -5043,7 +5406,7 @@ __metadata: languageName: node linkType: hard -"ajv-formats@npm:3.0.1": +"ajv-formats@npm:3.0.1, ajv-formats@npm:^3.0.1": version: 3.0.1 resolution: "ajv-formats@npm:3.0.1" dependencies: @@ -5082,7 +5445,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:8.17.1, ajv@npm:^8.0.0, ajv@npm:^8.9.0": +"ajv@npm:8.17.1, ajv@npm:^8.0.0, ajv@npm:^8.17.1, ajv@npm:^8.9.0": version: 8.17.1 resolution: "ajv@npm:8.17.1" dependencies: @@ -5094,6 +5457,28 @@ __metadata: languageName: node linkType: hard +"algoliasearch@npm:5.35.0": + version: 5.35.0 + resolution: "algoliasearch@npm:5.35.0" + dependencies: + "@algolia/abtesting": 1.1.0 + "@algolia/client-abtesting": 5.35.0 + "@algolia/client-analytics": 5.35.0 + "@algolia/client-common": 5.35.0 + "@algolia/client-insights": 5.35.0 + "@algolia/client-personalization": 5.35.0 + "@algolia/client-query-suggestions": 5.35.0 + "@algolia/client-search": 5.35.0 + "@algolia/ingestion": 1.35.0 + "@algolia/monitoring": 1.35.0 + "@algolia/recommend": 5.35.0 + "@algolia/requester-browser-xhr": 5.35.0 + "@algolia/requester-fetch": 5.35.0 + "@algolia/requester-node-http": 5.35.0 + checksum: 13f2fbbefc1aab3eea98104f6063bdd96915b931b13d8e51ba81722e54ab702138d412abef0c5ae2d62b807d319130a185ed551c54c96ca1be2b1e40d9170431 + languageName: node + linkType: hard + "amplitude-js@npm:^8.21.9": version: 8.21.9 resolution: "amplitude-js@npm:8.21.9" @@ -5142,15 +5527,6 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.3.2": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: ^0.21.3 - checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 - languageName: node - linkType: hard - "ansi-escapes@npm:^7.0.0": version: 7.0.0 resolution: "ansi-escapes@npm:7.0.0" @@ -5183,7 +5559,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": +"ansi-styles@npm:^4.0.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: @@ -5253,21 +5629,21 @@ __metadata: languageName: node linkType: hard -"autoprefixer@npm:10.4.20": - version: 10.4.20 - resolution: "autoprefixer@npm:10.4.20" +"autoprefixer@npm:10.4.21": + version: 10.4.21 + resolution: "autoprefixer@npm:10.4.21" dependencies: - browserslist: ^4.23.3 - caniuse-lite: ^1.0.30001646 + browserslist: ^4.24.4 + caniuse-lite: ^1.0.30001702 fraction.js: ^4.3.7 normalize-range: ^0.1.2 - picocolors: ^1.0.1 + picocolors: ^1.1.1 postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.1.0 bin: autoprefixer: bin/autoprefixer - checksum: 187cec2ec356631932b212f76dc64f4419c117fdb2fb9eeeb40867d38ba5ca5ba734e6ceefc9e3af4eec8258e60accdf5cbf2b7708798598fde35cdc3de562d6 + checksum: 11770ce635a0520e457eaf2ff89056cd57094796a9f5d6d9375513388a5a016cd947333dcfd213b822fdd8a0b43ce68ae4958e79c6f077c41d87444c8cca0235 languageName: node linkType: hard @@ -5278,52 +5654,51 @@ __metadata: languageName: node linkType: hard -"babel-loader@npm:9.2.1": - version: 9.2.1 - resolution: "babel-loader@npm:9.2.1" +"babel-loader@npm:10.0.0": + version: 10.0.0 + resolution: "babel-loader@npm:10.0.0" dependencies: - find-cache-dir: ^4.0.0 - schema-utils: ^4.0.0 + find-up: ^5.0.0 peerDependencies: "@babel/core": ^7.12.0 - webpack: ">=5" - checksum: e1858d7625ad7cc8cabe6bbb8657f957041ffb1308375f359e92aa1654f413bfbb86a281bbf7cd4f7fff374d571c637b117551deac0231d779a198d4e4e78331 + webpack: ">=5.61.0" + checksum: 8a9dbb8a93cd342832cc99f024f07a6fda67b29aa907fbc3087de17e7f7ff705cf17fa9aed9103b1de9dfff24427afe200ec99213d24f801a0b1f4fd94783f51 languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:^0.4.10": - version: 0.4.12 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.12" +"babel-plugin-polyfill-corejs2@npm:^0.4.14": + version: 0.4.14 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.14" dependencies: - "@babel/compat-data": ^7.22.6 - "@babel/helper-define-polyfill-provider": ^0.6.3 + "@babel/compat-data": ^7.27.7 + "@babel/helper-define-polyfill-provider": ^0.6.5 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 6e6e6a8b85fec80a310ded2f5c151385e4ac59118909dd6a952e1025e4a478eb79dda45a5a6322cc2e598fd696eb07d4e2fa52418b4101f3dc370bdf8c8939ba + checksum: d654334c1b4390d08282416144b7b6f3d74d2cab44b2bfa2b6405c828882c82907b8b67698dce1be046c218d2d4fe5bf7fb6d01879938f3129dad969e8cfc44d languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.11.0": - version: 0.11.1 - resolution: "babel-plugin-polyfill-corejs3@npm:0.11.1" +"babel-plugin-polyfill-corejs3@npm:^0.13.0": + version: 0.13.0 + resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0" dependencies: - "@babel/helper-define-polyfill-provider": ^0.6.3 - core-js-compat: ^3.40.0 + "@babel/helper-define-polyfill-provider": ^0.6.5 + core-js-compat: ^3.43.0 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: ee39440475ef377a1570ccbc06b1a1d274cbfbbe2e7c3d4c60f38781a47f00a28bd10d8e23430828b965820c41beb2c93c84596baf72583a2c9c3fdfa4397994 + checksum: cf526031acd97ff2124e7c10e15047e6eeb0620d029c687f1dca99916a8fe6cac0e634b84c913db6cb68b7a024f82492ba8fdcc2a6266e7b05bdac2cba0c2434 languageName: node linkType: hard -"babel-plugin-polyfill-regenerator@npm:^0.6.1": - version: 0.6.3 - resolution: "babel-plugin-polyfill-regenerator@npm:0.6.3" +"babel-plugin-polyfill-regenerator@npm:^0.6.5": + version: 0.6.5 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.5" dependencies: - "@babel/helper-define-polyfill-provider": ^0.6.3 + "@babel/helper-define-polyfill-provider": ^0.6.5 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: d12696e6b3f280eb78fac551619ca4389262db62c7352cd54bf679d830df8b35596eef2de77cf00db6648eada1c99d49c4f40636dbc9c335a1e5420cfef96750 + checksum: ed1932fa9a31e0752fd10ebf48ab9513a654987cab1182890839523cb898559d24ae0578fdc475d9f995390420e64eeaa4b0427045b56949dace3c725bc66dbb languageName: node linkType: hard @@ -5411,13 +5786,6 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.3.1": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 - languageName: node - linkType: hard - "base64id@npm:2.0.0, base64id@npm:~2.0.0": version: 2.0.0 resolution: "base64id@npm:2.0.0" @@ -5425,6 +5793,15 @@ __metadata: languageName: node linkType: hard +"baseline-browser-mapping@npm:^2.9.0": + version: 2.9.14 + resolution: "baseline-browser-mapping@npm:2.9.14" + bin: + baseline-browser-mapping: dist/cli.js + checksum: c760c7cb5090b17c91aea2d7ad633d61491fea77f4eea1b2141b2b0d441ac887d3b433494c50e1490c2ba403e62e05606ad438a396c60bb41562c898a9fd7c6d + languageName: node + linkType: hard + "basic-ftp@npm:^5.0.2": version: 5.0.5 resolution: "basic-ftp@npm:5.0.5" @@ -5439,19 +5816,19 @@ __metadata: languageName: node linkType: hard -"beasties@npm:0.3.2": - version: 0.3.2 - resolution: "beasties@npm:0.3.2" +"beasties@npm:0.3.5": + version: 0.3.5 + resolution: "beasties@npm:0.3.5" dependencies: - css-select: ^5.1.0 - css-what: ^6.1.0 + css-select: ^6.0.0 + css-what: ^7.0.0 dom-serializer: ^2.0.0 domhandler: ^5.0.3 htmlparser2: ^10.0.0 picocolors: ^1.1.1 postcss: ^8.4.49 postcss-media-query-parser: ^0.2.3 - checksum: ddffbba8c9e3e4fe44a5ed1add29ad7fcdf6f3a55824d9314870734ce4d7d1cfeb6e810e0feab09bf8b3ddaf563f1639c6d22daf2e2d452a74f6b52258410a0d + checksum: 50f05b11a7d54a5213bcc570833e84cb6bda0d17654054f1e24c246e0accd524a43bc22d4284d5723b3f812aa45a0008a8bc925616d4c18aa8491a180b940e3c languageName: node linkType: hard @@ -5464,19 +5841,8 @@ __metadata: "binary-extensions@npm:^2.0.0": version: 2.3.0 - resolution: "binary-extensions@npm:2.3.0" - checksum: bcad01494e8a9283abf18c1b967af65ee79b0c6a9e6fcfafebfe91dbe6e0fc7272bafb73389e198b310516ae04f7ad17d79aacf6cb4c0d5d5202a7e2e52c7d98 - languageName: node - linkType: hard - -"bl@npm:^4.1.0": - version: 4.1.0 - resolution: "bl@npm:4.1.0" - dependencies: - buffer: ^5.5.0 - inherits: ^2.0.4 - readable-stream: ^3.4.0 - checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 + resolution: "binary-extensions@npm:2.3.0" + checksum: bcad01494e8a9283abf18c1b967af65ee79b0c6a9e6fcfafebfe91dbe6e0fc7272bafb73389e198b310516ae04f7ad17d79aacf6cb4c0d5d5202a7e2e52c7d98 languageName: node linkType: hard @@ -5507,6 +5873,23 @@ __metadata: languageName: node linkType: hard +"body-parser@npm:^2.2.1": + version: 2.2.2 + resolution: "body-parser@npm:2.2.2" + dependencies: + bytes: ^3.1.2 + content-type: ^1.0.5 + debug: ^4.4.3 + http-errors: ^2.0.0 + iconv-lite: ^0.7.0 + on-finished: ^2.4.1 + qs: ^6.14.1 + raw-body: ^3.0.1 + type-is: ^2.0.1 + checksum: 0b8764065ff2a8c7cf3c905193b5b528d6ab5246f0df4c743c0e887d880abcc336dad5ba86d959d7efee6243a49c2c2e5b0cee43f0ccb7d728f5496c97537a90 + languageName: node + linkType: hard + "bonjour-service@npm:^1.2.1": version: 1.3.0 resolution: "bonjour-service@npm:1.3.0" @@ -5561,7 +5944,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.21.5, browserslist@npm:^4.23.0, browserslist@npm:^4.23.3, browserslist@npm:^4.24.0": +"browserslist@npm:^4.21.5, browserslist@npm:^4.23.0, browserslist@npm:^4.24.0": version: 4.24.3 resolution: "browserslist@npm:4.24.3" dependencies: @@ -5575,17 +5958,18 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.25.1": - version: 4.25.1 - resolution: "browserslist@npm:4.25.1" +"browserslist@npm:^4.24.4, browserslist@npm:^4.28.0": + version: 4.28.1 + resolution: "browserslist@npm:4.28.1" dependencies: - caniuse-lite: ^1.0.30001726 - electron-to-chromium: ^1.5.173 - node-releases: ^2.0.19 - update-browserslist-db: ^1.1.3 + baseline-browser-mapping: ^2.9.0 + caniuse-lite: ^1.0.30001759 + electron-to-chromium: ^1.5.263 + node-releases: ^2.0.27 + update-browserslist-db: ^1.2.0 bin: browserslist: cli.js - checksum: 2a7e4317e809b09a436456221a1fcb8ccbd101bada187ed217f7a07a9e42ced822c7c86a0a4333d7d1b4e6e0c859d201732ffff1585d6bcacd8d226f6ddce7e3 + checksum: 895357d912ae5a88a3fa454d2d280e9869e13432df30ca8918e206c0783b3b59375b178fdaf16d0041a1cf21ac45c8eb0a20f96f73dbd9662abf4cf613177a1e languageName: node linkType: hard @@ -5603,16 +5987,6 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^5.5.0": - version: 5.7.1 - resolution: "buffer@npm:5.7.1" - dependencies: - base64-js: ^1.3.1 - ieee754: ^1.1.13 - checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 - languageName: node - linkType: hard - "bundle-name@npm:^4.1.0": version: 4.1.0 resolution: "bundle-name@npm:4.1.0" @@ -5622,7 +5996,7 @@ __metadata: languageName: node linkType: hard -"bytes@npm:3.1.2": +"bytes@npm:3.1.2, bytes@npm:^3.1.2, bytes@npm:~3.1.2": version: 3.1.2 resolution: "bytes@npm:3.1.2" checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e @@ -5683,34 +6057,31 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001646, caniuse-lite@npm:^1.0.30001688": +"caniuse-lite@npm:^1.0.30001688": version: 1.0.30001689 resolution: "caniuse-lite@npm:1.0.30001689" checksum: 8d4152076517ac1dfd6d6733ecc8055f3cd3a8b679af8f5858e731312f03967f6a2184553636696e44cee39abdd9ccccc914716235791b0c25f68ef8dea4e24a languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001726": - version: 1.0.30001731 - resolution: "caniuse-lite@npm:1.0.30001731" - checksum: ecd2ad779f31011bef657c0104a08a780d9bb38ff8ad7aeeeaf196151be22c492de87f4a9c89a30ea4aa9575c5a39c85bf6bd56e89a4bf8259f54a4fbfc24a0d +"caniuse-lite@npm:^1.0.30001702, caniuse-lite@npm:^1.0.30001759": + version: 1.0.30001764 + resolution: "caniuse-lite@npm:1.0.30001764" + checksum: 10cfa46c5d11659d7c9c5151213b00b27876da66723f3c757e3f3294de1c477d3a89fff0efe03d0d787727fea2ca27910a0b68a5ac69483aedd474827eb52b96 languageName: node linkType: hard -"chalk@npm:^4.1.0": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc +"chalk@npm:^5.3.0": + version: 5.6.2 + resolution: "chalk@npm:5.6.2" + checksum: 4ee2d47a626d79ca27cb5299ecdcce840ef5755e287412536522344db0fc51ca0f6d6433202332c29e2288c6a90a2b31f3bd626bc8c14743b6b6ee28abd3b796 languageName: node linkType: hard -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d +"chardet@npm:^2.1.1": + version: 2.1.1 + resolution: "chardet@npm:2.1.1" + checksum: 4e3dba2699018b79bb90a9562b5e5be27fcaab55250c12fa72f026b859fb24846396c346968546c14efc69b9f23aca3ef2b9816775012d08a4686ce3c362415c languageName: node linkType: hard @@ -5800,15 +6171,6 @@ __metadata: languageName: node linkType: hard -"cli-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "cli-cursor@npm:3.1.0" - dependencies: - restore-cursor: ^3.1.0 - checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 - languageName: node - linkType: hard - "cli-cursor@npm:^5.0.0": version: 5.0.0 resolution: "cli-cursor@npm:5.0.0" @@ -5818,7 +6180,7 @@ __metadata: languageName: node linkType: hard -"cli-spinners@npm:^2.5.0": +"cli-spinners@npm:^2.9.2": version: 2.9.2 resolution: "cli-spinners@npm:2.9.2" checksum: 1bd588289b28432e4676cb5d40505cfe3e53f2e4e10fbe05c8a710a154d6fe0ce7836844b00d6858f740f2ffe67cdc36e0fce9c7b6a8430e80e6388d5aa4956c @@ -5875,6 +6237,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^9.0.1": + version: 9.0.1 + resolution: "cliui@npm:9.0.1" + dependencies: + string-width: ^7.2.0 + strip-ansi: ^7.1.0 + wrap-ansi: ^9.0.0 + checksum: 143879ae462bf76822f341bf40979f0225fdba8dde6dfe429018b13396fd0532752cc2a809ac48cecc0ea189406184ad7568c0af44eea73d2ac3b432c4c6431f + languageName: node + linkType: hard + "clone-deep@npm:^4.0.1": version: 4.0.1 resolution: "clone-deep@npm:4.0.1" @@ -5886,13 +6259,6 @@ __metadata: languageName: node linkType: hard -"clone@npm:^1.0.2": - version: 1.0.4 - resolution: "clone@npm:1.0.4" - checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd - languageName: node - linkType: hard - "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" @@ -5967,13 +6333,6 @@ __metadata: languageName: node linkType: hard -"common-path-prefix@npm:^3.0.0": - version: 3.0.0 - resolution: "common-path-prefix@npm:3.0.0" - checksum: fdb3c4f54e51e70d417ccd950c07f757582de800c0678ca388aedefefc84982039f346f9fd9a1252d08d2da9e9ef4019f580a1d1d3a10da031e4bb3c924c5818 - languageName: node - linkType: hard - "compressible@npm:~2.0.18": version: 2.0.18 resolution: "compressible@npm:2.0.18" @@ -6047,7 +6406,14 @@ __metadata: languageName: node linkType: hard -"content-type@npm:~1.0.4, content-type@npm:~1.0.5": +"content-disposition@npm:^1.0.0": + version: 1.0.1 + resolution: "content-disposition@npm:1.0.1" + checksum: f1ee5363968e7e4c491fcd9796d3c489ab29c4ea0bfa5dcc3379a9833d6044838367cf8a11c90b179cb2a8d471279ab259119c52e0d3e4ed30934ccd56b6d694 + languageName: node + linkType: hard + +"content-type@npm:^1.0.5, content-type@npm:~1.0.4, content-type@npm:~1.0.5": version: 1.0.5 resolution: "content-type@npm:1.0.5" checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 @@ -6084,6 +6450,13 @@ __metadata: languageName: node linkType: hard +"cookie-signature@npm:^1.2.1": + version: 1.2.2 + resolution: "cookie-signature@npm:1.2.2" + checksum: 1ad4f9b3907c9f3673a0f0a07c0a23da7909ac6c9204c5d80a0ec102fe50ccc45f27fdf496361840d6c132c5bb0037122c0a381f856d070183d1ebe3e5e041ff + languageName: node + linkType: hard + "cookie@npm:0.7.1": version: 0.7.1 resolution: "cookie@npm:0.7.1" @@ -6091,7 +6464,7 @@ __metadata: languageName: node linkType: hard -"cookie@npm:~0.7.2": +"cookie@npm:^0.7.1, cookie@npm:~0.7.2": version: 0.7.2 resolution: "cookie@npm:0.7.2" checksum: 9bf8555e33530affd571ea37b615ccad9b9a34febbf2c950c86787088eb00a8973690833b0f8ebd6b69b753c62669ea60cec89178c1fb007bf0749abed74f93e @@ -6107,28 +6480,27 @@ __metadata: languageName: node linkType: hard -"copy-webpack-plugin@npm:12.0.2": - version: 12.0.2 - resolution: "copy-webpack-plugin@npm:12.0.2" +"copy-webpack-plugin@npm:13.0.1": + version: 13.0.1 + resolution: "copy-webpack-plugin@npm:13.0.1" dependencies: - fast-glob: ^3.3.2 glob-parent: ^6.0.1 - globby: ^14.0.0 normalize-path: ^3.0.0 schema-utils: ^4.2.0 serialize-javascript: ^6.0.2 + tinyglobby: ^0.2.12 peerDependencies: webpack: ^5.1.0 - checksum: 98127735336c6db5924688486d3a1854a41835963d0c0b81695b2e3d58c6675164be7d23dee7090b84a56d3c9923175d3d0863ac1942bcc3317d2efc1962b927 + checksum: 35673183e1e684ffa6ce85d463c14535296954d9ab7d46d487783a6a03c3e16b2c20070541b32e720eaddbfeaccf0abb193314f3a59dcc16778e414163f86205 languageName: node linkType: hard -"core-js-compat@npm:^3.40.0": - version: 3.44.0 - resolution: "core-js-compat@npm:3.44.0" +"core-js-compat@npm:^3.43.0": + version: 3.47.0 + resolution: "core-js-compat@npm:3.47.0" dependencies: - browserslist: ^4.25.1 - checksum: 5f9196a0793060bda0e019c2462df43502b145ada8b0d95a5affc6113d08e55a171227f92c7cc8dd6108037825eb0fee50f7784110de23bfd866dbdb67983d29 + browserslist: ^4.28.0 + checksum: 425c8cb4c3277a11f3d7d4752c53e5903892635126ed1cdc326a1cd7d961606c5d2c951493f1c783e624f9cdc1ec791c6db68dc19988d68f112d7d82a4c39c9a languageName: node linkType: hard @@ -6139,7 +6511,7 @@ __metadata: languageName: node linkType: hard -"cors@npm:~2.8.5": +"cors@npm:^2.8.5, cors@npm:~2.8.5": version: 2.8.5 resolution: "cors@npm:2.8.5" dependencies: @@ -6191,7 +6563,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.5": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" dependencies: @@ -6226,23 +6598,23 @@ __metadata: languageName: node linkType: hard -"css-select@npm:^5.1.0": - version: 5.1.0 - resolution: "css-select@npm:5.1.0" +"css-select@npm:^6.0.0": + version: 6.0.0 + resolution: "css-select@npm:6.0.0" dependencies: boolbase: ^1.0.0 - css-what: ^6.1.0 - domhandler: ^5.0.2 - domutils: ^3.0.1 - nth-check: ^2.0.1 - checksum: 2772c049b188d3b8a8159907192e926e11824aea525b8282981f72ba3f349cf9ecd523fdf7734875ee2cb772246c22117fc062da105b6d59afe8dcd5c99c9bda + css-what: ^7.0.0 + domhandler: ^5.0.3 + domutils: ^3.2.2 + nth-check: ^2.1.1 + checksum: e9fdbc01796e405a2f1b752dfbecb2eefab345af62149a493d5cfcd444c9712a9f154294185f27b6292b914da373c22df9e3faeab45165e9cacf89e8877cdbb7 languageName: node linkType: hard -"css-what@npm:^6.1.0": - version: 6.1.0 - resolution: "css-what@npm:6.1.0" - checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe +"css-what@npm:^7.0.0": + version: 7.0.0 + resolution: "css-what@npm:7.0.0" + checksum: 993dcd4e95f5fb1e85df0caf23ae17e22bd626764a9213c9ee3f29bdb056eae5dd3a61f4193dda42958f1f8eb61c810606843107f79e0a29fcc0ee05bc48db5f languageName: node linkType: hard @@ -6703,7 +7075,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.4.1, debug@npm:^4.4.3": +"debug@npm:^4.4.0, debug@npm:^4.4.1, debug@npm:^4.4.3": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -6751,15 +7123,6 @@ __metadata: languageName: node linkType: hard -"defaults@npm:^1.0.3": - version: 1.0.4 - resolution: "defaults@npm:1.0.4" - dependencies: - clone: ^1.0.2 - checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a - languageName: node - linkType: hard - "define-lazy-prop@npm:^3.0.0": version: 3.0.0 resolution: "define-lazy-prop@npm:3.0.0" @@ -6794,7 +7157,7 @@ __metadata: languageName: node linkType: hard -"depd@npm:2.0.0": +"depd@npm:2.0.0, depd@npm:^2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a @@ -6870,26 +7233,25 @@ __metadata: version: 0.0.0-use.local resolution: "dissendium-v0@workspace:." dependencies: - "@angular-devkit/build-angular": ~19.2.19 - "@angular/animations": ~19.2.14 - "@angular/cdk": ~19.2.14 - "@angular/cli": ~19.0.5 - "@angular/common": ~19.2.14 - "@angular/compiler": ~19.2.14 - "@angular/compiler-cli": ~19.0.4 - "@angular/core": ~19.2.14 - "@angular/forms": ~19.2.14 - "@angular/language-service": ~19.0.4 - "@angular/material": ~19.2.14 - "@angular/platform-browser": ~19.2.14 - "@angular/platform-browser-dynamic": ~19.2.14 - "@angular/router": ~19.2.14 + "@angular-devkit/build-angular": 20 + "@angular/animations": ~20.3.16 + "@angular/cdk": ~20.2.14 + "@angular/cli": ~20.3.14 + "@angular/common": ~20.3.16 + "@angular/compiler": ~20.3.16 + "@angular/compiler-cli": ~20.3.16 + "@angular/core": ~20.3.16 + "@angular/forms": ~20.3.16 + "@angular/language-service": ~20.3.16 + "@angular/material": ~20.2.14 + "@angular/platform-browser": ~20.3.16 + "@angular/platform-browser-dynamic": ~20.3.16 + "@angular/router": ~20.3.16 "@brumeilde/ngx-theme": ^1.2.1 "@jsonurl/jsonurl": ^1.1.8 "@ngstack/code-editor": ^9.0.0 "@sentry-internal/rrweb": ^2.16.0 - "@sentry/angular-ivy": ^7.116.0 - "@sentry/tracing": ^7.116.0 + "@sentry/angular": ^10.33.0 "@stripe/stripe-js": ^5.3.0 "@types/google-one-tap": ^1.2.6 "@types/jasmine": ~5.1.5 @@ -6931,7 +7293,7 @@ __metadata: rxjs: ^7.4.0 ts-node: ~10.9.2 tslib: ^2.8.1 - typescript: ~5.6.0 + typescript: ~5.9.3 uuid: ^11.1.0 validator: ^13.15.20 zone.js: ~0.15.0 @@ -7005,18 +7367,7 @@ __metadata: languageName: node linkType: hard -"domutils@npm:^3.0.1": - version: 3.1.0 - resolution: "domutils@npm:3.1.0" - dependencies: - dom-serializer: ^2.0.0 - domelementtype: ^2.3.0 - domhandler: ^5.0.3 - checksum: e5757456ddd173caa411cfc02c2bb64133c65546d2c4081381a3bafc8a57411a41eed70494551aa58030be9e58574fcc489828bebd673863d39924fb4878f416 - languageName: node - linkType: hard - -"domutils@npm:^3.2.1": +"domutils@npm:^3.2.1, domutils@npm:^3.2.2": version: 3.2.2 resolution: "domutils@npm:3.2.2" dependencies: @@ -7052,10 +7403,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.173": - version: 1.5.192 - resolution: "electron-to-chromium@npm:1.5.192" - checksum: 6d22320d5a946065e7919da8bfb7f47e6a1166239cf63be7ce12f93bbd91d3fec21e6082e39bc1c500d71f851d6d8893ca91e2952225634c122851a87e2dc9d3 +"electron-to-chromium@npm:^1.5.263": + version: 1.5.267 + resolution: "electron-to-chromium@npm:1.5.267" + checksum: 923a21ea4c3f2536eb7ccf80e92d9368a2e5a13e6deccb1d94c31b5a5b4e10e722149b85db9892e9819150f1c43462692a92dc85ba0c205a4eb578e173b3ab36 languageName: node linkType: hard @@ -7101,6 +7452,13 @@ __metadata: languageName: node linkType: hard +"encodeurl@npm:^2.0.0, encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe + languageName: node + linkType: hard + "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -7108,13 +7466,6 @@ __metadata: languageName: node linkType: hard -"encodeurl@npm:~2.0.0": - version: 2.0.0 - resolution: "encodeurl@npm:2.0.0" - checksum: abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe - languageName: node - linkType: hard - "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -7158,13 +7509,13 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.17.1": - version: 5.17.1 - resolution: "enhanced-resolve@npm:5.17.1" +"enhanced-resolve@npm:^5.17.3": + version: 5.18.4 + resolution: "enhanced-resolve@npm:5.18.4" dependencies: graceful-fs: ^4.2.4 tapable: ^2.2.0 - checksum: 4bc38cf1cea96456f97503db7280394177d1bc46f8f87c267297d04f795ac5efa81e48115a2f5b6273c781027b5b6bfc5f62b54df629e4d25fa7001a86624f59 + checksum: 8e8a1e8efd2361d32c8a4ea00523b52311ea47e66abebda159f1e60d8849161550821f44fde51fca20261b70a0b3f61dec6d4425816934a2adb65a9ea0574ec8 languageName: node linkType: hard @@ -7180,7 +7531,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.2.0, entities@npm:^4.3.0, entities@npm:^4.5.0": +"entities@npm:^4.2.0": version: 4.5.0 resolution: "entities@npm:4.5.0" checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 @@ -7265,44 +7616,45 @@ __metadata: languageName: node linkType: hard -"esbuild-wasm@npm:0.25.4": - version: 0.25.4 - resolution: "esbuild-wasm@npm:0.25.4" +"esbuild-wasm@npm:0.25.9": + version: 0.25.9 + resolution: "esbuild-wasm@npm:0.25.9" bin: esbuild: bin/esbuild - checksum: b7106cb33de6831547296bc9c6891966f5a646d43123c80d312933e15f584bffb76eb0e1b0aaa02d8b7f6ac3edd586b1667b360d2491856f2161f209e0ba5259 - languageName: node - linkType: hard - -"esbuild@npm:0.25.4": - version: 0.25.4 - resolution: "esbuild@npm:0.25.4" - dependencies: - "@esbuild/aix-ppc64": 0.25.4 - "@esbuild/android-arm": 0.25.4 - "@esbuild/android-arm64": 0.25.4 - "@esbuild/android-x64": 0.25.4 - "@esbuild/darwin-arm64": 0.25.4 - "@esbuild/darwin-x64": 0.25.4 - "@esbuild/freebsd-arm64": 0.25.4 - "@esbuild/freebsd-x64": 0.25.4 - "@esbuild/linux-arm": 0.25.4 - "@esbuild/linux-arm64": 0.25.4 - "@esbuild/linux-ia32": 0.25.4 - "@esbuild/linux-loong64": 0.25.4 - "@esbuild/linux-mips64el": 0.25.4 - "@esbuild/linux-ppc64": 0.25.4 - "@esbuild/linux-riscv64": 0.25.4 - "@esbuild/linux-s390x": 0.25.4 - "@esbuild/linux-x64": 0.25.4 - "@esbuild/netbsd-arm64": 0.25.4 - "@esbuild/netbsd-x64": 0.25.4 - "@esbuild/openbsd-arm64": 0.25.4 - "@esbuild/openbsd-x64": 0.25.4 - "@esbuild/sunos-x64": 0.25.4 - "@esbuild/win32-arm64": 0.25.4 - "@esbuild/win32-ia32": 0.25.4 - "@esbuild/win32-x64": 0.25.4 + checksum: 0c0666a2b939c9b51e2ab28cc9caff37fe3c7f381da08bd00a29a7371dd046492fa4e0ff3209d1ae45f814e48261edf0f64e6b7237b1881589561f7a95235c12 + languageName: node + linkType: hard + +"esbuild@npm:0.25.9": + version: 0.25.9 + resolution: "esbuild@npm:0.25.9" + dependencies: + "@esbuild/aix-ppc64": 0.25.9 + "@esbuild/android-arm": 0.25.9 + "@esbuild/android-arm64": 0.25.9 + "@esbuild/android-x64": 0.25.9 + "@esbuild/darwin-arm64": 0.25.9 + "@esbuild/darwin-x64": 0.25.9 + "@esbuild/freebsd-arm64": 0.25.9 + "@esbuild/freebsd-x64": 0.25.9 + "@esbuild/linux-arm": 0.25.9 + "@esbuild/linux-arm64": 0.25.9 + "@esbuild/linux-ia32": 0.25.9 + "@esbuild/linux-loong64": 0.25.9 + "@esbuild/linux-mips64el": 0.25.9 + "@esbuild/linux-ppc64": 0.25.9 + "@esbuild/linux-riscv64": 0.25.9 + "@esbuild/linux-s390x": 0.25.9 + "@esbuild/linux-x64": 0.25.9 + "@esbuild/netbsd-arm64": 0.25.9 + "@esbuild/netbsd-x64": 0.25.9 + "@esbuild/openbsd-arm64": 0.25.9 + "@esbuild/openbsd-x64": 0.25.9 + "@esbuild/openharmony-arm64": 0.25.9 + "@esbuild/sunos-x64": 0.25.9 + "@esbuild/win32-arm64": 0.25.9 + "@esbuild/win32-ia32": 0.25.9 + "@esbuild/win32-x64": 0.25.9 dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -7346,6 +7698,8 @@ __metadata: optional: true "@esbuild/openbsd-x64": optional: true + "@esbuild/openharmony-arm64": + optional: true "@esbuild/sunos-x64": optional: true "@esbuild/win32-arm64": @@ -7356,7 +7710,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: cd39e0236ba9ab39d28e5ba0aab9b63b3f7f3fdcd449422bfcaff087aedcf4fa0e754cb89fba37d96c67874e995e3c02634ef392f09928cdf4a5daf4dddd0171 + checksum: 718bc15016266da5b4675c2226923cadfe014b119e5c7a9240a6fe826c01ec2e7d5492af052e1c8a03b511778187f234cef2e994e6195287945ce0a824b79974 languageName: node linkType: hard @@ -7456,7 +7810,7 @@ __metadata: languageName: node linkType: hard -"escape-html@npm:~1.0.3": +"escape-html@npm:^1.0.3, escape-html@npm:~1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 @@ -7531,7 +7885,7 @@ __metadata: languageName: node linkType: hard -"etag@npm:~1.8.1": +"etag@npm:^1.8.1, etag@npm:~1.8.1": version: 1.8.1 resolution: "etag@npm:1.8.1" checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff @@ -7559,6 +7913,22 @@ __metadata: languageName: node linkType: hard +"eventsource-parser@npm:^3.0.0, eventsource-parser@npm:^3.0.1": + version: 3.0.6 + resolution: "eventsource-parser@npm:3.0.6" + checksum: b90ec27f8d992afa7df171db202faaedb1782214f64e50690cbf78bc2629f7751575aa27a72d8ae447e5a7094938406b1a3ea1d89e5f0f2d6916cc8a694b6587 + languageName: node + linkType: hard + +"eventsource@npm:^3.0.2": + version: 3.0.7 + resolution: "eventsource@npm:3.0.7" + dependencies: + eventsource-parser: ^3.0.1 + checksum: cd8cbc3418238b9d751b6652edf442d4b869829fbc3b73444abca1816fe3d23dc707130dd9a990360bc27c281d986f2f62059d870921173425c3ac28d20a8414 + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" @@ -7566,6 +7936,15 @@ __metadata: languageName: node linkType: hard +"express-rate-limit@npm:^7.5.0": + version: 7.5.1 + resolution: "express-rate-limit@npm:7.5.1" + peerDependencies: + express: ">= 4.11" + checksum: 544fdd576a846a7d3ed0203a011cec6d65ad8e5eab58dbe045a0bdefd119060c140c38b327e32713b56342cc901a3ca5c99f13cce4ceee08408e775ec4742c16 + languageName: node + linkType: hard + "express@npm:^4.21.2": version: 4.21.2 resolution: "express@npm:4.21.2" @@ -7605,6 +7984,42 @@ __metadata: languageName: node linkType: hard +"express@npm:^5.0.1": + version: 5.2.1 + resolution: "express@npm:5.2.1" + dependencies: + accepts: ^2.0.0 + body-parser: ^2.2.1 + content-disposition: ^1.0.0 + content-type: ^1.0.5 + cookie: ^0.7.1 + cookie-signature: ^1.2.1 + debug: ^4.4.0 + depd: ^2.0.0 + encodeurl: ^2.0.0 + escape-html: ^1.0.3 + etag: ^1.8.1 + finalhandler: ^2.1.0 + fresh: ^2.0.0 + http-errors: ^2.0.0 + merge-descriptors: ^2.0.0 + mime-types: ^3.0.0 + on-finished: ^2.4.1 + once: ^1.4.0 + parseurl: ^1.3.3 + proxy-addr: ^2.0.7 + qs: ^6.14.0 + range-parser: ^1.2.1 + router: ^2.2.0 + send: ^1.1.0 + serve-static: ^2.2.0 + statuses: ^2.0.1 + type-is: ^2.0.1 + vary: ^1.1.2 + checksum: e0bc9c11fcf4e6ed29c9b0551229e8cf35d959970eb5e10ef3e48763eb3a63487251950d9bf4ef38b93085f0f33bb1fc37ab07349b8fa98a0fa5f67236d4c054 + languageName: node + linkType: hard + "exsolve@npm:^1.0.7": version: 1.0.7 resolution: "exsolve@npm:1.0.7" @@ -7619,17 +8034,6 @@ __metadata: languageName: node linkType: hard -"external-editor@npm:^3.1.0": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: ^0.7.0 - iconv-lite: ^0.4.24 - tmp: ^0.0.33 - checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 - languageName: node - linkType: hard - "extract-zip@npm:^2.0.1": version: 2.0.1 resolution: "extract-zip@npm:2.0.1" @@ -7802,23 +8206,27 @@ __metadata: languageName: node linkType: hard -"find-cache-dir@npm:^4.0.0": - version: 4.0.0 - resolution: "find-cache-dir@npm:4.0.0" +"finalhandler@npm:^2.1.0": + version: 2.1.1 + resolution: "finalhandler@npm:2.1.1" dependencies: - common-path-prefix: ^3.0.0 - pkg-dir: ^7.0.0 - checksum: 52a456a80deeb27daa3af6e06059b63bdb9cc4af4d845fc6d6229887e505ba913cd56000349caa60bc3aa59dacdb5b4c37903d4ba34c75102d83cab330b70d2f + debug: ^4.4.0 + encodeurl: ^2.0.0 + escape-html: ^1.0.3 + on-finished: ^2.4.1 + parseurl: ^1.3.3 + statuses: ^2.0.1 + checksum: e5303c4cccce46019cf0f59b07a36cc6d37549f1efe2111c16cd78e6e500d3bfd68d3b45044c9a67a0c75ad3128ee1106fae9a0152ca3c0a8ee3bf3a4a1464bb languageName: node linkType: hard -"find-up@npm:^6.3.0": - version: 6.3.0 - resolution: "find-up@npm:6.3.0" +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" dependencies: - locate-path: ^7.1.0 - path-exists: ^5.0.0 - checksum: 9a21b7f9244a420e54c6df95b4f6fc3941efd3c3e5476f8274eb452f6a85706e7a6a90de71353ee4f091fcb4593271a6f92810a324ec542650398f928783c280 + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 languageName: node linkType: hard @@ -7890,6 +8298,13 @@ __metadata: languageName: node linkType: hard +"fresh@npm:^2.0.0": + version: 2.0.0 + resolution: "fresh@npm:2.0.0" + checksum: 38b9828352c6271e2a0dd8bdd985d0100dbbc4eb8b6a03286071dd6f7d96cfaacd06d7735701ad9a95870eb3f4555e67c08db1dcfe24c2e7bb87383c72fae1d2 + languageName: node + linkType: hard + "fs-extra@npm:^8.1.0": version: 8.1.0 resolution: "fs-extra@npm:8.1.0" @@ -8080,20 +8495,6 @@ __metadata: languageName: node linkType: hard -"globby@npm:^14.0.0": - version: 14.0.2 - resolution: "globby@npm:14.0.2" - dependencies: - "@sindresorhus/merge-streams": ^2.1.0 - fast-glob: ^3.3.2 - ignore: ^5.2.4 - path-type: ^5.0.0 - slash: ^5.1.0 - unicorn-magic: ^0.1.0 - checksum: 2cee79efefca4383a825fc2fcbdb37e5706728f2d39d4b63851927c128fff62e6334ef7d4d467949d411409ad62767dc2d214e0f837a0f6d4b7290b6711d485c - languageName: node - linkType: hard - "good-listener@npm:^1.2.2": version: 1.2.2 resolution: "good-listener@npm:1.2.2" @@ -8172,6 +8573,15 @@ __metadata: languageName: node linkType: hard +"hosted-git-info@npm:^9.0.0": + version: 9.0.2 + resolution: "hosted-git-info@npm:9.0.2" + dependencies: + lru-cache: ^11.1.0 + checksum: 01687a41925189ab10dfd6c5b295d9186366faf22f74face5f83c6ac8e9927f25d5d91fad3352ee6833a3130e35d5fd71c9037a2d684e307cfd321724a90a689 + languageName: node + linkType: hard + "hpack.js@npm:^2.1.6": version: 2.1.6 resolution: "hpack.js@npm:2.1.6" @@ -8230,6 +8640,19 @@ __metadata: languageName: node linkType: hard +"http-errors@npm:^2.0.0, http-errors@npm:^2.0.1, http-errors@npm:~2.0.1": + version: 2.0.1 + resolution: "http-errors@npm:2.0.1" + dependencies: + depd: ~2.0.0 + inherits: ~2.0.4 + setprototypeof: ~1.2.0 + statuses: ~2.0.2 + toidentifier: ~1.0.1 + checksum: 155d1a100a06e4964597013109590b97540a177b69c3600bbc93efc746465a99a2b718f43cdf76b3791af994bbe3a5711002046bf668cdc007ea44cea6df7ccd + languageName: node + linkType: hard + "http-errors@npm:~1.6.2": version: 1.6.3 resolution: "http-errors@npm:1.6.3" @@ -8319,7 +8742,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": +"iconv-lite@npm:0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" dependencies: @@ -8337,6 +8760,15 @@ __metadata: languageName: node linkType: hard +"iconv-lite@npm:^0.7.0, iconv-lite@npm:~0.7.0": + version: 0.7.2 + resolution: "iconv-lite@npm:0.7.2" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: faf884c1f631a5d676e3e64054bed891c7c5f616b790082d99ccfbfd017c661a39db8009160268fd65fae57c9154d4d491ebc9c301f3446a078460ef114dc4b8 + languageName: node + linkType: hard + "icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": version: 5.1.0 resolution: "icss-utils@npm:5.1.0" @@ -8346,26 +8778,12 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.1.13": - version: 1.2.1 - resolution: "ieee754@npm:1.2.1" - checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e - languageName: node - linkType: hard - -"ignore-walk@npm:^7.0.0": - version: 7.0.0 - resolution: "ignore-walk@npm:7.0.0" +"ignore-walk@npm:^8.0.0": + version: 8.0.0 + resolution: "ignore-walk@npm:8.0.0" dependencies: - minimatch: ^9.0.0 - checksum: 509a2a5f10e6ec17b24ae4d23bb774c9243a1590aee3795c8787fb3f2d94f3d6f83f3e6b15614a0c93f1a2f43c7d978a4e4f45ea83fe25dd81da395417bb19ea - languageName: node - linkType: hard - -"ignore@npm:^5.2.4": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be + minimatch: ^10.0.3 + checksum: 4146c18cd441b538bd68b62cfb95f71fed0a7ff54ba50cd22ae3c05abc538ea3a8272c96bd7a5d38feb0ea79c3f4ffc2ac0092f18bf906c6c1ef151b76c21b30 languageName: node linkType: hard @@ -8378,13 +8796,6 @@ __metadata: languageName: node linkType: hard -"immediate@npm:~3.0.5": - version: 3.0.6 - resolution: "immediate@npm:3.0.6" - checksum: f9b3486477555997657f70318cc8d3416159f208bec4cca3ff3442fd266bc23f50f0c9bd8547e1371a6b5e82b821ec9a7044a4f7b944798b25aa3cc6d5e63e62 - languageName: node - linkType: hard - "immutable@npm:^5.0.2": version: 5.0.3 resolution: "immutable@npm:5.0.3" @@ -8419,7 +8830,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3, inherits@npm:~2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -8501,7 +8912,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.0": +"is-core-module@npm:^2.16.0": version: 2.16.0 resolution: "is-core-module@npm:2.16.0" dependencies: @@ -8510,6 +8921,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.16.1": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: ^2.0.2 + checksum: 6ec5b3c42d9cbf1ac23f164b16b8a140c3cec338bf8f884c076ca89950c7cc04c33e78f02b8cae7ff4751f3247e3174b2330f1fe4de194c7210deb8b1ea316a7 + languageName: node + linkType: hard + "is-docker@npm:^3.0.0": version: 3.0.0 resolution: "is-docker@npm:3.0.0" @@ -8569,10 +8989,10 @@ __metadata: languageName: node linkType: hard -"is-interactive@npm:^1.0.0": - version: 1.0.0 - resolution: "is-interactive@npm:1.0.0" - checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 +"is-interactive@npm:^2.0.0": + version: 2.0.0 + resolution: "is-interactive@npm:2.0.0" + checksum: e8d52ad490bed7ae665032c7675ec07732bbfe25808b0efbc4d5a76b1a1f01c165f332775c63e25e9a03d319ebb6b24f571a9e902669fc1e40b0a60b5be6e26c languageName: node linkType: hard @@ -8613,6 +9033,13 @@ __metadata: languageName: node linkType: hard +"is-promise@npm:^4.0.0": + version: 4.0.0 + resolution: "is-promise@npm:4.0.0" + checksum: 0b46517ad47b00b6358fd6553c83ec1f6ba9acd7ffb3d30a0bf519c5c69e7147c132430452351b8a9fc198f8dd6c4f76f8e6f5a7f100f8c77d57d9e0f4261a8a + languageName: node + linkType: hard + "is-regex@npm:^1.2.1": version: 1.2.1 resolution: "is-regex@npm:1.2.1" @@ -8625,10 +9052,17 @@ __metadata: languageName: node linkType: hard -"is-unicode-supported@npm:^0.1.0": - version: 0.1.0 - resolution: "is-unicode-supported@npm:0.1.0" - checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 +"is-unicode-supported@npm:^1.3.0": + version: 1.3.0 + resolution: "is-unicode-supported@npm:1.3.0" + checksum: 20a1fc161afafaf49243551a5ac33b6c4cf0bbcce369fcd8f2951fbdd000c30698ce320de3ee6830497310a8f41880f8066d440aa3eb0a853e2aa4836dd89abc + languageName: node + linkType: hard + +"is-unicode-supported@npm:^2.0.0": + version: 2.1.0 + resolution: "is-unicode-supported@npm:2.1.0" + checksum: f254e3da6b0ab1a57a94f7273a7798dd35d1d45b227759f600d0fa9d5649f9c07fa8d3c8a6360b0e376adf916d151ec24fc9a50c5295c58bae7ca54a76a063f9 languageName: node linkType: hard @@ -8833,6 +9267,13 @@ __metadata: languageName: node linkType: hard +"jose@npm:^6.1.1": + version: 6.1.3 + resolution: "jose@npm:6.1.3" + checksum: 7f51c7e77f82b70ef88ede9fd1760298bc0ffbf143b9d94f78c08462987ae61864535c1856bc6c26d335f857c7d41f4fffcc29134212c19ea929ce34a4c790f0 + languageName: node + linkType: hard + "js-base64@npm:^3.7.5": version: 3.7.7 resolution: "js-base64@npm:3.7.7" @@ -8876,7 +9317,7 @@ __metadata: languageName: node linkType: hard -"jsesc@npm:^3.0.2": +"jsesc@npm:^3.0.2, jsesc@npm:~3.1.0": version: 3.1.0 resolution: "jsesc@npm:3.1.0" bin: @@ -8915,6 +9356,13 @@ __metadata: languageName: node linkType: hard +"json-schema-typed@npm:^8.0.2": + version: 8.0.2 + resolution: "json-schema-typed@npm:8.0.2" + checksum: 8ddb3c2b1bad406507ea077d4d8cfe6dae5b920f642efab145e4bd6e0d3984f01034ee4467bbeabd51e129b17d7446ceb357a6b1648857fdfaf61ba8ef621ff6 + languageName: node + linkType: hard + "json5@npm:^2.1.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" @@ -9157,9 +9605,9 @@ __metadata: languageName: node linkType: hard -"less-loader@npm:12.2.0": - version: 12.2.0 - resolution: "less-loader@npm:12.2.0" +"less-loader@npm:12.3.0": + version: 12.3.0 + resolution: "less-loader@npm:12.3.0" peerDependencies: "@rspack/core": 0.x || 1.x less: ^3.5.0 || ^4.0.0 @@ -9169,13 +9617,13 @@ __metadata: optional: true webpack: optional: true - checksum: df08dba1d733d6b4202ce185e8fe4897c407a20aeba01dc214f514352ab5aadcd53fc76366b9e473f9ec920bb612d839b39c686303d2ce2155edf61a7be69b7b + checksum: 9a291f37a4514349ce4a187ddffd77bfd7d4f97077f71aa6dbfc81393a0cd3c00ab793c13f40a4d3acdbad423db9d2e75054ede4fb1900ba0e49882c9405a4f7 languageName: node linkType: hard -"less@npm:4.2.2": - version: 4.2.2 - resolution: "less@npm:4.2.2" +"less@npm:4.4.0": + version: 4.4.0 + resolution: "less@npm:4.4.0" dependencies: copy-anything: ^2.0.1 errno: ^0.1.1 @@ -9204,7 +9652,7 @@ __metadata: optional: true bin: lessc: bin/lessc - checksum: 77b503d32f0c6fa2ce4aabb25c0f1dbaad9562d05e5416bd218dc20b2548f42baacfb36d452d4a1336eca22c57d66d4e32de66f80d8d976a8fe824e30f78a151 + checksum: e7871347f1e7b5ac40a672048ed86227a027cfc1a9d3cee72429f08c91164003209b3f0e453a601e5bbfab6bf671465509a8365d22473fc65b64281aba916e6b languageName: node linkType: hard @@ -9229,15 +9677,6 @@ __metadata: languageName: node linkType: hard -"lie@npm:3.1.1": - version: 3.1.1 - resolution: "lie@npm:3.1.1" - dependencies: - immediate: ~3.0.5 - checksum: 6da9f2121d2dbd15f1eca44c0c7e211e66a99c7b326ec8312645f3648935bc3a658cf0e9fa7b5f10144d9e2641500b4f55bd32754607c3de945b5f443e50ddd1 - languageName: node - linkType: hard - "lilconfig@npm:^3.0.0, lilconfig@npm:^3.1.3": version: 3.1.3 resolution: "lilconfig@npm:3.1.3" @@ -9252,9 +9691,9 @@ __metadata: languageName: node linkType: hard -"listr2@npm:8.2.5": - version: 8.2.5 - resolution: "listr2@npm:8.2.5" +"listr2@npm:9.0.1": + version: 9.0.1 + resolution: "listr2@npm:9.0.1" dependencies: cli-truncate: ^4.0.0 colorette: ^2.0.20 @@ -9262,20 +9701,21 @@ __metadata: log-update: ^6.1.0 rfdc: ^1.4.1 wrap-ansi: ^9.0.0 - checksum: 0ca2387b067eb11bbe91863f36903f3a5a040790422a499cc1a15806d8497979e7d1990bd129061c0510906b2971eaa97a74a9635e3ec5abd5830c9749b655b9 + checksum: 7880c3732951d07c1d81eeccb46a7ce4f2274b6974e0f929a5c6f5386a304c65da102bc646b8372c55ba5cc5e5510b634c15c13b6492663f2a59b401ace3abbe languageName: node linkType: hard -"lmdb@npm:3.2.6": - version: 3.2.6 - resolution: "lmdb@npm:3.2.6" +"lmdb@npm:3.4.2": + version: 3.4.2 + resolution: "lmdb@npm:3.4.2" dependencies: - "@lmdb/lmdb-darwin-arm64": 3.2.6 - "@lmdb/lmdb-darwin-x64": 3.2.6 - "@lmdb/lmdb-linux-arm": 3.2.6 - "@lmdb/lmdb-linux-arm64": 3.2.6 - "@lmdb/lmdb-linux-x64": 3.2.6 - "@lmdb/lmdb-win32-x64": 3.2.6 + "@lmdb/lmdb-darwin-arm64": 3.4.2 + "@lmdb/lmdb-darwin-x64": 3.4.2 + "@lmdb/lmdb-linux-arm": 3.4.2 + "@lmdb/lmdb-linux-arm64": 3.4.2 + "@lmdb/lmdb-linux-x64": 3.4.2 + "@lmdb/lmdb-win32-arm64": 3.4.2 + "@lmdb/lmdb-win32-x64": 3.4.2 msgpackr: ^1.11.2 node-addon-api: ^6.1.0 node-gyp: latest @@ -9293,11 +9733,13 @@ __metadata: optional: true "@lmdb/lmdb-linux-x64": optional: true + "@lmdb/lmdb-win32-arm64": + optional: true "@lmdb/lmdb-win32-x64": optional: true bin: download-lmdb-prebuilds: bin/download-prebuilds.js - checksum: 1ccde5566c06a17f401abfdbd0cee09a4ce5a8f40fe306959520959fe30b3cad6a11b3e10d314c496b587a8048fe4d65cb341da385a6f0b74a14522d3f92617f + checksum: e526e613e139767140ce606780820413550fc7713dab7454ebca905e9737eb9fb1b11e05d802b1dd04cec4f890cb6e3ba8ff4ddd5af745e7f37febaf61107aae languageName: node linkType: hard @@ -9337,21 +9779,12 @@ __metadata: languageName: node linkType: hard -"localforage@npm:^1.8.1": - version: 1.10.0 - resolution: "localforage@npm:1.10.0" - dependencies: - lie: 3.1.1 - checksum: f2978b434dafff9bcb0d9498de57d97eba165402419939c944412e179cab1854782830b5ec196212560b22712d1dd03918939f59cf1d4fc1d756fca7950086cf - languageName: node - linkType: hard - -"locate-path@npm:^7.1.0": - version: 7.2.0 - resolution: "locate-path@npm:7.2.0" +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" dependencies: - p-locate: ^6.0.0 - checksum: c1b653bdf29beaecb3d307dfb7c44d98a2a98a02ebe353c9ad055d1ac45d6ed4e1142563d222df9b9efebc2bcb7d4c792b507fad9e7150a04c29530b7db570f8 + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a languageName: node linkType: hard @@ -9376,13 +9809,13 @@ __metadata: languageName: node linkType: hard -"log-symbols@npm:^4.1.0": - version: 4.1.0 - resolution: "log-symbols@npm:4.1.0" +"log-symbols@npm:^6.0.0": + version: 6.0.0 + resolution: "log-symbols@npm:6.0.0" dependencies: - chalk: ^4.1.0 - is-unicode-supported: ^0.1.0 - checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 + chalk: ^5.3.0 + is-unicode-supported: ^1.3.0 + checksum: 510cdda36700cbcd87a2a691ea08d310a6c6b449084018f7f2ec4f732ca5e51b301ff1327aadd96f53c08318e616276c65f7fe22f2a16704fb0715d788bc3c33 languageName: node linkType: hard @@ -9419,6 +9852,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^11.1.0": + version: 11.2.4 + resolution: "lru-cache@npm:11.2.4" + checksum: cb8cf72b80a506593f51880bd5a765380d6d8eb82e99b2fbb2f22fe39e5f2f641d47a2509e74cc294617f32a4e90ae8f6214740fe00bc79a6178854f00419b24 + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -9435,15 +9875,6 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:0.30.12": - version: 0.30.12 - resolution: "magic-string@npm:0.30.12" - dependencies: - "@jridgewell/sourcemap-codec": ^1.5.0 - checksum: 3f0d23b74371765f0e6cad4284eebba0ac029c7a55e39292de5aa92281afb827138cb2323d24d2924f6b31f138c3783596c5ccaa98653fe9cf122e1f81325b59 - languageName: node - linkType: hard - "magic-string@npm:0.30.17": version: 0.30.17 resolution: "magic-string@npm:0.30.17" @@ -9521,6 +9952,13 @@ __metadata: languageName: node linkType: hard +"media-typer@npm:^1.1.0": + version: 1.1.0 + resolution: "media-typer@npm:1.1.0" + checksum: a58dd60804df73c672942a7253ccc06815612326dc1c0827984b1a21704466d7cde351394f47649e56cf7415e6ee2e26e000e81b51b3eebb5a93540e8bf93cbd + languageName: node + linkType: hard + "memfs@npm:^4.6.0": version: 4.15.0 resolution: "memfs@npm:4.15.0" @@ -9540,6 +9978,13 @@ __metadata: languageName: node linkType: hard +"merge-descriptors@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-descriptors@npm:2.0.0" + checksum: e383332e700a94682d0125a36c8be761142a1320fc9feeb18e6e36647c9edf064271645f5669b2c21cf352116e561914fd8aa831b651f34db15ef4038c86696a + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -9613,6 +10058,13 @@ __metadata: languageName: node linkType: hard +"mime-db@npm:^1.54.0": + version: 1.54.0 + resolution: "mime-db@npm:1.54.0" + checksum: e99aaf2f23f5bd607deb08c83faba5dd25cf2fec90a7cc5b92d8260867ee08dab65312e1a589e60093dc7796d41e5fae013268418482f1db4c7d52d0a0960ac9 + languageName: node + linkType: hard + "mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" @@ -9622,6 +10074,15 @@ __metadata: languageName: node linkType: hard +"mime-types@npm:^3.0.0, mime-types@npm:^3.0.2": + version: 3.0.2 + resolution: "mime-types@npm:3.0.2" + dependencies: + mime-db: ^1.54.0 + checksum: 70b74794f408419e4b6a8e3c93ccbed79b6a6053973a3957c5cc04ff4ad8d259f0267da179e3ecae34c3edfb4bfd7528db23a101e32d21ad8e196178c8b7b75a + languageName: node + linkType: hard + "mime@npm:1.6.0, mime@npm:^1.4.1": version: 1.6.0 resolution: "mime@npm:1.6.0" @@ -9640,13 +10101,6 @@ __metadata: languageName: node linkType: hard -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a - languageName: node - linkType: hard - "mimic-function@npm:^5.0.0": version: 5.0.1 resolution: "mimic-function@npm:5.0.1" @@ -9654,15 +10108,15 @@ __metadata: languageName: node linkType: hard -"mini-css-extract-plugin@npm:2.9.2": - version: 2.9.2 - resolution: "mini-css-extract-plugin@npm:2.9.2" +"mini-css-extract-plugin@npm:2.9.4": + version: 2.9.4 + resolution: "mini-css-extract-plugin@npm:2.9.4" dependencies: schema-utils: ^4.0.0 tapable: ^2.2.1 peerDependencies: webpack: ^5.0.0 - checksum: 67a1f75359371a7776108999d472ae0942ccd904401e364e3a2c710d4b6fec61c4f53288594fcac35891f009e6df8825a00dfd3bfe4bcec0f862081d1f7cad50 + checksum: 4ec46ebdcb5dae4b1c012debca90fea27b1e8e7790d408154232d77d25f56f839e7b1ec5401a962d6356e7b9301c760d2ef62e1cb0d4d7b6ec8209f812733dda languageName: node linkType: hard @@ -9673,6 +10127,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^10.0.3": + version: 10.1.1 + resolution: "minimatch@npm:10.1.1" + dependencies: + "@isaacs/brace-expansion": ^5.0.0 + checksum: 8820c0be92994f57281f0a7a2cc4268dcc4b610f9a1ab666685716b4efe4b5898b43c835a8f22298875b31c7a278a5e3b7e253eee7c886546bb0b61fb94bca6b + languageName: node + linkType: hard + "minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -9682,7 +10145,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": +"minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": version: 9.0.5 resolution: "minimatch@npm:9.0.5" dependencies: @@ -9923,13 +10386,6 @@ __metadata: languageName: node linkType: hard -"mute-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "mute-stream@npm:1.0.0" - checksum: 36fc968b0e9c9c63029d4f9dc63911950a3bdf55c9a87f58d3a266289b67180201cade911e7699f8b2fa596b34c9db43dad37649e3f7fdd13c3bb9edb0017ee7 - languageName: node - linkType: hard - "mute-stream@npm:^2.0.0": version: 2.0.0 resolution: "mute-stream@npm:2.0.0" @@ -9948,7 +10404,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.11, nanoid@npm:^3.3.8": +"nanoid@npm:^3.3.11": version: 3.3.11 resolution: "nanoid@npm:3.3.11" bin: @@ -10148,6 +10604,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.27": + version: 2.0.27 + resolution: "node-releases@npm:2.0.27" + checksum: a9a54079d894704c2ec728a690b41fbc779a710f5d47b46fa3e460acff08a3e7dfa7108e5599b2db390aa31dac062c47c5118317201f12784188dc5b415f692d + languageName: node + linkType: hard + "nopt@npm:^8.0.0": version: 8.0.0 resolution: "nopt@npm:8.0.0" @@ -10209,15 +10672,15 @@ __metadata: languageName: node linkType: hard -"npm-package-arg@npm:12.0.0": - version: 12.0.0 - resolution: "npm-package-arg@npm:12.0.0" +"npm-package-arg@npm:13.0.0": + version: 13.0.0 + resolution: "npm-package-arg@npm:13.0.0" dependencies: - hosted-git-info: ^8.0.0 + hosted-git-info: ^9.0.0 proc-log: ^5.0.0 semver: ^7.3.5 validate-npm-package-name: ^6.0.0 - checksum: c2c0d8ebe1072c3226dcded0a59691804841c413802bed40f196fdcedfafbf1f00e87d77b373b3f31273a59ae815a9c9d234bd29d9e7d21786c3bf8ae421e871 + checksum: 6c2dc4029f6633300dfcc7223dcdcee713014e3702daee76410dfe48e8e93d4db35703721569fcec3fdeb03fefa398eb38b799d6e9af46b92cc8162827eb9fa7 languageName: node linkType: hard @@ -10233,16 +10696,17 @@ __metadata: languageName: node linkType: hard -"npm-packlist@npm:^9.0.0": - version: 9.0.0 - resolution: "npm-packlist@npm:9.0.0" +"npm-packlist@npm:^10.0.0": + version: 10.0.3 + resolution: "npm-packlist@npm:10.0.3" dependencies: - ignore-walk: ^7.0.0 - checksum: 1286dcec2e53503ce7133088f82fb0840405a623f035487eafcdaf0865dc1632c970ad3e24234eb13ccd33f41ba2b95d13585038ef76817dfd74dd93c1b73eae + ignore-walk: ^8.0.0 + proc-log: ^6.0.0 + checksum: f61e3aec179d82332b22e577d0a48bc3fc67012321db80f06a9b71dc58e2876ac18bb3b837e3635967b2641f4374a5b81794e25e35771b6a1fd9c65543e6e235 languageName: node linkType: hard -"npm-pick-manifest@npm:10.0.0, npm-pick-manifest@npm:^10.0.0": +"npm-pick-manifest@npm:^10.0.0": version: 10.0.0 resolution: "npm-pick-manifest@npm:10.0.0" dependencies: @@ -10270,7 +10734,7 @@ __metadata: languageName: node linkType: hard -"nth-check@npm:^2.0.1": +"nth-check@npm:^2.1.1": version: 2.1.1 resolution: "nth-check@npm:2.1.1" dependencies: @@ -10341,15 +10805,6 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.0": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: ^2.1.0 - checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 - languageName: node - linkType: hard - "onetime@npm:^7.0.0": version: 7.0.0 resolution: "onetime@npm:7.0.0" @@ -10359,7 +10814,19 @@ __metadata: languageName: node linkType: hard -"open@npm:10.1.0, open@npm:^10.0.3": +"open@npm:10.2.0": + version: 10.2.0 + resolution: "open@npm:10.2.0" + dependencies: + default-browser: ^5.2.1 + define-lazy-prop: ^3.0.0 + is-inside-container: ^1.0.0 + wsl-utils: ^0.1.0 + checksum: 64e2e1fb1dc5ab82af06c990467237b8fd349b1b9ecc6324d12df337a005d039cec11f758abea148be68878ccd616977005682c48ef3c5c7ba48bd3e5d6a3dbb + languageName: node + linkType: hard + +"open@npm:^10.0.3": version: 10.1.0 resolution: "open@npm:10.1.0" dependencies: @@ -10371,20 +10838,20 @@ __metadata: languageName: node linkType: hard -"ora@npm:5.4.1": - version: 5.4.1 - resolution: "ora@npm:5.4.1" +"ora@npm:8.2.0": + version: 8.2.0 + resolution: "ora@npm:8.2.0" dependencies: - bl: ^4.1.0 - chalk: ^4.1.0 - cli-cursor: ^3.1.0 - cli-spinners: ^2.5.0 - is-interactive: ^1.0.0 - is-unicode-supported: ^0.1.0 - log-symbols: ^4.1.0 - strip-ansi: ^6.0.0 - wcwidth: ^1.0.1 - checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63 + chalk: ^5.3.0 + cli-cursor: ^5.0.0 + cli-spinners: ^2.9.2 + is-interactive: ^2.0.0 + is-unicode-supported: ^2.0.0 + log-symbols: ^6.0.0 + stdin-discarder: ^0.2.2 + string-width: ^7.2.0 + strip-ansi: ^7.1.0 + checksum: 3ef1335ff4d03e83f5715435c6d0c1fc7a1913a37f8df9e7ebbb0dd77b931a5442f6bf1dbe3056bbfddf763390f5e69e7659565dc6b261bee31ac4622a35120f languageName: node linkType: hard @@ -10395,13 +10862,6 @@ __metadata: languageName: node linkType: hard -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d - languageName: node - linkType: hard - "oxc-resolver@npm:^11.15.0": version: 11.16.2 resolution: "oxc-resolver@npm:11.16.2" @@ -10471,21 +10931,21 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^4.0.0": - version: 4.0.0 - resolution: "p-limit@npm:4.0.0" +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" dependencies: - yocto-queue: ^1.0.0 - checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 languageName: node linkType: hard -"p-locate@npm:^6.0.0": - version: 6.0.0 - resolution: "p-locate@npm:6.0.0" +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" dependencies: - p-limit: ^4.0.0 - checksum: 2bfe5234efa5e7a4e74b30a5479a193fdd9236f8f6b4d2f3f69e3d286d9a7d7ab0c118a2a50142efcf4e41625def635bd9332d6cbf9cc65d85eb0718c579ab38 + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 languageName: node linkType: hard @@ -10547,9 +11007,9 @@ __metadata: languageName: node linkType: hard -"pacote@npm:20.0.0": - version: 20.0.0 - resolution: "pacote@npm:20.0.0" +"pacote@npm:21.0.0": + version: 21.0.0 + resolution: "pacote@npm:21.0.0" dependencies: "@npmcli/git": ^6.0.0 "@npmcli/installed-package-contents": ^3.0.0 @@ -10560,7 +11020,7 @@ __metadata: fs-minipass: ^3.0.0 minipass: ^7.0.2 npm-package-arg: ^12.0.0 - npm-packlist: ^9.0.0 + npm-packlist: ^10.0.0 npm-pick-manifest: ^10.0.0 npm-registry-fetch: ^18.0.0 proc-log: ^5.0.0 @@ -10570,7 +11030,7 @@ __metadata: tar: ^6.1.11 bin: pacote: bin/index.js - checksum: 6fc395b579799da4bafa1d1b309df03a0b2540dfb29c312ee17e60afdec872d4da11398fc2be081184c0b73def935bb5ebf57b193623926ec2e502e4b98fe6ea + checksum: 46e1605902cbbf8979e770bff2dbf8d84206b9432fe5baab328c477cc0944bbe9ad1e5aff4332099fdcb2014209c540e40fd265fcaa5521c0b37c25c763af9de languageName: node linkType: hard @@ -10602,36 +11062,36 @@ __metadata: languageName: node linkType: hard -"parse5-html-rewriting-stream@npm:7.0.0": - version: 7.0.0 - resolution: "parse5-html-rewriting-stream@npm:7.0.0" +"parse5-html-rewriting-stream@npm:8.0.0": + version: 8.0.0 + resolution: "parse5-html-rewriting-stream@npm:8.0.0" dependencies: - entities: ^4.3.0 - parse5: ^7.0.0 - parse5-sax-parser: ^7.0.0 - checksum: 5903351fbf481342a07db3664ce38e9100a22fba0c93050562ef09971fe9665ef0b0650ba934468330e1bb90d3df6a29b2b14e70052bee7815d089c57c349baa + entities: ^6.0.0 + parse5: ^8.0.0 + parse5-sax-parser: ^8.0.0 + checksum: f15c33c599284c2743e5a48fbf56e96e3c2c8174ea1eac1bdaa733d8a64adf71da4ccc8e4a01ea6ae67bfd3a7195bb1a8a21e5573c7e733e94a1550811f8b6b8 languageName: node linkType: hard -"parse5-sax-parser@npm:^7.0.0": - version: 7.0.0 - resolution: "parse5-sax-parser@npm:7.0.0" +"parse5-sax-parser@npm:^8.0.0": + version: 8.0.0 + resolution: "parse5-sax-parser@npm:8.0.0" dependencies: - parse5: ^7.0.0 - checksum: 9826f9349c271d4c1a1cc402115f0888bcf1201fa4172d91dd14ae3db316355c02c949f8dfecee315332621c11ace8497dad47f3224dd5ae0eb3a41b0846d4cf + parse5: ^8.0.0 + checksum: 050593edc8f0241f0971d824dd80fbfff3c2f8d4981420fa688ee47fca79e6b73d8c6bfb85fa059ac27718662e87dcaffa538189f4319422e7fdd2dff40bc9a4 languageName: node linkType: hard -"parse5@npm:^7.0.0, parse5@npm:^7.1.2": - version: 7.2.1 - resolution: "parse5@npm:7.2.1" +"parse5@npm:^8.0.0": + version: 8.0.0 + resolution: "parse5@npm:8.0.0" dependencies: - entities: ^4.5.0 - checksum: 11253cf8aa2e7fc41c004c64cba6f2c255f809663365db65bd7ad0e8cf7b89e436a563c20059346371cc543a6c1b567032088883ca6a2cbc88276c666b68236d + entities: ^6.0.0 + checksum: 6f5844c71214f70b97e09573699693cfaa37cbb0ab3a41af4c0d295474a82c23cd48b2daaa2cefa5f5cdc7d0bfa6b1949300668155f54d389e51edec1dc6d27a languageName: node linkType: hard -"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": +"parseurl@npm:^1.3.3, parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 @@ -10645,10 +11105,10 @@ __metadata: languageName: node linkType: hard -"path-exists@npm:^5.0.0": - version: 5.0.0 - resolution: "path-exists@npm:5.0.0" - checksum: 8ca842868cab09423994596eb2c5ec2a971c17d1a3cb36dbf060592c730c725cd524b9067d7d2a1e031fef9ba7bd2ac6dc5ec9fb92aa693265f7be3987045254 +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 languageName: node linkType: hard @@ -10690,10 +11150,10 @@ __metadata: languageName: node linkType: hard -"path-type@npm:^5.0.0": - version: 5.0.0 - resolution: "path-type@npm:5.0.0" - checksum: 15ec24050e8932c2c98d085b72cfa0d6b4eeb4cbde151a0a05726d8afae85784fc5544f733d8dfc68536587d5143d29c0bd793623fad03d7e61cc00067291cd5 +"path-to-regexp@npm:^8.0.0": + version: 8.3.0 + resolution: "path-to-regexp@npm:8.3.0" + checksum: 73e0d3db449f9899692b10be8480bbcfa294fd575be2d09bce3e63f2f708d1fccd3aaa8591709f8b82062c528df116e118ff9df8f5c52ccc4c2443a90be73e10 languageName: node linkType: hard @@ -10711,17 +11171,17 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 languageName: node linkType: hard -"picomatch@npm:4.0.2": - version: 4.0.2 - resolution: "picomatch@npm:4.0.2" - checksum: a7a5188c954f82c6585720e9143297ccd0e35ad8072231608086ca950bee672d51b0ef676254af0788205e59bd4e4deb4e7708769226bed725bf13370a7d1464 +"picomatch@npm:4.0.3, picomatch@npm:^4.0.1, picomatch@npm:^4.0.2, picomatch@npm:^4.0.3": + version: 4.0.3 + resolution: "picomatch@npm:4.0.3" + checksum: 6817fb74eb745a71445debe1029768de55fd59a42b75606f478ee1d0dc1aa6e78b711d041a7c9d5550e042642029b7f373dc1a43b224c4b7f12d23436735dba0 languageName: node linkType: hard @@ -10732,13 +11192,6 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^4.0.1, picomatch@npm:^4.0.2, picomatch@npm:^4.0.3": - version: 4.0.3 - resolution: "picomatch@npm:4.0.3" - checksum: 6817fb74eb745a71445debe1029768de55fd59a42b75606f478ee1d0dc1aa6e78b711d041a7c9d5550e042642029b7f373dc1a43b224c4b7f12d23436735dba0 - languageName: node - linkType: hard - "pify@npm:^2.3.0": version: 2.3.0 resolution: "pify@npm:2.3.0" @@ -10760,24 +11213,22 @@ __metadata: languageName: node linkType: hard -"piscina@npm:4.8.0": - version: 4.8.0 - resolution: "piscina@npm:4.8.0" +"piscina@npm:5.1.3": + version: 5.1.3 + resolution: "piscina@npm:5.1.3" dependencies: - "@napi-rs/nice": ^1.0.1 + "@napi-rs/nice": ^1.0.4 dependenciesMeta: "@napi-rs/nice": optional: true - checksum: 00b6227bd471a74271b3a23280d55934f0b7abc036510d58f457ea0c644e263bcec939f1f4ef8ca03d6552c1af4bd4d30e6f9f47f57801ede9f0db04bbe4de40 + checksum: 6cc46f7c4871317cb7491521708bc2e2fbcfb90480e0b645f6c476c61c8bd31d218ec5e97521a0085fb907766e577fb3c235c2a9bb8ff83f525a5b45a75d38e6 languageName: node linkType: hard -"pkg-dir@npm:^7.0.0": - version: 7.0.0 - resolution: "pkg-dir@npm:7.0.0" - dependencies: - find-up: ^6.3.0 - checksum: 94298b20a446bfbbd66604474de8a0cdd3b8d251225170970f15d9646f633e056c80520dd5b4c1d1050c9fed8f6a9e5054b141c93806439452efe72e57562c03 +"pkce-challenge@npm:^5.0.0": + version: 5.0.1 + resolution: "pkce-challenge@npm:5.0.1" + checksum: 6079ee7520592f827cb78c397a1d2ff0a90a1952756b2efb893bf884524b7d2930dea82d92fec21bb3af99aba558d13553d9da87d5bd9f844b6c4cb3bc8f1ce0 languageName: node linkType: hard @@ -10978,14 +11429,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.5.2": - version: 8.5.2 - resolution: "postcss@npm:8.5.2" +"postcss@npm:8.5.6, postcss@npm:^8.4.49, postcss@npm:^8.5.6": + version: 8.5.6 + resolution: "postcss@npm:8.5.6" dependencies: - nanoid: ^3.3.8 + nanoid: ^3.3.11 picocolors: ^1.1.1 source-map-js: ^1.2.1 - checksum: 5097c458ce792d38bb93cb245f8603804b48087540b9d0e42d612f6d0bd7add4b47848cb9bc2a5ee388f70e45a1546fa7471b84697ab95aa8206aa3989fea611 + checksum: 20f3b5d673ffeec2b28d65436756d31ee33f65b0a8bedb3d32f556fbd5973be38c3a7fb5b959a5236c60a5db7b91b0a6b14ffaac0d717dce1b903b964ee1c1bb languageName: node linkType: hard @@ -11000,17 +11451,6 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.49, postcss@npm:^8.5.3": - version: 8.5.6 - resolution: "postcss@npm:8.5.6" - dependencies: - nanoid: ^3.3.11 - picocolors: ^1.1.1 - source-map-js: ^1.2.1 - checksum: 20f3b5d673ffeec2b28d65436756d31ee33f65b0a8bedb3d32f556fbd5973be38c3a7fb5b959a5236c60a5db7b91b0a6b14ffaac0d717dce1b903b964ee1c1bb - languageName: node - linkType: hard - "postgres-interval@npm:^4.0.2": version: 4.0.2 resolution: "postgres-interval@npm:4.0.2" @@ -11044,6 +11484,13 @@ __metadata: languageName: node linkType: hard +"proc-log@npm:^6.0.0": + version: 6.1.0 + resolution: "proc-log@npm:6.1.0" + checksum: ac450ff8244e95b0c9935b52d629fef92ae69b7e39aea19972a8234259614d644402dd62ce9cb094f4a637d8a4514cba90c1456ad785a40ad5b64d502875a817 + languageName: node + linkType: hard + "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" @@ -11086,7 +11533,7 @@ __metadata: languageName: node linkType: hard -"proxy-addr@npm:~2.0.7": +"proxy-addr@npm:^2.0.7, proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" dependencies: @@ -11190,6 +11637,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:^6.14.0, qs@npm:^6.14.1": + version: 6.14.1 + resolution: "qs@npm:6.14.1" + dependencies: + side-channel: ^1.1.0 + checksum: 7fffab0344fd75bfb6b8c94b8ba17f3d3e823d25b615900f68b473c3a078e497de8eaa08f709eaaa170eedfcee50638a7159b98abef7d8c89c2ede79291522f2 + languageName: node + linkType: hard + "quansync@npm:^0.2.11": version: 0.2.11 resolution: "quansync@npm:0.2.11" @@ -11250,6 +11706,18 @@ __metadata: languageName: node linkType: hard +"raw-body@npm:^3.0.0, raw-body@npm:^3.0.1": + version: 3.0.2 + resolution: "raw-body@npm:3.0.2" + dependencies: + bytes: ~3.1.2 + http-errors: ~2.0.1 + iconv-lite: ~0.7.0 + unpipe: ~1.0.0 + checksum: bf8ce8e9734f273f24d81f9fed35609dbd25c2869faa5fb5075f7ee225c0913e2240adda03759d7e72f2a757f8012d58bb7a871a80261d5140ad65844caeb5bd + languageName: node + linkType: hard + "read-cache@npm:^1.0.0": version: 1.0.0 resolution: "read-cache@npm:1.0.0" @@ -11274,7 +11742,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.0.6, readable-stream@npm:^3.4.0": +"readable-stream@npm:^3.0.6": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -11317,6 +11785,15 @@ __metadata: languageName: node linkType: hard +"regenerate-unicode-properties@npm:^10.2.2": + version: 10.2.2 + resolution: "regenerate-unicode-properties@npm:10.2.2" + dependencies: + regenerate: ^1.4.2 + checksum: 7ae4c1c32460c4360e3118c45eec0621424908f430fdd6f162c9172067786bf2b1682fbc885a33b26bc85e76e06f4d3f398b52425e801b0bb0cbae147dafb0b2 + languageName: node + linkType: hard + "regenerate@npm:^1.4.2": version: 1.4.2 resolution: "regenerate@npm:1.4.2" @@ -11331,15 +11808,6 @@ __metadata: languageName: node linkType: hard -"regenerator-transform@npm:^0.15.2": - version: 0.15.2 - resolution: "regenerator-transform@npm:0.15.2" - dependencies: - "@babel/runtime": ^7.8.4 - checksum: 20b6f9377d65954980fe044cfdd160de98df415b4bff38fbade67b3337efaf078308c4fed943067cd759827cc8cfeca9cb28ccda1f08333b85d6a2acbd022c27 - languageName: node - linkType: hard - "regex-parser@npm:^2.2.11": version: 2.3.0 resolution: "regex-parser@npm:2.3.0" @@ -11361,6 +11829,20 @@ __metadata: languageName: node linkType: hard +"regexpu-core@npm:^6.3.1": + version: 6.4.0 + resolution: "regexpu-core@npm:6.4.0" + dependencies: + regenerate: ^1.4.2 + regenerate-unicode-properties: ^10.2.2 + regjsgen: ^0.8.0 + regjsparser: ^0.13.0 + unicode-match-property-ecmascript: ^2.0.0 + unicode-match-property-value-ecmascript: ^2.2.1 + checksum: a316eb988599b7fb9d77f4adb937c41c022504dc91ddd18175c11771addc7f1d9dce550f34e36038395e459a2cf9ffc0d663bfe8d3c6c186317ca000ba79a8cf + languageName: node + linkType: hard + "regjsgen@npm:^0.8.0": version: 0.8.0 resolution: "regjsgen@npm:0.8.0" @@ -11379,6 +11861,17 @@ __metadata: languageName: node linkType: hard +"regjsparser@npm:^0.13.0": + version: 0.13.0 + resolution: "regjsparser@npm:0.13.0" + dependencies: + jsesc: ~3.1.0 + bin: + regjsparser: bin/parser + checksum: 1cf09f6afde2b2d1c1e89e1ce3034e3ee8d9433912728dbaa48e123f5f43ce34e263b2a8ab228817dce85d676ee0c801a512101b015ac9ab80ed449cf7329d3a + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -11420,20 +11913,20 @@ __metadata: languageName: node linkType: hard -"resolve@npm:1.22.8": - version: 1.22.8 - resolution: "resolve@npm:1.22.8" +"resolve@npm:1.22.10": + version: 1.22.10 + resolution: "resolve@npm:1.22.10" dependencies: - is-core-module: ^2.13.0 + is-core-module: ^2.16.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c + checksum: ab7a32ff4046fcd7c6fdd525b24a7527847d03c3650c733b909b01b757f92eb23510afa9cc3e9bf3f26a3e073b48c88c706dfd4c1d2fb4a16a96b73b6328ddcf languageName: node linkType: hard -"resolve@npm:^1.1.7, resolve@npm:^1.14.2, resolve@npm:^1.22.8": +"resolve@npm:^1.1.7, resolve@npm:^1.22.8": version: 1.22.9 resolution: "resolve@npm:1.22.9" dependencies: @@ -11446,20 +11939,33 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@1.22.8#~builtin": - version: 1.22.8 - resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d" +"resolve@npm:^1.22.10": + version: 1.22.11 + resolution: "resolve@npm:1.22.11" + dependencies: + is-core-module: ^2.16.1 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 6d5baa2156b95a65ac431e7642e21106584e9f4194da50871cae8bc1bbd2b53bb7cee573c92543d83bb999620b224a087f62379d800ed1ccb189da6df5d78d50 + languageName: node + linkType: hard + +"resolve@patch:resolve@1.22.10#~builtin": + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#~builtin::version=1.22.10&hash=c3c19d" dependencies: - is-core-module: ^2.13.0 + is-core-module: ^2.16.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 + checksum: 8aac1e4e4628bd00bf4b94b23de137dd3fe44097a8d528fd66db74484be929936e20c696e1a3edf4488f37e14180b73df6f600992baea3e089e8674291f16c9d languageName: node linkType: hard -"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.22.8#~builtin": +"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.22.8#~builtin": version: 1.22.9 resolution: "resolve@patch:resolve@npm%3A1.22.9#~builtin::version=1.22.9&hash=c3c19d" dependencies: @@ -11472,13 +11978,16 @@ __metadata: languageName: node linkType: hard -"restore-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "restore-cursor@npm:3.1.0" +"resolve@patch:resolve@^1.22.10#~builtin": + version: 1.22.11 + resolution: "resolve@patch:resolve@npm%3A1.22.11#~builtin::version=1.22.11&hash=c3c19d" dependencies: - onetime: ^5.1.0 - signal-exit: ^3.0.2 - checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 + is-core-module: ^2.16.1 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 1462da84ac3410d7c2e12e4f5f25c1423d8a174c3b4245c43eafea85e7bbe6af3eb7ec10a4850b5e518e8531608604742b8cbd761e1acd7ad1035108b7c98013 languageName: node linkType: hard @@ -11560,30 +12069,33 @@ __metadata: languageName: node linkType: hard -"rollup@npm:4.34.8": - version: 4.34.8 - resolution: "rollup@npm:4.34.8" - dependencies: - "@rollup/rollup-android-arm-eabi": 4.34.8 - "@rollup/rollup-android-arm64": 4.34.8 - "@rollup/rollup-darwin-arm64": 4.34.8 - "@rollup/rollup-darwin-x64": 4.34.8 - "@rollup/rollup-freebsd-arm64": 4.34.8 - "@rollup/rollup-freebsd-x64": 4.34.8 - "@rollup/rollup-linux-arm-gnueabihf": 4.34.8 - "@rollup/rollup-linux-arm-musleabihf": 4.34.8 - "@rollup/rollup-linux-arm64-gnu": 4.34.8 - "@rollup/rollup-linux-arm64-musl": 4.34.8 - "@rollup/rollup-linux-loongarch64-gnu": 4.34.8 - "@rollup/rollup-linux-powerpc64le-gnu": 4.34.8 - "@rollup/rollup-linux-riscv64-gnu": 4.34.8 - "@rollup/rollup-linux-s390x-gnu": 4.34.8 - "@rollup/rollup-linux-x64-gnu": 4.34.8 - "@rollup/rollup-linux-x64-musl": 4.34.8 - "@rollup/rollup-win32-arm64-msvc": 4.34.8 - "@rollup/rollup-win32-ia32-msvc": 4.34.8 - "@rollup/rollup-win32-x64-msvc": 4.34.8 - "@types/estree": 1.0.6 +"rollup@npm:4.52.3": + version: 4.52.3 + resolution: "rollup@npm:4.52.3" + dependencies: + "@rollup/rollup-android-arm-eabi": 4.52.3 + "@rollup/rollup-android-arm64": 4.52.3 + "@rollup/rollup-darwin-arm64": 4.52.3 + "@rollup/rollup-darwin-x64": 4.52.3 + "@rollup/rollup-freebsd-arm64": 4.52.3 + "@rollup/rollup-freebsd-x64": 4.52.3 + "@rollup/rollup-linux-arm-gnueabihf": 4.52.3 + "@rollup/rollup-linux-arm-musleabihf": 4.52.3 + "@rollup/rollup-linux-arm64-gnu": 4.52.3 + "@rollup/rollup-linux-arm64-musl": 4.52.3 + "@rollup/rollup-linux-loong64-gnu": 4.52.3 + "@rollup/rollup-linux-ppc64-gnu": 4.52.3 + "@rollup/rollup-linux-riscv64-gnu": 4.52.3 + "@rollup/rollup-linux-riscv64-musl": 4.52.3 + "@rollup/rollup-linux-s390x-gnu": 4.52.3 + "@rollup/rollup-linux-x64-gnu": 4.52.3 + "@rollup/rollup-linux-x64-musl": 4.52.3 + "@rollup/rollup-openharmony-arm64": 4.52.3 + "@rollup/rollup-win32-arm64-msvc": 4.52.3 + "@rollup/rollup-win32-ia32-msvc": 4.52.3 + "@rollup/rollup-win32-x64-gnu": 4.52.3 + "@rollup/rollup-win32-x64-msvc": 4.52.3 + "@types/estree": 1.0.8 fsevents: ~2.3.2 dependenciesMeta: "@rollup/rollup-android-arm-eabi": @@ -11606,58 +12118,67 @@ __metadata: optional: true "@rollup/rollup-linux-arm64-musl": optional: true - "@rollup/rollup-linux-loongarch64-gnu": + "@rollup/rollup-linux-loong64-gnu": optional: true - "@rollup/rollup-linux-powerpc64le-gnu": + "@rollup/rollup-linux-ppc64-gnu": optional: true "@rollup/rollup-linux-riscv64-gnu": optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true "@rollup/rollup-linux-s390x-gnu": optional: true "@rollup/rollup-linux-x64-gnu": optional: true "@rollup/rollup-linux-x64-musl": optional: true + "@rollup/rollup-openharmony-arm64": + optional: true "@rollup/rollup-win32-arm64-msvc": optional: true "@rollup/rollup-win32-ia32-msvc": optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true "@rollup/rollup-win32-x64-msvc": optional: true fsevents: optional: true bin: rollup: dist/bin/rollup - checksum: 8c4abc97c16d4e80e4d803544ad004ba00f769aee460ff04200716f526fdcc3dd7ef6b71ae36aa5779bed410ef7244e15ffa0e3370711065dd15e2bd27d0cef5 - languageName: node - linkType: hard - -"rollup@npm:^4.34.9": - version: 4.52.5 - resolution: "rollup@npm:4.52.5" - dependencies: - "@rollup/rollup-android-arm-eabi": 4.52.5 - "@rollup/rollup-android-arm64": 4.52.5 - "@rollup/rollup-darwin-arm64": 4.52.5 - "@rollup/rollup-darwin-x64": 4.52.5 - "@rollup/rollup-freebsd-arm64": 4.52.5 - "@rollup/rollup-freebsd-x64": 4.52.5 - "@rollup/rollup-linux-arm-gnueabihf": 4.52.5 - "@rollup/rollup-linux-arm-musleabihf": 4.52.5 - "@rollup/rollup-linux-arm64-gnu": 4.52.5 - "@rollup/rollup-linux-arm64-musl": 4.52.5 - "@rollup/rollup-linux-loong64-gnu": 4.52.5 - "@rollup/rollup-linux-ppc64-gnu": 4.52.5 - "@rollup/rollup-linux-riscv64-gnu": 4.52.5 - "@rollup/rollup-linux-riscv64-musl": 4.52.5 - "@rollup/rollup-linux-s390x-gnu": 4.52.5 - "@rollup/rollup-linux-x64-gnu": 4.52.5 - "@rollup/rollup-linux-x64-musl": 4.52.5 - "@rollup/rollup-openharmony-arm64": 4.52.5 - "@rollup/rollup-win32-arm64-msvc": 4.52.5 - "@rollup/rollup-win32-ia32-msvc": 4.52.5 - "@rollup/rollup-win32-x64-gnu": 4.52.5 - "@rollup/rollup-win32-x64-msvc": 4.52.5 + checksum: d1b184fe28d6e30334901a59eccb01c5b3c777f9c34a27ba925ba75282b9374848a85f1b36722c7a373f39cfd5849bdc29b804d9d271ce1a88188ed6b0323ff4 + languageName: node + linkType: hard + +"rollup@npm:^4.43.0": + version: 4.55.1 + resolution: "rollup@npm:4.55.1" + dependencies: + "@rollup/rollup-android-arm-eabi": 4.55.1 + "@rollup/rollup-android-arm64": 4.55.1 + "@rollup/rollup-darwin-arm64": 4.55.1 + "@rollup/rollup-darwin-x64": 4.55.1 + "@rollup/rollup-freebsd-arm64": 4.55.1 + "@rollup/rollup-freebsd-x64": 4.55.1 + "@rollup/rollup-linux-arm-gnueabihf": 4.55.1 + "@rollup/rollup-linux-arm-musleabihf": 4.55.1 + "@rollup/rollup-linux-arm64-gnu": 4.55.1 + "@rollup/rollup-linux-arm64-musl": 4.55.1 + "@rollup/rollup-linux-loong64-gnu": 4.55.1 + "@rollup/rollup-linux-loong64-musl": 4.55.1 + "@rollup/rollup-linux-ppc64-gnu": 4.55.1 + "@rollup/rollup-linux-ppc64-musl": 4.55.1 + "@rollup/rollup-linux-riscv64-gnu": 4.55.1 + "@rollup/rollup-linux-riscv64-musl": 4.55.1 + "@rollup/rollup-linux-s390x-gnu": 4.55.1 + "@rollup/rollup-linux-x64-gnu": 4.55.1 + "@rollup/rollup-linux-x64-musl": 4.55.1 + "@rollup/rollup-openbsd-x64": 4.55.1 + "@rollup/rollup-openharmony-arm64": 4.55.1 + "@rollup/rollup-win32-arm64-msvc": 4.55.1 + "@rollup/rollup-win32-ia32-msvc": 4.55.1 + "@rollup/rollup-win32-x64-gnu": 4.55.1 + "@rollup/rollup-win32-x64-msvc": 4.55.1 "@types/estree": 1.0.8 fsevents: ~2.3.2 dependenciesMeta: @@ -11683,8 +12204,12 @@ __metadata: optional: true "@rollup/rollup-linux-loong64-gnu": optional: true + "@rollup/rollup-linux-loong64-musl": + optional: true "@rollup/rollup-linux-ppc64-gnu": optional: true + "@rollup/rollup-linux-ppc64-musl": + optional: true "@rollup/rollup-linux-riscv64-gnu": optional: true "@rollup/rollup-linux-riscv64-musl": @@ -11695,6 +12220,8 @@ __metadata: optional: true "@rollup/rollup-linux-x64-musl": optional: true + "@rollup/rollup-openbsd-x64": + optional: true "@rollup/rollup-openharmony-arm64": optional: true "@rollup/rollup-win32-arm64-msvc": @@ -11709,7 +12236,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 7d641f8131e5b75c35eb4c11a03aff161183fcb4848c446b660959043aee4ac90c524388290f7ab9ef43e9e33add7d5d57d11135597c7a744df5905e487e198d + checksum: fd5374cd7e6046404d59d64e1346821fee0900bc9cac021078bfdd342fc54305defba882fb53e6543b5c17ce4573b30fb45ee28b9a4122548358004efdc550d2 languageName: node linkType: hard @@ -11725,6 +12252,19 @@ __metadata: languageName: node linkType: hard +"router@npm:^2.2.0": + version: 2.2.0 + resolution: "router@npm:2.2.0" + dependencies: + debug: ^4.4.0 + depd: ^2.0.0 + is-promise: ^4.0.0 + parseurl: ^1.3.3 + path-to-regexp: ^8.0.0 + checksum: 4c3bec8011ed10bb07d1ee860bc715f245fff0fdff991d8319741d2932d89c3fe0a56766b4fa78e95444bc323fd2538e09c8e43bfbd442c2a7fab67456df7fa5 + languageName: node + linkType: hard + "run-applescript@npm:^7.0.0": version: 7.0.0 resolution: "run-applescript@npm:7.0.0" @@ -11748,7 +12288,16 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:7.8.1, rxjs@npm:^7.4.0": +"rxjs@npm:7.8.2": + version: 7.8.2 + resolution: "rxjs@npm:7.8.2" + dependencies: + tslib: ^2.1.0 + checksum: 2f233d7c832a6c255dabe0759014d7d9b1c9f1cb2f2f0d59690fd11c883c9826ea35a51740c06ab45b6ade0d9087bde9192f165cba20b6730d344b831ef80744 + languageName: node + linkType: hard + +"rxjs@npm:^7.4.0": version: 7.8.1 resolution: "rxjs@npm:7.8.1" dependencies: @@ -11815,9 +12364,9 @@ __metadata: languageName: node linkType: hard -"sass@npm:1.85.0": - version: 1.85.0 - resolution: "sass@npm:1.85.0" +"sass@npm:1.90.0": + version: 1.90.0 + resolution: "sass@npm:1.90.0" dependencies: "@parcel/watcher": ^2.4.1 chokidar: ^4.0.0 @@ -11828,7 +12377,7 @@ __metadata: optional: true bin: sass: sass.js - checksum: 53c70831d1235f9ee40489a8bdde9b3304ba350df78417c4edaa8a8ac79426208054a69ac9b6d53c4dc5837362e552a92e3bcaa975a1a3e8975c0af9fbccfe1c + checksum: 1f2ad353eb9a4a294ba7e8f9038363c8fbf69afbf2938d53a3beff9bd9180061c3da71f139b7dedc4707f7421c4a1226164bd0276988dbc3b43b1276c0752055 languageName: node linkType: hard @@ -11851,6 +12400,18 @@ __metadata: languageName: node linkType: hard +"schema-utils@npm:^4.3.2": + version: 4.3.3 + resolution: "schema-utils@npm:4.3.3" + dependencies: + "@types/json-schema": ^7.0.9 + ajv: ^8.9.0 + ajv-formats: ^2.1.1 + ajv-keywords: ^5.1.0 + checksum: 4e20404962fd45d5feb5942f7c9ab334a3d3dab94e15001049bd49e2959015f2c59089353953d4976fe664462c79121dea50392968182d4e2c4b75803f822fa3 + languageName: node + linkType: hard + "select-hose@npm:^2.0.0": version: 2.0.0 resolution: "select-hose@npm:2.0.0" @@ -11875,21 +12436,12 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.6.3, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": - version: 7.6.3 - resolution: "semver@npm:7.6.3" - bin: - semver: bin/semver.js - checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8 - languageName: node - linkType: hard - -"semver@npm:7.7.1": - version: 7.7.1 - resolution: "semver@npm:7.7.1" +"semver@npm:7.7.2": + version: 7.7.2 + resolution: "semver@npm:7.7.2" bin: semver: bin/semver.js - checksum: 586b825d36874007c9382d9e1ad8f93888d8670040add24a28e06a910aeebd673a2eb9e3bf169c6679d9245e66efb9057e0852e70d9daa6c27372aab1dda7104 + checksum: dd94ba8f1cbc903d8eeb4dd8bf19f46b3deb14262b6717d0de3c804b594058ae785ef2e4b46c5c3b58733c99c83339068203002f9e37cfe44f7e2cc5e3d2f621 languageName: node linkType: hard @@ -11911,6 +12463,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8 + languageName: node + linkType: hard + "semver@npm:^7.7.3": version: 7.7.3 resolution: "semver@npm:7.7.3" @@ -11941,6 +12502,25 @@ __metadata: languageName: node linkType: hard +"send@npm:^1.1.0, send@npm:^1.2.0": + version: 1.2.1 + resolution: "send@npm:1.2.1" + dependencies: + debug: ^4.4.3 + encodeurl: ^2.0.0 + escape-html: ^1.0.3 + etag: ^1.8.1 + fresh: ^2.0.0 + http-errors: ^2.0.1 + mime-types: ^3.0.2 + ms: ^2.1.3 + on-finished: ^2.4.1 + range-parser: ^1.2.1 + statuses: ^2.0.2 + checksum: 5361e3556fbc874c080a4cfbb4541e02c16221ca3c68c4f692320d38ef7e147381f805ce3ac50dfaa2129f07daa81098e2bc567e9a4d13993a92893d59a64d68 + languageName: node + linkType: hard + "serialize-javascript@npm:^6.0.2": version: 6.0.2 resolution: "serialize-javascript@npm:6.0.2" @@ -11977,6 +12557,18 @@ __metadata: languageName: node linkType: hard +"serve-static@npm:^2.2.0": + version: 2.2.1 + resolution: "serve-static@npm:2.2.1" + dependencies: + encodeurl: ^2.0.0 + escape-html: ^1.0.3 + parseurl: ^1.3.3 + send: ^1.2.0 + checksum: dd71e9a316a7d7f726503973c531168cfa6a6a56a98d5c6b279c4d0d41a83a1bc6900495dc0633712b95d88ccbf9ed4f4a780a4c4c00bf84b496e9e710d68825 + languageName: node + linkType: hard + "setprototypeof@npm:1.1.0": version: 1.1.0 resolution: "setprototypeof@npm:1.1.0" @@ -11984,7 +12576,7 @@ __metadata: languageName: node linkType: hard -"setprototypeof@npm:1.2.0": +"setprototypeof@npm:1.2.0, setprototypeof@npm:~1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 @@ -12058,7 +12650,7 @@ __metadata: languageName: node linkType: hard -"side-channel@npm:^1.0.6": +"side-channel@npm:^1.0.6, side-channel@npm:^1.1.0": version: 1.1.0 resolution: "side-channel@npm:1.1.0" dependencies: @@ -12099,13 +12691,6 @@ __metadata: languageName: node linkType: hard -"slash@npm:^5.1.0": - version: 5.1.0 - resolution: "slash@npm:5.1.0" - checksum: 70434b34c50eb21b741d37d455110258c42d2cf18c01e6518aeb7299f3c6e626330c889c0c552b5ca2ef54a8f5a74213ab48895f0640717cacefeef6830a1ba4 - languageName: node - linkType: hard - "slice-ansi@npm:^5.0.0": version: 5.0.0 resolution: "slice-ansi@npm:5.0.0" @@ -12243,10 +12828,10 @@ __metadata: languageName: node linkType: hard -"source-map@npm:0.7.4": - version: 0.7.4 - resolution: "source-map@npm:0.7.4" - checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 +"source-map@npm:0.7.6": + version: 0.7.6 + resolution: "source-map@npm:0.7.6" + checksum: 932f4a2390aa7100e91357d88cc272de984ad29139ac09eedfde8cc78d46da35f389065d0c5343c5d71d054a6ebd4939a8c0f2c98d5df64fe97bb8a730596c2d languageName: node linkType: hard @@ -12348,6 +12933,20 @@ __metadata: languageName: node linkType: hard +"statuses@npm:^2.0.1, statuses@npm:^2.0.2, statuses@npm:~2.0.2": + version: 2.0.2 + resolution: "statuses@npm:2.0.2" + checksum: 6927feb50c2a75b2a4caab2c565491f7a93ad3d8dbad7b1398d52359e9243a20e2ebe35e33726dee945125ef7a515e9097d8a1b910ba2bbd818265a2f6c39879 + languageName: node + linkType: hard + +"stdin-discarder@npm:^0.2.2": + version: 0.2.2 + resolution: "stdin-discarder@npm:0.2.2" + checksum: 642ffd05bd5b100819d6b24a613d83c6e3857c6de74eb02fc51506fa61dc1b0034665163831873868157c4538d71e31762bcf319be86cea04c3aba5336470478 + languageName: node + linkType: hard + "streamroller@npm:^3.1.5": version: 3.1.5 resolution: "streamroller@npm:3.1.5" @@ -12396,7 +12995,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^7.0.0": +"string-width@npm:^7.0.0, string-width@npm:^7.2.0": version: 7.2.0 resolution: "string-width@npm:7.2.0" dependencies: @@ -12500,13 +13099,6 @@ __metadata: languageName: node linkType: hard -"symbol-observable@npm:4.0.0": - version: 4.0.0 - resolution: "symbol-observable@npm:4.0.0" - checksum: 212c7edce6186634d671336a88c0e0bbd626c2ab51ed57498dc90698cce541839a261b969c2a1e8dd43762133d47672e8b62e0b1ce9cf4157934ba45fd172ba8 - languageName: node - linkType: hard - "tailwindcss@npm:>1.0.0": version: 3.4.16 resolution: "tailwindcss@npm:3.4.16" @@ -12625,17 +13217,17 @@ __metadata: languageName: node linkType: hard -"terser@npm:5.39.0": - version: 5.39.0 - resolution: "terser@npm:5.39.0" +"terser@npm:5.43.1": + version: 5.43.1 + resolution: "terser@npm:5.43.1" dependencies: "@jridgewell/source-map": ^0.3.3 - acorn: ^8.8.2 + acorn: ^8.14.0 commander: ^2.20.0 source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: e39c302aed7a70273c8b03032c37c68c8d9d3b432a7b6abe89caf9d087f7dd94d743c01ee5ba1431a095ad347c4a680b60d258f298a097cf512346d6041eb661 + checksum: 1d51747f4540a0842139c2f2617e88d68a26da42d7571cda8955e1bd8febac6e60bc514c258781334e1724aeeccfbd511473eb9d8d831435e4e5fad1ce7f6e8b languageName: node linkType: hard @@ -12717,7 +13309,17 @@ __metadata: languageName: node linkType: hard -"tinyglobby@npm:^0.2.13": +"tinyglobby@npm:0.2.14": + version: 0.2.14 + resolution: "tinyglobby@npm:0.2.14" + dependencies: + fdir: ^6.4.4 + picomatch: ^4.0.2 + checksum: 261e986e3f2062dec3a582303bad2ce31b4634b9348648b46828c000d464b012cf474e38f503312367d4117c3f2f18611992738fca684040758bba44c24de522 + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.15": version: 0.2.15 resolution: "tinyglobby@npm:0.2.15" dependencies: @@ -12727,15 +13329,6 @@ __metadata: languageName: node linkType: hard -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: ~1.0.2 - checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 - languageName: node - linkType: hard - "tmp@npm:^0.2.1": version: 0.2.3 resolution: "tmp@npm:0.2.3" @@ -12752,7 +13345,7 @@ __metadata: languageName: node linkType: hard -"toidentifier@npm:1.0.1": +"toidentifier@npm:1.0.1, toidentifier@npm:~1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 @@ -12847,10 +13440,14 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 +"type-is@npm:^2.0.1": + version: 2.0.1 + resolution: "type-is@npm:2.0.1" + dependencies: + content-type: ^1.0.5 + media-typer: ^1.1.0 + mime-types: ^3.0.0 + checksum: 0266e7c782238128292e8c45e60037174d48c6366bb2d45e6bd6422b611c193f83409a8341518b6b5f33f8e4d5a959f38658cacfea77f0a3505b9f7ac1ddec8f languageName: node linkType: hard @@ -12878,23 +13475,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:~5.6.0": - version: 5.6.3 - resolution: "typescript@npm:5.6.3" +"typescript@npm:~5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: ba302f8822777ebefb28b554105f3e074466b671e7444ec6b75dadc008a62f46f373d9e57ceced1c433756d06c8b7dc569a7eefdf3a9573122a49205ff99021a + checksum: 0d0ffb84f2cd072c3e164c79a2e5a1a1f4f168e84cb2882ff8967b92afe1def6c2a91f6838fb58b168428f9458c57a2ba06a6737711fdd87a256bbe83e9a217f languageName: node linkType: hard -"typescript@patch:typescript@~5.6.0#~builtin": - version: 5.6.3 - resolution: "typescript@patch:typescript@npm%3A5.6.3#~builtin::version=5.6.3&hash=1f5320" +"typescript@patch:typescript@~5.9.3#~builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#~builtin::version=5.9.3&hash=1f5320" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: ade87bce2363ee963eed0e4ca8a312ea02c81873ebd53609bc3f6dc0a57f6e61ad7e3fb8cbb7f7ab8b5081cbee801b023f7c4823ee70b1c447eae050e6c7622b + checksum: 8bb8d86819ac86a498eada254cad7fb69c5f74778506c700c2a712daeaff21d3a6f51fd0d534fe16903cb010d1b74f89437a3d02d4d0ff5ca2ba9a4660de8497 languageName: node linkType: hard @@ -12945,6 +13542,13 @@ __metadata: languageName: node linkType: hard +"unicode-match-property-value-ecmascript@npm:^2.2.1": + version: 2.2.1 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.1" + checksum: e6c73e07bb4dc4aa399797a14b170e84a30ed290bcf97cc4305cf67dde8744119721ce17cef03f4f9d4ff48654bfa26eadc7fe1e8dd4b71b8f3b2e9a9742f013 + languageName: node + linkType: hard + "unicode-property-aliases-ecmascript@npm:^2.0.0": version: 2.1.0 resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" @@ -12952,13 +13556,6 @@ __metadata: languageName: node linkType: hard -"unicorn-magic@npm:^0.1.0": - version: 0.1.0 - resolution: "unicorn-magic@npm:0.1.0" - checksum: 48c5882ca3378f380318c0b4eb1d73b7e3c5b728859b060276e0a490051d4180966beeb48962d850fd0c6816543bcdfc28629dcd030bb62a286a2ae2acb5acb6 - languageName: node - linkType: hard - "unique-filename@npm:^4.0.0": version: 4.0.0 resolution: "unique-filename@npm:4.0.0" @@ -13005,9 +13602,9 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.1.3": - version: 1.1.3 - resolution: "update-browserslist-db@npm:1.1.3" +"update-browserslist-db@npm:^1.2.0": + version: 1.2.3 + resolution: "update-browserslist-db@npm:1.2.3" dependencies: escalade: ^3.2.0 picocolors: ^1.1.1 @@ -13015,7 +13612,7 @@ __metadata: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 7b6d8d08c34af25ee435bccac542bedcb9e57c710f3c42421615631a80aa6dd28b0a81c9d2afbef53799d482fb41453f714b8a7a0a8003e3b4ec8fb1abb819af + checksum: 6f209a97ae8eacdd3a1ef2eb365adf49d1e2a757e5b2dd4ac87dc8c99236cbe3e572d3e605a87dd7b538a11751b71d9f93edc47c7405262a293a493d155316cd languageName: node linkType: hard @@ -13082,33 +13679,33 @@ __metadata: languageName: node linkType: hard -"vary@npm:^1, vary@npm:~1.1.2": +"vary@npm:^1, vary@npm:^1.1.2, vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b languageName: node linkType: hard -"vite@npm:6.4.1": - version: 6.4.1 - resolution: "vite@npm:6.4.1" +"vite@npm:7.1.11": + version: 7.1.11 + resolution: "vite@npm:7.1.11" dependencies: esbuild: ^0.25.0 - fdir: ^6.4.4 + fdir: ^6.5.0 fsevents: ~2.3.3 - picomatch: ^4.0.2 - postcss: ^8.5.3 - rollup: ^4.34.9 - tinyglobby: ^0.2.13 + picomatch: ^4.0.3 + postcss: ^8.5.6 + rollup: ^4.43.0 + tinyglobby: ^0.2.15 peerDependencies: - "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + "@types/node": ^20.19.0 || >=22.12.0 jiti: ">=1.21.0" - less: "*" + less: ^4.0.0 lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -13140,7 +13737,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 7a939dbd6569ba829a7c21a18f8eca395a3a13cb93ce0fec02e8aa462e127a8daac81d00f684086648d905786056bba1ad931f51d88f06835d3b972bc9fbddda + checksum: 67855b760fc55228ef91b22bc6bf90c0e3500ea5f52174533bc475f33885fb2d1548d9f0d0533e11f351b752ab3c467c2d07076550cf65e96ed1462534609764 languageName: node linkType: hard @@ -13207,7 +13804,17 @@ __metadata: languageName: node linkType: hard -"watchpack@npm:2.4.2, watchpack@npm:^2.4.1": +"watchpack@npm:2.4.4": + version: 2.4.4 + resolution: "watchpack@npm:2.4.4" + dependencies: + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.1.2 + checksum: 469514a04bcdd7ea77d4b3c62d1f087eafbce64cbc728c89355d5710ee01311533456122da7c585d3654d5bfcf09e6085db1a6eb274c4762a18e370526d17561 + languageName: node + linkType: hard + +"watchpack@npm:^2.4.1": version: 2.4.2 resolution: "watchpack@npm:2.4.2" dependencies: @@ -13226,15 +13833,6 @@ __metadata: languageName: node linkType: hard -"wcwidth@npm:^1.0.1": - version: 1.0.1 - resolution: "wcwidth@npm:1.0.1" - dependencies: - defaults: ^1.0.3 - checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c - languageName: node - linkType: hard - "weak-lru-cache@npm:^1.2.2": version: 1.2.2 resolution: "weak-lru-cache@npm:1.2.2" @@ -13324,13 +13922,20 @@ __metadata: languageName: node linkType: hard -"webpack-sources@npm:^3.0.0, webpack-sources@npm:^3.2.3": +"webpack-sources@npm:^3.0.0": version: 3.2.3 resolution: "webpack-sources@npm:3.2.3" checksum: 989e401b9fe3536529e2a99dac8c1bdc50e3a0a2c8669cbafad31271eadd994bc9405f88a3039cd2e29db5e6d9d0926ceb7a1a4e7409ece021fe79c37d9c4607 languageName: node linkType: hard +"webpack-sources@npm:^3.3.3": + version: 3.3.3 + resolution: "webpack-sources@npm:3.3.3" + checksum: 243d438ec4dfe805cca20fa66d111114b1f277b8ecfa95bb6ee0a6c7d996aee682539952028c2b203a6c170e6ef56f71ecf3e366e90bf1cb58b0ae982176b651 + languageName: node + linkType: hard + "webpack-subresource-integrity@npm:5.1.0": version: 5.1.0 resolution: "webpack-subresource-integrity@npm:5.1.0" @@ -13346,19 +13951,21 @@ __metadata: languageName: node linkType: hard -"webpack@npm:5.98.0": - version: 5.98.0 - resolution: "webpack@npm:5.98.0" +"webpack@npm:5.101.2": + version: 5.101.2 + resolution: "webpack@npm:5.101.2" dependencies: "@types/eslint-scope": ^3.7.7 - "@types/estree": ^1.0.6 + "@types/estree": ^1.0.8 + "@types/json-schema": ^7.0.15 "@webassemblyjs/ast": ^1.14.1 "@webassemblyjs/wasm-edit": ^1.14.1 "@webassemblyjs/wasm-parser": ^1.14.1 - acorn: ^8.14.0 + acorn: ^8.15.0 + acorn-import-phases: ^1.0.3 browserslist: ^4.24.0 chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.17.1 + enhanced-resolve: ^5.17.3 es-module-lexer: ^1.2.1 eslint-scope: 5.1.1 events: ^3.2.0 @@ -13368,17 +13975,17 @@ __metadata: loader-runner: ^4.2.0 mime-types: ^2.1.27 neo-async: ^2.6.2 - schema-utils: ^4.3.0 + schema-utils: ^4.3.2 tapable: ^2.1.1 terser-webpack-plugin: ^5.3.11 watchpack: ^2.4.1 - webpack-sources: ^3.2.3 + webpack-sources: ^3.3.3 peerDependenciesMeta: webpack-cli: optional: true bin: webpack: bin/webpack.js - checksum: 0de353c694bc4d5af810e4f4d4fd356271b21b2253583a9f618416b5fcbaf8db5a5487c12cc1379778d2a07d56382293334153af6e2ce59ded59488f08015fd1 + checksum: bde8ab5ca339390e5c99929a69d2b2c0297593592f53497eed7f191208f4c3bea1dc3fbd3c9d9c622349ecff86a653c64423c77874d5a4b801e49e7b1d930001 languageName: node linkType: hard @@ -13551,6 +14158,15 @@ __metadata: languageName: node linkType: hard +"wsl-utils@npm:^0.1.0": + version: 0.1.0 + resolution: "wsl-utils@npm:0.1.0" + dependencies: + is-wsl: ^3.1.0 + checksum: de4c92187e04c3c27b4478f410a02e81c351dc85efa3447bf1666f34fc80baacd890a6698ec91995631714086992036013286aea3d77e6974020d40a08e00aec + languageName: node + linkType: hard + "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8" @@ -13602,18 +14218,24 @@ __metadata: languageName: node linkType: hard -"yargs@npm:17.7.2, yargs@npm:^17.2.1, yargs@npm:^17.7.2": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" +"yargs-parser@npm:^22.0.0": + version: 22.0.0 + resolution: "yargs-parser@npm:22.0.0" + checksum: 55df0d94f3f9f933f1349f244ddf72a6978a9d5a972b69332965cdfd5ec849ff26386965512f4179065b0573cc6e8df33ca44334958a892c47fedae08a967c99 + languageName: node + linkType: hard + +"yargs@npm:18.0.0, yargs@npm:^18.0.0": + version: 18.0.0 + resolution: "yargs@npm:18.0.0" dependencies: - cliui: ^8.0.1 + cliui: ^9.0.1 escalade: ^3.1.1 get-caller-file: ^2.0.5 - require-directory: ^2.1.1 - string-width: ^4.2.3 + string-width: ^7.2.0 y18n: ^5.0.5 - yargs-parser: ^21.1.1 - checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + yargs-parser: ^22.0.0 + checksum: a7cf1b97cb4e81c059f78fd32a4160505d421ecdce5409f5e3840fdcc4c982885fc645b44af961eab94d673cb46f81207d831aa87862246907ffacf45884976a languageName: node linkType: hard @@ -13632,6 +14254,21 @@ __metadata: languageName: node linkType: hard +"yargs@npm:^17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + languageName: node + linkType: hard + "yauzl@npm:^2.10.0": version: 2.10.0 resolution: "yauzl@npm:2.10.0" @@ -13649,17 +14286,33 @@ __metadata: languageName: node linkType: hard -"yocto-queue@npm:^1.0.0": - version: 1.1.1 - resolution: "yocto-queue@npm:1.1.1" - checksum: f2e05b767ed3141e6372a80af9caa4715d60969227f38b1a4370d60bffe153c9c5b33a862905609afc9b375ec57cd40999810d20e5e10229a204e8bde7ef255c +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 languageName: node linkType: hard -"yoctocolors-cjs@npm:^2.1.2": - version: 2.1.2 - resolution: "yoctocolors-cjs@npm:2.1.2" - checksum: 1c474d4b30a8c130e679279c5c2c33a0d48eba9684ffa0252cc64846c121fb56c3f25457fef902edbe1e2d7a7872130073a9fc8e795299d75e13fa3f5f548f1b +"yoctocolors-cjs@npm:^2.1.3": + version: 2.1.3 + resolution: "yoctocolors-cjs@npm:2.1.3" + checksum: 207df586996c3b604fa85903f81cc54676f1f372613a0c7247f0d24b1ca781905685075d06955211c4d5d4f629d7d5628464f8af0a42d286b7a8ff88e9dadcb8 + languageName: node + linkType: hard + +"zod-to-json-schema@npm:^3.25.0": + version: 3.25.1 + resolution: "zod-to-json-schema@npm:3.25.1" + peerDependencies: + zod: ^3.25 || ^4 + checksum: 2033915aed81729544398a0000a63fb474972a654df712610343b8143c254d26f5d76cbee02b135648f299a0dc71be79a724d25a71a755085b438c7bfac6b9c8 + languageName: node + linkType: hard + +"zod@npm:4.1.13": + version: 4.1.13 + resolution: "zod@npm:4.1.13" + checksum: e5459280d46567df0adc188b0c687d425e616a206d4a73ee3bacf62d246f5546e24ef45790c7c4762d3ce7659c5e41052a29445d32d0d272410be9fe23162d03 languageName: node linkType: hard @@ -13670,7 +14323,7 @@ __metadata: languageName: node linkType: hard -"zod@npm:^4.1.11": +"zod@npm:^3.25 || ^4.0, zod@npm:^4.1.11": version: 4.3.5 resolution: "zod@npm:4.3.5" checksum: 68691183a91c67c4102db20139f3b5af288c59b4b11eb2239d712aae99dc6c1cecaeebcb0c012b44489771be05fecba21e79f65af4b3163b220239ef0af3ec49